ADLC
Toolkit

coldstart

A cheap-tier LLM plays a fresh agent and lists every human-only question a ticket leaves unanswered before the build queue.

coldstart

ADLC phase: P2 Decompose · Gate: every ticket is self-contained: no human-only questions remain before it enters the build queue.

The ADLC lifecycle, with P2 highlighted. Read the theory for P2

What it defends against

F3: Context rot (theory ↗)

A build agent that starts on an under-specified ticket loses the plot fast: it guesses at missing shapes, invents contracts, and drifts. coldstart runs the check up front. A cheap-tier model plays a fresh agent with no prior context and lists every question it would have to ask a human before it could start. Information derivable from the repo does not count; only genuine gaps (undefined schemas, absent contracts, unverifiable criteria, vague scope) block the gate.

Usage

adlc coldstart <ticket-id> [options]
adlc coldstart --all [options]
FlagDescription
--tickets <path>Path to the tickets file (default .adlc/tickets.json).
--allRun the gate on every ticket in the file.
--tier cheap|mid|frontierModel tier (default cheap).
--jsonMachine-readable JSON output for orchestrators.
--prompt-onlyPrint the exact prompt(s) and exit 0 without making an LLM call.
--record-verdict <file|->With --prompt-only: record the operator's answer into .adlc/manifest.jsonl via gate-manifest. Requires --prompt-only.

Exit codes

0: gate passes. Ticket(s) are fully executable.1: operational error (bad input, unknown ticket id, missing file, no provider).2: gate fails. One or more tickets have gaps (printed per ticket).

Verdict shapes

The auditor is asked to reply {"gaps": [...]}. A bare array ([{"what": …, "why_blocking": …}], the most common model deviation) is accepted as the gaps list, and a string entry is wrapped as {"what": "<text>", "why_blocking": "unspecified"}. Anything else is not a pass: {}, {"result": "ok"}, {"blockers": [...]}, {"gaps": null}, {"gaps": "two gaps found"}, or an entry without a string what exits 1 with coldstart: unreadable executability verdict — … — the verdict could not be read, so nothing is recorded or cached, and a previously cached entry with an unreadable gaps is skipped rather than served (issue #594).

Example

$ adlc coldstart T2
 T2 1 gap
  - UserSchema: shape referenced in body but not defined
exit 2

Go deeper

packages/coldstart · Why executable tickets matter as much as specs: Tests Are the Spec.

On this page