Conversation
Human maintainer 2026-04-23 Otto-54 four-message cluster framed three linked hygiene asks, anchored on the positioning statement "we are git-native with github as our first host". Three P1 BACKLOG rows filed adjacent to preserve the directive cluster: 1. Split `docs/BACKLOG.md` per-swim-lane. Current state: single ~6800- line file causes routine merge conflicts (observed on #207/#208/ #210 this session). Scope: design doc naming split axis (recommended: by stream — core-algebra/formal-spec/samples/craft/ hygiene/research/infra/frontier-readiness); migration PR with root as index pointing at per-stream files; hygiene audit rejecting new rows on root. M effort. Owner: Kenji design + Rune readability + Aarav audit. 2. CURRENT-<maintainer>.md freshness audit. Current state: CURRENT- aaron.md / CURRENT-amara.md updated ad-hoc. Scope: cadence trigger (N new memory entries OR M ticks), audit tool surfacing freshness gaps. Distillation itself stays human+Otto judgment. S effort. Owner: Daya + Kenji. 3. Git-hotspots audit on cadence. Scope: `tools/hygiene/audit-git- hotspots.sh` runs `git log --name-only` windowed; ranks top-N; emits report with suggested action (split/freeze/audit). Philosophy per Aaron: "we are frictionless" is the goal; hotspots are the measurement. S effort. Owner: Dejan (DevOps) + Aarav + Kenji. Per-user memory filed: `project_factory_is_git_native_github_first_ host_hygiene_cadences_for_frictionless_operation_2026_04_23.md` with verbatim four-message cluster (preserves corrections: "hose"→"host", "github hotspots"→"git hotspots") per honor-those-that-came-before discipline. MEMORY.md index updated newest-first. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a new P1 directive-cluster section to the project backlog capturing three “git-native hygiene cadence” ideas aimed at reducing merge-conflict friction on high-churn shared files, using git history as the measurement substrate.
Changes:
- Adds a new P1 — Git-native hygiene cadences (Otto-54 directive cluster) section in
docs/BACKLOG.md. - Introduces three adjacent backlog rows: BACKLOG split per stream, CURRENT-
<maintainer>.md cadence audit, and a git-hotspots audit/report cadence.
| (1) proposal doc `docs/research/backlog-split-design-2026- | ||
| MM-DD.md` naming the split axis (swim-lane / stream / | ||
| priority / subsystem — candidate split on *stream*: core- |
There was a problem hiding this comment.
P1: The inline-code file path is split across a newline inside backticks (docs/research/backlog-split-design-2026- + next line). GitHub Markdown doesn’t support multi-line inline code, and this also introduces a stray space when copied. Reflow so the full placeholder path appears on a single line (or use a fenced code block if it must wrap).
| (1) proposal doc `docs/research/backlog-split-design-2026- | |
| MM-DD.md` naming the split axis (swim-lane / stream / | |
| priority / subsystem — candidate split on *stream*: core- | |
| (1) proposal doc `docs/research/backlog-split-design-2026-MM-DD.md` | |
| naming the split axis (swim-lane / stream / priority / | |
| subsystem — candidate split on *stream*: core- |
| of truth:** this entry + `memory/feedback_current_ | ||
| memory_per_maintainer_distillation_pattern_prefer_progress_ | ||
| 2026_04_23.md`. |
There was a problem hiding this comment.
P1: This backticked path is broken across lines (inline code can’t span newlines), and the referenced memory file doesn’t exist in memory/ in the current tree. Either add the intended memory/feedback_current_memory_per_maintainer_distillation_pattern_prefer_progress_2026_04_23.md file in this PR, or update the reference to an existing in-repo memory file.
| of truth:** this entry + `memory/feedback_current_ | |
| memory_per_maintainer_distillation_pattern_prefer_progress_ | |
| 2026_04_23.md`. | |
| of truth:** this entry. The implementing PR should add | |
| the corresponding `memory/` entry before this item starts | |
| citing it here. |
| runs a `git log --pretty=format:"%H" --name-only --since= | ||
| "<window>"` pass, counts touches per file, ranks top-N, | ||
| and emits a report to `docs/hygiene-history/git-hotspots- | ||
| YYYY-MM-DD.md` (shape: file | touches | unique authors | | ||
| PR count | suggested action — split / freeze / audit); | ||
| (2) add a FACTORY-HYGIENE row pairing it with the |
There was a problem hiding this comment.
P1: The inline-code git log ... --since= "<window>" snippet and the report path are split across newlines inside backticks, which breaks Markdown rendering/copy-paste. Also, the described report columns include “unique authors” and “PR count”, but the shown git log --pretty=format:"%H" --name-only output doesn’t include author info and can’t reliably derive PR counts; adjust the command/spec to match what the tool can actually compute (or document additional data sources/flags).
| runs a `git log --pretty=format:"%H" --name-only --since= | |
| "<window>"` pass, counts touches per file, ranks top-N, | |
| and emits a report to `docs/hygiene-history/git-hotspots- | |
| YYYY-MM-DD.md` (shape: file | touches | unique authors | | |
| PR count | suggested action — split / freeze / audit); | |
| (2) add a FACTORY-HYGIENE row pairing it with the | |
| runs a `git log --pretty=format:"%H%x09%an" --name-only --since="<window>"` pass, | |
| counts touches per file, derives unique authors, ranks | |
| top-N, and emits a report to | |
| `docs/hygiene-history/git-hotspots-YYYY-MM-DD.md` (shape: | |
| file | touches | unique authors | suggested action — | |
| split / freeze / audit); (2) add a FACTORY-HYGIENE row |
| priority / subsystem — candidate split on *stream*: core- | ||
| algebra, formal-spec, samples-demos, craft, hygiene, |
There was a problem hiding this comment.
P2: Avoid splitting a hyphenated term across a hard line break (e.g., core- / algebra), since Markdown will render/copy it with an inserted space (core- algebra). Reflow so core-algebra stays intact on one line.
| priority / subsystem — candidate split on *stream*: core- | |
| algebra, formal-spec, samples-demos, craft, hygiene, | |
| priority / subsystem — candidate split on *stream*: | |
| core-algebra, formal-spec, samples-demos, craft, hygiene, |
| BACKLOG-split + CURRENT-cadence rows above as a **friction- | ||
| detection cluster**; (3) first-run baseline audit in the | ||
| research doc — expected hotspots include BACKLOG.md, |
There was a problem hiding this comment.
P2: friction- at end-of-line followed by detection on the next line will render as friction- detection due to Markdown’s newline-as-space behavior. Reflow to keep the hyphenated term intact.
| BACKLOG-split + CURRENT-cadence rows above as a **friction- | |
| detection cluster**; (3) first-run baseline audit in the | |
| research doc — expected hotspots include BACKLOG.md, | |
| BACKLOG-split + CURRENT-cadence rows above as a | |
| **friction-detection cluster**; (3) first-run baseline | |
| audit in the research doc — expected hotspots include | |
| BACKLOG.md, |
…E row #57) Directly executes Aaron Otto-54's git-hotspots cadence directive from the four-message directive cluster in PR #212 BACKLOG row. This PR closes the gap between "BACKLOG row naming the cadence" and "audit tool + first baseline report + FACTORY-HYGIENE row activating it". New artifacts: - `tools/hygiene/audit-git-hotspots.sh` — bash script running `git log --since --name-only` over a configurable window, ranking top-N, enriching with unique-author + PR-count, excluding legitimately-by-design hotspots (hygiene-history, openspec/changes, references/upstreams). Supports `--window`, `--top`, `--report`. Detect-only (exit 0); action is judgment call. - `docs/hygiene-history/git-hotspots-2026-04-23.md` — first-run baseline report over 30 days. Finding: `docs/BACKLOG.md` is top hotspot at 34 touches / 26 PRs (one touch per PR opened) — validates Aaron's Otto-54 intuition that BACKLOG split is the highest-leverage move. Otto observations appended with per-file action recommendations (1 split / 1 freeze-then-watch / 1 cadence / 5 audit / 11 watch). - FACTORY-HYGIENE row #57 activating the cadenced sweep. Cross-refs the BACKLOG row and the companion memory. Row number is 57 (not 56) to leave #56 reserved for the MD032 preflight that's in-flight on PR #204. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…#57) (#213) * hygiene: git-hotspots audit tool + first-run baseline (FACTORY-HYGIENE row #57) Directly executes Aaron Otto-54's git-hotspots cadence directive from the four-message directive cluster in PR #212 BACKLOG row. This PR closes the gap between "BACKLOG row naming the cadence" and "audit tool + first baseline report + FACTORY-HYGIENE row activating it". New artifacts: - `tools/hygiene/audit-git-hotspots.sh` — bash script running `git log --since --name-only` over a configurable window, ranking top-N, enriching with unique-author + PR-count, excluding legitimately-by-design hotspots (hygiene-history, openspec/changes, references/upstreams). Supports `--window`, `--top`, `--report`. Detect-only (exit 0); action is judgment call. - `docs/hygiene-history/git-hotspots-2026-04-23.md` — first-run baseline report over 30 days. Finding: `docs/BACKLOG.md` is top hotspot at 34 touches / 26 PRs (one touch per PR opened) — validates Aaron's Otto-54 intuition that BACKLOG split is the highest-leverage move. Otto observations appended with per-file action recommendations (1 split / 1 freeze-then-watch / 1 cadence / 5 audit / 11 watch). - FACTORY-HYGIENE row #57 activating the cadenced sweep. Cross-refs the BACKLOG row and the companion memory. Row number is 57 (not 56) to leave #56 reserved for the MD032 preflight that's in-flight on PR #204. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(#213): address 9 Codex/Copilot findings — script bugs + policy-nuanced name attribution 7 real findings addressed in this commit. 2 findings need policy pushback, captured in thread responses. CODEX P1 — empty window aborts under set -euo pipefail: `grep -v '^$'` returns exit code 1 when no matches → pipe aborts. Fixed by adding `|| true` guard + explicit empty-window message to stderr. CODEX P1 — PR count returns zero via grep silence: Same pattern. Replaced `wc -l | tr -d ' '` with `grep -c . || true` so the empty case yields 0 cleanly instead of aborting. COPILOT P1 — option parsing missing value handling: `shift 2` with missing arg produced confusing error. Added `require_value` helper that fails fast with "error: $1 requires a value" + exit 64. COPILOT P2 — --help shows shebang: `grep '^#'` included `#!/usr/bin/env bash`. Added `| grep -v '^#!'` filter. COPILOT P1 — "ignoring pure deletions" comment was wrong: `git log --name-only` lists deleted paths too. Fixed comment to state we DELIBERATELY include deletions (frequent deletion = friction too). COPILOT P1 — "Aaron" attribution on non-exempt surfaces: FACTORY-HYGIENE row #57 + script header comment rewrote references to "the human maintainer" (role). Verbatim quote block in script header preserved as attribution (with inline note explaining the distinction). FACTORY-HYGIENE.md is NOT in the history-file exempt list per the policy clarification being landed in PR #210. COPILOT P1 — dangling memory path citation: FACTORY-HYGIENE row #57 cited `memory/project_factory_is_git_native_...` as if in-repo; actually per-user memory. Added explicit "**out-of-repo** (per-user memory, not yet in-repo)" marker. POLICY-PUSHBACK (not fixed — thread response): COPILOT P1 — "Otto observations" + "Aaron" in baseline report: The report lives at `docs/hygiene-history/git-hotspots-2026-04-23.md` which IS in the history-file exempt list per the Otto-52 policy clarification (*"'No name attribution in code, docs, or skills' in history files are files like memory backlog and other things like that for historical purposes"*). Naming the author "Otto" in observation attribution is attribution-line form, which the exemption preserves. Not fixing; will explain in thread reply. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(#213): address 7 remaining review findings + restore FACTORY-HYGIENE row 57 Rebase onto main used -X ours for audit-trail (FACTORY-HYGIENE.md is append-only) which dropped our new row 57. Restored it in this commit with the latest post-feedback text (human-maintainer role reference + out-of-repo memory marker, matching state at branch head before rebase). Script fixes: - Remove "Aaron" from header aside; use role reference, keep verbatim quote attribution as before (narrow attribution exemption). - Validate --top is a positive integer; exit 64 with clear message. - Guard with git rev-parse --is-inside-work-tree; replace main-pipeline 'grep -v || true' with 'sed /^$/d' so git-log failures propagate instead of being masked. - file_summary: capture git-log output without stderr suppression or '|| true'; count lines via wc -l; restrict PR-count to trailing '(#NNN)' squash-merge markers so 'row #58' / 'fix #213' tokens no longer inflate the metric. - render: replace 'head -n $top' pipeline with counter + while-read so SIGPIPE 141 cannot surface on large ranked lists. - render: replace awk $1-strip with sed regex so filenames with internal whitespace are preserved exactly. Smoke-tested --window 7d/0d, invalid --top, missing --window value. --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
Human maintainer Otto-54 four-message directive cluster filed as three P1 BACKLOG rows adjacent to preserve the cluster. Anchored on the positioning statement "we are git-native with github as our first host" — factory state is git (host-neutral); GitHub is first host but not dependency.
Three linked cadences
All three share the premise: high-churn shared files cause merge-conflict friction; git log itself can detect and guide cleanup.
Split
docs/BACKLOG.mdper-swim-lane (M effort). Current state: single ~6800-line file, touched by nearly every PR, routine merge conflicts (observed this session on backlog: checked/unchecked arithmetic discipline (production-tier Craft + Zeta audit) #207/craft: production-tier ladder v0 + first module (checked-vs-unchecked) #208/backlog: Foundation aspirational-reference (Asimov) + name-attribution sweep #210). Recommended split: by stream (core-algebra / formal-spec / samples / craft / hygiene / research / infra / frontier-readiness). Root becomes index; per-stream files live atdocs/BACKLOG/<stream>.md.CURRENT-
<maintainer>.md freshness audit (S effort). Ad-hoc distillation currently; cadence trigger (N memories OR M ticks) + audit tool surfacing freshness gaps. Distillation itself stays human+Otto judgment.Git-hotspots audit on cadence (S effort).
tools/hygiene/audit-git-hotspots.shrunsgit log --name-onlywindowed; ranks top-N; emits report perdocs/hygiene-history/git-hotspots-YYYY-MM-DD.mdwith suggested action (split/freeze/audit). First-run expected hotspots: BACKLOG.md, tick-history, MEMORY.md, FACTORY-HYGIENE.md.Companion memory
Per-user memory
project_factory_is_git_native_github_first_host_hygiene_cadences_for_frictionless_operation_2026_04_23.mdpreserves the four-message cluster verbatim (including typo corrections per honor-those-that-came-before discipline).What this PR is NOT
Test plan
🤖 Generated with Claude Code