agentleFS
ThanhNguyxnOrgThanhNguyxnOrg/blendops/skills/done-criteria/SKILL.md

done-criteria

Skill3 starsChanged 6 months agoMITView on GitHub

Define explicit "done" conditions for a Blender recipe before starting work, so the agent stops at the right point instead of drifting into endless polish.

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 7 are distinctive, and 6 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.

  • 6

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    write one stop condition per recipe (one sentence, concrete)

    line 12
  2. Distinctive:

    write what is OUT OF SCOPE for "done"

    line 13
  3. Distinctive:

    write the handoff trigger (which skill receives the deliverable when stop condition fires)

    line 14
  4. Distinctive:

    BEFORE starting work on any non-trivial single Blender recipe

    line 18
  5. Very specific:

    after blender-recipe-decomposer has isolated a single recipe and acceptance-criteria-builder has provided measurable acceptance rows

    line 19
  6. Distinctive:

    when previous attempts drifted into endless polish or unclear completion boundaries

    line 20
  7. Very specific:

    after work has already started and scope is drifting mid-flight → use ../scope-guard/SKILL.md (use scope-guard)

    line 29
  8. Very specific:

    Default artifact status is Not Produced.

    line 84
  9. Very specific:

    Stop condition refers strictly to plan completeness.

    line 132
  10. Very specific:

    Stop condition refers to target artifacts and acceptance rows.

    line 135
  11. Very specific:

    Stop condition is recorded before work begins as a forward condition awaiting runtime readiness.

    line 138
  12. Distinctive:

    Write the condition BEFORE work begins.

    line 171
  13. Distinctive:

    Run Blender or execute Python.

    line 214

≈ “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

done-criteria

Purpose

Pin a single, explicit stop condition for one recipe BEFORE work begins—consisting of one concrete sentence, an explicit out-of-scope list, and a handoff trigger—so the agent stops at the right point instead of drifting into endless polish. Firing the stop condition routes the deliverable to the next skill; it never upgrades any runtime or artifact truth state. Inspired by Anthropic Superpowers /just-say-when-it's-done analog.

Quick start

  • write one stop condition per recipe (one sentence, concrete)
  • write what is OUT OF SCOPE for "done"
  • write the handoff trigger (which skill receives the deliverable when stop condition fires)
  • enforce: do not polish past the stop condition; do not declare done before it

When to use

  • BEFORE starting work on any non-trivial single Blender recipe
  • after blender-recipe-decomposer has isolated a single recipe and acceptance-criteria-builder has provided measurable acceptance rows
  • when previous attempts drifted into endless polish or unclear completion boundaries

When not to use

<!-- blendops:generated:start exclusions -->
  • pure exploration or brainstorming → use ../blender-brainstorming/SKILL.md (use blender-brainstorming; goal is divergence)
  • tiny single-shot requests → use ../intent-to-3d-brief-writer/SKILL.md (Delegates out-of-scope requests to intent-to-3d-brief-writer)
  • splitting a broad multi-recipe request beforehand → use ../blender-recipe-decomposer/SKILL.md (use blender-recipe-decomposer first)
  • authoring measurable acceptance rows from scratch → use ../acceptance-criteria-builder/SKILL.md (use acceptance-criteria-builder first)
  • enforcing per-stage checklist gates during execution → use ../stage-gates/SKILL.md (use stage-gates)
  • after work has already started and scope is drifting mid-flight → use ../scope-guard/SKILL.md (use scope-guard)
  • performing the final verification gate before delivery → use ../pre-handoff-verification/SKILL.md (use pre-handoff-verification)
<!-- blendops:generated:end exclusions -->

Trigger phrases

<!-- blendops:generated:start triggers -->
  • "when are we done"
  • "let's set the bar"
  • "what does done look like"
<!-- blendops:generated:end triggers -->

Prerequisites / readiness

  • single-recipe scope is clear (split beforehand via blender-recipe-decomposer if needed)
  • measurable acceptance rows are available from acceptance-criteria-builder
  • user accepts a written stop condition BEFORE work begins

