Skip to content

sf srs ​

Operations on the SRS workspace — the specification tree the AI drafts from and spawns tickets against.

This is the non-AI path: everything below can equally be asked of the agent in conversation, which drives these same commands through the sf-srs skill. The commands exist so the operations are scriptable, testable, and inspectable without a model in the loop.

Usage ​

bash
sf srs <action> [args...]

Requires the SRS module to be installed and a backend configured in .saasfoundry.json under tools.srs.

Actions ​

ActionWhat it does
helpPrint the usage message
validateSmoke-test the configured backend through adapter.init()
browseList the direct children of a parent page, as JSON
draftProduce draft material — from backend pages, or by scanning the codebase
writeApply a DraftCandidate[] spec file through the adapter
versionsList the versions the SRS declares — what a release scope is proposed from
spawnTurn an Epic page into tickets
normalizeEnumerate an Epic's FR pages and create Story sub-tickets
apply-updateApply a conversational eval-hook patch (ADD-only)
evalScore SRS freshness against the codebase

Details ​

bash
sf srs validate [manifest]
sf srs browse --parent <id> [--manifest <path>]

sf srs draft --from notion-pages --ids <id1,id2,...> [--manifest <path>]
sf srs draft --from codebase [--path <dir>] [--manifest <path>]

sf srs write --spec <path> [--manifest <path>] [--no-clear-pending]
sf srs versions [--root-page <id>] [--manifest <path>]

sf srs spawn --epic <page-url-or-id> [--ticket <n>] [--version <title-url-or-id>]
             [--milestone <name>] [--dry-run] [--manifest <path>] [--bypass-reason <text>]

sf srs normalize [--feature <url-or-id>] [--version-name <name>] [--apply]
                 [--manifest <path>] [--root-page <id>]

sf srs apply-update [--patch <path>] [--manifest <path>]
sf srs eval [--path <dir>] [--root-page <id>] [--threshold <pct>] [--json] [--manifest <path>]

--milestone on spawn declares the release these tickets ship in: the milestone is created or reused, the version page is linked to it, and every ticket spawned joins it.

Common options ​

FlagDescriptionDefault
--manifest <path>Manifest file to read.saasfoundry.json

Exit codes ​

A shared contract across every action, so a script can branch on the reason rather than on a message:

CodeMeaning
0success
2bad input
3missing backend
4unknown backend
5runtime failure
6write partial — the output carries a rollbackHint
7write succeeded, but clearing pendingIngestion failed

Examples ​

bash
# Is the configured backend actually reachable?
sf srs validate
bash
# What would spawning this Epic create, without creating anything
sf srs spawn --epic https://notion.so/... --dry-run
bash
# How stale is the specification against the code, as JSON
sf srs eval --json --threshold 70

See also ​

Released under the MIT License.