nWave/skills/nw-discuss/SKILL.md
Conducts Jobs-to-be-Done analysis, UX journey design, and requirements gathering through interactive discovery. Use when starting feature analysis, defining user stories, or creating acceptance criteria.
npx skillsauth add nwave-ai/nwave nw-discussInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Wave: DISCUSS (wave 2 of 6) | Agent: Luna (nw-product-owner) | Command: /nw-discuss
Execute DISCUSS wave through Luna's integrated workflow: JTBD analysis|UX journey discovery|emotional arc design|shared artifact tracking|requirements gathering|user story creation|acceptance criteria definition. Luna uncovers jobs users accomplish, maps to journeys and requirements, handles complete lifecycle from user motivations through DoR-validated stories ready for DESIGN. Establishes the acceptance-test foundation.
For greenfield projects (no src/ code, no docs/feature/ history), Luna proposes Walking Skeleton as Feature 0.
Provenance: feature lean-wave-documentation — D2 (schema-typed sections), D10 (one-line expansion descriptions), DDD-7 (DISCUSS pilot wave), D6 (install-time pedagogical prompt). Tier-1 [REF] sections (always emitted) + Tier-2 EXPANSION CATALOG items (lazy, on-demand) are the two output bands. Full contract: nWave/skills/nw-density-resolution-contract/SKILL.md.
Under ## Wave: DISCUSS / [REF] <Section> headings:
Rendered under ## Wave: DISCUSS / [WHY|HOW] <Section> only when requested via --expand <id> (DDD-2), the wave-end menu (expansion_prompt = "ask" or "ask-intelligent"), mode = "full" auto-expansion, or an ad-hoc user request mid-session.
| Expansion ID | Tier label | One-line description |
|---|---|---|
| jtbd-narrative | [WHY] | Full JTBD analysis: job dimensions (functional/emotional/social), four forces, opportunity scores |
| persona-narrative | [WHY] | Extended persona: goals, frustrations, mental model, vocabulary glossary |
| alternatives-considered | [WHY] | Decision rationale: alternatives weighed and rejected per locked decision |
| migration-playbook | [HOW] | Step-by-step migration guide for users on a prior version |
| journey-deep-dive | [HOW] | Full UX journey: emotional arc, shared artifacts registry, error-path map |
| gherkin-scenarios | [HOW] | Generated Gherkin scenarios covering happy path and key error paths |
| reviewer-findings-trace | [WHY] | R1-R10 reviewer findings chain with verdicts and how each landed in D1-D10 |
| expansion-catalog-rationale | [WHY] | Why this set of expansions, why these defaults, why D10 enforces one-line descriptions |
Call resolve_density(global_config) from scripts/shared/density_config.py after reading ~/.nwave/global-config.json (missing/malformed = empty dict). Returns mode ("lean" | "full") + expansion_prompt ("ask" | "ask-intelligent" | "always-skip" | "always-expand" | "smart") per the D12 cascade (resolver-internal, DDD-5 — do NOT replicate locally). DISCUSS hard default is lean+ask-intelligent per Decision 4 (2026-04-28). Branch on density.mode (lean = Tier-1 only; full = Tier-1 + all Tier-2) and at wave end on density.expansion_prompt. Full cascade detail, branch semantics, ad-hoc override workflow: nWave/skills/nw-density-resolution-contract/SKILL.md.
ask-intelligent mode, per Decision 4)DISCUSS-specific extension on top of the shared contract. When expansion_prompt = "ask-intelligent", evaluate ALL triggers below against the wave artifacts produced so far. Each trigger that fires contributes its suggested expansion to a scoped menu. If NO trigger fires, emit no menu — strict lean output.
| Trigger | Detection criterion | Suggested expansion |
|---------|--------------------|--------------------|
| AC ambiguity | ≥2 user stories share an AC where reasonable readers could disagree on the outcome | gherkin-scenarios |
| Cross-context complexity | Feature touches ≥3 bounded contexts (per DDD glossary) OR ≥3 distinct technologies | alternatives-considered |
| Multi-stakeholder need | ≥3 distinct personas referenced across the user stories | persona-narrative |
| Compliance / regulatory | ACs reference regulatory terms (GDPR, HIPAA, SOX, audit, retention, encryption, PII, data residency) | migration-playbook (data migration) OR journey-deep-dive (user-facing) |
| WS strategy = D | Walking Skeleton strategy is "Configurable" (env-switching) | alternatives-considered |
Menu when 1+ trigger fires: Suggested expansions for this feature (triggered by: {trigger names}): - {id}: {description} ... Apply? [Y/n/all/none/custom]. Do NOT show the generic 8-item Tier-2 catalog in ask-intelligent mode — only triggered items. Ad-hoc override path ("expand <X>") still works for any catalog item. Telemetry: one event per scoped-menu choice; when NO trigger fires, one choice = "skip" event with expansion_id = "*" records the silent-lean opportunity.
Every expansion choice emits a DocumentationDensityEvent (dataclass at src/des/domain/telemetry/documentation_density_event.py) via event.to_audit_event() → JsonlAuditLogWriter().log_event(...). Schema fields per D4: feature_id, wave, expansion_id, choice, timestamp. For this wave the schema declares "wave": "DISCUSS". Use helper scripts/shared/telemetry.py:write_density_event(...) — do NOT write JSONL directly.
Wave-specific signal: feeds DDD-7 pilot success metric (4) — "downstream agent regression — DESIGN consumes lean DISCUSS feature-delta.md and produces no --expand invocation". ask-intelligent emission rules: one expand event per scoped-menu acceptance; one skip event for no-trigger silent-lean; one skip event for triggers fired but user declined. Full emission rules + per-mode patterns: nWave/skills/nw-density-resolution-contract/SKILL.md.
Question: What type of feature is this? Options:
Question: Should we start with a walking skeleton? Options:
Question: Priority for UX research depth? Options:
Question: Include Jobs-to-be-Done analysis? Options:
job_id in docs/product/jobs.yaml. Stories without job traceability fail Definition of Ready.job_id: infrastructure-only AND a infrastructure_rationale field on every story explaining why no user job applies. Reviewer will reject this option for any feature that touches user-facing surfaces.Default: 1 (Yes). Rationale: STANDING rule "Tech-surface vs value-outcome backlog anti-pattern" (2026-04-24) — epics with tech-surface children but no JTBD framing fail to converge on done-state. Default-on JTBD enforces value-outcome framing at PO level.
Before beginning DISCUSS work, read SSOT and prior wave artifacts:
docs/product/ exists):
docs/product/journeys/{name}.yaml — existing journey to extend (if applicable)docs/product/jobs.yaml — validated jobs and opportunity scoresdocs/product/vision.md — product visiondocs/project-brief.md | docs/stakeholders.yamldocs/feature/{feature-id}/discover/ (if present)docs/feature/{feature-id}/diverge/recommendation.md and job-analysis.md (if present — job is already validated, do not re-run JTBD)Migration gate: If docs/product/ does not exist but docs/feature/ has existing features, STOP. The project has old-model features that should be migrated to SSOT before new waves run. Guide the user to docs/guides/migrating-to-ssot-model/README.md and complete the migration first. If docs/product/ does not exist and no old features exist (greenfield), DISCUSS will bootstrap it.
DISCUSS follows DISCOVER and optionally DIVERGE — reading SSOT first ensures continuity with prior features, then prior wave artifacts ground requirements in evidence.
READING ENFORCEMENT: You MUST read every file listed in Prior Wave Consultation above using the Read tool before proceeding. After reading, output a confirmation checklist (✓ {file} for each read, ⊘ {file} (not found) for missing). Do NOT skip files that exist — skipping causes requirements disconnected from evidence.
After reading, check whether any DISCUSS decisions would contradict DISCOVER evidence. Flag contradictions and resolve with user before proceeding. Example: DISCOVER found "users don't want automation" but DISCUSS story assumes "automated workflow" — this must be resolved.
When DISCUSS decisions change assumptions established in DISCOVER:
## Changed Assumptions section at the end of the affected DISCUSS artifact. Gate: section exists in artifact.@nw-product-owner
IF Decision 4 = Yes (default): Execute *jtbd-analysis for {feature-id}, then *journey informed by JTBD artifacts, then *story-map, then *gather-requirements with outcome KPIs. Every user story must include a job_id field traceable to docs/product/jobs.yaml.
IF Decision 4 = No (infrastructure-only escape valve): Execute *journey for {feature-id}, then *story-map, then *gather-requirements with outcome KPIs. Every story must use job_id: infrastructure-only AND include an infrastructure_rationale field. Reviewer rejects this branch for any user-facing feature.
Context files: see Prior Wave Consultation above + project context files.
Configuration:
At the start of execution, create these tasks using TaskCreate and follow them in order:
Grounds all subsequent artifacts in real user motivations. Mandatory unless Decision 4 = No (infrastructure-only); reviewer enforces job traceability as a hard-blocking DoR check.
| Artifact | Path |
|----------|------|
| Job Stories | docs/feature/{feature-id}/discuss/jtbd-job-stories.md |
| Four Forces | docs/feature/{feature-id}/discuss/jtbd-four-forces.md |
| Opportunity Scores | docs/feature/{feature-id}/discuss/jtbd-opportunity-scores.md (when multiple jobs) |
Per Decision 3 (2026-04-28): scope assessment runs BEFORE journey visualization investment to detect oversized features early and save rework. The agent (nw-product-owner) runs this as workflow Phase 2 (between Discovery and Journey Visualization). Heuristics: oversized signals (any 2+) = >10 user stories | >3 bounded contexts or modules | walking skeleton requires >5 integration points | estimated effort >2 weeks | multiple independent user outcomes that could ship separately. If oversized: propose splitting into independent thin end-to-end slices, ask user to confirm split before continuing. If right-sized: note ## Scope Assessment: PASS in wave-decisions.md. Deeper Elephant Carpaccio slicing happens later in Phase 2.5 (User Story Mapping). Gate: scope assessed; right-sized OR user-approved split confirmed.
Luna runs deep discovery (mental model|emotional arc|shared artifacts|error paths) informed by JTBD, produces visual journey + YAML schema + Gherkin scenarios. Each journey maps to one or more identified jobs.
${variable} or artifact passed between steps. Document single source of truth for each. Gate: every shared artifact has one documented source.| Artifact | Path |
|----------|------|
| Visual Journey | docs/feature/{feature-id}/discuss/journey-{name}-visual.md |
| Journey Schema | docs/feature/{feature-id}/discuss/journey-{name}.yaml |
| Gherkin Scenarios | docs/feature/{feature-id}/discuss/journey-{name}.feature |
| Artifact Registry | docs/feature/{feature-id}/discuss/shared-artifacts-registry.md |
Luna loads user-story-mapping skill before this phase.
user-story-mapping skill. Gate: skill loaded.docs/feature/{feature-id}/slices/slice-NN-name.md with: goal (one sentence), IN scope, OUT scope, learning hypothesis (what this disproves if it fails, what it confirms if it succeeds), acceptance criteria, dependencies, effort estimate, reference class, pre-slice SPIKE if uncertainty is high. Each brief is ≤100 lines. Gate: brief exists for each slice listed in the story map.| Artifact | Path |
|----------|------|
| Story Map | docs/feature/{feature-id}/discuss/story-map.md |
| Prioritization | docs/feature/{feature-id}/discuss/prioritization.md |
| Slice Briefs | docs/feature/{feature-id}/slices/slice-NN-*.md (one per slice) |
Luna crafts LeanUX stories informed by JTBD + journey artifacts. Every story traces to at least one job story. Validates against DoR, prepares handoff. Per-wave peer review is OPTIONAL — the mandatory review gate is consolidated at end of DISTILL where Eclipse + Architect + Forge + Sentinel run in parallel against the full feature-delta.md (all 4 waves visible). Invoke per-wave review explicitly via /nw-review only when uncertainty warrants early feedback (e.g., novel domain, contested DoR, vendor-neutrality risk).
job_id referencing a job in docs/product/jobs.yaml (Phase 1 output when Decision 4 = Yes). Infrastructure-only escape valve (Decision 4 = No): every story uses job_id: infrastructure-only AND includes an infrastructure_rationale field documenting why no user job applies — reviewer rejects this for user-facing features. Gate: every story has a job traceability reference (real job_id OR infrastructure-only with rationale).
1b. Elevator Pitch Test (MANDATORY, per-story) — Every user story MUST contain an ### Elevator Pitch subsection immediately after the story narrative, with exactly these three lines:### Elevator Pitch
Before: {one sentence — what the user cannot do today}
After: run `{exact command / endpoint / UI action}` → sees `{exact observable output}`
Decision enabled: {one sentence — what the user decides with that output}
Rules:
@infrastructure and BLOCK the slice — a slice containing only @infrastructure stories cannot be releasedSlice composition hard gate (per Decision 2): any slice that contains ONLY @infrastructure stories (zero user-visible value stories) is a structural failure. The reviewer (nw-product-owner-reviewer) will REJECT the story-map and set verdict to rejected_pending_revisions. The PO must either (a) merge the slice with an adjacent value-bearing slice, or (b) split the @infrastructure work to land BEFORE the slice as a precursor commit (not a separately-shipped slice). This is hard-blocking: structural failure, not nit.
Gate: every non-@infrastructure story has a complete Elevator Pitch. Every slice contains at least one user-visible value story (slice composition hard gate).
/nw-review nw-product-owner-reviewer only if (a) DoR validation surfaced ambiguity, (b) JTBD assumptions are unverified, (c) vendor-neutrality risk in story ACs, or (d) user explicitly requests. Default: skip. The mandatory consolidated review covering DISCUSS+DESIGN+DEVOPS+DISTILL fires at end of DISTILL. Gate: optional unless triggered. Structural-correctness reviewer never skips: rigor.reviewer_model: "skip" applies to scale-sensitive cost-driven reviewers (Eclipse / Architect / Forge) only; the structural-correctness reviewer at the end of DISTILL (Sentinel / @nw-acceptance-designer-reviewer) ALWAYS dispatches — silent skip masks the bug class issue #52 fixed.| Artifact | Path |
|----------|------|
| User Stories (includes requirements + embedded AC) | docs/feature/{feature-id}/discuss/user-stories.md |
| DoR Validation | docs/feature/{feature-id}/discuss/dor-validation.md |
| Outcome KPIs | docs/feature/{feature-id}/discuss/outcome-kpis.md |
docs/feature/{id}/slices/slice-NN-*.md, all carpaccio taste tests passed)job_id: infrastructure-only with rationale)Handoff To: nw-solution-architect (DESIGN wave) + nw-platform-architect (DEVOPS wave, KPIs only) Deliverables: User stories + story map + outcome KPIs + SSOT journey/jobs updates | JTBD artifacts (when selected)
DISCUSS hands off to BOTH DESIGN (full artifacts) and DEVOPS (outcome-kpis.md only). DEVOPS and DESIGN can proceed in parallel — DESIGN receives the complete artifact set while DEVOPS receives only the KPI file to drive observability and instrumentation design.
Before completing DISCUSS, produce docs/feature/{feature-id}/discuss/wave-decisions.md:
# DISCUSS Decisions — {feature-id}
## Key Decisions
- [D1] {decision}: {rationale} (see: {source-file})
## Requirements Summary
- Primary jobs/user needs: {1-3 sentence summary}
- Walking skeleton scope: {if applicable}
- Feature type: {user-facing|backend|infrastructure|cross-cutting}
## Constraints Established
- {constraint from requirements analysis}
## Upstream Changes
- {any DISCOVER assumptions changed, with rationale}
This summary enables DESIGN to quickly assess DISCUSS outcomes. DESIGN reads this plus key artifacts (user-stories.md, story-map.md, outcome-kpis.md) rather than all DISCUSS files.
Single narrative file: docs/feature/{feature-id}/feature-delta.md — all DISCUSS findings (Tier-1 [REF] sections + any rendered Tier-2 expansions) live here. User stories with embedded AC, story map, DoR validation, outcome KPIs, wave-decisions all become ## Wave: DISCUSS / [REF|WHY|HOW] <Section> headings.
Machine artifacts (declared, parseable by downstream waves):
docs/feature/{feature-id}/slices/slice-NN-*.md — slice briefs (one per elephant-carpaccio slice; consumed by DELIVER for roadmap step decomposition)SSOT updates (per Recommendation 3 / back-propagation contract):
docs/product/jobs.yaml — add validated job stories (functional/emotional/social dimensions, four forces, opportunity score)docs/product/journeys/{name}.yaml — create or extend journey schema (refines DISCOVER seed)docs/product/personas/{name}.yaml — create or extend persona profileLegacy multi-file outputs (user-stories.md, story-map.md, dor-validation.md, outcome-kpis.md, wave-decisions.md, journey-{name}-visual.md as separate files) are NOT produced — that content lives in feature-delta.md. Validator: scripts/validation/validate_feature_layout.py.
/nw-discuss first-time-setup
Orchestrator asks Decision 1-3. User selects "User-facing", "No skeleton", "Comprehensive". Luna starts with JTBD analysis: discovers jobs like "When I first open the app, I want to feel productive immediately, so I can justify the purchase." Maps four forces for each job. Scores opportunities. Then runs journey discovery informed by JTBD, produces visual journey + YAML + Gherkin. Finally crafts stories where each traces to a job, validates DoR, and prepares handoff.
/nw-discuss --phase=jtbd onboarding-flow
Runs only Luna's JTBD analysis phase (job discovery + dimensions + four forces + opportunity scoring). Produces JTBD artifacts without proceeding to journey design or requirements. Useful for early discovery when you need to understand user motivations before committing to UX design.
/nw-discuss --phase=journey release-nwave
Runs only Luna's journey design phases (discovery + visualization + coherence validation). Produces journey artifacts without proceeding to requirements crafting. Useful when JTBD is already done and journey design needs standalone iteration.
/nw-discuss --phase=requirements new-plugin-system
Runs only Luna's requirements phases (gathering + crafting + DoR validation). Assumes JTBD and journey artifacts already exist or are not needed (e.g., backend feature).
testing
Runs feature-scoped mutation testing to validate test suite quality. Use after implementation to verify tests catch real bugs (kill rate >= 80%).
development
Canonical AT completeness gate — research-anchored 7-category taxonomy (C1-C7) + 15-item mechanical checklist. Paradigm-neutral. Drives acceptance-designer reviewer verdict deterministically.
development
Canonical AT completeness gate — research-anchored 7-category taxonomy (C1-C7) + 15-item mechanical checklist. Paradigm-neutral. Drives acceptance-designer reviewer verdict deterministically.
testing
Methodology for minimizing test count while maximizing behavioral coverage - behavior definition, anti-pattern catalog, consolidation patterns, stopping criterion, coverage-preserving validation