Session capture for the /reconcile pass + the BLK-013 fix-forward build:
- journal 2026-07-01: reconcile real-state (1 actionable / 3 upstream /
3 deferred / release live), (c) TODO drift, (a) npm guard built.
- BLK-013: append Update — fix-forward now BUILT (1f2c1cc); was
"script hardening NOT built". Now fully resolved (env + script).
- BLK-014 + BDR-046: append Update — MERGED 2393ca5, supersedes the
stale "pending merge". Records that BDR-046 already settled the
"canal d'install" question (native installer, no `elif npm` branch).
Append-only (Update blocks, last-block-wins) — no past entry rewritten;
verified reconcile_blk_open now returns only the true upstream trio.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VeBXkDr74N9whdiJyjzyVN
BDR-044: auto-skill-dispatch chantier retired won't-build — 3rd measured moot
of the session (after --help, darwin re-baseline). Cartography showed L1
(superpowers "1%->MUST invoke") already over-determines routing -> reframed
from "does it route" (yes) to DISCERNMENT; risk inverted under->over. Measured
in real fresh sessions (8 prompts/3 classes): clear->route, ambiguous->ask,
trivial->abstain — model discriminates, no over-routing. Adding L2 prose =
phantom value + degradation risk. LRN-083: subagents are an invalid instrument
for measuring main-loop spontaneous routing (SUBAGENT-STOP + delegated framing
pin to the no-route floor) — retired the 0/6 subagent RED. LRN-080 corroborated
(3-in-a-row). TODO -> won't-build. Claude composed all -> trailers (4th
application of LRN-081).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017KWG7sXg94LXX1gddCGBvM
LRN-082: a trigger-cleared on a multi-motif exclusion lifts only the named
motif. BDR-043 cleared BDR-015's broken-symlink ground (a) but not its
external-ownership ground (b) → the darwin re-baseline is phantom value
(would edit the gstack submodule, LRN-070; results.tsv gone anyway). TODO (b)
resolved-MOOT (not done, not open). Trailers present: Claude composed LRN-082
+ the moot note — LRN-081's own rule, 2nd application.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017KWG7sXg94LXX1gddCGBvM
LRN-081: Claude commit trailers only on Claude-COMPOSED content; a commit merely staging user-authored text gets none (staging != authorship). TODO reconcile: checked L26 'Cleanup machine courante' DONE (make plugin EXIT=0 this session ran Step 8.5, fs-verified strays absent); added (a) harden install-plugins.sh Step 1 npm-via-corepack (BLK-013 fix-forward) + (b) darwin re-baseline of the 5 ex-broken skills (BDR-043). Trailers present here because Claude composed the LRN + TODO formulations (LRN-081's own rule) — unlike e591510 which staged raw user text.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
TODO write-back (chantier /reconcile subtasks ticked, S3 split honestly)
+ registry entries (body + Index rows) for the shipped skill.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6bUdvHnajCNzgVQefZowj
- 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
- 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
- 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
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
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
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
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
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
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>
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>
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>
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>
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>
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>
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>
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>
Append BDR-009 entry + Index update in decisions.md, plus 2026-05-05
heading in journal.md covering the 4-commit batch.
Catches Index up to BDR-008 (was missing 007/008 entries despite
already-written sections).
Co-Authored-By: Claude <noreply@anthropic.com>