Repository navigation
L03-13 — Restore Quick GUI coverage for the retired Widgets surfaces #231
Description
Outcome
Every command the shell contract keeps or absorbs works in the Quick editor, and every retired Widgets plugin that the product surface absorbs has a live Quick surface or a recorded decision. Sub-issues own the slices; this issue owns the contract-level gate.
Parent and boundary
Parent: #4. Owner: LoopEditor. This issue owns one bounded slice of Quick Workspace; consume accepted upstream contracts and keep PDF/verdict/publication authority with Core.
Grounding
docs/loop-shell-actions.jsondeclares 108 commands (79 KEEP, 17 ABSORB, 12 ADVANCED). Handlers are bound one id at a time (EditorHost::registerFeatureHandlers,DocumentFacade), and 72 ids have no reference anywhere inLoopEditor,LoopLibQuick, orLoopLibInteraction/sources: 62 KEEP/ABSORB and 10 ADVANCED.docs/product-surface.jsonabsorbs the deleted dimensions, output-preview, soft-proofing, editor, object-inspector, signature, redact, and scanner plugins into Quick workspaces. Theirfollow_up_issuevalues (193, 195, 66, 30, 41, 126) are legacy numbers that now resolve to unrelated reset items (see G00-01 — Re-home legacy issue provenance after the repository rename #111).docs/QUICK_PDF_PARITY.mdlists annotation/form editing, attachments and metadata editing, sanitization, optimization, signature creation, redaction, and deep inspection as excluded until typed bridges land.docs/ADR-005-product-surface-pruning-implementation-plan.mdPhase 3: full Loop information architecture remains follow-up work.
Acceptance
- Every KEEP and ABSORB command in
docs/loop-shell-actions.jsonhas a bound handler in Quick, or its disposition is changed with a recorded rationale. No command reaches the menu without a handler. - A contract check fails when a KEEP or ABSORB command has no bound handler, so the count cannot regress. Its first run records today's 62.
- Every absorbed
docs/product-surface.jsonrow names a live reset issue infollow_up_issue, ornullwith a delivered replacement surface. - Menu groups follow the Loop information architecture that ADR-005 Phase 3 left open.
- Failure case: a command that mutates a document never bypasses
CommandCatalogand the Core governed path.
Required proof
The handler-coverage contract check output at the closing SHA, plus each sub-issue's recorded evidence. Record the exact source SHA, test command or hosted run, fixture/artifact identity, and any skipped or unavailable lane. Run the repository's mapped proof and check-change gate for a PR.
Handoff
Record changed files, observed result, remaining risk, and a 1–3 sentence anti-slop review. Completion means acceptance evidence, not merely a merged implementation.
Sources
Approved master roadmap · Gap review of docs/loop-shell-actions.json against Quick command handlers, 2026-10-06.
Metadata
Metadata
Assignees
Labels
Type
Fields
Promotion stage
Activity
Revert "docs(product-surface): point the signature and scanner plugin…
mberrys commentedon Oct 11, 2026
PR 1 of 3: #267 — the handler-coverage gate and the read-only/presentation surfaces.
Landed: the contract gate (
docs/shell-handler-coverage.jsonplus the ratchet inscripts/verify-command-catalog.py, wired intoci.ymlandcheck-change.py); measure (#238); select/copy/capture (#232); display colour modes and soft proof/separations (#235 display half, #237); settings, render options and diagnostics (#239).Ratchet: the first recorded baseline is 70 unbound KEEP/ABSORB commands on
b08e2183— the epic's 62 came from a text mention-scan, while availability is the flagCommandCatalogactually enforces. #267 ratchets it to 51, and the gate fails if it moves up. PR 2 and PR 3 bring it down further; PR 3 takes it to zero.Carried forward with reasons (reported in the PR body, not hidden): isolated-plate pixels and the reference-separation comparison for #237; keyboard-only measurement placement for #238;
actionRendering_Errors,actionMagnifierandactionGetSourcestay declared for #239.Found during the work and filed separately: #265 —
UnitTestsEditorHostflakes on the sharedqttestrecipe directory across worktrees (deterministic repro inside).Next: PR 2 (
gh-231-quick-mutations: #233, #234, #242 — the #234 decision record on direct revision versus planned operation comes first) and PR 3 (gh-231-governed-fix: #236, #240, #241 ADR, plus the #235 production half), both based ongh-231-quick-coverage.Merge origin/dev into gh-231-quick-coverage
Merge origin/dev into gh-231-quick-coverage
Merge origin/dev into gh-231-quick-coverage
Merge origin/dev into gh-231-quick-coverage
Merge pull request #267 from studio-berry/gh-231-quick-coverage
chore(quick): integrate authoring slices, reconcile counts and ratchet (
refactor(interaction): unify the direct-edit gateway to one typed req…
fix(architecture): register the authoring test target and satisfy the…
mberrys commentedon Oct 11, 2026
PR 2 of 3: #271 — direct mutations through the catalog (bookmarks/links #233, annotations #234, forms/attachments/metadata #242).
CommandCatalog, fenced, with one operation-history event and rollback point per accepted edit; the governed Fix flow stays the only route for publication-affecting operations (PR 3).DirectEditRequest/DirectEditOutcome, dispatch by edit kind): the 16 bookmark/link ids, the 18 annotation ids, and the four new form/attachment/metadata ids plusactionSend_by_E_Mail(expected_action_count109 → 113).qttestflake across worktrees), replaceDocument races in-flight surface renders (use-after-free in PDFPrecompiledPage::draw) #269 (replaceDocumentraces in-flight renders).Next: PR 3 (
gh-231-governed-fix: #236, #240, #241 ADR, the #235 production half), which drives the ratchet to zero and closes the epic.chore(generated): regenerate the phase5 widgets inventory for the new…
Merge pull request #271 from studio-berry/gh-231-quick-mutations