Input schema

Required inputs

InputWhy it is required
Single recipe scopeAnchors the stop condition to one recipe (via blender-recipe-decomposer if previously multi-part)
Measurable acceptance rowsConsumed from acceptance-criteria-builder to define what "done" means concretely

Optional inputs

InputUse
Time / budget constraintsForces tighter out-of-scope boundaries
Reference deliverableCalibrates the measurable bar

Assumptions to confirm

  • The stop condition is written and agreed to BEFORE work begins.
  • "Done" is the stop and handoff point, not a temporary plateau before extra polish.
  • Ambiguous "done" means the recipe is not yet ready to start.

Output schema

Primary output

A single stop condition record written before work begins: one concrete sentence, an out-of-scope list (3-5 items), and a named handoff trigger skill.

Secondary output

  • explicit guardrails: what does NOT count as done
  • next-step routing instruction when the stop condition fires

Evidence / caveat output

Runtime status: Not Run | Attempted | Produced | Verified | Failed
Artifact status: Not Produced | Produced | Verified | Failed
Evidence used: <links, paths, logs, or "none">
Limitations: <known gaps>
  • Default artifact status is Not Produced; default runtime status before execution is Not Run.
  • Truth states are downgrade-only, never upgrade.
  • A stop condition firing does NOT upgrade any truth state; downstream evidence skills (such as render-export-evidence and pre-handoff-verification) decide labels.

Required laws

  • ../../laws/evidence-before-done.md
  • ../../laws/non-blender-user-language.md
  • ../../laws/no-arbitrary-python-interface.md
  • ../../laws/official-runtime-only.md

Official runtime boundary

Process and discipline skill only—no Python code and no Blender execution. This skill writes the stop condition before work starts and routes handoff when the condition is met; it never executes runtime tasks or upgrades truth states.

Operating procedure

  1. Confirm single-recipe scope BEFORE work begins (if multiple recipes exist, hand off to blender-recipe-decomposer first).
  2. Consume measurable acceptance rows from acceptance-criteria-builder and write one concrete stop-condition sentence for the recipe.
  3. List 3-5 items that are explicitly OUT OF SCOPE for "done".
  4. Pin the exact catalog skill that receives the handoff when the stop condition fires.
  5. Hold the boundary: stop polishing once the condition fires and route to the handoff skill (such as pre-handoff-verification or render-export-evidence) without claiming a truth-state upgrade.

Decision tree

Stop condition vague ("looks great")?
  → Route to acceptance-criteria-builder for measurable rows, then rewrite as one concrete sentence
Multiple stop conditions or recipes proposed?
  → Route to blender-recipe-decomposer to split scope, or keep the highest-priority condition and move others to out-of-scope
Work already started and scope is shifting mid-flight?
  → Hand off to scope-guard
Stop condition not yet evaluable in current mode?
  → Mark as forward-condition; keep runtime Not Run and artifact Not Produced

Playbooks

Playbook A: Hero render

"Done = out/render-2026-05-09.png exists at 1920×1080, 128+ Cycles samples, mood matches brief, validation logged." Handoff trigger: render-export-evidence (then pre-handoff-verification). Out of scope: animation, post-process, alternate lighting takes.

Playbook B: GLB handoff

"Done = out/scene.glb exists, gltf-validator passes, triangle count within budget, animation contract documented." Handoff trigger: glb-web-handoff (or pre-handoff-verification). Out of scope: high-poly cinematic renders, custom shader authoring, additional LOD tiers, promotional stills.

Playbook C: Text-only plan

"Done = scene plan section count >= 7, all sections concrete, asset list flagged, handoff to scene quality checker." Handoff trigger: scene-readiness. Out of scope: running Blender, producing files, writing Python.

Mode handling

Text-only mode

Stop condition refers strictly to plan completeness. Runtime status remains Not Run and artifact status remains Not Produced.

Runtime-ready mode

Stop condition refers to target artifacts and acceptance rows. When the condition fires, it routes to render-export-evidence or pre-handoff-verification—firing does not itself upgrade runtime or artifact status to Produced or Verified.

