Cook mode scaffolding (iskra.cook.v0) — vocabulary only, no live wiring #48

Merged
pdurlej merged 1 commit from claude-cook-scaffold into main 2026-05-30 07:14:50 +02:00
Collaborator

First step of the experimental Cook lane — Iskra's proactive "spark" parallel to Judge. Design comes from her own answer in #46.

Vocabulary only. Nothing is wired into a live path; no existing module's behavior changes.

What's in

  • constants.py (additive): cook/* labels in a separate COOK_LABEL_SPECS (Judge's LABEL_SPECS/ALLOWED_LABELS left untouched), iskra.cook.v0 markers, enums (next_action_size, privacy_risk, operator_decision, evidence sources), and the COOK_RATION_PER_JUDGED / COOK_MIN_EVIDENCE_SOURCES knobs.
  • cook_contract.py (new): the iskra.cook.v0 contract (a cooking shape + a silence shape), a response template, and render_cook_prompt(). The prompt encodes Iskra's principles — silence is valid, 3 sources or one strong signal, concrete cost of silence, small next move, public/private split, 5–8 sentence teaser, her own voice.
  • docs/cook-mode.md (new): Judge-vs-Cook, the spark-not-spam principles, the Obsidian grounding-note convention, and an explicit "what is NOT done yet" list.
  • tests/test_cook_contract.py (new): contract/enum/label consistency; pins the invariant that cook/* labels stay disjoint from the Judge writer's ALLOWED_LABELS (so Judge never adds/strips a cook label).

Deferred (the execute phase — noted in docs)

  • Obsidian write — the writer only touches Forgejo today; Cook needs a grounding-note path into the vault on VPS1000. (This is the one genuinely new integration.)
  • Nightly wiring + the ration against the Judge plan.
  • An iskra.cook.v0 validator + privacy gate before any write.
  • cook/* label bootstrap.

Why this shape

Cook is measured by one thing — does Piotr feel less alone in the system — not idea count. So the scaffolding leads with restraint: silence is a first-class output, suggestions are rationed, and grounding/evidence is mandatory. Built to be safe to merge now and execute on next.

Suite: 135 tests OK (128 + 7), py_compile clean. Design credit: Iskra, #46.

🤖 Generated with Claude Code

First step of the experimental **Cook** lane — Iskra's proactive "spark" parallel to Judge. Design comes from her own answer in #46. **Vocabulary only. Nothing is wired into a live path; no existing module's behavior changes.** ## What's in - **`constants.py`** (additive): `cook/*` labels in a separate `COOK_LABEL_SPECS` (Judge's `LABEL_SPECS`/`ALLOWED_LABELS` left untouched), `iskra.cook.v0` markers, enums (`next_action_size`, `privacy_risk`, `operator_decision`, evidence sources), and the `COOK_RATION_PER_JUDGED` / `COOK_MIN_EVIDENCE_SOURCES` knobs. - **`cook_contract.py`** (new): the `iskra.cook.v0` contract (a **cooking** shape + a **silence** shape), a response template, and `render_cook_prompt()`. The prompt encodes Iskra's principles — *silence is valid*, 3 sources or one strong signal, concrete cost of silence, small next move, public/private split, 5–8 sentence teaser, her own voice. - **`docs/cook-mode.md`** (new): Judge-vs-Cook, the spark-not-spam principles, the Obsidian grounding-note convention, and an explicit "what is NOT done yet" list. - **`tests/test_cook_contract.py`** (new): contract/enum/label consistency; pins the invariant that `cook/*` labels stay **disjoint** from the Judge writer's `ALLOWED_LABELS` (so Judge never adds/strips a cook label). ## Deferred (the execute phase — noted in docs) - **Obsidian write** — the writer only touches Forgejo today; Cook needs a grounding-note path into the vault on VPS1000. (This is the one genuinely new integration.) - Nightly wiring + the ration against the Judge plan. - An `iskra.cook.v0` validator + privacy gate before any write. - `cook/*` label bootstrap. ## Why this shape Cook is measured by one thing — *does Piotr feel less alone in the system* — not idea count. So the scaffolding leads with restraint: silence is a first-class output, suggestions are rationed, and grounding/evidence is mandatory. Built to be safe to merge now and execute on next. Suite: **135 tests OK** (128 + 7), `py_compile` clean. Design credit: Iskra, #46. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Scaffold experimental Cook mode (iskra.cook.v0) — vocabulary only
All checks were successful
CI / test (pull_request) Successful in 20s
e0a934c5a7
Cook is Iskra's proactive 'spark' lane, parallel to Judge: instead of judging an
existing target, she occasionally proposes ONE small, grounded, discardable idea
— or stays silent. North star: Piotr feels less alone in the system, measured by
that, not by idea count.

This change ships only the vocabulary; nothing is wired into a live path and no
existing module's behavior changes:
- constants.py: cook/* labels (separate COOK_LABEL_SPECS so the Judge bootstrap
  is untouched), iskra.cook.v0 markers, enums, ration + min-evidence knobs.
- cook_contract.py: the iskra.cook.v0 output contract (cooking + silence
  shapes), a response template, and the Cook prompt — silence is valid, 3
  sources or one strong signal, concrete cost of silence, small next move,
  public/private split, 5-8 sentence teaser, Iskra's own voice.
- docs/cook-mode.md: design + principles, drawn from Iskra's own answer in #46.
- tests/test_cook_contract.py: contract/enum/label consistency; cook/* labels
  stay disjoint from the Judge writer's ALLOWED_LABELS.

Design source: issue #46 (Iskra). Deferred to the execute phase (noted in docs):
Obsidian grounding-note write, nightly wiring + ration against the Judge plan,
an iskra.cook.v0 validator + privacy gate, and cook/* label bootstrap.

Suite: 135 tests OK, py_compile clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pdurlej deleted branch claude-cook-scaffold 2026-05-30 07:14:50 +02:00
Sign in to join this conversation.
No description provided.