Status
All 31 findings are resolved; M13 (scalar registry clobber under
concurrent sessions) closed 2026-08-05 with the session-keyed registry + per-project advisory lock (TADR-0004,
regression-tested). Copilot-cli measurement was live-verified 2026-08-05 (73.0k exact match),
and all four design decisions settled. The initial
2026-06-24 review surfaced 12 (+ M6/M7 in follow-up); a 2026-06-25 re-review of the post-review additions — the
onboard-repo workflow and the published HTML guide — added M8, L6, L7, L8, all fixed
in the same pass; a further re-review of the new usage-scenarios.html added L9, also fixed. The two High items — non-functional bootstrap scripts and a non-portable Gemini hook — are fixed;
the template now behaves on a clean machine as the docs describe, carries a LICENSE, ships VS Code config, checks
dependencies, has an auth phase with agent runbooks, and documents a no-agent-context fallback. Each item below
records what changed. New issues get appended here per the maintenance convention.
A three-persona DevEx review (2026-08-11, work/devex-review/findings/) added M19–M24, L35 —
seven consolidated cards covering its prioritized fix list.
Maintaining this backlog
Treat this file as a lightweight issue tracker for the template itself. Settled cards
(Resolved / Decided / Won't fix) live in template-workspace-backlog-archive.html — this
file holds Open cards only, so agents can read it cheaply; the scorecard counts span both files.
Agents: edit both files with targeted reads (grep the ID / section), never whole-file loads. The rules:
- IDs are stable and severity-scoped.
High,Medium,Low,Decision + a number (e.g.M6). Never renumber or reuse an ID — once assigned it's permanent, even after the item is resolved. - Every finding carries a status badge: Open · Resolved · Decided · Won't fix.
- When you fix an item: flip its badge to Resolved,
add a Fixed: line describing the change (and the commit/PR if handy), and add
class="resolved"to its<div class="find …">; then move the whole card to the matching severity section oftemplate-workspace-backlog-archive.html. - When you find a new issue: append a new finding card under the right severity heading with the next free ID, status Open, and the Evidence / Impact / Fix lines.
- Update the scorecard counts and the "Last updated" date in the header on every change.
- Deliveries from other sessions/clones follow the same rules. A template change pushed from
a downstream session must carry its backlog update in the same push; the session that pulls a change lacking
one adds the missing row/card as part of incorporating it (see
L14). - Commit convention: reference the ID, e.g.
git commit -m "Fix M6: …", so the git log and this file stay in sync. - Re-review trigger: after any structural change to the template (new config file, new doc, new agent runtime), do a fresh evidence pass and append what it surfaces.
High
Medium
Low
L97 One “needs me” view across hitl nodes, BLOCKED returns and open dispatches LowOpenscripts/plan.sh, scripts/fleet.sh
Evidence — R5 (work/external-tools-review/synthesis.md, T3), accepted as later.
Impact — Low today; grows if R1 (one owner, helpers report back) brings more parallel workers.
Fix — Revisit after work/concurrent-sessions/ settles R1.
Decisions
Strengths (keep these)
- ✓ Secrets discipline — no tokens tracked; credentials stay in the keychain.
.gitignoreverified correct. - ✓ Single-source agent entrypoints — one
CONTEXT.md, three symlinks (mode120000on the remote). - ✓ Layered, cross-linked docs — structure / setup / usage / tooling, one authoritative table each.
- ✓ All internal links resolve.
- ✓ Rendered onboarding — HTML guide + GitHub Pages (with
.nojekyll). - ✓ Accurate toolchain docs — real agent-context system + correct upstream repos.
Change log
| Date | Change |
|---|---|
| 2026-06-24 | Initial critical review: 2 High, 5 Medium, 5 Low, 2 Decisions, 6 Strengths. |
| 2026-06-24 | Resolved all 12 findings; settled D1 (keep) and D2 (recommend --full). Added LICENSE, .vscode/, functional scripts, fallback docs, and this maintenance convention. |
| 2026-06-24 | Moved to docs/ so it renders on GitHub Pages; referenced from CONTEXT.md, README.md, and the setup guide for agent discoverability. |
| 2026-06-24 | Added & resolved M6 (dependency-check phase) and M7 (auth phase: verify+instruct + agent runbooks under docs/runbooks/). |
| 2026-06-24 | Feature: added the checkpoint skill (skills/checkpoint/SKILL.md + .claude/commands/checkpoint.md), generalized from the Quran_Hifz_Tracker /checkpoint command and wired cross-agent via CONTEXT.md. |
| 2026-06-25 | Feature: added the onboard-repo workflow (skills/onboard-repo/SKILL.md + /onboard-repo + scripts/onboard-repo.sh) — registry identity/auth fields, graphify MCP wiring (graphify-mcp) with manual-scan fallback, and provenance-stamped code-structure.md/design.md/api.md under docs/repo-context/<repo>/, plus check-repo-context.sh freshness check. |
| 2026-06-25 | Fix: dogfooded /onboard-repo end-to-end against a sibling repo; check-repo-context.sh now resolves a repo's path from its registry Location (was only repos/<name> or root), so a repo onboarded in place at an external/local path is tracked instead of falsely reported stale. |
| 2026-06-25 | Fix: exercised the graphify live onboard path (built a real graph; query/path/explain verified, onboard flips to graphify=live). Surfaced a sibling bug — onboard-repo.sh's default/--refresh path resolution ignored the registry Location (the refresh hint is pathless), so refreshing an externally-onboarded repo stamped the workspace's commit into provenance and reported fallback despite a live graph. Now reuses the same Location-first resolve_repo_path(). |
| 2026-06-25 | Feature: published the authoritative workspace guide (docs/workspace-structure.md) as a styled, self-contained docs/workspace-structure.html served via Pages, so humans can read it without raw Markdown. Added a reproducible generator scripts/build-guide-html.sh (pandoc; reuses setup-guide.html's visual identity, the doc's own Contents becomes in-page nav) — generated not hand-maintained, so it can't drift from the source. Linked from the README. |
| 2026-06-25 | Re-review: fresh evidence pass over the post-review additions (the onboard-repo workflow + the HTML guide) per the maintenance convention. Surfaced and fixed four findings in one pass — M8 (drift guard: the guide builder embeds a source hash, check-workspace-structure.sh warns when the published HTML is stale), L6 (temp-file leak + non-portable mktemp -t in build-guide-html.sh), L7 (duplicated resolve_repo_path() extracted to scripts/lib/repo-paths.sh), L8 (documented the pandoc prerequisite). Scorecard now 0/18/2/0/6; metadata refreshed. |
| 2026-06-25 | Feature: added docs/usage-scenarios.html — end-to-end usage scenarios (pull template → onboard an existing repo or start a new project → build features with AI agents → checkpoint between sessions) plus a lifecycle state diagram and a feature-loop diagram. Hand-authored HTML reusing setup-guide.html's visual identity with self-contained inline SVG (no pandoc/CDN dependency). Linked from the README alongside the other rendered guides. |
| 2026-06-25 | Re-review: fresh evidence pass over the new usage-scenarios.html per the maintenance convention — verified every command/path/skill against the repo and rendered both SVG diagrams via headless Chrome to check for collisions. Surfaced and fixed L9 (footer ../CONTEXT.md link breaks on Pages, which serves from docs/; repointed to the absolute blob URL) plus a zero-impact SVG class typo. Scorecard now 0/19/2/0/6. |
| 2026-06-28 | Feature: vendored the rlm (Recursive Language Model) skill agent-agnostically (skills/rlm/SKILL.md + scripts/rlm_repl.py/rlm_audit_runtime.py + .claude/commands/rlm.md), sourced from brainqub3/claude_code_rlm (MIT, LICENSE preserved). Runtime-neutral instructions in the shared skills/ dir; the one coupling — leaf sub-LM is a nested claude -p — is documented and env-overridable. Re-pointed upstream's .claude/skills/rlm/ invocation paths to skills/rlm/, gitignored the REPL scratch (.claude/rlm_state/, .claude/rlm_runs/), and registered it in CONTEXT.md + docs/template-usage.md. Smoke-tested init/exec end-to-end. |
| 2026-06-29 | Feature: exported the workspace-local YouTube transcript MCP server into the template (scripts/mcp/youtube-transcript.sh + scripts/mcp/youtube_transcript_mcp.py), pre-wired it in .mcp.json.example, .vscode/mcp.json.example, and opencode.json, and documented the credential-free yt-dlp-backed setup across MCP, dependency, setup, service-access, workspace-structure, setup-guide, and usage-scenario docs. |
| 2026-07-06 | Resolved L10: folded the ask-first directive from the XDA piece "I added one line to my Claude prompts…" into principle 1 (state what you'd need to know and name silent assumptions before answering; trivial-change escape hatch), in both the CONTEXT.md and docs/workspace-structure.md copies. Wording now diverges slightly from global.md — sanctioned by D1. Scorecard now 0/20/2/0/6. |
| 2026-07-14 | Feature: added the decision-log skill (skills/decision-log/SKILL.md + /decision) — a three-tier decision-provenance scheme that captures the why code can't: Tier-1 commit trailers (always), Tier-2 ephemeral notes in work/<proj>/decisions.md (wide net), promoted to Tier-3 committed ADRs under a newly-shipped docs/adr/ (README.md + 0000-template.md) only for lasting-weight decisions. Promotion wired into the checkpoint skill (scan notes for Promote?: yes); ADRs + trailers registered as graphify provenance inputs so graphify query "why…" can walk code → commit → ADR → alternatives-rejected. Registered in CONTEXT.md (new Decision Records section + skills entry); narrowed D2 (template now ships docs/adr/ itself, not just via init --full). |
| 2026-07-22 | Fix M9: first live use of the D4 context-budget system in a fresh session caught register trusting the stale session registry instead of re-discovering — bound the previous session's transcript and reported a false WARN. resolve_session() now forces fresh discovery for register only. Scorecard now 0/21/4/0/6. |
| 2026-07-22 | Feature (D4 follow-up): enabled Gemini CLI local telemetry for exact context counts — tracked .gemini/settings.json gains a telemetry block (target: local, logPrompts: false, outfile .gemini/telemetry.log, gitignored); the gemini adapter in context-budget.sh prefers the workspace telemetry log and parses the last response's input tokens (both input_token_count and OTel gen_ai.usage.input_tokens spellings), estimating from the chat log — never the telemetry file — when no response exists yet. Wiring proven live (a real run wrote the log); parser fixture-verified for both spellings; a successful-response verification is blocked on Gemini auth. Copilot CLI follow-up recorded as blocked: the CLI isn't installed on the origin machine. |
| 2026-07-23 | Fix M10: a live copilot-vscode session (downstream workspace) caught copilot_vscode_discover() pinning a stale sibling session's log by mtime and reporting a false STOP — the discover now prefers $VSCODE_TARGET_SESSION_LOG (the live log's path, exported by Copilot terminal sessions), falling back to the newest-mtime scan. |
| 2026-07-23 | Session-pinning review across all adapters (same bug class as M10: newest-mtime as a proxy for "current session"). Fixed M11 — claude_discover() now pins $CLAUDE_CODE_SESSION_ID.jsonl (differential-verified: with a stale transcript touched newest, unpinned register binds it, pinned binds the live session). Opened M12 (gemini shared telemetry log serves the previous session's counts to a new session's register), L11 (codex/copilot-cli mtime races; codex any-project fallback), L12 (registry keyed per-runtime clobbers under concurrent same-runtime sessions). Scorecard now 3/23/4/0/6. |
| 2026-07-23 | Landed the three non-gated session-pinning follow-ups. M12 resolved — register --runtime gemini truncates the shared workspace telemetry log after binding it, and gemini_measure reports 0 estimate for a fresh session with no logs at all; lifecycle fixture-verified (stale 140K WARN → 0 after register → appended response reads exact). L11 partially landed — codex any-project fallback removed (fails over binding another project's rollout; verified against 4 non-matching rollouts); the env-var pin checks stay open, machine-gated. L12 resolved — single-session-per-runtime-per-workspace documented as an explicit limitation in docs/context-budget.md. Scorecard now 1/25/4/0/6. |
| 2026-07-23 | Opened L13 (surfaced while walking through the register lifecycle): session registration is documented for agents only — the developer quickstart never mentions it, and no SessionStart hook makes it mechanical. Fix queued for the next session. Scorecard now 2/25/4/0/6. |
| 2026-07-23 | M10 follow-up (7c29476, delivered from the origin copilot workspace and pulled into the template): $VSCODE_TARGET_SESSION_LOG on current Copilot builds points at a debug-logs/<id> directory rather than the token file — copilot_vscode_discover() now derives the session id from the var's basename and pins chatSessions/<id>.jsonl, keeping discovery deterministic; newest-mtime survives only as the var-unset fallback. Adapter table updated. No scorecard change (M10 already resolved). |
| 2026-07-23 | Resolved L13: session-lifecycle paragraph added to the developer quickstart in docs/context-budget.md (registration is the agent's job — automatic-by-instruction via CONTEXT.md, so only for sessions started inside the workspace tree by an instruction-following agent; unregistered sessions fall back to newest-mtime discovery), plus a SessionStart hook in .claude/settings.json.example that runs register --runtime claude --transcript <path from the hook payload>, making registration mechanical for Claude Code. Hook event live-verified in the resolving session; command verified against a simulated payload (pins the exact transcript) and fails open on an empty one. Scorecard now 1/26/4/0/6. |
| 2026-07-23 | Resolved the L11 remainder — the machine-gated session-pin env-var checks. Codex now pins rollout-*-$CODEX_THREAD_ID.jsonl, live-verified on the origin machine (env var probed inside a real codex exec session equals the rollout UUID and payload.id, injection confirmed in openai/codex source; differential-verified against a stale rollout touched newest). Copilot CLI now pins session-state/$COPILOT_AGENT_SESSION_ID/events.jsonl under ${COPILOT_HOME:-~/.copilot} and scans the correct session-state/ path (dropped the unattested sessions/ path, kept legacy history-session-state/) — research-sourced from the CLI changelog and fixture-verified, but live verification still pends an install so the adapter stays unverified. Scorecard now 0/27/4/0/6. |
| 2026-07-23 | Feature (bd40023, delivered from a downstream session and pulled into the template): formalized the work-directory launcher/ledger convention — forward next-session.md (REPLACED each rollover) + append-only handoff.md (newest block on top, archived to handoff-archive.md) + required README.md — in new docs/work-directory-conventions.md, with a create-work-item skill (/create-work-item) and wiring in CONTEXT.md/workspace-structure. On pull, work/context-decay/ was migrated to the convention: README added, purpose headers stamped on both backbone files, and the ledger rebuilt with the two most recent session blocks (session 3's recovered from git history). No scorecard change. |
| 2026-07-23 | Feature (f3928e6, delivered from a downstream session and pulled into the template): scripts/diff-review.sh — symlink-safe commit/range directory-diff review. Always passes --no-symlinks --no-prompt (git's dir-diff temp trees use symlinks for the working-tree side, which Beyond Compare renders as missing files) and prefers the blocking bcomp launcher on macOS (the non-blocking one races git's temp-dir cleanup → empty panes); VS Code Compare Folders / per-file fallbacks via -t. Documented in docs/operational-knowledge.md ("Diff Review Workflow") and workspace-structure. On pull: syntax + --help verified, doc references resolve. No scorecard change. |
| 2026-07-23 | Opened + resolved L14: three downstream-delivered template changes in one day (7c29476, bd40023, f3928e6) all skipped the backlog convention and needed after-the-fact reconciliation by the pulling session. The convention now covers both ends explicitly (new "Maintaining" rule + CONTEXT.md Template Backlog sentence). Also slimmed the user's global agent context: the manual Beyond Compare persistent-dirs recipe replaced with a pointer to scripts/diff-review.sh. Scorecard now 0/28/4/0/6. |
| 2026-07-24 | Opened + resolved L15: audited the installed skill set against recommended-tooling.md after reviewing upstream mattpocock/skills (local clone at ed37663 = upstream HEAD; no new released skills since the Jul 22 sync). Added the two undocumented misc-bucket skills (git-guardrails-claude-code, setup-pre-commit), a "skill not found on another machine" staleness/recovery note (prompted by a real teach miss on a second machine whose clone predated the skill), and a caveat on upstream's new native Claude Code plugin distribution — Claude-Code-only, incompatible with the agent-agnostic symlink install. Scorecard now 0/29/4/0/6. |
| 2026-07-30 | Feature: wayfinder integration (hybrid, per docs/superpowers/specs/2026-07-30-wayfinder-integration-design.md). Vendored upstream wayfinder into skills/wayfinder/ (from mattpocock/skills @ 2ab9580, provenance comment with pinned commit + refresh procedure) so Copilot users and template downloaders get it agent-agnostically; new docs/agents/issue-tracker.md — local-markdown tracker adapted from upstream's .scratch/ to work/<effort>/ (map at map.md, tickets under issues/), with a decision-log tie-in (resolved ticket = Tier-2 note). Wired: CONTEXT.md Workspace Skills bullet, /wayfinder shortcut, workspace-structure + work-directory-conventions registration (also fixed create-work-item missing from the structure doc's skills listing). recommended-tooling.md refreshed after upstream sync (clone at 2ab9580): bucket list gains in-progress/, vendored-copy/duplicate caveat, and a "newer upstream skills worth watching" note (to-questionnaire, wizard recommended; batch-grill-me nice-to-have; claude-handoff anti-recommended vs session-rollover). No scorecard change. |
| 2026-08-05 | Upstream skill sync (mattpocock/skills clone 2ab9580 → 8b36d4f). Vendored skills/wayfinder/ refreshed to 8b36d4f (one substantive upstream line — the Grilling ticket type now always invokes /grilling + /domain-modeling; agents/openai.yaml unchanged; diff vs upstream re-verified comment-only). Global symlinks: removed broken writing-great-skills (upstream renamed/restructured it to writing-for-agents), linked the four newly released skills — writing-for-agents, wizard, to-questionnaire, wait-what; global.md setup/util list updated to the new name. recommended-tooling.md §3: table gains wizard/to-questionnaire/wait-what rows, writing-great-skills renamed; "worth watching" note rewritten — graduated skills dropped, batch-grill-me noted as folded into the grilling engine, still-in-progress list now claude-handoff (anti-recommended), loop-me, setup-ts-deep-modules, writing-*. No scorecard change. |
| 2026-08-05 | Feature: skill-hardening batch — 8 improvements to the workspace skills from a full comparison against mattpocock/skills @ 8b36d4f (plan: work/template-maintenance/skill-hardening-plan.md). (1) checkpoint promotion scan extended to work/*/map.md Decisions-so-far (wayfinder decisions no longer escape promotion; cross-ref in decision-log). (2) Placement/consistency: onboard-repo's mandatory budget cadence moved above its steps; convention pointers unified on CONTEXT.md (rlm, issue-tracker.md); create-work-item optional files now list spec.md/map.md/issues/. (3) Runnable Verification sections added to checkpoint, create-work-item, session-rollover (newest-on-top + archive checks), decision-log. (4) Identical first-yes-wins "Which boundary skill?" block in checkpoint + session-rollover (WARN/STOP → rollover; measurement wins). (5) Dangling global-handoff prerequisite resolved by inlining its three load-bearing rules into both boundary skills (Tier-2 note). (6) disable-model-invocation: true on the user-driven create-work-item/onboard-repo/rlm. (7) ADR bar restated as the three-way AND test (hard-to-reverse ∧ surprising ∧ real trade-off, from upstream domain-modeling) in decision-log + docs/adr/README.md, with a worked "don't log this" Tier-2 counter-example. (8) Vendored skills/writing-for-agents/ (SKILL.md + SKILL-MECHANICS.md + agents/openai.yaml, pinned 8b36d4f, diff-vs-upstream comment-only) and wired it into CONTEXT.md + recommended-tooling.md §3 (vendored-skills blockquote now covers both copies). No scorecard change. |
| 2026-08-05 | Feature: rollover relaunch script — scripts/launch-next-session.sh (TADR-0003/0004 item #2): launches a successor session seeded with the canonical bootstrap prompt (verbatim, single source of truth in the script); runtime from the dying session's own registry record (D6), ROLLOVER_RUNTIME fallback-only; 5 runtimes seeded-interactive (claude, codex, gemini -i, opencode --prompt, copilot -i; flags re-verified against live --help), --bg claude-only with D8 successor confirmation; ROLLOVER_RELAUNCH=off|manual|auto honored; non-tty manual prints the ready-to-run command. Tests: scripts/tests/test-launch-next-session.sh (13 cases, dry-run + stub-binary launch paths). Status note flipped in docs/context-budget.md. No scorecard change. |
| 2026-08-06 | Feature: vendor hook deployments (TADR-0003/0004 item #3) — context-budget WARN/STOP now pushes in-band to all five runtimes, not just Claude Code. Extracted the shared throttle/escalation/fail-open core into scripts/hooks/context-budget-hook-lib.sh (4a39bf8), then thin per-runtime wrappers: opencode sqlite measurement adapter (6a78138), codex UserPromptSubmit hook via hash-trusted .codex/config.toml (4543645), gemini BeforeAgent hook reading the workspace telemetry log (93e9d45), opencode chat.message plugin registered in opencode.json (f9579fe), and copilot CLI sessionStart/agentStop hooks gated by ~/.copilot/config.json trustedFolders, blocking only at STOP (9fa16b7). Full per-runtime wiring/channel/friction table in docs/context-budget.md → "Vendor hook deployments". No scorecard change. |
| 2026-08-06 | Feature: successor option inheritance (TADR-0003/0004) — e0cb70d: scripts/launch-next-session.sh now replays the dying session's launch options (normalized approval level, model, raw-extra escape hatch) onto the successor, persisted via work/<project>/.rollover-options (written by session-rollover step 6) and mapped to each runtime's own flags. Flag-verification correction: the plan's table guessed codex --full-auto, which does not exist in codex-cli 0.142.4 — shipped --ask-for-approval never instead (live --help-verified); opencode's --auto flag does exist, so opencode stayed in the approval mapping (the plan's drop-contingency wasn't needed). Documented in docs/context-budget.md → "Relaunch knobs". No scorecard change. |
| 2026-08-06 | Feature: attach-session.sh helper (Task 9, user-added to the vendor-hook-deployments plan — overrides the earlier YAGNI call to leave re-attach as documented-only) — 3fafd13: scripts/attach-session.sh <project> resolves the latest session for a work item (.active-session lock, falling back to the newest .context-budget/sessions/ record for the project), prints a one-line status (project=… runtime=… session=… age=…s live=… locked=…), and when it is alive and locked, connects this terminal to it. Fixed a latent doc bug along the way: docs/context-budget.md's "Chained rollovers & re-attach" passage named a claude attach subcommand that does not exist — re-verified live against claude --help/claude agents --json 2026-08-06, no attach subcommand, -r/--resume <session_id> is the closest supported form and is what the script wires (run: <cmd> in --dry-run/non-TTY, same idiom as launch-next-session.sh). Non-claude runtimes get a "cannot attach" message (no background sessions to attach to) instead of guessing a flag. Tests: scripts/tests/test-attach-session.sh (6 cases, liveness driven by artifact mtime vs CONTEXT_LOCK_STALE_SECS). Decision + rejected alternatives in work/automatic-session-rollover/decisions.md. No scorecard change. |
| 2026-08-06 | Final whole-branch review of vendor-hook-deployments. Fixed the last stale claude attach reference: skills/session-rollover/SKILL.md's closing paragraph pointed at the nonexistent claude attach subcommand (same bug already fixed in docs/context-budget.md by 3fafd13, missed here) — repointed to scripts/attach-session.sh <project>. Opened L17: bundled four minor issues the review triaged as non-blocking follow-up (attach-session.sh's contradictory "live but unlocked" wording, a space-unsafe ls -t glob loop shared by attach-session.sh and launch-next-session.sh, an unquoted SQL interpolation in context-budget.sh's opencode_measure, and a stale test-suite filename in context-budget.md) so they aren't lost. Scorecard now 2/29/4/0/6. |
| 2026-08-06 | Feature: per-work-item relaunch override — 8817d1d: an optional, committed work/<project>/context-budget.env now overrides the workspace-global ROLLOVER_RELAUNCH/ROLLOVER_RUNTIME for that work item; scripts/launch-next-session.sh sources it after the global env (sourcing moved below arg parsing, since the per-item path needs $PROJECT), with precedence explicit env var > per-item file > global context-budget.env > built-in default (off). Only the relaunch knobs are per-item — WARN/STOP thresholds stay workspace-global — but the file name/shape matches the global env so thresholds could ride in later without a rename. Rejected alternative (knob in .rollover-options — per-launch provenance, would be clobbered at each rollover) recorded in work/per-item-relaunch-override/decisions.md. Tests T15a–d added to test-launch-next-session.sh (42 asserts green); docs updated (context-budget.md "Relaunch knobs" — the old "no per-project override" claim replaced — plus CONTEXT.md and the session-rollover skill). Motivating case applied: work/automatic-session-rollover/ now carries ROLLOVER_RELAUNCH=auto. No scorecard change. |
| 2026-08-06 | Improvement: learnings capture across rollovers — three-rule scheme codified after a user retrospective discussion: (1) route learnings at incident time to their existing durable homes (operational-knowledge.md, decisions.md, docs), making the rollover Reflect step a sweep for what slipped; (2) observations not obviously durable get parked as one-line Learnings: entries in the handoff ledger block; (3) second-strike promotion — a parked learning graduates to a durable home only when it bites a second time (grep handoff*.md for the prior strike), so single events die in the archive. Edits: skills/session-rollover/SKILL.md (Reflect step + handoff contract) and skills/checkpoint/SKILL.md (human-driven retro belongs at checkpoint or successor-session start, never in a token-starved rollover). Deliberately no new learnings.md file and no auto-retro machinery — the bottleneck is filtering, not capture. No scorecard change. |
| 2026-08-06 | Opened + resolved M14 (rollover launched the successor while the predecessor still held the work-item lock — fired live on this work item's first ROLLOVER_RELAUNCH=auto relaunch; the successor's register was refused and LOCK_STALE=3h gave no reclaim path). Fix: launch-next-session.sh now releases the dying session's own lock before any launch path (identity-matched against its registry record; foreign locks never removed; --dry-run exempt; mode=off included), replacing the skill's launch-then-release ordering, which could never work in auto mode (register races the lock) or attached-manual mode (exec forecloses the release step). Skill + context-budget.md reworded to release-before-launch with the manual fallback retained; tests T16–T19 added to test-launch-next-session.sh (49 asserts green). Opened L18: context-budget.sh's env-file sourcing guard keys on CONTEXT_DUMB_ZONE_TOKENS only, so explicit overrides of other knobs (hit: CONTEXT_LOCK_STALE_SECS) are clobbered by the sourced file. Scorecard now 3/30/4/0/6. |
| 2026-08-06 | Improvement: runtime state untracked — architecture review (one dev, one machine: commit what a future session must read; ignore live-session state whose validity is artifact mtime, not content). Untracked work/*/.active-session (a committed lock is a stale claim resurrected on checkout; post-M14 the launcher deletes/recreates it every rollover) and work/context-decay/context-ledger.jsonl (hook-appended telemetry, same class as the already-ignored .gemini/telemetry.log; not regenerable, so analysis snapshots get committed deliberately — as subagent-rollover-stats.md did — never the live file); pre-emptively ignored work/*/.rollover-options (per-launch machine-local flags, per the per-item-relaunch-override decision). Rationale codified in .gitignore comments, docs/context-budget.md (Ledger + work-item-ownership passages), and docs/work-directory-conventions.md (new "Tracked vs. untracked" rule). Side effect: the perpetually-dirty tree is gone, so clean-branch checks at checkpoint/rollover are meaningful again. No scorecard change. |
| 2026-08-06 | Opened + resolved L19 (no normalized approval level mapped to claude's classifier-vetted auto mode; the script's auto collided with the UI's "auto mode" while actually meaning acceptEdits — raised as work/automatic-session-rollover/issues/02 after the first auto-relaunched successor came up in manual mode). Fix: ROLLOVER_OPT_APPROVAL ladder is now default < edits < auto < full — auto re-pointed to the classifier tier (claude --permission-mode auto, verified against live --help 2.1.223 per TADR-0003; non-classifier runtimes fall back to their edits mapping with a stderr note), edits carries the old acceptEdits-tier mappings. Tests T14a–T14p reworked/added in test-launch-next-session.sh (55 asserts green); context-budget.md "Option inheritance" + session-rollover skill step 6 updated; alternatives (a claude-centric classifier level name; retiring auto loudly, which degrades to manual mid-chain) recorded in the work item's decisions.md. Scorecard now 3/31/4/0/6. |
| 2026-08-06 | Opened + resolved L20 (plainly-exited sessions squatted their work-item lock for the whole 3h stale window — the M14 failure mode, mitigated only for the rollover path — and nothing distinguished a live helper session from a dead predecessor). Fix: session-role model primary / auxiliary / superseded with the lock as the authoritative primary marker; register records + prints role=, the launcher stamps superseded at pre-launch release, attach-session.sh shows role=, a SessionEnd hook releases the lock on plain exit, and a new Claude Code statusline script (scripts/statusline-context-budget.sh) shows PRIMARY · <project> · <pct>%. One-primary contract documented in context-budget.md "Session roles" + work-directory-conventions.md; deferred refinements (superseded_by back-link, --takeover, sessions listing, tab-title display) in work/automatic-session-rollover/issues/03-session-roles.md. Tests: registry T6, launcher T20, attach T7, new statusline suite — 107 asserts green across the four touched suites. Scorecard now 3/32/4/0/6. |
| 2026-08-06 | Improvement: meaningful session titles for rollover successors (user finding: a successor's auto-generated title read "session lock verification" — the title generator latched onto the launcher's first mechanical step). launch-next-session.sh now leads the bootstrap prompt with Work item <project> - rollover session #N (helps every runtime's title generation) and passes claude --name "<project> #N" (-n/--name verified against live --help 2.1.223: session display name for picker + terminal title; no equivalent verified for other runtimes). N tracked in machine-local work/<proj>/.session-seq (gitignored; incremented per real launch, never by --dry-run). Gotcha fixed en route: the prompt must stay ASCII — an em-dash in it broke the %q-escaped cmd: echo through BSD sed ("illegal byte sequence"). Tests T21a–g (launcher suite 65 green); session-rollover skill step 7 + context-budget.md "Relaunch knobs" updated. No scorecard change. |
| 2026-08-06 | Opened + resolved L21 (the L20 project-level statusLine replaced the user's global status bar — ccstatusline's model/context/cost/git widgets vanished — and unregistered sessions saw a bare no work item; user report). Fix: statusline-context-budget.sh chains the global statusLine.command from ~/.claude/settings.json (same stdin, output first, budget segment appended as an extra line only when the session is on a work item; recursion-guarded). Tests T7a–f, statusline suite 14 asserts green. Scorecard now 3/33/4/0/6. |
| 2026-08-06 | Improvement: rollover implementation slice 1 — parent/child session registry + lock lineage (sessions 16–17; closes the deferred items in work/automatic-session-rollover/issues/03; no new finding card — feature work tracked in the work item, recorded here per the delivering-commit rule). Role set extends to child: register --parent-session <sid> [--agent-id] registers a subagent parent-side with artifact-derived identity (parent_session_id/depth/agent_id); per-child locks in work/<p>/.agent-locks/ granted only when the parent chain terminates at the project-lock holder; release sweeps stale child locks then refuses bottom-up violations (I4). Rollover lineage now closes both ways: successor back-stamps superseded_by at primary acquisition (T13), and register --takeover is an explicit recorded steal — wins against a live holder, stamps the loser's record (T14). Registry suite T7–T14 (54 asserts), all five suites green (192 total). Docs: context-budget.md multi-session model reworked to four roles; decisions promoted to TADR-0005. No scorecard change. |
| 2026-08-06 | Improvement: rollover implementation slice 2 — per-child transcript sweep (R1) (session 18; feature work tracked in the work item, recorded here per the delivering-commit rule). New context-budget.sh children [--parent-session <sid>] [--all]: enumerates a Claude parent's subagents/agent-*.jsonl + .meta.json, measures each with a sidechain-inclusive Claude-measure variant (a subagent's rows are all isSidechain:true — the self-measure filter would silently degrade every child to a size estimate), prints escalation-only WARN/STOP lines with age=/type=, exits with the worst child status; non-claude runtimes die loudly. New suite test-children-sweep.sh C1–C9 (27 asserts); all six suites green (219 total). Live smoke test surfaced the research's motivating 141.8K subagent as WARN. Docs: context-budget.md "Per-child sweep" section + quickstart line. No scorecard change. |
| 2026-08-06 | Improvement: workspace-root anchoring — coordination state keyed to repository, not checkout (session 19; resolves work/automatic-session-rollover/issues/05; feature work tracked in the work item, recorded here per the delivering-commit rule). All five coordination scripts (context-budget.sh, launch-next-session.sh, attach-session.sh, statusline-context-budget.sh, context-budget-hook-lib.sh) resolve WORKSPACE_ROOT via git rev-parse --git-common-dir, so every git worktree converges on the main checkout's .context-budget/, locks, ledger, and .session-seq; script-relative fallback outside git. launch-next-session.sh invoked from a worktree now syncs the main checkout (pushed-check, ff-only pull, loud dirty/diverged refusals) and launches from the main root — retiring the "no auto-relaunch from worktrees" ban and the register-before-isolate discipline. New tests G1/G2 (registry), W1–W5 (launcher), T8 (statusline); all six suites green (243 total). Docs: context-budget.md "Worktrees" section; operational-knowledge divergence entry marked superseded-by-fix. No scorecard change. |
| 2026-08-06 | Improvement: session-19 decision note promoted to TADR-0006 (session 21) — Key coordination state to repository identity, never to a checkout; amends TADR-0004/0005's implicit one-checkout assumption. No scorecard change. |
| 2026-08-06 | Improvement: rollover implementation slice 3 — dispatch-contract hardening (R2/R3) (session 21; feature work tracked in the work item, recorded here per the delivering-commit rule). New stateless, runtime-agnostic context-budget.sh dispatch-contract --report <path> [--brief <path>] [--gen <n>]: emits the R2 rollover contract for a long-running child's dispatch prompt (checkpoint-at-boundaries to the report file, 15-line return cap, DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT | ROLLOVER_NEEDED vocabulary, ROLLOVER_NEEDED only-on-request, gen≥2 read-report-first clause; ASCII-only for the %q/BSD-sed launch paths). R3 documented as parent-side policy: successor dispatch is the only rollover verb, resumes stack history — sweep (children) before resuming, roll at WARN/STOP. New suite test-dispatch-contract.sh K1–K7 (24 asserts); all seven suites green (267 total). Docs: context-budget.md "Dispatching long-running children" section + quickstart line; CONTEXT.md dispatch-time pointer. No scorecard change. |
| 2026-08-06 | Improvement: rollover implementation — parent-persisted dispatch records + generation fencing (R4) (session 22; feature work tracked in the work item, recorded here per the delivering-commit rule). Three new context-budget.sh subcommands: dispatch-open --project <p> --task <slug> --report <path> appends generation N+1 to the gitignored record work/<p>/.agent-dispatch/<slug>.json (agent-type/model/effort/brief/agent-id persisted for faithful re-dispatch) and emits the R2 contract for that generation in one step, refusing while the previous generation is still open (fencing: at most one live writer per report file); dispatch-close --status <five yield statuses|KILLED> closes it; dispatch-list exits 1 while any generation is open (the rolling parent's drain check). Contract emitter now labels progress blocks [gen N]. This is what makes parent rollover fleet-safe: a successor parent reconstructs the orchestration from records + reports and re-dispatches unfinished subtrees fresh. New suite test-dispatch-records.sh L1–L9 (51 asserts); all eight suites green (318 total). Docs: context-budget.md section now R2–R4 + quickstart bullet; CONTEXT.md dispatch bullet; .gitignore runtime-state entry. No scorecard change. |
| 2026-08-06 | Improvement: rollover implementation — register-time sweep of stale primary records (registry hygiene) (session 23; feature work tracked in the work item, recorded here per the delivering-commit rule). Primary acquisition in context-budget.sh register now stamps any other same-project role=primary record whose artifact liveness is stale (same LOCK_STALE rule as the lock) with the takeover triple role=superseded + superseded_at + superseded_by; live records, other projects' records, and non-primary roles are untouched, and auxiliary/child registrations never sweep. Retires the parked sessions-19/21 learning (records from sessions that died without release lingered until the 7-day GC). Registry suite T15 (8 asserts, 68 total); all eight suites green (326 total). Docs: one paragraph in context-budget.md roles section. No scorecard change. |
| 2026-08-06 | Finding: in-band WARN push is swallowed when a busy child wins the throttle race (claude runtime) (session 24, ticket 06 empirical run). PostToolUse hooks fire on a subagent's tool calls keyed to the PARENT session_id (shared throttle stamp + shared escalation status), but the harness drops hook exit-2 stderr for those fires: when the 120K WARN crossed mid-run, the one-shot escalation was consumed on a child fire and the message reached no transcript (parent, child, or grandchild) — escalation-only then never re-emits, so a session running a high-cadence child effectively loses its WARN push. Mitigation candidates: skip state-write/emit when hook stdin identifies a child fire; or treat record-driven measurement as the WARN source of truth while dispatch-list shows open generations. Evidence: work/automatic-session-rollover/research/06-midflight-hook-injection.md. Status: Open. |
| 2026-08-06 | Finding: EnterWorktree mid-session relocates the claude transcript; the registry artifact path goes stale (session 24). Entering a worktree moves the session JSONL to the worktree's project slug (…--claude-worktrees-<name>/<session>.jsonl); the .context-budget/sessions/ record registered pre-worktree keeps the old path, so registry-artifact-based liveness/token checks (lock staleness, sweep, check without --transcript) misread the session as dead/stale. Hook-side checks are immune (stdin transcript_path is current). Fix directions: re-register after EnterWorktree, or resolve the artifact by session-id glob at check time. Second strike 2026-08-06 (session 25): bit a live lock decision, not just a check — session 25 registered as primary at 20:27, entered its worktree at ~20:28 (transcript relocated, registry path dead), and at 20:30 a newly-registering session could not confirm its liveness (lock_holder_age rc 1 = treated-as-stale), swept it, and took primary while session 25 was mid-work. Two live-by-the-rules takeovers of a live session in two sessions — promote the fix (re-register after EnterWorktree is the cheap half; session-id glob resolution the robust half). Status: Open. |
| 2026-08-06 | Design: copilot measured-tier adapter — designed, build unscheduled (session 25, wayfinder ticket 09; decision recorded in the work item, this row per the delivering-commit rule). The adapter is an in-place extension of context-budget.sh, no new script: composite child identity <parentSessionId>+<toolCallId> carried by the existing --agent-id flag (copilot task children have no session of their own); children grows a copilot-cli branch (discovery via subagent.started events cross-checked against session-store.db::assistant_usage_events initiator='sub-agent'); measurement keeps claude semantics — last usage row's input+cache_read+cache_write per agent_id (method=exact, WAL-sidecar snapshot before reading), subagent.completed.totalTokens as estimate-only fallback (lifetime sum, not context size); per-child locks and R4 dispatch records reused verbatim; escalation is post-hoc/external-observer only, since a sync task blocks the parent and ticket 06 closed the push-injection tier. Build slices (incl. slice-0 probe of mode: background/write_agent stream shape, and a sqlite-first upgrade of copilot_cli_measure, whose current grep silently size-estimates) await user scheduling. Full design + rejected alternatives: work/automatic-session-rollover/issues/09-copilot-adapter-design.md. No scorecard change. Session-26 verification: child events in the durable evidence files carry only outputTokens/totalTokens (every inputTokens sits on the single session.shutdown rollup) — sqlite-first is confirmed necessary, and the copilot_cli_measure silent-degrade concern is confirmed real (nothing greppable exists mid-session). |
| 2026-08-06 | Finding: launcher (next-session.md) staleness race — successor session trusted a stale launcher because the local checkout lagged origin/main (session 26). Session 25 resolved wayfinder ticket 09, REPLACED the launcher, and pushed to origin/main from its worktree; the local main checkout was never ff-pulled, so session 26 launched against session 24's launcher, whose freshness first-action ("confirm the checkout carries the session-24 commit, pull if not") passed vacuously — it keys on the previous session's commit marker and cannot detect a newer sibling rollover that exists only on the remote. Session 26 re-resolved ticket 09 in parallel before the push rejection exposed the race; reconciled with origin canonical (duplicate kept on branch session-26-pre-reconcile). Mitigation shipped in the launcher: First-actions now require git fetch origin + empty git log HEAD..origin/main BEFORE trusting the launcher's content. Broader fix direction (unbuilt): launch-next-session.sh / the work-directory convention should guarantee the ff-pull mechanically before a successor reads next-session.md, instead of relying on a prose first-action. Status: Open. |
| 2026-08-06 | Fix M10 second follow-up (session 27): copilot_vscode_discover() failed under the sandboxed VS Code terminal — the sandbox blocks readdir on the workspaceStorage/ parent, so the glob-and-grep workspace scan silently expanded to nothing even though the token file itself stays readable via a direct path. Discovery now derives the workspace-storage hash from $VSCODE_TARGET_SESSION_LOG by parameter expansion (the debug-logs path embeds it) and probes chatSessions/<sid>.jsonl directly before falling back to the glob scan (older builds / var unset unchanged). Verified with a fake-HOME harness including a chmod 311 readdir-blocked simulation (7/7), all eight scripts/tests/ suites green (326 asserts), and a live in-copilot run of the spec's Verify section (sandboxed terminal, user-relayed): correct artifact pinned with no directory listing; method=estimate mid-first-turn is the designed pre-usage-flush degrade — the same file measured 38152 exact once the turn flushed. Spec (user-approved, session 26): work/context-decay/copilot-vscode-sandbox-discovery-fix.md. No scorecard change (M10 already resolved). |
| 2026-08-06 | Ship Copilot VS Code agent-mode context-budget wiring (issue 01, sessions 28–29): new scripts/hooks/context-budget-copilot-vscode-hook.sh + committed .github/hooks/context-budget-vscode.json (PascalCase events, repo-relative command — hook-process cwd verified as the workspace root, VS Code 1.132.0). SessionStart pushes WARN/STOP as hookSpecificOutput.additionalContext; Stop blocks ONLY at STOP via stderr + exit 2 (JSON decision:block verified IGNORED by VS Code), guarded by stop_hook_active. Runtime discriminator: VS Code payloads are snake_case (session_id) vs Copilot CLI camelCase (sessionId) — both .github/hooks/*.json files coexist safely. Token artifact derived hook-side from transcript_path → chatSessions/<sid>.jsonl (promptTokens re-confirmed live). launch-next-session.sh gains a real copilot-vscode seeded launch: code chat -r -m agent "<prompt>" (verified: opens a new agent session in the last-active window, exits before it responds → always routed through the BG confirm loop). Tests: vendor T11 block (12 asserts, fake workspaceStorage tree) + launcher T22 (argv + implied bg). Docs: context-budget.md (runtime table hook route, vendor deployments row, relaunch knobs), relaunch-analysis.md, CONTEXT.md five→six runtimes. |
| 2026-08-06 | Session-number single source of truth (wayfinder issue 10, session 30; TADR-0007): the three number carriers (machine-local .session-seq, handoff.md ledger titles, worktree names) had drifted — a session launched as prompt-#28 was ledger-#29, from a hand-pasted (launcher-bypassing) launch that skipped the seq increment. Rule shipped: .session-seq + the bootstrap prompt are canonical; sessions use their prompt number verbatim in ledger titles and worktree names, ledger repaired on disagreement; drift self-heals via a new session-rollover step-7 sync (the dying session writes its own number to the counter before launching). Rejected: ledger-prose parsing as source or as a register-time checker (fragile / YAGNI), committing the counter (multi-machine conflicts). Docs: work-directory-conventions.md (ledger section), context-budget.md, skills/session-rollover/SKILL.md. No launcher code change; no scorecard change. |
| 2026-08-07 | Resolved L17 + L18, the last two Open cards. L17 (four deferred rollover-script issues): attach-session live-but-unlocked message now matches its own flags; both ls -t glob loops space-safe via while IFS= read -r; opencode_measure SQL-escapes $PWD/$sid; the stale registry-suite filename survived only in the test file's own # File: header (the docs/context-budget.md reference was already correct), now fixed. L18: per-variable precedence around the context-budget.env source in context-budget.sh (capture-before/restore-after, the launch-next-session.sh pattern) — default-only env-file assignments rejected (would invert the per-item override chain). New regression test T16 (red on pre-fix script, green after); T4d updated to the new attach wording. All eight suites green (343 asserts). Scorecard now 0/46/4/0/6. |
| 2026-08-07 | Improvement: scripts/context-inspect.sh — context composition analyzer for the context-decay work item (user request). Exact per-turn totals from the usage envelope; harness-attachment breakdown split turn-1 vs later (itemizes the L29 ~10K first-message materialization: skill_listing ~4K, deferred_tools ~2.4K, hook context ~2K, mcp_instructions ~0.9K, agent_listing ~0.8K); disk-side CLAUDE.md/memory stack (harness-injected, never transcribed); harness-fixed remainder. Verified on two live transcripts. Doc pointer in context-budget.md → Quickstart — agent. Claude-runtime transcripts only. No scorecard change. |
| 2026-08-07 | Resolved L31 (session #4, settling the attribution question parked on the first L19 card): residual analysis over two Warp-plugin-heavy transcripts proved hook_success stdout never enters model context — only the attachment's content field does. context-inspect.sh now attributes hook_success at content length (was whole-JSON, over-attributing ~20–29K tok on Warp-heavy sessions). Same session: turn-1 trim candidates analyzed and declined by user decision (no repo-side item is both unused and consequence-free; skill_listing is only ~307 tok workspace-controlled) — see work/context-decay/trim-estimates.md + decision note. Scorecard now 0/49/4/0/6. |
| 2026-08-08 | Usage-scenario catalog delivered (work/usage-scenarios/, sessions 1–2, user brief): external scenarios E1–E18 (lifecycle, personal layer, working loop, knowledge access, concurrency, team capabilities) + internal scenarios I1–I10 (mechanism groups A–G with per-scenario test status), the zoom-level doc model (Z0–Z3 × O0–O4 + agent profiles), a scenario→docs→tests coverage matrix, and gaps-and-coverage.md (8 ranked gaps with recommendations + sequencing). Opened M15 (catalog meta-card) and promoted the three un-carded change-log findings to cards: M16 (EnterWorktree stales registry artifact — reproduced live this session), L32 (WARN push swallowed via busy child), L33 (launcher staleness race — shape recurred this session via a worktree branched from lagging origin/main). Scorecard now 4/49/4/0/6. |
| 2026-08-08 | Usage-scenarios session-4 walk-through + first two gaps shipped. User verdicts recorded on M15 (sequencing adopted as-is; usage-scenarios.html retirement endorsed; Gaps 6+2 green-lit; 3+8 and 7 queued; 4 and 1 deferred until real). Gap 6: new scripts/tests/test-template-instantiation.sh (20 asserts, nine suites now) — clean-room clone→setup.sh→check-workspace-structure.sh with produced-structure, idempotency, symlink-repair, and placeholder --clone-repos cases, plus doc-accuracy pins for the two claims previously caught false (workspace-structure.md registry↔disk reconciliation claim removed; --clone-repos ignores-tiers behavior now stated honestly). Gap 2: Z0 product interview checklist added beside the S0 preconditions in workspace-structure.md; SPEC.md and docs/system-design.md upgraded from bare stubs to fillable Z0 templates (components/entry-points tables); E1 local-vs-remote fork now an explicit choice point in template-usage.md with both paths. M15 stays Open (Gaps 3+8, 7 next). No scorecard change. |
| 2026-08-08 | Usage-scenarios session-5: Gaps 3+8 shipped (M15). Gap 3 (tooling manifest): check-dependencies.sh gains req jq (hard-required by context-budget.sh, previously unlisted) and a required hook-wiring check (I7's missing installation check — .claude/settings*.json must wire the context-budget hooks); check-service-access.sh gains the same hard-fail distinction (required services → exit 1; was always exit 0); recommended-tooling.md's blanket "everything optional" replaced with a "Required for everyone" table; runbooks updated (jq install lines, exit-code meaning); setup.sh dependency check moved after the per-user copies so its verdict reflects post-setup state. Gap 8 (capability authoring, documentation only): "Authoring a Team Capability" section in workspace-structure.md — container decision rule (scripts/ vs skills/ vs .claude/agents/ vs docs/runbooks/), the two mechanical skill-wiring steps (commands mirror + CONTEXT.md listing), and the make-it-required hook into Gap 3's manifest; pointer added in CONTEXT.md → "Workspace Skills". M15 stays Open (Gap 7 last). No scorecard change. |
| 2026-08-08 | Usage-scenarios session-5 continued: Gaps 7+4+1 shipped, M15 closed. Gap 7: zoom model promoted from the work item to committed docs/zoom-model.md; superseded usage-scenarios.html retired to docs/archive/ with a pointer stub; README.md repointed. Gap 4 (interface only, per the simplicity guardrail — document, don't build): team-vault interface + per-service Scope field documented in docs/service-access.md; no vault tooling. Gap 1 (phase 1 only): "Before You Add a Teammate" breakage points documented in workspace-structure.md + user@host identity fields in coordination records; phases 2–3 stay deferred by design until a second person is real (user verdict — not an open item). Also added a new docs/README.md index. All M15 gap work done → card Resolved and moved to the archive. Scorecard now 3/50/4/0/6. |
| 2026-08-10 | Fix M17 (new card, resolved on filing — archived): Copilot folder-trust seeding — closes the work/usage-scenarios/ gap "trustedFolders step is checked by NO check script". scripts/setup.sh step 3b seeds ~/.copilot/config.json trustedFolders idempotently (JSONC-aware: // comment lines stripped before jq, preserved on rewrite; already-trusted fast path; skip-with-note until Copilot's first run creates ~/.copilot/; warn-not-fail on missing jq / unparseable config); scripts/check-dependencies.sh gains the verify-only advisory (trusts / does-NOT-trust with the silent-no-op warning); docs/context-budget.md vendor-table friction cell updated. test-template-instantiation.sh now sandboxes $HOME around setup.sh runs and adds a T7 seed/comment-preservation/idempotency block. Ported from the downstream insight workspace. Scorecard now 3/51/4/0/6. |
| 2026-08-11 | Fix: Copilot VS Code hook auto-registration (6a6f1fa, ported from the downstream insight workspace): the SessionStart/Stop hook script now registers before its [ -f "$cs" ] measurement guard — SessionStart fires seconds before VS Code creates chatSessions/<sid>.jsonl, so guard-first skipped registration on every fresh session and produced false "hook is a dead end" verdicts downstream; register handles the missing artifact as method=deferred. Live-verified on a fresh Copilot VS Code session (auto-registered in 1s, zero manual steps; VS Code 1.132.0, .github/hooks/ confirmed a default chat.hookFilesLocations location). Also ported: Guard C in context-budget.sh (register dies rather than pinning a sibling when several Copilot sessions are active and $VSCODE_TARGET_SESSION_LOG is unset), chat.useHooks in .vscode/settings.json, docs/CONTEXT.md updates (auto-register primary, manual prefixed register demoted to hook-less fallback), and a ledger-evidence tightening of the session-rollover trigger policy (WARN = one small closing unit; pre-flight headroom check before major units) backed by the imported heavy-deployment analysis work/context-decay/ledger-analysis-heavy-deployment-2026-08-11.md. No scorecard change. |
| 2026-08-11 | Fix M18 (new card, resolved on filing — archived): rollover-cost optimization, from the cross-deployment question "the rollover itself costs ~20K — why, and how do we cut it". Analysis (work/context-decay/rollover-cost-analysis-2026-08-11.md): local cost tripled July→Aug (median ~4.6K → ~11K over 36 ledger deltas) tracking session-rollover/SKILL.md growth 4.6KB→12.1KB; floor ~8–10K mechanical + 0–25K deferred bookkeeping. Applied R1–R5: new scripts/rollover-prep.sh one-shot prep (start record, git summary, verified-lossless handoff→archive rotation, top block, .session-seq, options capture; 28-assert test suite), skill slimmed 12,074→9,222 bytes (mechanics disclosed to scripts), write-ahead promoted to standing discipline, ≤40-line handoff-block cap, self-sufficiency note (no context-budget.md load mid-rollover). First live run also caught up 4 unarchived blocks in work/context-decay/handoff.md. Scorecard now 3/52/4/0/6. |
| 2026-08-11 | Fix M19 (devex-review fix package (a) — archived): clean day-1 state. Telemetry ledger moved work/context-decay/context-ledger.jsonl → .context-budget/context-ledger.jsonl with a self-cleaning migration shim (any legacy ledger is folded in at script load; G3a–c regression asserts). Prune-work/ guidance added as template-usage.md §5 (+ step-4 bullet in setup-guide.html): work/ is a worked example, not machinery. Doc-worthy research promoted to docs/archive/ (ledger-analysis.md, ledger-analysis-heavy-deployment-2026-08-11.md, rollover-cost-analysis-2026-08-11.md, design.html → context-budget-design.html) and every shipped-artifact citation repointed (session-rollover/SKILL.md, context-budget.sh, copilot-vscode hook, context-inspect.sh, docs/context-budget.md — whose pointer to the never-imported copilot-vscode-hook-research-findings.md was dropped as already dangling). All 10 suites green (402 asserts). Scorecard now 9 open / 54 resolved. |
| 2026-08-11 | Repair: L34 ID collision — the devex-review session (unpushed) and the downstream insight clone independently assigned L34 to different findings. The clone's card (onboarding canary + entrypoint/parameterization suites, filed resolved, 28c49f0) published first and keeps the ID; the devex review's "context-budget minimal mode" card is renumbered L34 → L35 (references in the review header and work/devex-review/decisions.md updated; session-1/2 handoff history keeps the old ID and is explained by this row). Scorecard unchanged. Lesson for concurrent clones: an ID is only claimed once pushed. |
| 2026-08-12 | Fix M25 + L33 + L32 (devex-review fix package (d) — archived): session-mechanics reliability. M25: rollover-prep.sh splits root resolution — tracked work files (handoff rotation, git summary) now target the invoking checkout ($PWD's toplevel, adopted only when it shares this repo's git common dir), untracked coordination state (.session-seq, .rollover-options) stays on the main checkout; sibling audit confirmed capture-rollover-options.sh/context-budget.sh/launch-next-session.sh touch only coordination state, so their main-checkout convergence is correct by design; worktree regression test T10. L33: mechanical stale-launcher guard in launch-next-session.sh — refuses to launch when any local/remote ref carries a next-session.md-touching commit not reachable from HEAD (reachability, not timestamps); --skip-freshness overrides; tests F1–F4. L32: claude hook keys throttle/escalation state per (session, chain) via transcript basename, so a sidechain firing can't swallow the parent's WARN; test T12. Suites green: 38+94+54 asserts. Scorecard now 3/61/4/0/6. |
| 2026-08-12 | Fix M23 + L35 (devex-review fix package (e), the program's final package — archived): non-engineer surfaces. M23: new docs/for-non-engineers.md (status / decisions / contributing routes + the six-term glossary, agent-prompt fallbacks for the optional to-spec/to-tickets toolchain); new work/README.md status index (one row + status per work item, refreshed at checkpoint/rollover) with a 60-second work-directory reading key; (anyone) audience tags on create-work-item/decision-log/to-spec in CONTEXT.md's skills list plus a human-redirect line atop CONTEXT.md; discoverability rows in docs/README.md (top-of-table non-engineer row; rendered backlog URL on the findings row) and a README.md pointer. L35: "Minimal mode" statement at the top of docs/context-budget.md (solo loop = register + record + session-rollover) with the fleet-only sections tagged in the section index. Doc-only change; no suites affected. Scorecard now 1/63/4/0/6 — remaining open card: M16. |
| 2026-08-12 | New findings M26 + L36 + L37 filed from an evidence pass over a real non-code instantiation (personal house-sale workspace, 8 sessions, no product code): the process core (launcher/ledger, decisions.md, measured rollovers) worked unmodified, surfacing three gaps — no-git privacy mode is real but unsupported (M26), instantiation pruning leaves template-development artifacts behind (L36), and the hand-invented "portable agent brief" export pattern has no convention (L37). Scorecard now 4/63/4/0/6. |
| 2026-08-12 | Fix M26 + L36 (house-sale mission, cards 1–2 — archived): M26: docs/template-usage.md §1 gains a third, no-git ("private") instantiation variant + a "No-git mode" subsection — paste-in Privacy Posture block for CONTEXT.md, Tier-1→Tier-2 decision-capture rewrite, N/A list for git-dependent machinery — with one-line N/A notes at each point of use (CONTEXT.md Tier-1 bullet; decision-log / checkpoint / session-rollover skills); no code change (launch-next-session.sh already degrades without git). L36: §5 broadened to the full template-development prune list (backlog pair, template-usage itself, unused mcp-fragments, LICENSE swap, README index rows, operational-knowledge trim; scaffolding dirs stay), setup.sh prune reminder gated on the backlog pair (regression T1c), M19 ledger-migration shim verified via registry G3. Suites: 72/72 registry, 28/28 instantiation. Scorecard now 2/65/4/0/6. (Row added retroactively by session 5 — the delivering session omitted it.) |
| 2026-08-12 | Fix L37 (house-sale mission, final card — archived): portable-agent-brief convention documented in docs/work-directory-conventions.md — new "Portable agent brief" section (one sealed file per version under work/<proj>/briefs/<audience>-vN.md, supersession header with the discard line, explicit never-reveal section, ledger notes at issue and at staleness, skeleton included) plus an optional-files-table row; contrasted with dispatch records (same-machine children). Kept convention-only per simplicity-first — a skill is promotable if the pattern recurs (Tier-2 note). Scorecard now 1/66/4/0/6. |
| 2026-08-13 | New findings M27 + M28 + M29 + L38 filed from the SDLC map's gap register (work/sdlc-ai-mapping/sdlc-map.md, dispositions agreed 2026-08-13): design-time testability prompt (G4→M27), UAT/beta coordination (G5→M28), postmortem convention (G6→M29), dependency/test-suite health (G8→L38). The two High-severity gaps became work items instead (work/feedback-intake/ for G1, work/quality-gates/ for G2+G3); G7 (release engineering) was scoped out deliberately. Scorecard now 5/66/4/0/6. |
| 2026-08-13 | New finding L39 filed from the SDLC map's round-2 review fix pass (finding F10, work/sdlc-ai-mapping/review2-findings.md): the map's N8 "backlog conventions (native)" claim covered an unshipped capability — the template repo's own backlog practice is template-repo-only and deleted on adoption. Map rescoped to the issue-tracker conventions that do ship; the generic-backlog-convention gap is now G9 in the map's gap register → this card. Scorecard now 6/66/4/0/6. |
| 2026-08-14 | Fix L40 (filed resolved — archived; ported from the downstream Insight workspace's context-efficiency audit): fragment bring-in mechanics added to mcp-fragments/README.md and docs/mcp-setup.md (subagent mcpServers frontmatter, ROLLOVER_OPT_EXTRA fragment hand-off, no-attach-while-running + schema-deferral facts, variadic --mcp-config prompt-ordering trap); disableClaudeAiConnectors: true added to .claude/settings.json.example. Filed downstream as L35; renumbered at publish because L35 was already claimed (context-budget minimal mode) — second instance of the L34 lesson: an ID is only claimed once pushed. Scorecard now 6/67/4/0/6. |
| 2026-08-16 | New finding M30 filed and resolved in the same pass: the Matt Pocock skill set was global-install-only, so template downloaders got 5 of 27 skills. Full curated set now vendored at upstream 068b6e0 with scripts/sync-vendored-skills.sh, skills/vendored-skills.md index (+ MIT license), 10 slash wrappers, and a rewritten recommended-tooling.md §3 (vendored = default, global symlinks = maintainer path). Scorecard now 6/68/4/0/6. |
| 2026-09-09 | Fix M38 (downstream contribution, PR #44 fix/session-loop-notify-hook — filed resolved, archived; this row added by the pulling session per the maintenance convention): supervised-chain halts were easy to cause and miss. Red-flag block after step 7 in skills/session-rollover/SKILL.md (the "rollover complete" record is not the sentinel); stock scripts/session-loop-notify.sh notify hook (desktop notification + echo fallback) with suite test-session-loop-notify.sh; docs/context-budget.md documents the SESSION_LOOP_NOTIFY wiring and the load-bearing ${ROOT:-.} guard. Scorecard 5/81/4/0/6 at the time. |
| 2026-09-10 | Fix M27 + M28 + M29 + L38 + L39 (the SDLC-map design-gap cards — archived; dc1f334, work/template-improvement-review/ session 1, built under stated assumptions after the user authorised autonomous improvement; the walk-through of work/template-maintenance/open-cards-options-brief.md is thereby settled). M27: native advisory skill design-for-testability + optional spec ## Testability heading. M28: uat.md slot in the work-directory conventions. M29: committed docs/postmortems/ (blameless README + template, feedback-intake forward pointer). L38: routed into work/quality-gates/ scope. L39: "bring your own tracker" posture in docs/agents/issue-tracker.md, naming these backlog files as a copyable example. Scorecard now 0/86/4/0/6. |
| 2026-09-10 | New finding L45 filed from the pooled review (work/template-improvement-review/review.md A10): gitignored work directories are absent from the repo guard's forced worktree and lost when it is deleted, so background sessions on local-only items need a manual copy-back. Scorecard now 1/86/4/0/6. |
| 2026-09-10 | Fix L45 (archived; work/template-improvement-review/ session 3, branch fix/l45-gitignored-work-dirs): local-only (ignored) work/<item>/ dirs are now shared into git worktrees by symlink — new scripts/link-local-work.sh, called unthrottled from the shared hook lib (every runtime's per-tool hook) and from context-budget.sh register; registers the exact path in .git/info/exclude so the symlink never shows as untracked. The card's "repo guard" turned out to be the runtime's own worktree isolation, so exemption was impossible and copy-back was lossy (auto-cleaned "unchanged" worktrees) — decision in the item's decisions.md. Suite test-link-local-work.sh (30 asserts); docs in work-directory-conventions.md + operational-knowledge.md. Scorecard now 0 open / 87 resolved. Session 4: probed live with Agent(isolation: worktree) (link, write-through, exclude line, survival past auto-clean all confirmed; result noted in operational-knowledge.md) and merged to main 5fd5480. |
| 2026-09-13 | Integrated origin PRs #45–#53 into this instance (merge commit; rows added here because the delivering commits carried no backlog update): #45 diff-review.sh -w/--worktree reviews the uncommitted working tree; #46 launcher convention — mandatory work must sit in the First-actions block (conventions doc + session-rollover); #47 session-loop round 2 — bump record is the rollover verdict (rollover-complete sentinel retired from docs), vendor-logout classification, persisted chain budget with --reset-cap; #48 duplicated notify-hook block dropped from context-budget.md; #49 TADR-0009 indexed; #50 create-work-item registers the new project in work/README.md; #51 session-rollover says to update specialized state files; #52 checkpoint gains untracked-work/ check, launcher re-read, ADR scope rule, handoff/decision-log as prerequisites; #53 Copilot entrypoint .github/copilot-instructions.md shipped (entrypoint registries take path:target pairs). Merge conflicts: L45's link-local-work call kept alongside resolve_runtime_pid in cmd_register; scripts tree kept both new lines. No card-count change. |
| 2026-09-16 | Template changes pulled from work/template-improvement-review/ Stage 4 phase 0 (session 10), no card: root ROLLOVER_RELAUNCH default flipped auto → manual while the session scripts are rebuilt (per-item override keeps that item on auto); SESSION_LOOP_NOTIFY now resolves from the env file's own location via BASH_SOURCE instead of the ${ROOT:-.} guard, which resolved against the cwd for every caller but the supervisor (test-session-loop-notify.sh N4); jq pinned as a hard requirement (test-check-dependencies.sh D5); one-time scripts/import-session-seq.sh + suite, to be retired after cutover. Scorecard unchanged. |
| 2026-09-14 | New finding L46, fixed in the same pass (archived; work/template-improvement-review/ session 5): the session-loop round-2 runtime files .session-seq.bump.json, .session-loop.budget and .session-loop.alarm-stop were never added to .gitignore (commit a91c86c / PR #47 added the writers only; test-session-loop.sh models an ignore list the template did not ship), so every supervised chain left a dirty tree and a git add -A session would defeat the progress guard. Three patterns added. Scorecard now 0/88/4/0/6. |
| 2026-09-22 | New finding L47, fixed in the same pass (archived; work/template-improvement-review/ session 22): the counter-import script was slated for retirement after the Stage 4 cutover, but every downstream workspace pulling the new scripts has work items on the old .session-seq counter — kept it, added --status [<project>] (fresh / old / imported / new / conflict, which generation of session-loop.sh ran, leftover files), tests, and a migration table in docs/context-budget.md; the six remaining live items imported. Opened M39 (attended register after a stop-door close re-binds the closed session's number). Scorecard now 1/89/4/0/6. |
| 2026-09-22 | Resolved M39 (archived): bind_record now mints seq + 1 when the dead owner left through the stop door (outcome minted, logged with the loser), matching the launcher's stopped path; plain-exit adoption unchanged. Regression R6i–k; both docs say it in a sentence. Scorecard now 0/90/4/0/6. |
| 2026-09-22 | New finding M40, fixed in the same pass (archived; work/session-management-followups/ ticket 01): attach-session.sh and the statusline resolved an item's owner through the retired .active-session lock, so every item read as unowned. Both now read the record's session block through two new session-lib.sh readers with the TADR-0010 pid liveness rule; suites rewritten onto record fixtures. |
| 2026-09-22 | New finding M41, fixed in the same pass (archived; work/session-management-followups/ ticket 02): the ledger checker and the launcher's top_ledger_session disagreed on which headings carry a session number (the numbered addendum form passed the gate, then refused ledger_shape at rollover). One rule now stated in docs/work-directory-conventions.md → Ledger, both parsers cite it, and test-check-ledger.py runs a heading fixture set through both. Scorecard now 0/92/4/0/6. |
| 2026-09-22 | New finding M42, fixed in the same pass (archived; work/session-management-followups/ ticket 03): no workspace-level template version marker existed. Root TEMPLATE_VERSION (one ISO date behind # comments, bumped at each template release, read by nothing yet), named in docs/template-usage.md §6 "Upgrading later" and the structure tree; test-template-version.sh proves it parses and survives the §5 prune. Shape recorded as an assumption in the item's decisions.md. Scorecard now 0/93/4/0/6. |
| 2026-09-23 | Added L48 (wayfinder as a plan template) from the work/plans build verdict; deferred until the first real plan has closed. |
| 2026-09-30 | Template change from work/plans/ ticket 12, no card (dogfood finding s16): scripts/check-ledger.py now fails on a block heading filed twice (a redone ledger write that left its stale first pass); test-check-ledger.py gains fixtures for both s16 shapes (block spliced into the purpose comment — already caught — and the duplicate) plus a legal same-day pair in the clean baseline; skills/checkpoint/SKILL.md step 2 now anchors ledger writes on --> and runs the checker, as session-rollover already did. |
| 2026-09-30 | Template changes from work/plans/ tickets 13–15 (dogfood findings), no card: a closed chain.plan yields to the one open plan (plan.sh, session-loop.sh); plan.sh ergonomics — add --leaf implies tier: auto, --project=/--plan= forms, a relative-check lint rule, done shows check output only on failure; docs/plans.md and skills/plans/SKILL.md wording (check cwd, sizing, closing a plan, sync after done, hitl launcher prose) and the L48 recipe “Create a plan before a spec exists”. TEMPLATE_VERSION bumped to 2026-09-30. Resolved L48 (archived): adopt as a recipe, keep the wayfinder skill. Scorecard now 0/94/4/0/6. |
| 2026-09-24 | Feature: plans — a work item's work as a node graph (work/<item>/plans/NN-<slug>/, one markdown file per node, waves closed by a reconcile node, hitl nodes for a person's step), driven by scripts/plan.sh (status / frontier / check / start / done / sync and the rest; every state write) and the vendor-neutral plans skill (/plan on Claude Code). Tier policy and per-runtime model knobs in plan-tiers.env (no model name in a plan file); the supervisor (session-loop.sh) runs frontier/check between children. Landed over tickets 01–10 of work/plans (feature work tracked in the work item, recorded here per the delivering-commit rule). Front door: CONTEXT.md → Plans + the plan glossary under Language (worktree as an alias to avoid); reference docs/plans.md (format, verbs, tiers, replans, wayfinder mapping, per-runtime table, worked example), indexed from docs/README.md; optional plans/ row in work-directory-conventions; for-non-engineers glossary entry. Suites: test-plan.sh, test-session-loop.sh, and test-doc-consistency.sh now pins every path the plans docs name. TEMPLATE_VERSION bumped to 2026-09-24. L48 (wayfinder as a plan template) stays open, gated on the first real plan closing. No scorecard change. |
| 2026-10-07 | New findings M43, L49, L50, L51, D5 from the context/memory-engineering evaluation (work/context-memory-eval/eval.md, recommendations 1–4 and 6 accepted; 5 deferred). Work tracked in work/context-memory-hardening/. Scorecard now 5/94/4/0/6. |
| 2026-10-07 | Resolved L49 (archived; work/context-memory-hardening/ ticket 01): “Cache the prefix, vary the tail” rule in docs/context-budget.md with a CONTEXT.md pointer, a date-line warning in check-workspace-structure.sh (new test-context-prefix-stability.sh), and a per-runtime hook-output audit (no change needed). Scorecard now 4/95/4/0/6. |
| 2026-10-07 | Resolved L50 (archived; work/context-memory-hardening/ ticket 02): ledger rows carry cache_read_share from the runtime's own cache count (Claude, Codex, OpenCode; null elsewhere), shown as cache=NN% in check/record. Scorecard now 3/96/4/0/6. |
| 2026-10-07 | Resolved M43 (archived; work/context-memory-hardening/ ticket 03): docs/operational-knowledge.md entries carry git-derived Last confirmed dates with a 6-month review age; checkpoint and decision-log classify a new entry ADD / UPDATE / SUPERSEDE / NOOP before writing, and checkpoint lists stale entries for a person. Scorecard now 2/97/4/0/6. |
| 2026-10-07 | Resolved L51 (archived; work/context-memory-hardening/ ticket 04): CONTEXT.md trimmed from 20,656 to 15,206 bytes by moving detail behind pointers to the docs that already hold it; every must-see rule stays inline. Scorecard now 1/98/4/0/6. |
| 2026-10-07 | Decided D5 (archived; work/context-memory-hardening/ ticket 05): TADR-0013 — no vector store, no MMR re-ranking, no numeric decay scoring; M43's last-confirmed dates are the substitute. All five context/memory-hardening cards closed. Scorecard now 0/98/5/0/6. |
| 2026-10-07 | New finding L52: skills/session-rollover/SKILL.md cites a CONTEXT.md section (“Recording new learnings”) that doesn't exist. Scorecard now 1/98/5/0/6. |
| 2026-10-07 | Resolved L52 (archived): dropped the dead CONTEXT.md → “Recording new learnings” pointer in skills/session-rollover/SKILL.md and repointed two mentions of the nonexistent scripts/check-tooling.sh to scripts/check-dependencies.sh. Scorecard now 0/99/5/0/6. |
| 2026-10-08 | New findings L53–L59 from the doc gap review (work/context-memory-hardening/doc-gap-review.md), and M44, M45, L60–L62 from a harness-engineering review of Böckeler, “Harness engineering for coding agent users” (martinfowler.com); M44–M45 and L60–L62 are built in work/harness-engineering/, L53–L59 in work/template-maintenance/. Scorecard now 12/99/5/0/6. |
| 2026-10-08 | Resolved L53 (archived): docs/context-budget.md check/record output line gains cache=. Scorecard now 11/100/5/0/6. |
| 2026-10-08 | Resolved L55 (archived): docs/workspace-structure.md → “What CONTEXT.md Should Contain” now states the Z0 size budget and the no-dates rule. Scorecard now 10/101/5/0/6. |
| 2026-10-08 | Resolved L56 (archived): two stale CONTEXT.md → “Tool & Context Loading” pointers fixed in docs/workspace-structure.md and docs/mcp-setup.md. Scorecard now 9/102/5/0/6. |
| 2026-10-08 | Resolved L57 (archived): retired decision notes explained in docs/work-directory-conventions.md and docs/for-non-engineers.md. Scorecard now 8/103/5/0/6. |
| 2026-10-08 | Resolved L58 (archived): the ledger-splice gotcha in docs/operational-knowledge.md no longer sends readers to the removed scripts/rollover-prep.sh. Scorecard now 7/104/5/0/6. |
| 2026-10-08 | Resolved L59 (archived): TADR-0009 amendment repointed from the never-committed docs/session-chain-scenarios.md to the relaunch_off gate and its test. Scorecard now 6/105/5/0/6. |
| 2026-10-08 | Resolved M44 (work/harness-engineering ticket 01): scripts/run-checks.sh (full + --fast tiers), opt-in pre-commit hook, GitHub Actions workflow (unverified until pushed); test-jev.sh made hermetic. Scorecard now 5/106/5/0/6. |
| 2026-10-08 | Resolved M45 (work/harness-engineering ticket 02): scripts/check-drift.sh staleness sweep, run by checkpoint step 1 and by CI on push and weekly. New L63 (open): two removed scripts still listed in the workspace-structure.md tree. Scorecard now 5/107/5/0/6. |
| 2026-10-08 | Resolved L60 (work/harness-engineering ticket 03): checkpoint gains “Promote a repeat to a check”; gotchas may carry an **Enforced by:** line, back-filled on three entries. Scorecard now 4/108/5/0/6. |
| 2026-10-08 | Resolved L62 (work/harness-engineering ticket 05): every new check ships with a suite that makes it fail; three new suites close the gaps the audit found. Scorecard now 3/109/5/0/6. |
| 2026-10-08 | Resolved L61 (work/harness-engineering ticket 04): one table of the workspace's guides and checks in docs/workspace-structure.md; its gaps filed as L64 and L65. Scorecard now 4/110/5/0/6. |
| 2026-10-08 | Resolved L63: two removed scripts dropped from the workspace-structure.md tree; check-workspace-structure.sh now checks the tree against disk. Scorecard now 3/111/5/0/6. |
| 2026-10-08 | Resolved L64: scripts/check-plans.sh puts plan.sh check for every committed plan in the gate (fast tier). Scorecard now 2/112/5/0/6. |
| 2026-10-08 | Resolved L65: test-agent-entrypoints.sh case E5 checks every SKILL.md has name/description frontmatter. Scorecard now 1/113/5/0/6. |
| 2026-10-08 | Resolved L54: TEMPLATE_VERSION bumped to 2026-10-08 for the release push. Scorecard now 0/114/5/0/6. |
| 2026-10-09 | Refreshed the vendored Matt Pocock skills from 068b6e0 to 49dd158. Added implement-spec, pr and retro. Dropped resolving-merge-conflicts, which upstream removed. Moved the glossary from CONTEXT.md into a new GLOSSARY.md, following upstream's rename (work/template-maintenance/decisions.md). |
| 2026-10-09 | Filed M48 (isolated: yes has no effect) and L71 (plans for code work have no review step), both from the implement-spec vs plans comparison. Scorecard now 3/120/5/0/6. |
| 2026-10-09 | Resolved L70: new patched class of vendored skill (upstream copy plus a workspace.patch the sync re-applies, failing loudly when it no longer applies), with scripts/tests/test-sync-vendored-skills.sh. code-review is the first: its patch groups each axis into blockers and suggestions. Scorecard now 2/121/5/0/6. |
| 2026-10-09 | Resolved M48 (what an orchestrator does with isolated: yes: own worktree and branch, merged back before done) and L71 (a plan that changes code ends with a code-review wave), both in skills/plans/SKILL.md. Scorecard now 0/123/5/0/6. |
| 2026-10-09 | Resolved L72 (TADR-0014: the glossary lives in GLOSSARY.md), M49 (scripts/migrate-glossary.sh + runbook for older projects) and L73 (patches name their upstream issue; the sync flags closed ones; check-drift warns on vendored skills over 60 days old). Opened L74 (intermittent test-session-lib.sh S8 failure). Scorecard now 1/126/5/0/6. |
| 2026-10-09 | Resolved L74: a second lost race in the session-record lock (a lock re-taken between two checks read as record_unwritable); deterministic test S10r–t. Scorecard now 0/127/5/0/6. |
| 2026-10-11 | Session 24: analysed Addy Osmani's agent-skills and pstack against the vendored Matt Pocock set (work/template-maintenance/skill-packs-analysis.md): take 16 of 77 skills, skip the rest as duplicates, Cursor-bound or domain-specific. Opened M50 (multi-upstream sync + drift) and L75–L81 (vendoring in three waves, catalog + wiring, round-trip proof). Scorecard now 8/127/5/0/6. |
| 2026-10-11 | Resolved M50 (one sync script and drift check for three upstreams), L75–L79 (16 skills vendored: 9 Addy Osmani, 7 pstack; patches for the runtime-specific lines), L80 (catalog, CONTEXT.md pointer, docs, slash commands) and L81 (sync round trip clean, audit zero blockers, 42 checks pass). Scorecard now 0/135/5/0/6. |
| 2026-10-11 | Session 24, second task (Rob Shocks' “Pocock vs Pstack vs Osmani”): opened M51 (trigger trimming + description budget check), L82 (stakes-to-ceremony guide) and L83 (anti-rationalization tables); plan work/template-maintenance/plans/01-skill-ceremony. Scorecard now 3/135/5/0/6. |
| 2026-10-11 | Resolved M51 (unslop narrowed, 32 model-invoked skills reviewed, three made user-invoked, check-skill-descriptions.sh ratchets at 7,500 bytes; 10,174 → 7,303), L82 (docs/stakes-to-ceremony.md + pointers) and L83 (rationalization tables in five workspace skills). 44 checks pass; sync round trip clean. Scorecard now 0/138/5/0/6. |
| 2026-10-12 | Resolved L84 (from the token-factory sync of ccb4ed3): template ADRs move to docs/template-adr/ as TADR-NNNN, docs/adr/ is the project’s own; instances propose TADRs upstream via Promote?: upstream; migration runbook docs/runbooks/adr-namespace-migration.md. Scorecard now 0/139/5/0/6. |
| 2026-10-12 | Test only: test-session-loop.sh gains W1 — the supervisor run from a worktree’s own copy of session-loop.sh drives the main checkout’s record and writes nothing into the worktree (the --git-common-dir resolver had no loop case from a worktree; seen red with the resolver forced to SCRIPT_ROOT). Replaces PR #61, whose other three worktree cases tested the .next-command pair and --emit <path> that Stage 4 removed. No card-count change. |
| 2026-10-12 | Test only: test-attach-session.sh stubs claude on PATH (agents --json → []); on a machine running a live session named testproj #N, T5a/T5b resolved it and exited 0 (seen red 25/2, now 27/0). Opened L85 (template-only suites should skip in instances). Scorecard now 1/139/5/0/6. |
| 2026-10-12 | Added L86 (Open): Antigravity IDE/app and Codex desktop app session-identity probes deferred from runtime-session-identity node 11-remaining-surface-probes on the user’s call. |
| 2026-10-12 | Added L87 (Open): cwd substring match in context-budget discovery, from the runtime-session-identity node 15 review. The same review fixed three items in scripts/context-budget.sh and .claude/settings.json, test-first (commits 0b4dd7c, 0d581ce, 0964a23). |
| 2026-10-12 | Resolved L88 (PR #65, pulled from origin without a card: stray files in nodes/ no longer break plan.sh) and L89 (plan.sh plans lists every work item’s plans, one line each, --json). Scorecard now 3/141/5/0/6. |
| 2026-10-12 | Resolved L87 (cwd substring match in context-budget discovery): both checks now match the cwd as a whole value; registry suite U3/U4 seen failing first. Card moved to the archive. |
| 2026-10-18 | Resolved L94 (external-tools-review doc pass, R7–R10, R13–R17, R20, R22–R24) and L93 with it (yt-dlp example reworded, R6). Cards moved to the archive. Scorecard now 6/147/5/0/6. |
| 2026-10-18 | Resolved L85 (template-only suites skip in instances), L95 (dispatch-contract read-first / Remember: / WIP commits / proved DONE) and L96 (usage-limit wait vs the silence watchdog, documented) — backlog-sweep wave 1. Cards moved to the archive. Scorecard now 3/150/5/0/6. |
| 2026-10-18 | Resolved L98 (skill-earns-its-place pilot: 3 skills, 36 headless runs, ~$0.88; no skill met the keep rule). Opened L99 (code-simplification) and L100 (unslop) as prune candidates for the user to decide. Scorecard now 4/151/5/0/6. |
| 2026-10-18 | Fix (no card; runtime-session-identity plan 02, closed): Copilot VS Code agent mode on the Copilot CLI runtime context budget. The exact count comes from the CLI checkpoint's prompt_tokens, and the CLI cumulative overcount is gone (3928a86). Claude SessionStart/SessionEnd hooks skip Copilot session-state transcripts (34c76b4). There is one registry name per Copilot session, copilot-cli (6c5ae3a), and the name is keyed on the transcript path, so a leaked env var cannot re-file a VS Code Local chat (f87afb0, from the plan’s code review). Each fix has a suite case seen red first. Live re-probe in VS Code passed. |
| 2026-10-18 | Resolved L86 (Antigravity IDE and Codex desktop probes both pass; the Codex probe led to the Claude-hook allowlist, cc1173e). Opened L101 (manual register in the Antigravity IDE shell). Card moved to the archive. Scorecard now 5/153/5/0/6 (with L102/L103 from html-kit). |
| 2026-10-18 | Resolved L99: pruned code-simplification from the vendored set (user’s call). Card moved to the archive. Scorecard now 4/154/5/0/6. |
| 2026-10-18 | Resolved L100: kept unslop after a harder-prose re-test (37/37/52 of 60). Card moved to the archive. Scorecard now 3/155/5/0/6. |
| 2026-10-18 | Resolved L101: manual register in the Antigravity IDE shell now finds the transcript under any data root when ANTIGRAVITY_APP_DATA_DIR is unset; registry suite L2d seen red first. Card moved to the archive. Scorecard now 2/156/5/0/6. |
| 2026-10-21 | Resolved L103: build-guide-html.sh emits the HTML kit skeleton (no inline style; pandoc classes and style= stripped); test-build-guide-html.sh seen red first. Card moved to the archive. Scorecard now 1/157/5/0/6. |
| 2026-10-22 | Resolved L104: session-loop.sh no longer syncs a plan that is already closed, so a closing session’s launcher without position markers ends plan_closed, not plan_invalid; session-rollover keeps the markers after a plan closes. Loop suite P3h seen red first. Filed and resolved at once; card in the archive. Scorecard now 1/158/5/0/6. |