Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
pr_number: 4051
title: "fix(rules): PR #4050 follow-up \u2014 math inconsistency + persona/name attribution"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-17T09:00:49Z"
merged_at: "2026-05-17T09:11:30Z"
closed_at: "2026-05-17T09:11:30Z"
head_ref: "otto/fix-pr-4050-followup-math-and-persona-attribution-2026-05-17"
base_ref: "main"
archived_at: "2026-05-17T09:20:38Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #4051: fix(rules): PR #4050 follow-up — math inconsistency + persona/name attribution

## PR description

## Summary

Addresses 2 valid Copilot review findings on [PR #4050](https://github.com/Lucent-Financial-Group/Zeta/pull/4050) that landed **post-merge** (Copilot reviewed after auto-merge had already fired).

## Findings fixed

1. **Math inconsistency** (line 316): table listed 10 pre-empt #5 rows but text said "8 cycles" and artifact categories summed to 10 vs "12 artifacts claimed earlier."
- Fixed: 10 cycles now explicitly labeled in table (`cycle 1` through `cycle 10`); intro clarifies "12 PR-content changes (10 substrate files + 1 BACKLOG.md regen + 1 worked-example memo)" with the 10 cycle artifacts as a distinct count.

2. **Persona/name attribution on rule surface** (line 282): factory convention keeps names out of reusable current-state rules.
- Fixed: refactored `Lior` → `antigravity peer-agent loop matching \`gemini.*Lior|lior.*loop\``; `peer-Otto` → `peer autonomous-loop instance`; `Otto-CLI` → `the autonomous-loop`; `Aaron` → `the human maintainer`.
- Section header renamed: `Sustained-Lior` → `Sustained-named-dep`.

## Substrate-honest framing

Both findings were valid. The original section landed via the rule's own forced-#6 discipline (PR #4050 was itself a rule-edit pre-empt). This follow-up shows the discipline continuing to operate correctly — review findings on a merged PR get a follow-up PR, not narrative-only resolution.

## Test plan

- [ ] markdownlint passes
- [ ] No file content changes outside the single rule file
- [ ] Pre-empt cycle count consistent across table + text (10 cycles)
- [ ] No persona/name attribution in the new section

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T09:03:16Z)

## Pull request overview

Updates a factory rule document to correct an internal cycle/artifact count inconsistency from PR #4050 and to remove named attribution from a current-state rules surface.

**Changes:**
- Renames the empirical-anchor section header to avoid named attribution (“Sustained-named-dep…”).
- Reconciles the pre-empt-at-#5 cycle count by labeling cycles 1–10 and updating the “Pattern observed” summary.
- Reframes the “12 artifacts” claim into “12 PR-content changes” with a breakdown of which changes were produced by the pre-empt cadence.

## Review threads

### Thread 1: .claude/rules/holding-without-named-dependency-is-standing-by-failure.md:282 (resolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:03:16Z):

This section still includes the persona/name string `Lior` inside the process-match regex (`gemini.*Lior|lior.*loop`). Since `.claude/rules/**` is a current-state rules surface where the repo convention is to avoid named attribution, consider rewriting this to a placeholder/generic pattern (and describing how to substitute the local named-dep) so the rule text itself does not embed the name.

### Thread 2: .claude/rules/holding-without-named-dependency-is-standing-by-failure.md:284 (resolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:03:16Z):

The claim of “10 new substrate files” conflicts with the later explanation that one of the 10 pre-empt artifacts was a row update (an edit, not a new file) and that another was a PR body file preparation. Suggest rewording this sentence to count “10 pre-empt artifacts/substrate changes” (or otherwise align the wording with the timeline and the 10-cycle artifact list) to avoid another math/label inconsistency.
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
---
pr_number: 4054
title: "substrate(otto-cli): B-0611 followup memos + 2 tick shards from autonomous-loop 0808Z-0904Z"
author: "AceHack"
state: "MERGED"
created_at: "2026-05-17T09:11:59Z"
merged_at: "2026-05-17T09:14:16Z"
closed_at: "2026-05-17T09:14:16Z"
head_ref: "otto-cli/b0611-followup-substrate-catalog-drift-shell-glob-shards-2026-05-17"
base_ref: "main"
archived_at: "2026-05-17T09:20:37Z"
archive_tool: "tools/pr-preservation/archive-pr.ts"
---

# PR #4054: substrate(otto-cli): B-0611 followup memos + 2 tick shards from autonomous-loop 0808Z-0904Z

## PR description

Follow-up to PR #4046 (B-0611 audit-prep substrate batch) and PR #4048 (isolated-worktree workflow worked example). Ships 5 filesystem-only artifacts that accumulated during autonomous-loop session 0808Z → 0904Z.

## Artifacts (5 files, ~700 lines)

