Skip to content

backlog: git-native hygiene cadences (Otto-54 — BACKLOG split + CURRENT cadence + git-hotspots)#212

Merged
AceHack merged 2 commits intomainfrom
backlog/git-native-hygiene-cadences-otto-54
Apr 23, 2026
Merged

backlog: git-native hygiene cadences (Otto-54 — BACKLOG split + CURRENT cadence + git-hotspots)#212
AceHack merged 2 commits intomainfrom
backlog/git-native-hygiene-cadences-otto-54

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 23, 2026

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.

  1. Split docs/BACKLOG.md per-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 at docs/BACKLOG/<stream>.md.

  2. 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.

  3. Git-hotspots audit on cadence (S effort). tools/hygiene/audit-git-hotspots.sh runs git log --name-only windowed; ranks top-N; emits report per docs/hygiene-history/git-hotspots-YYYY-MM-DD.md with 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.md preserves the four-message cluster verbatim (including typo corrections per honor-those-that-came-before discipline).

What this PR is NOT

  • Not executing the splits — all three are research-and-design rows.
  • Not a commitment to migrate away from GitHub.
  • Not mandating a specific split axis (design doc decides).

Test plan

  • BACKLOG renders correctly
  • No reference cycles between the three rows

🤖 Generated with Claude Code

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>
Copilot AI review requested due to automatic review settings April 23, 2026 23:00
@AceHack AceHack enabled auto-merge (squash) April 23, 2026 23:00
@AceHack AceHack merged commit 876f121 into main Apr 23, 2026
10 checks passed
@AceHack AceHack deleted the backlog/git-native-hygiene-cadences-otto-54 branch April 23, 2026 23:02
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread docs/BACKLOG.md
Comment on lines +6755 to +6757
(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-
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
(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-

Copilot uses AI. Check for mistakes.
Comment thread docs/BACKLOG.md
Comment on lines +6798 to +6800
of truth:** this entry + `memory/feedback_current_
memory_per_maintainer_distillation_pattern_prefer_progress_
2026_04_23.md`.
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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.

Copilot uses AI. Check for mistakes.
Comment thread docs/BACKLOG.md
Comment on lines +6808 to +6813
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
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Suggested change
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

Copilot uses AI. Check for mistakes.
Comment thread docs/BACKLOG.md
Comment on lines +6757 to +6758
priority / subsystem — candidate split on *stream*: core-
algebra, formal-spec, samples-demos, craft, hygiene,
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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,

Copilot uses AI. Check for mistakes.
Comment thread docs/BACKLOG.md
Comment on lines +6814 to +6816
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,
Copy link

Copilot AI Apr 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
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,

Copilot uses AI. Check for mistakes.
AceHack added a commit that referenced this pull request Apr 24, 2026
…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>
AceHack added a commit that referenced this pull request Apr 24, 2026
…#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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants