@linimin/pi-letscook 0.1.67 → 0.1.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,9 +30,9 @@ assertIncludes('extensions/completion/role-runner.ts', 'const transcription = ex
30
30
  assertIncludes('extensions/completion/role-runner.ts', 'env: { ...process.env, PI_COMPLETION_ROLE: params.role },');
31
31
  assertIncludes('extensions/completion/role-runner.ts', 'async function runContextProposalAnalystSubprocess(');
32
32
  assertIncludes('extensions/completion/role-runner.ts', 'export async function analyzeContextProposalWithAgent(');
33
- assertIncludes('extensions/completion/index.ts', 'import { analyzeContextProposalWithAgent, runCompletionRole } from "./role-runner";');
33
+ assertIncludes('extensions/completion/index.ts', 'import { analyzeContextProposalWithAgent, generateCookHandoffWithAgent, runCompletionRole } from "./role-runner";');
34
34
  assertIncludes('extensions/completion/index.ts', 'const result = await runCompletionRole({');
35
- assertIncludes('extensions/completion/index.ts', 'await analyzeContextProposalWithAgent({');
35
+ assertIncludes('extensions/completion/index.ts', 'const raw = await generateCookHandoffWithAgent({');
36
36
  assertNotIncludes('extensions/completion/index.ts', 'const systemPromptTemp = await writeTempFile(runCwd, "pi-cook-proposal-analyst-", CONTEXT_PROPOSAL_ANALYST_SYSTEM_PROMPT);');
37
37
  assertNotIncludes('extensions/completion/index.ts', 'const invocation = getPiInvocation(args);');
38
38
  assertNotIncludes('extensions/completion/index.ts', 'async function loadAgentDefinition(');
@@ -119,14 +119,14 @@ capsule = {
119
119
  "Keep startup proposal confirmation approval-only."
120
120
  ],
121
121
  "acceptance": [
122
- "Scaffold .agent/profile.json, .agent/state.json, .agent/plan.json, .agent/active-slice.json, and .agent/verification-evidence.json for the smoke fixture.",
122
+ "Write the workflow control-plane files under .agent, including profile.json, state.json, active-slice.json, verification-evidence.json, and the slice backlog file, for the smoke fixture.",
123
123
  "Keep scripts/smoke-test.sh and kickoff-prompt coverage truthful for packaged bootstrap."
124
124
  ],
125
125
  "risks": [
126
- "Smoke-test bootstrap should stay anchored to the fresh explicit startup-plan preview."
126
+ "Smoke-test bootstrap should stay anchored to the fresh explicit handoff."
127
127
  ],
128
128
  "notes": [
129
- "Keep the smoke fixture aligned with the shipped startup-plan-driven startup contract."
129
+ "Keep the smoke fixture aligned with the shipped explicit-handoff-only startup contract."
130
130
  ],
131
131
  "handoff_kind": "implementation_workflow_handoff",
132
132
  "first_slice_goal": "Scaffold canonical completion files and verify the packaged startup contract.",
@@ -140,14 +140,14 @@ capsule = {
140
140
  "verification_commands": [
141
141
  "npm run smoke-test"
142
142
  ],
143
- "why_this_slice_first": "The packaged startup-plan entry path must work before later workflow verification can run.",
143
+ "why_this_slice_first": "The packaged explicit-handoff startup path must work before later workflow verification can run.",
144
144
  "task_type": "completion-workflow",
145
145
  "evaluation_profile": "completion-rubric-v1",
146
- "why_cook_now": "The startup plan is concrete enough to bootstrap canonical workflow files."
146
+ "why_cook_now": "The startup handoff is concrete enough to bootstrap canonical workflow files."
147
147
  }
148
148
  messages = [
149
149
  {"role": "user", "content": "Please prepare the packaged smoke-test bootstrap path and tell me when it is ready for /cook."},
150
- {"role": "assistant", "content": "This bootstrap path is ready for /cook. Run /cook to confirm the startup plan.\n\n```cook_handoff\n" + json.dumps(capsule, ensure_ascii=False, indent=2) + "\n```"},
150
+ {"role": "assistant", "content": "This bootstrap path is ready for /cook. Run /cook to confirm the startup brief.\n\n```cook_handoff\n" + json.dumps(capsule, ensure_ascii=False, indent=2) + "\n```"},
151
151
  ]
152
152
  print(json.dumps(messages, ensure_ascii=False))
153
153
  PY
@@ -175,7 +175,7 @@ chooser = Path(sys.argv[5])
175
175
 
176
176
  assert not Path('.agent').exists(), 'startup /cook inline-args rejection should leave canonical state untouched'
177
177
  assert not routing.exists(), 'startup /cook inline-args rejection should not open active-workflow routing before a workflow exists'
178
- assert not proposal.exists(), 'startup /cook inline-args rejection should not emit a startup-plan proposal snapshot'
178
+ assert not proposal.exists(), 'startup /cook inline-args rejection should not emit a startup-brief proposal snapshot'
179
179
  assert not chooser.exists(), 'startup /cook inline-args rejection should not open the existing-workflow chooser before a workflow exists'
180
180
  assert '/cook no longer accepts inline arguments.' in output, 'startup /cook inline-args rejection should explain the bare-only entry contract'
181
181
  PY
@@ -189,7 +189,7 @@ PI_COMPLETION_TEST_DRIVER_PROMPT_PATH="$KICKOFF_PROMPT" \
189
189
  pi --session "$BOOTSTRAP_SESSION" -e "$PKG_ROOT" -p "/cook" \
190
190
  >"$TMPDIR/pi-completion-smoke-bootstrap.out" 2>"$TMPDIR/pi-completion-smoke-bootstrap.err"
191
191
 
192
- for file in .agent/profile.json .agent/state.json .agent/startup-plan.json .agent/startup-plan.md .agent/plan.json .agent/active-slice.json .agent/verification-evidence.json; do
192
+ for file in .agent/profile.json .agent/state.json .agent/startup-brief.json .agent/plan.json .agent/active-slice.json .agent/verification-evidence.json; do
193
193
  [[ -f "$file" ]] || { echo "missing canonical bootstrap file: $file" >&2; exit 1; }
194
194
  done
195
195
 
@@ -209,8 +209,7 @@ profile = json.loads(Path('.agent/profile.json').read_text())
209
209
  state = json.loads(Path('.agent/state.json').read_text())
210
210
  plan = json.loads(Path('.agent/plan.json').read_text())
211
211
  active = json.loads(Path('.agent/active-slice.json').read_text())
212
- startup_plan = json.loads(Path('.agent/startup-plan.json').read_text())
213
- startup_plan_md = Path('.agent/startup-plan.md').read_text()
212
+ startup_brief = json.loads(Path('.agent/startup-brief.json').read_text())
214
213
  evidence = json.loads(Path('.agent/verification-evidence.json').read_text())
215
214
  kickoff = Path(sys.argv[1]).read_text()
216
215
 
@@ -224,28 +223,28 @@ assert active['task_type'] == expected_task_type, 'active-slice.json task_type m
224
223
  assert active['evaluation_profile'] == expected_eval_profile, 'active-slice.json evaluation_profile mismatch after bootstrap'
225
224
  assert active['implementation_surfaces'] == [], 'active-slice.json should scaffold empty implementation_surfaces'
226
225
  assert active['verification_commands'] == [], 'active-slice.json should scaffold empty verification_commands'
226
+ assert state['workflow_entry_status'] == 'active', 'state.json should mark workflow entry active after /cook Start'
227
+ assert state['workflow_entry_source'] == '/cook', 'state.json should record /cook as workflow entry source'
228
+ assert state['startup_brief_path'] == '.agent/startup-brief.json', 'state.json should point to startup-brief.json'
229
+ assert isinstance(state['workflow_session_id'], str) and state['workflow_session_id'], 'state.json should record a workflow session id'
227
230
  brief = state['advisory_startup_brief']
228
231
  assert brief['kind'] == 'startup_brief', 'state.json should preserve the confirmed startup brief as advisory intake'
229
232
  assert brief['source'] == 'primary_agent_handoff', 'smoke bootstrap should record the explicit handoff source in advisory intake'
230
233
  assert brief['mission'] == state['mission_anchor'], 'advisory startup brief mission should match the canonical mission anchor after bootstrap'
231
234
  assert brief['scope'] == ['Materialize the canonical completion control-plane files.', 'Keep the smoke test on supported /cook startup behavior.'], 'advisory startup brief should preserve scope items'
232
235
  assert brief['constraints'] == ['Keep startup proposal confirmation approval-only.'], 'advisory startup brief should preserve constraints'
233
- assert startup_plan['artifact_type'] == 'completion-startup-plan', 'startup-plan.json should persist the approved startup plan canonically'
234
- assert startup_plan['mission_anchor'] == state['mission_anchor'], 'startup-plan.json mission anchor should match canonical workflow state'
235
- assert startup_plan['source'] == 'primary_agent_handoff', 'startup-plan.json should preserve the primary-agent startup source'
236
- assert startup_plan['scope'] == brief['scope'], 'startup-plan.json should preserve approved scope items'
237
- assert startup_plan['constraints'] == brief['constraints'], 'startup-plan.json should preserve approved constraints'
238
- assert startup_plan['planned_surfaces'] == ['.agent/README.md', 'scripts/smoke-test.sh'], 'startup-plan.json should preserve planned surfaces derived from startup hints'
239
- assert startup_plan['verification_intent'] == ['npm run smoke-test'], 'startup-plan.json should preserve verification intent derived from startup hints'
240
- assert '## Planned surfaces' in startup_plan_md, 'startup-plan.md should render planned surfaces as a readable section'
241
- assert '.agent/README.md' in startup_plan_md and 'scripts/smoke-test.sh' in startup_plan_md, 'startup-plan.md should mirror planned surfaces'
242
236
  assert brief['acceptance'] == [
243
- 'Scaffold .agent/profile.json, .agent/state.json, .agent/plan.json, .agent/active-slice.json, and .agent/verification-evidence.json for the smoke fixture.',
237
+ 'Write the workflow control-plane files under .agent, including profile.json, state.json, active-slice.json, verification-evidence.json, and the slice backlog file, for the smoke fixture.',
244
238
  'Keep scripts/smoke-test.sh and kickoff-prompt coverage truthful for packaged bootstrap.'
245
239
  ], 'advisory startup brief should preserve acceptance'
246
- assert brief['risks'] == ['Smoke-test bootstrap should stay anchored to the fresh explicit startup-plan preview.'], 'advisory startup brief should preserve startup-plan risks'
240
+ assert brief['risks'] == ['Smoke-test bootstrap should stay anchored to the fresh explicit handoff.'], 'advisory startup brief should preserve handoff risks'
247
241
  assert 'First slice goal: Scaffold canonical completion files and verify the packaged startup contract.' in brief['notes'], 'advisory startup brief should preserve the first_slice_goal in notes'
248
242
  assert 'Verification commands: npm run smoke-test' in brief['notes'], 'advisory startup brief should preserve verification_commands in notes'
243
+ assert startup_brief['artifact_type'] == 'completion-startup-brief', 'startup-brief.json artifact_type mismatch after bootstrap'
244
+ assert startup_brief['mission'] == state['mission_anchor'], 'startup-brief.json mission should match the canonical mission anchor after bootstrap'
245
+ assert startup_brief['task_type'] == expected_task_type, 'startup-brief.json task_type mismatch after bootstrap'
246
+ assert startup_brief['evaluation_profile'] == expected_eval_profile, 'startup-brief.json evaluation_profile mismatch after bootstrap'
247
+ assert startup_brief['acceptance'] == brief['acceptance'], 'startup-brief.json should preserve the confirmed acceptance list'
249
248
  assert evidence['artifact_type'] == 'completion-verification-evidence', 'verification-evidence.json artifact_type mismatch after bootstrap'
250
249
  assert evidence['subject_type'] == 'none', 'verification-evidence.json should scaffold idle subject_type'
251
250
  assert evidence['verification_commands'] == [], 'verification-evidence.json should scaffold empty verification_commands'
@@ -253,6 +252,7 @@ assert evidence['outcome'] == 'not_recorded', 'verification-evidence.json should
253
252
  assert 'Canonical routing profile:' in kickoff, 'kickoff prompt should expose canonical routing profile'
254
253
  assert f'- task_type: {expected_task_type}' in kickoff, 'kickoff prompt missing canonical task_type'
255
254
  assert f'- evaluation_profile: {expected_eval_profile}' in kickoff, 'kickoff prompt missing canonical evaluation_profile'
255
+ assert f'- workflow_session_id: {state["workflow_session_id"]}' in kickoff, 'kickoff prompt should expose canonical workflow_session_id'
256
256
  PY
257
257
 
258
258
  rm -f "$ORDINARY_SYSTEM_REMINDER" "$ORDINARY_HANDOFF_REMINDER" "$ORDINARY_AUTO_RESUME_PROMPT"
@@ -282,9 +282,8 @@ assert 'Do not proactively tell the user to run /cook' in handoff_text, 'ordinar
282
282
  assert '/cook is optional workflow mode' in handoff_text, 'ordinary handoff reminder should position /cook as optional workflow mode'
283
283
  assert 'In ordinary chat, do not load or follow completion-protocol, and do not call completion_role.' in handoff_text, 'ordinary handoff reminder should forbid workflow-role routing before explicit /cook'
284
284
  assert 'If the user wants direct implementation now, stay in ordinary chat and help directly instead of blocking on /cook.' in handoff_text, 'ordinary handoff reminder should avoid blocking implementation on /cook'
285
- assert 'the extension should call a primary-agent startup-plan synthesis step from the current task context' in handoff_text, 'ordinary handoff reminder should describe same-entry primary-agent startup-plan synthesis for /cook'
285
+ assert 'the extension should call a primary-agent handoff synthesis step from the current task context' in handoff_text, 'ordinary handoff reminder should describe same-entry primary-agent handoff synthesis for /cook'
286
286
  assert 'Do not expect /cook to infer or guess startup intent from recent discussion alone' in handoff_text, 'ordinary handoff reminder should forbid /cook-side guessing'
287
- assert 'the approved startup plan should be written into .agent and then handed to completion-regrounder' in handoff_text, 'ordinary handoff reminder should mention startup-plan persistence and regrounder slice derivation'
288
287
  assert 'do not silently rewrite discussion into canonical workflow state' in handoff_text, 'ordinary handoff reminder should preserve non-canonical ordinary-chat behavior'
289
288
  assert not auto_resume.exists(), 'ordinary non-/cook turn should not queue auto-resume before /cook activation'
290
289
  assert 'Skipped completion workflow auto-resume prompt (test mode)' not in output, 'ordinary non-/cook turn should not attempt auto-resume'
@@ -334,10 +333,12 @@ expected_task_type = 'completion-workflow'
334
333
  expected_eval_profile = 'completion-rubric-v1'
335
334
  auto_resume = Path(sys.argv[1]).read_text()
336
335
 
336
+ state = __import__('json').loads(Path('.agent/state.json').read_text())
337
337
  assert 'Resume the completion workflow from canonical state.' in auto_resume, 'auto-resume prompt should use the canonical resume workflow prompt'
338
338
  assert 'Canonical routing profile:' in auto_resume, 'auto-resume prompt should expose canonical routing profile'
339
339
  assert f'- task_type: {expected_task_type}' in auto_resume, 'auto-resume prompt missing canonical task_type'
340
340
  assert f'- evaluation_profile: {expected_eval_profile}' in auto_resume, 'auto-resume prompt missing canonical evaluation_profile'
341
+ assert f'- workflow_session_id: {state["workflow_session_id"]}' in auto_resume, 'auto-resume prompt should expose canonical workflow_session_id'
341
342
  PY
342
343
 
343
344
  python3 - <<'PY'
@@ -388,54 +389,6 @@ active['evaluation_profile'] = profile['evaluation_profile']
388
389
  active_path.write_text(json.dumps(active, indent=2) + '\n')
389
390
  PY
390
391
 
391
- python3 - <<'PY'
392
- import json
393
- from pathlib import Path
394
- path = Path('.agent/startup-plan.json')
395
- startup = json.loads(path.read_text())
396
- startup.pop('task_type', None)
397
- path.write_text(json.dumps(startup, indent=2) + '\n')
398
- PY
399
-
400
- if bash .agent/verify_completion_control_plane.sh >/dev/null 2>&1; then
401
- echo "expected control-plane verification to fail when startup-plan.json omits task_type" >&2
402
- exit 1
403
- fi
404
-
405
- python3 - <<'PY'
406
- import json
407
- from pathlib import Path
408
- profile = json.loads(Path('.agent/profile.json').read_text())
409
- startup_path = Path('.agent/startup-plan.json')
410
- startup = json.loads(startup_path.read_text())
411
- startup['task_type'] = profile['task_type']
412
- startup_path.write_text(json.dumps(startup, indent=2) + '\n')
413
- PY
414
-
415
- python3 - <<'PY'
416
- import json
417
- from pathlib import Path
418
- path = Path('.agent/startup-plan.json')
419
- startup = json.loads(path.read_text())
420
- startup['mission_anchor'] = 'drifted-startup-plan-mission'
421
- path.write_text(json.dumps(startup, indent=2) + '\n')
422
- PY
423
-
424
- if bash .agent/verify_completion_control_plane.sh >/dev/null 2>&1; then
425
- echo "expected control-plane verification to fail when startup-plan.json mission_anchor drifts from canonical workflow state" >&2
426
- exit 1
427
- fi
428
-
429
- python3 - <<'PY'
430
- import json
431
- from pathlib import Path
432
- state = json.loads(Path('.agent/state.json').read_text())
433
- startup_path = Path('.agent/startup-plan.json')
434
- startup = json.loads(startup_path.read_text())
435
- startup['mission_anchor'] = state['mission_anchor']
436
- startup_path.write_text(json.dumps(startup, indent=2) + '\n')
437
- PY
438
-
439
392
  python3 - <<'PY'
440
393
  import json
441
394
  from pathlib import Path
@@ -21,9 +21,8 @@ This skill defines shared protocol facts only. Role-specific behavior belongs in
21
21
  ## Shared Rules
22
22
 
23
23
  - Current repo truth beats stale notes, stale summaries, and conversation memory.
24
- - `startup-plan.json` is the approved workflow startup plan captured at `/cook`. Treat it as planning input only: `completion-regrounder` must reconcile it against current repo truth and derive canonical slices instead of copying it blindly into `plan.json`.
25
- - `startup-plan.md` is the human-readable rendering of that same approved startup plan and must remain in parity with `startup-plan.json`.
26
- - `plan.json` is the persistent machine-readable slice backlog. Rebuild it during every re-grounding wave from repo truth plus the approved startup plan, and keep it truthful after every committed slice.
24
+ - `startup-brief.json` is the persistent machine-readable record of the confirmed `/cook` startup intent. It is canonical workflow intake, not the canonical slice plan.
25
+ - `plan.json` is the persistent machine-readable slice backlog. Rebuild it during every re-grounding wave and keep it truthful after every committed slice.
27
26
  - `state.json` is the persistent machine-readable workflow controller. Keep `current_phase`, `continuation_policy`, `continuation_reason`, `next_mandatory_role`, and `next_mandatory_action` truthful after every transition.
28
27
  - Every slice in `plan.json` must have non-empty `acceptance_criteria` — concrete, verifiable conditions that define done. A slice without acceptance criteria is invalid and must not be selected.
29
28
  - Acceptance criteria are immutable after lock except for removing a criterion already satisfied with evidence or adding a missing criterion discovered during implementation.
@@ -78,7 +77,7 @@ If the workflow driver detects that the next mandatory action belongs to a compl
78
77
 
79
78
  1. If tracked protocol contract files are missing or first-time onboarding is required, invoke `completion-bootstrapper`.
80
79
  2. If canonical `.agent` execution state is missing, invalid, contradictory, stale, or ambiguous after compaction or recovery, invoke `completion-regrounder`.
81
- 3. If no slice is selected, invoke `completion-regrounder` to read `.agent/startup-plan.json`, reconcile `.agent/plan.json` against current repo truth, and return the next exact handoff payload.
80
+ 3. If no slice is selected, invoke `completion-regrounder` to reconcile `.agent/plan.json` and return the next exact handoff payload.
82
81
  4. If a slice is `selected` or `in_progress` and no new slice commit exists yet, invoke `completion-implementer`.
83
82
  5. If the latest committed slice lacks a review result, invoke `completion-reviewer`.
84
83
  6. If the latest committed slice lacks an audit result, invoke `completion-auditor`.
@@ -101,8 +100,7 @@ Tracked repo-contract files:
101
100
  Ignored canonical execution-state files:
102
101
 
103
102
  - `.agent/state.json`
104
- - `.agent/startup-plan.json`
105
- - `.agent/startup-plan.md`
103
+ - `.agent/startup-brief.json`
106
104
  - `.agent/plan.json`
107
105
  - `.agent/active-slice.json`
108
106
  - `.agent/slice-history.jsonl`
@@ -118,7 +116,7 @@ Read these when making completion decisions:
118
116
  - `.agent/README.md`
119
117
  - `.agent/profile.json`
120
118
  - `.agent/state.json`
121
- - `.agent/startup-plan.json`
119
+ - `.agent/startup-brief.json`
122
120
  - `.agent/plan.json`
123
121
  - `.agent/active-slice.json`
124
122
  - `.agent/slice-history.jsonl`
@@ -145,7 +143,6 @@ Canonical truth remains in `.agent/**`.
145
143
  After context compaction, suspected memory loss, stalled-role recovery, or any ambiguous completion state, the workflow driver must re-read:
146
144
 
147
145
  - `.agent/state.json`
148
- - `.agent/startup-plan.json`
149
146
  - `.agent/plan.json`
150
147
  - `.agent/active-slice.json`
151
148
  - `.agent/verification-evidence.json`
@@ -161,9 +158,11 @@ The workflow driver must invoke `completion-regrounder` before continuing whenev
161
158
 
162
159
  The exact implementer handoff now includes implementation-scope surfaces and expected verification commands in addition to the locked slice goal, acceptance, notes, and before-slice counters.
163
160
 
161
+ At workflow start, treat `.agent/startup-brief.json` as the confirmed intent anchor that regrounding must reconcile against current repo truth before selecting slices.
162
+
164
163
  The workflow driver must not continue implementation, review, audit, or stop evaluation from compacted conversation memory alone.
165
164
 
166
- After compaction or recovery, `completion-implementer` must also re-read canonical `.agent/state.json`, `.agent/startup-plan.json`, `.agent/plan.json`, `.agent/active-slice.json`, and `.agent/verification-evidence.json` before resuming work. If `.agent/active-slice.json` still contains a truthful exact handoff snapshot, continue from canonical state rather than asking the user to resend the original caller payload.
165
+ After compaction or recovery, `completion-implementer` must also re-read canonical `.agent/state.json`, `.agent/plan.json`, `.agent/active-slice.json`, and `.agent/verification-evidence.json` before resuming work. If `.agent/active-slice.json` still contains a truthful exact handoff snapshot, continue from canonical state rather than asking the user to resend the original caller payload.
167
166
 
168
167
  ## Shared Report Header
169
168
 
@@ -13,8 +13,6 @@
13
13
  ## Ignored Canonical Execution State
14
14
 
15
15
  - `.agent/state.json`
16
- - `.agent/startup-plan.json`
17
- - `.agent/startup-plan.md`
18
16
  - `.agent/plan.json`
19
17
  - `.agent/active-slice.json`
20
18
  - `.agent/slice-history.jsonl`
@@ -30,7 +28,6 @@ Read these when making completion decisions:
30
28
  - `.agent/README.md`
31
29
  - `.agent/profile.json`
32
30
  - `.agent/state.json`
33
- - `.agent/startup-plan.json`
34
31
  - `.agent/plan.json`
35
32
  - `.agent/active-slice.json`
36
33
  - `.agent/slice-history.jsonl`
@@ -133,37 +130,6 @@ Rules:
133
130
  4. `continuation_policy == paused` means the user explicitly paused the workflow.
134
131
  5. `continuation_policy == done` means canonical final stop reconciliation is complete and the workflow may stop.
135
132
 
136
- ## Fixed Startup Plan Model
137
-
138
- `startup-plan.json` carries the approved workflow startup plan captured at `/cook`.
139
-
140
- Required fields:
141
-
142
- - `schema_version`
143
- - `artifact_type` where the value is `completion-startup-plan`
144
- - `status` where the value is `approved`
145
- - `source`
146
- - `captured_at`
147
- - `mission_anchor`
148
- - `goal_text`
149
- - `task_type`
150
- - `evaluation_profile`
151
- - `scope`
152
- - `constraints`
153
- - `acceptance`
154
- - `risks`
155
- - `notes`
156
- - `planned_surfaces`
157
- - `verification_intent`
158
- - `sequencing_hints`
159
-
160
- Rules:
161
-
162
- 1. `startup-plan.json` is canonical startup intake, not canonical slice selection.
163
- 2. `completion-regrounder` must treat `startup-plan.json` as planning input, reconcile it against current repo truth, and derive canonical slices in `plan.json`.
164
- 3. `startup-plan.json` must stay aligned with the current canonical mission anchor in `.agent/state.json`, `.agent/plan.json`, and `.agent/active-slice.json` until a later `/cook` refocus or next-round startup rewrites it.
165
- 4. `startup-plan.md` is the human-readable rendering of the same approved startup plan and must remain in parity with `startup-plan.json`.
166
-
167
133
  `plan.json` carries the ordered persistent slice backlog.
168
134
 
169
135
  Required fields:
@@ -372,7 +338,7 @@ It must not, while a slice is selected or in progress:
372
338
 
373
339
  1. If tracked protocol contract files are missing or first-time onboarding is required, invoke `completion-bootstrapper`.
374
340
  2. If canonical `.agent` execution state is missing, stale, invalid, contradictory, or ambiguous after compaction or recovery, invoke `completion-regrounder` first.
375
- 3. If no slice is selected, invoke `completion-regrounder` to read `.agent/startup-plan.json`, reconcile `.agent/plan.json` against current repo truth, and return the next exact handoff payload.
341
+ 3. If no slice is selected, invoke `completion-regrounder` to reconcile `.agent/plan.json` and return the next exact handoff payload.
376
342
  4. If a slice is `selected` or `in_progress` and no new commit exists for it yet, invoke `completion-implementer`.
377
343
  5. If the latest committed slice lacks review, invoke `completion-reviewer`.
378
344
  6. If the latest committed slice lacks audit, invoke `completion-auditor`.
@@ -385,7 +351,6 @@ It must not, while a slice is selected or in progress:
385
351
  After context compaction, suspected memory loss, stalled-role recovery, or any ambiguous completion state, the workflow root must re-read:
386
352
 
387
353
  - `.agent/state.json`
388
- - `.agent/startup-plan.json`
389
354
  - `.agent/plan.json`
390
355
  - `.agent/active-slice.json`
391
356
  - `.agent/verification-evidence.json`
@@ -401,7 +366,7 @@ The workflow root must invoke `completion-regrounder` before continuing whenever
401
366
 
402
367
  The workflow root must not continue implementation, review, audit, or stop evaluation from compacted conversation memory alone.
403
368
 
404
- After compaction or recovery, `completion-implementer` must also re-read canonical `.agent/state.json`, `.agent/startup-plan.json`, `.agent/plan.json`, `.agent/active-slice.json`, and `.agent/verification-evidence.json` before resuming work. If `.agent/active-slice.json` still contains a truthful exact handoff snapshot, continue from canonical state rather than asking the user to resend the original caller payload.
369
+ After compaction or recovery, `completion-implementer` must also re-read canonical `.agent/state.json`, `.agent/plan.json`, `.agent/active-slice.json`, and `.agent/verification-evidence.json` before resuming work. If `.agent/active-slice.json` still contains a truthful exact handoff snapshot, continue from canonical state rather than asking the user to resend the original caller payload.
405
370
 
406
371
  ## Default Priority Policy
407
372
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: cook-handoff-boundary
3
- description: Ordinary-chat contract for treating `/cook` as an optional workflow mode while requiring `/cook` to capture a primary-agent-authored startup plan instead of guessing from recent discussion.
3
+ description: Ordinary-chat contract for treating `/cook` as an optional workflow mode while requiring `/cook` to use primary-agent-authored handoff data instead of guessing from recent discussion.
4
4
  ---
5
5
 
6
6
  # /cook Handoff Boundary
@@ -58,20 +58,22 @@ But even in those cases:
58
58
 
59
59
  If the user explicitly runs or clearly chooses `/cook` workflow mode, the system behavior should be:
60
60
 
61
- 1. check for a fresh explicit primary-agent `cook_handoff` preview when one already exists
62
- 2. if none exists, call a primary-agent startup-plan synthesis step immediately from the current task context
63
- 3. use that startup plan to show Start / Cancel confirmation in the same `/cook` entry
64
- 4. after Start, write the approved startup plan into `.agent/startup-plan.json` / `.agent/startup-plan.md`, then let `completion-regrounder` derive canonical slices from repo truth
61
+ 1. check for a fresh explicit primary-agent `cook_handoff`
62
+ 2. if none exists, call a primary-agent handoff synthesis step immediately from the current task context
63
+ 3. use that handoff to show Start / Cancel confirmation in the same `/cook` entry
64
+ 4. after Start, persist a canonical startup brief in `.agent/**` and treat workflow entry as active
65
+ 5. let `completion-regrounder` turn that startup brief plus repo truth into canonical slices
65
66
 
66
67
  That means:
67
68
 
68
- - `/cook` must not infer or guess canonical slices from recent discussion alone
69
- - `/cook` should use primary-agent-authored startup-plan data
70
- - `/cook` should not require a manual rerun just to consume a startup plan it can synthesize immediately from the primary-agent view
69
+ - `/cook` must not infer or guess the startup slice from recent discussion alone
70
+ - `/cook` should use primary-agent-authored handoff data
71
+ - `/cook` should persist the confirmed startup brief before regrounding begins
72
+ - `/cook` should not require a manual rerun just to consume a handoff it can synthesize immediately from the primary-agent view
71
73
 
72
74
  ## Optional Preview Behavior
73
75
 
74
- Only if the user explicitly asks for a preview startup plan or handoff capsule in ordinary chat may the primary agent provide one.
76
+ Only if the user explicitly asks for a preview startup brief or handoff capsule in ordinary chat may the primary agent provide one.
75
77
 
76
78
  Optional preview capsule format:
77
79
 
@@ -82,7 +84,7 @@ Optional preview capsule format:
82
84
  "source": "primary_agent",
83
85
  "captured_at": "<ISO-8601 timestamp>",
84
86
  "source_turn_id": "<current assistant turn id>",
85
- "mission": "<approved workflow mission>",
87
+ "mission": "<startable implementation mission>",
86
88
  "scope": ["..."],
87
89
  "constraints": ["..."],
88
90
  "non_goals": ["..."],
@@ -105,12 +107,12 @@ Optional preview capsule format:
105
107
  Notes:
106
108
 
107
109
  - `constraints` may be replaced or supplemented by `non_goals` when clearer.
108
- - `first_slice_goal`, `first_slice_non_goals`, `implementation_surfaces`, `verification_commands`, and `why_this_slice_first` are optional sequencing hints. They help `completion-regrounder` split slices later when they are already obvious, but the approved startup plan may still be startable without them.
110
+ - `first_slice_goal`, `first_slice_non_goals`, `implementation_surfaces`, `verification_commands`, and `why_this_slice_first` are required for an implementation-ready handoff.
109
111
  - Any capsule is startup intake for `/cook` only. It is not canonical `.agent/**` state, not active-slice state, and not a second repo contract source.
110
112
 
111
113
  Suggested wording:
112
114
 
113
- > We can continue directly in ordinary chat if you want. If you prefer workflow mode, run `/cook` and it should capture an approved startup plan for Start / Cancel confirmation, then hand that plan to `completion-regrounder` for slice derivation.
115
+ > We can continue directly in ordinary chat if you want. If you prefer workflow mode, run `/cook` and it should use a primary-agent handoff for Start / Cancel confirmation rather than guessing from recent discussion.
114
116
 
115
117
  ## Forbidden Behaviors
116
118
 
@@ -125,13 +127,13 @@ Before the user explicitly runs `/cook`, the primary agent must not:
125
127
 
126
128
  When the user does explicitly choose `/cook`, the system must not:
127
129
 
128
- - let `/cook` invent canonical slices from recent discussion alone
129
- - let `/cook` replace missing startup-plan data with generic transcript guessing
130
- - require a second `/cook` invocation when same-entry primary-agent startup-plan synthesis is possible
130
+ - let `/cook` invent the startup mission from recent discussion alone
131
+ - let `/cook` replace missing handoff data with generic transcript guessing
132
+ - require a second `/cook` invocation when same-entry primary-agent handoff synthesis is possible
131
133
 
132
134
  ## Relationship To `completion-protocol`
133
135
 
134
- This skill is only about pre-`/cook` ordinary-chat behavior and `/cook` startup-plan expectations.
136
+ This skill is only about pre-`/cook` ordinary-chat behavior and `/cook` handoff expectations.
135
137
 
136
138
  After the user explicitly enters `/cook`, the separate `completion-protocol` skill governs:
137
139