fix(session-flow): carry the user's original goal across the handoff chain - #1906
Conversation
…chain A handoff chain preserved state perfectly and intent not at all. The goal appeared in exactly one place — a line inside the six-line Resumption brief, a section whose own contract is to restate facts owned below — so every hop re-derived it from a conversation that had already lost it, and what survived was the phase, the bundle, and the checklist in front of the writer. Each resumed session then optimized the wrong objective faithfully, with nothing on any resume path testing the work against what it was for. reference/structure.md now opens with body section 1, Original goal: the user's statement quoted verbatim with its date, an Amended: line changeable only on an explicit dated statement from whoever set the goal, and a drift-check line tying the first remaining action back to the goal. Immutability is enforced as a step rather than an adjective — whenever previous_handoff is emitted, the write procedure opens that file from disk THIS turn and reproduces its quote and amendments unchanged. Completion criteria now require both halves, the goal-state a criterion establishes and the command or diff that settles it, with process milestones demoted to a subordinate sub-heading. Sections renumbered 1-14. The alignment check on resume lives in three complementary homes, none of them sufficient alone. The resume-prompt directive carries it on every resume, including the dominant bare paste that invokes no skill at all. keep-going owns the interrupted path, running goal alignment before it restates position. reanchor covers the deliberate "is this still current" pass as a fifth premise check, and because it reads a chain it is the only one that can compare the quotes across links and report a re-derived goal as drift; it reports and hands to keep-going, never amending a goal or re-deriving the next action. handoff's post-write checklist, its gotchas index, and eval cases across all three skills carry the same rules, so a writer is checked against them. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…-link test Verifier finding: "nothing else on any resume path ever tests it" was pre-fix rationale that survived into post-fix text — false by this same change's design, and contradicted by the file's own "Does not solely own the goal check" item. Rescoped to the one test only reanchor performs: the cross-link quote comparison. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Claude finished @kyle-sexton's task in 4m 21s —— View job Reviewing PR #1906
SummaryThis is a docs-only change (skill prose, evals JSON, changelog, version bump — no executable surface, so this stays out of the fresh-docs mandate's contract-surface scope). The renumbering sweep (§1 → §14) is thorough and internally consistent — I checked every FindingThe new mandatory prompt-only "goal line" isn't reconciled with the pre-existing
The eval suite bakes in an implicit resolution — Everything else — the immutability/disk-read mechanism, the three-homes goal-alignment coverage (resume directive, |
|
Claude finished @kyle-sexton's task in 1m 48s —— View job Security review — PR #1906
Scope reviewed: all 11 files in the diff ( FindingsNone. This PR is a docs/skill-prose change only:
One observation, not raised as a finding: the new rule mandates quoting the user's goal verbatim and forbids paraphrasing it across handoff hops. Verbatim, unsummarized propagation of user-authored text through files that get re-read into a fresh agent context on every resume is, in the abstract, the kind of pattern that can carry an embedded instruction forward if the "user" turns out to be untrusted (e.g., goal text sourced from an external, attacker-influenced channel). This isn't a new vector introduced by this PR, though — the handoff engine already reads these files as directive content on resume regardless of this change, and the "goal" is explicitly scoped to what the interactive user themselves typed. Flagging only for awareness, not as an actionable defect in this diff. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 24c4db56ab
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Claude has reviewed this PR 3 times. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
plugin-gate remediation: the catalog block in docs/CATALOG.md is generated from plugin manifests and went stale with the version bump. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 2m 23s —— View job Reviewing PR #1906 (re-review after synchronize)
SummaryThe only change since the prior review pass is Open findings carried forward (unresolved as of HEAD
|
|
Claude finished @kyle-sexton's task in 1m 41s —— View job Security review — PR #1906
Scope reviewed: all 12 files in the diff — FindingsNone.
One observation, carried forward from the first pass on this PR and still applicable, not raised as an actionable finding: mandating verbatim (never paraphrased) propagation of user-authored goal text across handoff files that get re-read into a fresh agent context on every resume is, in the abstract, the shape of pattern that can carry embedded instructions forward if that text's source were ever untrusted. This PR doesn't introduce a new vector — the handoff engine already reads these files as directive content on every resume regardless of this change, and the "goal" is explicitly scoped to text the interactive user themselves typed, not an external or attacker-reachable input. |
F1 (claude[bot]): the /goal-vs-goal-quote ordering on prompt-only was
stated only in eval 8's expectation. save-point.md now states it where
the prompt-only goal rule is introduced ("Original goal — mandatory on
BOTH paths") and in the "Combining both" paragraph: an active /goal
keeps the first line, the verbatim goal quote comes next, then the
remaining-work bullets. The handoff checklist's prompt-only line carries
the same clause.
F2 (Codex): keep-going ran its goal-alignment check in step 4, after
step 3 had already resumed/restarted off-thread work — so it could
restart work serving a drifted goal and discover the misalignment after.
Goal alignment is now its own step 3, after the read-only
inventory/inspection (steps 1-2) and before any recovery action
(step 4); reconcile and report renumber to 5-6. The nothing-off-thread
case, save-point.md's cross-reference, and eval 7 track the new
structure.
F3 (Codex): the prompt-only path required a singular verbatim goal line,
discarding the amendment history structure.md's Amended field preserves.
save-point.md now defines the inline form: with recorded amendments the
prompt carries the original dated quote plus every dated amendment
("amended <date>:" lines), verbatim and copied unchanged on later hops;
a bare single line is valid only when no amendment exists. The handoff
checklist asserts the same.
F4 (Codex): handoff eval 8's prompt supplied neither a quotable user
goal nor an active /goal, so its expectations could not be exercised.
The prompt now states the goal verbatim and an armed /goal, and the
expectations match the F1 ordering rule.
CHANGELOG [0.17.23] extended to cover the ordering rule, amendment
carriage, and keep-going's dedicated goal-alignment step (no version
bump; unreleased).
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ow summaries Verifier observation: keep-going's one-line flow summary and the README command index elided the new stage without contradicting it; folded in so neither reads as inventory-then-straight-to-recovery. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 21s —— View job Reviewing PR #1906 (re-review after synchronize)
SummaryTwo commits landed since the last pass, F1 — goal-line vs. F2 — keep-going goal-check ordering ( F3 — amendment-history carriage on prompt-only ( F4 — handoff eval 8 setup (
Cross-reference sweep: confirmed nothing else in this PR's changed files references keep-going's step numbers by number ( VerdictNo new findings. All four previously-open items are resolved with the actual instruction text, not just in eval expectations, which was the core of the original concern (this PR's own thesis is that unstated rules are the drift mechanism — the fix now practices what it's fixing). Nothing outstanding from this review. |
|
Claude finished @kyle-sexton's task in 55s —— View job Security review — PR #1906 (re-review after synchronize, HEAD
|
|
Review findings addressed:
Also: plugin-gate catalog drift fixed in f0b672d (regenerated docs/CATALOG.md); verifier-observed summary elision folded in 4b7beb9. Fix batch independently verified (fresh-context Fable, 6 criteria, rationale withheld): 6/6 PASS, empty defect list. |
…tion audit with the live prompting guide (#1908) ## Summary Doc-alignment roster row 1: align repo doctrine and the instruction audit with the live **Prompting Claude Fable 5** page (platform.claude.com). The live page was re-fetched and is byte-identical to the repo's 2026-07-29 capture, so this ships what the page implies and the repo lacked — nothing in the repo misstated it. **playbooks 0.6.9** (fable-5 doctrine): - `context-economy.md` — the late-session decay ladder gains a fourth bullet naming a remaining-context number as a NON-signal (the page's "Rare cases of context-budget concern"). Scoped to the model's own initiative; an instructed stop outranks it under meta-rule 1, so sibling plugins that deliberately gate on the window keep working. - `communication.md` — new assessment-versus-change gate ("Assessment is a deliverable; a fix is a different one"): report-and-stop on problem/question framings, evidence bar before state-changing actions. Repairs `opus-4-8.md`'s pre-existing pointer to a section that did not exist. - `orchestration.md` — non-blocking dispatch: keep working while independent workers run; continue an oriented worker rather than respawn. - `execution.md` — bound on defensive over-building: boundary-only validation, no cleanup around a bug fix, no abstraction before the second real caller, no shim where changing the code is available. - `SKILL.md` — core-doctrine lines for all four (they fire before their chapters' load triggers plausibly would). **claude-config 0.21.1** (criteria 1.9.0, IA-2 model-delta cluster): - New row **I8-d** (short-turn assumptions, Model scope fable-5) with three fences keeping it off output-length instructions, surface-owned latency requirements, and documents about the pattern. - I8 base row gains the delegation throttle as a named worked instance, fenced for caps with non-model rationale. - SKILL.md discloses both as lane-only (not scanner-seeded). Deliberately NOT shipped, with verified reasoning: the IA-2(d) context-budget audit row — it fires on nine deliberate in-repo context-gating surfaces (context-guard exists on purpose), and its config half (`totalTokensReminder` / `CLAUDE_CODE_TOTAL_TOKENS_REMINDER`) appears on no official settings/env-var/model-config/context-window page. The finding shipped as the context-economy doctrine bullet instead. ## Test plan - Docs-only (skill prose, criteria, changelogs, version bumps). - Producer verification: both audit-instructions test suites pass (46 + 41 checks), skill-quality gate zero errors with warning counts identical to base, markdownlint clean, zero new I6 bare-prohibition candidates, all cross-references resolve. - Independent fresh-context Fable verifier, rationale withheld, 7 binary criteria — including its own live-page fetch and byte-diff, verbatim-quote checks on criteria sources, independent reproduction of every producer verification claim, both IA-2(d) non-ship legs verified (in-repo deliberate instances enumerated; env vars absent from live official docs), eval-convention check (does not extend to these surfaces — verified against the last five doctrine commits and #1881/#1882/#1884), and merge-readiness vs current main — **7/7 PASS, empty defect list**. ## Related - No linked issue. - Doc-alignment per-document loop, roster row 1 (memory-tier roster; rows 2+ follow). Companion context: #1899, #1906 (drift root-cause fixes that preceded the loop). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ims (#1909) ## Summary Doc-alignment roster row 2: **Introducing Claude Fable 5 and Claude Mythos 5** (the canonical platform page; the anthropic.com launch post is a separate roster row, read as corroborating voice only). **playbooks 0.6.10** — the fable-5 calibration chapter's Mythos 5 worked instance gains its custody record. It carried two true observations (Mythos row in the thinking per-model matrix; known-but-unselectable registry entry in Claude Code) with no account of why they differ. The introducing page states the reason — "Claude Mythos 5 is not generally available: it is offered in limited availability to approved customers in Project Glasswing" (fetched 2026-08-03) — added as one pointer + one quoted sentence + one date, per the section's own no-pasted-matrix rule. The negative the instance rests on was verified rather than assumed: the matrix page carries the row and no access-availability signal (its only availability language, a zero-data-retention note, covers both models identically). **claude-config 0.21.2 / criteria 1.10.0** — audit-instructions row I10's Model-scope ground moves from an omission reading to the introducing page's positive statement ("Claude Mythos 5 does not include these classifiers"), cited as a deliberate two-step chain — the introducing page owns the classifier-set exclusion for Mythos 5; the refusals-and-fallback page owns `reasoning_extraction`'s membership in that set — because collapsing them would rebuild the near-miss scope inheritance the catalog's own model-scoping block forbids. Scope conclusion unchanged (`fable-5`). Deliberately not done: no docpage-digest slice produced (queue entry retained); no duplicate Fable/Mythos criterion (the worked instance is that rule); boris vendor surfaces untouched; row 11's IA-4 evidence left to its own row. ## Test plan - Docs-only (skill prose, criteria, changelogs, version bumps); markdownlint clean; both plugin.json parse. - Producer ran a fresh-context reviewer (rationale withheld) that fact-checked both quotes against live pages and audited against criteria.md's own binds-on-touch rules. - Independent fresh-context Fable verifier, 7 binary criteria — its own live fetches of all three pages, verbatim-quote checks (both quotes character-exact), verified-negative adjudication, two-step chain integrity, version/changelog accuracy, hygiene — **7/7 PASS**; its one minor wording defect ("no availability signal of any kind" overclaimed vs the page's ZDR note) fixed in `e6ffa40fb2`. - Rebased onto main after #1908; version stack asserted: playbooks 0.6.10 > 0.6.9, claude-config 0.21.2 > 0.21.1, criteria 1.10.0 > 1.9.0. ## Related - No linked issue. - Doc-alignment per-document loop, roster row 2. Predecessors: #1908 (row 1), #1899/#1906 (drift root-cause fixes). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Summary
Fixes the remaining two root causes behind the doc-corpus campaign drift (owner diagnosis, 2026-08-03): handoff chains preserved state perfectly and intent not at all, and no resume path re-anchored on the goal.
reference/structure.md) — new mandatory section 1, Original goal: the user's goal quoted verbatim with its date (never paraphrased;RECONSTRUCTEDmarker when the user never wrote one sentence), an Amended field that changes only on the goal-setter's explicit statement with prior goals retained, and a one-sentence tie from the first remaining action to the goal. Body renumbered to 14 sections; every numeric reference swept.skills/handoff/SKILL.md) — successor handoffs copy the goal from the prior file on disk, unchanged, never rebuilt from conversation; the post-write checklist enforces it, and the prompt-only path carries the verbatim goal line between the rails.reference/save-point.md) checks it on every resume;keep-goingmakes it the FIRST reconciliation check on the interrupted path;reanchortreats it as a premise, performing the cross-link quote comparison only it can do (a re-derived quote reports as drift — the paraphrase IS the drift), disclaims sole ownership, and hands misalignment to keep-going. None of the three licenses amending the goal on the session's own authority.0.17.23.Test plan
24c4db56.Related
/interviewto decisions and scoped verification ceremony; this PR makes the goal durable across handoff chains and re-anchored on every resume. session-flow0.17.23is serialized directly atop fix(planning,playbooks,session-flow): bound /interview to decisions and scope verification to what ships #1899's0.17.22.🤖 Generated with Claude Code
https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X