cc-os/plugins/os-sdlc/reference/never-ask-twice.md

8.4 KiB

never ask twice

Status: settled — grilled 2026-07-18 Connects to: self-improvement-loops, spec-and-ticket-layer, standards-and-conventions, horizon, overview

Purpose

The agency mechanism, and the most important node in this reference set. States the operating principle that lets the factory earn autonomy over time instead of asking the human the same question on every run. Load this before designing any human-input point in the ideation phases (grill / to-spec / to-tickets), or any spec-gap handling in the pipeline. Formalized 2026-07-18 in its own cross-plugin ADR (see Sources).

Design (settled 2026-07-18)

  • Operating principle: the factory never asks the human the same question twice. Trust is earned in units, and every unit is made durable and reusable. Goal state: the human is only presented options when the factory genuinely needs direction — not because a decision that was already made once was forgotten.
  • Home: the ideation phases, not the implementation pipeline. Questions to the human belong in grill / to-spec / to-tickets; by the time tickets exist, all decisions are made and implementation is nearly mechanical, with standards and conventions baked into lint rules and agent prompts/reference material (standards-and-conventions). The pipeline keeps one thin safety valve: a spec gap surfacing mid-implementation is a defect in the ticket — the run fails back to the spec layer (where the answer gets minted into the ticket/records), never an inline chat ask. "All decisions made by to-tickets" is the target state the system converges toward, not an assumption it depends on.
  • No new storage system and no literal decision-tree engine. The "tree" is the existing ADR corpus plus vault conventions; os-sdlc adds only wiring on top of os-adr and os-vault. Three thin pieces:
    1. Two-tier lookup as a pre-pass. When a grill / to-spec / to-tickets session loads its target, it runs one batched lookup pass — /os-adr:find over the repo's ADRs, then /os-vault:query over the relevant domain//tool//convention/ facets — and drafts questions against that corpus: a question already answered by a record never gets drafted; the record gets cited instead. Topic-shift rule: if the interview moves outside the pre-pass scope, re-run the lookup for the new topic before asking.
    2. Mint in batch at settle. Answers accumulate during the interview in a running decisions-so-far list (the crash/resume mitigation); at the settle step the skill proposes a scope classification for the whole batch ("these are repo ADRs, this one generalizes → vault convention — confirm/amend"), the human confirms once, and it mints everything. The session is not complete until the mint pass has run — an answered-but-unrecorded question is the failure mode this whole mechanism exists to prevent.
    3. Promotion by audit, not memory. A decision minted local that later blocks a second project is a recurrence — visible in session/spec-gap exhaust, not tracked live. Periodic audits (owned by self-improvement-loops) see the recurrence and promote the answer to a vault convention. Promotion and demotion happen only in audits, never mid-run; the cadence is self-improvement-loops' decision.
  • ADR↔convention delineation: conventions are defaults that hold until overridden; ADRs are project-local adoptions of, or deviations from, them. Worked example: "always use Devise for Rails auth" is a vault convention note (convention/rails, tool/devise, domain/authentication), not an ADR anywhere; the client project that can't use Devise records a repo ADR deviating from the convention, linking it. The mint-time scope question and the audit are the only boundary machinery — no dedicated promotion skill, no new taxonomy (the six flat ADR-011 facets are the domain organization the grill pre-pass queries).
  • Two-state readiness, not three-tier autonomy. The former hitl/semi/afk-ready decision-category labels are retired (superseding ADR in Sources): the semi/hitl boundary had no operational test, and artifact/PR review already delivers proceed-and-flag for free. In their place:
    • Coverage is two-state. A decision category is either covered (a record exists → proceed and cite it in the artifact, where review catches mistakes) or uncovered (ask). Coverage is the record's existence — no label field, no config surface.
    • Tickets are two-state, adopting Matt Pocock's triage vocabulary: ready-for-agent ("fully specified — an agent can complete it without asking", falsifiable in production: an agent that asks or bounces proves the label wrong) and ready-for-human. A ticket that is neither is under-decomposed — split it into ordered agent/human parts, agent parts first where dependencies allow — never labeled into limbo. This replaces the autonomy trio in os-backlog's label taxonomy (migration of existing tickets tracked as a follow-up issue).
  • Honest limit: this mechanism guarantees the plumbing — a decision recorded once is findable everywhere it applies — not the judgment that the agent applies the right convention in an ambiguous case. Judgment quality is proven only by accumulated audits. Expect the ask-rate to fall as the convention corpus grows and coverage widens; a mis-minted convention gets caught at artifact review or demoted by audit, with the ADR trail showing exactly which decision went wrong and why.
  • Mobbin (mobbin.com, a design-pattern reference library) as a future pre-seeded convention library for UI-flow decisions — pre-seeding makes a category covered from day one. Horizon-scoped (see horizon), but validates that the coverage frame generalizes to externally-sourced conventions, not just self-mined ones.
  • This mechanism spans os-sdlc, os-adr, os-vault, and os-backlog jointly; formalized in its own ADR (see Sources) rather than owned by any single plugin.

Resolved 2026-07-18 (grill)

  1. Home — ideation-primary; pipeline keeps only a fail-back-to-spec-layer valve for ticket defects; never inline asks mid-implementation.
  2. Lookup mechanics — one batched pre-pass at session load + topic-shift re-lookup, not per-question inline lookups.
  3. Delineation — mint-time scope question + audit promotion are the entire ADR↔convention boundary; no dedicated promotion machinery.
  4. Mint mechanics — batch at settle with a running decisions list; session incomplete until minted.
  5. Labels — three-tier autonomy retired for two-state coverage (records) and two-state readiness (tickets, ready-for-agent/ready-for-human); under-decomposed tickets get split, not a third label. Existing-ticket migration is a tracked os-backlog follow-up.
  6. Audit cadence — contract fixed here (audit-only promotion/demotion, never mid-run); the cadence number is deferred to self-improvement-loops.
  7. Formalization — two ADRs minted at settle: the cross-plugin never-ask-twice mechanism, and the superseding label-taxonomy change.

No open questions remain in this doc. The former "block-report format" question dissolved with the reframe: a mid-implementation gap is a ticket defect routed to the spec layer, and its report format belongs to spec-and-ticket-layer / pipeline-stages, not here.

Sources

  • ADR-0037 (docs/adr/0037-os-sdlc-lives-inside-cc-os-as-a-new-plugin-not-a-separate-cc-sdlc-marketplace.md)
  • Never-ask-twice formalization ADR + label-taxonomy superseding ADR (minted 2026-07-18 at this grill's settle; see docs/adr/README.md index)
  • Matt Pocock's /triage skill (two categories, five states incl. ready-for-agent / ready-for-human) — vocabulary source for two-state readiness
  • os-adr find/create skills; os-vault query/write skills; os-backlog ten-label taxonomy (plugins/os-backlog/skills/route/SKILL.md)
  • SecondBrain vault: taxonomy/ladder note (referenced by horizon)
  • mobbin.com (design-pattern library, horizon reference)
  • 2026-07-16 design session (this doc's origin); 2026-07-18 grill (this settle)