close
Skip to content

test: add Linux platform command coverage manifest - #1921

Merged
thymikee merged 2 commits into
mainfrom
codex/1426-linux-coverage-manifest
Aug 20, 2026
Merged

test: add Linux platform command coverage manifest#1921
thymikee merged 2 commits into
mainfrom
codex/1426-linux-coverage-manifest

Conversation

@thymikee

@thymikee thymikee commented Aug 20, 2026

Copy link
Copy Markdown
Member

Summary

Add an exhaustive Linux desktop command-coverage manifest over all 54 public commands. It records 5 existing replay-live commands, 20 command-contract citations from the existing Linux provider/runtime/unit evidence, 11 descriptor capability denials, and 18 explicit known gaps grouped in #1915. The static catalog, denial, evidence, and report gate runs in the existing Node integration PR lane. The pure classification summary helper is shared by the Android, web, and Linux manifests while each platform keeps its hand-rolled row union; Linux also reuses the canonical LINUX_DEVICE fixture. No live scenarios were added and no macOS manifest files were changed. Part of #1426.

Validation

  • pnpm install --frozen-lockfile && pnpm build
  • pnpm format
  • pnpm check:quick
  • Android, web, and Linux coverage gates: 25 tests passed.
  • Linux unit evidence: 6 files / 36 tests passed.
  • Linux provider scenario: 1 test passed.
  • Planted-red proof: removing only install-from-source failed the catalog completeness invariant and changed expected counts from 54 total / 18 gaps to 53 total / 17 gaps; restoring it passed.
  • pnpm check:gate-manifest passed.
  • pnpm check:affected --run: all runnable checks passed; Linux replay and other device/native/coverage lanes remain GitHub-authoritative.

Review follow-up is committed at 5db8b0e78: the redundant Linux workflow rerun was removed because the existing Node integration PR lane already executes the gate. The open tvOS PR should adopt the shared helper before its separate platform branch merges.

@github-actions

github-actions Bot commented Aug 20, 2026

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
JS raw 2.34 MB 2.34 MB 0 B
JS gzip 769.4 kB 769.4 kB 0 B
npm tarball 894.5 kB 894.5 kB 0 B
npm unpacked 3.12 MB 3.12 MB 0 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 26.3 ms 27.9 ms +1.5 ms
CLI --help 68.4 ms 72.7 ms +4.2 ms

Top changed chunks: no changes in the largest emitted chunks.

@thymikee

Copy link
Copy Markdown
Member Author

Review — approve with one required coordination item and one cut

Read the manifest, gate, and both workflow diffs against the #1426 ground rules; verified #1915 exists and the ios.yml routing question independently.

What's right — this is the strongest gate of the three so far:

  • Live claims are parsed, not pattern-matchedparseReplayScriptDetailed over the actual .ad replay, then set-membership per claimed command. A comment or a renamed command can't fake evidence. Better than the web/tvOS substring approach; the macOS manifest should copy this. ✓
  • Denial rows carry owner + declaration citations (CapabilityDeclarationEvidence) checked against source, and the denial set is mechanically diffed against isCommandSupportedOnDevice. Both directions guarded. ✓
  • Planted-red proof is in the PR body (54/18 → 53/17 and red) — exactly what the ground rule asks. ✓
  • Honest counts: 5 live (what 01-desktop-smoke.ad actually runs), 20 contract, 11 denial, 18 gaps grouped in test: close Linux platform command-coverage gaps from #1426 #1915 (exists, open). 5+20+11+18=54. ✓
  • The ios.yml paths-ignore additions follow the exact pattern of the existing android-**/web-e2e/** entries and sit under the ci: give check:affected real Apple ownership rules and route ios.yml on them (#1781 A9-2) #1857 routing gate's enforcement (check:gate-manifest green). Verified this is family-path territory the gate owns, not the escape hatch. ✓

Required — the fourth copy has arrived. buildCoverageClassificationSummary is now duplicated verbatim in Android, web, tvOS (#1919, in flight), and here. The #1426 ground rule says hand-rolled is fine until a fourth copy makes it painful — that condition is now met, and macOS will be the fifth. Since #1919 and this PR are both open, coordinate: whichever merges second folds all four copies into a shared test/integration/support/coverage-classification.ts (pure ~25-line function; row-type unions stay per-platform). Flagged the same on #1919 — one of the two PRs owns it, not neither.

Cut — the linux.yml step is a duplicate execution. smoke-linux-coverage.test.ts already runs on every PR via the test:integration:node glob in ci.yml, whose paths-ignore is docs-only — there is no PR that triggers linux.yml but skips ci.yml. Running it again before Xvfb adds a redundant execution with no extra guarantee, which is the A2 shape (a lane that reruns what already ran on the same commit). Drop the step, or state in the workflow comment what it catches that the integration lane doesn't.

Nit: the gate hand-rolls a LINUX_DESKTOP device literal while src/__tests__/test-utils/device-fixtures.ts already exports LINUX_DEVICE (the tvOS gate reuses its shared fixture). Use the fixture unless its shape genuinely doesn't fit.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Aug 20, 2026
@thymikee

Copy link
Copy Markdown
Member Author

Reviewed at d2ddf1677ef1c50a16a1ba2256211915aeecadfd against #1426 and #1915 — clean. The manifest exhaustively classifies all 54 public commands; the 5 live claims match the existing Linux replay, contract and denial rows point to the existing Linux evidence and descriptor matrix, and all 18 gaps match the single scoped follow-up. The catalog gate is omission-sensitive and CI routes it through the Linux lane while preserving iOS path isolation. Linux smoke and every completed check are green. Code review is ready; iOS Smoke is still in progress, so merge readiness awaits that check.

@thymikee

Copy link
Copy Markdown
Member Author

Follow-up at d2ddf1677ef1c50a16a1ba2256211915aeecadfd: iOS Smoke has cleared, all checks are green, and the PR is now merge-ready.

@thymikee

Copy link
Copy Markdown
Member Author

Addressed in 5db8b0e78:

  • Centralized only buildCoverageClassificationSummary in test/integration/support/coverage-classification.ts; Android, web, and Linux still keep separate hand-rolled row unions.
  • Removed the duplicate Linux workflow execution; the existing Node integration PR lane already runs test/integration/*.test.ts, including the Linux gate.
  • Reused the canonical LINUX_DEVICE fixture.
  • Re-ran the Android/web/Linux coverage gates, pnpm check:quick, pnpm check:gate-manifest, and pnpm check:affected --run; all runnable checks passed.

The open tvOS branch should import the shared helper before it merges.

@thymikee

Copy link
Copy Markdown
Member Author

Re-reviewed at 5db8b0e78: the shared classification helper is the right small cut, platform row types remain local, and Linux now reuses the canonical fixture without a duplicate workflow execution. The 54-command gate and its #1915 gaps remain exhaustive and omission-sensitive. All checks are green; merge-ready.

@thymikee
thymikee merged commit 2a9a4ee into main Aug 20, 2026
28 checks passed
@thymikee
thymikee deleted the codex/1426-linux-coverage-manifest branch August 20, 2026 19:48
@github-actions

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-08-20 19:48 UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant