Skip to content

tests+ci: regress guard tranche 3 — tool rows P01/B01/B02/B03/F01/L04 - #437

Merged
obj-p merged 3 commits into
mainfrom
guard-tranche-3
Jul 21, 2026
Merged

tests+ci: regress guard tranche 3 — tool rows P01/B01/B02/B03/F01/L04#437
obj-p merged 3 commits into
mainfrom
guard-tranche-3

Conversation

@obj-p

@obj-p obj-p commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Closes out guard tranche 3 of the regress matrix: the rows needing tooling the required gate's deterministic target must not depend on, in a new manual-tagged target plus a non-required CI signal job.

The target

//previewsmcp/Tests/CLIIntegrationTests:RegressToolGuardTests compiles the shared CLI harness (HARNESS_SRCS, including the new RegressRowAsserts row helpers both guard suites now share) and guards:

  • P01 — a cold 2,000-file build ticks the build-phase heartbeat (generate-sources.sh, fixture .build cleaned per run).
  • B01 — the Bzlmod fixture renders through the aquery capture, with the bazel ownership log pinned. The target pins an explicit PATH including /opt/homebrew/bin: bazel's scrubbed test env otherwise hides bazelisk, which is why the existing bazel snapshot test tool-gate skips under bazel test.
  • B02/B03 — combined and static-only XCFramework packages render on the iOS simulator (artifacts generated once per process from generate-artifacts.sh).
  • F01 — the bad-slice XCFramework fails the iOS start with the classified has no iOS simulator slice (available: ios-arm64) error; daemon stays responsive.
  • L04 — deterministic out-of-band agent death (simctl terminate) is logged as crash Add CI, release workflow, and Homebrew distribution #1, respawns, the first successful elements carries the crash notice, and the notice clears on delivery.

Tool preconditions skip locally but fail under the gate signal (RequiredGateEnforcement.enforced, the general name the sim-specific flag now delegates to), so CI can never silently skip a row. iOS rows use dedicated device index 9.

The CI job

Non-required regress-tools job runs the target on the same labels (needs: ci keeps the serial runner working the required gate first; a red here never blocks auto-merge) to build a standing flake record. Promotion into the required gate = dropping the manual tag.

Verification

  • 3x-green consecutive runs of the final code (~95s each), plus 3x on the pre-review-fold code.
  • Full local suite green, both tiers (unit + integration; CLIIntegrationTests 230s).
  • bazel test //... with both tier filters confirmed to exclude the manual target; lint exit 0.
  • Gates: /simplify (4 angles; folded: shared row asserts, once-per-process artifact generation, gate-enforcement accessor) and 4-angle adversarial correctness review (folded: flock release on the gate throw path, timeout-minutes: 90 so bazel's timeout beats job cancellation and diagnostics still run).

🤖 Generated with Claude Code

obj-p and others added 3 commits July 21, 2026 11:42
Adds RegressToolGuardTests, a manual-tagged sibling swift_test compiling
the shared CLIIntegrationTests harness, for the regress-matrix rows that
need tooling the required gate's deterministic target must not depend on:
generator scripts (P01 cold-build heartbeat, B02/B03 XCFramework renders,
F01 classified slice error), a Bazel fetch of the fixture's pinned rules
(B01, via an explicit PATH pin — bazelisk is invisible in bazel's scrubbed
test env), and an iOS simulator (L04's deterministic simctl-terminate
crash/respawn trigger, dedicated device index 9). Tool preconditions skip
locally but fail under PREVIEWSMCP_REQUIRE_DEDICATED_SIM so CI can never
silently skip a row.

The new non-required regress-tools job in ci.yml runs the target on the
same labels (needs: ci keeps the serial runner working the required gate
first) to build a standing flake record; promotion into the required gate
is dropping the manual tag.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…te accessor

/simplify fold: assertRenders/assertFails/cleanSlate/fixture move to
RegressRowAsserts (compiled into both guard targets via HARNESS_SRCS) so
the two suites cannot drift; the three binary-framework rows share one
per-process artifact generation; the fail-on-gate-vs-skip-locally policy
gets its general name (RequiredGateEnforcement.enforced) instead of
riding the sim-specific flag, which now delegates to it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adversarial review fold: provisionSimulator releases the host-wide sim
flock on the RequiredDeviceUnavailable throw path (a leaked LOCK_EX
self-deadlocks the remaining iOS rows for 10 minutes each);
regress-tools timeout-minutes rises to 90 so a hung test hits bazel's
3600s timeout (step failure -> diagnostics step) before job
cancellation would skip it; doc notes for the artifact task's
.serialized dependency and CoreSimulatorHygiene's actual lock contract.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@obj-p obj-p added the merge Run CI and auto-merge (squash) on success label Jul 21, 2026
@obj-p
obj-p enabled auto-merge (squash) July 21, 2026 16:31
@obj-p
obj-p merged commit aa4d46b into main Jul 21, 2026
2 of 3 checks passed
@obj-p
obj-p deleted the guard-tranche-3 branch July 21, 2026 16:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge Run CI and auto-merge (squash) on success

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant