journal.md 11 KB


type: journal schema: entry: one date heading per working session body: 3-5 lines max - what was done, decided, blocked rules:

  • One heading per date (YYYY-MM-DD), not per session.
  • Append at end. Never edit past entries.
  • Keep terse. Details belong in decisions/learnings/blockers - timeline only. ---

Journal

2026-04-23

  • Restructured tree: tasks/.claude/tasks/, created .claude/memory/ (5 registries) + .claude/audits/.
  • Adapted CLAUDE.md + skills onboard, init-project + agent onboarder + lib/project-archetypes/dotfiles-meta.md.
  • Added CAPITALIZE step in ship-feature, bugfix, hotfix, feat, commit-change + created /close skill for session-end ritual.
  • 2nd user verify-gate caught bugs: .gitignore broke tracking (fixed BDR-003); harden/validate dispatcher bash broken after audit move (LRN-002).
  • Audits routed to .claude/audits/ (seo/geo/harden/validate/code-clean) + MIGRATION.md written for existing projects.
  • 9 atomic commits (c721a36..a9606aa) via /commit-change — first real exec of Phase 4 CAPITALIZE.
  • Decisions logged: BDR-002, BDR-003. Learnings: LRN-002. Blockers: BLK-002.
  • English-only rule enforced in all CAPITALIZE specs (commit bfcca72); 9 existing entries retrofitted to English in follow-up commit.

2026-04-27

  • Settings: switched permissions.defaultMode from "default" to "auto" and dropped disableAutoMode: "disable" (BDR-004); reorganised top-level keys + added effortLevel: "xhigh"; removed stale root TODO.md (already migrated to .claude/tasks/TODO.md).
  • Learning: Claude Code disable* settings use sentinel string "disable", not boolean (LRN-003).
  • 3 atomic commits (f7f033f..1421578) via /commit-change.
  • Animation lib autoflow added: new helper lib/animation-lib-check.sh + STEP 5e in /init-project (auto-install) + STEP 2.5 in /onboard (opt-in) + read-only detection in plugin-advisor PHASE 1/2/3 + signal in lib/design-gate.md + scaffolder note. motion chosen over legacy framer-motion (BDR-005, LRN-004).

2026-05-03

  • Added JuliusBrussee/caveman as 4th always-on plugin (BDR-006). Full install: plugin + standalone hooks + caveman-shrink MCP scaffold (snippet only, not auto-registered — proxy needs upstream wrapper, LRN-006).
  • Discovered two co-masking bugs: claude plugin install doesn't enable (LRN-005) + session-start.sh hardcoded "✅ ON: security-guidance rtk superpowers" regardless of actual state. Added enable_plugin() helper + plugin_enabled() detector reading enabledPlugins from settings.json. Banner now reflects reality.
  • Side fix: doctor.sh exited under set -euo pipefail when gstack/skills/ missing — wrapped find in brace + || true.
  • 3 atomic commits (0184818..2ec7935).

2026-05-04

  • Built skill profile system (BDR-007): lib/profile.sh + lib/profiles/{design,dev,qa,audit,minimal}.profile partition gstack + personal skills by purpose. Activation toggles symlinks skills/skills-disabled/.
  • Wired into agents/plugin-advisor.md (DETECT call to profile.sh current + new PROFILE line in OUTPUT + new "Skill profiles" subsection in TOGGLING EXTERNAL TOOLS), lib/toggle-external.sh (header pointer), Makefile (4 targets), skills/profile/SKILL.md (/profile slash command).
  • cmd_current honestly reports "full" when no gstack__* entry exists in skills-disabled/ — avoids "100% match" trap when full gstack on.
  • Tested end-to-end: list/show/current/diff/set/reset/apply all green; shellcheck clean; symlink state restored after reset.
  • Profile system v2 (BDR-008): extended profile.sh to toggle Claude plugins (claude plugin enable|disable) + MCP servers (magic via lib/toggle-external.sh). Added 4 new profiles: web, seo, web-full, backend. Refined existing profiles to use plugin@<marketplace> syntax + cli entries. Always-on plugins protected by MANAGED_PLUGINS allowlist + PROTECTED_PLUGINS denylist.
  • Verified: set web enables ui-ux-pro-max + magic; set seo disables ui-ux-pro-max; set minimal disables ui-ux-pro-max but spares caveman/security-guidance/superpowers. current heuristic respects ties (web-full beats web at 100%).

