diff --git a/.claude/memory/decisions.md b/.claude/memory/decisions.md index 47e65f3..f1ce242 100644 --- a/.claude/memory/decisions.md +++ b/.claude/memory/decisions.md @@ -40,6 +40,7 @@ rules: | BDR-016 | 2026-05-15 | doc-syncer: README AUTO+unconditional, DEPLOY.md prod-only + 14-section VPS template | accepted | | BDR-017 | 2026-05-18 | `full` profile = web-full + plan + dev superset for /init-project MVP | accepted | | BDR-018 | 2026-06-02 | `profile gstack on/off` verb — toggle gstack keeping active-profile label | accepted | +| BDR-019 | 2026-06-09 | Remove `disable-model-invocation` repo-wide — align skills with CLAUDE.md routing | accepted | --- @@ -337,3 +338,17 @@ rules: - Just document `reset`/`set` — rejected: user wanted clearer centralized verb + label preservation. - **Impl note**: extracted 3 shared helpers (`enable_all_gstack`, `disable_gstack_not_in`, `parked_gstack_count`); `cmd_reset`+`cmd_set` refactored to reuse (behavior preserved exact, verified by test). See [[dry-helper-extract-sibling-command]] (LRN-024). - **Reference**: `lib/profile.sh` cmd_gstack + helpers, `skills/profile/SKILL.md`. Linked to [[full-profile-superset-init-project]] (BDR-017), [[gstack-source-only-skills-unlinked]] (BLK-007). + +--- + +## BDR-019 — Remove `disable-model-invocation` repo-wide, align skills with CLAUDE.md routing + +- **Date**: 2026-06-09 +- **Status**: accepted +- **Decision**: Stripped `disable-model-invocation` frontmatter key from all 19 editable `skills/*/SKILL.md`. Absent key = default = model invocation ENABLED. 8 were `true` (blocked model + orchestrator routing: `status`, `plugin-check`, `analyze`, `onboard`, `refactor`, `init-project`, `pdf-translate`, `ship-feature`); 11 were `false` (already enabled, line was noise). +- **Why**: `true` blocked model AND orchestrator from self-routing to those skills — contradicted CLAUDE.md "Skill routing" intent (e.g. "multi-file feature → ship-feature", "refactor → /refactor"). User hit it live: model detected feature intent, wanted `ship-feature`, couldn't fire. Setting binary (no per-caller granularity) → enabling orchestrator-chaining also enables model auto-fire; accepted as the cost. +- **Alternatives rejected**: + - Keep `true` on 4 heavy orchestrators (`init-project`, `ship-feature`, `onboard`, `refactor`) — rejected: "destructive" framing wrong. `ship-feature` only commits + pushes a feature branch + opens PR (reversible, gated by internal STEPs); no prod deploy (that's `land-and-deploy`/`canary`). Real destructive ops (`rm -rf`, force-push, prod deploy) guarded by careful/guard hooks INDEPENDENT of this flag — verified live (`rm -rf` blocked this session). Flag bought ~0 data-safety, only suppressed auto-fire (token/time cost) while breaking routing. + - Remove only the 8 `true` ones — rejected: leaves 11 noise `false` lines; uniform removal cleaner. +- **Durability**: all 8 ex-`true` skills are repo-only files (not gstack submodule) → edits not clobbered on gstack upgrade. +- **Reference**: 18 `skills/*/SKILL.md` modified + `skills/capitalize/` new. Linked to [[disable-model-invocation-false-not-blocking]] (LRN-026). diff --git a/.claude/memory/journal.md b/.claude/memory/journal.md index cd749b9..701406a 100644 --- a/.claude/memory/journal.md +++ b/.claude/memory/journal.md @@ -139,3 +139,10 @@ rules: - BDR-018 + LRN-024 + BLK-007 + EVAL-002 capitalized. - Treated BLK-007 (resolved). Root: gstack submodule bump added `spec` (v1.47) + iOS device-farm 5 skills (v1.43); gstack `./setup` not re-run → 6 source-only, unlinked. Decision: linked `spec` only (surgical symlink matching setup:440-476), added to `full`+`web-full` profiles; iOS NOT linked (Linux host, needs Mac daemon+Tailscale = dead skills). Completed `.gitignore` gstack allowlist (12 missing added incl. 6 parked that would noise on `gstack on`, stale `checkpoint` removed). Verified: spec enabled, allowlist drift EMPTY, profile.sh parses. - LRN-025 capitalized — `.gitignore` allowlist must cover ALL toggleable gstack skills (parked too), else `gstack on` surfaces untracked symlinks; reconcile profiles + gitignore + link/no-link per platform after every submodule bump. + +## 2026-06-09 + +- Built `/capitalize` skill (`skills/capitalize/`) — pre-`/clear`/`/compact` flush: scan conversation → dedup vs registries → propose only NEW + uncaptured → approval gate → write all 5 registries. Distinct from `/close` (no dedup) + `/prune-memory` (curation). +- Baseline-tested per superpowers:writing-skills: RED (no skill) double-logged one incident across LRN+BLK; GREEN (skill) passed clean on isolated fixture (2 new written, 2 dups dropped, trivial skipped, correct IDs, append-only). REFACTOR added "one incident → one primary registry" counter. Dedup half inconclusive (toy fixture eyeball-able — value shows at real registry scale). +- Removed `disable-model-invocation` from all 19 editable skills (8 `true` blocked model+orchestrator routing incl `ship-feature`; 11 `false` were no-op noise). Aligns with CLAUDE.md routing — model/orchestrator can now self-route. Conceded own wrong "destructive" framing; real guard = careful/guard hooks. +- BDR-019 + LRN-026 capitalized. diff --git a/.claude/memory/learnings.md b/.claude/memory/learnings.md index 3934183..6797f02 100644 --- a/.claude/memory/learnings.md +++ b/.claude/memory/learnings.md @@ -42,6 +42,7 @@ rules: | LRN-019 | 2026-05-15 | Deployable-project doc split: README dev-quickstart + DEPLOY 14-section prod-VPS topology | any onboard/doc-syncer/scaffold producing docs for a deployable project | | LRN-024 | 2026-06-02 | New sibling command sharing logic → extract helper + refactor existing caller, never copy-paste; assert pre/post state equality | adding a subcommand/branch reusing logic inline in a peer command | | LRN-025 | 2026-06-02 | `.gitignore` gstack allowlist must cover ALL toggleable skills (incl. parked) — else enabling one = untracked git noise | any toggle that moves local-symlink skills into a tracked dir; post-submodule-bump reconcile | +| LRN-026 | 2026-06-09 | `disable-model-invocation: false` = ENABLED not blocking; only `true` blocks (model + orchestrator); binary, no per-caller | Claude Code skill frontmatter; deciding self-route/chain vs human-only entry point | --- @@ -383,3 +384,13 @@ rules: - **Applies to**: any system where a local-only (gitignored) artifact gets MOVED into a tracked dir by a toggle. Allowlist/ignore rules must enumerate the artifact's BOTH states (parked + active). After a gstack submodule bump, reconcile THREE surfaces, not two: `lib/profiles/*.profile` (LRN-022) **AND** `.gitignore` skills allowlist **AND** decide link/no-link per skill (platform relevance — iOS skills are Mac-only). - **Detect**: `comm -23 <(gstack source skill names) <(grep '^skills/' .gitignore | sed 's#skills/##')` should be empty after any bump. - **Reference**: BLK-007, `.gitignore` gstack section. Linked to [[gstack-rename-profile-audit]] (LRN-022), [[gstack-on-off-verb]] (BDR-018). + +--- + +## LRN-026 — `disable-model-invocation: false` means ENABLED, not blocked + +- **Date**: 2026-06-09 +- **Pattern**: frontmatter key reads as "disable?" → `false` = NOT disabled = model invocation ENABLED. Easy to misread `false` as "off/blocked"; it is the opposite. Only `true` blocks. Absent key = default = enabled. `true` blocks BOTH surfaces: model auto-routing (description-match) AND orchestrator/sub-skill chaining via the Skill tool. Binary — no per-caller granularity, so you cannot allow orchestrator-chaining while forbidding model auto-fire. +- **Why matters**: two traps. (1) Adding `disable-model-invocation: false` thinking you block invocation — you don't, it's a no-op noise line. (2) Keeping `true` "for safety" on a skill you actually want orchestrators to chain (e.g. `ship-feature`, `refactor`) — silently breaks your own CLAUDE.md routing; the model sees the intent but can't fire. Real destructive-action safety = careful/guard hooks (block `rm -rf`/force-push live), INDEPENDENT of this flag — so `true` on an orchestrator buys ~0 data-safety, only suppresses auto-fire (token/time cost). +- **Applies to**: any Claude Code skill frontmatter. Want skill model-routable + orchestrator-chainable → omit key (or `false`). Want human-only `/command` entry point → `true`, accepting it also blocks orchestrators. Guard genuinely dangerous ops at the hook layer, not via this flag. +- **Reference**: BDR-019, 19 `skills/*/SKILL.md`. Linked to [[remove-disable-model-invocation-repowide]] (BDR-019). diff --git a/skills/analyze/SKILL.md b/skills/analyze/SKILL.md index 4b89734..95cf3cb 100644 --- a/skills/analyze/SKILL.md +++ b/skills/analyze/SKILL.md @@ -2,7 +2,6 @@ name: analyze description: Deep factual code analysis (read-only) or DEBUG mode (pass error/stack trace) — no solutions proposed, no file modifications argument-hint: -disable-model-invocation: true allowed-tools: Read, Grep, Glob, Bash --- diff --git a/skills/bugfix/SKILL.md b/skills/bugfix/SKILL.md index 37bf9f5..21744d2 100644 --- a/skills/bugfix/SKILL.md +++ b/skills/bugfix/SKILL.md @@ -10,7 +10,6 @@ description: | For obvious 1-2 file fixes → use /hotfix instead. For bugs that need investigation only (no fix) → use /analyze. argument-hint: -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/client-handover/SKILL.md b/skills/client-handover/SKILL.md index b8953a0..def34cf 100644 --- a/skills/client-handover/SKILL.md +++ b/skills/client-handover/SKILL.md @@ -10,7 +10,6 @@ description: | "rapport client", "deliverable", "summary for client", "handover doc", "livrable", "ship and handover", "finaliser et livrer". argument-hint: [optional: language fr|en, --include-deploy, --skip-deploy, --skip-seo, --skip-audits, --skip-fix-loop, --max-iterations N, --audit-max-age , --output ] -disable-model-invocation: false allowed-tools: - Read - Write diff --git a/skills/close/SKILL.md b/skills/close/SKILL.md index ab292d0..ceb88d5 100644 --- a/skills/close/SKILL.md +++ b/skills/close/SKILL.md @@ -8,7 +8,6 @@ description: | Trigger: "close", "end session", "ferme la session", "session close", "checkpoint memory", "what did we learn", "retro rapide", "fin de journée". argument-hint: (none — operates on the current conversation context) -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/code-clean/SKILL.md b/skills/code-clean/SKILL.md index 4b36e69..259635c 100644 --- a/skills/code-clean/SKILL.md +++ b/skills/code-clean/SKILL.md @@ -9,7 +9,6 @@ description: | For targeted refactoring without audit → use /refactor instead. For bug fixes discovered during cleanup → logged to .claude/audits/BUGS-FOUND.md, not fixed here. argument-hint: -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/doc/SKILL.md b/skills/doc/SKILL.md index eecb34f..625860c 100644 --- a/skills/doc/SKILL.md +++ b/skills/doc/SKILL.md @@ -10,7 +10,6 @@ description: | "new feature not documented", "removed feature still in docs", "create README", "should I have a DEPLOY doc". argument-hint: [leave empty for full audit, or list specific files/docs to check] -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/feat/SKILL.md b/skills/feat/SKILL.md index fa29126..9e814d8 100644 --- a/skills/feat/SKILL.md +++ b/skills/feat/SKILL.md @@ -10,7 +10,6 @@ description: | For multi-file features needing design → use /ship-feature. For bug fixes → use /hotfix or /bugfix. argument-hint: -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/hotfix/SKILL.md b/skills/hotfix/SKILL.md index a9167e0..978c9b7 100644 --- a/skills/hotfix/SKILL.md +++ b/skills/hotfix/SKILL.md @@ -8,7 +8,6 @@ description: | "c'est juste un petit bug", "patch rapide". Do NOT use for bugs requiring investigation — use /bugfix instead. argument-hint: -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/init-project/SKILL.md b/skills/init-project/SKILL.md index 1663ec4..a37d446 100644 --- a/skills/init-project/SKILL.md +++ b/skills/init-project/SKILL.md @@ -2,7 +2,6 @@ name: init-project description: Use when initializing a brand-new project from scratch — needs interview, design, scaffold, and TDD implementation. Multi-agent orchestrator: plugin-advisor + interviewer + analyzer + scaffolder with two validation gates. Triggers: "init project", "new project", "start project from scratch", "scaffold project", "init-project". argument-hint: -disable-model-invocation: true allowed-tools: Read, Write, Edit, Bash, Grep, Glob --- diff --git a/skills/onboard/SKILL.md b/skills/onboard/SKILL.md index 960bd39..5d2570a 100644 --- a/skills/onboard/SKILL.md +++ b/skills/onboard/SKILL.md @@ -2,7 +2,6 @@ name: onboard description: Use when bringing an existing repo into the claude-config framework — needs archetype detection, config install, full multi-axis audit (debt/SEO/GEO/UI-UX/perf/security/a11y/docs), and prioritized backlog. Multi-agent orchestrator. Do NOT use for repos created via /init-project. Triggers: "onboard", "onboard project", "audit existing repo", "setup existing project". argument-hint: [optional hints: "Python FastAPI" | "add gsd" | "Next.js monorepo" | "force-archetype:wordpress"] -disable-model-invocation: true allowed-tools: Read, Write, Edit, Bash, Glob, Grep --- diff --git a/skills/pdf-translate/SKILL.md b/skills/pdf-translate/SKILL.md index 7553ccf..b78c95f 100644 --- a/skills/pdf-translate/SKILL.md +++ b/skills/pdf-translate/SKILL.md @@ -1,7 +1,6 @@ --- name: pdf-translate description: Use when translating a PDF (especially OCR or image-based) to another language and producing faithful HTML output. Handles image extraction, layout preservation, contextual translation, and style-matched reconstruction. Triggers on "translate this PDF", "PDF en francais", "convert PDF to HTML translated", "traduire ce document". -disable-model-invocation: true --- # PDF Translate diff --git a/skills/plugin-check/SKILL.md b/skills/plugin-check/SKILL.md index 16862c6..5649964 100644 --- a/skills/plugin-check/SKILL.md +++ b/skills/plugin-check/SKILL.md @@ -2,7 +2,6 @@ name: plugin-check description: Audit active plugins vs project needs. Read-only advisory recommending enable/disable. Triggers: "plugin-check", "quels plugins". argument-hint: [ex: "React + FastAPI" or "Rust CLI, no frontend"] -disable-model-invocation: true allowed-tools: Read, Bash, Glob, Grep --- diff --git a/skills/profile/SKILL.md b/skills/profile/SKILL.md index 360f42e..e3c97f1 100644 --- a/skills/profile/SKILL.md +++ b/skills/profile/SKILL.md @@ -9,7 +9,6 @@ description: | "profil design", "active les skills design", "désactive gstack", "réduire le bruit gstack". argument-hint: list | show | current | apply | set | reset | gstack on|off | diff -disable-model-invocation: false allowed-tools: - Bash - Read diff --git a/skills/prune-memory/SKILL.md b/skills/prune-memory/SKILL.md index 65e6fbe..ceb8022 100644 --- a/skills/prune-memory/SKILL.md +++ b/skills/prune-memory/SKILL.md @@ -9,7 +9,6 @@ description: | hygiene", "trier memoire", "nettoyer memoire", "registres trop longs", "compresse les memoires". argument-hint: [optional: decisions|learnings|blockers|journal|evals — default all 5] -disable-model-invocation: false allowed-tools: - Read - Edit diff --git a/skills/refactor/SKILL.md b/skills/refactor/SKILL.md index 115b8f6..89a9ba8 100644 --- a/skills/refactor/SKILL.md +++ b/skills/refactor/SKILL.md @@ -2,7 +2,6 @@ name: refactor description: Improve code quality without changing behavior — strict norm enforcement. Triggers: "refactor", "clean up code", "normaliser". argument-hint: -disable-model-invocation: true allowed-tools: Read, Write, Edit, Grep, Glob, Bash --- diff --git a/skills/ship-feature/SKILL.md b/skills/ship-feature/SKILL.md index 90cab07..afd81ce 100644 --- a/skills/ship-feature/SKILL.md +++ b/skills/ship-feature/SKILL.md @@ -2,7 +2,6 @@ name: ship-feature description: Use when shipping a new feature end-to-end — needs design brainstorm, planning, TDD implementation with subagents, error recovery, code review, and finish. Multi-agent orchestrator (9-step pipeline). Triggers: "ship feature", "ship-feature", "build and merge", "feature end-to-end", "implement and ship". argument-hint: -disable-model-invocation: true allowed-tools: Read, Write, Edit, Bash, Grep, Glob --- diff --git a/skills/skills-perso/SKILL.md b/skills/skills-perso/SKILL.md index 86d77d3..60e5756 100644 --- a/skills/skills-perso/SKILL.md +++ b/skills/skills-perso/SKILL.md @@ -6,7 +6,6 @@ description: | Shows only skills the user wrote themselves. Trigger: "skills-perso", "mes skills", "list my skills", "quels skills", "skills perso". argument-hint: "" -disable-model-invocation: false allowed-tools: - Bash - Read diff --git a/skills/status/SKILL.md b/skills/status/SKILL.md index 159f73c..df3966f 100644 --- a/skills/status/SKILL.md +++ b/skills/status/SKILL.md @@ -2,7 +2,6 @@ name: status description: Consolidated project snapshot — plugins, token cost, git state, recent commits, GSD v2 milestone progress. Read-only. Run at session start or after a break. Triggers: "status", "sitrep", "where are we", "project state", "after break". argument-hint: (no arguments needed) -disable-model-invocation: true allowed-tools: Read, Bash, Glob, Grep ---