Repository navigation
fix(workflow): precheck + snapshot path-launched runs, resurface terminal failures - #199
Merged
Merged
Conversation
…inal failures, clarify manual Close three long-standing orchestration-launch gaps: 1. Precheck now covers workflowPath (workspace-local AND pack), not just inline `source`. An unparseable workflow file fails the launch synchronously with actionable feedback instead of dying asynchronously at rehydration (V8 compile gate: `new NodeVM.Script(body)`). 2. Workspace-local workflowPath runs are snapshotted to .t3team-runs/<runId>/workflow.ts so the run is self-contained and self-healable. Both inline-source and workspace-path launches now produce that snapshot, so canReplaceEphemeralSource (keyed on the snapshot path) is satisfied for both — repair and corrected-source resume are no longer silently disabled for path-launched runs. 3. Terminal failure notices re-surface on the launch thread's busy->idle transition (stable message id, <=30min window, idempotent), so a failure posted mid-turn is not buried. 4. Manual now states agent()/askAgent()/askUser() suspension is durable control flow, not an error to catch or retry. Verified: 49/49 tests green, lint/format/typecheck clean on touched files, all four fixes present in the built server bundle, deterministic harness run against real probe files.
…breakpoint
At a 240px viewport the workflow-live-card's meta row squeezed the monospace
slug + "·" + live status ("Scheduled") past the card's own edge. The slug is
now display:none below the card's existing @sm/workflow-live-card (24rem /
384px) narrow/wide switch and reappears at wide widths, matching the row's
existing stacked -> row transition. The "·" separator hides with it so no lone
dot dangles; the live status shows at every width.
- T3TeamWorkflowNameChip: new optional className, merged onto its root span.
- live card meta row: slug chip + separator carry
`hidden @sm/workflow-live-card:inline`.
- regression test: the live card hides the slug + separator below the
breakpoint (wait.until step -> "Scheduled").
Verified: tsgo typecheck clean, vp check 0 errors, target test green, and the
generated bundle's @container rule measured live (chip display:none at a 157px
container, visible at 480px).
Contributor
Thread transfer impact
This comment will update automatically after the next completed run. |
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.
Problem
From a real incident (thread
fbdb583b, run1b57cb41), three independentorchestration-launch defects surfaced:
at rehydration with an opaque
SyntaxError, no actionable feedback.disabled for path-launched runs — the gate was keyed on a specific
snapshot path that only inline-source launches produced.
the failure after the launch turn ended, so the user saw 40+ minutes of silence.
Root-cause audit showed all three are longstanding gaps, not fresh regressions:
the path-based
canReplaceEphemeralSourcegate dates todeea85942, and theprecheck (
fc8316f96) only ever covered inlinesource.Fixes
Fix 1 — Precheck covers
workflowPath.t3team-workflowRunPathAuthorize.tsnow reads + prechecks both workspace-local (case 2) and pack (case 3) workflow
files before launch.
t3team-workflowSourcePrecheck.tsadds a V8 compile gate(
new NodeVM.Script(body)) —ts.transpileModuledoes not throw on syntaxerrors, only the V8 compiler does. An unparseable file now fails the launch
synchronously with the full actionable manual attached.
Fix 2 — Snapshot for ephemeral path-launched runs. Workspace-local
workflowPathruns are snapshotted to.t3team-runs/<runId>/workflow.tsvia anew
persistEphemeralWorkflowSourcehelper. Both inline-source and workspace-pathlaunches now produce the snapshot, so
canReplaceEphemeralSource(keyed on thesnapshot path) is satisfied for both — repair and corrected-source resume work for
path-launched runs. Pack-recipe paths are prechecked but not snapshotted
(managed/bundled code, in-place execution).
Fix 3 — Terminal failure resurfacing. New
t3team-workflowTerminalResurface.ts: when the launch thread transitionsbusy→idle, the most recent failed run (≤30 min window) is re-posted under the
stable
t3team-wf-result:<runId>message id. Idempotent, one per run per uptime,no new agent turn.
Fix 4 — Manual clarification.
t3team-workflowManual.tsstates thatagent()/askAgent()/askUser()suspension is durable control flow, neveran error to catch or retry.
Files
t3team-toolBrokerWorkflowRunTools.tst3team-workflowRunPathAuthorize.tst3team-workflowSourcePrecheck.tst3team-workflowTerminalResurface.tst3team-workflowTerminalResurface.test.tst3team-workflowCompletionMessage.tst3team-workflowEngineReactor.tst3team-workflowManual.tst3team-workflowRunPathAuthorize.test.tst3team-workflowSourcePrecheck.test.tsVerification
terminal-resurface, completion).
typecheck errors in untouched files (
server.ts,t3team-distribution.ts)exist at
mainHEAD independent of this change.node t3team-additive-guard.mjs) green.all four fixes confirmed present in the built
server-v9hqUzN7.mjsbundle;deterministic harness against real probe files confirmed Fix 1 (sync reject),
Fix 2 (snapshot), Fix 3 (boundary).