1. **`memory/feedback_otto_cli_dangling_refs_file_line_catalog_47_pairs_6_surfaces_2026_05_17.md`** (362 lines) — catalog memo from 0430Z prior session; the better audit form peer-Otto flagged on PR #4041 (file:line pairs vs sort-u dedup)
2. **`memory/feedback_otto_cli_b0611_dangling_refs_count_drift_47_to_49_over_3_5_hours_audit_tool_in_ci_is_durability_mechanism_2026_05_17.md`** (110 lines) — drift signal at 0820Z: 47 → 49 edges over 3.5h; argues for audit-tool CI-wiring (B-0611 acceptance bullet already in place)
3. **`memory/feedback_otto_cli_shell_glob_in_quotes_silent_failure_authoring_lesson_from_pr_4048_reviewer_iteration_2026_05_17.md`** (95 lines) — authoring lesson from PR #4048 reviewer-iteration: literal filenames over globs-in-quotes
4. **`docs/hygiene-history/ticks/2026/05/17/0808Z.md`** (53 lines) — session cold-boot shard
5. **`docs/hygiene-history/ticks/2026/05/17/0825Z.md`** (80 lines) — arc-summary for 0808Z-0824Z; 2 pre-empt-at-#5 cycles

## Composes with

- PR #4042 (audit tool mechanization)
- PR #4046 (B-0611 row + 4 slice recipes + session memos + 3 tick shards)
- PR #4048 (isolated-worktree workflow worked example — applied here)
- PR #4050 (sustained-Lior-with-pre-empt-success empirical anchor — this PR is fresh evidence)

## Worked-example: isolated-worktree under Lior contention

Branch authored from isolated worktree `/private/tmp/zeta-otto-cli-0904z-followup` at 0904Z forced-#6 escalation point. Lior was active (3 procs) during creation. Worktree-add succeeded; canary `ls-tree origin/main = ls-tree HEAD = 53` (no corruption). Branch guard verified at add-time and commit-time per `.claude/rules/zeta-expected-branch.md`. Empirical refinement: worktree-add CAN succeed during Lior contention if Lior is in a low-pack-contention phase.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

## Reviews

### COMMENTED — @copilot-pull-request-reviewer (2026-05-17T09:17:59Z)

## Pull request overview

Adds a small follow-up batch of substrate artifacts for B-0611 audit prep and autonomous-loop hygiene history: three new `memory/feedback_*.md` memos (catalog + drift signal + shell authoring lesson) plus two new tick shards documenting the 0808Z–0825Z session arc.

**Changes:**
- Adds a dangling memory-ref catalog memo with file:line pairs for multi-surface audit addressability.
- Adds a drift memo capturing a same-day change in dangling-ref counts and arguing for CI wiring as the durability mechanism.
- Adds two tick-history shards capturing a cold-boot snapshot and an arc summary for the autonomous-loop session.

### Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 6 comments.

<details>
<summary>Show a summary per file</summary>

| File | Description |
| ---- | ----------- |
| memory/feedback_otto_cli_shell_glob_in_quotes_silent_failure_authoring_lesson_from_pr_4048_reviewer_iteration_2026_05_17.md | New memo capturing a shell authoring pitfall and recommended reproducible command style |
| memory/feedback_otto_cli_dangling_refs_file_line_catalog_47_pairs_6_surfaces_2026_05_17.md | New memo cataloging dangling refs as file:line pairs across surfaces, plus FP taxonomy notes |
| memory/feedback_otto_cli_b0611_dangling_refs_count_drift_47_to_49_over_3_5_hours_audit_tool_in_ci_is_durability_mechanism_2026_05_17.md | New memo recording count drift and motivating CI integration |
| docs/hygiene-history/ticks/2026/05/17/0808Z.md | New tick shard for session cold-boot snapshot |
| docs/hygiene-history/ticks/2026/05/17/0825Z.md | New tick shard summarizing the 0808Z–0824Z arc and next safe-window prescription |
</details>


<details>
<summary>Comments suppressed due to low confidence (2)</summary>

