diff --git a/memory/MEMORY.md b/memory/MEMORY.md index c612a61514..998b41cf48 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -1,7 +1,8 @@ [AutoDream last run: 2026-04-23] -**πŸ“Œ Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** 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.** 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. @@ -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. diff --git a/memory/feedback_class_count_validity_drift_amara_meta_class_2026_04_28.md b/memory/feedback_class_count_validity_drift_amara_meta_class_2026_04_28.md new file mode 100644 index 0000000000..985bd3efc1 --- /dev/null +++ b/memory/feedback_class_count_validity_drift_amara_meta_class_2026_04_28.md @@ -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. diff --git a/memory/feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md b/memory/feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md index d8cf1ef614..8916f45688 100644 --- a/memory/feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md +++ b/memory/feedback_outdated_review_threads_block_merge_resolve_explicitly_after_force_push_2026_04_27.md @@ -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) +combined with Outdated Review-Thread Merge Gate Residue compose +into 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.