-
Notifications
You must be signed in to change notification settings - Fork 1
review: remove task mode; scripted dispatch is the only mode #289
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
1ec0e1e
0ab6768
88b429d
de7a588
40ccfb0
bc9e544
2e61884
9576ea1
34bedb5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| "review": minor | ||
| --- | ||
|
|
||
| Scripted dispatch becomes the only mode: task mode is removed. The lifecycle trial (webapp#41010 vs #41013) was the acceptance instrument the scripted probe was gated on; it matched task mode's verdicts on all three rounds while running 8-17% cheaper with a tighter, deduplicated comment set, so the migration plan's slice-4 shape is now the pipeline, not the probe. The orchestrator prompt drops roughly 780 lines of turn-by-turn protocol (Phases 1-3, the task-mode Steps 4-6 and Step 9 record spec, and the budget-guardrail choreography whose shed arithmetic the dispatcher already owns); Steps 4-6 remain as short stubs naming the plan CLI as their owner so cross-references stay stable, and the thread-staging spec moves inline into the Step 3 pipeline. The ROUTING `dispatch` dial is retired: a leftover line warns and is ignored (`routing.json` always carries `dispatchMode: "scripted"`), and the Agent SDK install pre-step is unconditional. Consumers adopt the flip with their next release bump; rollback is release-level pinning. The next seeded lifecycle trial on this pin doubles as the live validation of the structured-final, open-thread-suppression, and deterministic-cache-write follow-ups, which have not yet run live together. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -233,7 +233,8 @@ export type CacheRecordResult = { | |
| /** | ||
| * Set on refusals that indicate something WRONG (a corroboration | ||
| * mismatch, missing staged facts), as opposed to the benign no-ops | ||
| * (task mode, gate-blocked run). The CLI surfaces these as `::warning`: | ||
| * (a gate-blocked run, a run that ended before the plan). The CLI | ||
| * surfaces these as `::warning`: | ||
| * a systematic refusal permanently stales the fingerprint and forces | ||
| * full-depth reviews indefinitely, which must not stay invisible. | ||
| */ | ||
|
|
@@ -264,7 +265,7 @@ export const runCacheRecordCli = ( | |
| | undefined; | ||
| if (plan === undefined) { | ||
| return skip( | ||
| "no submission plan staged (task mode, or the run ended before the plan): the cache write stays with the orchestrator", | ||
| "no submission plan staged (the run ended before the plan): the cache write stays with the orchestrator", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. note (non-blocking): Stale module framing. The module header (lines 1–19) still describes this writer in terms of "scripted dispatch mode" and "Task mode is untouched" — language this PR retires everywhere else. Since scripted is now the only mode, the header reads as preserving a distinction that no longer exists; worth refreshing so the doc comment matches the single-mode reality. |
||
| ); | ||
| } | ||
| if (fs.existsSync(BLOCKED_SENTINEL_PATH)) { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -542,6 +542,7 @@ export const evaluateDispatchConformance = ( | |
| event?: unknown; | ||
| body?: unknown; | ||
| comments?: unknown; | ||
| skipSubmission?: unknown; | ||
| }) | ||
| : undefined; | ||
| if (planStaged !== undefined && submit === undefined) { | ||
|
|
@@ -571,11 +572,18 @@ export const evaluateDispatchConformance = ( | |
| ); | ||
| const planBody = | ||
| typeof planStaged.body === "string" ? planStaged.body : ""; | ||
| if ( | ||
| planStaged.event !== "APPROVE" || | ||
| planComments.length > 0 || | ||
| normalizeBody(planBody) !== bareApprove | ||
| ) { | ||
| // The plan CLI owns this predicate (`skipSubmission`) so the | ||
| // prompt and this gate cannot describe the skip differently — | ||
| // they diverged once, over the collapsed low-confidence section | ||
| // riding the body. Fall back to deriving it only for a plan | ||
| // staged before the field existed. | ||
| const planSkips = | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. question (non-blocking): Two small observations on the skip fallback. (a) Divergence: when a staged plan lacks |
||
| typeof planStaged.skipSubmission === "boolean" | ||
| ? planStaged.skipSubmission | ||
| : planStaged.event === "APPROVE" && | ||
| planComments.length === 0 && | ||
| normalizeBody(planBody) === bareApprove; | ||
| if (!planSkips) { | ||
| violations.push({ | ||
| code: "submission-plan-mismatch", | ||
| dimension: "verdict", | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
question (non-blocking): The changeset notes the acceptance evidence is partial (rounds 2-3 ran with correctness voided by contract drift, and #288's structured-final/suppression/cache-write follow-ups have not run live together), yet this release both deletes the task-mode fallback and carries those follow-ups' first live run. If the next seeded trial reds, release-level rollback reverts the mode removal and the unvalidated follow-ups together — confounding which regressed. Was a one-release sequencing (live-validate the follow-ups while task mode still exists as an escape hatch, then remove it) considered?