Archives a completed feature to docs/evolution/, migrates lasting artifacts to permanent directories, and cleans up the temporary workspace. Use after all implementation steps pass and mutation testing completes.
npx skills add https://github.com/nWave-ai/nWave --skill nw-finalize
Wave: CROSS_WAVE
Agent: @nw-platform-architect (default) or specified agent
Finalize a completed feature: verify all steps done|create evolution document|migrate lasting artifacts to permanent directories|clean up temporary workspace. Agent gathers project data|analyzes execution history|writes summaries|migrates|cleans up.
docs/feature/{feature-id}/ is a temporary workspace — it exists during active nWave waves (DISCUSS through DELIVER). At finalize, artifacts with lasting value migrate to permanent directories; the rest is discarded.
/nw-finalize @{agent} "{feature-id}"
The completion-evidence files are docs/feature/{feature-id}/deliver/roadmap.json (the original project plan) and docs/feature/{feature-id}/deliver/execution-log.json (step execution history).
Before dispatching, verify all work is done — prevents archiving incomplete features.
docs/feature/{feature-id}/deliver/execution-log.json. Gate: file readable.DONE. Gate: all steps DONE.execution-log.json + roadmap.json (the step log and plan), and all */wave-decisions.md files. Gate: source files read.docs/evolution/YYYY-MM-DD-{feature-id}.md with: feature summary, business context, key decisions, work completed (from execution-log.json), lessons learned, issues encountered, links to migrated permanent artifacts. Gate: file written.docs/feature/{feature-id}/. Gate: file list produced.| Source (temporary workspace) | Destination (permanent) | Condition |
|---|---|---|
| design/architecture-design.md | docs/architecture/{feature}/ | If exists |
| design/component-boundaries.md | docs/architecture/{feature}/ | If exists |
| design/technology-stack.md | docs/architecture/{feature}/ | If exists |
| design/data-models.md | docs/architecture/{feature}/ | If exists |
| design/adrs/ADR-*.md | docs/adrs/ | Flat namespace, cross-feature |
| distill/walking-skeleton.md | docs/scenarios/{feature}/ | Walking skeleton specification |
| discuss/journey-*.yaml | docs/ux/{feature}/ | If UX journeys exist |
| discuss/journey-*-visual.md | docs/ux/{feature}/ | If UX visuals exist |
Research docs (docs/research/) are already in a permanent location — no migration needed.
These are process scaffolding — valuable during delivery, disposable after:
| File pattern | Why discard |
|---|---|
| deliver/execution-log.json | Audit trail — captured in evolution doc |
| deliver/roadmap.json | Step plan — superseded by evolution doc + git history |
| deliver/.develop-progress.json | Resume state — temporary |
| design/review-*.md | Review findings captured in evolution doc |
| discuss/dor-checklist.md | Process gate, not lasting value |
| discuss/shared-artifacts-registry.md | Process scaffolding |
| discuss/prioritization.md | Superseded by roadmap execution |
| */wave-decisions.md | Key decisions extracted into evolution doc |
docs/feature/{feature-id}/ after migration. Gate: list produced.docs/feature/{feature-id}/ is NOT deleted. The wave matrix derives status from this directory. Removing it would make finalized features disappear from the matrix. The evolution doc in docs/evolution/ is the summary; the feature directory is the history. Gate: directory preserved, session markers removed..nwave/des/deliver-session.json, .develop-progress.json, and any temp files. Do NOT remove wave artifacts (discuss/, design/, distill/, deliver/). Gate: session markers removed, wave artifacts intact.NEVER delete without user approval. Show exactly what will be removed.
--skip-docs flag provided. Gate: docs generated or skipped.@{agent}
Finalize: {feature-id}
Key constraints:
docs/
adrs/ # ADR-NNN-{slug}.md (flat, cross-feature)
architecture/ # Design docs by feature
{feature}/
architecture-design.md
component-boundaries.md
data-models.md
technology-stack.md
decisions/ # Product decisions by feature (optional)
{feature}/
evolution/ # Post-mortem summaries
YYYY-MM-DD-{feature-id}.md
research/ # Research docs (flat, cross-feature)
scenarios/ # Acceptance test documentation by feature
{feature}/
walking-skeleton.md
ux/ # UX specs and journeys by feature
{feature}/
journey-*.yaml
journey-*-visual.md
| Error | Response |
|-------|----------|
| Invalid agent name | "Invalid agent. Available: nw-researcher, nw-software-crafter, nw-solution-architect, nw-product-owner, nw-acceptance-designer, nw-platform-architect" |
| Missing feature ID | "Usage: /nw-finalize @agent 'feature-id'" |
| Project directory not found | "Project not found: docs/feature/{feature-id}/" |
| Incomplete steps | Block finalization, list incomplete steps |
| No files to migrate | Log "No lasting artifacts found — skipping Phase B" and proceed to cleanup |
/nw-finalize @nw-platform-architect "auth-upgrade"
Verifies all steps done. Creates evolution doc. Migrates design/architecture-design.md → docs/architecture/auth-upgrade/, ADRs → docs/adrs/, test-scenarios → docs/scenarios/auth-upgrade/. Shows remaining files, user approves, removes workspace. Commits.
/nw-finalize @nw-platform-architect "data-pipeline"
Pre-dispatch gate finds step 02-03 status IN_PROGRESS. Returns: "BLOCKED: 1 incomplete step - 02-03: IN_PROGRESS. Complete all steps before finalizing."
Handoff To: Feature complete - no next wave
Deliverables: docs/evolution/YYYY-MM-DD-{feature-id}.md, migrated artifacts, cleaned workspace
docs/evolution/YYYY-MM-DD-{feature-id}.md
docs/architecture/{feature}/ (migrated design docs)
docs/adrs/ADR-*.md (migrated ADRs)
docs/scenarios/{feature}/ (migrated test scenarios)
docs/ux/{feature}/ (migrated UX journeys, if any)
Removed: docs/feature/{feature-id}/
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Use when implementing any feature or bugfix, before writing implementation code
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
Take nwave-ai/nw-finalize from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.