L03-01: keep a partial inspection visible in the one-document Quick operator shell (#27) - #197
Conversation
…erator shell (#27) Add the operator-journey proof that a missing or partial inspection stays visible and never reads as a clear document, in both the mapped product-operator-loop suite and the Quick interaction smoke. - UnitTests/tst_productoperatorloop.cpp: run the shipped representative fixture (bleed-missing.pdf) under the corpus restriction-pages profile through the real preflight engine, and assert the observable progress, the incomplete verdict, the operator summary/limitation and Core's incomplete visual treatment (never a pass). - tools/ProductQuickAccessibilitySmoke: add an incomplete-inspection fixture to the software-backend interaction smoke and chain it after the existing finding-navigation (representative) fixture. The representative open/select-find/navigate journey already shipped with the L02 slices; it is covered, not re-implemented. No Core, editor-host or QML behavior changes.
fd368ad to
2c1cd65
Compare
|
Amended after the independent review pass over the seven open slices, head The changelog summary said the Quick interaction smoke "accepts Core\x27s fail-closed Re-run at the amended head: |
…he async open Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Summary
L03-01 (#27). Keeps a missing or partial inspection visibly incomplete in the one-document Quick operator shell, and proves it in the repository's mapped proof (the
quickunit lane) and in the Quick interaction smoke.The representative journey (open a PDF, select a finding, reach its page) already shipped with the L02 slices (#22–#25) and is covered, not re-implemented. The genuine delta for #27 is the failure case: a partial/missing inspection must never read as a clear document, and progress while it runs must be observable.
Per-criterion: already satisfied vs. built here
UnitTestsProductOperatorLoop::operatorLoop_replayableTraceCompletesSaveAsAndRevalidation(opensbleed-missing.pdf, assertshasDocument()/pageCount()==1);tst_productoperatorloop.cpp:194preflightStateName()=="running"and an observedprogressChangedsignal, thenprogress==100; smoke incomplete fixture asserts mid-runprogress==40incompletewith a named operator summary and limitation; smoke asserts the samefindingNavigationMovesCanvasToTheFindingPage(page 2 navigation); Quick smokefinding-navigation-fixture(region centring + stale rejection); #23Required proof — representative and incomplete fixtures
Exact commands and observed results (host: Windows, MSVC 14.44, Qt 6.11.1, base
0f2f7599e3e17ce4e57bfdedfce85582c8f51115):Second, independent CLI check of the incomplete fixture (the corpus
restriction-pagespair), via the existing builtPdfTool:→
status preflight-incomplete exit 8,verdict.state = "incomplete",reason_code = "unsupported-scope"— i.e. the fixture really is a partial inspection, not a clear pass.Mapped unit lane (representative + incomplete), real engine through
EditorHost:→
1/1 Test #12: UnitTestsProductOperatorLoop ..... Passed 23.05 sec,100% tests passed, 0 tests failed out of 1.New slot in isolation (
UnitTestsProductOperatorLoop.exe partialInspectionStaysVisibleAndNeverLooksLikeAClearDocument -o ...junitxml):tests=3 failures=0 errors=0, the new case passed in 2.19 s.Quick interaction smoke, software backend (representative and incomplete fixtures):
→ exit 0, and both fixtures printed:
Quick interaction smoke, native backend (a11y surface unchanged; interaction fixtures correctly not run without the software backend): exit 0,
status=pass.Fixture / artifact identity:
loop-preflight/testdata/fixtures/bleed-missing.pdf(1 page).bleed-missing.pdf+ the corpus profile shapeloop-preflight/testdata/profiles/test-restriction-pages.json(restrictions.pages="2", onebleedcheck) → Coreunsupported-scope/incomplete; smoke counterpart is a generated one-page document with the same Core fail-closedunsupported-scoperesult.Changed files
UnitTests/tst_productoperatorloop.cpp— one new mapped slot (real restricted run; progress, incomplete verdict, operator summary/limitation, Core's incomplete visual treatment).tools/ProductQuickAccessibilitySmoke/main.cpp— new incomplete-inspection fixture in the software interaction lane, chained after the existing representative finding-navigation fixture.changes/codex-issue-27-quick-operator-shell.md— fragment.changes/codex-issue-27-quick-operator-shell.evidence.yaml— evidence manifest (unit:agent-policy:quick).No Core,
LoopEditorhost or QML behavior changed; the QML mirror is untouched.Lanes run / not run
agent-policy:quickunit lane (all mapped quick tests),architecture:agent-policy:quick(check-architecture.py→architecture contracts ok), the software and native Quick smoke on this host.linux-build/windows-buildpackaging lanes (dispatch on the PR), and the Windows-only native-UIA host inspection (inspect-windows-uia.ps1,--operator-native-probe) which has no workflow caller — named in the evidence manifestunresolved.check-change.pyresult: status pass, headfd368ad2== base0f2f7599;27/27checks pass,modules: ["quick"],targets: [LoopEditor, LoopLibQuick, ProductQuickAccessibilitySmoke],tests:the ten mapped quick suites (incl.UnitTestsProductOperatorLoop),focused_testspass,clang_tidy:tools/ProductQuickAccessibilitySmoke/main.cpppass,formatclean on both files,risk: standard, no protected paths..Refs #27.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.