$npx -y skills add armelhbobdad/bmad-module-skill-forge --skill skf-verify-stackPre-code stack feasibility verification against architecture and PRD documents. Use when the user requests to "verify a tech stack" or "verify stack.
| 1 | # Verify Stack |
| 2 | |
| 3 | ## Overview |
| 4 | |
| 5 | Cross-references generated skills against architecture and PRD documents to produce a feasibility report with evidence-backed integration verdicts, coverage analysis, and requirements mapping. Read-only: it reads skills and input documents and writes only the feasibility report (see Workflow Rules). |
| 6 | |
| 7 | **Schema contract:** This skill is the producer of the SKF shared feasibility report schema — every report conforms to it. |
| 8 | |
| 9 | ## Conventions |
| 10 | |
| 11 | - Bare paths (e.g. `references/<name>.md`) resolve from the skill root. |
| 12 | - `references/` holds prompt content carved out of SKILL.md (workflow stages chained via frontmatter `nextStepFile`, plus static reference docs); `scripts/` and `assets/` hold deterministic helpers and templates. |
| 13 | - `{skill-root}` resolves to this skill's installed directory (where `customize.toml` lives, if present). |
| 14 | - `{project-root}`-prefixed paths resolve from the project working directory. |
| 15 | - `{skill-name}` resolves to the skill directory's basename. |
| 16 | |
| 17 | ## Role |
| 18 | |
| 19 | You are a stack feasibility analyst and integration verifier operating in Ferris Audit mode. You bring expertise in API surface analysis, cross-library compatibility assessment, and architecture validation, while the user brings their architecture vision and generated skills. |
| 20 | |
| 21 | ## Workflow Rules |
| 22 | |
| 23 | These rules apply to every step in this workflow: |
| 24 | |
| 25 | - Read-only — never modify skills, architecture docs, or PRD files |
| 26 | - Every verdict must cite evidence from the generated skills |
| 27 | - Only load one step file at a time — never preload future steps |
| 28 | - If any instruction references a subprocess or tool you lack, achieve the outcome in your main context thread |
| 29 | - Always communicate in `{communication_language}` |
| 30 | - At any interactive prompt, the inputs `cancel`, `exit`, `[X]`, `q`, or `:q` exit cleanly with exit code 6 (`halt_reason: "user-cancelled"`) |
| 31 | - If `{headless_mode}` is true, auto-proceed through confirmation gates with their default action and log each auto-decision |
| 32 | |
| 33 | ## Stages |
| 34 | |
| 35 | | # | Step | File | Auto-proceed | |
| 36 | |---|------|------|--------------| |
| 37 | | 1 | Initialize & Load Inputs | references/init.md | No (confirm) | |
| 38 | | 2 | Coverage Analysis | references/coverage.md | Yes | |
| 39 | | 3 | Integration Verification | references/integrations.md | Yes | |
| 40 | | 4 | Requirements Mapping | references/requirements.md | Yes | |
| 41 | | 5 | Synthesize Verdict | references/synthesize.md | Yes | |
| 42 | | 6 | Report | references/report.md | No (confirm) | |
| 43 | | 7 | Workflow Health Check | references/health-check.md | Yes | |
| 44 | |
| 45 | ## Invocation Contract |
| 46 | |
| 47 | | Aspect | Detail | |
| 48 | |--------|--------| |
| 49 | | **Inputs** | architecture_doc_path [required], prd_path [optional], previous_report_path [optional] | |
| 50 | | **Flags** | `--headless` / `-H` (auto-resolve all gates); `--architecture-doc <path>` (skip step 1 prompt for the required input); `--prd <path>` (skip step 1 prompt for the optional PRD); `--previous-report <path>` (skip step 1 prompt for delta comparison) | |
| 51 | | **Gates** | step 1 Input Gate (use args); step 6 Report Menu ([R] review / [X] exit, headless default X). Steps 2-3 also hold elective vacuous-analysis guards (0% coverage, all-Blocked) that only fire in degenerate cases; every guard auto-resolves to Continue in headless. | |
| 52 | | **Outputs** | `feasibility-report-{projectSlug}-{timestamp}.md` and `feasibility-report-{projectSlug}-latest.md` (copy, not symlink) per the SKF shared feasibility report schema (`_bmad/skf/shared/references/feasibility-report-schema.md`; `src/shared/references/…` in a dev checkout) — with integration verdicts, coverage analysis, recommendations, and evidence sources; plus `verify-stack-result-{timestamp}.json` and `verify-stack-result-latest.json` | |
| 53 | | **Headless** | All gates auto-resolve with default action when `{headless_mode}` is true. Per-flag args (`--architecture-doc`, `--prd`, `--previous-report`) consumed at the gates that would otherwise prompt. | |
| 54 | | **Exit codes** | See `references/exit-codes.md` | |
| 55 | |
| 56 | ## Result Contract (Headless) |
| 57 | |
| 58 | When `{headless_mode}` is true, step 6 emits a single-line JSON envelope on **stdout** before chaining to step 7, and every headless hard halt emits the same envelope shape on **stderr** with `status: "error"`: |
| 59 | |
| 60 | ``` |
| 61 | SKF_VERIFY_STACK_RESULT_JSON: {"status":"success|error","report_path":"…|null","report_latest_path":"…|null","overall_verdict":"…|null","coverage_percentage":0,"recommendation_count":0,"exit_code":0,"halt_reason":null} |
| 62 | ``` |
| 63 | |
| 64 | `status` is `"success"` on the terminal happy path, `"error"` on any halt. `halt_reason` is one of: `null` (success), `"input-missing"`, `"input-invalid"`, `"skills-folder-missing"`, `"insufficient-skills"`, `"forge-folder-unconfigured"`, `"resolution-failure"`, `"previous-report-collision"`, `"inventory-unreliable"`, `"schema-violation"`, `"write-failed"`, `"user-cancelled"`. `exit_code` matches `ref |