From 61b412389222ed8e22c443af501f7704c51e4838 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:22:52 -0400 Subject: [PATCH 1/4] =?UTF-8?q?memory(class-promotion):=20Scheduled=20Work?= =?UTF-8?q?flow=20Null-Result=20Hygiene=20Scan=20=E2=80=94=20Amara=20promo?= =?UTF-8?q?ted=20audit=20to=20tier-1=20cheap-prevention=20scan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Amara 2026-04-28T20:18Z reviewed Otto's cross-workflow audit insight + promoted the discipline from special case to formal tier-1 cheap-prevention tick-open scan, after the class found B-0085 + B-0087 in its first hour. Promoted class name: Scheduled Workflow Null-Result Hygiene Scan. Tier-1 rule (Amara verbatim): At tick-open, enumerate scheduled workflows and classify every null/failure result. No unclassified scheduled workflow silence is allowed. Six classification labels for every gh run list result: - known row (B-NNNN cited) - too-new-to-fire - disabled / non-default-branch - cron mismatch - wrong workflow identifier - uncaptured gap (file new B-NNNN row this tick) Tiny-blade caveat (Amara 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.' The 40% gap rate observed this arc is local signal, not global rate. Hypothesis until repeated across other workflow classes. Phase mapping for task #269: - Phase 1: walk all workflows + classify nulls/failures - Phase 2: skill summary + auto-file uncaptured-gap rows - Phase 3: tick-open hook (NEW promotion β€” was special-case) Extends existing memory file with the tier-1 promotion section + updates MEMORY.md index entry to surface the promoted class name + paired-edit marker bumped. --- memory/MEMORY.md | 3 +- ...flow_null_result_audit_amara_2026_04_28.md | 77 +++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 15c66a514..8ed31dbf0 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 6 labels. 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** (every `gh run list` result must +sort into one): + +- **known row** β€” already filed as B-NNNN; row ID cited. +- **too-new-to-fire** β€” workflow file's first-commit-date + is after the most recent natural cron firing slot. +- **disabled / non-default-branch** β€” workflow disabled + by GHA after inactivity, OR file lives on a non-default + branch where scheduled triggers don't fire. +- **cron mismatch** β€” cron syntax is malformed OR cron + doesn't fit the deployment context (e.g. workflow + needs daily fire but cron is weekly). +- **wrong workflow identifier** β€” `--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 all + `.github/workflows/*.yml`, run `gh run list`, classify + every null/failure into the 6 labels. +- 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 From 9229720c25add032c5d0e9e0d2e4b887738143e9 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:33:51 -0400 Subject: [PATCH 2/4] fix(class-promotion memory): Copilot review wording fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three Copilot P2 findings on PR #690: 1. Bold class name 'Scheduled Workflow Null-Result Hygiene Scan' was split across newlines β€” kept on one line for cross-parser bold-emphasis safety. 2. 'every gh run list result must sort into one' was ambiguous β€” clarified to 'every empty/failure result for [a workflow] must sort into ONE of the labels' with explicit framing that labels classify the workflow's null/failure situation, not individual runs. 3. MEMORY.md index summary 'gh run list []' read like a command invocation with [] arguments β€” now mirrors the underlying memory phrasing 'gh run list --workflow= returning [] on existing workflow'. --- ...and_workflow_null_result_audit_amara_2026_04_28.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/memory/feedback_incomplete_source_set_regeneration_hazard_and_workflow_null_result_audit_amara_2026_04_28.md b/memory/feedback_incomplete_source_set_regeneration_hazard_and_workflow_null_result_audit_amara_2026_04_28.md index 02b8faaa1..3bf65b440 100644 --- a/memory/feedback_incomplete_source_set_regeneration_hazard_and_workflow_null_result_audit_amara_2026_04_28.md +++ b/memory/feedback_incomplete_source_set_regeneration_hazard_and_workflow_null_result_audit_amara_2026_04_28.md @@ -160,8 +160,7 @@ 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**. +**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 @@ -179,8 +178,12 @@ surface. > every null/failure result. No unclassified scheduled > workflow silence is allowed.* -**Classification labels** (every `gh run list` result must -sort into one): +**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** β€” workflow file's first-commit-date From cbc541ef9cb6f8e29904577723d0cd66e3a2cb34 Mon Sep 17 00:00:00 2001 From: Aaron Stainback Date: Tue, 28 Apr 2026 16:52:59 -0400 Subject: [PATCH 3/4] fix(workflow-null-result memory): split combined label + add event-trigger label + scope Phase-1 to scheduled (3 PR #690 review threads) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three real findings on PR #690 review: 1. Codex P2 (line 223): Phase 1 said 'walk all .github/workflows/*.yml' but the class promotion is for SCHEDULED workflows specifically. Phase 1 scope corrected β€” non-scheduled workflows have different null-result semantics and require their own audit class. 2. Copilot (line 235): 6 labels didn't cover all 6 diagnostic questions. Specifically Q5 'event-trigger compatible' was missing. Now 7 labels with 1:1 mapping to Q1-Q6 + uncaptured-gap: - too-new-to-fire (Q1) - non-default-branch (Q2) - disabled (Q3) [split from prior 'disabled / non-default-branch'] - cron mismatch (Q4) - event-trigger incompatible (Q5) [NEW] - wrong workflow identifier (Q6) - uncaptured gap (file new B-NNNN) 3. Copilot (line 192): 'disabled / non-default-branch' combined label bundled two distinct root causes that were separated in the diagnostic questions. Split per (1) above. MEMORY.md index summary updated: '6 labels' β†’ '7 labels (1 per diagnostic question + uncaptured-gap); audit scope is scheduled workflows only'. --- memory/MEMORY.md | 2 +- ...flow_null_result_audit_amara_2026_04_28.md | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 8ed31dbf0..4e2e4c82c 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -52,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 + 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 6 labels. Tiny-blade caveat: 40% local rate β‰  global rate; "clean for this detector" β‰  "clean". +- [**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 7 labels (1 per diagnostic question + 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 < Date: Thu, 30 Apr 2026 14:01:07 -0400 Subject: [PATCH 4/4] =?UTF-8?q?memory(amara-class-name-scheduled-workflow-?= =?UTF-8?q?null-result):=20Copilot=20review=20fixes=20=E2=80=94=20label=20?= =?UTF-8?q?cardinality=207=E2=86=928,=20disabled-workflow=20criterion=20re?= =?UTF-8?q?po-activity-not-file-age?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses 4 P2 Copilot review threads on PR #690: 1. Label cardinality inconsistency β€” Phase 1 said 7-label set but the classification section enumerates 8 labels (known-row + Q1-Q6 + uncaptured-gap). Aligned to 8-label terminology in both the body and the MEMORY.md index entry. 2. Disabled-workflow criterion error β€” text said '60+ days no commits to the workflow' but GitHub's documented rule is '60 days of no repository activity'. Corrected in both occurrences (diagnostic question Q3 and classification label) with explicit note that the criterion is repo-level, NOT workflow-file-age. Substrate accuracy correction; underlying classes + tier-1 promotion unchanged. Aligns text with how Phase 1 implementations should read the rule. --- memory/MEMORY.md | 2 +- ..._workflow_null_result_audit_amara_2026_04_28.md | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/memory/MEMORY.md b/memory/MEMORY.md index 4e2e4c82c..994d45e17 100644 --- a/memory/MEMORY.md +++ b/memory/MEMORY.md @@ -52,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 + 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 7 labels (1 per diagnostic question + uncaptured-gap); audit scope is scheduled workflows only. Tiny-blade caveat: 40% local rate β‰  global rate; "clean for this detector" β‰  "clean". +- [**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 <