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.
This commit is contained in:
garrytan committed 2026-10-03 00:02:29 +00:00
1 parent d299fc8548
commit 6f12766db6
1 file changed
+27 -27
+27 -27
View File
@@ -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/<slug>/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/<slug>/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/<slug>/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":"<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 `<gstack-qid:foo>` 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 `<gstack-qid:foo>`
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