Commit Graph

66 Commits

Author SHA1 Message Date
Bastien Chanot
d7f76fcb45 chore(memory): LRN-073/074 + EVAL-010 — prune-memory chantier close
- LRN-073 — a skill's worked-example must use FICTIONAL ids, never live registry
  ids (they prime real-data behavior). The RED-7 root-cause lesson.
- LRN-074 — system grep/awk may be ugrep/mawk: don't assume flag-parsing, use
  /usr/bin/grep, watch the RED go red. 4th command-assumption miss this session →
  engraved as a recurring pattern-family (alongside fail-silent LRN-066/071).
- EVAL-010 — prune-memory hardening: RED-7 deterministic fix + RED-8 accept +
  34-row backfill; anomalies incl the real-time false-green catch and the near-
  collision with the existing EVAL-009 (caught by reading first).
- journal 2026-06-29 (cont. 3) + TODO chantier section; BLK-011 finish/push marked.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
2026-06-29 19:29:15 +02:00
Bastien Chanot
80a21d050f chore(memory): backfill 34 missing Index rows + re-sort LRN-021
Pass-D index hygiene (LRN-055): the Index tables had drifted — 34 body entries
present but missing their Index row (decisions 11, learnings 21, blockers 2; evals
clean). All pre-existing, from before the coupled-capitalize machinery (BDR-034)
that keeps new entries indexed. Composed each row from its entry (decisions/blockers:
title/date/status; learnings: heading title as Pattern + condensed future-application
as Applies-to — the 5 awk-missed ones re-read from the body, 4 corrected a nuance the
title alone dropped). Inserted in ID-sorted slots. STEP-4 verify: zero MISSING/ORPHAN.

Also moved one pre-existing out-of-order row: LRN-021 (stranded at the LRN-008/009
boundary) -> its sorted slot between LRN-020 and LRN-022. Index now 100% ID-sorted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
2026-06-29 19:25:42 +02:00
Bastien Chanot
52d4a66daa chore(memory): BLK-011 resolved + LRN-072 — fix-by-removal
- BLK-011 → resolved by REMOVAL (not by committing the orphan), with the TRUE
  reason engraved: speculatively auto-bootstrapping an unused multi-session engine
  at project creation is bad on its own terms. The initial "redundant with TODO"
  framing is explicitly marked WRONG (gsd >> roadmap; TODO != gsd ROADMAP) — a
  false reason that won't mislead a future reader. Reasoning trace kept: both
  premises refuted on read, conclusion held for the stronger reason.
- LRN-072 — a stranded-artifact bug can be fixed by NOT creating the artifact
  (negative diff), not by plumbing its commit; before building machinery, ask if
  the PRODUCING step is wanted. Speculative-at-creation -> remove; deliberate-on-
  demand -> keep. Family: BLK-010, BLK-011, BDR-036.
- journal 2026-06-29 (cont. 2) + TODO: BLK-011 line flipped, chantier section,
  MINOR-gate FINISH marked merged. Index rows updated (blockers + learnings).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
