feat(cua): subject provisioning phase events - kill the silent boot#268
Merged
Conversation
…263) Emits started/completed events at every provisioning phase boundary (clone / upload / extract / install / build / serve start / readiness / seed-step groups) through an injectable onPhase hook, with a default stderr sink (lane-prefixed under fan-out), and persists the completed trail into bundle.events using the existing RunEvent shape. Shared-world routes gain the same seam via SharedWorldLabHooks.onPhase. A single-lane provisioned run previously printed nothing between command start and exit for up to 25+ minutes of clone/install/build budgets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 8, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #263.
A single-lane provisioned run printed nothing between invocation and exit for up to 25+ minutes (clone 5m + install 10m + build 10m + ready 3m budgets; zero output in the provisioning pipeline). Operators could not tell priming from hung. Todays real-app local-tree validation ledger hit exactly this: every failed iteration was slower to diagnose because installs were silent.
What
SubjectPhaseEvent+ injectableonPhasehook threaded through the shared provisioning pipeline and both provisioning routes: started/completed atsubject.clone/subject.upload/subject.extract/subject.install/subject.build/subject.serve.started/subject.ready/subject.state.<when>boundaries. One event per boundary, never per poll tick.CuaActorLabHooks.onPhaseandSharedWorldLabHooks.onPhase. stdout JSON purity untouched.bundle.events(existingRunEventshape,cua-lab.subject.*types, durationMs in the message, level warn on failure). No schema change.Review
Implemented + hostile-reviewed + fixed in-branch: the review's two medium findings (missing shared-world DI seam with untested unconditional stderr; zero fan-out coverage) are fixed with a seam + 2-lane attribution test proving no cross-lane leakage. Two lows accepted and noted: direct stderr (matches the existing
emitPreflightPlanprecedent;CliIothreading is tracked under #262 territory), and the rerun-subset lane-prefix cosmetic.Proof
pnpm check: 873 passed / 10 skipped, build OK.pnpm public-surface:scan: ok (428 files).🤖 Generated with Claude Code