Instead of a plan sorted by execution order, ask for one sorted by how likely you are to change each part — so the decisions worth your attention surface first and the mechanical work sinks to the bottom.
Write an implementation plan for annotation export as HTML, but lead with the decisions I'm most likely to tweak: data model changes, new type interfaces, and anything user-facing. Bury the mechanical refactoring at the bottom — I trust you on that part.
Acme · export a review's annotations as a shareable PDF or CSV · branch feat/annotation-export
Three areas where I made a judgment call you might disagree with. Each flagged choice shows the alternative I considered — toggle to compare.
Cost: ~40 KB/row for a heavy review; snapshots can go stale relative to the live thread.
Pick this if: exports are working documents, not records. One line to tell me: “use live join.”
Cost: blob lifecycle to manage; I'd add a 30-day TTL sweep (Section C, item 6).
Pick this if: storage/compliance rules make stored copies awkward.
'xlsx' or 'srt' later is one union member + one renderer.TimecodeRange lets producers export just the notes for one scene. If nobody asked for this, cutting it removes ~½ day.'wont_fix'.Why step 3 is weak: most exports will finish in under 3 seconds, so a fire-and-forget toast may feel like overkill — but a 400-annotation review with drawings takes ~20 s, which is too long to block. A hybrid (wait up to 4 s, then fall back to notify) is nicer and adds ~half a day. Your call.
The order I'd actually build it in. Every step lands green on CI; nothing user-visible ships until step 5 flips the flag.
Refactors and plumbing the feature needs. No judgment calls here — collapsed on purpose.
AnnotationSerializer from api/annotations.ts into lib/serializers/ so the export worker can reuse it. Pure move, no behavior change.CommentMarker → AnnotationMarker rename — 3 files still import the deprecated alias.annotation_exports to the fixture loader and the CI database-reset script.exports.render in workers/index.ts and add it to the dead-letter alert list.export_annotations in flags.yaml, default off.jobs/cleanup.ts (only if Choice ② stays as-is).openapi.yaml with the two new endpoints and regenerate the client.player/utils.ts to lib/time.ts — the PDF renderer needs it and shouldn't import from the player bundle.The highest-leverage replies you could send. Copy one, edit, send — I'll revise the plan.