Skip to content

Add /craftsman:discover requirements interview (0.10.0) - #8

Merged
bufferBrew merged 2 commits into
mainfrom
feat/requirements-discovery
Jul 26, 2026
Merged

Add /craftsman:discover requirements interview (0.10.0)#8
bufferBrew merged 2 commits into
mainfrom
feat/requirements-discovery

Conversation

@bufferBrew

Copy link
Copy Markdown
Owner

What

Adds /craftsman:discover <vague idea> — a requirements-discovery interview that turns an underspecified request into a numbered, testable spec — plus the read-only requirements-analyst agent that grounds its questions in the codebase, and a deep mode for the ideation-first skill.

Why

Turning a vague idea into something plannable had only one path: the shallow end of ideation-first — 3–5 questions and a three-line brief, with no way to invoke it deliberately. A substantially open request ("build a notifications system") got the same treatment as a merely fuzzy one, and the planner ran against guesses either way.

The work is split across two surfaces because of a hard constraint: a subagent cannot conduct an interview. It gets one cold prompt and returns one result — which is why orchestrator already has to bounce underspecified features back to its caller. So the interview runs in the main thread as a command, and only the half a subagent is genuinely good at (reading the codebase) is delegated.

ideation-first now runs at two depths. Quick is unchanged and still the default. Deep asks in 3–4 sequenced rounds of 2–4 questions rather than one per turn — one at a time is right for five questions and punishing for fifteen, and what that rule protects (later questions adapting to earlier answers) survives in sequenced rounds.

Deep mode carries an explicit "expand the questions, bound the scope" rule. Without it, raising error states and migration paths would have quietly contradicted smallest-change-first: a deep interview should end with the same scope as a quick one, held with more confidence and a longer out-of-scope list.

The Scope brief is still emitted at both depths and remains the machine handoff the planner and the ideation gate consume; the spec file is additive.

Also fixes a pre-existing bug in a separate commit: session-start announced "Seven skills" and "Five commands" (actual: 8 and 6) and omitted ui-craft and /craftsman:orchestrate from its lists, so every session started without being told two components existed. CI missed it — the count validator skips any line containing "commands" when checking skills, and only matches the literal phrase "N slash commands" for commands; the whole reminder is one line reading "Five commands", so it evaded both checks.

Tested

claude plugin validate --strict ./craftsman-plugin  -> "✔ Validation passed"
Actual: 15 agents, 8 skills, 7 commands             -> COUNTS: OK (no mismatches)
Frontmatter parses for every agent/skill/command    -> OK
codespell over prose paths                          -> clean
bash -n on session-start + userpromptsubmit-task-router -> OK
session-start emits valid JSON; router emits one nudge naming /craftsman:discover
bash craftsman-testbed/run-checks.sh -> 7 passed, 0 failed
Versions: plugin.json 0.10.0 / marketplace.json 0.10.0 in sync

One real failure caught during verification: the new ideation-first description contained an unquoted two depths: colon, which broke the YAML. That silently drops all frontmatter at runtime rather than erroring — the exact failure the README warns about. Quoted and re-verified.

Checklist

  • claude plugin validate --strict ./craftsman-plugin passes locally
  • CI (validate.yml) is green
  • Agent/skill/command counts updated in README(s)
  • CHANGELOG updated, version bumped in both manifests

🤖 Generated with Claude Code

kartikjain-repo and others added 2 commits July 26, 2026 16:20
The SessionStart reminder announced "Seven skills" and "Five commands"
when the plugin has had eight and six since 0.9.0, and its lists omitted
ui-craft and /craftsman:orchestrate entirely — so every session started
without being told two components existed.

CI never caught this. The count validator skips any line containing
"commands" when checking skill counts, and only matches the literal
phrase "N slash commands" for command counts. The whole reminder is a
single line reading "Five commands", so it evaded both checks.

The PR template's example output was stale on two counts as well
(5 commands, 2 hook events; actual: 6 and 4).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Turning a vague idea into something plannable had only one path: the
shallow end of ideation-first — 3-5 questions and a three-line brief,
with no way to invoke it deliberately. A substantially open request
("build a notifications system") got the same treatment as a merely
fuzzy one, and the planner ran against guesses either way.

Split across two surfaces because of a hard constraint: a subagent
cannot conduct an interview. It gets one cold prompt and returns one
result, which is why orchestrator already has to bounce underspecified
features back to its caller. So the interview runs in the main thread as
/craftsman:discover, and only the half a subagent is genuinely good at —
reading the codebase — is delegated to the new read-only
requirements-analyst, which drafts questions grounded in file:line
evidence with an assumption default each, so the interview never stalls.

ideation-first now runs at two depths. Quick is unchanged and still the
default. Deep asks in 3-4 sequenced rounds of 2-4 questions rather than
one per turn — one at a time is right for five questions and punishing
for fifteen, and what that rule protects (later questions adapting to
earlier answers) survives in sequenced rounds. It ends by writing a
numbered spec, proposed and confirmed first, per the same
ask-before-writing rule /craftsman:init follows.

Deep mode carries an explicit "expand the questions, bound the scope"
rule. Without it, raising error states and migration paths would have
quietly contradicted smallest-change-first: a deep interview should end
with the same scope as a quick one, held with more confidence and a
longer out-of-scope list.

The Scope brief is still emitted at both depths and remains the machine
handoff the planner and the ideation gate consume; the spec file is
additive.

Verified: claude plugin validate --strict -> "Validation passed";
counts check reports 15 agents, 8 skills, 7 commands with no mismatches;
frontmatter parses for every agent/skill/command; codespell clean;
bash -n on both hooks; router emits one nudge naming /craftsman:discover;
testbed checks 7 passed, 0 failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@bufferBrew
bufferBrew merged commit e6b9e60 into main Jul 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants