From 7403c658d25a5c604331ec0829ff32e1c2dd05c3 Mon Sep 17 00:00:00 2001 From: Bastien Chanot Date: Fri, 19 Jun 2026 18:48:13 +0200 Subject: [PATCH] chore(memory): capitalize BDR-023 + LRN-031 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BDR-023 — merge /close into /capitalize (2 modes + TODO reconcile), /close now a thin alias. LRN-031 — a skill earns complexity only on gate + anti-noise + determinism, not by re-coding what a capable agent does free; if the RED baseline passes, harden the fixture. Journal 2026-06-19. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU --- .claude/memory/decisions.md | 15 +++++++++++++++ .claude/memory/journal.md | 7 +++++++ .claude/memory/learnings.md | 14 ++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/.claude/memory/decisions.md b/.claude/memory/decisions.md index a0adadb..638c1d2 100644 --- a/.claude/memory/decisions.md +++ b/.claude/memory/decisions.md @@ -43,6 +43,7 @@ rules: | BDR-019 | 2026-06-09 | Remove `disable-model-invocation` repo-wide — align skills with CLAUDE.md routing | accepted | | BDR-020 | 2026-06-11 | `/audit-delta`: per-axis SHA markers + always-on fix gate + unreachable-first-run = full report-only | accepted | | BDR-022 | 2026-06-18 | doc-syncer scoped to public docs; `.claude/` + `CLAUDE.md` read-only context, never targets; conventions + clean mode | accepted | +| BDR-023 | 2026-06-19 | Merge /close into /capitalize — 2 modes + TODO reconcile; /close alias | accepted | --- @@ -395,3 +396,17 @@ rules: - Drop only `.claude/`, keep `CLAUDE.md` writable (old strike-through README opt-out) — rejected: CLAUDE.md = agent config not public doc, absent from the modifiable-targets list; uniform read-only treatment cleaner. - Inline config table in README — rejected: violates Diátaxis (CONFIGURE.md = single config reference); README must link, not duplicate. - **Reference**: `agents/doc-syncer.md`, commit edff761. Extends [[doc-syncer-readme-deploy-policy]] (BDR-016, README-AUTO + DEPLOY 14-section — conserved, not superseded). + +--- + +## BDR-023 — Merge /close into /capitalize — 2 modes + TODO reconcile; /close alias + +- **Date**: 2026-06-19 +- **Status**: accepted (supersedes /close-creation part of BDR-002) +- **Decision**: `/close` merged into `/capitalize`. capitalize 2 modes: default (pre-wipe flush) + `--ritual` (adds 3-question end-of-session reflection; trigger = `--ritual` flag OR "close"/"ritual" in `$ARGUMENTS`, OR `/close`). Both modes dedup (STEP 2) + reconcile `.claude/tasks/TODO.md` (new STEP 2B). STEP 2B: PASS A done-detection = restraint rule only (flip `[ ]`→`[x]` only on clean task↔commit map; partial/umbrella/vague stay unchecked, never guess); PASS B explicit-capture + anti-noise filter (never track commit/deploy/push/release/tag) + orientation-directive→decisions.md (BDR) routing. Ritual answers go thru dedup, footer shows existing ID — unlike legacy /close (wrote fresh). STEP 3 gate gains separate TODO block; journal+handoff report TODO ops. TODO stays plain prose (caveman = registries only). `/close` kept = thin alias → `/capitalize --ritual`, zero duplicated logic. +- **Why**: /close + /capitalize overlapped (both flush session memory), /close never deduped → re-logged on re-run. 1 skill 2 modes kills dup + gives /close dedup; TODO reconcile = new capability. Alias file (not merged-triggers-only) because /close resolves by directory name — deleting dir breaks literal `/close` command. +- **Alternatives rejected**: + - Merged-triggers-only (drop close dir, fold triggers into capitalize desc) — breaks literal `/close` command (dir-name resolution). + - Keep 2 separate skills — duplication persists + /close never dedups. +- **TDD**: built via superpowers:writing-skills. RED v1 baseline too easy (passed). RED v2 (pressured fixture: semantic dup + ambiguous umbrella task + parasite-as-task + orientation directive + rushed prompt) failed on anti-noise (folded push/tag into TODO) + invented subtask + no approval stop. GREEN passed. Gate STOP itself UNTESTED (non-interactive harness printed gate then proceeded "all approved") — flagged in skill Red flag + TDD note; verify on first real use. +- **Reference**: `skills/capitalize/SKILL.md`, `skills/close/SKILL.md`, commits 9dc2b83 (skill) + be0f047 (docs routing) + 765e9d7 (PASS A trim). Linked to [[BDR-002]] (close created), [[BDR-019]] (capitalize created), [[LRN-031]] (skill-value lesson). diff --git a/.claude/memory/journal.md b/.claude/memory/journal.md index 0652514..5b6b273 100644 --- a/.claude/memory/journal.md +++ b/.claude/memory/journal.md @@ -165,3 +165,10 @@ rules: - Added CLAUDE.md `## Workflow` subagent-delegation rule (fan-out → delegate, not serial) countering Opus 4.8 under-delegate trait. 2 commits: bc7f657 (settings model-pin removal), 02a0ba0 (CLAUDE.md). LRN-030 capitalized. - Note: learnings.md Index missing LRN-028/029 rows (pre-existing gap, left untouched — out of scope). - Rewrote `agents/doc-syncer.md` (commit edff761): scope = public docs only; `.claude/` + `CLAUDE.md` read-only context (never target, never copied into public doc); added CONVENTIONS (Standard-Readme/Diátaxis/Keep-a-Changelog+SemVer/Conventional Commits), lean README, CLEAN mode. Conserved stack/DEPLOY-14/gate/AUTO-MODE. BDR-022 capitalized. decisions.md Index also missing BDR-021 row (same pre-existing gap). + +## 2026-06-19 + +- Merged `/close` into `/capitalize` — 2 modes (default flush + `--ritual` reflection), new STEP 2B TODO reconcile (PASS A restraint-only, PASS B explicit-capture + anti-noise filter + orientation→BDR routing), STEP 3 gate gains separate TODO block. `/close` now thin alias → `/capitalize --ritual`. BDR-023. +- Built via superpowers:writing-skills TDD: RED v1 baseline too easy (passed) → strengthened to RED v2 (pressured) which failed on anti-noise + invented subtask + no gate → GREEN passed. Gate STOP itself untested (non-interactive harness) — flagged as skill Red flag. +- LRN-031: skill value = gate + anti-noise + determinism, NOT re-coding what a capable agent does free; if RED baseline passes, harden the fixture before writing. +- Docs routing synced (CLAUDE.md table + README + USAGE) in separate commit; caveman-purge WIP in those files left unstaged. Commits 9dc2b83, be0f047, 765e9d7. diff --git a/.claude/memory/learnings.md b/.claude/memory/learnings.md index c0ca1f2..5dbe7ea 100644 --- a/.claude/memory/learnings.md +++ b/.claude/memory/learnings.md @@ -45,6 +45,7 @@ rules: | 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 | | LRN-027 | 2026-06-11 | Agents improvise audit boundaries from file dates when no machine state — periodic skills need machine-readable state file, never inference | any recurring/periodic skill needing "since last run" semantics | | LRN-030 | 2026-06-18 | Opus 4.8 under-delegates subagents/memory/custom-tools by default — counter via explicit CLAUDE.md fan-out rule | any Opus 4.8 session; tuning delegation; inline-vs-subagent decision | +| LRN-031 | 2026-06-19 | Skill value = gate + anti-noise + determinism, not re-coding what a capable agent does free | building/reviewing any skill; writing-skills TDD fixture design | --- @@ -440,3 +441,16 @@ rules: - **Why matters**: long sessions grind serially + fill main context when 3 parallel agents (cavecrew-investigator / Explore) would map at once. Default tendency wastes the agents the config already defines. - **Applies to**: any Opus 4.8 session; tuning delegation behavior; deciding inline vs subagent. Same trait drives memory + custom-tool under-use — same counter. - **Reference**: commit 02a0ba0 (CLAUDE.md `## Workflow` edit). + +--- + +## LRN-031 — Skill value = gate + anti-noise + determinism, NOT re-coding what a capable agent does free + +- **Date**: 2026-06-19 +- **Pattern**: capable agent + strong CLAUDE.md already nails the easy-path (dedup, semantic-dedup, routing, done-detection) unaided. A skill earns its complexity ONLY on guarantees the agent drops under pressure: mandatory approval gate, anti-noise filters, explicit-only capture, determinism (baseline non-deterministic across runs). Re-documenting free behavior = bloat. Corollary (TDD): if no-skill RED baseline PASSES, fixture under-probes — strengthen on the value dimensions (subtle/pressured cases), never ship a skill justified by a test its absence passes. Trim each procedure to its load-bearing rule (PASS A done-detection → keep restraint rule, drop git-command how-to the agent runs anyway). +- **Context**: built merged `/capitalize` (BDR-023) via writing-skills TDD. RED v1 baseline passed (deduped, checked done task, ignored parasite) — too easy. RED v2 (semantic dup + ambiguous umbrella task + parasite-phrased-as-task + orientation directive + rushed prompt) failed on anti-noise (folded push/tag into TODO) + invented subtask + no approval stop. Those 4 = the skill's real marginal value; rest the baseline did free. +- **Future application**: + - Building/reviewing a skill → ask "does the baseline agent already do this for free?" Keep only gate + filters + determinism + non-obvious restraint rules; cut machinery re-describing capable-agent behavior. + - RED baseline passes without the skill → harden the fixture before writing, don't ship. + - Trim each procedure section to its load-bearing rule; delete how-to the agent performs anyway. +- **Reference**: BDR-023, `skills/capitalize/SKILL.md` STEP 2B + Red flags. Linked to [[LRN-008]] (skill wins from edge-cases not workflow rewrites), [[LRN-028]] ("no-skill" baseline contamination when skill installed globally).