--- name: wf-spike description: 'WellForge command — Spike a goal fast — main-loop build from a one-paragraph brief, advisory gates, no agents, no approval (rigor tier: spike). Invoke explicitly: $wf-spike [--no-terse]' --- > WellForge command, generated for Codex from `wellforge-plugin/commands/spike.md` — do not edit; regenerate with `adapters/codex/generate.py`. > Invoked as `$wf-spike [--no-terse]`. **ARGUMENTS** below means the text the user wrote after `$wf-spike` in the invoking message (empty if nothing). Build a **spike**: the fastest WellForge path, for feasibility / PoC / business-model experiments that may be thrown away. Load the **rigor-tiers** skill now — this command IS the `spike` tier. Resolved tier: **spike** (invocation). Load the **terse** skill now — its activation matrix defaults terse mode **ON** for this command. Goal: ARGUMENTS ## Step 0 — Resolve terse Terse is **ON by default** for spike (terse skill activation matrix — no flag required). If `--no-terse` appears in `ARGUMENTS`, resolve terse **OFF** for this run instead, and strip the token before using the rest of `ARGUMENTS` as the goal/brief text. State the resolved terse state up front, next to the tier line above. ## What spike means here - **Main loop only — you implement directly. Spawn NO subagents.** The whole point is to skip orchestration cold-starts. (mvp/production are where the agent team runs.) - **Effort: minimal** (the spike tier cue, rigor-tiers skill) — apply it to yourself: take the shortest path that answers the question, no gold-plating or exhaustive edge-case work, leave `// SPIKE:` where you cut a corner. Bias hard to speed. - **Terse: ON by default** (the terse cue, **terse** skill) — apply it to yourself, exactly like the effort cue above, unless Step 0 resolved it OFF: drop filler, preamble, and restating the question from your conversational output; prefer fragments; substance only. The terse skill's byte-identical invariant (code blocks, shell commands, file paths, identifiers, error messages reproduced byte-for-byte) and its artifact exemption (spec-driven/governance artifacts always stay full-contract) apply regardless of this setting. This governs your conversational output for the whole run, including the Report below — when Step 0 resolved terse OFF (`--no-terse`), report and narrate normally instead. - **No human approval gate.** You build, then the human reviews the result. - **Advisory gates** (lint/typecheck/build): run them, report failures, do NOT stop on them. - **The security floor still blocks** (see rigor-tiers): secret scan, no hardcoded creds, critical-CVE dependency audit. Fast never means "leaks credentials." ## Procedure 1. **Resolve the folder.** Next sequential `specs/NNN-slug/` (slug from the goal). Reuse an existing folder only if the goal clearly continues it. 2. **Write `specs/NNN-slug/brief.md`** — short, not a spec. Frontmatter then ~5–10 lines: ```markdown --- id: NNN slug: rigor: spike status: in-progress created: --- # ## Question ## Build ## Out of scope ## Findings ``` No user stories, no ACs, no plan. If the goal is genuinely unclear, ask ONE batched AskUserQuestion round — but prefer a sensible assumption recorded under `## Out of scope`. 3. **Build it.** Load the relevant stack skill (`react-ts-vite`, `kotlin-springboot`, `hono-ts-backend`, `mise`, …) and write the code directly. Favor the shortest path that answers the question; leave honest `// SPIKE:` markers where you cut a corner that `$wf-promote` would later pay off. Keep changes scoped to the goal. 4. **Sanity check (advisory).** Run the project's lint / typecheck / build (mise tasks if present). Report what passed/failed. Do NOT block or loop on failures — note them under `## Findings`. Advisory means *don't stop the spike*, NOT "make it green quickly": if you do choose to fix something, the `systematic-debugging` iron law still applies (root cause before the fix, no timeout/retry/skip to silence it) — the tier lowers ceremony, never honesty about why something broke. THEN run the **security floor** (secret scan + critical-CVE audit): if it trips, STOP and fix — the floor is the one thing a spike cannot skip. 5. **Fill `## Findings`** in brief.md: did the spike answer its question? What was learned? Then **run the `$wf-done` procedure** (spike branch) to close it — don't set `status: done` here. It is the single guarded place that transition lives, it stamps `done: ` too, and its spike branch is exactly this tier's bar (findings filled, the question answered) plus the "if it proved out, suggest `$wf-promote`" nudge. 6. **Record the run (lightweight).** Per the **observability** skill, write `.forge/runs/.json` (schema `wellforge-run/v3`) with `command: spike`, `rigor: spike`, `plugin_version` (the running plugin), no agents (`agents: []`), the advisory gate outcomes, and `result`. Set `terse` to the boolean resolved in Step 0 (`true` unless `--no-terse` was passed — spike defaults terse ON); leave `control_run_id` `null` (pairing to a control run is a later concern, not this command's). Leave `tokens`/`cost` null. ## Report End with: - What you built and where (files), and the spike's verdict on its question. - Advisory gate results (actual numbers) + security-floor result. - The reminder: **"rigor: spike — gates were advisory, this is not production-ready. Run `$wf-promote NNN-slug --to mvp` (or `production`) to graduate it."** ## Hard rules - Never spawn a subagent — if you reach for one, you're in the wrong command (use `$wf-orchestrate --mode mvp`). - Never present spike output as production-ready, and never silently raise its rigor — graduation is `$wf-promote` only. - The security floor is non-negotiable; everything else is advisory.