Repository navigation
Commit f4b0183
chore(gates): make test guards and CI selectors fail on the violations they exist for (#4356)
* fix(platforms): build exec failure details through execFailureDetails
simctl boot/bootstatus readiness failures dropped the processExitError flag,
so normalizeError never surfaced the stderr excerpt. The Android discovery and
Vega inventory wraps set the flag by hand; route all four through the host-kit
helpers.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test: skip chmod-forced failure tests when running as root
Root ignores file modes, so these seven tests could not force their read or
write failure. Apply the skip guard their sibling tests already use.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test(coverage): bind Android contract evidence to repository test files
Every Android command-contract owner is now a repository path whose file
carries the test name literally. Lifecycle evidence claims only the seven
rows that cite it; the orphan evidence modules are gone and their test
titles are inline.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test(interaction-contract): fail when a coverage claim names no registered test
Each contract file now registers a test that compares its manifest claims
with the tests the file registered. The Maestro direct-selector test derives
its title from the manifest instead of a second literal copy.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test(daemon-client): route loopback skips through skipWhenLoopbackUnavailable
54 tests skipped through a raw supportsLoopbackBind probe, which ignores
AGENT_DEVICE_REQUIRE_LOOPBACK_TESTS. They now use the guarded helper.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* docs(providers): make the BrowserStack and AWS Device Farm snippets typecheck
The client config has no platform or device field; pass them to apps.open.
Narrow the artifacts result before reading cloudArtifacts.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* fix(check-affected): derive public-surface sources from build entries
Both selectors mapped ./dist/src/X.js to src/X.ts, which names files that
do not exist, so an edit to a real entry such as src/sdk/index.ts never
selected the package gate. One helper now maps exports through buildEntries.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* fix(ci): keep both sides of a rename in device-lane selection
A file moved out of a device-owned root reported only its destination and
could skip the lane its source owned. Match check:affected with --no-renames.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* fix(mutation): fail selection when git diff against the base fails
An unknown base ref produced an empty change set, so the PR lane selected
no mutants and passed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* build: drop tsdown chunk groups for removed source paths
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* ci: run provider integration once and sweep fresh torture seeds
The Coverage job already runs the provider-integration project under
coverage, so the Integration job no longer repeats it. The nightly torture
lane now starts at run number x runs unless a seed start is dispatched.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* chore(gates): make guards fail on the violations they exist for
- exec-wrap-guard scans packages/*/src as well as src/.
- package-exports compares the full exports map with the supported list.
- Android command-contract evidence must claim exactly the rows citing it.
- The interaction-contract gate requires every manifest's contract file
to check its claims are registered.
- Output-economy waivers name the base value they raise from, so a spent
waiver is inert; the spent waivers are removed.
- The doc-snippet guard compiles the provider pages with complete programs.
- CI sets AGENT_DEVICE_REQUIRE_LOOPBACK_TESTS for the unit suite.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test: inject the write and read failures instead of skipping as root
The seven chmod-forced failure tests now fail through a seam that works
under any uid: a failing store write, a readFileSync or unlinkSync spy on
the one claim file, or a plain file where the resource directory belongs.
No root skip remains.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* fix(platform-android): keep the adb classification over xcrun details
execFailureDetails spreads xcrun-not-found details last, which could replace
the discovery hint. The adb hint and reason now win. Add a boot-failure test
for the simctl readiness path.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* ci(torture): validate dispatch inputs and use a fixed seed stride
runs and seed-start must be digits before they reach bash arithmetic or
GITHUB_ENV. Each run owns [run_number * 20000, +runs), and runs is capped at
the stride, so ranges stay disjoint when dispatches change runs.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* chore(gates): tighten review follow-ups on the new guards
- The interaction-contract gate checks the AST: the sibling manifest is
imported and passed to a top-level assertCoverageClaimsRegistered call.
- Coverage registration counts only tests that execute (run or only).
- packageEntrySources reads only own buildEntries keys.
- The device-lane rename test blanks GITHUB_OUTPUT and GITHUB_STEP_SUMMARY.
- The output-economy README shows the waiver structure; the doc-snippet
guard states why replay-e2e.md is left out.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* fix(platform-android): keep the missing-tool hint when no adb pattern matches
Hint precedence is now the adb classification, then the xcrun missing-tool
hint, then the caller's fallback, so the hint agrees with the reported
reason. The adoption test asserts the exact unconfirmed-cleanup reason.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test(test-kit): make skipWhenLoopbackUnavailable the only loopback check
supportsLoopbackBind is no longer exported. The remaining 12 raw probes
(root src, MCP and recorded-daemon tests) use the guarded helper, so
AGENT_DEVICE_REQUIRE_LOOPBACK_TESTS fails them instead of skipping.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* chore(gates): check interaction-contract claims in a project setup hook
A setup file's afterAll loads the sibling <name>.coverage.ts of every
*.contract.test.ts and diffs its claims against the tests that ran. A
missing manifest fails the file, and an active -t filter skips the diff.
The per-file calls and the AST meta-test are gone. The two contract tests
that claim no matrix cell drop the .contract suffix.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* chore(gates): register the contract setup files with Fallow
The interaction-contract project loads its setup files by path, so Fallow
lists them as dynamically loaded. listenOnLoopback awaits the listening
event, and the Vega parser is no longer exported; nothing imported it.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
* test(interaction-contract): require a contract test beside every coverage manifest
The registration hook checks a manifest only from its contract file, so an
orphaned manifest would still count toward the matrix unchecked.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016qAu53rMak1bXMuR5U2gF4
---------
Co-authored-by: Claude <[email protected]>1 parent 7a5b4eb commit f4b0183
71 files changed
Lines changed: 616 additions & 498 deletions
File tree
- .github/workflows
- examples/sdk
- packages
- capture-kit/src
- capture-admission/__tests__
- durable-capture
- daemon-client/src/__tests__
- daemon-contracts/src
- daemon/src
- resources/__tests__
- server
- __tests__
- http
- platform-android/src
- platform-apple/src/readiness
- platform-vega/src
- test-kit/src
- scripts
- __tests__
- check-affected
- gate
- lib
- mutation
- src
- __tests__
- contracts
- mcp/__tests__
- test
- integration
- command-coverage
- interaction-contract
- provider-scenarios
- output-economy
- repo-guards
- website/docs/docs
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
76 | 76 | | |
77 | 77 | | |
78 | 78 | | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
79 | 82 | | |
80 | 83 | | |
81 | 84 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| 307 | + | |
| 308 | + | |
307 | 309 | | |
308 | 310 | | |
309 | 311 | | |
| |||
388 | 390 | | |
389 | 391 | | |
390 | 392 | | |
391 | | - | |
392 | | - | |
393 | | - | |
394 | | - | |
395 | 393 | | |
396 | 394 | | |
397 | 395 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
| 25 | + | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
43 | | - | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
44 | 47 | | |
45 | 48 | | |
46 | 49 | | |
| |||
53 | 56 | | |
54 | 57 | | |
55 | 58 | | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
56 | 76 | | |
57 | 77 | | |
58 | 78 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
16 | 19 | | |
17 | 20 | | |
18 | 21 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | 1 | | |
4 | 2 | | |
5 | 3 | | |
| 4 | + | |
6 | 5 | | |
7 | 6 | | |
8 | 7 | | |
| |||
175 | 174 | | |
176 | 175 | | |
177 | 176 | | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
194 | 196 | | |
195 | 197 | | |
196 | 198 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
2 | | - | |
3 | 1 | | |
4 | 2 | | |
5 | 3 | | |
6 | 4 | | |
| 5 | + | |
7 | 6 | | |
8 | 7 | | |
9 | 8 | | |
| |||
88 | 87 | | |
89 | 88 | | |
90 | 89 | | |
91 | | - | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
92 | 98 | | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
104 | 108 | | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
111 | 113 | | |
112 | 114 | | |
113 | 115 | | |
114 | | - | |
| 116 | + | |
115 | 117 | | |
116 | 118 | | |
117 | 119 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
141 | 141 | | |
142 | 142 | | |
143 | 143 | | |
144 | | - | |
145 | | - | |
146 | | - | |
| 144 | + | |
147 | 145 | | |
148 | 146 | | |
149 | 147 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
99 | | - | |
100 | | - | |
| 98 | + | |
101 | 99 | | |
102 | 100 | | |
103 | 101 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
| 10 | + | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
62 | | - | |
| 62 | + | |
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
86 | | - | |
| 86 | + | |
87 | 87 | | |
88 | 88 | | |
89 | 89 | | |
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
120 | | - | |
| 120 | + | |
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
| |||
163 | 163 | | |
164 | 164 | | |
165 | 165 | | |
166 | | - | |
| 166 | + | |
167 | 167 | | |
168 | 168 | | |
169 | 169 | | |
| |||
184 | 184 | | |
185 | 185 | | |
186 | 186 | | |
187 | | - | |
| 187 | + | |
188 | 188 | | |
189 | 189 | | |
190 | 190 | | |
| |||
218 | 218 | | |
219 | 219 | | |
220 | 220 | | |
221 | | - | |
| 221 | + | |
222 | 222 | | |
223 | 223 | | |
224 | 224 | | |
| |||
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
245 | | - | |
| 245 | + | |
246 | 246 | | |
247 | 247 | | |
248 | 248 | | |
| |||
278 | 278 | | |
279 | 279 | | |
280 | 280 | | |
281 | | - | |
| 281 | + | |
282 | 282 | | |
283 | 283 | | |
284 | 284 | | |
| |||
314 | 314 | | |
315 | 315 | | |
316 | 316 | | |
317 | | - | |
| 317 | + | |
318 | 318 | | |
319 | 319 | | |
320 | 320 | | |
| |||
0 commit comments