Development record
abcd-gates-a-new-idea-before-it-becomes-a-record-entry-resea
Summary
spc-18 delivers itd-104's idea-admission protocol: /abcd:ideate, an
optional three-leg gauntlet — primary-source research, a record grill, and an
independent adversarial review — whose outcome is a registered verdict with
rejected alternatives, recorded whether the idea survives or dies. Only a
survivor graduates to a draft intent. The design decisions below were settled
by the 2026-07-27 grill; this spec records them together with the mechanism —
it does not reopen them.
Settled constraints (from the grill)
- Optional verb, never a gate. Capture friction stays at one line: no ideate step is required or suggested as blocking by the intent or capture verbs. The routing help carries the nudge — ideate is named for big, unproven ideas.
- The adversarial leg codifies fresh-context, off-policy, unknown authorship — the evaluator did not do the research and receives the idea as an artefact of unknown authorship. This is the only measured debiasing effect, per the salvaged 2026-07-14 research record, and it is the evaluator-outside-the-loop principle applied to ideas.
- Two load-bearing steps survive automation (from the proven manual run): check the record first, and open the primary source.
Mechanism
Division of labour
Ideate follows the host-delegated pattern the disembark family proved: the host runs the judgement legs as agents; the abcd binary is the deterministic frame that scaffolds the run, validates the legs' outputs, and writes the record. The binary never does LLM work; the host never writes the record directly.
The three legs, in order
- Primary-source research. A host agent researches the idea's load-bearing claims, each checked against its primary source — a claim carries its primary URL or document reference, never only a secondary citation. Output: a claims table (claim, primary source, verified / falsified / unverifiable).
- Record grill. A host agent reads the existing record — brief, intents (all buckets), ADRs, principles — and answers: does an entry cover, contradict, or supersede this idea? Every hit is cited by record id. The binary validates at ingest that every cited id resolves in the repository — a verdict citing a non-existent record is refused.
- Adversarial review. A fresh-context agent, off-policy, receiving the idea and the two earlier legs' outputs as artefacts of unknown authorship, tries to kill the idea. It did not conduct the research (evaluator outside the loop).
Verdict record (spec-time decision)
The verdict is a dated research record:
.abcd/development/research/YYYY-MM-DD-ideate-<idea-slug>.md, written by the
binary from a structured verdict the host supplies
(abcd ideate record <idea-slug> --verdict-json <file>). It contains the
idea as captured, the three legs' findings, the verdict
(survives / killed / reframed), the rejected alternatives, and — for record
grill hits — the cited record ids. A one-line dated entry in
.abcd/work/DECISIONS.md points at it. No new record family: killed ideas
are research outcomes, and the research directory is where a future session
looks before re-proposing one. A surviving idea graduates through the
existing quoted-text intent create — ideate mints no intents itself.
Wiring
Both planes at delivery: the abcd ideate verb family (CLI) and the
/abcd:ideate skill (commands/abcd/ideate.md) that orchestrates the three
legs and feeds the verdict to the binary. The routing help in the intent and
capture surfaces names ideate as the optional path for big, unproven ideas —
a pointer, never a precondition.
Acceptance-criteria mapping
- AC 1 (never blocking; routing help names it) → Settled constraints + Wiring.
- AC 2 (three legs in order; adversarial leg fresh-context, off-policy, unknown authorship) → The three legs.
- AC 3 (decision recorded with rejected alternatives either way; only survivors graduate) → Verdict record.
- AC 4 (record-grill hits cited by id, validated) → The three legs + Verdict record.
Out of scope
- Consuming a lifeboat or external document as the idea source (open question retained; the idea arrives as quoted text in this spec).
- Any change to capture or intent-create flow beyond the routing-help text.
- Automation of the legs inside the binary — the legs are host agents by boundary; the binary validates and records.
Frontmatter
| id | spc-18 |
|---|---|
| type | spec |
| lifecycle | closed |
.abcd/development/specs/closed/spc-18-abcd-gates-a-new-idea-before-it-becomes.md
open on GitHub ↗ · commit history ↗
References1
- itd-104**abcd gates a new idea before it becomes a record entry: research it against primary sources, grill it against the existing record, and let an independent adversary try to kill it.** A product thinker's exciting idea is cheapest to kill in its first hour — and most expensive to kill after it has minted intents, specs, and branches. `/abcd:ideate` runs the admission interview: SOTA research in which every load-bearing claim is checked against its primary source; a record grill — does the brief, an intent, an ADR, or a principle already cover, contradict, or supersede this?; and an independent adversarial review, evaluator outside the loop. The output is a verdict plus a recorded decision with rejected alternatives; only a surviving idea graduates to a draft intent. The protocol is already proven by hand: three ideas entered it on 2026-07-14 — two were killed (one by a measured null result its premise could not survive, one by three independently fatal methodological defects) and one was reframed by adversarial review before a line was built. The manual run also named the two load-bearing steps automation must keep: check the record first (one idea was already written and superseded), and open the primary (three secondary-source claims were falsified, one of them fabricated by tool extraction). "The ideas I'm proudest of are the ones abcd killed in an afternoon," said Iris, a product thinker. "Each one left a recorded reason behind, so I never talk myself back into them six months later."implements
mentions3
- dcn-26072800000000042026-07-28: itd-104 spec minted as spc-16 (third live iss-80 instance this run: 16 collided with #156, 17 with the itd-101 branch); renumbered to spc-18 by hand.
- dcn-26080300000000022026-08-03 — iss-42, CORRECTION to the entry immediately above and three fixes from a fresh adversarial correctness review. (1) That entry claimed two banned_tokens entries made both stalenesses "non-silent on reintroduction". The `phantom-research-spikes` half did not: its pattern was the literal string `research/spikes`, which never occurs in the prose it was meant to catch — the record map spells the row as two separate backtick spans (`notes/` ... `spikes/`), so restoring the exact original stale line left record-lint at zero blockers. The claim was written from reading the pattern instead of reproducing the defect, which is the failure the detector-first rule exists to prevent, and the lesson is that a ban's acceptance test is the original line, not the pattern's plausibility. The fix is not a wider regex: ADR-30 and the dated go-rebuild plan carry the same prose shape legitimately, and no pattern separates the living index from the two historical records without an escape they must not be edited to carry. So the row is GATED instead, per iss-38's "delete or gate, never correct and leave hand-kept" — an `index_drift` region over the row holds it to `research/`'s actual subdirectories, which catches every spelling of a phantom child AND a real child the row omits, and fails closed if the region is deleted. (2) `abcd ideate record` wrote its dated verdict record to `research/` root, making the shipped binary the standing producer of the very convention violation this item cleared out of that directory by hand; `ResearchRelDir` now points at `research/notes/`. spc-18's rationale ("killed ideas are research outcomes, and the research directory is where a future session looks") argues for the research area, not its root, and a verdict record is by spc-18's own words a dated research note — so `notes/` is where the record's convention already put it. The CLI surface test asserted the path through the constant, so it would have followed the constant anywhere; it now asserts the literal directory. (3) The rewritten trust caveat over-claimed `surface_coverage`: the rule reads `commands_dir` and `skills_dir` only, while the crosscheck manifest's Direction B enumerates five surface kinds, so the agent, hook, and CLI-verb surfaces are periodic-pass-only. A caveat whose entire job is saying how much is machine-enforced must not overstate it — the same phantom-enforcement class iss-40 flagged — and the wording now names the two surfaces the structural check actually covers.
- itd-49Flow-State Drift Becomes Visible Before It Compounds