2026-06-29 18:27:34 +02:00
Bastien Chanot
a335591c46 chore(memory): BDR-040 + LRN-071 + journal/TODO — MINOR-gate chantier
- BDR-040 — doc-syncer MINOR-shape oracle: deterministic floor under the LLM's
  MINOR call; engraved limit (structural/size, NOT semantic — reduction of
  RISK-1's gross cases, not elimination); option B (blocking gate) rejected
  (contradicts BDR-036); branch-guard deferred.
- LRN-071 — fail-loud must cover the helper's OWN commit, not just its inputs;
  named as the 3rd occurrence of the swallowed-commit pattern, linked to LRN-066
  + LRN-068/BLK-012; future application = audit every fallible op whose result
  gates a downstream "success".
- journal 2026-06-29 (cont.) + TODO chantier section + line-266 flip to done.
  Index rows added for both BDR-040 and LRN-071.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
2026-06-29 17:41:24 +02:00
Bastien Chanot
eab4d2db3e chore(memory): BDR-039 (Option-1 protection) + TODO reconcile — gitflow chantier closed 2026-06-29 03:26:47 +02:00
Bastien Chanot
1620e5b9d5 chore(memory): LRN-070 + journal 2026-06-29 — gitflow migration complete (6/6) 2026-06-29 03:18:10 +02:00
Bastien Chanot
1254643d06 chore(memory): BLK-010 closed + BLK-012, LRN-068/069 — gitflow chantier
BLK-010 resolved (gitflow_init root commit closes it); BLK-012 non-transactional-init bug + fix; LRN-068 transactional enforcement-bootstrap; LRN-069 token-authed remote-write gate model.
2026-06-29 02:58:13 +02:00
Bastien Chanot
f1f6feb21a chore(memory): journal — deploy merged to master 2026-06-28 01:54:26 +02:00
Bastien Chanot
135b4872a8 chore(memory): BDR-038, LRN-062..066, EVAL-009 — capitalize 2026-06-27 18:26:18 +02:00
Bastien Chanot
77aac2c890 chore(memory): BDR-037 + LRN-061 — v2 capitalize hook rejected → wire the include 2026-06-27 12:24:55 +02:00
Bastien Chanot
345e43731c chore(memory): BDR-036 + LRN-058..060 + EVAL-008 — doc-sync coupled close
Capitalize the doc-sync coupled chantier: BDR-036 (the invariant, 3 honesties engraved — built-not-reordered, MINOR non-gated surface-replaces-gate, init-project partial + sweep scope-expansion); LRN-058 (same bug-class != same fix — verify the twin's precondition); LRN-059 (swap flips meanings, sweep caught prior-chantier debt README:153 != letter-suffix insertion); LRN-060 (fail-closed guard proven by what it refuses, loudly; argv not separator-string); EVAL-008 (28/28 real-exec, anomalies surfaced). Journal 2026-06-27. BLK-010/011 flags + the frozen plan + TODO checkmarks. BLK-011 record left at STEP 13 (append-only); only the TODO locator moved to STEP 12 (live locator vs immutable record).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ho5EQCFTSvYamuRtVZpp2d
2026-06-27 03:22:12 +02:00
Bastien Chanot
bb341d3c87 chore(memory): BDR-035 + LRN-053..057 — analyze-before-plan v1 2026-06-26 23:50:44 +02:00
Bastien Chanot
07e846f0a6 chore(memory): BDR-034 + LRN-051/052 + EVAL-007 — coupled-capitalize v1 2026-06-26 13:27:57 +02:00
Bastien Chanot
ce34270e47 chore(tasks): coupled-capitalize invariant implementation plan (frozen)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-26 13:21:05 +02:00
Bastien Chanot
8536c733ec chore(memory): BDR-033 + LRN-049 + LRN-050 + journal — design-gate §4 anim suggestion
Capitalizes the design-gate §4 anim-lib suggestion (commit 11792cc):
- BDR-033: §4 = suggest-only, non-blocking, stateless 1-line; marker rejected
  (conditional on stakes — a non-destructive note != a destructive op's
  deterministic marker, cf LRN-046/047).
- LRN-049: stateless-minimal surface > state marker for non-destructive repeated
  nudges (conditional on stakes).
- LRN-050: on a symlinked/live file, show-before-write is the only control gate.
- journal: two lines under 2026-06-25 (the §4 wiring + the process note).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-26 00:31:28 +02:00
Bastien Chanot
ea992cbc62 chore(memory): EVAL-006 + LRN-046/047/048 + journal — prune-memory v1.1 TDD
Capitalizes the prune-memory v1.1 TDD (skill 0a3e766):
- EVAL-006: 6 dangers TDD-closed, validated on the real learnings.md
  (0 fidelity false-positive vs 13); honest limits (SAFE != USEFUL, RED-7/8 open).
- LRN-046 deterministic oracle > semantic judge on destructive skills.
- LRN-047 a noisy safety guard (13/13 FP) is a risk, not discomfort.
- LRN-048 a "0/OK/pass" must prove it looked (counted both sides).
- journal: one line under 2026-06-25.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 23:17:10 +02:00
Bastien Chanot
8413afb785 fix(memory): backfill missing EVAL-005 index row
EVAL-005 entry existed in evals.md with no matching ## Index row
(pre-existing index drift — the category-D case the /prune-memory skill
auto-corrects). Backfilled by hand; unrelated to the prune-memory TDD work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 23:02:51 +02:00
Bastien Chanot
9a58734286 chore(memory): journal 2026-06-25 (validate → web-validate rename)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 11:38:05 +02:00
Bastien Chanot
a1cc753746 chore(tasks): annotate /validate → /web-validate in open --help pilot item
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 11:27:18 +02:00
Bastien Chanot
dbab542409 chore(memory): BDR-032 + LRN-045 (validate → web-validate rename)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 11:27:18 +02:00
Bastien Chanot
26658c4962 chore(memory): journal 2026-06-25
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 00:41:46 +02:00
Bastien Chanot
52164d6261 chore(memory): BDR-031 + BLK-009 + LRN-043 + LRN-044
- BDR-031: global CLAUDE.md lightening = compression, not path-scope /
  externalization (path-scoped user rules broken, #21858). 317 -> 275.
- BLK-009: user-level path-scoped rules don't load (#21858, 2.1.190),
  proven by 3-file probe. Upstream/open.
- LRN-043: routing compression — cut name-obvious lines, keep
  non-derivable signal (misleading names, gstack fallbacks) + catch-all.
- LRN-044: Edit/Write refuse to write through a symlink — resolve to
  the real path (readlink -f) first.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W9sqAwZxBMZSynZoVrEJhd
2026-06-25 00:33:01 +02:00
Bastien Chanot
b03cb0b910 chore(memory): BDR-030 + LRN-042 + journal + TODO
Capitalize the install-self-sufficient / gstack-on-demand session:
- BDR-030: gstack skills activated on-demand per profile, OFF by default.
- LRN-042: npx skills add / setup resolve target relative to CWD — run
  from $HOME or artifacts land in the repo tree, unreachable by link.sh.
- journal 2026-06-23 line + TODO task block reconciled.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0169vjUD1sP9Nx4ZiCa8wvAw
2026-06-24 14:22:47 +02:00
Bastien Chanot
6516b85f0f chore(memory): EVAL-005 — obsolete effort alias missed (cross-config audit gap)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 17:54:52 +02:00
Bastien Chanot
960f0f92ce chore(memory): LRN-041 — MAGIC_API_KEY symlink false-negative
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 17:30:40 +02:00
Bastien Chanot
735b62a002 chore(memory): BDR-029 + LRN-040 + BLK-008 resolved (gstack browser on Ubuntu 26.04)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 16:59:23 +02:00
Bastien Chanot
637b8379b1 chore(memory): correct BLK-008 + LRN-038 — Playwright override reverted (hangs)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 16:24:44 +02:00
Bastien Chanot
cba0672749 chore(memory): BDR-028 + LRN-039 (installer config drift guard + de-vendor)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 15:29:47 +02:00
Bastien Chanot
4e178dc393 chore(memory): BDR-027 + LRN-038 + BLK-008 (install revert + Ubuntu 26.04 chromium)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UyNYwD4UccVw9ZCFZyJX55
2026-06-23 14:11:52 +02:00
Bastien Chanot
937dd1d366 chore(memory): BDR-025 + BDR-026 + LRN-037
BDR-025: design gate = profile-based (tier=profil, GATE-BLOCK allowlist,
magic required-but-manual, unknown->fail-visible exit 11, claude resolved via
ensure_claude_on_path since command -v depends on PATH carrying nvm bin). Alts
rejected: hardcoded tier->tools, advisory magic, strict fail-closed.
BDR-026: secret source-of-truth in ~/.claude/.env via repo/.env symlink;
source follows link -> zero read-path change; link_env defensive.
LRN-037: verify the load-bearing scenario on the real subject in real context,
not a stub/logic — every refutation this chantier came from execution.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 17:10:51 +02:00
Bastien Chanot
0985153b26 chore(memory): LRN-036 — command -v depends on PATH not alias
Real cause of the gate's 'claude absent'/unknown: command -v claude needs the
nvm node bin on PATH; a sanitized-PATH hook/subshell or a version-pinned nvm
path loses it. NOT the alias (refuted: binary on inherited PATH makes command
-v succeed), NOT exit 11 (that's the mitigation). Fix = ensure_claude_on_path.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 12:14:24 +02:00
Bastien Chanot
9d8b4cc38c chore(memory): capitalize LRN-034 + LRN-035
LRN-034: narrated state (any source) ≠ ground truth — P3 was believed
applied (approval confused with writing, accepted without re-checking)
until git proved otherwise on reprise. Lead signal missed = internal
contradiction ("P3 non écrit" then "P3 fait"). Verify against git.
LRN-035: honest dedup — name-mention ≠ definition-instance; the dosage
rule correctly reduced P4 to a no-op, don't force factorization.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU
2026-06-21 02:43:00 +02:00
Bastien Chanot
a06b6d718f chore(memory): capitalize LRN-032 + LRN-033 + BDR-024
LRN-032: rule has a domain — applying it out-of-domain = category error;
check artifact class before invoking (80-char rule = source-code, not CLI
output). Cross-ref LRN-031 (paired meta-lessons on not applying mechanically).
LRN-033: multibyte separator breaks printf %-Ns byte-padding; pad via ${#}.
BDR-024: show --plain = claude-free parse contract for the upcoming design gate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU
2026-06-19 20:03:34 +02:00
Bastien Chanot
d4a5cfec93 chore(caveman): purge plugin + always-on integration
Disable + uninstall caveman@caveman and delete every repo dependency on
it: SessionStart/UserPromptSubmit hook blocks, standalone hook files,
settings.json enabledPlugins + marketplace entries, install-plugins.sh
STEP 5.5, update-all.sh refresh step, plugins.lock.json entry, doctor.sh
checks, lib/detect-plugins.sh helpers, lib/profile.sh + plugin-advisor +
skills/profile protected-list entries, .gitignore runtime-file block,
and README/USAGE docs. Dead /caveman:compress refs replaced with
manual/claude.ai guidance. Memory-registry terse-format convention kept
(separate subsystem). Version 3.4.0 -> 3.5.0.

On a subscription plan caveman's ~75% output-token compression has no
cost benefit, and the always-on hooks added friction on validation
gates and client deliverables.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU
2026-06-19 19:08:40 +02:00
Bastien Chanot
7403c658d2 chore(memory): capitalize BDR-023 + LRN-031
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) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3e8LaH2vymmxyh36h3jFU
2026-06-19 18:48:13 +02:00
Bastien Chanot
e631e3a6ca chore(memory): capitalize BDR-022 (doc-syncer public-docs scope)
Record the doc-syncer rewrite decision: sync targets limited to public
docs, .claude/ and CLAUDE.md as read-only context, normative conventions
and clean mode added. Extends BDR-016, does not supersede it. Log the
session in journal.md under 2026-06-18.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 17:57:36 +02:00
Bastien Chanot
f39cc1b954 chore(memory): capitalize LRN-030 (Opus 4.8 under-delegation)
Add LRN-030 documenting Opus 4.8's tendency to under-delegate
subagents/memory/custom-tools by default and the CLAUDE.md fan-out
rule that counters it; log the session in journal.md under 2026-06-18.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 17:06:11 +02:00
Bastien Chanot
49a1a41b56 chore(memory): capitalize audit-delta build, darwin runs, CLAUDE.md refactor
Registry batch covering 2026-06-11/12:
- BDR-020 audit-delta design, BDR-021 CLAUDE.md restructure
- LRN-027 periodic-skill state file, LRN-028 baseline contamination,
  LRN-029 blind judges catch exception/blanket-rule contradictions
- EVAL-003 darwin run on audit-delta, EVAL-004 26-skill eval + 4-bug fix
- journal 06-11 + 06-12, TODO darwin-bugfix plan (all checked)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 16:51:13 +02:00
Bastien Chanot
61a98573d7 chore(skills): remove disable-model-invocation repo-wide
Strip the disable-model-invocation frontmatter key from all 19 editable skills. Absent = default = model invocation enabled. 8 were 'true' and blocked the model AND orchestrators from self-routing (status, plugin-check, analyze, onboard, refactor, init-project, pdf-translate, ship-feature) — contradicting the CLAUDE.md skill-routing rules. The other 11 were 'false', a no-op noise line.

The setting is binary (no per-caller granularity), so enabling orchestrator chaining also enables model auto-fire — accepted. Genuinely destructive operations remain guarded by the careful/guard hooks, independent of this flag.

Capitalized: BDR-019 (decision), LRN-026 (learning), journal 2026-06-09.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:18:10 +02:00
Bastien Chanot
f928a53ed9 fix(gstack): link spec skill, complete gitignore allowlist (BLK-007)
A gstack submodule bump added `spec` (v1.47) and the iOS device-farm
5-skill set (v1.43) but gstack `./setup` was never re-run, leaving all 6
as source-only — unlinked, invisible to Claude and untouched by
reset/`gstack on`.

  - Link `spec` only, surgically: skills/spec/SKILL.md symlink matching
    gstack setup's per-skill pattern (real dir + absolute SKILL.md link).
    Platform-agnostic, useful planning skill. Added to full + web-full
    profiles (must be in the active `full` profile or `set full` would
    re-disable it).
  - iOS skills deliberately NOT linked: this is a Linux host, and the iOS
    device-farm needs a Mac daemon + Tailscale + physical iOS devices.
    Linking them would add 5 dead skills plus passive token cost.
  - Complete the .gitignore gstack allowlist: add the 12 entries missing
    from it — `spec`, the 5 `ios-*` (so they stay ignored if a future
    setup on a Mac materializes them), and 6 already-parked skills
    (document-generate, landing-report, scrape, setup-gbrain, skillify,
    sync-gbrain). The parked ones matter because `gstack on` moves parked
    skills into skills/, where any allowlist gap becomes untracked git
    noise. Also drop the stale `skills/checkpoint` entry (renamed to
    context-save).

Verified: `profile show full`/`web-full` report spec enabled; the
source-vs-allowlist drift check is now empty; profile.sh still parses.

The gstack submodule pointer bump itself is left uncommitted (separate
pending work).

Memory: BLK-007 -> resolved; LRN-025 (gitignore allowlist must cover all
toggleable skills incl. parked, else enabling one = git noise).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 18:41:43 +02:00
Bastien Chanot
da4e6b9590 feat(profile): add gstack on|off verb to lib/profile.sh
Centralize gstack toggling in the `profile` command without losing the
active-profile label.

  - `gstack on`  re-enables ALL parked gstack skills (moves
    skills-disabled/gstack__* back) but does NOT touch .active-profile,
    so the user layers full gstack on top of their current profile and
    the statusline label is preserved. Unlike `reset`, which clears the
    label to "none".
  - `gstack off` disables gstack skills not listed in the active profile;
    errors cleanly when no profile is active (needs one to know what to
    keep).

Refactor (behavior-preserving): extract three shared helpers
`enable_all_gstack`, `disable_gstack_not_in`, `parked_gstack_count` and
rewire `cmd_reset` + `cmd_set` to reuse them instead of duplicating the
symlink-toggle loops. Wire `gstack` into main() dispatch, usage(), and the
header usage block.

Docs: SKILL.md argument-hint, examples, and output-policy updated. The
generic `make profile cmd="gstack on"` target already covers Make usage.

Verified: shellcheck CLEAN, `bash -n` OK, 6-case test (help, bad-action,
off-with-no-profile, on, off-trim, on-cycle) with final assertion that the
live symlink state was restored exactly to its pre-test value.

Memory: capitalize BDR-018 (decision), LRN-024 (DRY helper-extraction
pattern), BLK-007 (6 gstack source skills ios-*/spec unlinked post
submodule bump — open follow-up), EVAL-002 (self-eval, false "full.profile
bug" flag corrected pre-edit). Backfill index drift: BDR-017, BLK-005/006.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 18:31:48 +02:00
Bastien Chanot
0a8f524b72 chore(graphify): rewrite CLAUDE.md + hook to prefer graphify query over GRAPH_REPORT.md
Query-first approach: run graphify query/path/explain for focused
questions, read GRAPH_REPORT.md only for broad architecture review.
Also fixes checkpoint→context-save routing line in CLAUDE.md.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:55:13 +02:00
Bastien Chanot
b74d9afc4a chore(memory): capitalize BLK-004/005/006, LRN-021/022/023, journal 2026-05-20/21
Session entries from two bugfix sessions:
- BLK-004: orphan /ship-feature wrapper post-refactor (resolved)
- BLK-005: profile checkpoint→context-save rename (resolved)
- BLK-006: profile.sh symlink false-negative via logical cd (resolved)
- LRN-021: sweep ~/.claude/commands/ after orchestrator migrations
- LRN-022: audit profiles against gstack skill list after submodule bump
- LRN-023: cd -P mandatory for scripts invoked via symlink

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:55:04 +02:00
Bastien Chanot
157b2de788 memory: capitalize 2026-05-18 — BDR-017 + LRN-020 (full profile)
BDR-017: `full` profile = web-full + plan + dev superset for end-to-end
MVP via /init-project. Alternatives rejected: extend web-full (different
semantic), profile-of-profiles (not supported), keep 3 apply-chained.

LRN-020: sentinel/identifier collision pattern — `cmd_current`'s "full
(no profile set)" literal collided with new profile name. Renamed to
"none". Rule: sentinels must be outside the entity namespace.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-18 20:53:37 +02:00
bastien
59ff561c55 memory: capitalize 2026-05-15 — BDR-016 + LRN-019 (doc-syncer rework)
BDR-016: doc-syncer makes README AUTO+unconditional (no skip at
validation gate, only yes/edit) and DEPLOY.md prod-only with a
14-section VPS-deploy template. Mixed dev/prod DEPLOY.md flagged as
drift; dev quick-start lives only in README.

LRN-019: deployable-project doc split by audience — README = dev +
features, DEPLOY = ops + SRE. 14-section template mirrors real
VPS-deploy shape (topology, env, provisioning, two-layer firewall,
Docker tuning, persistence, backups, TLS, observability, hardening,
rollback, runbook). Drop sections that don't apply.

journal: 2026-05-15 heading covering the /commit-change run.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:37:19 +02:00
bastien
f4a0cbe24d memory: capitalize darwin 2026-05-12 — LRN-017/018 + BLK-003 + BDR-015
LRN-017: thin-dispatcher SKILL.md round-1 invariant = fallback + triggers.
LRN-018: darwin eval subagents drift on total math (factor-10, D8 weight).
BLK-003: scripts/screenshot.mjs hardcoded macOS path blocks PNG cards on Linux.
BDR-015: exclude broken gstack symlinks from /darwin-skill scope.
journal: 2026-05-12 session entry.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:07:29 +02:00
bastien
34d850336e darwin: Phase 3 report — bottom-5 round 1, avg 58.0 → 78.2
Audit at .claude/audits/DARWIN-SKILL-2026-05-12.md.
5 skills optimized (status, refactor, plugin-check, skills-perso,
commit-change), all KEEP. Rounds 2-3 skipped — diminishing returns.
graphify deferred to exploratory rewrite (Phase 2.5).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:01:42 +02:00
bastien
f1e2f3dfd3 fix(memory): BDR-011 body status — superseded by BDR-013
/prune-memory first run flagged body↔Index drift on BDR-011:
- Index row (since 2026-05-11): `superseded by BDR-013`
- Body line 201 (since 2026-05-07): `Status: accepted`

BDR-013 explicitly supersedes BDR-011's 4-chapter doc structure with
6-chapter restructure (scores+NAP promoted). Body now consistent with
Index.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-11 16:27:20 +02:00
bastien
bf54de84a1 docs(memory): BDR-013 + BDR-014 + LRN-014..016 + 2026-05-11 journal append
decisions.md:
- BDR-013: client-handover 6-chapter doc — promote scores §2 + NAP §4
  (supersedes BDR-011 4-chapter structure).
- BDR-014: personal SKILL.md descriptions follow "Use when [triggers]…"
  pattern + 1024-char frontmatter spec limit.
- Backfilled missing BDR-012 Index row (entry existed in body, Index
  skipped in prior session).

learnings.md:
- LRN-014: pandoc base gfm strips header id attrs — need
  `gfm+gfm_auto_identifiers` for internal anchor links.
- LRN-015: BrightLocal Free Tools retired 2026 — Moz Local Citation
  Checker is current free NAP-audit replacement.
- LRN-016: pandoc GFM checkbox markup breaks adjacent-sibling CSS —
  target `li > input[type="checkbox"]` directly, not `+ *` siblings.
- Backfilled missing LRN-013 Index row.

journal.md:
- 2026-05-11 session: orchestrator audit + writing-skills CSO fixes +
  client-handover 6-chapter restructure + 4 atomic commits e2425ca..0fb634d.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-11 16:15:05 +02:00
bastien
17ef213548 docs(memory): BDR-012 + LRN-013 + 2026-05-07 journal append
- BDR-012 — `/client-handover` cover: white bg + green-forest accents +
  PNG logo default. Captures iteration (cream → green-dark rejected →
  white-pure final). Why: light theme matches zenquality.fr without
  overpowering long client-facing text. Solid green-dark reserved for
  marketing covers, not deliverables.
- LRN-013 — marked CLI 16.x ignores stdin and dumps own cli.js source.
  Pattern: do not assume marked CLI accepts stdin like awk/jq/sed.
  Always pass `-i FILE`. Smoke-test MD→HTML output for known content.
- Journal — appends bugfix subsection under 2026-05-07 with the three
  bugs, root causes, fixes, verified output (164 KB / 19 pages).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 19:57:20 +02:00