brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
retrospectiveAudit whether prior learnings actually fired, then install mechanisms for this run's recurrences. No finding without an install path and a firing test. Triggers: retrospective, reflect, what did we learn, patterns, post-mortem, why does this keep happening.
Independent GitHub snapshot · Automated classification · Original documentation governs
A follow-through audit of every retrospective, chronicle, plan and report in the Vaults counted
24 promised fixes: 15 live, 9 dead or never built. The worst mistake class, unverified claims
reaching a human, had been written up 11 separate times, and both of its proposed fixes were
still unbuilt. Meanwhile improvement-gate.sh, the hook that enforced "every run improves the
system that does the work", was retired 2026-07-28 and nothing ever replaced it.
The old version of this skill was not badly reasoned. Its nine lenses were sharp. It failed for one structural reason: every output was a ledger row, and a ledger row enforces nothing. A lesson written to a ledger that nothing reads at the moment of action is a gravestone with better formatting.
So version 3 inverts what this skill is for.
| v2 | v3 | |
|---|---|---|
| primary question | what did we learn | did the last learnings actually fire |
| output | ledger rows | installed mechanisms, or an explicit accepted-no-mechanism row |
| when learning happens | here, at end of run | at error time, by error-loop.py; here only for what error time cannot see |
| a finding with no mechanism | acceptable | REFUSED, or recorded as explicitly accepted with a reason |
This skill is no longer the primary learning mechanism, and must not be treated as one.
Error-time closing belongs to _meta/services/error-loop.py, which opens a defect the moment a
gate we own fails and refuses the next commit until a lesson or a waive is recorded. That catches
the single instance while the cause is still warm.
What error-time closing structurally CANNOT see is recurrence across runs: the same mistake in different clothes, three independent reinventions of one missing primitive, a guard that has been quietly dead for six weeks. That, and only that, is what this skill is for.
Proportionality is a hard rule, not a preference. Aria has named the failure out loud: "overengineering the fuck out of this". A retrospective longer than the work it describes is a defect. If phase 0 finds nothing dead and phase 2 finds no recurrence, the correct output is four lines saying so.
<on_start> agentdb read-start agentdb recall "<the run's concrete nouns: files, symbols, error text>" for L in beliefs patterns anomalies questions; do tail -20 "_meta/ledgers/$L.jsonl" 2>/dev/null; done python3 _meta/services/error-loop.py list # anything still open from error time? ls -t _meta/reports/retrospective-*.json 2>/dev/null | head -3 </on_start>
A run that adds a new promise while an old one lies dead has made the problem worse, so this phase runs first and cannot be skipped.
mechanisms[] and the last 20 rows of each ledger.settings.json hook chain, orjobctl registry entry that launchctl list actually shows loaded, orOUTPUT: followthrough[], one row per prior mechanism with {name, verdict, invoked_by, evidence},
plus the four counts. A phase 0 with no counts did not run.
STOP CONDITION: if anything is DEAD or a REGRESSION, fixing or formally retiring it takes priority over every new lesson below. Report that and act on it first.
Reason from artifacts, never from recollection. Pull git log and the diff, reverted commits and
abandoned branches, failed test runs, guard refusals, escalations, receipts and verdicts, and the
error-loop.py entries opened this run.
Guard refusals are the highest-signal item in that list and the most commonly discarded. A hook that refused something recorded a mistake a machine could already see; that is a finished experiment, free of charge.
OUTPUT: a quotable evidence list. Anything not traceable to a commit, a log line, a receipt or a
recorded decision is marked inference, never finding.
Single instances were already handled at error time. This phase looks ACROSS runs, which is the one thing no error-time hook can do.
prediction -> reality -> evidence.preserve_until_condition; do NOT resolve an anomaly you had to reach for an explanation
for. Anti-convergence is load-bearing: a weird result kept alive unexplained for three runs
is worth more than a tidy story now.OUTPUT: recurrences[] with {class, instances[], dates[], prior_promises[]} and at most two
lens artifacts.
This phase is why the skill exists. Everything above is input to it.
A recurrence leaves this phase in exactly one of two states. There is no third.
failure_class: what it refuses, stated as a class not an instanceinstall_path: the real file, and what invokes it, proven by greprefusal_condition: exactly when it says nofiring_test: the one-line command that makes it fire, RUN, with its output pasted{class, why_no_mechanism, who_accepted, revisit_when}. An honest
accepted row is a good outcome. A silent omission is not.Rules that hold without exception:
improvement-gate.sh died.continue in a function that accumulates a verdict is the tell. A new fault state may
displace the healthy state and nothing else.Test discipline, measured 2026-09-03: of about 40 test suites examined, 4 had any receipt of ever catching a real defect, and roughly 36 were wired to nothing at all. So a test earns its keep only when BOTH hold: something runs it without a human remembering to, and it names the specific defect class it exists to catch, proven by failing against the broken state first. If you cannot name the observed defect, do not write the test.
OUTPUT: mechanisms[], every row INSTALLED with a pasted firing test or ACCEPTED with a reason.
A row that is neither is a defect in this report.
_meta/reports/retrospective-<date>.json as kernel.retrospective-result/v2, carrying
followthrough[], the four counts, recurrences[], mechanisms[], and the lens artifacts.
mechanisms[] is what the NEXT run's phase 0 audits, so name each one exactly as installed.agentdb learn for anything that must fire during future work rather than at the next
retrospective. Concrete nouns; a lesson nobody can recall is not stored._meta/services/chronicle-triage.sh computes. Not the tier you feel.OUTPUT: the report path, the four counts, and the count of mechanisms installed versus accepted.
<failure_modes> Each of these actually happened. They are not hypotheticals.
improvement-gate.sh, retired with no successor.