agentleFS
mwellis81mwellis81/spec-factory/skills/sf-handoff/SKILL.md

sf-handoff

Skill1 starsChanged 40 days agoMITView on GitHub

Use when every spec is approved and the spec set has to leave the factory.

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. ya222/skillforge★ 1same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository13 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 7 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈7

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Call it with the destination directory.

    line 12
  2. Distinctive:

    When the owner named none, ask for one and stop.

    line 13
  3. Very specific:

    Run python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_status.py --root .

    line 17
  4. Very specific:

    Add --root <run directory> to both when the chain is not in the current directory, and to the export in step 3 as well.

    line 20
  5. Distinctive:

    All three read the same tree or the gate answers for one chain while the export ships another.

    line 21
  6. Distinctive:

    every file the export wrote, and the total

    line 68
  7. Distinctive:

    every question the chain parked, so the receiving factory reads the gaps in the specs rather than discovering them

    line 71
  8. Very specific:

    Never set approved:; only a human does, by running python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_approve.py <path> --root ..

    line 78
  9. Very specific:

    Never edit an artifact, and never edit a ratified anchors section.

    line 79
  10. Distinctive:

    Never export a chain carrying a row that is not approved, and never export part of one.

    line 80
  11. Distinctive:

    Never write a format the target factory did not ask for.

    line 81

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

sf-handoff

The last stage: the approved spec set leaves for the factory that will build from it. You export, you report, and you refuse. You never draft, never approve, and never edit a spec to make a check pass.

Call it with the destination directory. When the owner named none, ask for one and stop; where a handoff lands is not a default worth guessing.

1. Read the chain

Run python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_status.py --root . and print the table it returns. Then run python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_trace.py --check --root . and print what it says, line for line.

Add --root <run directory> to both when the chain is not in the current directory, and to the export in step 3 as well. All three read the same tree or the gate answers for one chain while the export ships another.

2. Refuse unless the chain is finished

CheckWhere it comes fromPasses when
statusthe status columnevery artifact the weight requires is approved
lintthe lint columnPASS
open findingsthe open findings column0
traceabilitypython ${CLAUDE_PLUGIN_ROOT}/scripts/sf_trace.py --check --root .no orphan in either direction
obligationspython ${CLAUDE_PLUGIN_ROOT}/scripts/sf_status.py --root . obligations tablenone open

An open obligation is a correction the chain still owes, so the handoff refuses it as NOT_RUN: OBL-n is open against <target> and sf_export.py refuses it as well, every format and --force included.

draft, reviewed, stale (affected), and stale (upstream only) are all not approved. A reviewed artifact is waiting on the owner: print python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_approve.py <path> --root . and stop, rather than handing over something nobody signed.

Which artifacts the weight requires, read from the first artifact that exists:

  • side: the brief and the specs, with UX only where the run produced one. The PRD and the TDD are NOT_APPLICABLE at that weight and their rows read missing; that is the one absence that is not a refusal. Say which weight you read and where.
  • standard and enterprise: the idea, the PRD, the TDD with its ADRs, and the specs, with UX where the run produced one.

The cross-model check is reported rather than required. Codex is not on every machine, so a NOT_ verdict is an honest record of a check that did not run and it does not block the handoff; a FAIL does, because it means a findings file was recorded and is not there. Either way the verdict goes in the summary, per artifact, with its reason.

Refuse as NOT_RUN: <what is not finished>, one line per row that failed a check, and stop. A partial export is worse than none: it reads downstream as the whole spec set.

3. Export

python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_export.py --format raw --out <destination> --root .

with the same --root <run directory> step 1 used, so the tree that passed the gate is the tree that ships.

raw is the only format until somebody describes the target factory's intake format. It is the spec files as they are, copied byte for byte, so the target receives exactly what the owner approved and nothing this stage decided for them. A new intake format is a new entry in the export script's format registry, and choosing one is the owner's call, never yours.

The export refuses a destination that already holds files, because an export mixed with what was there is not the spec set. Name an empty directory; never clear one without asking.

4. Print the summary

  • the format and the destination
  • every file the export wrote, and the total
  • the requirement and spec counts sf_trace.py --check reported
  • the cross-model verdict per artifact, with its reason. Any artifact whose verdict is not PASS makes the summary read handoff-ready, not all green, on the same line as the verdict and the reason it carries, so nobody downstream reads a NOT_RUN as a check that passed
  • every question the chain parked, so the receiving factory reads the gaps in the specs rather than discovering them

Say the handoff is complete only once the export returned and every check in step 2 passed. Otherwise say which check stopped it and what the owner has to do next.

What sf-handoff never does

Never set approved:; only a human does, by running python ${CLAUDE_PLUGIN_ROOT}/scripts/sf_approve.py <path> --root .. Never edit an artifact, and never edit a ratified anchors section; an approved artifact changes only through a proposal under docs/factory/changes/. Never export a chain carrying a row that is not approved, and never export part of one. Never write a format the target factory did not ask for.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.