Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
3 changes: 2 additions & 1 deletion memory/MEMORY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[AutoDream last run: 2026-04-23]

**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- latest-paired-edit: fork-audit R/C/T diff-filter coverage + plumbing-vs-porcelain note (2026-04-29 round-10 Amara). NOTE: this comment is a single-slot "latest paired edit" marker (not a paired-edit log). Per the round-10 Amara framing the slot semantics are now explicit. -->
**📌 Fast path: read `CURRENT-aaron.md` and `CURRENT-amara.md` first.** <!-- paired-edit: PR #690 scheduled-workflow-null-result-hygiene-scan tier-1 promotion 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.)

- [**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).
Expand Down Expand Up @@ -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=<path>` 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 <<EOF` always-append OR run canonical-sort post-edit. Lint hook caught Otto's PR #684 incident in 1min. Mechanism-over-vigilance.
- [**TypeScript/Bun is the default; step out on TypeScript carefully (Aaron 2026-04-28)**](feedback_typescript_bun_default_step_out_carefully_aaron_2026_04_28.md) — Factory tooling default is TypeScript on Bun (`bun@1.3.13`). Step-out threshold: AI/ML primary library availability. New tooling defaults to TS; existing Python ports when changes are substantive (B-0086 catalogues port candidates).
- [**Version-currency rule covers inheriting existing repo pins, not just fresh assertions (Aaron 2026-04-27)**](feedback_version_currency_covers_inheriting_existing_pins_not_just_fresh_assertions_aaron_2026_04_27.md) — Otto-247 wake-time discipline #4 applies whenever a version pin LANDS in a new file, even when the same SHA is already pinned elsewhere. Pasting a pin into a new workflow IS asserting it current. Verify against upstream API releases/latest.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ existing workflow:
workflows only run from the default branch. A workflow file
in a feature branch will never fire on schedule.
3. **Is it disabled?** — public-repo schedules can be disabled
after inactivity (60+ days no commits to the workflow).
by GitHub Actions after **60 days of no repository
activity** (per GitHub's documented rule — repo-level
activity, NOT workflow-file-age. An active repo with an
old workflow file does NOT trigger the auto-disable).
`gh run list --all` may show runs for disabled workflows
that the default `gh run list` filters out.
4. **Is the cron valid UTC?** — cron is always UTC; a `0 9 * * *`
Expand Down Expand Up @@ -158,6 +161,102 @@ The class name **Workflow Null-Result Audit Signal** preserves
the broader category; the six questions enumerate the failure
modes; the control invokes them in order.

### Promotion to tier-1 cheap-prevention scan (Amara 2026-04-28T20:18Z)

**Promoted class name:** **Scheduled Workflow Null-Result Hygiene Scan**.

After the class found two real bugs in its first hour
(B-0085 budget-cadence-cron-vs-deadline + B-0087
github-settings-drift-invalid-permission), Amara promoted
the audit from "special case" to **routine tick-open
cheap-prevention scan**. Cost: ~5 seconds for the
scheduled-workflow surface (`grep -l schedule:` +
`gh run list --workflow=...`). Yield this arc:
2 captured cadence-substrate gaps from a 5-workflow
surface.
Comment thread
AceHack marked this conversation as resolved.

**Tier-1 rule (Amara prescribed):**

> *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=<path>` returning `[]`,
or last-run `conclusion=failure`) must sort into ONE of
Comment thread
AceHack marked this conversation as resolved.
Comment thread
AceHack marked this conversation as resolved.
the labels below. The labels classify the *workflow's
Comment thread
AceHack marked this conversation as resolved.
null/failure situation*, not individual runs:

- **known row** — already filed as B-NNNN; row ID cited.
Comment thread
AceHack marked this conversation as resolved.
- **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
Comment thread
AceHack marked this conversation as resolved.
`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
Comment thread
AceHack marked this conversation as resolved.
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
Expand Down
Loading