* docs/building.md — how to build jj-commitd and planctl from source,
requirements, `go install` recipes, reproducible-build flags
(`-trimpath -ldflags="-buildid="` per planctl PRD R7.3), test +
benchmark commands, cross-compile, CI matrix link.
* docs/planctl.md — full command reference beyond --help: plan-dir
discovery cases A-D, all 9 classification codes with severity and
meaning, tag-grammar spec (including paren-aware annotations + the
tag-unclosed recovery semantics), the five EARS regexes and the
bold-prefix exemption, JSON schema, worked examples for pre-commit
/ CI / multi-plan / JSON consumers.
* docs/jj-commitd.md — architecture diagram, socket event protocol
(session-start, post-edit, session-end, shutdown, status) with
field tables, all env vars (REPO_ROOT, JJ_HOOK_DEBOUNCE_SEC,
JJ_HOOK_STALE_MIN, JJ_HOOK_AUTO_SQUASH), baked-in timing constants,
socket / log paths, fallback mode, troubleshooting.
* README.md — expanded the jj-commitd bullets and linked to each
reference from a new "Documentation" section; kept top-level
summaries terse.
* README.md: new `## planctl` section after the jj-commitd section —
description, `go install` command, classification-code list,
pointer to the plan dir.
* AGENTS.md: bullet under `dev/ workflow` pointing agents at
`planctl lint` as a pre-codex sanity gate.
* dev/README.md: "Pre-codex planctl lint gate" paragraph in the
Skill workflow section.
* tasks.md: appended full traceability matrix — one row per PRD
R-id and one per design D§ id, with the tasks and tests covering
each. Grep-verifiable against the `// spec:planctl/*` anchors.
* Dogfood pass (task 9.5) against dev/plans/26172-planctl/ flushed
out real self-violations in the plan docs:
- Expanded en-dash range tags (`R1.1–R1.7`) to explicit
comma-separated lists.
- Dropped comma-containing annotations (`D§0 (D-2, D-5)` →
`D§0`).
- Added D§2 / D§3 / D§7 umbrella citations to tasks 5.3 /
3.1 / 7.7.
- Applied the design §3.4 bold-prefix EARS exemption to R5.3
/ R5.4 / R5.5 / R5.11 (grammatically valid but non-strict
EARS) by prepending short bold labels.
- Updated PRD R5.11 to say `plan-directory basename` instead
of `relative path from CWD` — resolving a long-standing
divergence with task 6.4 + design §3.7 + the implementation.
* Final dogfood: `26172-planctl: clean (79 tasks, 45 requirements,
21 design sections)`.
Parent task 9.0 from dev/plans/26172-planctl/tasks.md.
Codex code-review session: 019db302-b8a9-7e53-b1e3-feab4ed7081f (2 rounds).
- On startup, daemon sweeps orphaned /tmp/jj-claude-*-files from pre-daemon
hook versions and dead-PID tracking files from all repos
- Cross-session file conflicts detected on post-edit and returned in response
(logged as warnings, non-blocking)
- session-start now returns inventory of all other active sessions with their
tracked files, PIDs, and ages
- Stale session reap reduced from 2h to 30min default (matches idle shutdown),
configurable via JJ_HOOK_STALE_MIN env var
- Debounce interval configurable via JJ_HOOK_DEBOUNCE_SEC env var (default 3s,
max 30s) — previously documented but not implemented
- handleEvent response changed from bare bool to structured JSON with ok/error/
sessions/conflicts fields (backward compatible — ok field still present)
- 30 Go tests (up from 13): inventory, conflicts, env vars, legacy cleanup
- Fix: set -e for manual commands (squash-wip, status, reap)
- Fix: portable mkdir lock for session-end leftover commit race condition
- Fix: ARG_MAX guard for large file lists (>500 files)
- Fix: walk up PPID chain to find long-lived ancestor process
- Fix: default mtime when stat fails (prevents arithmetic error)
- Add: wip/claude-{session} bookmark on each session commit
- Add: base revision tracking (-base file, shown in status)
- Add: JJ_HOOK_AUTO_SQUASH=1 opt-in auto-squash at session end
- Change: settings.local.json → settings.json (team-shared by default)
- Tests: 77 total (8 new for bookmarks, base, auto-squash, status, reap)