Why
Sometimes text boxes, callouts and inserted comments are included in a master spec and exist in draft form, but must be deleted before Final — with routing semantics (a text box addressed to a reviewer is deleted by that reviewer; one addressed to editors by editors). SpecR covers the comments third of this item well; text boxes and callout shapes are entirely unmodeled — the parser never extracts them, so their content is invisible to review and silently absent from round-trip output.
Verified current state (2026-07-07):
Proposed scope
- Detect text-box/callout content at parse time (drawing + VML paths in the OOXML body) and retain it — per ADR-038, as source facts or a raw sidecar anchored to the nearest paragraph, never silently dropped.
- Surface a per-spec/per-project report of text boxes with their text (so a reviewer can route each one to whoever owns its removal), either extending the open-comments report shape or as a coordination finding — decide in impl.
- Feed the issuance-readiness gate (companion issue): text boxes present → Final blocker/warning.
Non-goals
Pointers
ADR-038 (hidden OOXML retained), #291/#293/#300 (the retain-and-warn family this extends), src/parser/docx/comments.ts + open-comments.ts (report shape to mirror).
Why
Sometimes text boxes, callouts and inserted comments are included in a master spec and exist in draft form, but must be deleted before Final — with routing semantics (a text box addressed to a reviewer is deleted by that reviewer; one addressed to editors by editors). SpecR covers the comments third of this item well; text boxes and callout shapes are entirely unmodeled — the parser never extracts them, so their content is invisible to review and silently absent from round-trip output.
Verified current state (2026-07-07):
comments.xmlextraction, feat(parser): extract DOCX margin comments (comments.xml) as paragraph-anchored facts #128), open-comments report per spec/project (src/db/queries/open-comments.ts), closure detection (src/ast/comment-closure.ts),accept_comment_as_note(src/db/queries/reclassify.ts:357).w:txbxContentinsidemc:AlternateContent/VML shapes) and callouts: zero handling anywhere insrc/parser/— verified absent in the audit. Never filed as an issue.Proposed scope
Non-goals
Pointers
ADR-038 (hidden OOXML retained), #291/#293/#300 (the retain-and-warn family this extends),
src/parser/docx/comments.ts+open-comments.ts(report shape to mirror).