From a10ab1b4a69ada54cdc68facaaa21cd665c70f5a Mon Sep 17 00:00:00 2001 From: Topi Jarvinen Date: Mon, 27 Jul 2026 10:20:51 +0300 Subject: [PATCH] chore: gitignore reports/ and settle its contradictory contract (#79) post-merge-systemize said never commit reports/; triage-friction-log said git-track it. .gitignore matched neither -- it ignored state/ but not reports/ -- so the first rule was unenforced and left a permanently untracked reports/ in every git status. Observed during the #78 sweep. Resolved toward ignored: the report is derived (after a sweep lands every proposal is a tracker issue and every source entry is verbatim in the archive), it grows one file per run with no doc_budgets tripwire, and state/ is already ignored on identical logic. - .gitignore: add reports/ - init.sh: add_ignore_line "reports/" so adopters get it too - triage-friction-log.md: amend the Step 6 contract and the DM template's "also pushed in next branch" line to match post-merge-systemize --- .claude/commands/triage-friction-log.md | 9 ++++++--- .gitignore | 6 ++++++ init.sh | 4 ++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.claude/commands/triage-friction-log.md b/.claude/commands/triage-friction-log.md index f3315cd..716e969 100644 --- a/.claude/commands/triage-friction-log.md +++ b/.claude/commands/triage-friction-log.md @@ -181,7 +181,7 @@ Format: :clipboard: *Triage — friction-log graduation candidates* [N] proposals drafted from the current un-graduated inbox. -Source: [reports/triage_.md] (also pushed in next branch). +Source: [reports/triage_.md] (local only — `reports/` is gitignored). *1.* `[label1, label2, …]` — *[title 1]* > [first ~60 chars of body … truncated with `…` if longer] @@ -439,8 +439,11 @@ Source doc updated on draft PR: If any creates failed in Step 4, list them with their error in a separate thread reply. -Delete the state file. The `reports/triage_.md` report is kept (git-tracked -alongside other reports, no automatic cleanup). +Delete the state file. The `reports/triage_.md` report stays on disk but is +**never committed** — `reports/` is gitignored, the same as `state/`, and the finalize +commit carries only the two doc edits. The report is derived: once the sweep lands, +every proposal is a tracker issue and every source entry is verbatim in the archive. +No automatic cleanup. **End Session B.** Output: diff --git a/.gitignore b/.gitignore index fb26a01..6a90d4e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,9 @@ state/ # Agent worktrees (created by isolated review lenses) are never committed. .claude/worktrees/ + +# Pipeline reports (triage proposals, systemize digests). Derived scratch from +# the same runs that write state/: once a sweep lands, every proposal is a +# tracker issue and every source entry is verbatim in the archive. Tracking them +# would also be the kit's one narrative path with no doc_budgets tripwire. +reports/ diff --git a/init.sh b/init.sh index e21b06a..e9b7dc1 100755 --- a/init.sh +++ b/init.sh @@ -733,6 +733,10 @@ add_ignore_line ".devkit_state_root" # Isolated review lenses (fallback-review-panel.md contract item 7) run in their # own worktrees; those must never be committed back into the repo. add_ignore_line ".claude/worktrees/" +# Pipeline reports (triage proposals, systemize digests) are derived scratch from +# the same runs that write state/, and the workflows commit only the doc/skill/ +# config paths they edited — never reports/. +add_ignore_line "reports/" # dev_session.sh copies a repo-root .mcp.json into each lane worktree so lanes # inherit MCP access. If yours holds literal credentials rather than ${ENV} # references, that copy must never be committable from a lane.