agentsclimarketplace

Phase dev rules

Skill zig999/siegard-code/dist/.claude/skills/phase-dev-rules

Exit criteria checkers and worker routing table for the dev (implementation) phase. Consumed by orchestrator-dev.md to dispatch workers via select_worker.py and evaluate phase transition gates (check_all_impl_tasks_terminal, check_all_deliveries_qa_ready, check_no_open_prohibitions). Not user-invocable — orchestrators call scripts directly.From its SKILL.md

Install
npx -y skills add zig999/siegard-code --skill phase-dev-rules

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 5 commands, including `python3 .claude/skills/phase-dev-rules/scripts/select_worker.py` and 4 more.

SKILL.md

6.0 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it

phase-dev-rules

Phase rules skill for the dev (implementation) phase. Provides exit criteria checkers and worker routing table consumed by orchestrator-dev.md.

Contract

The orchestrator calls this skill's scripts directly. No inter-skill communication envelope needed. Every script returns a JSON object to stdout and exits 0 on success or 1 on error.


Phase identity

FieldValue
phase_namedev
order2
requiredtrue
worker_defaultu-be-developer

Worker routing table

Maps task.type + stack to worker sub-agent. Stack is resolved by orchestrator-dev from handoff-manifest.yaml before calling this script (Decision D2).

For fullstack projects, orchestrator-dev spawns two planning tasks with explicit split stacks (fullstack_be and fullstack_fe) so both planners run in parallel.

task.typestackworker subagent_type
planningbeu-be-planner
planningfeu-fe-planner
planningfullstack_beu-be-planner
planningfullstack_feu-fe-planner
planningfullstacku-be-planner (legacy fallback)
implbeu-be-developer
implfeu-fe-developer
implfullstacku-be-developer
specbeu-be-developer
specfeu-fe-spec-writer
specfullstacku-fe-spec-writer
* (default)anyu-be-developer

scripts/select_worker.py

Returns the worker sub-agent name for a given task type and stack.

Usage

python3 .claude/skills/phase-dev-rules/scripts/select_worker.py \
  --task-type <type> \
  --stack <be|fe|fullstack|fullstack_be|fullstack_fe>

Output (exit 0)

{"worker": "u-be-developer", "task_type": "impl", "stack": "be", "phase": "dev"}

Error (exit 1, stderr)

{"status": "error", "reason": "internal_error", "detail": "<message>"}

Exit criteria

All three criteria must be met before the dev phase can transition. DLQ tasks block transition — a task in DLQ represents a failure, not a completed deliverable.

CriterionScriptDescription
all_impl_tasks_terminalscripts/check_all_impl_tasks_terminal.pyAll dev tasks in completed; zero DLQ tasks
all_deliveries_qa_readyscripts/check_all_deliveries_qa_ready.pyEvery delivery.md has qa_ready: true
no_open_prohibitionsscripts/check_no_open_prohibitions.pyNo delivery.md has a non-empty prohibition_violations list

See exit-criteria.json for the machine-readable declaration.

Environment variables

VariableDefaultDescription
ORCH_PROJECT_DIR.Project root — used to resolve delivery.md artifact paths

scripts/check_backlog_scope.py

Post-planner backlog scope guard (L4) — NOT an exit criterion: orchestrator-dev runs it in Step 4.0, after the planning task completes and BEFORE creating any impl task. Derives the change scope from triage (lib/spec_scope.py, the same single source as the SDD gates) and scans each Task Contract file for domains/<slug>/ references. Blocks when any TC references ONLY out-of-scope domains — an /u-improve must not be re-broadened by planning. Conservative: scope None (u-spec/greenfield) passes trivially; a TC with no domain references is allowed (cannot attribute); ≥1 in-scope reference is allowed.

python3 .claude/skills/phase-dev-rules/scripts/check_backlog_scope.py \
  --backlog <session_dir>/backlog/backlog.json --workflow-id <wid>

Output (exit 0 ok / exit 1 blocked):

{"status": "ok", "check": "backlog_scope", "scoped": true,
 "scope_domains": ["billing"], "tcs_checked": 4, "violations": [], "unreadable": []}

Blocked flow (orchestrator-dev Step 4.0): one planner revision with the violations injected into the prompt → still blocked → E22_backlog_scope_violation.


scripts/check_all_impl_tasks_terminal.py

Criterion: every task in the dev phase has status completed. DLQ tasks block the criterion (a failed task is not a deliverable). Not met if there are no dev tasks.

python3 .claude/skills/phase-dev-rules/scripts/check_all_impl_tasks_terminal.py

Output schema:

{
  "criterion": "all_impl_tasks_terminal",
  "met": true,
  "evidence": {
    "total": 10,
    "terminal": 10,
    "non_terminal": [],
    "dlq": [],
    "dlq_blocks_criterion": false
  }
}

scripts/check_all_deliveries_qa_ready.py

Criterion: every delivery.md artifact path listed in task_completed events for the dev phase contains the pattern qa_ready: true.

python3 .claude/skills/phase-dev-rules/scripts/check_all_deliveries_qa_ready.py

Output schema:

{
  "criterion": "all_deliveries_qa_ready",
  "met": true,
  "evidence": {
    "total": 5,
    "ready": 5,
    "not_ready": []
  }
}

met is false if no delivery artifacts are found (tasks completed with no artifacts).


scripts/check_no_open_prohibitions.py

Criterion: no delivery.md artifact contains a non-empty prohibition_violations list.

A prohibition violation is detected when the file contains the pattern: prohibition_violations: followed by at least one list item (- on the next non-blank line).

python3 .claude/skills/phase-dev-rules/scripts/check_no_open_prohibitions.py

Output schema:

{
  "criterion": "no_open_prohibitions",
  "met": true,
  "evidence": {
    "total": 5,
    "clean": 5,
    "violations": []
  }
}

What ships with it: 9 files

44.5 KB alongside SKILL.md, 8 of them executable

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.