Repository navigation
test(coverage): split gap rows into owed work and accepted limitations - #3717
Conversation
Every coverage-gap row is now one of two kinds: a known-gap row is owed work and must carry a tracking issue that owns it; a new accepted-gap row states a non-empty reason why no evidence lane will cover it and has no tracking issue. Enforce both in a shared manifest gate. Linux (9 rows) and web (1 row) carried rows pointing at closed issues #1915 and #1900; each states its permanent limitation instead, so the closed constants are removed. macOS moves doctor, shutdown, events, test, trace, and react-native to accepted limitations per the #1916 decision, keeping the scheduled interaction rows on the open umbrella. tvOS keeps all 38 rows as owed work on #1914.
Size Report
Startup median (7 runs, lower is better):
|
There was a problem hiding this comment.
All reported issues were addressed across 10 files
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
|
The macOS Not blocking, and you can take or leave these: the PR body says the six macOS rows moved "per the #1916 decision", but #1916 is open, still lists them, and records no such decision, so please update that issue or link the decision. Linux shutdown, logs, install, reinstall, push, record and install-from-source are admission refusals that web already pins with The open thread on declarations.ts:408 still stands and is the same issue as above. The thread on coverage-classification.ts:50 does not apply: an offline unit gate cannot check whether an issue is open, the closed #1900 and #1915 constants are deleted, and the remaining constants are fixed values in evidence.ts, so please resolve it. CI is still running, with ten jobs queued or in progress and no failures yet, so I can't attribute anything to this change. There are no conflicts. I did not run the coverage suites or check:affected, so the planted-red and green claims in the PR body are unverified. I also did not check the macOS reasons for doctor, events, trace and react-native against daemon tests, or the Linux trace and artifacts claims against handler code. Before merge, please fix or drop the false macOS |
… accepted reasons The CI macOS replay lane runs agent-device test with --report-junit and gates on its exit status, so the test row is closeable with real lane evidence and stays known-gap on #1916. Each accepted-gap reason now states the absence it claims against the repository's lanes, and the gate's docstring encodes that rule.
|
Fixed in 8f4a7b7 (gate result will be recorded in the body when it completes at that head):
|
|
This PR is ready at 8f4a7b7. The earlier findings from 2f9c56f are fixed: the macOS test row is now a known gap on #1916, and the closed #1900 and #1915 constants are gone. Not blocking: the five remaining macOS accepted-gap reasons in declarations.ts (doctor, shutdown, events, trace, react-native) are prose claims like "no macOS lane invokes the command". They are true now, and a later lane that adds one of these commands would be forced to make a live claim, but the reason text would not be rechecked on its own (Linux trace is the same). You can update #1916 to drop the five rows, or link the decision comment in the PR body, or leave it. Of the open review threads, the P2 on the macOS test row is fixed at this head and can be resolved. The P2 on the offline issue-open check does not apply: an offline gate cannot check whether an issue is open, the closed constants are deleted, and coverage-classification.ts enforces the link as ADR 0011 does, so it can be resolved too. Smoke Tests is still running at 8f4a7b7. The diff touches only the coverage manifests, the classification helper and the coverage smoke tests, so a failure outside a coverage suite would most likely be unrelated. The last head's only failure was an iOS deep-link fixture flake (APP_NOT_RUNNING). There are no conflicts. The only thing left before merge is for Smoke Tests to finish green. I did not run the coverage suites, check:affected or the planted-red proofs, so those PR-body claims are unverified. I checked the "pinned by daemon tests" clauses only for events and trace, not doctor. I did not recheck the Linux unsupported-platform claims from the earlier review. |
|
#3720 added the uninstall row with `linux.gap(...)` after #3717 had removed the Linux known-gap builder, so main fails to load the coverage manifest (`TypeError: linux.gap is not a function`). Uninstall belongs to the app-deployment family the Linux runtime leaves unavailable, so it is an accepted limitation like install, reinstall and install-from-source. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Summary
One rule for platform command-coverage gaps: every gap row is either owed work (
known-gap, carrying atrackingIssuethat names an open owning issue) or an accepted limitation (newaccepted-gaplevel, carrying a non-emptyreasonwhy no evidence lane will cover it and no tracking issue). A shared manifest gate,assertCoverageGapRowsAreOwned, enforces both, mirroring thegap:waiver rule ADR 0011 already enforces for interaction guarantees.Linux's 9 gap rows and web's 1 pointed at the closed #1915 and #1900; each now states its permanent limitation as an accepted limitation, and the closed constants are removed:
shutdown,logs,install,reinstall,push,record,install-from-source: the Linux runtime declares those operation familiesunsupported-platform-leaf(verified viainspectFacts), so the commands refuse at admission and no lane can observe success.artifacts: local-CLI lane outputs are caller-owned paths; request finalization only inventories remote-transport artifacts or the sparse-snapshot fallback screenshot, which no Linux lane observes.trace:handleTraceCommandnever binds a device runtime, and neither Linux lane carries a trace step.macOS moves doctor, shutdown, events, trace, and react-native to accepted limitations, each reason checked against the lanes (the replay and both provider scenarios carry no such step); find, fill, type, focus, longpress, swipe, diff, batch, test, and replay stay
known-gapon the open #1916, so the one-constant assertion still holds. tvOS keeps all 38 rows as owed work on #1914 (fact inspection shows those operations are admitted on tvOS; none is clearly not applicable). Test-only; no runtime behavior. 10 files touched, all intest/integration/command-coverage/with its platform manifests and smoke tests.Validation
Tested at
8f4a7b7aa99d1a88f2a609062b805e8e26e6164f. Planted-red proof under the new rule before reclassification: aknown-gaprow without a tracking issue failed withmacOS replay: a known-gap row must carry a tracking issue that owns the work; an accepted row with an empty reason failed withmacOS trace: an accepted-gap row must carry a non-empty reason. Both reverted; all six coverage suites then passed (Linux 6, web 8, macOS 7, tvOS 7, Android 10, iOS 14), and the web entry type dropping itsknown-gapvariant makes a regressed row a compile error.pnpm check:affected --run --head 8f4a7b7aa— all runnable checks passed withexactCommit=true(format, lint, typecheck, fallow, integration-node, macos-coverage, vitest-related; device/GitHub-authoritative lanes are CI's obligation). At the first head 2f9c56f,pnpm check:affected --run --head 2f9c56f1apassed the same way and CI went green after one rerun of an unrelated iOS deep-link flake (APP_NOT_RUNNINGin the fixture smoke). Published classification summaries are unchanged in all four buckets. Not device-facing; no device run applies.Refs #1914 #1916
🤖 Generated with Claude Code