Vellum is now Figentra Flow (renamed 2026-11-01).
Context
ADR 0067 made GitHub spec-kit the SDLC, and ADR 0121 D15 pinned its CLI. ADRs 0282 and 0286 planned a Stackra-owned SDLC tool to replace it only if spike STA-298 met a bar, for example at most 15 extra minutes per issue. That spike measured the legacy tool’s signed approvals and ledger, which are now dropped. Since then Figentra Flow (@figentra-oss/flow, binary figentra-flow) wraps spec-kit: it installs .specify/, composes our preset into
spec-kit’s command texts, renders them with the specify binary and polices the result with a tripwire. Our
templates already replace spec-kit’s; the wrap mostly guards against an upstream we do not need. On 2026-11-01 the
owner decided that Flow replaces spec-kit entirely and that the name “Vellum” is removed everywhere, and accepted
every recommendation of the questionnaire (the owner’s questionnaire).
Decision
- The spike bar is waived. The replacement keeps today’s commands, documents and gates; only who owns the files changes, so there is nothing new to measure. STA-298 closes on this ADR.
- Flow owns the whole workflow. Nothing runs the
specifybinary. Flow ships the templates, the presets (neutral,stackra), the eight command texts and the work the spec-kit scripts did, as CLI subcommands (figentra-flow spec paths|setup-plan|setup-tasks|template). - Names.
.specify/becomes.flow/; the presets folderspeckit/becomesflow/inside the package; thespeckit-*skills and commands becomeflow-*(/flow-specify,/flow-clarify,/flow-plan,/flow-tasks,/flow-analyze,/flow-checklist,/flow-implement,/flow-converge), spelled with a hyphen in every tool.taskstoissuesfolds intoflow-tasks;constitutionis dropped..agents/specs/stays. “Vellum” is retired as a name. .flow/holds only what the repository owns:README.md,constitution.md, optionaloverrides/,lock.json(the Flow version, the preset and a hash of every rendered file) and the git-ignoredcurrent.json. Presets live only in the package; a repository chooses one withpresetinfigentra-flow.config.json.- Bug specs live in
.agents/specs/bugs/<key>-<slug>/(configurable asspecs.bugsDir). - Rendering.
figentra-flow syncwrites neutral skill and command documents for the repository’s projector;sync --directrenders Claude Code skills and OpenCode commands itself. Rendered files are committed. - The install check replaces the tripwire.
figentra-flow gate cifails when a rendered file differs fromlock.json, whenlock.jsonnames another Flow version than the installed one, or when.specify/,.agents/speckit/or aspeckit-*file remains. - Migration.
figentra-flow migrate [--dry-run]rewrites the mechanical files of a repository that used spec-kit. After it, nothing reads.specify/. - Attribution. spec-kit is MIT-licensed by GitHub. The package carries spec-kit’s notice in
THIRD_PARTY_NOTICES.md; every template or command derived from spec-kit carriesderived-from: github/spec-kit 1.0.10 (MIT)until it is rewritten from scratch. - Release and rollout. The replacement ships as
@figentra-oss/flow0.2.0, after the0.1.0wrap. Core switches on one train with waves W2 and W2b, then brand, os and the template follow; stackra-8a gates each step.
Consequences
- No pinned Python tool (
pipx:specify-cli) and no bash scripts in any repository; the spec workflow is one npm package. - Flow’s team owns texts that upstream used to maintain. Upstream improvements are no longer picked up automatically; that is the point.
- Core’s 24 docs pages, live specs, hooks (
prompt-hints,_rules.mjs) and thespec-writeragent change in the switch; open branches re-runfigentra-flow migrateafter a short freeze. - ADR 0067’s spec-kit and ADR 0121 D15’s pin are history.
Enforcement
figentra-flow gate ci(the install check, decision 7) in every repository that runs the gate.- planned —
@stackra/repo-checks:.flow/replaces.specify/in the format rules (core phase 2). - planned —
doctor.mjsdrops thespecifypin check;mise.tomllosespipx:specify-cli(core phase 2).
Amendment 2026-11-01: the first release is 0.1.0 (STA-1855)
Decision 10 named0.2.0, after a 0.1.0 wrap. No version of @figentra-oss/flow was ever published, and the
pending changesets take the package from 0.0.0 to 0.1.0. The owner decided that the replacement ships as Flow’s
first release, 0.1.0, and that core pins 0.1.0 in the catalog and in .flow/lock.json. Everything else in
decision 10 stands.
Supersedes and sources
Supersedes: 0067, and decision D15 of 0121. Amends 0500 decision 10 (.specify/ stays), 0282 decisions 12
to 14 and 0286 (the STA-298 spike bar, waived), and 0120 (the bug-lane path).
Sources: the owner’s questionnaire and plan.md; STA-1729 (figentra/flow); STA-298.