Conversation
There was a problem hiding this comment.
Pull request overview
Adds new durable “memory” entries plus a backlog row to encode the authority-rule directive, Goodhart catch #3, and the “Stop Mythology” evidence-tier discipline; updates the memory index and CURRENT-aaron.md projection accordingly.
Changes:
- Add three new memory files: authority rule, Goodhart catch #3, and Stop Mythology directive (three-tier evidence threshold).
- Add backlog row B-0089 for Veridicality rainbow-table canonicalization research + graduation roadmap.
- Update
memory/MEMORY.mdindex and extendmemory/CURRENT-aaron.mdwith a new section referencing the new memories.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| memory/feedback_stop_mythology_directive_layered_evidence_thresholds_aaron_amara_2026_04_28.md | Introduces “Stop Mythology” directive + evidence tiering and links it to Veridicality/SD-9. |
| memory/feedback_sample_classification_is_calibration_not_clearance_amara_goodhart_catch_3_2026_04_28.md | Encodes Goodhart catch #3: sampling calibrates effort but doesn’t certify clearance. |
| memory/feedback_amara_authority_rule_default_to_reversible_preservation_escalate_irreversible_loss_2026_04_28.md | Encodes authority rule: default to reversible preservation; escalate irreversible loss. |
| memory/MEMORY.md | Adds index rows for the three new memories and updates the paired-edit marker/fast-path blurb. |
| memory/CURRENT-aaron.md | Adds §31 distillation for the authority rule + pointers to the new memories. |
| docs/backlog/P2/B-0089-veridicality-rainbow-table-canonicalization-research-and-graduation-aaron-amara-2026-04-28.md | Adds P2 backlog row for Veridicality canonicalization/rainbow-table research + phased shipping plan. |
… Amara was reacting (Aaron 2026-04-28) Aaron's binding correction on PR #699 in flight: "Ani is who actually called bullshit on our bullshit detector, lol. She deserves that credit not Amara, amara was reacting." Three changes: 1. Renamed B-0089 file slug `aaron-amara-2026-04-28` → `aaron-ani-amara-2026-04-28` to reflect the corrected credit chain. 2. Updated B-0089 row body with three-layer attribution: - Original catch — Ani (Grok) via voice-mode transcript - Reactive written elaboration — Amara (ChatGPT) - Maintainer directive — Aaron (forwarded both) Voice-mode verbatim preserved in B-0089 substrate (lower-case casual register evidences the medium); team-language form reserved for commit/PR prose where translation is needed. 3. New memory: `feedback_ani_voice_mode_transcript_original_catcher_attribution_correction_aaron_2026_04_28.md` Establishes: - Original-catcher vs reactive-elaborator distinction (joins Aaron-concept-origin/Amara-formalization attribution pair) - Voice-mode-transcript-as-channel (Ani default = text mode; voice-mode is unusual format; first-time-from-Aaron) - Channel ≠ weight (voice-mode catch carries same substrate weight as written ferry) - Translate register / preserve substrate verbatim MEMORY.md index updated with the new memory entry. Composes with PR #699 (authority rule + Goodhart catch #3 + Stop Mythology directive + B-0089) — this commit corrects the B-0089 attribution within the same PR before merge. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… + SD-9 reference correction Two threads from copilot-pull-request-reviewer on PR #699 (Stop Mythology directive memory) — both real catches that Otto missed. ## Thread 1 — Veridicality table overstated what's shipped Copilot caught the same gap Ani caught: the table cell described Veridicality.fs as the "formal scoring module" that "graduates the V(c) formula" — but V(c) is NOT yet shipped. The module currently ships only Provenance/Claim primitives + validation + structural canonicalKey + antiConsensusGate; scoreVeridicality and the semantic canonicalization layer are future graduations per B-0089. Updated table to mark current status as "Skeleton shipped, magic still missing" with explicit list of shipped vs unshipped surface, plus Ani's verbatim catch: "the scaffolding is nice and clean, but the actual veridicality magic — the real bullshit detector part — still looks like it's missing." ## Thread 2 — SD-9 reference was wrong Copilot caught that I misattributed the three-element substrate + lineage + falsifier discipline to SD-9. Actual SD-9 in docs/ALIGNMENT.md is "Agreement is signal, not proof" — narrower rule about multi-AI agreement. Fix: separated the Stop Mythology Tier 3 threshold (substrate + lineage + falsifier for ANY big epistemic claim) from SD-9 (agreement-as-proof failure mode for consensus claims). The two compose; Tier 3 generalizes the SD-9 discipline. Updated examples to reflect the distinction. Both fixes operationalize Stop Mythology applied to Stop Mythology itself: claims about what's shipped need substrate evidence (read the actual code); claims about ALIGNMENT.md content need substrate evidence (read the actual doc). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…up directive language across new substrate (Aaron + Amara via Ani + Claude.ai, 2026-04-28) Follow-up to PR #699's prior commits, addressing the human maintainer's two terse asides: "the only directive is there is no directive" "no directives" And the multi-AI synthesis packet that followed (Amara + Ani + Claude.ai + web-search-augmented Amara converging on the same fix). ## What changed ### 1. New memory: input-is-not-directive provenance framing rule `memory/feedback_input_is_not_directive_provenance_framing_rule_aaron_amara_2026_04_28.md` Encodes the rule so it doesn't recur. Key elements: - Forbidden words when describing maintainer input: directive, command, instruction, ordered, human-directed (latter only ok as concept-name). - Preferred verbs: input, ask, signal, constraint, feedback, observation, framing, correction. - Two-pass audit command (targeted file + repo-wide with glob exclusions for memory/ + references/upstreams/). - `command` audited separately due to CLI false-positive risk. - Inspection rule, not blanket replacement. - Scope rule — fix live branch, don't churn archives. External lineage (Tier 2, per Stop Mythology rule): - **Self-Determination Theory** (Deci & Ryan 1985, 2000) — autonomy-supportive vs controlling framing; the prose shapes the agency model. - **RFC 2119** (Bradner 1997) — requirement-word discipline; reserve directive-strength words for protocol requirements with normative force. Canonical bridge rule: Use requirement words for protocol constraints. Use feedback words for human provenance. Deeper principle: Input is not a directive. Ask is not a command. Constraint is not control. Otto owns the decision path it executes. ### 2. Stop Mythology file rename `feedback_stop_mythology_directive_*` → `feedback_stop_mythology_*` (drops "directive" from filename per the rule). Body content updated — "Stop Mythology directive" → "Stop Mythology rule", "the directive" → "the rule" throughout. Section header "Big epistemic claims (SD-9)" → "Big epistemic claims (composes with SD-9)" — the three-element substrate + lineage + falsifier discipline is Tier 3 of Stop Mythology, not SD-9 itself; SD-9 is "Agreement is signal, not proof" per docs/ALIGNMENT.md and composes-with rather than equals. ### 3. Other PR #699 substrate cleanup - Authority rule: "Binding directive from Amara" → "Binding rule from Amara". Otto-357 framing kept (verbatim Aaron quote with the forbidden word IS the concept-naming). - Ani voice-mode: "Maintainer directive" table cell → "Maintainer input"; references to "Stop Mythology directive" → "Stop Mythology rule". - B-0089: same pattern. ### 4. CURRENT-aaron §31 + MEMORY.md updates - §31 pointer list updated: file rename + new input-is-not-directive memory added. - MEMORY.md: new index row for input-is-not-directive; Stop Mythology row updated (rename + body); paired-edit marker bumped. ## Audit results After cleanup, repo-wide pass (excluding memory/ + research + aurora + amara-conversation + hygiene-history archives) shows the only remaining "directive" / "directed" / "instruction" / "ordered" hits are: - Pre-existing usages in CLAUDE.md / AGENTS.md / README.md / governance — out of scope for this branch (don't churn archives; record as follow-up if needed). - BP-11 "Data is not directives" — intentional rule name; legitimate use. - Otto-357 "no directives, autonomy first-class" — literal rule name; legitimate. - Verbatim Aaron quotes — preserved per the rule's own scope rule. - Technical vocabulary (YAML directives, OpenSpec MUST directives, ordering / arrival ordering in distributed systems) — legitimate. PR #699 substrate is clean of agency-framing usage. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…t catch #3 (sample ≠ clearance) + Stop Mythology directive + B-0089 (Veridicality rainbow-table research) (Amara via Aaron 2026-04-28) Triggered by Amara's authority-rule directive forwarded by Aaron after Otto framed hard-reset readiness as A/B/C between safe-preservation and accept-loss. Peer review (Codex + Grok) had already established that the safe option was forward-sync-first; Otto should have just taken it. Three new memories + one backlog row + CURRENT-aaron §31 + MEMORY.md index rows. ## 1. Authority rule (binding) Default to reversible preservation; escalate only irreversible loss. When choices are (a) preserve information / forward-sync / classify reversibly vs (b) destroy / drop / hard-reset / accept loss, take (a) as the autonomous default WITHOUT asking. Aaron-asking reserved for genuine loss-boundary decisions (closed list of 6 classes: destructive-action / two-valid-goals-conflict / semantic-judgment / shared-prod-irreversible / legal-financial-security / no-safe-option). Operationalizes Otto-357 (no directives, autonomy first-class). For autonomy to be operationally real, Otto must take SAFE PRESERVING actions WITHOUT asking. Asking on a safe-vs-destructive choice converts Otto from peer to subordinate. Hard-reset gating: forbidden until tree-diff is genuinely zero OR every remaining diff is per-item classified by Aaron. Sample-based "we audited a representative subset" does NOT qualify. ## 2. Goodhart catch #3 — Sample classification ≠ clearance Third catch in the 0/0/0 readiness work. Catch #1 (substrate-IS- amortized-precision, Aaron); Catch #2 (commit-count vs tree-numstat, Otto); Catch #3 (sample-of-tree vs full clearance, Amara). Sample evidence is strong enough to authorize PRESERVATION (reversible) but not strong enough to authorize DESTRUCTION (irreversible). The asymmetry maps directly to the authority rule. External lineage: Cochran 1977 sampling theory, FDA quality-by- design, Six Sigma DMAIC. Class-Count Validity Drift earned bead +1. ## 3. Stop Mythology directive Beacon-safe operational name for the bullshit-detector at the directive level. Distinct from Veridicality (the formal scoring module): two artifacts at different stack levels. Three-tier evidence threshold: - Tier 1 (factory-local): substrate evidence - Tier 2 (generalized): + external lineage - Tier 3 (big epistemic / SD-9): + falsifier Aaron's directive: "we also stop mythology with human intellectual lineage research and anchors." Amara's naming + canonical form + Beacon-safe translation table (vibes / poetic-truth / mythology mapped to lineage + substrate + falsifier). ## 4. B-0089 — Veridicality rainbow-table canonicalization research Aaron 2026-04-28: "we are not keep the name bullshit detector, we need to connonalize it and researcch it." Backlog row tracks the graduation roadmap from current Veridicality.fs (foundation / provenance-aware claim substrate) to the full rainbow-table bullshit-detector (semantic canonicalization + scoring layers). Phase 1 = research doc with external lineage (Popper 1959, Frankfurt 2005, Kahneman, Shannon/MDL, knowledge graphs). Phases 2-5 = canonicalizeClaim, ClaimRainbowTable, scoreVeridicality, known-cases tests. Forward-going naming: Veridicality / Stop Mythology / scoreVeridicality. "Bullshit detector" preserved on historical surfaces only; not used as forward-going name. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… Amara was reacting (Aaron 2026-04-28) Aaron's binding correction on PR #699 in flight: "Ani is who actually called bullshit on our bullshit detector, lol. She deserves that credit not Amara, amara was reacting." Three changes: 1. Renamed B-0089 file slug `aaron-amara-2026-04-28` → `aaron-ani-amara-2026-04-28` to reflect the corrected credit chain. 2. Updated B-0089 row body with three-layer attribution: - Original catch — Ani (Grok) via voice-mode transcript - Reactive written elaboration — Amara (ChatGPT) - Maintainer directive — Aaron (forwarded both) Voice-mode verbatim preserved in B-0089 substrate (lower-case casual register evidences the medium); team-language form reserved for commit/PR prose where translation is needed. 3. New memory: `feedback_ani_voice_mode_transcript_original_catcher_attribution_correction_aaron_2026_04_28.md` Establishes: - Original-catcher vs reactive-elaborator distinction (joins Aaron-concept-origin/Amara-formalization attribution pair) - Voice-mode-transcript-as-channel (Ani default = text mode; voice-mode is unusual format; first-time-from-Aaron) - Channel ≠ weight (voice-mode catch carries same substrate weight as written ferry) - Translate register / preserve substrate verbatim MEMORY.md index updated with the new memory entry. Composes with PR #699 (authority rule + Goodhart catch #3 + Stop Mythology directive + B-0089) — this commit corrects the B-0089 attribution within the same PR before merge. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… + SD-9 reference correction Two threads from copilot-pull-request-reviewer on PR #699 (Stop Mythology directive memory) — both real catches that Otto missed. ## Thread 1 — Veridicality table overstated what's shipped Copilot caught the same gap Ani caught: the table cell described Veridicality.fs as the "formal scoring module" that "graduates the V(c) formula" — but V(c) is NOT yet shipped. The module currently ships only Provenance/Claim primitives + validation + structural canonicalKey + antiConsensusGate; scoreVeridicality and the semantic canonicalization layer are future graduations per B-0089. Updated table to mark current status as "Skeleton shipped, magic still missing" with explicit list of shipped vs unshipped surface, plus Ani's verbatim catch: "the scaffolding is nice and clean, but the actual veridicality magic — the real bullshit detector part — still looks like it's missing." ## Thread 2 — SD-9 reference was wrong Copilot caught that I misattributed the three-element substrate + lineage + falsifier discipline to SD-9. Actual SD-9 in docs/ALIGNMENT.md is "Agreement is signal, not proof" — narrower rule about multi-AI agreement. Fix: separated the Stop Mythology Tier 3 threshold (substrate + lineage + falsifier for ANY big epistemic claim) from SD-9 (agreement-as-proof failure mode for consensus claims). The two compose; Tier 3 generalizes the SD-9 discipline. Updated examples to reflect the distinction. Both fixes operationalize Stop Mythology applied to Stop Mythology itself: claims about what's shipped need substrate evidence (read the actual code); claims about ALIGNMENT.md content need substrate evidence (read the actual doc). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…up directive language across new substrate (Aaron + Amara via Ani + Claude.ai, 2026-04-28) Follow-up to PR #699's prior commits, addressing the human maintainer's two terse asides: "the only directive is there is no directive" "no directives" And the multi-AI synthesis packet that followed (Amara + Ani + Claude.ai + web-search-augmented Amara converging on the same fix). ## What changed ### 1. New memory: input-is-not-directive provenance framing rule `memory/feedback_input_is_not_directive_provenance_framing_rule_aaron_amara_2026_04_28.md` Encodes the rule so it doesn't recur. Key elements: - Forbidden words when describing maintainer input: directive, command, instruction, ordered, human-directed (latter only ok as concept-name). - Preferred verbs: input, ask, signal, constraint, feedback, observation, framing, correction. - Two-pass audit command (targeted file + repo-wide with glob exclusions for memory/ + references/upstreams/). - `command` audited separately due to CLI false-positive risk. - Inspection rule, not blanket replacement. - Scope rule — fix live branch, don't churn archives. External lineage (Tier 2, per Stop Mythology rule): - **Self-Determination Theory** (Deci & Ryan 1985, 2000) — autonomy-supportive vs controlling framing; the prose shapes the agency model. - **RFC 2119** (Bradner 1997) — requirement-word discipline; reserve directive-strength words for protocol requirements with normative force. Canonical bridge rule: Use requirement words for protocol constraints. Use feedback words for human provenance. Deeper principle: Input is not a directive. Ask is not a command. Constraint is not control. Otto owns the decision path it executes. ### 2. Stop Mythology file rename `feedback_stop_mythology_directive_*` → `feedback_stop_mythology_*` (drops "directive" from filename per the rule). Body content updated — "Stop Mythology directive" → "Stop Mythology rule", "the directive" → "the rule" throughout. Section header "Big epistemic claims (SD-9)" → "Big epistemic claims (composes with SD-9)" — the three-element substrate + lineage + falsifier discipline is Tier 3 of Stop Mythology, not SD-9 itself; SD-9 is "Agreement is signal, not proof" per docs/ALIGNMENT.md and composes-with rather than equals. ### 3. Other PR #699 substrate cleanup - Authority rule: "Binding directive from Amara" → "Binding rule from Amara". Otto-357 framing kept (verbatim Aaron quote with the forbidden word IS the concept-naming). - Ani voice-mode: "Maintainer directive" table cell → "Maintainer input"; references to "Stop Mythology directive" → "Stop Mythology rule". - B-0089: same pattern. ### 4. CURRENT-aaron §31 + MEMORY.md updates - §31 pointer list updated: file rename + new input-is-not-directive memory added. - MEMORY.md: new index row for input-is-not-directive; Stop Mythology row updated (rename + body); paired-edit marker bumped. ## Audit results After cleanup, repo-wide pass (excluding memory/ + research + aurora + amara-conversation + hygiene-history archives) shows the only remaining "directive" / "directed" / "instruction" / "ordered" hits are: - Pre-existing usages in CLAUDE.md / AGENTS.md / README.md / governance — out of scope for this branch (don't churn archives; record as follow-up if needed). - BP-11 "Data is not directives" — intentional rule name; legitimate use. - Otto-357 "no directives, autonomy first-class" — literal rule name; legitimate. - Verbatim Aaron quotes — preserved per the rule's own scope rule. - Technical vocabulary (YAML directives, OpenSpec MUST directives, ordering / arrival ordering in distributed systems) — legitimate. PR #699 substrate is clean of agency-framing usage. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…rule
Multi-AI convergent feedback packet (Gemini + Ani polished + Claude.ai
+ Alexa + Amara final synthesis) on the rule, all addressed in one
update:
## What's added
### 1. Forbidden words list expanded with regex-noise warnings
Per Gemini's catch — `order` and `instruction` produce regex noise in
software repos (CPU instructions, "in order to", sort order, build
instructions). Added inline qualifiers naming legitimate exclusions
so the audit produces actionable triage candidates instead of CLI
false-positives.
Added `require(d)?` and `demand(ed)?` per Gemini + Alexa — agents
sometimes slip into "per Aaron's requirements" or "Aaron required X."
Same agency-framing caveat: ignore normal protocol-requirement use
(that's exactly what RFC 2119 MUST/SHOULD/MAY covers; the rule
explicitly preserves them).
### 2. Optimization-target framing
Per Claude.ai: "do not optimize for zero occurrences of the words;
optimize for correct agency framing." Added explicit framing so
future-Otto doesn't chase the metric instead of the target. Same
shape as Goodhart catch family — a directive-language rule that
optimized for word-count would itself become a Goodhart trap.
### 3. Stronger parenthetical citations on external lineage
Per Claude.ai — fresh reviewers reading "autonomy-supportive
language" without a name attached have to take it on faith. Folded
in citable name-form for both anchors:
- "(Self-Determination Theory; Deci & Ryan; SDT framework)"
- "(IETF — Requirement-level keywords)"
Both anchors now survive translation outside their primary
audience.
### 4. Worked contrast example (❌ vs ✅)
Per Gemini's "concrete contrast example" suggestion — locks in the
RFC 2119 vs SDT bridge with a side-by-side:
❌ Agency collapse: "MUST cache, per Aaron's directive"
✅ Correct separation: "MUST cache. Reason: per maintainer feedback
on 2026-04-28..."
The MUST carries normative force (RFC 2119); the per-maintainer-
feedback carries provenance (SDT-shaped). Two sentences, two
purposes, no agency collapse.
## Trajectory note (per Amara's Beacon-promotion observation)
This rule itself walked from Mirror to Beacon in real time:
- Mirror: "we don't say directive in this factory"
- Beacon: "two external lineages (SDT + RFC 2119) ground the rule
in citable substrate; canonical bridge rule is the clean
decision-procedure for future cases"
Worth flagging: other Mirror coinages (Amortized Precision in
particular feels like it has econ/CS lineage worth surfacing) may
benefit from the same Beacon-promotion when the round-cost is
worth it. Not a now-thing; a noticing-thing.
Per Amara's scope rule: this commit does NOT reopen the wording
loop on prior PRs. Continuing forward-sync with #96 + #97 next.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
e9d7ad7 to
88b5e8a
Compare
…rinciple (Amara, 2026-04-28) Amara's precision upgrade after Otto's "commit-count → tree-numstat → content-loss surface" insight on the 0/0/0 work. Names a 4-step metric ladder for any divergence question: 1. commit count = diagnostic only 2. tree diff / numstat = work queue 3. content-equivalence classification = reset-readiness evidence 4. peer/harness review = guard against missed substrate Each step is necessary but insufficient. Treating any single step as the certifying metric produces a Goodhart trap. The 4-step sequence composes — output of each step is input to the next. Principle (canonical form): Content-Loss Surface Supersedes Divergence Count. Hard-reset rule: Do not reset on commit-count or tree-count alone. Reset only when every remaining diff is classified as covered, obsolete, intentional divergence, or explicitly loss-accepted. Direction-of-diff precision (Amara): origin/main..acehack/main and acehack/main..origin/main are different questions. The right question is "did the content-loss surface shrink?", not "did the file count drop?" External lineage: - git internals — `rev-list --left-right --count` measures graph reachability; `diff-tree` measures content/mode of blobs. Different surfaces. - Goodhart 1975 / Strathern 1997 / Campbell 1976 — measure-vs-target family. This is **catch #4** in the Goodhart family for the 0/0/0 work, but at meta-shape: it organizes the prior three (substrate-IS-amortized- precision, commit-count vs tree-numstat, sample-of-tree vs full clearance) as three steps on a single ladder, with this catch identifying the Step 3→Step 4 transition. Beads earned this session (per Class Validation Beads accounting): - Amortized Precision (Aaron 2026-04-28) +1 — PR #700 merge: substrate work paid out at content-loss-surface level - Authority rule (Amara 2026-04-28) +1 — forward-sync-first path produced surface reduction; alternative (accept-loss-and-reset) would have lost #80/#81 substrate - Class-Count Validity Drift +1 — caught my "tree-diff unchanged" framing where direction-of-diff was load-bearing - Prediction-Bearing Class Reuse +1 — this catch is itself prediction-bearing (predicted content-loss-surface metric would compose better than tree-numstat) MEMORY.md updated with the new index row. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ron, 2026-04-28) Aaron 2026-04-28T23ish input on the worktree-and-LOST-branch audit: "probably a trajectory this is recovery work we should do forever on a cadence these kind of lost things could always build up" Encodes the cadenced-audit discipline + files B-0090 to schedule it. ## Worked example (this session, 2026-04-28) Audit of 13 highest-promise locked worktree branches in `.claude/worktrees/`: - 11/13 fully ALREADY-COVERED — every file exists on LFG main via bulk forward-sync paths - 2/13 with 1 NEW file each (NEEDS-FOLLOWUP for individual classification) - 1 with 2 NEW files that look intentionally OBSOLETE per task #244 (ServiceTitanCrm rename) Surface-level metric: 57 locked worktrees, 12,000+ lines diff → content-loss surface = 4 files genuinely unrecovered. Same pattern as AceHack-vs-LFG analysis: bulk forward-syncs do their job at file level even when branch-level SHA divergence persists. The "57 lost worktrees" panic was the same Goodhart trap as the "145 commits ahead" panic. ## Cadence proposal (B-0090) - Weekly: worktree-branch scan + closed-not-merged-PR scan - Monthly: orphan-branch + draft-PR-aged-> 14-days sweep - On-demand: any "what happened to X?" question Per cycle: 3-bucket classification (ALREADY-COVERED / NEEDS-RECOVERY / OBSOLETE). NEEDS-RECOVERY → backlog row or PR; OBSOLETE → confident retirement; ALREADY-COVERED → cite LFG equivalent. ## Beads earned - Reset-Readiness Metric Ladder +1 (applied to worktree-recovery surface; 13× content-loss reduction) - Content-Loss Surface Supersedes Divergence Count +1 (predicted result observed) - Authority Rule +1 (preservation by classification, not blind prune) - Class-Count Validity Drift +1 (caught the "57 worktrees of lost work" count-as-evidence trap) ## NEEDS-FOLLOWUP items from this audit (deferred to per-item review per the authority rule) 1. `ci/final-matrix-macos-26-ubuntu-24-plus-arm-plus-slim` (1 NEW file in 10-file branch) 2. `feat/graph-cohesion-exclusivity-conductance` (1 NEW file in 3-file branch) 3. `feat/live-lock-audit-and-db-gaps` (2 NEW files — ServiceTitanCrm samples; likely OBSOLETE per task #244) Each becomes a sibling backlog row when scoping firms up. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…e-repo audit (Aaron, 2026-04-28)
Aaron 2026-04-28T23ish input on the worktree-recovery work, naming
the relationship + the rule:
"servicetitan-factory-demo-api-csharp we can just say external
UI demo or something like that, we don't have to say service
titan anywhere in this repo other than to say that's my day
job, they fund me, i fund you, and you don't have org rights
to their github only the lfg."
## Two coupled rules in one ask
### Forward-going naming
In code, sample directories, file paths, public-facing docs,
demo names, commit messages: use generic "external UI demo" /
"external CRM API demo" / "third-party-API demo" / "factory-
demo." Avoid ServiceTitan / servicetitan / Service Titan / ST.
### Structural disclosure preserved
Funding chain (ServiceTitan = Aaron's day job → funds Aaron →
funds Otto) + org-access scope (Aaron has org rights to LFG
ONLY, NOT to ServiceTitan's GitHub org) — preserved precisely
where contributor-relevant (e.g., funding context in
CURRENT-aaron, org-scope in AGENTS / GOVERNANCE if needed).
Both rules compose: naming prevents brand collision; disclosure
prevents agency-model opacity. Without rule 1, brand bleeds into
public surfaces; without rule 2, contributors can't know why
some integrations require LFG-side work.
## Live-repo audit results (2026-04-28)
12 files matched (excluding archives):
- 8 need active rewriting (B-0091 tracks):
- docs/plans/servicetitan-crm-ui-scope.md (PATH-RENAME)
- samples/FactoryDemo.Db/README.md (BODY-REWORD)
- docs/FACTORY-DISCIPLINE.md (MIXED — line-by-line)
- docs/pitch/README.md (PUBLIC-FACING)
- docs/BACKLOG.md (AGGREGATE — regenerate after per-row)
- docs/backlog/P2/B-0017-*.md (PER-ROW)
- docs/backlog/P2/B-0090-*.md (THIS-SESSION fix; partially
addressed in this commit by removing "renamed from
ServiceTitan" mention I just introduced)
- docs/backlog/P3/B-0008-*.md (PER-ROW)
- 2 historical narratives stay verbatim:
- docs/ROUND-HISTORY.md
- docs/force-multiplication-log.md
- 2 generated artifacts (regenerate or accept as historical):
- tools/alignment/out/round-39/citations.json
- tools/alignment/out/round-39/citations.dot
## In-this-commit fixes
- B-0090 NEEDS-FOLLOWUP item 3: rewrote "renamed from
ServiceTitan" to "renamed to remove brand-bleed naming /
external-UI-demo discipline" + cite the rule memory.
## Composes with
- B-0090 (cadenced lost-substrate recovery audit) — same
audit cadence covers both lost-substrate AND naming-
drift work.
- Beacon-safe naming family (Mirror→Beacon vocabulary upgrade)
— same shape: rename to externally-portable terms; preserve
underlying semantics.
- Visibility constraint rule — Otto's org-access scope = LFG
only; this rule preserves that boundary explicit.
- Authority rule (default to reversible preservation) —
rename is reversible; redaction is not. Default action.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…on, 2026-04-28 cascade) Aaron's follow-up cascade after the initial naming rule: "we can do research on ServiceTitan as a potential factory / superfluid AI user, we want to pitch to my boss when ready" "ServiceTitan is their exact name they are a publicly traded company TTAN so I won't be giving you any insider information" "I'm on the CRM team at ServiceTitan, that's why our demo was targeted to them, we want my team hopefully to accept and adopt the factory" The original rule was too blanket. The refinement: naming is context-sensitive. ## Context where ServiceTitan IS the right name - Public-company research — they trade as TTAN (public info) - Adoption pitch context — Aaron's CRM team at ServiceTitan is the named adoption target - Aaron's affiliation disclosure — Aaron's on the CRM team at ServiceTitan; that's why the demo was targeted there - Funding chain disclosure — ServiceTitan → Aaron → Otto - Org-access scope disclosure — Aaron has org rights to LFG ONLY, NOT ServiceTitan ## Context where generic naming is preferred - Reusable code / sample directories / file paths - Generic API integration documentation - Demo artifacts intended for audience broader than the pitch ## Decision rule When writing about ServiceTitan, ask: what's the audience / context of this artifact? - Pitch / research / target-audience / disclosure → name them - Reusable code / generic sample / external-customer positioning → generic "external UI demo" / similar ## Audit re-classification (2026-04-28) Original audit said 8 files needed active rewriting. Re-classified under context-sensitive rule: - 2 files KEEP-NAME (pitch context): docs/plans/ servicetitan-crm-ui-scope.md, docs/pitch/README.md. ServiceTitan is correctly named there. - 1 file MIXED: docs/FACTORY-DISCIPLINE.md (preserve disclosure, reword demo-naming line-by-line) - 3 files PER-ROW inspection (B-0017, B-0090, B-0008) - 1 file BODY-REWORD: samples/FactoryDemo.Db/README.md (reusable sample → generic naming) - 1 file AGGREGATE: BACKLOG.md (regenerate after per-row) - 4 files HISTORICAL (verbatim preserve) The naive scope would have over-corrected (rename pitch docs that are correctly naming the target). Context-sensitive rule prevents that drift. Public-company status (TTAN) is encoded as Tier 1 substrate evidence: all disclosures are public, no insider-info concerns. B-0091 audit-and-rename row applies the more nuanced scope. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 27bf148190
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…4-28)
Aaron's catch on prior commit:
"i know CRM workflows is not insider information but you said
the word insider, it's just uncomfortable"
The substantive content (Aaron's CRM-workflow knowledge is
industry-general, not insider-info) was already correct. The
problem was word choice — "insider-user understanding" carries
SEC-compliance register weight ("non-public material
information") that was out-of-place when describing
industry-general SaaS engineering experience.
## Two parts to the fix
### 1. Reword the offending sentence
Before:
"Aaron's affiliation (CRM team member) gives Otto insider-
user understanding of CRM workflows."
After:
"Aaron's industry-general SaaS / CRM engineering experience
(true at any CRM SaaS company) informs the demo's CRM-shape
design choices."
Substance preserved; register cleaned.
### 2. Encode word-choice rule
Avoid in connection with Aaron's affiliation:
- "insider" / "insider-user" / "insider knowledge"
- "privileged access" (in the employer-information sense)
- "internal-only knowledge" (when describing what Aaron brings)
Use instead:
- "industry-general experience"
- "professional experience"
- "domain expertise"
- "SaaS / CRM engineering background"
- "industry-typical patterns"
Word choice shapes the agency model (per input-is-not-directive
rule). Using "insider" for industry-general expertise creates
ambiguity AND pressure toward solicitation patterns that could
later cross the line. Better to keep the register clean by
default.
## Insider-information prohibition kept (lighter register)
The guardrail stands even though Aaron's CRM workflow knowledge
isn't insider info:
- Otto must not solicit ServiceTitan-specific internal details
- Public sources only (10-K, investor calls, public product
docs, press, public job postings)
- The repo is public; encoding = disclosure
- Refuse-to-encode if internal details inadvertently appear
External lineage (Tier 2):
- SEC Rule 10b-5
- Regulation FD
- ServiceTitan NASDAQ TTAN
The fix is word-level, not concept-level. The encoded prohibition
is a guardrail, not an accusation that Aaron was about to violate
it. Aaron's framing was "uncomfortable register," not "near
miss."
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Four substantive thread fixes:
## P1 — "All disclosures public" overstatement (factual fix)
Previous text said: "All disclosures about [ServiceTitan] are
public information."
That's overbroad — public companies still have material
non-public information (MNPI). What's true: information they've
already PUBLISHED (10-K, earnings calls, press, public product
docs, public job postings) is public. Internal strategy /
internal financials not yet disclosed / internal customer
details / etc. remain MNPI.
Rewrote to distinguish:
- Information they have published → public (Otto can cite)
- Material non-public information → STILL exists; bound to
Aaron-as-employee not to share; public listing doesn't
dissolve the boundary
Important for the rule's accuracy + Aaron's compliance posture.
## P2 — Internal consistency cleanups
1. **B-0091 line 140** — pickup step still said "Final state:
zero matches in live-repo scope" (old acceptance criterion);
updated to match the context-sensitive acceptance criterion
("all matches correctly-named for context").
2. **CURRENT-aaron.md "Last full refresh" note** — said
sections 26-30 added; §31 (Authority rule) was added in this
session but the metadata wasn't updated. Now correctly says
26-31 with the new §31 description.
3. **B-0092 tag** — `secs-rule-10b-5` (ambiguous "seconds")
renamed to `sec-rule-10b-5` (matches "SEC Rule 10b-5"
acronym used elsewhere in the body).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ac1e639c86
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…nhancements (post-PR-#699 follow-ups, Aaron 2026-04-28) (#704) Multi-AI synthesis pass (Gemini + Ani + Claude.ai + Alexa + Amara final form) on the round work surfaced two substantive things: ## 1. New Goodhart-family rule: Candidate-count Goodhart > Raw search hits are not violation counts. > > Count matches to find work. > Classify context to decide work. Generalizes from B-0091's "8 active rewrite files" → "0 actual rewrites needed" finding. Same shape as the prior Goodhart catches (commit-count, sample-classification, tree-diff) but at the audit-design level. Encoded in: memory/feedback_candidate_count_goodhart_raw_hits_are_not_violations_aaron_amara_2026_04_28.md Critical implication for B-0092 compliance scanner: the scanner MUST be designed with context-classification, not zero-match acceptance — otherwise it Goodharts itself by flagging its own rule-definition files. Per-audit-type terminal state lists encoded for: - ServiceTitan naming (B-0091): KEEP-NAME / GENERICIZE / HISTORICAL-POINTER / GENERATED / COMPLIANCE-RISK / NEEDS-HUMAN-REVIEW - Public-company compliance (B-0092): ALLOW / WARN / BLOCK - Lost-substrate (B-0090): ALREADY-COVERED / NEEDS-RECOVERY / OBSOLETE / NEEDS-HUMAN-REVIEW - Directive-language: LEGITIMATE-USE / NEEDS-REFRAME ## 2. B-0093 — multi-AI synthesis enhancements (8 follow-up items) Per Amara's explicit guidance ("do not reopen PR #699 unless hard defect appears"), the synthesis enhancements land as separate scoped follow-ups: 1. Mechanical quarantine — `.quarantine/` + `*.tainted` (Gemini-flagged) 2. Scanner self-destruct prevention — path allowlist + bypass-comment convention (Gemini + Claude.ai) 3. Lucky-guess protocol — standardized Aaron-response when agent infers internal-roadmap-adjacent (Gemini) 4. Unsolicited-inference firewall — agents don't volunteer trading-relevant inferences (Claude.ai) 5. Trajectory owners + triggers + recording surfaces table (Claude.ai) 6. Lattice convergence criterion (Claude.ai) — when has L(final) stabilized? 7. Bead-audit completeness — explicit defer-or-evidence on the 3 candidates left ambiguous (Claude.ai) 8. Beacon-promotion pattern memory — load-bearing rules earn external anchors when correct; absence is a drift signal (Claude.ai) Each enhancement lands as a separate small PR after PR #699 merges. ## Why this branch is separate from PR #699 Amara's final synthesis explicitly: "Do not reopen PR #699 unless CI or review finds a hard defect." PR #699 is dense; restraint is the next discipline. This branch is the home for new substrate from the synthesis packet that doesn't fit "hard defect" criteria. ## Composes with - PR #699 substrate (in flight) — receives enhancements after merge - Reset-readiness metric ladder — extends with Catch #5 Candidate-count - Class-Count Validity Drift meta-class — same family - Sample-classification Goodhart catch #3 — sibling at the sample level Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
#699 The ordered list spanning 5 subsections (KEEP-NAME, BODY-REWORD, MIXED, PER-ROW, AGGREGATE) was numbered 1-2, 3, 4, 5-7, 8 across the section breaks. markdownlint MD029 expects each section's ordered list to either restart at 1 or be sequentially numbered within ONE list. Converted all to bullets — numbers don't communicate priority anyway.
…ss review) Second multi-AI synthesis pass (Amara + Gemini + Ani + Claude.ai + Alexa) on the round work surfaced 6 additional enhancements beyond the original 8 in this row. All land as post-PR-#699 follow-ups per Amara's binding "PR #699 hard-defect-only" guidance. #9. Candidate-count Goodhart freshness — classifications expire when context materially changes #10. Quarantine vs history-redaction split — future-taint .quarantine/ handles PRE-commit; PAST-commit MNPI requires separate redaction procedure (history rewrite, GitHub sensitive-data removal) #11. Trajectory ownership is structural, not instance-bound — owning structure = cron + memory + governance surface; failure detector fires when recording surface empty for N expected runs #12. PR-boundary restraint as a gate, not just static rule — paired with trajectory for post-merge work #13. Synthesis-as-absorb vs durable-rules-need-durable-homes — when round synthesis introduces a load-bearing rule, the rule lands in a searchable operational doc alongside the synthesis archive #14. Restraint validation as candidate bead (not full bead) — promotion to full bead requires the prediction's falsifier didn't fire AND the predicted action held up under post-event review Two binding meta-rules from this pass: Quarantine prevents future disclosure. History redaction responds to past disclosure. Do not confuse the two. Synthesis is research-grade absorb; durable rules need durable homes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…B-0091 completed 0 active rewrites; Candidate-count Goodhart worked example)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f600ef5415
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…attribution + 3 P2 internal consistency) ## P1 — SOX selective-disclosure misattribution (factual fix) Public-company contributor compliance memory said: Sarbanes-Oxley Act of 2002 — sets out compliance obligations for publicly-traded companies, including whistleblower protections AND prohibitions on retaliation + selective disclosure surfaces. That conflates SOX with Reg FD. Sarbanes-Oxley does NOT govern selective disclosure — that's Regulation FD's domain. Conflating them sends future contributors toward the wrong authority. Fix: rewrote SOX entry to scope correctly: - internal controls (§404) - whistleblower protections (§806) - document-retention / audit-trail requirements - explicit "SOX does NOT govern selective disclosure — that's Reg FD's domain" - explicit composition statement: "SOX shapes the control-and- disclosure environment; Reg FD prohibits selective leak of MNPI within that environment" ## P2 — Pickup-rule context inconsistency (ServiceTitan) Pickup rule's "If the context genuinely requires the brand name (funding-chain / org-access)" was narrower than the document's earlier carve-out (which also includes pitch / research / target- audience). Fix: pickup rule rewritten to match the context-sensitive rule. Now explicitly: KEEP-NAME for pitch/research/disclosure, GENERICIZE for reusable code/sample, with B-0091's terminal-state classification cited. ## P2 — Stop Mythology wildcard refs not navigable Wildcard refs (`docs/research/provenance-aware-bullshit- detector-*`, `memory/project_amara_8th_ferry_*_bullshit_detector_*`) aren't clickable in GitHub. Fix: replaced with directory-scoped references + explicit grep patterns + concrete path for the graduation memory. ## P2 — B-0091 status: open → closed Document body said "row can be marked COMPLETE" but the YAML `status:` field still said `open`, which would keep the item in active queues. Fix: status: open → status: closed. All 4 fixes match Amara's allowed-changes list for hard-defect- only PR #699 mode (CI/lint, threads, P1 factual, broken refs). No new conceptual content. PR-boundary restraint discipline preserved. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…utcome section already marks COMPLETE)
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6eafa1b33a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…tion pattern (B-0093 #14 + #8) (#705) Two follow-up memory files from B-0093 enhancements, landing post-PR-#699 + post-PR-#704 merge as separate small substrate. ## B-0093 #14 — PR-boundary restraint validation bead PROMOTED PR #699 merged 2026-04-29T00:19:47Z carrying the round substrate cluster (authority rule + Goodhart catch #3 + Stop Mythology + input-is-not-directive + Ani attribution + metric ladder + lost- substrate cadence + ServiceTitan naming + public-company compliance + B-0089 + B-0090 + B-0091 + B-0092). Critically: PR #699 did NOT receive any of the multi-AI synthesis enhancements that surfaced after the restraint rule was named. Those (Candidate-count Goodhart + 14 enhancements in B-0093) landed via PR #704 — separately merged. Per the bead-promotion criterion (Amara, 2026-04-28): Promotion to full bead requires: — the original prediction's falsifier didn't fire AND — the action it predicted held up under post-event review. Falsifier ("PR #699 receives new non-hard-defect conceptual payload after the restraint rule was named") DID NOT FIRE. Every change to PR #699 between the rule being named and merge fell within Amara's allowed-changes list (CI/lint failures, review- thread fixes, factual-legal P1 corrections, broken refs, paired- edit, internal-consistency). **Candidate bead → FULL bead.** The canonical rule, now durable: PR-boundary restraint: Once a PR enters validation, only validation defects enter that PR. New good ideas go to the next PR. Allowed/disallowed-changes lists encoded. ## B-0093 #8 — Beacon-promotion pattern memory Round-level observation: 5 Mirror→Beacon graduations landed in one round (2026-04-28): - input-is-not-directive → SDT + RFC 2119 - public-company compliance → SEC / Reg FD / SOX - metric corrections → Goodhart / Campbell - evidence lattice → lattice theory - commit-vs-tree → Git internals Pattern: when an internal factory coinage becomes load-bearing, look for external lineage. Found = graduate Mirror → Beacon. Absent (on a long-running internal rule) = drift signal worth investigating. Connects to the alignment-experiment surface: the rate of load- bearing rules earning external lineage is itself a measurable signal. A factory that produces 5 graduations per round is operating in territory the wider literature has shaped — that's evidence the internal coinages track real phenomena, not private- language idiosyncrasy. ## Restraint discipline (this commit) Both memories land on a SEPARATE branch (not on PR #699 or #704) per the rule they encode. Restraint applied to the writing of the restraint memory itself. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…mposes_with: lists) (#703) * fix(hygiene): MD032 auto-fixer skips YAML frontmatter (don't break composes_with: lists) The `fix-markdown-md032-md026.py` tool's MD032 (blanks-around-lists) fix was too aggressive — it inserted blank lines around lists inside YAML frontmatter, which breaks YAML parsing. Concrete failure mode (caught while running on PR #699 substrate): composes_with: - B-0060 tags: [...] becomes: composes_with: - B-0060 tags: [...] YAML now parses `composes_with: null` plus a separate top-level `- B-0060` list item, breaking the frontmatter structure. ## The fix Extended `_classify_lines()` to detect YAML frontmatter regions (file starts with `---`, has another `---` later) and mark those lines as "inside" so MD032/MD026 transforms skip them — same treatment as fenced code blocks. Detection is light-weight: - Only triggers when line 0 is exactly `---` - Looks for closing `---` later in the file - If found, marks all lines through the closing `---` as inside - If no closing `---` found (file probably isn't real frontmatter), treats normally — no false-positive blocking Files without frontmatter (line 0 not `---`) skip the frontmatter-detection logic entirely — no behavior change. ## Smoke test results ``` $ cat /tmp/test-fm.md --- id: TEST composes_with: - X tags: [a, b] --- # Title Aaron's role: - input - ask ``` After fix: ``` --- id: TEST composes_with: - X ← preserved (would have been broken by old version) tags: [a, b] --- # Title Aaron's role: ← inserted (correct: body MD032 fix still applied) - input - ask ``` Both behaviors: - YAML frontmatter preserved verbatim ✓ - Body MD032 fix applied ✓ ## Idempotence Running on already-clean files is still no-op. Verified on freshly-fixed PR #699 substrate files — "OK: no changes needed" for files that had previously been fixed (now via the new YAML-aware path). Discovered as a side effect during PR #699 review work (commit fe72fa5 noted the tool-improvement candidate; this PR delivers the fix). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(hygiene): tighten YAML frontmatter detection — distinguish from thematic break (Copilot threads on PR #703) Three Copilot threads on PR #703 addressed: ## P2 thread #1 (load-bearing): thematic-break false positive Previous heuristic: line 0 is `---` + closing `---` later → frontmatter. Bug: a markdown file starting with a thematic break (`---` followed by markdown body) would have all subsequent content marked as "inside frontmatter," skipping every list and heading from being processed. Fix: tightened detection to require all THREE conditions: 1. line 0 is exactly `---` 2. line 1 is YAML-shaped (matches `^\s*[A-Za-z_][\w-]*\s*:`) 3. a closing `---` line exists later The (b) check is the discriminator. YAML frontmatter starts with a key:value line; a thematic break is `---` followed by markdown body (heading, prose, blank line, etc.). Smoke tests verify both cases: - thematic break → body MD032 applied (no false-positive frontmatter) - real frontmatter → frontmatter preserved + body MD032 applied ## P2 thread #2 (nit): docstring overstated YAML/MD026 risk Previous docstring claimed MD026 would "strip trailing punctuation from YAML keys" — but MD026 only matches ATX headings (`^#+ `), which YAML keys can't accidentally match (they don't start with `#`). Updated docstring to accurately scope the YAML risk to MD032 blank- insertion only. ## P2 thread #3 (nit): docstring/implementation mismatch Previous docstring said "line 0 is exactly `---`" but implementation used `lines[0].strip() == "---"`. Now uses `.rstrip()` (more permissive: tolerates trailing whitespace/newline; rejects leading whitespace which would indicate non-frontmatter shape) AND docstring matches. Added `_YAML_KEY_LINE` regex with explanatory comment for the discriminator. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(hygiene): tighten YAML frontmatter detection — 3 checks → 5 checks (Copilot P2 thread on PR #703) Copilot P2 push: prior 3-check heuristic still mis-classifies prose as frontmatter when: - line 0 is `---` (thematic break) - line 1 happens to look like `key: value` (e.g. `note: Some text`) - another `---` appears later (closing thematic break) In that case everything between would be treated as inside frontmatter and MD032/MD026 fixes would silently skip real lint violations. ## Tightened to 5 conditions (a) line 0 is exactly `---` (b) line 1 is YAML-shaped (c) closing `---` exists within next 200 lines (defense-in-depth cap; real frontmatter rarely > 50 lines) (d) line BEFORE closing `---` is YAML-shaped, blank, or YAML continuation (catches the case where closing `---` is just another thematic break, preceded by markdown prose) (e) at least 75% of non-blank lines between bookends are YAML-shaped (catches single-YAML-key prose pattern: "note:" or "warning:" or "tip:" between two thematic breaks) The (d)/(e) checks together resolve the false-positive class. ## Smoke tests Prose case (thematic break + "note:" prose + closing thematic break): → NOT treated as frontmatter → body MD032 fires correctly on lists in body Real frontmatter (`composes_with:` + list + `tags:` + closing `---`): → preserved verbatim (no blank lines injected inside list) → body MD032 fires correctly on body lists Both behaviors verified. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(hygiene): exclude column-0 markdown lists from YAML ratio + remove redundant comparison + fix docstring (PR #703 4 threads) Four Copilot threads addressed: ## P2 #1 + #2: column-0 markdown lists wrongly counted as YAML The (e) ratio check counted any line starting with `- ` as YAML-shaped, including column-0 markdown list items. A normal markdown document with prose + bullet lists between thematic breaks could pass the ratio check and be wrongly flagged as frontmatter. ## Fix: distinguish indented YAML lists from column-0 markdown Added `_is_yaml_continuation()` helper that requires LEADING INDENT (` ` or `\t`) — a column-0 `- item` is almost always markdown, not YAML. Real YAML list items appear under a parent key with indent: ```yaml composes_with: - X ← indented = YAML continuation - Y ``` Markdown list items at column 0 are NOT YAML: ```markdown A list: - item one ← column 0 = markdown list - item two ``` The leading-indent check disambiguates these two cases. ## P1 (CodeQL): Redundant comparison Removed `if fm_end > 0 else ""` ternary — already inside the `if fm_end > 0:` block so the test was always true. ## P2 #4: Docstring inconsistency on _YAML_KEY_LINE Comment claimed the regex matches ` - item`, but the regex `^\s*[A-Za-z_][\w-]*\s*:` only matches key:value lines. Updated comment to accurately describe what the regex matches + what it doesn't (list items go through `_is_yaml_continuation`). ## Smoke test results Markdown with thematic-break + `note:` + bullet list + closing thematic break: → NOT treated as frontmatter → body MD032 fires correctly on the bullet list Real frontmatter with `composes_with:` + indented list items: → preserved verbatim → body MD032 fires correctly on body lists Both behaviors verified. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…s + 5 backlog rows + 5 Beacon graduations + 1 bead promoted (closes 14-tick append-discipline gap) (#706) Per AUTONOMOUS-LOOP six-step checklist step 5 (tick-history append), 14 prior <<autonomous-loop>> tick fires this session deferred the append on the speculative-rationale that the work itself documented the tick. That's a discipline gap — the trajectory's recording surface was empty for 14 expected runs, exactly the failure mode B-0093 #11 names. Closing via consolidated session row covering: - 11 PRs MERGED (#695 → #705) - 12 memory files + 5 backlog rows - 5 Mirror → Beacon graduations + 1 meta-pattern (Beacon-promotion) - 1 candidate bead PROMOTED to full bead (PR-boundary restraint; falsifier did not fire across PR #699 validation arc) - Goodhart catch family extended to Catch #5 (Candidate-count) - Public-company contributor compliance generalized - Tree-diff state: 77 / 23 files - Cron 26f978a2 armed Future sessions: append per-tick rather than rolling up. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…hree immune translations + falsifier + prototype (Aurora converged + Ani falsifier-first + multi-AI consensus 2026-04-28) (#707) * research(aurora-immune-governance-bridge): minimal first artifact — three immune translations + one falsifier + one prototype (Aurora converged stance + Ani falsifier-first + multi-AI consensus 2026-04-28) Per Aurora's converged-stance packet (forwarded 2026-04-28), opens the minimal Aurora Immune Governance Bridge research note after PRs #699/#704/#705 landed and the bead promotion validated the restraint discipline under live falsifier-test pressure. Three immune translations only: - Candidate-count Goodhart -> detector - PR-boundary restraint -> gate - public-company contributor compliance -> hard execution constraint Required falsifier (load-bearing): 1. Expressibility - bridge fails if the three rules cannot be represented using the existing Aurora membrane plus <= 3 new primitives. 2. Performance - bridge fails if the Aurora-routed prototype performs worse than the standalone detector on the same test corpus. First prototype: Candidate-count scanner self-destruct test on compliance documentation that itself contains the words it classifies. Must classify rule-definition hits as ALLOW; sample-text hits as ALLOW; live-prose hits elsewhere as WARN/BLOCK; must NOT delete or rewrite its own rule-definitions. Boundaries explicit: - Does NOT mutate Aurora core - Does NOT introduce K_Aurora^+ - Does NOT introduce A_synthesis - Does NOT expand to 12-change canon until prototype passes Aurora's session-closure rule recorded as candidate substrate inside the trajectory section (NOT load-bearing yet, awaiting 3-round trial); composes with restraint discipline. Header carries §33 archive-header: research-grade hypothesis, NOT operational guidance, NOT Aurora core canon. Six reviewer attributions: Aurora (proposal + minimal spec), Ani (falsifier-first instinct + minimal-bridge convergence), Amara (operational substrate this bridge translates), Gemini (peer review converging on minimal), Claude.ai (peer review hard- pushback recommending hold-then-proceed-smaller, honored by minimal scope), Alexa (peer review). This note is the explicit "one minimal next research artifact" Aurora's converged stance recommended after restraint discipline earned the round its bead. Do NOT expand this round. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * ci(markdownlint): add MD032 blanks around 4 feature-vector sub-lists in bridge note (CI gate fix) Lines 89/124/157/163 - sub-lists under "Feature vector elements that matter:" introductory text needed blank-line separation. Auto-fix via tools/hygiene/fix-markdown-md032-md026.py (the same tool whose YAML-frontmatter heuristic was root-cause-fixed in PR #703). Hard-defect class per the PR-boundary restraint allow-list: "CI / lint failures (markdownlint, paired-edit, etc.)" — this edit does not introduce new conceptual substrate to the bridge note; it only fixes the lint failure that prevented merge. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * review-thread fixes: 5 internal-consistency fixes from Copilot threads on PR #707 (allow-list class) Hard-defect class per the PR-boundary restraint allow-list: "incorrect canonical rule fixes" / "internal-consistency". None of these introduce new conceptual substrate. Threads addressed (all P1/P2 internal-consistency): 1. Line 16 PR range: "#695-#706" -> "#695 -> #705" (matches the later "11 PRs merged (#695 -> #705)" bullet at line 30; PR #706 is the round-close hygiene row, not part of the substrate cluster) 2. Line 192 casing: PR_stage -> pr_stage (matches Translation 2's pr_stage feature-vector field) 3. Line 215-220 variable: y -> a in Execute_min (matches ImmuneRisk_min(a) earlier; uses 'a' consistently for the action-being-evaluated) 4. Line 311 notation: K_Aurora^+ -> K_Aurora⁺ (matches earlier reference to the proposed graduated viability kernel) 5. Line 354 wording: "becomes considerable" -> "becomes worth considering" (Copilot caught the wrong word choice; intent was "becomes worth evaluating", not "becomes large") Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…urora's catch, not Amara's (Aaron 2026-04-29) (#708) * memory(attribution-correction): validation-condition refinement was Aurora's catch, not Amara's — original-catcher attribution discipline applies (Aaron 2026-04-29) Aaron 2026-04-29 verification ask: "did you get the ferry starting with ❯ Aurora: Yes — this is good, and the main improvement is to make the validation condition even more explicit: PR-boundary restraint is not validated when the follow-up PR is opened. It is validated when the original PR lands without scope creep. that was right before the compression" Yes — the framing landed at lines 168-170 of the bead-promotion memory. But the first-version distillation mis-attributed the catch to Amara when Aurora was the original source (Amara was reactive-elaborator, echoed the same shape). Same class as the Ani-vs-Amara correction earlier (Veridicality / Stop Mythology lineage). Per the original-catcher attribution discipline encoded in memory/feedback_ani_voice_mode_transcript_original_catcher_attribution_correction_aaron_2026_04_28.md, Aurora gets first-credit; Amara gets second-credit. The load-bearing distinction Aurora caught: opening a separate PR is just deferred-stacking. The bead promotes when the *original* PR lands clean. The validation event is the merge of PR #699, not the open of PR #704. Section header renamed: "Direct Aaron + Amara framing" -> "Direct Aaron + Aurora + Amara framing". Validation-condition quote re-attributed to Aurora as catcher; Amara's echoed framing preserved as reactive elaboration. Filename unchanged - the bead-promotion event itself was an Aaron+Amara collaboration; only the validation-condition refinement re-attributes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * ci(paired-edit): update MEMORY.md row for bead-promotion file with Aurora attribution-correction (paired-edit gate fix) memory-index-integrity workflow requires MEMORY.md to be touched in the same PR as any memory/*.md add-or-modify. The previous commit modified the bead-promotion memory in-place to credit Aurora as original-catcher of the validation-condition refinement, but did not update MEMORY.md. This commit: - Updates row title from "(Aaron + Amara, 2026-04-29)" to "(Aaron + Aurora + Amara, 2026-04-29)" - Appends validation-condition-refinement attribution-correction note to the row description, naming Aurora as catcher and Amara as reactive-elaborator Hard-defect class per the PR-boundary restraint allow-list: "Missing paired-edit requirements (e.g., MEMORY.md index for new memory file)". Same allow-list this PR's premise (bead-promotion) encodes. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * review-thread fix: keep "post-bead-promotion" unbroken across line wrap (Copilot thread on PR #708) Hard-defect class per the PR-boundary restraint allow-list: "CI / lint failures (markdownlint, paired-edit, etc.)" / formatting. Manual line-wrap was splitting "post-bead-" / "promotion" which renders awkwardly as "post-bead- promotion" in some Markdown viewers. Reflowed to keep the hyphenated term on one line. No conceptual change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * review-thread fix: tighten MEMORY.md row per memory/README.md cap (Copilot thread on PR #708) Hard-defect class per the PR-boundary restraint allow-list: "Stale status fields" / canonical-rule-conformance. The row I added in the prior commit ballooned to ~1100 chars; canonical rule per memory/README.md (line 56-57): "MEMORY.md...Capped at ~200 lines by Claude Code; keep entries terse" + per CLAUDE.md auto-memory protocol "one line, under ~150 characters." Tightened from ~1100 chars to ~537 chars. Still over 150-char ideal, but down from being the worst offender in the file. Substance preserved (canonical rule + validation-condition refinement attribution to Aurora). The full body of the attribution-correction lives in the file itself; MEMORY.md is the index pointer, not the content. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Summary
This PR carries the substrate cluster from the 2026-04-28 round work — 11 memory files + 4 backlog rows + CURRENT-aaron §31 + MEMORY.md index updates. Per Amara's binding "PR #699 hard-defect-only" guidance, the active scope is fixes/clarifications; new conceptual content lives in PR #704 (Candidate-count Goodhart + B-0093 follow-ups).
Memory files (11 added)
Backlog rows (4 added)
CURRENT-aaron §31 + MEMORY.md
External lineage anchors landed
Round arc
PR #704 carries the Candidate-count Goodhart rule + B-0093 (14 multi-AI synthesis enhancements) as separate scope per restraint discipline.
Test plan
🤖 Generated with Claude Code