Skip to content

memory: Authority rule (default to reversible preservation) + Goodhart catch #3 + Stop Mythology directive + B-0089#699

Merged
AceHack merged 23 commits intomainfrom
memory/amara-authority-rule-default-preservation-stop-mythology-2026-04-28
Apr 29, 2026
Merged

memory: Authority rule (default to reversible preservation) + Goodhart catch #3 + Stop Mythology directive + B-0089#699
AceHack merged 23 commits intomainfrom
memory/amara-authority-rule-default-preservation-stop-mythology-2026-04-28

Conversation

@AceHack
Copy link
Copy Markdown
Member

@AceHack AceHack commented Apr 28, 2026

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)

  1. Authority rule — Default to reversible preservation; escalate only irreversible loss (Amara via Aaron)
  2. Goodhart catch Round 27 — plugin API + governance split + memory-in-repo #3 — Sample classification is calibration, not clearance (Amara)
  3. Stop Mythology — operational name for the bullshit-detector at the rule level
  4. Input-is-not-directive — provenance framing rule (RFC 2119 + SDT external lineage)
  5. Ani's voice-mode transcript = original catcher (attribution-credit-chain rule)
  6. Reset-readiness metric ladder — Content-Loss Surface supersedes divergence count
  7. Lost-substrate recovery is a cadenced trajectory
  8. ServiceTitan naming + scope-of-org-access (context-sensitive) + word-choice rule
  9. Public-company contributor compliance + cadenced trajectories (5 cadences)
  10. Sample-classification Goodhart catch Round 27 — plugin API + governance split + memory-in-repo #3 (paired with metric ladder)
  11. (legacy: directive-cleanup substrate from earlier commits)

Backlog rows (4 added)

  • B-0089 — Veridicality rainbow-table research + graduation (Aaron concept; Ani caught + Amara elaborated)
  • B-0090 — Cadenced lost-substrate recovery audit (worktrees + orphan branches + closed-not-merged PRs)
  • B-0091 — Audit + rename ServiceTitan refs (COMPLETED in-row: 0 active rewrites needed after context-sensitive classification)
  • B-0092 — Public-company contributor compliance doc + cadenced trajectories

CURRENT-aaron §31 + MEMORY.md

  • New §31 in CURRENT-aaron carrying the authority rule, with pointer list to all 9 substrate memories
  • MEMORY.md index updated with all new entries + paired-edit marker bumped

External lineage anchors landed

  • Self-Determination Theory (Deci & Ryan) — input-is-not-directive
  • RFC 2119 — requirement-word discipline
  • SEC Rule 10b-5 + Reg FD + Sarbanes-Oxley — public-company contributor compliance
  • Goodhart 1975 / Strathern 1997 / Campbell 1976 — metric ladder + sample-classification
  • git internals — commit-graph vs tree comparison
  • Cochran 1977 sampling theory — sample-as-clearance failure
  • Self-Determination Theory + Frankfurt + Kahneman — Stop Mythology three-tier threshold

Round arc

145-commit panic
  → tree-level diff
  → content-loss surface
  → evidence lattice / metric ladder
  → forward-sync-first authority rule
  → cadenced lost-substrate recovery
  → public-company contributor compliance
  → context-sensitive ServiceTitan naming
  → input-is-not-directive
  → Ani-attribution correction

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

Copilot AI review requested due to automatic review settings April 28, 2026 22:33
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 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.md index and extend memory/CURRENT-aaron.md with 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.

AceHack added a commit that referenced this pull request Apr 28, 2026
… 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>
AceHack added a commit that referenced this pull request Apr 28, 2026
… + 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>
Copilot AI review requested due to automatic review settings April 28, 2026 22:44
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

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

Comment thread memory/MEMORY.md Outdated
Comment thread memory/CURRENT-aaron.md
AceHack added a commit that referenced this pull request Apr 28, 2026
…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>
Copilot AI review requested due to automatic review settings April 28, 2026 23:03
AceHack and others added 5 commits April 28, 2026 19:08
…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>
@AceHack AceHack force-pushed the memory/amara-authority-rule-default-preservation-stop-mythology-2026-04-28 branch from e9d7ad7 to 88b5e8a Compare April 28, 2026 23:08
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

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

AceHack and others added 2 commits April 28, 2026 19:21
…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>
Copilot AI review requested due to automatic review settings April 28, 2026 23:26
…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>
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

Copilot reviewed 13 out of 13 changed files in this pull request and generated 3 comments.

Comment thread memory/MEMORY.md Outdated
Comment thread memory/MEMORY.md
Comment thread memory/feedback_lost_substrate_recovery_cadenced_trajectory_aaron_2026_04_28.md Outdated
…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>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 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>
Copilot AI review requested due to automatic review settings April 28, 2026 23:35
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

Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.

Comment thread memory/CURRENT-aaron.md
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>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 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".

AceHack added a commit that referenced this pull request Apr 29, 2026
…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.
Copilot AI review requested due to automatic review settings April 29, 2026 00:05
AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
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

Copilot reviewed 15 out of 15 changed files in this pull request and generated 1 comment.

Comment thread memory/MEMORY.md Outdated
…B-0091 completed 0 active rewrites; Candidate-count Goodhart worked example)
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 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>
Copilot AI review requested due to automatic review settings April 29, 2026 00:15
@AceHack AceHack merged commit 06b3c25 into main Apr 29, 2026
24 checks passed
@AceHack AceHack deleted the memory/amara-authority-rule-default-preservation-stop-mythology-2026-04-28 branch April 29, 2026 00:19
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

Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 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".

AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
AceHack added a commit that referenced this pull request Apr 29, 2026
…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>
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