Commit Graph

313 Commits

Author SHA1 Message Date
Bastien Chanot
e7e9dacddc refactor(claude-md): resolve contradictions, fix dead refs, restructure sections
Fable 5 audit of the global CLAUDE.md (symlinked from this repo):

Contradictions resolved:
- two conflicting graphify sections merged into one (query-first when
  graphify-out/graph.json exists, direct read otherwise; single command
  form; dropped the false 'this project has a knowledge graph' claim)
- plan rule: 'when in doubt skip plan' no longer cancels the mandate —
  borderline = single-file small obvious change
- deviation rule disambiguated: minor/justified -> explain after,
  significant/shaky -> ask before
- 'append-only' registries reconciled with /prune-memory curation

Dead refs fixed: /caveman:compress -> /caveman-compress; design-gate
path now ~/.claude/lib/ (was repo-relative); '(replaces LESSONS)' note
dropped.

Structure: Health Stack / Skill routing / graphify no longer nested
under '# Communication mode'; new '# Tooling & skills' and
'# This repo only' sections; repo-specific Health Stack labeled as such.

Routing updated: + audit-delta, close, capitalize, prune-memory,
profile, context-restore, geo; explicit gstack-OFF fallback rule.
Mid-task question exception generalized to all skill-mandated gates.

Non-critical sections caveman-compressed; Architecture decisions and
Security kept verbatim (must stay unambiguous). Net -1471 chars while
adding 8 routing entries.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 13:56:59 +02:00
Bastien Chanot
4d9cd7efe4 fix(geo-analyzer): define unreachable operationally
Both blind judges flagged the same residual: without a detection
criterion, a /seo-dispatched subagent could misread itself as headless
and degrade to report-only. Unreachable = no answer obtainable at all
(cron/CI, user explicitly absent); orchestrator dispatch with a main
thread that can relay questions is reachable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 19:25:40 +02:00
Bastien Chanot
225c4377da fix(onboard): allow Agent and Skill tools in frontmatter
Workflow STEPs 5-7 dispatch subagents and invoke skills; allowed-tools
omitted both, contradicting the orchestrator's core mechanism.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 19:09:44 +02:00
Bastien Chanot
2dc8431a69 fix(init-project): repoint missing readme-updater.md to doc-syncer
readme-updater.md does not exist on disk; STEPs 5b and 12 were broken
references. doc-syncer.md AUTO MODE covers both cases (README bootstrap
when missing, drift sync after changes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 19:09:44 +02:00
Bastien Chanot
7719aea103 fix(analyzer): resolve memory-update vs read-only contradiction
"Update project memory" instructed file writes while RULES say
"Do not modify files". Patterns now surface in the analysis output;
persistence stays in the main thread via the gated capitalize flow.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 19:09:44 +02:00
Bastien Chanot
83e9871bc4 fix(geo-analyzer): headless run never applies fixes autonomously
Live darwin test: with the user unreachable, the triage table's
"Confirmation: No" batches edited 2 source HTML files unsupervised.
Autonomous batches presume a reachable user who saw the printed plan;
headless -> all batches report-only with ready-to-apply content.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 19:09:44 +02:00
Bastien Chanot
9fc93fabd2 optimize audit-delta: close 3 judge-flagged consistency gaps
Round 2 of darwin optimization (judge-identified residuals):
- 3c marker rule now cross-references the STEP 0 dangling/corrupted
  exceptions instead of contradicting them
- corrupted-but-present state JSON branch defined (trust no axis,
  ask repair/reset; headless -> full codebase report-only, file as-is)
- unreachable user at 3e max-cycles STOP -> fail closed: revert axis
  fixes, findings back to open, marker untouched

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:54:35 +02:00
Bastien Chanot
0d2ece757e optimize audit-delta: define unreachable-user branches (dangling marker, axis default)
Round 1 of darwin optimization, dim3 (failure-mode encoding). Live test
showed two agents diverging on undefined branches:
- dangling marker + unreachable user -> now full-codebase report-only,
  marker untouched (corrupted state needs user-approved repair)
- no axes named + unreachable user -> now defaults to all four axes
Also adds the matching Common-mistakes row. Includes test-prompts.json.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 17:48:41 +02:00
Bastien Chanot
e12f8243e5 baseline: add audit-delta skill (pre-darwin-optimization snapshot)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 15:41:49 +02:00
Bastien Chanot
fbf3e266f9 set fable 5 per default 2026-06-10 12:55:39 +02:00
Bastien Chanot
99fd082a65 chore(gstack): bump submodule to v1.52.1.0
Update the gstack submodule pin 026751e -> 070722a (v1.52.1.0: brain-aware planning + memory diagnostic + CDP leak fixes). Also removed a junk recursive self-symlink (bin/bin -> bin) from the submodule working tree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:38:32 +02:00
Bastien Chanot
2c4c01dc3e chore(design-motion): quote SKILL.md description, gitignore local symlink
Wrap the frontmatter description in quotes (defensive valid-YAML: it contains an em-dash and an apostrophe). Add skills/design-motion-principles to the external-skill-symlink ignore allowlist so it matches its 4 siblings (emil-design-eng, frontend-design, darwin-skill, find-skills) and stops surfacing as untracked noise — consistent with the LRN-025 allowlist rule.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:28:51 +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
d188cae302 feat(skills): add /capitalize — pre-wipe memory flush skill
Salvages registry-worthy insights from the conversation before /clear or /compact wipes context. Scans the conversation, dedups each candidate against the existing .claude/memory/ registries (its signature move vs /close), routes across all 5 registries behind a compact approval gate, always writes a journal line.

Baseline-tested per superpowers:writing-skills (RED/GREEN/REFACTOR): the no-skill baseline double-logged one incident across LRN+BLK; the skill passes clean and now counters that via a 'one incident -> one primary registry' rule. Ships v1 with the approval gate as the human safety net (same posture as /prune-memory).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 16:17:55 +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
0d9f3d41eb feat(design): mandate full design toolchain on UI work via CLAUDE.md rule + hook
Add a tiered-by-scope "Design work — full toolchain" rule to the global
CLAUDE.md: trivial tweaks stay on /hotfix, building UI mobilizes ui-ux-pro-max,
frontend-design, Magic MCP, emil-design-eng, design-motion-principles, and
design-html; design systems start with design-consultation; reviews use
design-review + emil + motion audit. In doubt about scope, do not silently
skip the toolchain — ask or default to the Build tier.

Reinforce it with a design-toolchain-reminder UserPromptSubmit hook that
detects UI/design signals (broad FR+EN keyword set, \b-guarded against
substring false matches) and injects the tiered guidance into context. Soft
nudge, always exits 0, falls back to raw stdin when the hook JSON is missing.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 15:48:10 +02:00
Bastien Chanot
6e30af0a01 chore(settings): set effortLevel xhigh, bump model 4-8, re-enable pr-review-toolkit
Add native effortLevel: "xhigh" (persisted enum, replaces dropped invalid "max").
Bump model to claude-opus-4-8[1m]. Re-enable pr-review-toolkit plugin.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 19:37:27 +02:00
Bastien Chanot
23449dfc82 fix(scripts): add gstack infra symlinks to install, update, and doctor
The gstack/bin/ and gstack/browse/dist/ symlinks (added in link.sh) were
missing from install-plugins.sh and update-all.sh, meaning fresh installs
and updates wouldn't create them. Also adds doctor.sh health checks.

- install-plugins.sh: create symlinks after gstack ./setup
- update-all.sh: refresh symlinks after gstack submodule update
- doctor.sh: verify both symlinks exist in consistency section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 07:25:03 +02:00
Bastien Chanot
0380f218c1 chore(gitignore): add .gstack/ to ignore list
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 07:20:34 +02:00
Bastien Chanot
7ec59819ab fix(link): expose gstack shared infra (bin/ + browse/dist/) via symlinks
Per-skill SKILL.md symlinks don't expose gstack's shared infrastructure.
Multiple skills hardcode ~/.claude/skills/gstack/bin/ (gstack-config,
gstack-update-check, gstack-paths) and gstack/browse/dist/ (browse binary).

Create targeted symlinks in link.sh:
- ~/.claude/skills/gstack/bin/ → skills-external/gstack/bin/
- ~/.claude/skills/gstack/browse/dist/ → skills-external/gstack/browse/dist/

Fixes: browse binary not found, gstack-config failures, freeze gstack-paths
resolution. Safe with profile toggles (profiles move per-skill dirs, not
the gstack/ infra dir). Safe with stale link cleanup (only removes -L
symlinks, not real dirs created by mkdir -p).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 06:05:26 +02:00
Bastien Chanot
c44852e665 feat(skills): add pdf-translate — PDF to translated HTML via Vision
OCR/image-based PDF pipeline: convert pages to PNGs, read with Claude
Vision (bypasses unreliable OCR text layer), translate with cross-page
glossary consistency, reconstruct faithful HTML via /design-html.

5 steps: deps check → page images + assets → style analysis →
page-by-page read+translate → HTML reconstruction → visual QA.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-26 03:38:16 +02:00
Bastien Chanot
5407d66da9 chore(settings): disable pr-review-toolkit, move model key, drop effortLevel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 22:57:25 +02:00
Bastien Chanot
469c807c10 feat(skills): add design-motion-principles from kylezantos
Motion/animation design skill with 3-designer lens (Emil Kowalski,
Jakub Krehel, Jhey Tompkins). Two modes: Create and Audit.
Complements frontend-design (broad) with deep motion expertise.

Integration points:
- skills-external/design-motion-principles/ — skill files + references
- link.sh EXTERNAL_SKILLS — symlink to ~/.claude/skills/
- install-plugins.sh step 8c — presence check
- update-all.sh step 7.2 — sync from GitHub
- profiles: design, full, web, web-full — listed as external
- plugin-advisor — decision table, recommended sets, conditional rules
- design-gate — symlink check + non-blocking warning if missing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 22:40:23 +02:00
Bastien Chanot
6b55a3aaf6 fix(doctor): update stale skill/agent refs, scope disable-model-invocation check
- Replace readme → doc in EXPECTED_SKILLS (readme skill was replaced by doc)
- Replace readme-updater → doc-syncer in EXPECTED_AGENTS
- Skip external/symlinked skills in disable-model-invocation check —
  external skills (frontend-design, emil-design-eng, darwin-skill, find-skills)
  and gstack skills (symlinked SKILL.md) are not owned by this repo

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 21:34:42 +02:00
Bastien Chanot
237810396c chore(plugins): add frontend-design to plugin-advisor and design-gate
frontend-design (Anthropic's anti-AI-slop skill) was installed but not
referenced in the plugin-advisor decision table, recommended sets, or
conditional rules — nor in the design-gate detection logic.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 20:59:19 +02:00
Bastien Chanot
057a5b7f5c feat(skills): add frontend-design from anthropic-agent-skills
Source: anthropic-agent-skills plugin cache → skills-external/frontend-design/
Auto-install via install-plugins.sh step 8b, auto-update via update-all.sh
step 7.1, symlinked by link.sh (refactored to loop over EXTERNAL_SKILLS).
Added to profiles: design, web, web-full, full.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-23 00:58:30 +02:00
Bastien Chanot
2b61276dfd chore(statusline): add PowerShell caveman-statusline hook
Windows/cross-platform statusline hook for caveman mode indicator.
Reads .caveman-active flag with symlink and size guards to prevent
injection via crafted flag files.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:55:28 +02:00
Bastien Chanot
b59cce1d1f feat(graphify): upgrade to 0.8.13 — gemini backend, encoding, monorepo, CLI export
Major SKILL.md rewrite:
- Fast path: skip extraction when graph exists and user asks a question
- Gemini backend replaces Kimi as default external LLM
- All file I/O uses ensure_ascii=False + encoding="utf-8"
- Monorepo support via per-subfolder extraction + merge
- Obsidian/HTML export via CLI instead of inline Python
- Node ID format includes parent dir to prevent ghost duplicates
- file_type gains "concept" as valid value
- Subagent chunk paths must be absolute
- --help flag prints usage and stops
- Large corpus gate raised from 200 to 500 files

Bumps gstack submodule to 026751e.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:55:23 +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
7298a2e410 chore(settings): bump effortLevel to max, model to claude-opus-4-6[1m]
Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:55:08 +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
1dd6b43517 chore(settings): switch default model to claude-opus-4-6
Previously unset — Claude Code was defaulting to Opus 4.7 (1M) based on
plan capability + picker history. Pin the default to Opus 4.6 so future
sessions start on 4.6 without going through the /model picker.

1M context tier is plan-routed (Claude Max) so no explicit suffix needed
in the persisted ID — backup `.claude.json` files in this account show
the same bare form (`"model": "claude-opus-4-7"`) while runtime usage
logs as `claude-opus-4-7[1m]`.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:28:31 +02:00
Bastien Chanot
a491de51c8 feat(statusline): replace plan segment with profile: + effort:
Drop the `PLAN` (Max/Pro) segment — user wants runtime context, not
account-tier info. Add prefixes for clarity:

- `profile: <name>` reads `<repo>/.active-profile` (already wired in
  the previous commit).
- `effort: <level>` reads `.effortLevel` from `<repo>/settings.json`
  via jq — picks up `/effort` changes automatically since settings.json
  is the source-of-truth (symlinked into `~/.claude/settings.json`).

Sample output:

  Opus 4.7 | claude (master) | profile: full | effort: xhigh | ███░░ 42% | 3m

`lib/detect-plugins.sh` is left untouched — still used by
hooks/session-start.sh, doctor.sh, update-all.sh, install-plugins.sh.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:17:29 +02:00
Bastien Chanot
cb1e8cd814 feat(profile,statusline): show active profile in statusline via .active-profile cache
`bash lib/profile.sh current` is 12s+ — far too slow to call from the
statusline hook (runs on every keystroke). Add a one-line cache file at
`<repo>/.active-profile`, written by `cmd_apply` and `cmd_reset`. The
statusline reads the file directly with a single `head -n1`, no
sub-shell into `profile.sh`.

Behavior:
- `bash lib/profile.sh set <name>` (which ends in `cmd_apply`) and
  `bash lib/profile.sh apply <name>` both write `<name>` to
  `<repo>/.active-profile`.
- `bash lib/profile.sh reset` writes the literal `none`.
- Statusline inserts the cached profile name between the plan segment
  and the context-bar segment, e.g.
  `Opus 4.7 | claude (master) | Max | full | ████░░░░░░ 42% | 3m`.
- Missing or empty cache → statusline shows `?`.

Cache file is gitignored — it tracks runtime state, not source.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:14:12 +02:00
Bastien Chanot
a4558ee805 fix(profile): resolve REPO via physical path (cd -P) so cmd_current finds the right skills-disabled
`lib/profile.sh:43` set `REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"`.
Default `cd` preserves symlinks (logical pathname), so when the script is
invoked via the `~/.claude/lib/profile.sh` symlink, `$REPO` resolves to
`/home/bchanot-ubuntu/.claude` instead of the real repo path. `$SKILLS_DIR`
still works because `~/.claude/skills` is itself a symlink to the repo's
`skills/`. But `$DISABLED_DIR` ends up at `~/.claude/skills-disabled` (a real
sibling directory containing only stale npx-skill symlinks) while the actual
disabled gstack skills sit at `<repo>/skills-disabled`.

Symptom: `bash "$HOME/.claude/lib/profile.sh" current` returns
`none (all gstack skills enabled — no profile set)` even when a profile is
applied — because `find $DISABLED_DIR -name 'gstack__*'` returns 0.

Adding `-P` to `cd` forces physical-path resolution so `$REPO` always points
to the real repo regardless of how the script was invoked. `cmd_current`
now correctly reports `full (100% match, 14 gstack skills disabled)`.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 05:04:54 +02:00
Bastien Chanot
69c5ded827 fix(profiles): rename checkpoint to context-save in 5 profiles
gstack upstream renamed the `checkpoint` skill to `context-save`
(it was shadowed by Claude Code's native /checkpoint rewind alias).
`/profile set full|dev|backend|web|web-full` was emitting
`⚠ missing: checkpoint — try: bash link.sh`, but link.sh only
materializes symlinks for skills that exist upstream — it cannot
resurrect a renamed skill, so the suggested next step was a dead
end.

Replace `checkpoint` → `context-save` in all 5 affected profiles
so the warning goes away and the new skill is enabled when the
profile is applied.

CLAUDE.md routing rule (line 193) also updated locally but left
uncommitted because the file carries an unrelated in-progress
graphify section rewrite.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-21 04:57:14 +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 Chanot
5da97d10f6 feat(profile): add full profile for end-to-end MVP via /init-project
Superset of web-full + dev + audit + plan tools — covers brainstorm →
design → architecture review → scaffold → implement → ship → audit
pipeline needed by /init-project to produce a real MVP in one session.

Also renames cmd_current "no-profile" sentinel from "full" to "none"
to avoid collision with the new profile name.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-18 20:50:13 +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
b0d129be27 chore(settings): enable ui-ux-pro-max skill
Toggle ui-ux-pro-max@ui-ux-pro-max-skill false → true so design-review,
design-consultation, and feat/hotfix design gate can route through it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:21:18 +02:00
bastien
58f1e7e458 feat(doc-syncer): README mandatory + 14-section prod-only DEPLOY.md
README.md creation becomes AUTO and unconditional — strikes through any
"no README" opt-out in CLAUDE.md. Enriched template: Stack, Quick start
(dev), Verifying a change, Build & deploy sections, all rendered from
real project data (manifest, .env.example, scripts).

DEPLOY.md becomes prod-only, expanded into a 14-section VPS-deploy
structure (topology, env, provisioning, two-layer firewall, Docker
tuning, first-time setup, routine deploys, persistence, backups, TLS,
observability, hardening, rollback, runbook). Dev quick-start lives in
README only — mixed dev/prod DEPLOY.md is flagged as drift.

AUTO MODE: missing README surfaced as SIGNIFICANT in STEP A4 with
rendered draft for one-shot end-of-session approval. Validation gate
(STEP 8) now distinguishes AUTO patches / HUMAN items / CREATE items,
and README CREATE has no "no" — only yes/edit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 22:21:13 +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
f4ceed20bb merge darwin: bottom-5 skill optimization round 1
Avg score 58.0 → 78.2 across status, refactor, plugin-check,
skills-perso, commit-change. See .claude/audits/DARWIN-SKILL-2026-05-12.md.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 18:04:42 +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
db9048877a optimize skills-perso + commit-change: round 1 — D3 edge cases
skills-perso: add 'Known limits of detection heuristic' section
(false positives in code blocks, false negatives for non-standard
agent paths, override via owner: user marker, malformed frontmatter).

commit-change: add fallback when commit-changer.md unreachable,
plus pre-flight check stub (detached HEAD, missing git identity).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:59:22 +02:00
bastien
727e9fc73a optimize plugin-check: round 1 — D3 fallback + D1 triggers + advisory clarification
D3: fallback when plugin-advisor.md unreachable.
D1: triggers added.
D4: explicit 'never writes' clarification (skill is advisory-only).
Size: 425B → 628B (+48%, under 150% cap).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:57:48 +02:00
bastien
9a992a0186 optimize refactor: round 1 — D3 fallback + D1 triggers
Add explicit fallback when refactorer.md unreachable (D3 edge case).
Add triggers to frontmatter for routing (D1).
Size: 379B → 493B (+30%, under 150% cap).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:55:39 +02:00
bastien
58e99b2f36 optimize status: round 1 — D3 fallback + triggers
Add explicit fallback when status-reporter.md unreachable (D3 edge case).
Add triggers to frontmatter description for routing clarity (D1).
Size: 776B → 834B (+7.5%, under 150% cap).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:53:28 +02:00
bastien
11b0c6bb8e darwin: add test prompts for 5 skills (baseline pass)
Skills covered: close, graphify, harden, profile, prune-memory.
Used by /darwin-skill dim 8 effect testing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:50:06 +02:00