The `/ba:deliver` dispatcher closes the downstream gap by rendering six template-driven deliverables from the entity tree: **Scope Statement**, **UAT Report**, **Acceptance Record**, **Release Notes**, **Go-Live Checklist**, and **Handover Brief** — the documents that gate payment in fixed-price delivery. None are generated by an LLM; all are rendered by deterministic scripts (ruling R7).
Scanned 9/23/2026
Install to Claude Code
npx -y skills add trungdo9/ClauKit --skill deliver --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Deliver?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/trungdo9-deliver)More formats (shields.io, HTML) on the badges page.
# Delivery — the six downstream documents (D-13)
The `/ba:deliver` dispatcher closes the downstream gap by rendering six template-driven deliverables
from the entity tree: **Scope Statement**, **UAT Report**, **Acceptance Record**, **Release Notes**,
**Go-Live Checklist**, and **Handover Brief** — the documents that gate payment in fixed-price delivery.
None are generated by an LLM; all are rendered by deterministic scripts (ruling R7).
## The two classes — read first
Read [deliverable-classes.md](references/deliverable-classes.md) — every deliverable declares its class
(`derived` or `owned`) in a machine-readable header. Class determines who owns it after seeding:
- **`derived`** (scope, release-notes) — regenerated before commit, byte-stable, never hand-edited.
Edit the entity tree and re-run; do not edit the document.
- **`owned`** (uat, acceptance, golive, handover) — seeded once, then human-owned. The generator refuses
to overwrite without `--force`. After seed, fill in the `[TO FILL]` cells; running again discards your
work unless you pass `--force` (and `--force` overwrites everything).
Both classes are committed — every byte is a fact.
## The six documents
| Action | File | Class | Purpose in delivery |
|---|---|---|---|
| `scope` | SCOPE-001.md | derived | What is *not* in the project. Sections: vision (from PRD), in-scope EPICs with their exclusions, constraints (NFRs), and the union of all exclusions deduplicated by entity. |
| `release-notes` | RELEASE-NOTES-001.md | derived | Public facing. FRs and USs grouped by optional `release:` key (descending order), groups in order, unreleased last. |
| `uat` | UAT-001.md | owned | Test run record — one row per TC, with parent, result (pass/fail/blocked), date, tester. One coverage line whose numbers equal `traceability.cjs gap`'s report. Sign block. |
| `acceptance` | ACCEPTANCE-001.md | owned | Biên bản nghiệm thu (delivery receipt). Delivered FRs by id+title with their EPIC, open defects from UAT (read from UAT-001.md when it exists), variance section (approved CRs only — see anti-patterns), sign block. |
| `golive` | GOLIVE-001.md | owned | Business readiness only — five checklist items: training, data reconciliation (expressed as AC id), UAT sign-off, comms sent, rollback decision owner. Technical half (deploy, rollback, runbook) in project's `docs/deployment-guide.md`; create via `/ck:docs` if absent. |
| `handover` | HANDOVER-001.md | owned | Shape only — the `docs-manager` agent (engineer kit prerequisite) fills content. Five tables: accounts, environments, configs, procedures, contacts. No credentials — table names where secrets live, not their values. |
## What `/ba:deliver` does not own
These are the redirects — read them *where they are owned*:
- **`release-notes`'s version and date policy** — stays 🟡 on purpose. `/ba:prd roadmap`'s Now/Next/Later is the honest BA-side answer.
- **Handover content** — the `docs-manager` agent, named in the template with `engineer` kit prerequisite.
- **Technical half of go-live** — `/ck:docs` and the project's `deployment-guide.md`.
- **Go-live's *procedure* half** — who runs what and when. Naming the *decider* (rollback decision owner) is BA's contribution; the *procedure* is not this kit's.
- **Data migration reconciliation *implementation*** — the `database-admin` agent (engineer kit prerequisite) and its AC (`/ba:spec ac` on the migration FR). The criterion (which AC) is BA's; the plan (how) is not.
## The sign block — fixed shape
Read [sign-block.md](references/sign-block.md). This exact table, with these exact role names and cells,
is shared between `uat` and `acceptance`. Neither the render script nor a human should vary it — the bytes
are load-bearing for a billing document.
## Anti-patterns to avoid
1. **Hand-editing a `derived` file** — if the rendered scope or release-notes do not match your intent,
edit the entity tree (add an `out_of_scope` field, give an EPIC a `release:` key, etc.) and re-run
`deliver`. Do not edit the document.
2. **Using `--force` to overwrite a filled-in `owned` file** — it discards everything you typed. When a
second run is needed (e.g., after entities change), coordinate with the person who filled it in, or
edit the file manually if ownership has not transferred.
3. **Typing a coverage number by hand** — the `**Độ phủ:**` line in `UAT-001.md` is **read from** the
index and tool output by the same process that renders the file, not **typed by** a human. A client
document whose coverage number drifts from the tool's is worse than one with none. If the line seems
wrong, check the entity tree for `TC` orphans or unsourced nodes.
4. **Variance section listing a CR that is not `approved`** — the acceptance variance (changes in
progress) is what was *agreed*, not what was *proposed*. Listing a rejected or proposed CR in it is
a billing dispute waiting to happen. The filter runs on `status: approved` from the CR entity.
5. **Credentials in handover tables** — no passwords, keys, or account IDs. The table names *where* a
secret lives (e.g., "AWS account ID in Parameter Store under `/prod/account-id`"), not the value.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!