**memory/feedback_otto_cli_b0611_dangling_refs_count_drift_47_to_49_over_3_5_hours_audit_tool_in_ci_is_durability_mechanism_2026_05_17.md:55**
* tools/hygiene/validate-memory-schema.ts expects `project` (and `feedback`) memory files to include the literal body markers `Why:` and `How to apply:`. This memo uses headings like “Why the drift matters” / “Implication…” but doesn’t contain those marker strings, so it will be reported as missing required markers. Add explicit `Why:` and `How to apply:` sections (can be brief) to satisfy the schema.
```
Comment thread
AceHack marked this conversation as resolved.
## Why the drift matters

The 0430Z catalog → 0817Z audit drift confirms a structural property
of the dangling-refs problem: **new in-repo references to user-scope
memory files accumulate naturally with each rule update, each new
memo, each PR description**. The pattern is generative, not
incidental.

A one-shot B-0611 cleanup that resolves 35 refs at point-in-time T
will, by the same generative process, accumulate new dangling refs
between T and T+N. Without a durability mechanism, the count drifts
right back up.

## Implication for B-0611 cleanup strategy

The B-0611 row's "Proposed mechanization" already includes an
audit-tool CI-integration acceptance bullet. This data point
strengthens the case: the audit tool from PR #4042 should ship as a
**non-required CI check** that:
```
**memory/feedback_otto_cli_dangling_refs_file_line_catalog_47_pairs_6_surfaces_2026_05_17.md:24**
* tools/hygiene/validate-memory-schema.ts expects `project` (and `feedback`) memory files to include the literal body markers `Why:` and `How to apply:`. This catalog memo is mostly data, but it currently has neither marker string, so it will be flagged as missing required markers. Add short `Why:` and `How to apply:` sections (e.g., explaining what the catalog is for and how to use it) to match the standard format.
```
> sites get hidden."*

## Methodology

Bash one-liner using `grep -rn` (line-preserving) instead of `grep -rh`
(line-stripping) + filter-by-filesystem-existence:

```
</details>

## Review threads

### Thread 1: memory/feedback_otto_cli_dangling_refs_file_line_catalog_47_pairs_6_surfaces_2026_05_17.md:328 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:57Z):

The `Composes-with` link to tick `0421Z` appears to be broken: there is no `docs/hygiene-history/ticks/2026/05/17/0421Z.md` in-tree, and the link target is missing the `.md` extension and has an extra closing `)`. Update it to a real shard path (e.g., `0418Z.md` if that’s what was intended) and fix the markdown link syntax.

### Thread 2: memory/feedback_otto_cli_shell_glob_in_quotes_silent_failure_authoring_lesson_from_pr_4048_reviewer_iteration_2026_05_17.md:60 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:58Z):

Per tools/hygiene/validate-memory-schema.ts, `feedback` memory files are expected to include the literal body markers `Why:` and `How to apply:` (the validator warns if they’re missing). This memo has sections like “Why this matters…” and “Operational discipline” but not the required marker strings, so it will trip that lint. Add explicit `Why:` and `How to apply:` sections (can be short) to match the standard format.

### Thread 3: docs/hygiene-history/ticks/2026/05/17/0808Z.md:5 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:58Z):

Tick shard schema/tooling expects the first non-empty line to be a 6-column pipe-row (docs/hygiene-history/ticks/README.md; tools/hygiene/check-tick-history-shard-schema.ts). Starting the file with YAML frontmatter (`---`) means the shard won’t validate/parse if/when that checker is run (B-0591 notes it’s not yet wired into CI). Prefer the documented hybrid format: pipe-row first line, then the rich H1/body; put any YAML metadata below the pipe-row (not at file head).

### Thread 4: docs/hygiene-history/ticks/2026/05/17/0825Z.md:5 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:58Z):

Tick shard schema/tooling expects the first non-empty line to be a 6-column pipe-row (docs/hygiene-history/ticks/README.md; tools/hygiene/check-tick-history-shard-schema.ts). Starting the file with YAML frontmatter (`---`) means the shard won’t validate/parse if/when that checker is run (B-0591 notes it’s not yet wired into CI). Prefer the documented hybrid format: pipe-row first line, then the rich H1/body; put any YAML metadata below the pipe-row (not at file head).

### Thread 5: memory/feedback_otto_cli_dangling_refs_file_line_catalog_47_pairs_6_surfaces_2026_05_17.md:4 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:58Z):

The memory format standard requires `type:` to match the filename prefix (memory/project_memory_format_standard.md; also checked by tools/hygiene/validate-memory-schema.ts). This file is named `feedback_...` but frontmatter says `type: project`, so it will be reported as a prefix/type mismatch. Fix by either changing `type:` to `feedback` or renaming the file to the `project_` prefix (and updating any in-repo references accordingly).

This issue also appears on line 18 of the same file.

### Thread 6: memory/feedback_otto_cli_b0611_dangling_refs_count_drift_47_to_49_over_3_5_hours_audit_tool_in_ci_is_durability_mechanism_2026_05_17.md:4 (unresolved)

**@copilot-pull-request-reviewer** (2026-05-17T09:17:59Z):

The memory format standard requires `type:` to match the filename prefix (memory/project_memory_format_standard.md; also checked by tools/hygiene/validate-memory-schema.ts). This file is named `feedback_...` but frontmatter says `type: project`, so it will be reported as a prefix/type mismatch. Fix by either changing `type:` to `feedback` or renaming the file to the `project_` prefix (and updating any in-repo references accordingly).

This issue also appears on line 37 of the same file.
Loading