2026-05-05

  • Mandated caveman format on all .claude/memory/*.md writes (BDR-009). Rule added to CLAUDE.md "Memory registries" section. Self-applied: CLAUDE.md prose compressed in same pass.
  • Compressed 5 existing registries via /caveman:compress (decisions, learnings, blockers, journal, evals) — ~40% input-token reduction per session-start load.
  • Side chores: disabled example-skills@anthropic-agent-skills plugin in settings.json; gitignored *.original.md compress backups (recoverable via git history).
  • 4 atomic commits (0275eed..639486a) via /commit-change.

2026-05-06

  • darwin-skill round 1 across 18 personal skills. Mean 83.4 → 88.7 (+5.3). 16 keeps, 2 reverts (code-clean, doc — D2 dry_run noise). Branch auto-optimize/skills-20260506-1730. 22 commits, 35 files changed.
  • Top gains (analyze +18.5, skills-perso +11.9, refactor +11.0, hotfix +9.0) all from same shape: edge-case table in agent file. Captured as LRN-008.
  • LRN-009: dry_run ratchet too strict for skills already >91; LRN-010: ~/.claude/skills,agents symlink to Documents/claude — git operations must run from there.
  • Audit report .claude/audits/DARWIN-SKILL-OPTIMIZATION.md. Eval log ~/.agents/skills/darwin-skill/results.tsv (38 rows). Branch awaits manual review before merge.

2026-05-07

  • /client-handover gates SEO classique + GEO (IA) independently at ≥17/20 (BDR-010). Was: combined display only, gate fired on SEO alone. Now: 4-axis gate (SEO, GEO, HARDEN, VALIDATE), axis-aware fix loop, per-axis override transparency.
  • Pattern captured as LRN-011: single subagent emits N gated scores → labeled extraction + axis-aware loop + per-axis escalation. Generalizes to future multi-metric audits (e.g. /harden split TLS/headers/redirects).
  • 1 atomic commit 5569a80 (feat(client-handover): split SEO + GEO scores, gate GEO at ≥17/20). Bash unit tested extract_score_labeled on 4 cases (new format, /100 normalize, legacy fallback, GEO UNKNOWN strict) — all OK.
  • /client-handover deliverable refactor (BDR-011): 4-chapter structure (brief+pourquoi / fait ≤300w sans jargon / actions client / détails techniques) + branded HTML+PDF via ZenQuality identity (greens #1A3A25/#2D5A3D/#4A7C59/#87A878, Inter+Playfair Display, cover page logo+tagline). Cascade renderer: MD→HTML (pandoc>python markdown>npx marked) then HTML→PDF (weasyprint>wkhtmltopdf>chromium).
  • STEP 15 hard gates: chapter 2 word count ≤300 (wc -w) + forbidden-token grep (no /seo, /harden, /validate, SEO.md, SCORE_* etc. in chapters 1–3). Chapter 4 may use them in glossary.
  • LRN-012 captured: bash heredoc + stdin pipe collision (printf | python3 - <<'PY' ... PY) silently drops piped data — heredoc wins stdin. Diagnose via bash -x. Fix: pass via env var or file path, never via stdin combined with heredoc. Hit during v1 handover-to-pdf.sh, fixed before commit.
  • 1 atomic commit e06b52a (feat(client-handover): 4-chapter doc structure + branded HTML/PDF rendering). End-to-end tested with synthetic boulangerie handover (179w chapter 2, no leaks, HTML 11KB + PDF 33KB via weasyprint).

    2026-05-07 — /client-handover PDF rendering bugfix

  • Fixed 3 bugs in /client-handover PDF generation reported on LIVRAISON.pdf test render.

  • Bug 1 (critical): MD→HTML converter chain — host had no pandoc, no python-markdown, fell to npx marked < "$src" which dumped marked CLI's own cli.js source instead of converting (marked 16.x stdin regression). PDF was 2 pages of marked binary source. Fix: npx --yes marked --gfm -i "$src". → LRN-013.

  • Bug 2: cover bg was cream #F5F0EB with 8mm green stripe — washed out. Final state after iteration: --white-pure bg + subtle radial sage/forest tints + --black-deep text + --green-forest accents (eyebrow/meta labels/footer/border). Solid green-dark tried first then rejected (too heavy for long client doc). → BDR-012.

  • Bug 3: SVG logo logo-horizontal.svg blended into cream bg. Default LOGO_URL switched to https://zenquality.fr/assets/logo-horizontal-1024.png (URL provided by user). High contrast on white bg.

  • Verified: regenerated LIVRAISON.pdf → 164 KB, 19 pages, full content rendered, white cover with black title + green-forest accents + visible PNG logo.

  • Files touched: skills/client-handover/scripts/handover-to-pdf.sh, skills/client-handover/resources/branding/zenquality.css, agents/client-handover-writer.md.

2026-05-11

  • Personal-skills orchestrator audit via /darwin-skill. 18 skills classified: 5 true orchestrators (ship-feature, seo, init-project, onboard, client-handover) + 12 single-delegation (justified — 6 agents reused multi-place) + 1 self-contained (skills-perso). All orchestrators verified doing real multi-agent dispatch.
  • client-handover pattern is skill→1 agent→subagents (3-level indirection) vs other 4 orchestrators' skill→multi-agent (2-level). Justified by agent complexity (1703 lines) — moving orchestration into SKILL.md would bloat. Description updated to make orchestrator role explicit.
  • /seo, /harden, /validate execution verified inside client-handover-writer agent — dispatches general-purpose subagents reading the target skill files. Real parallelization, not sequential.
  • Description CSO fix per /writing-skills: 5 skills had frontmatter >1024 chars (client-handover 1920, doc 1390, seo 1378, geo 1189, validate 1050) — all compressed under spec. 3 orchestrators (ship-feature, init-project, onboard) had workflow-summary descriptions (shortcut risk) — rewritten to "Use when [triggers]…" pattern. Captured as BDR-014.
  • client-handover deliverable restructured 4→6 chapters (BDR-013 supersedes BDR-011): scores promoted to §2 for 30s visual-proof-of-impact, NAP table promoted to §4 as prerequisite before §5 todos. Pandoc bumped to gfm+gfm_auto_identifiers for internal anchor links (LRN-014).
  • NAP checklist polish (commit abd2612): added "Description courte" field + replaced retired BrightLocal Free Tools with Moz Local Citation Checker (LRN-015).
  • CSS bugfix (commit 465fe9e): pandoc GFM checkbox markup <li><input ...> text…</li> has no wrapper class, adjacent-sibling rule li input + * yanks <a>/<code> siblings out of flow. Fixed by targeting li > input[type="checkbox"] directly. Captured as LRN-016.
  • 4 atomic commits b15b275..1da6a31 via /commit-change. Decisions BDR-013, BDR-014 + learnings LRN-014, LRN-015, LRN-016 capitalized. Pre-existing BDR-012 + LRN-013 Index rows backfilled (prior session entries existed in body but missing from Index).