diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 15c66a514..994d45e17 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -1,6 +1,7 @@ [AutoDream last run: 2026-04-23] **πŸ“Œ Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** +**πŸ“Œ 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.) - [**Zeta's ultimate scope is an intellectual backup of earth β€” scope creep is a feature, prioritize not exclude (Aaron 2026-04-30)**](feedback_zeta_ultimate_scope_intellectual_backup_of_earth_wont_do_authority_aaron_2026_04_30.md) β€” Aaron's load-bearing scope reveal. *"the ultimate scope of this β€” an intellectual backup of earth"* + *"scope creep is a forever problem i don't want to fix β€” to figure out how to prioritize the right thing, not kill future knowledge potential."* The four products (factory substrate, package manager, database, Aurora) nest inside this purpose; new products evaluated against scope-alignment. Operational consequence: prioritization is the work; exclusion is the failure mode. The agent's biases that fight this: queue-clarity bias, finite-resource thinking, scope-policing instinct, decisiveness reflex. WONT-DO has two senses β€” (1) best-practices pattern exclusion (agent + reviewer authority, common β€” *"plenty of WONT-DO patterns we won't copy from outside because they don't follow our best practices"*) vs (2) backlog-item exclusion (Aaron only until scope-understanding handoff, rare β€” removes a path from future knowledge potential). Composes with substrate-IS-product, internal-direction-from-survival, default-disposition-paused-work, ALIGNMENT.md (a misaligned backup is hostage substrate). Carved sentence: *"Zeta's purpose is an intellectual backup of earth. Every product nests inside that purpose. The agent does not unilaterally remove anything from the backup."* - [**Default disposition for paused work is "re-evaluate later," not "close" (Aaron 2026-04-30)**](feedback_default_disposition_paused_work_is_reeval_later_not_close_aaron_2026_04_30.md) β€” On this project, very few things are WONT-DO. Most paused work gets re-evaluated when the round is ready. Aaron 2026-04-30: *"why would you want to bulk close, are these things we should do later? on this project there are very few wontdos most things are reevualtuate later."* Four-category classification before any close: (1) work-already-done-via-different-path on main, (2) topology obsolescence ratified, (3) paused-for-later (DOMINANT default), (4) WONT-DO (RARE). Bulk-close is almost never the right shape β€” it conflates category 3 with 4. Queue-clarity is the agent's pressure, not the maintainer's. Open PRs are visible-as-paused; closing them removes that signal. Live trigger: 2026-04-30 stale-PR triage round where I (correctly) closed 3 PRs in categories 1+2 with on-main evidence, then (incorrectly) proposed bulk-closing 17 minimal tick-history shards as "stale" before Aaron's correction landed. Composes with WONT-DO list discipline (stays small by default), Otto-363 (open PRs are remote-parked tier), future-self-not-bound (re-evaluation works only if past-self left work visible-as-paused), substrate-IS-product (paused work is part of the evolving trajectory). @@ -51,7 +52,7 @@ These per-maintainer distillations show what's currently in force. Raw memories - [**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. +- [**Incomplete Source-Set Regeneration Hazard + Workflow Null-Result Audit Signal + Scheduled Workflow Null-Result Hygiene Scan (tier-1) β€” 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 plus tier-1 promotion: (1) "regenerate from sources" tools become destructive when source-set incomplete; control is `--check` / `--stdout` first. (2) `gh run list --workflow=` returning `[]` on existing workflow is audit signal not conclusion; six diagnostic questions. (3) Promoted to tier-1 cheap-prevention tick-open scan after finding B-0085 + B-0087 in first hour; classify every null/failure into the 8-label set (known-row + Q1-Q6 + uncaptured-gap); audit scope is scheduled workflows only. Tiny-blade caveat: 40% local rate β‰  global rate; "clean for this detector" β‰  "clean". - [**Chronological Insertion Polarity Error β€” class name + append-only-on-oldest-first discipline (Amara 2026-04-28)**](feedback_chronological_insertion_polarity_error_amara_class_name_otto_2026_04_28.md) β€” Edit-tool prepend on oldest-first append-only files = chronological reversal. Discipline: `cat >> file < *At tick-open, enumerate scheduled workflows and classify +> every null/failure result. No unclassified scheduled +> workflow silence is allowed.* + +**Classification labels** β€” when auditing a scheduled +workflow, every empty/failure result for that workflow +(e.g. `gh run list --workflow=` returning `[]`, +or last-run `conclusion=failure`) must sort into ONE of +the labels below. The labels classify the *workflow's +null/failure situation*, not individual runs: + +- **known row** β€” already filed as B-NNNN; row ID cited. +- **too-new-to-fire** (Q1) β€” workflow file's first-commit-date + is after the most recent natural cron firing slot. +- **non-default-branch** (Q2) β€” workflow file lives on a + non-default branch where scheduled triggers don't fire. +- **disabled** (Q3) β€” workflow disabled by GHA after + **60 days of no repository activity** (per GitHub's + documented rule β€” repo-level activity, NOT workflow-file- + age); `gh run list --all` may show prior runs the default + filter hides. +- **cron mismatch** (Q4) β€” cron syntax is malformed OR cron + doesn't fit the deployment context (e.g. workflow needs + daily fire but cron is weekly; or cron interpreted as + local time when GHA uses UTC). +- **event-trigger incompatible** (Q5) β€” the workflow's + trigger doesn't fire under the deployment context (e.g. + `pull_request_target` from external forks lacks + permissions; `workflow_run` upstream never fires; + `schedule` needs default-branch). +- **wrong workflow identifier** (Q6) β€” `--workflow=` filter + used a name/path/ID that doesn't match how this workflow + registers. +- **uncaptured gap** β€” none of the above; file new B-NNNN + row this tick. + +**Tiny blade calibration (Amara's distinction):** + +> *"nothing else found" is not proof the workflow level is +> clean; it is proof the current audited scheduled-workflow +> surface has no uncaptured gaps under this lens. That's +> still a win. It's just the difference between "clean" and +> "clean for this detector."* + +The 40% gap rate observed this arc (2 of 5 scheduled +workflows had captured cadence-substrate gaps) is a +**local signal, not a global rate**. Hypothesis: +comparable null-result audits over other substrate +surfaces may reveal similarly cheap, high-yield gaps; +treat as hypothesis until repeated across other workflow +classes. + +**Where this fits in task #269:** + +- Phase 1 (existing shell tooling): walk **scheduled** + workflows in `.github/workflows/*.yml` (those with + `on.schedule`), run `gh run list`, classify every + null/failure into the **8-label set** (known row + Q1-Q6 + + uncaptured-gap; see *Classification labels* above). + Non-scheduled workflows have different null-result + semantics (e.g. `pull_request`-only workflows + legitimately have empty `gh run list` until a PR fires + them) and require their own audit class. +- Phase 2 (existing skill wrapper): skill invokes the + script + summarizes findings + files uncaptured-gap + rows automatically. +- Phase 3 (new β€” promoted from special-case to tier-1): + tick-open hook auto-runs on session-start when no + recent audit has been done. + +**What this is NOT:** + +- NOT a license to skip the six-question diagnostic. The + diagnostic IS the classification step. +- NOT a directive to globalize the 40% rate. Local signal + to local surface; widen with empirical repetition. +- NOT a substitute for actual fixes. The audit surfaces + gaps; fixes still need maintainer-call (visibility- + constraint). + ## Both classes compose with - `tools/hygiene/sort-tick-history-canonical.py` + the