/phase-contract
Internal contract: the single owner of the eight phase-lint rules, the fixed PASS/BLOCKED result, and the normalized phase fingerprint. Consumed by plan-feature-scaffold, plan-fix, and execute-phase. Not a menu entry.
$ npx -y skills add gtrabanco/agentic-workflow --skill phase-contract --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/phase-contract
Context preview
The summary Claude sees to decide when to auto-load this skill.
Internal contract: the single owner of the eight phase-lint rules, the fixed PASS/BLOCKED result, and the normalized phase fingerprint. Consumed by plan-feature-scaffold, plan-fix, and execute-phase. Not a menu entry.
SKILL.md
phase-contract.SKILL.mdname: phase-contract
user-invocable: false
version: 1.0.0
author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>"
license: MIT
metadata:
internal: true
description: >
Internal contract: the single owner of the eight phase-lint rules, the fixed
PASS/BLOCKED result, and the normalized phase fingerprint. Consumed by
plan-feature-scaffold, plan-fix, and execute-phase. Not a menu entry.
Phase Contract (internal)
The one authoritative owner of phase shape for this workflow. Planners lint every phase they emit against the eight rules below; `execute-phase` re-checks the same rules before any edit. Nothing else may define what a valid phase is.
When to use
- `plan-feature-scaffold` — lint every phase of a feature plan before emission.
- `plan-fix` — lint every phase of a fix SPEC before commit.
- `execute-phase` — phase-lint pre-flight guard before editing a phase.
- Templates store the contract version + fingerprint + lint result, never the
eight rules (they point here).
The eight phase-lint rules
Every implementation phase must pass all 8 boxes before it is emitted (planner skills) or executed (`execute-phase` pre-flight). Fail-closed: any unticked box blocks emission/execution until the phase is re-cut or split.
1. **Title names ONE deliverable** — FAIL if it joins nouns with `+`, `,`, `&`, `and`/`y`, or `/`. 2. **One declared layer** — each phase declares exactly one of the fixed enum `schema/db | domain | api | ui | config/infra | docs | hardening | close-out`; FAIL if any task's target file belongs to another. Tests for the phase's own layer belong to the phase; a test-only phase declares `hardening`. 3. **≤ 8 tasks** (close-out phase: ≤ 10, only the literal close-out chain). 4. **One checkbox = one deliverable** — FAIL if a task contains a `→` chain of implementation steps, enumerates > 3 cases/scenarios, or creates > 1 file of distinct concerns. 5. **Zero decision words** — FAIL on `Decide`, `choose`, `OR` between alternatives, `If … then <change scope>`. 6. **No conditional scope mutation** — a task may not move work between phases at runtime. 7. **No external/manual gates inside implementation phases** — human/out-of-repo verifications live in the hardening/close-out phase, marked `manual`. 8. **Machine-checkable done-when** — every phase ends with one verifiable invariant (a command + expected outcome).
Result — fixed PASS/BLOCKED output
Phase-lint: PASS (8/8)
or, on the first failing box:
Phase-lint: BLOCKED — box <n>: <one-line reason>
A BLOCKED phase is re-cut or split; it is never emitted, committed, or executed as-is (no `--force` bypass exists for a non-atomic phase — that decision belongs to the user).
Normalized phase fingerprint
Each phase's fingerprint is a deterministic string over the phase's shape: `P<n>:<layer>:<n-tasks>:<title-deliverable>`. It binds the lint result to the exact phase version a plan committed to — templates and plans record `Phase-lint: PASS (8/8) · fingerprint <fingerprint>` so later re-lints and `execute-phase` can confirm nothing in the phase shape drifted since planning.
Guardrails
- Sole owner of the eight rules — planners and executor point here, never carry
their own copy.
- Never relax a rule to let a phase pass; re-cut the phase instead.
- Docs only — no code, no branch.
Read more
name: phase-contract user-invocable: false version: 1.0.0 author: "Gabriel Trabanco <gtrabanco@users.noreply.github.com>" license: MIT metadata: internal: true description: > Internal contract: the single owner of the eight phase-lint rules, the fixed PASS/BLOCKED result, and the normalized phase fingerprint. Consumed by plan-feature-scaffold, plan-fix, and execute-phase. Not a menu entry.
Phase Contract (internal)
The one authoritative owner of phase shape for this workflow. Planners lint every phase they emit against the eight rules below; `execute-phase` re-checks the same rules before any edit. Nothing else may define what a valid phase is.
When to use
- `plan-feature-scaffold` — lint every phase of a feature plan before emission.
- `plan-fix` — lint every phase of a fix SPEC before commit.
- `execute-phase` — phase-lint pre-flight guard before editing a phase.
- Templates store the contract version + fingerprint + lint result, never the
eight rules (they point here).
The eight phase-lint rules
Every implementation phase must pass all 8 boxes before it is emitted (planner skills) or executed (`execute-phase` pre-flight). Fail-closed: any unticked box blocks emission/execution until the phase is re-cut or split.
1. **Title names ONE deliverable** — FAIL if it joins nouns with `+`, `,`, `&`, `and`/`y`, or `/`. 2. **One declared layer** — each phase declares exactly one of the fixed enum `schema/db | domain | api | ui | config/infra | docs | hardening | close-out`; FAIL if any task's target file belongs to another. Tests for the phase's own layer belong to the phase; a test-only phase declares `hardening`. 3. **≤ 8 tasks** (close-out phase: ≤ 10, only the literal close-out chain). 4. **One checkbox = one deliverable** — FAIL if a task contains a `→` chain of implementation steps, enumerates > 3 cases/scenarios, or creates > 1 file of distinct concerns. 5. **Zero decision words** — FAIL on `Decide`, `choose`, `OR` between alternatives, `If … then <change scope>`. 6. **No conditional scope mutation** — a task may not move work between phases at runtime. 7. **No external/manual gates inside implementation phases** — human/out-of-repo verifications live in the hardening/close-out phase, marked `manual`. 8. **Machine-checkable done-when** — every phase ends with one verifiable invariant (a command + expected outcome).
Result — fixed PASS/BLOCKED output
Phase-lint: PASS (8/8)
or, on the first failing box:
Phase-lint: BLOCKED — box <n>: <one-line reason>
A BLOCKED phase is re-cut or split; it is never emitted, committed, or executed as-is (no `--force` bypass exists for a non-atomic phase — that decision belongs to the user).
Normalized phase fingerprint
Each phase's fingerprint is a deterministic string over the phase's shape: `P<n>:<layer>:<n-tasks>:<title-deliverable>`. It binds the lint result to the exact phase version a plan committed to — templates and plans record `Phase-lint: PASS (8/8) · fingerprint <fingerprint>` so later re-lints and `execute-phase` can confirm nothing in the phase shape drifted since planning.
Guardrails
- Sole owner of the eight rules — planners and executor point here, never carry
their own copy.
- Never relax a rule to let a phase pass; re-cut the phase instead.
- Docs only — no code, no branch.
🇪🇸 Versión en español A reusable set of agent skills that run a disciplined, doc-driven workflow for building software with agents — from idea/issue to a reviewed, classified, merge-ready change.
Repo: gtrabanco/agentic-workflow
Other skills on agentic-workflow.
- /audit-docs
Audit cross-document coherence: docs ↔ roadmap ↔ code ↔ fix index ↔ issues. Finds drift — features in docs/ not in the roadmap (or vice versa), fix-index entries already merged/closed, broken documentation-map links, dependency cycles, artifacts in the wrong language,
Open skill - /audit-pr
Audit a whole PR against the delivery contract and return MERGE-READY or evidenced blockers with the full URL. Consumes the current review-change REVIEW-PASS receipt instead of re-running review axes; posts a SHA-bound ready comment; never edits or merges. Triggers: "audit-pr",
Open skill - /bump-skill
Internal agentic-workflow maintenance: after SKILL.md edits, bump semver, lint authoring rules, and synchronize changelogs, READMEs, routing metadata, and migrations. Triggers: "bump the skill", "update the changelog", "version bump".
Open skill - /design-feature
Turn a raw idea or existing feature into a designed product SPEC by completing entity, integration, role, and expectation closure. Upserts never destroy recorded decisions. Triggers: "design-feature", "design this feature", "define product scope".
Open skill - /discover-repository-state
Discover repository evidence and write a frozen Normalized Repository State. Produces verified repository evidence and keeps facts, decisions, planned work, documentation, and inference separate. It does not make recommendations or infer implementation from documentation.
Open skill - /execute-phase
Implement exactly one planned feature or fix phase with pre-edit gates, verified commit discipline, and final PR close-out. Use --fix for fix SPECs; --force is user-only. Triggers: "execute-phase", "implement phase", "build feature from spec", "execute fix".
Open skill

