From 6f12766db6d011152c02980680f0b59225fcc7ca Mon Sep 17 00:00:00 2001 From: garrytan Date: Sat, 3 Oct 2026 00:02:29 +0000 Subject: [PATCH] plan-tune: describe the never-ask hook truthfully; drop plan codes (s09 H8, H9, H10, M10; W4 plan-tune) W4: make the text true rather than change the hook. The consent copy and scope now say never-ask questions are auto-decided with gstack's recommendation by the question-preference hook (one-way doors still ask), and the profile itself never changes defaults. H10 removes the nonexistent --dismiss command. M10 strips cathedral/Layer/D-codes and keeps mechanisms. Template-only commit: generated SKILL.md is expected red until the regeneration commit. --- plan-tune/SKILL.md.tmpl | 54 ++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/plan-tune/SKILL.md.tmpl b/plan-tune/SKILL.md.tmpl index 9b0f82077..b632a6a69 100644 --- a/plan-tune/SKILL.md.tmpl +++ b/plan-tune/SKILL.md.tmpl @@ -42,9 +42,11 @@ this skill in plain English and you interpret. Never require subcommand syntax. Shortcuts exist (`profile`, `vibe`, `stats`, etc.) but users don't have to memorize them. -**v1 scope (observational):** typed question registry, per-question explicit -preferences, question logging, dual-track profile (declared + inferred), -plain-English inspection. No skills adapt behavior based on the profile yet. +**Scope:** typed question registry, per-question explicit preferences, +question logging, dual-track profile (declared + inferred), plain-English +inspection. Per-question preferences take effect: the question-preference hook +auto-decides `never-ask` questions (see Recent auto-decisions). The profile +itself never changes a skill's defaults. Canonical reference: `docs/designs/PLAN_TUNING_V0.md`. @@ -66,7 +68,7 @@ Each gate is guarded by a marker so the user is prompted at most once per choice `~/.gstack/developer-profile.json`'s `declared` object is empty AND `~/.gstack/.declared-setup-prompted` is missing → run `5-Q setup` below. Touch the marker after setup completes OR is declined. -3. **Dream-cycle gate (Layer 8 / cathedral T10/T11).** If +3. **Dream-cycle gate.** If `~/.gstack/projects//distillation-proposals.json` exists AND has `applied_at` missing on any proposal → run `Dream cycle review` below. Marker: each proposal carries its own `applied_at` so re-firing this @@ -130,8 +132,9 @@ explicit. > Question tuning is off. gstack can learn which of its prompts you find > valuable vs noisy — so over time, gstack stops asking questions you've > already answered the same way. It takes about 2 minutes to set up your - > initial profile. v1 is observational: gstack tracks your preferences - > and shows you a profile, but doesn't silently change skill behavior yet. + > initial profile. Questions you mark never-ask are answered with + > gstack's recommendation (one-way doors still ask); your profile is + > shown to you, not used to change defaults. > Logs stay local (`~/.gstack/projects//question-log.jsonl`). > > RECOMMENDATION: Enable and set up your profile. Completeness: A=9/10. @@ -146,7 +149,7 @@ explicit. > (skills adapting to your steering style). Enabling logs every > AskUserQuestion outcome locally to > `~/.gstack/projects//question-log.jsonl` — nothing leaves your - > machine. v1 is observational only. + > machine. Questions auto-decide only where you set never-ask. > > RECOMMENDATION: Enable and set up your profile. Completeness: A=9/10. > @@ -372,7 +375,7 @@ boil-the-ocean than 0.5 suggests", "I've gotten more careful about architecture" "bump detail_preference up". **Always confirm before writing.** Free-form input + direct profile mutation -is a trust boundary (Codex #15 in the design doc). +is a trust boundary. 1. Parse the user's intent. Translate to `(dimension, new_value)`. - "more boil-the-ocean" → `scope_appetite` → pick a value 0.15 higher than @@ -426,9 +429,8 @@ the user decides whether declared is wrong or behavior is wrong. ## Stats -Cathedral T13 surfaces: host-aware breakdown (claude hook vs codex import -vs agent-enriched), marked vs hash-only, auto-decided count, and dream -cycle cost-to-date. +Shows: host-aware breakdown (claude hook vs codex import vs agent-enriched), +marked vs hash-only, auto-decided count, and dream cycle cost-to-date. ```bash ~/.claude/skills/gstack/bin/gstack-question-preference --stats @@ -471,9 +473,8 @@ echo '---DISTILL---' Present as a compact summary with plain-English calibration status ("5 more events across 2 more skills and you'll be calibrated" or "you're calibrated"). -Surface the source breakdown so the user can see capture is real (Codex -correction — without source columns, the cathedral's "before:0 / after:>0" -claim is invisible). +Surface the source breakdown so the user can see which capture paths are +actually logging. --- @@ -510,9 +511,9 @@ Run `gstack-question-preference --write '{"question_id":"","preference": ## Audit unmarked questions -Top N hash-only question_ids by frequency. These are AUQ fires the cathedral -hook captured but cannot enforce against (no `` marker in -the skill template — D18 progressive markers). Surfacing them drives marker +Top N hash-only question_ids by frequency. These are AUQ fires the +preference hook captured but cannot enforce against (no `` +marker in the skill template). Surfacing them drives marker adoption: high-traffic unmarked questions are the next candidates to retrofit. ```bash @@ -592,20 +593,19 @@ invokes via `/plan-tune distill` / `dream`. ~/.claude/skills/gstack/bin/gstack-distill-apply --proposal N ``` -4. **On decline**: skip without marking. User can re-decide later (the - proposal stays in the file). To dismiss permanently, manually clear: - `gstack-distill-apply --proposal N --dismiss` (not implemented in T11; - for now, regenerate via next distill run with corrected free-text). +4. **On decline**: skip without marking. The proposal stays in the file and + the gate offers it again. `gstack-distill-apply` has no dismiss flag; the + next distill run overwrites the proposals file. 5. **gbrain integration.** When `mcp__gbrain__*` tools are available in this session: - On `memory-nugget` apply: `mcp__gbrain__put_page` with the nugget + - `mcp__gbrain__extract_facts` + `mcp__gbrain__add_tag` per the cathedral - plan D9 routing. Then pass `--gbrain-published true` to the bin so + `mcp__gbrain__extract_facts` + `mcp__gbrain__add_tag`. Then pass + `--gbrain-published true` to the bin so the proposals file records the mirror. - When gbrain isn't configured (no MCP tools), the bin's local file write is the durable source-of-truth and the PreToolUse hook reads it - via Layer 8 memory injection. + via memory injection. --- @@ -650,9 +650,9 @@ For background mode (e.g., the user wants to keep working): - **One-way doors override never-ask.** Even with a never-ask preference, the binary returns ASK_NORMALLY for destructive/architectural/security questions. Surface the safety note to the user whenever it fires. -- **No behavior adaptation in v1.** This skill INSPECTS and CONFIGURES. No - skills currently read the profile to change defaults. That's v2 work, gated - on the registry proving durable. +- **The profile never changes defaults.** This skill inspects and configures. + Per-question preferences can auto-decide questions; the declared/inferred + profile is advisory only. - **Completion status:** - DONE — did what the user asked (enable/inspect/set/update/disable) - DONE_WITH_CONCERNS — action taken but flagging something (e.g., "your