Skip to content

Decision 017: Add an optional brainstorm phase (the root artifact) before requirements

  • Status: accepted
  • Date: 2026-07-04
  • Deciders: @MadaraUchiha-314 (issue #17)
  • Work item: issue-17

Context

the-loop starts a work item at requirements.md. But some work starts as a fuzzy idea that isn't ready to be pinned down as EARS acceptance criteria yet — it needs a scratchpad to explore the problem, weigh options, and converge before requirements make sense. Issue #17 asked for a brainstorm.md and a /brainstorm command, and — more importantly — framed a general principle: feedback and iteration should happen on every artifact derived from the root artifact, and the loop should only advance once the current artifact is locked down.

Decision

Add brainstorming as an optional Phase 0 whose deliverable, brainstorm.md, is the root artifact the rest of the chain derives from:

brainstorm.md (optional, root) → requirements.md → design.md → tasks.md → implementation

Concretely:

  • New template .the-loop/templates/brainstorm.md — a deliberately free-form scratchpad (problem, options incl. rejected ones, open questions, working hypothesis, hand-off). Tracked in the manifest as an optional work-item artifact (spec-brainstorm, phase brainstorming).
  • New command /the-loop:brainstorm <title> — creates brainstorm.md in the pre-ticket docs/specs/draft-<slug>/ folder and iterates it until locked.
  • Conversion/the-loop:new-requirement reads a sibling brainstorm.md (when present and locked) and derives requirements from it rather than starting blank; /the-loop:create-ticket promotes the brainstorm along with the rest of the folder.
  • State machinebrainstorming is inserted after not-started in workflow.phases (schema default, both config.yaml files). It is optional: a well-defined work item transitions straight to requirements-definition.
  • Generalized rule — "iterate each artifact with feedback until it is locked (status: approved), then derive the next and advance" is documented as a first-class operating principle (SKILL.md, reference/workflow.md, work-on), applied at every link of the chain, not just requirements.

Consequences

  • Fuzzy work gets a first-class home to converge before requirements, reducing churn in requirements.md from half-formed ideas.
  • The loop's central idea — feedback + iteration per artifact, advance only when locked — is now stated once and applied uniformly, with the brainstorm as the visible root.
  • Backwards compatible: brainstorming is optional and additive; existing work items and specs are unaffected (no brainstorm.md ⇒ start at requirements, exactly as before).
  • One more (optional) artifact and phase label to understand; mitigated by making it clearly optional everywhere it appears.

Alternatives considered

  • Fold brainstorming into requirements.md (a "scratch" section) — rejected: mixes exploratory, throwaway thinking with the locked contract; the point is a separate root artifact whose rejected options remain the record without polluting requirements.
  • Make brainstorming mandatory — rejected: most well-scoped work items don't need it; forcing it adds ceremony. Optional keeps the fast path fast.
  • A standalone /convert-brainstorm command — rejected as redundant: conversion is exactly "produce requirements from prior context", which is what new-requirement already does; teaching it to read a sibling brainstorm avoids a second command.

Released under the MIT License.