I don’t really see an alternative to your solution. This will require some custom coding to work, and jobs can be finicky to update, especially if you don’t allow changes on engineered jobs.
Good news, is that I’ve already done the hard part of figuring out the basics of job edits for you. This post is intended for use in a mass-edit function. The specific snippet will wipe a job’s MOM/BOM and re-pull latest rev (never actually used it since it was easier just to tell people to stop firming jobs months ahead of when we actually needed to start work), but you can clip that part out and add a method call for adding your op.
For your use, you may not need to go down the mass edit route. You could trigger it based on changes to the demand link. Without the loop requirement, you could probably even use the widgets if you’re so inclined.