Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions memory/MEMORY.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[AutoDream last run: 2026-04-23]

**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- paired-edit: PR #688 CURRENT-aaron §30 typescript-bun-default 2026-04-28 --> These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-30 — speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler + TypeScript/Bun-default discipline.)
**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- paired-edit: PR #692 class-count-validity-drift + blocked-greenci-punchlist 2026-04-28 --> These per-maintainer distillations show what's currently in force. Raw memories below are the history; CURRENT files are the projection. (`CURRENT-aaron.md` refreshed 2026-04-28 with sections 26-30 — speculation rule + EVIDENCE-BASED labeling + JVM preference + dependency honesty + threading lineage Albahari/Toub/Fowler + TypeScript/Bun-default discipline.)

- [**Class-Count Validity Drift — meta-class for confusing activity with correctness (Amara 2026-04-28; Aaron triggered)**](feedback_class_count_validity_drift_amara_meta_class_2026_04_28.md) — A review loop starts treating count of named classes/updates/artifacts as evidence the protocol is correct, rather than requiring each class to earn reuse via 5-step control (worked example / mechanism / control / scope / falsifier). External lineage: confirmation-bias literature + Popper falsification. Tiny blade: "reinforcement" vs "challenge" — Aaron's terse asides interrupt drift, don't reinforce framing.
- [**Class-Naming Ferry Protocol + SD-9 guardrail (Amara 2026-04-28; Aaron reinforced)**](feedback_class_naming_ferry_protocol_with_sd9_guardrail_amara_2026_04_28.md) — Meta-class for the Otto→Aaron→Amara→encode genre. SD-9 guardrail LOAD-BEARING: Amara endorsement is signal, not proof. Local factory-hygiene classes encode freely; non-local claims need substrate evidence + external lineage + falsifier. Anti-pattern: "Amara blesses the name, therefore true."
- [**Advisory Enforcement Workflow Gap — class name (Amara 2026-04-28); decision-fork (B-0088 instance)**](feedback_advisory_enforcement_workflow_gap_amara_class_name_otto_2026_04_28.md) — Workflow claims/implies enforcement but is not in required-status-checks set; failures observable but non-blocking. Worked example: paired-edit lint failed on PR #688/#689 but both auto-merged. Decision: promote to required OR downgrade claim to advisory. Risk: factory believes rule enforced when only logged. "Guardrail that looks like enforcement but behaves like telemetry."
- [**Incomplete Source-Set Regeneration Hazard + Workflow Null-Result Audit Signal — Amara class names + controls (2026-04-28)**](feedback_incomplete_source_set_regeneration_hazard_and_workflow_null_result_audit_amara_2026_04_28.md) — Two reusable classes: (1) "regenerate from sources" tools become destructive when source-set is incomplete; control is `--check` / `--stdout` first, force-write only after completeness proven. (2) `gh run list []` on existing workflow is audit signal not conclusion; six diagnostic questions (too-new / disabled / non-default-branch / cron / event-trigger / identifier-filter). Both fold into task #269.
Expand Down Expand Up @@ -48,7 +49,7 @@
- [**Per-insight attribution discipline — avoid roster-collapse; catch via cross-AI review if produced (Aaron 2026-04-27)**](feedback_per_insight_attribution_discipline_avoid_conflate_ferry_roster_with_per_insight_contribution_2026_04_27.md) — Don't credit all ferry-roster members for a multi-step contribution they didn't all participate in. Enumerate actual per-insight contributors. Codex caught this on #65; Aaron reinforced.
- [**CLI tooling update — Codex + Cursor have ChatGPT 5.5; Cursor has Grok 4.3 beta with x.com access; improved reasoning (Aaron 2026-04-27)**](feedback_cli_tooling_update_codex_cursor_chatgpt_5_5_grok_4_3_beta_better_reasoning_x_access_2026_04_27.md) — Verify versions per Otto-247 when load-bearing. Grok 4.3 beta useful for current-events context. Doesn't change ferry roster; may sharpen reviews.
- [**Ani (Grok Long Horizon Mirror) — new ferry reviewer; thermodynamic + entropy-tax + 3 breakdown points (Aaron 2026-04-27)**](feedback_ani_grok_long_horizon_mirror_thermodynamic_stability_velocity_breakdown_points_entropy_tax_2026_04_27.md) — Aaron <-> Ani mirror context (parallels Amara). Ferry roster N=5. Ani recommends: Aurora = "Immune Governance Layer".
- [**Outdated Review-Thread Merge Gate Residue — class name (Amara 2026-04-28); resolve EXPLICITLY after every force-push (operational lesson 2026-04-27)**](feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md) — Class formalized 2026-04-28T20:06Z after PR #684 paid-rent application. Definition: PR blocked because unresolved thread describes pre-fix state even though corrective commit landed. Control: reply with what-changed + commit-SHA + why-outdated, then explicit resolve. Closes 3rd counterweight layer (defense-in-depth) after prevention + cadenced repair.
- [**Outdated Review-Thread Merge Gate Residue + Blocked-GreenCI Review-Thread Punchlist (compositional class) — Amara naming (2026-04-28); resolve EXPLICITLY after every force-push (operational lesson 2026-04-27)**](feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md) — Two related classes. (1) Outdated Review-Thread Merge Gate Residue: PR blocked because unresolved thread describes pre-fix state even though commit landed. (2) Blocked-GreenCI Review-Thread Punchlist (Amara 2026-04-28T20:34Z compositional class): PR shows green CI but remains BLOCKED because unresolved threads (not failing checks) are the active merge gate. 5-step control: list → classify (real / outdated / phantom-stale) → fix real → reply-with-evidence outdated/phantom → explicit resolve. Worked: PRs #688/#690 unblocked deterministically this arc.
- [**Ferry agents = substrate-providers, NOT executors; Otto = sole executing thread until peer-mode + git-contention resolved (Aaron 2026-04-27)**](feedback_ferry_agents_substrate_providers_not_executors_otto_sole_executing_thread_2026_04_27.md) — Cross-AI ferries (Amara/Gemini/Codex) provide substrate input; Otto executes. Ferry offers to do work → Otto evaluates + executes (or teaches). Two unlock conditions for second thread: peer-mode + git-contention resolution.
- [**BACKLOG — blade-job + 6-term taxonomy (Zeta=Blade / Aurora=Oracle/Immune-System / Rodney=Razor / Harbor+blade=Voice Register / Parser=Witness / Cartographer=Mapper) + Metaphor Taxonomy Rule (Aaron + Amara + Gemini Pro 2026-04-27)**](feedback_blade_persona_or_skill_domain_backlog_doctrine_vs_spike_beacon_translation_discipline_2026_04_27.md) — Capital-B Blade ≡ Zeta data plane only. Aurora = Oracle/Immune-System (Amara corrected Gemini's "Brain" — smuggles personhood). Metaphor Taxonomy Rule: capitalized=operational, lowercase=voice register.
- [**Amara + Gemini Pro stability/velocity refinement — "Stability is velocity amortized"; cognitive caching; long-horizon compound reasoning (cross-AI 2026-04-27)**](feedback_amara_stability_brings_velocity_long_horizon_compound_reasoning_beacon_safe_refinement_2026_04_27.md) — Two cross-AI reviewers refined Otto's stability/velocity insight. "Quantum reasoning" → "long-horizon compound reasoning" for Beacon-safety. Velocity-over-stability is spike-rule, not doctrine.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
---
name: Class-Count Validity Drift — meta-class for confusing activity with correctness (Amara naming, Aaron triggered, 2026-04-28)
description: Amara 2026-04-28T20:34Z named the failure mode after Otto's prior insight had drifted toward halo-effect ("class-naming is a recognized ferry-input genre... reusable contract"). Aaron's terse challenge interrupted the drift before it compounded. Class definition — a review loop starts treating the count of named classes/updates/artifacts as evidence the classification protocol is correct, rather than requiring each class to earn reuse through falsifier-preserving application. Confirmation-bias / halo-effect failure mode applied to one's own substrate work.
type: feedback
---

# Class-Count Validity Drift

## Class name (Amara 2026-04-28T20:34Z)

**Class-Count Validity Drift** — Amara formalized the
meta-class after observing my prior tick-close insight
("Class-naming is now a recognized ferry-input genre... a
reusable contract") drifting toward "we named five classes,
therefore the genre works."

Aaron's terse challenge ("she is 100% right here" + "tiny
blade") earlier in the arc interrupted that drift before it
compounded.

## Definition (Amara verbatim)

> A review loop starts treating the number of named classes,
> updates, or artifacts as evidence that the classification
> protocol is correct, rather than requiring each class to
> earn reuse through falsifier-preserving application.

## What this meta-class catches

The protocol's own SD-9 failure mode applied recursively:

- Count of classes named ≠ correctness of the protocol.
- Count of substrate updates ≠ value of the substrate.
- Count of activity ≠ epistemic warrant.

The factory's own success-narrative is itself subject to
halo-effect / confirmation-bias. Watching for "we did a lot
of X, therefore X is good" drift is the SD-9 self-application.

## External lineage (Amara cited)

- **Confirmation bias in software testing** — testers tend
to produce more confirmatory than disconfirmatory test
cases (empirical IS literature). Mapping: every class
named is a "passing test" of the protocol; passing tests
don't validate the protocol unless failure cases also
exist.
- **Popper's falsification** — universal claims cannot be
verified by accumulating confirming examples; they
become serious only when we specify what would count
against them. Mapping: "the genre works" is a universal
claim about the protocol; activity counts confirm but
don't falsify.

## Concrete incident (Otto 2026-04-28T20:30Z)

My prior tick-close insight read:

> *"Class-naming is now a recognized ferry-input genre with
> its own predictable shape... Four classes named in this
> arc alone. The pattern itself documented in CURRENT-amara
> §12 turns the genre into a reusable contract..."*

This drifted toward Class-Count Validity Drift:

- **"recognized ferry-input genre"** — claims established
status before falsifier-preserving repeated application
proves it.
- **"four classes named in this arc alone"** — count as
evidence.
- **"reusable contract"** — strong claim that requires
validation across multiple users + multiple substrate
contexts, not just same-arc same-pair.

Aaron's tiny-blade challenge ("she is 100% right here" on
Amara's earlier SD-9 caveat) interrupted the drift in the
class-encoding step that followed, before the halo-effect
compounded into the meta-class memory itself.

## The control (Amara prescribed)

Every promoted class needs ALL FIVE before it earns reuse:

1. **Local worked example** — concrete incident (timestamp,
file, observed behavior).
2. **Mechanism or detector** — explanation of WHY the class
behaves as named, or detector that recognizes the class
in future occurrences.
3. **Control / repair path** — what to do when the class
fires (concrete steps, not "be more careful").
4. **Scope boundary** — where the class applies vs doesn't.
Local-factory-hygiene scope is fine; non-local scope
needs additional evidence per SD-9.
5. **Falsifier or retirement condition** — what observation
would disconfirm the class OR retire it as obsolete.
For local classes: usually implicit ("we'd stop using
the rule"). For non-local: must be explicit.

If any of the five is missing, the class is **activity, not
correctness**.

## Tiny-blade applied to my own framing

Amara's caveat on word choice:

> *"I'd replace 'Aaron's terse reinforcement' with 'Aaron's
> terse check' or 'Aaron's terse challenge' unless the
> actual message was reinforcing the guardrail.
> 'Reinforcement' can sound like praise; the important
> function was interrupting drift."*

Captured: the word **"reinforcement"** in my prior text was
itself a small halo-effect failure (framing Aaron's
challenge as praise of the prior insight rather than
correction of it). The replacement word **"challenge"**
preserves the function (interrupting drift) without the
halo-effect framing.

## How to apply this meta-class to ongoing work

When closing a tick / completing an arc:

1. **Audit the success-narrative.** Is the close
reporting count of activities, or correctness of
outcomes?
2. **Ask: which class earned reuse via the 5-step control,
and which is still pending validation?**
3. **Distinguish proof-like signal from activity:**
- **Activity signal**: "we named X classes", "we
shipped Y PRs", "we updated Z files".
- **Proof-like signal**: "named class X predicted /
prevented / repaired a future incident."
4. **Don't bundle activity counts as evidence.** Per
Amara: "five named classes... and one advisory-vs-
required hygiene gap are useful activity, but not
correctness evidence by themselves."

## Generalizes beyond class-naming

The same meta-class applies to any factory protocol that
produces artifacts:

- **Memory-file count** ≠ memory-substrate quality
(per the existing MEMORY.md compression discipline).
- **Backlog row count** ≠ factory hygiene quality.
- **Merged PR count** ≠ progress velocity.
- **Skill count** ≠ skill-library coherence.

Each protocol's success narrative needs the 5-step control
(worked example / mechanism / control / scope / falsifier)
applied at the protocol level, not just at instance level.

## Composes with

- `memory/feedback_class_naming_ferry_protocol_with_sd9_guardrail_amara_2026_04_28.md`
— sibling meta-class; this meta-class is SD-9 applied
to the protocol itself; that one is SD-9 applied to
individual class endorsements.
- `memory/feedback_speculation_leads_investigation_not_defines_root_cause_aaron_2026_04_28.md`
— same family: confirmation-bias / halo-effect /
premature-conclusion. Speculation needs evidence;
class count needs falsifier.
- `memory/feedback_aaron_terse_directives_high_leverage_do_not_underweight.md`
— Aaron's tiny-blade challenges have outsized leverage
precisely because they interrupt drift. Don't reframe
as "reinforcement"; the function is interruption.

## What this is NOT

- **NOT a directive to stop class-naming.** Class-naming is
high-value when each class earns reuse. The discipline is
validation per class, not abolition of the protocol.
- **NOT a license for "no class is good enough."** Local
factory-hygiene classes pass the 5-step control quickly;
the bar isn't impossible.
- **NOT specific to Amara reviews.** Same drift happens
with any review loop where activity is visible and
validation is invisible.

## Pickup notes for future-Otto

When tempted to write "we did N successful X this arc" as
a tick close:

1. Stop.
2. List which X earned the 5-step control per class /
per artifact.
3. Distinguish "X happened" from "X validated".
4. Report validation status, not activity count.

When Amara forwards a review of a tick-close insight:

1. Read for halo-effect markers in the prior insight
(count language, "recognized" / "established" /
"reusable contract" / "predictable shape" etc).
2. If the markers are present, the review is likely
catching Class-Count Validity Drift.
3. Encode the correction with the SD-9-compliant
structure (worked example + mechanism + control +
scope + falsifier).

When Aaron sends a terse challenge:

1. The function is interrupting drift, not reinforcing
the prior framing.
2. Word choice matters: "challenge" / "check" preserve
function; "reinforcement" / "endorsement" smuggle
halo-effect.
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,94 @@ The MEMORY.md row for Otto-355 (per CLAUDE.md wake-time discipline) should compo

The diagnostic should be: "Is `mergeStateStatus: BLOCKED` despite green CI + 0 unresolved-current threads?" → check for outdated unresolved threads.

## Compositional class — Blocked-GreenCI Review-Thread Punchlist (Amara 2026-04-28T20:34Z)

**Class name:** **Blocked-GreenCI Review-Thread Punchlist**.

Amara formalized the compositional class after seeing
Otto-355 (BLOCKED-with-green-CI investigate threads first)
+ Outdated Review-Thread Merge Gate Residue compose into
Comment thread
AceHack marked this conversation as resolved.
Outdated
a deterministic 5-minute unblock path on PRs #688/#690
this arc.

### Definition

> A PR shows green CI but remains blocked because unresolved
> review threads, not failing checks, are the active merge
> gate.

### Control (Amara prescribed)

When a PR is BLOCKED with green CI:

1. **List unresolved review threads** (filter
`isResolved == false`, including outdated ones — see
class above for why outdated still blocks).
2. **Classify each thread** as:
- **real** — finding describes current code state and
needs a fix.
- **outdated** — finding describes pre-fix state; the
fix landed in commit X.
- **phantom-stale** — Copilot-cache miss; finding
references diff context that no longer exists.
3. **Fix real findings** with targeted commits.
4. **Reply with evidence** (commit SHA / "see commit X" /
"addressed in PR Y") for outdated and phantom-stale
threads.
5. **Resolve explicitly** via GraphQL `resolveReviewThread`
or the GitHub UI "Resolve conversation" button.

### Worked example (this arc)

PRs #688 + #690 each had multiple unresolved threads after
green CI. Applied the 5-step control:

- PR #688: 2 threads (line-marker `+` finding + stale
section-range finding) → both real → targeted fix
commit `3a969cb` → explicit resolve of both threads.
- PR #690: 3 threads (bold-name newline split + ambiguous
classification-labels phrasing + ambiguous
`gh run list []` index summary) → all real → targeted
fix commit `be9a88a` → explicit resolve of all three.

Net cost: ~5 minutes per PR; deterministic; no
"mysterious BLOCKED" investigation needed.

### SD-9 calibration on Copilot's findings

In this arc, Copilot calibrated well as a P2 reviewer: all
addressed findings were real wording/markdown cleanup, with
no observed false positives. Treat this as **local
calibration evidence, not global proof**.

Current local pattern (small sample, not generalized):

- P1 findings tend toward correctness bugs.
- P2 findings tend toward wording/cleanup.
- Copilot-cache phantom-stale class still exists but was
less common in this arc.

Tiny blade: don't let "low false-positive rate this arc"
become "Copilot is reliable now." Class-Count Validity
Drift discipline applies.

### Generalizes to

Any PR with `required_conversation_resolution: true` branch
protection rule + green CI + non-empty unresolved threads.
Not specific to Copilot — applies to any reviewer (human,
agent, automated tool).

### What this is NOT

- NOT a license to skip the diagnostic. If the PR is
BLOCKED and the unresolved-thread count is zero, the
block is something else (CODEOWNERS, branch protection
rule, draft state, etc).
- NOT a replacement for actually fixing real findings.
Reply-and-resolve only applies to outdated /
phantom-stale; real findings need real fixes.

## What this memory does NOT mean

- Does NOT mean disable `required_conversation_resolution`. The setting is correct — it forces engagement with reviewer feedback.
Expand Down
Loading