Wave: 1 (parallel, after Wave 0 merges)
Depends on: #146 (contract), #147 (type registered), #148 (state-log)
Effort: L
Ties to: PRD R1, R2, R3, R4, R5; "The One UX Decision"
Files: skills/pm-solutions/SKILL.md (NEW)
Description
The core skill, invoked as /pm-solutions <opportunity-slug>. Recipe over the existing query → reasoning → ingest primitives (no bespoke read logic).
- Resolve (R1): resolve the opportunity from
.nanopm/wiki/entities/opportunities/; if the slug is missing or ambiguous, list candidates and stop. No status gate — runs on any status; advance the opportunity to ready-for-solutions once solutions are written.
- Diverge (R2): dispatch the 3 fixed lens-subagents (Eng / Design / Business) concurrently in one turn, each fed the opportunity file (treated as untrusted — same hardening as existing retrieval subagents) + the loaded CONTEXT/objectives digest. Lens definitions per PRD §Scope.
- Converge (R3): dedup overlapping proposals; emit ≥3 solutions each with the full field set — pitch · appetite (small/big bet) · impact (high/med/low, qualitative) · riskiest assumption · cheapest test · originating lens · KR/outcome. If <3 survive dedup, re-prompt for more divergence before writing.
- Write (R4): one
.nanopm/wiki/entities/solutions/<slug>.md per solution (frontmatter opportunity, status: proposed, provenance: assumed, lens, appetite, impact) via nanopm-ingest-agent apply; call nanopm_solutions_reindex; append a solutions pointer-summary block to the parent opportunity page (bidirectional link).
- Choose (R5): founder marks
shortlisted/chosen; the agent never auto-chooses. Status writes via nanopm-state-log --type solution.
- UX (load-bearing): the converged table is canonical, but every row keeps its lens tag + a one-line dissent/tension note (middle path — don't collapse to a single-generator verdict).
Acceptance
/pm-solutions <existing-opp> produces ≥3 solutions/*.md with the required frontmatter, a regenerated solutions/INDEX.md, a pointer block on the opportunity page, and the opportunity advanced to ready-for-solutions; the choose step transitions a solution to chosen via state-log. A folded regression test exercises the diverge→converge→write→choose lifecycle.
Source PRD: .nanopm/wiki/docs/prds/pm-solutions.md · Created by nanopm /pm-breakdown (feature: pm-solutions, GitHub handoff).
Wave: 1 (parallel, after Wave 0 merges)
Depends on: #146 (contract), #147 (type registered), #148 (state-log)
Effort: L
Ties to: PRD R1, R2, R3, R4, R5; "The One UX Decision"
Files:
skills/pm-solutions/SKILL.md(NEW)Description
The core skill, invoked as
/pm-solutions <opportunity-slug>. Recipe over the existing query → reasoning → ingest primitives (no bespoke read logic)..nanopm/wiki/entities/opportunities/; if the slug is missing or ambiguous, list candidates and stop. No status gate — runs on any status; advance the opportunity toready-for-solutionsonce solutions are written..nanopm/wiki/entities/solutions/<slug>.mdper solution (frontmatteropportunity,status: proposed,provenance: assumed,lens,appetite,impact) viananopm-ingest-agent apply; callnanopm_solutions_reindex; append a solutions pointer-summary block to the parent opportunity page (bidirectional link).shortlisted/chosen; the agent never auto-chooses. Status writes viananopm-state-log --type solution.Acceptance
/pm-solutions <existing-opp>produces ≥3solutions/*.mdwith the required frontmatter, a regeneratedsolutions/INDEX.md, a pointer block on the opportunity page, and the opportunity advanced toready-for-solutions; the choose step transitions a solution tochosenvia state-log. A folded regression test exercises the diverge→converge→write→choose lifecycle.Source PRD:
.nanopm/wiki/docs/prds/pm-solutions.md· Created by nanopm /pm-breakdown (feature: pm-solutions, GitHub handoff).