Blocked runtime mode

Stop condition is recorded before work begins as a forward condition awaiting runtime readiness; runtime status stays Not Run and artifact status stays Not Produced.

Validation checklist

  • Written BEFORE work begins on a single recipe
  • Stop condition is exactly one concrete sentence consuming acceptance-criteria-builder rows
  • Out-of-scope list (3-5 items) is present and explicit
  • Handoff trigger names a real BlendOps catalog skill
  • Does not claim or trigger a truth-state upgrade upon firing
  • Plain language used (no Python, no Blender execution claims)

Pass / Warn / Fail rubric

VerdictCriteria
PassOne concrete stop condition + out-of-scope + handoff.
WarnStop condition present but slightly soft; out-of-scope partial.
FailVague "looks good" stop condition; no out-of-scope; no handoff; multiple conditions stacked.

Failure handling

  • Vague stop condition without measurable criteria → route to acceptance-criteria-builder, then rewrite.
  • Multiple recipes or conditions stacked → route to blender-recipe-decomposer to split into separate recipes.
  • User pushes for "more polish" or changes scope after work starts → hand off to scope-guard.

Troubleshooting

ProblemResponse
User wants "perfect" before stoppingConsume concrete rows from acceptance-criteria-builder; place "perfect" polish items into the out-of-scope list.
Stop condition keeps moving mid-flightMid-recipe scope drift; hand off to scope-guard.
Firing treated as Verified without evidenceDowngrade-only rule applies (default artifact Not Produced); route to render-export-evidence and pre-handoff-verification to evaluate truth states.

Best practices

  • One sentence, one stop condition, one recipe.
  • Write the condition BEFORE work begins.
  • Out-of-scope is at least as important as in-scope.
  • "Done" is honest, not optimistic.

Good examples

  • "Done = single hero still exported at 1920x1080 meeting the approved framing and lighting acceptance rows. Out of scope: animation, post-process grading, alternate lighting takes. Handoff trigger: render-export-evidence."

Bad examples

  • "Done when it looks great." — vague.

User-facing response template

Recipe: <name>
Stop condition (one sentence, concrete): <…>
Out of scope for "done":
  - <…>
  - <…>
  - <…>
Handoff trigger: <skill>
Mode: <text-only / runtime-ready / blocked>
Limitations: <gaps>

Anti-patterns

  • Stacking multiple stop conditions or multiple recipes into one record.
  • Using vague language ("when it looks great").
  • Defining or moving the stop condition after work has already begun.
  • Treating a fired stop condition as an automatic upgrade to Produced or Verified.
  • Blurring roles with acceptance-criteria-builder, stage-gates, or scope-guard.

Cross-skill handoff

<!-- blendops:generated:start handoffs -->
  • [upstream_reference] Intent brief → ../intent-to-3d-brief-writer/SKILL.md
  • [boundary_delegation] Scope splitting beforehand → ../blender-recipe-decomposer/SKILL.md
  • [upstream_reference] Measurable acceptance rows → ../acceptance-criteria-builder/SKILL.md
  • [progression] Per-stage workflow gates → ../stage-gates/SKILL.md
  • [progression] Mid-flight scope drift → ../scope-guard/SKILL.md
  • [progression] Artifact and render evidence → ../render-export-evidence/SKILL.md
  • [progression] Final pre-handoff gate → ../pre-handoff-verification/SKILL.md
<!-- blendops:generated:end handoffs -->

Non-goals

  • Run Blender or execute Python.
  • Split multi-recipe scope (blender-recipe-decomposer).
  • Author raw measurable acceptance rows (acceptance-criteria-builder).
  • Enforce per-stage checklist gates (stage-gates).
  • Police mid-flight scope drift (scope-guard).
  • Gate the final delivery (pre-handoff-verification) or upgrade runtime/artifact truth states.

References

  • references/stop-condition-templates.md
  • references/out-of-scope-patterns.md
  • references/done-vs-perfect.md
  • ../../docs/skill-system.md

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.