Categories:
Attempt 3
Back to durable goal · Attempt history
Targeted failure
The integrated lifecycle test assumes that a 150 ms invocation remains active after a new worker has started. Under parallel Bazel execution, the candidate can become ready only after that invocation has completed, making the expected drain count nondeterministic.
Hypothesis
A file-backed started/release handshake in the test package will establish the in-flight precondition independently of worker startup speed and prove that a generation swap reports and drains exactly one old invocation.
Exact inputs and plan
- Parent commit:
e3e74cb1e573867825347292bf17220a5b9a4a0c - Parent tree:
079a0c27b86527c6950cc75b0c8b9dbf572d3e4b - Base commit:
7ad2704cd27757355ab36ec8eb1bb27ef9e1d91d - Preserve all product runtime, storage, MCP, package, and build files.
- Extend only the lifecycle test fixture with optional started/release paths.
- Wait for the started marker before activation, keep the old handler blocked
until after the drain count is observed, and release it in
finallyso a failed assertion cannot strand teardown. - Rerun the focused lifecycle target first, then the entire recorded regression set on one amended candidate.
Planned review packet
- The test contains no fixed request duration or startup race.
- Replacement reports exactly one draining call.
- The old call returns v2 and the next call returns v3.
- Cordis cleanup still runs exactly once.
- All project, buildifier, and diff checks pass on the same commit tree.
Verdict
Accept as the final local candidate. Commit
7cfef0719075ad372c3bb257ad216b35770356b2 and tree
34153eca0f582af5c641f81bf8c7209b0045ab9a pass the entire evidence plan.
Remote delivery is pending separate authorization.
Work performed
- Replaced the 150 ms elapsed-time assumption with workspace-local started and release markers in the lifecycle test fixture.
- Proved the new v3 generation serves calls while the old v2 invocation remains blocked, then released v2 and proved its Cordis effect disposes exactly once.
- Applied Buildifier’s mechanical label ordering to the runtime test data.
- Amended the sole feature commit through the delivery adapter without changing its direct base parent.
Verification evidence
git diff --check HEAD^..HEAD: pass on the prepared commit.bazel_agent bazel query //projects/mcp_cordis:all: pass.bazel_agent bazel test //projects/mcp_cordis:runtime_test: pass after the deterministic gate.bazel_agent bazel test //projects/mcp_cordis:all --nocache_test_results: pass, four of four tests executed on the exact commit.bazel_agent bazel build //projects/mcp_cordis:all: pass, all nine targets.bazel_agent bazel test //:buildifier_test --nocache_test_results: pass.- The delivery receipt records direct base
7ad2704cd27757355ab36ec8eb1bb27ef9e1d91d, prepared head7cfef071, and prepared tree34153eca.
Acceptance results
- Pass: documented standalone Bazel-built stdio MCP server.
- Pass: lifecycle tests exercise real Cordis contexts, Fibers, and effects.
- Pass: one runtime and one stdio connection exercise the complete mutable package lifecycle.
- Pass: immutable versions, rollback, deterministic drain, and exact cleanup are exercised.
- Pass: isolated project and scratch roots are exercised.
- Pass: promotion and subprocess restart recovery are exercised.
- Pass: three justified starter packages and all eight tools execute.
- Pass: fixed discovery/invocation gateways work without reconnecting.
- Pass locally: all recorded checks and the real stdio transcript pass on the exact candidate tree. Remote repository handoff remains pending authority.
Progress, approach, and process audit
- Criterion 9 improved from a nondeterministic failure to a forced, exact-tree pass; no technical criterion regressed.
- The explicit gate improves evidence in absolute terms: candidate startup can take arbitrarily longer than the old call without changing the assertion.
- Independent code review and the measured zero drain count both supported retaining transactional start-before-swap behavior.
- No defect survived two attempts. The elapsed-time test and Buildifier order are resolved in their first corrective cycle.
- Adapter and root Buildifier startup dominated wall time; warmed focused tests remained under ten seconds. Further local optimization would not change the delivery critical path.
- The only remaining action is remote publication, which cannot proceed from a rebase-only authorization.