4f83305525
Add `specify` as a third co-equal entry path into the dev cycle: it produces an approved spec from already-settled sources (an exhaustive issue, a long in-context design discussion, or a design brainstorm just ratified) with review but no interview. This is the producing half of a deliberate deciding/producing split — `brainstorm` shrinks to optional discovery, `specify` becomes the sole spec-production gate before `planner`, mirroring the RED->GREEN split that keeps tdd/debug honest. What moved: - brainstorm/SKILL.md: stripped of the hard-gate, the acceptance criterion, write-spec, self-review, grounding-check, user-review, and planner-handoff steps; terminal state is now handing a ratified design narrative to specify. Steps renumbered 1-5 (production steps left). - specify/SKILL.md (new): the production core, with a precondition gate (Step 1.5) that bounces to brainstorm the moment the sources do not resolve a load-bearing decision — the same discipline tdd uses. - The grounding-check agent moved brainstorm/agents/ -> specify/agents/ (no-orphan-agents: it lives under its dispatcher), refs repointed. - boss/SKILL.md: Entry-path reflection is now three-way (tdd / specify / brainstorm). specify dispatches autonomously (bounded, no interview) and pauses at its user-review gate; only a fresh brainstorm cycle stays a pre-dispatch bounce-back. - pipeline.md, README, profile-schema, the profile template, and the migration layout updated so every pipeline rendering agrees; specify is a CORE node (not opt-in, unlike tdd) carrying gates: [planner]. Design alternative rejected: parallel sibling skills sharing a docs/spec-production.md (extract-to-doc). Chosen extract-and-chain instead — the shared surface is ~70%, so a shared doc would either become the skill body or drift; chaining keeps one executed home for the gates. Verification (prose repo, no test suite): the spec's internal- consistency grep suite (no two-path drift, no direct brainstorm->planner edge, specify referenced in every rendering, grounding-check single home under specify, specify structural completeness) all green. Orchestrator inspection additionally fixed two dead step-refs the plan under-scoped (a "(Step 4)" lift-validation pointer and a "Skipping Step 7 self-review" red flag, both pointing at steps brainstorm no longer has) and corrected six pre-existing brainstorm->planner renderings in pipeline.md and tdd that predated this cycle. Known follow-ups (non-blocking): the committed spec writes `skills/specify/` in places (typo; skill dirs are repo-top-level) — to be corrected separately. The grounding-check hard-gate was degenerate for this very cycle (this repo has no profile and no test suite); the skip is documented in the spec and the session.
81 lines
4.0 KiB
YAML
81 lines
4.0 KiB
YAML
# Project profile for the skills plugin.
|
|
#
|
|
# Drop a copy of this file at <project-root>/.claude/dev-cycle-profile.yml
|
|
# and edit. See ~/dev/skills/docs/profile-schema.md for the full schema
|
|
# and per-key documentation.
|
|
|
|
paths:
|
|
spec_dir: docs/specs
|
|
plan_dir: docs/plans
|
|
# glossary: docs/glossary.md # optional — if set, read as
|
|
# standing reading by every role
|
|
# design_ledger: docs/design/INDEX.md # optional
|
|
# design_contracts: design/contracts # optional
|
|
# design_models: design/models # optional
|
|
code_roots: [src]
|
|
# bench_dir: bench # optional
|
|
# public_interface: [README.md, docs] # what fieldtester may read; everything else is forbidden
|
|
# fieldtest_examples: examples/fieldtest # where fieldtester writes fixtures
|
|
|
|
naming:
|
|
counter_dirs: [docs/specs, docs/plans, design/contracts, design/models]
|
|
policy: stable_per_directory_4digit # stable_per_directory_4digit | date_prefix | flat
|
|
slug_separator: "-"
|
|
|
|
commands:
|
|
build: "" # REQUIRED — e.g. "cargo build" or "npm run build"
|
|
test: "" # REQUIRED — e.g. "cargo test" or "npm test"
|
|
# lint: "" # optional
|
|
# doc_build: "" # e.g. "cargo doc --no-deps 2>&1" — used by docwriter
|
|
regression: [] # list of shell commands run by audit; non-zero exit = regress
|
|
architect_sweeps: [] # optional project-specific architect sweeps; non-zero exit = drift suspicion
|
|
|
|
# spec_validation: # optional — fence label -> validator for spec code blocks
|
|
# parsers: # key = fence info-string; labels with no entry are skipped + documented
|
|
# ail:
|
|
# ext: ".ail" # extension for the temp file the harness writes the block into
|
|
# cmd: "ail parse {file}" # {file} = temp-file path; exit 0 = clean parse, non-zero = BLOCK
|
|
# ail-json:
|
|
# ext: ".ail.json"
|
|
# cmd: "ail check {file}"
|
|
|
|
vocabulary:
|
|
cycle: cycle # one round in the pipeline graph (NOT the top-level container)
|
|
subcycle: iteration # a sub-unit of a cycle
|
|
milestone: milestone # tracker container spanning many cycles; closes only when complete AND functional
|
|
ledger_entry: contract # what one design-ledger entry is called
|
|
|
|
standing_reading:
|
|
always:
|
|
- CLAUDE.md
|
|
- "git log -10 --format=full"
|
|
by_role:
|
|
# architect: [design/contracts]
|
|
# debugger: ["git log -5 --format=full"]
|
|
|
|
git:
|
|
main_sacrosanct: true
|
|
only_orchestrator_commits: true
|
|
protected_branches: [main]
|
|
issue_tracker:
|
|
kind: none # gitea | github | linear | none
|
|
close_marker: "closes #N"
|
|
# url: "" # human-browsable issue list URL
|
|
# list_cmd: "" # e.g. "tea issues ls --repo X/Y --state open"
|
|
|
|
notifications:
|
|
# command: "" # e.g. "~/.claude/notify.sh"; boss falls back to chat if empty
|
|
|
|
pipeline:
|
|
brainstorm: { gates: [specify], optional: true } # optional discovery; skipped when design is settled
|
|
specify: { gates: [planner] } # core node: spec-production gate before planner
|
|
planner: { gates: [implement] }
|
|
implement: {}
|
|
audit: { mandatory_at: cycle_close }
|
|
debug: { trigger: bug, red_first: true }
|
|
# tdd: { trigger: test_specifiable_feature, red_first: true, alt_to: brainstorm } # opt-in: executable-spec-first entry, alternative to brainstorm
|
|
# boss: { user_invoked: true } # autonomous orchestrator mode, /boss
|
|
# fieldtest: { boss_only: true, when: surface_touch } # per-cycle usability test
|
|
# milestone_fieldtest: { boss_only: true, when: surface_touch, gates_close: milestone } # closing gate: end-to-end proof of the milestone's promise
|
|
# docwriter: { boss_only: true, when: api_stable_across_n_cycles }
|