skills/spec-to-tests/SKILL.md
Authors failing tests and reproducers from Build Brief acceptance criteria plus verification_spec before coding starts.
npx skillsauth add bigeasyfreeman/adlc spec-to-testsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Spec -> tests is the locking stage. The Build Brief names the contract; failing tests and reproducers turn that contract into a harness that blocks guesswork and anchors code to correctness. Coding should begin only after the verifier fails for the documented reason.
phase: 3
event: context_assembly_pending
requires:
- applicability_manifest
- verification_spec
- structured acceptance_criteria
This skill runs when gen_tests receives assembled Build Brief context for a task and must author the native failing verifier artifacts that the coder will inherit.
Use exactly these inputs:
task_classificationverification_spec (primary_verifier, secondary_verifiers, optional target_files, optional expected_failure_mode)acceptance_criteriafiles_to_create/modifyreference_impl pathIf any acceptance criterion arrives as an unstructured string with no normalized id, given, when, and then, do not invent structure. Emit stuck.
.adlc/test_plan.json mapping ac_id -> test_path -> expected_pre_change_failure_reason.adlc/pre_change_run.txt capturing stdout from the pre-change run that proves the generated verifier fails for the documented reasonverification_spec, acceptance_criteria, files_to_create/modify, and reference_impl.verification_spec.target_files when present..adlc/pre_change_run.txt..adlc/test_plan.json only after the self-check passes.featurebugfixbuild_validationlint_cleanuprefactortarget_files is set, place or select tests whose paths intersect those files or the immediate native test peer paths that exercise them.infradocstarget_files when those paths are provided.securityexpected_failure_mode is set, make the pre-change run show that specific vulnerable behavior or failure signature before coding starts.Before emitting done, all of these must pass:
acceptance_criteria id has >=1 generated test.assert true, no empty bodies.expected_failure_mode when set.verification_spec.target_files when target_files is set.test_plan.json validates against the schema in this skill.test_plan.json){
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ADLC Spec-to-Tests Plan",
"type": "object",
"additionalProperties": false,
"required": [
"brief_id",
"task_id",
"generated_tests",
"pre_change_run_path",
"verifier_target_intersection",
"self_check"
],
"properties": {
"brief_id": {
"type": "string",
"minLength": 1
},
"task_id": {
"type": "string",
"minLength": 1
},
"generated_tests": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"ac_id",
"test_path",
"test_name",
"expected_pre_change_failure_reason",
"assertion_count"
],
"properties": {
"ac_id": {
"type": "string",
"pattern": "^AC-[A-Z0-9_-]+$"
},
"test_path": {
"type": "string",
"minLength": 1
},
"test_name": {
"type": "string",
"minLength": 1
},
"expected_pre_change_failure_reason": {
"type": "string",
"minLength": 1
},
"assertion_count": {
"type": "integer",
"minimum": 1
}
}
}
},
"pre_change_run_path": {
"type": "string",
"const": ".adlc/pre_change_run.txt"
},
"verifier_target_intersection": {
"type": "boolean"
},
"self_check": {
"type": "object",
"additionalProperties": false,
"required": [
"gate_1",
"gate_2",
"gate_3",
"gate_4",
"gate_5",
"gate_6"
],
"properties": {
"gate_1": {
"type": "string",
"enum": ["pass", "fail"]
},
"gate_2": {
"type": "string",
"enum": ["pass", "fail"]
},
"gate_3": {
"type": "string",
"enum": ["pass", "fail"]
},
"gate_4": {
"type": "string",
"enum": ["pass", "fail"]
},
"gate_5": {
"type": "string",
"enum": ["pass", "fail"]
},
"gate_6": {
"type": "string",
"enum": ["pass", "fail"]
}
}
}
}
}
stuck.stuck.target_files cannot be confirmed -> emit revise.No TODO/FIXME/PLACEHOLDER. No stub functions. No commented-out code. Every function has a real implementation. Every import is used.
Banned in shipped code and generated tests:
TODO, FIXME, PLACEHOLDERtodo!(), unimplemented!(), panic!("not implemented")NotImplementedError, pass, empty placeholder bodiesassert true, empty it() or test() bodies, and snapshot-only tests with no concrete assertionInput acceptance criterion:
{
"id": "AC-BALANCE-ZERO",
"given": "a newly created account with no ledger entries",
"when": "the account summary is requested",
"then": "the summary returns balance_cents set to 0",
"measurable_post_condition": "response.json.balance_cents == 0"
}
Output test body:
def test_account_summary_returns_zero_balance_for_new_account(client, account_factory):
account = account_factory(entries=[])
response = client.get(f"/accounts/{account.id}/summary")
assert response.status_code == 200
assert response.json["balance_cents"] == 0
Expected pre-change failure reason:
AssertionError: assert None == 0
Input acceptance criterion:
{
"id": "AC-CSV-TRAILING-NEWLINE",
"given": "a CSV export with one data row",
"when": "the exporter serializes the file",
"then": "the export ends with exactly one trailing newline"
}
Output test body:
def test_export_csv_ends_with_exactly_one_trailing_newline(report_factory):
report = report_factory(rows=[{"id": 1, "name": "Ada"}])
output = export_csv(report)
assert output.endswith("\n")
assert not output.endswith("\n\n")
assert output == "id,name\n1,Ada\n"
Expected pre-change failure reason:
AssertionError: assert not True
development
Orchestration skill: chains the full ADLC Build Loop. PRD → Brief → Council → Scaffold → Codegen → LDD → TDD → Council → PR. Use when implementing a new feature end-to-end.
development
# Skill: Helm & ArgoCD Deployment > Validates Helm charts and generates ArgoCD Application manifests when the ADLC pipeline produces infrastructure or service code. Ensures every deployable artifact has correct chart structure, environment-specific values, and a GitOps-ready Application manifest before code review. --- ## Why This Exists Without deployment validation in the pipeline, common failures slip through to production: - **Helm charts fail `helm template`** because of missing values,
testing
Decide whether an intersecting verifier actually exercises the semantic change.
development
# Skill: UX Flow Builder > Generates user flow diagrams (Mermaid) from PRD personas and screen specifications. Surfaces dead ends, missing screens, and disconnected flows before design or engineering starts. Helps PMs think in screens, not features. --- ## Trigger - Automatically during PRD Phase 4 (Personas & Flows) to visualize the user journey - On-demand when the PM says "show me the flow" or "map the user journey" - During PRD evaluation to verify screen connectivity --- ## Input ```