packet-builder
The builder is manifest-driven: everything authority-, case-, or
jurisdiction-specific lives in packet-manifest.yaml. This skill
shepherds that manifest to completeness and then runs the builder.
See templates/packet-manifests/schema.yaml for the authoritative
schema, and examples/maryland-mustang/complaint_packet/packet-manifest.yaml
for a filled-in synthetic reference.
When this skill fires
- User says "build the packet" or "compile the complaint."
- Complaint draft exists under
drafts/ and exhibit evidence is
in place under evidence/.
- After the
authorities-finder run has identified the forum.
Procedure
Locate or scaffold the manifest.
- If
packet-manifest.yaml exists in the packet directory, load
it and list which sections are filled.
- If not, copy
templates/packet-manifests/example-generic-dispute.yaml
into place and walk through the sections below.
Fill the manifest header with the user.
packet.name — a slug like maryland-mustang-mia.
authority — name, short code, mailing address, intake URL.
Pulled from authorities-finder output; do not retype by
hand if the skill already found it.
complainant — name, mailing address, email. For a public
derivative, use the scrubbed synthetic values.
respondent — name, role, reference number (claim number,
case number, policy number).
Complaint narrative. complaint.source points at the
markdown or docx draft under drafts/. complaint.title shows
up in the cover page. Write lawyer-mode per tone-modes skill;
this is outbound.
Exhibit list. Each exhibit is {label, title, description, source(s), date?}. Labels are typically A, B, C, ... in the
order they'll be referenced in the complaint. Sources are paths
under evidence/ or drafts/. Multiple sources per exhibit are
fine — the builder concatenates in order.
Reference appendices. Optional. For policy / regulatory
compilations that aren't exhibits per se but that the
complainant wants attached for the reader's reference. Each has
{name, title, sources, note}.
Sources may live anywhere in the case folder; common locations:
evidence/policy/... for case-specific governing documents
produced by the counterparty (e.g., the insurer's policy form
that applies to the insured).
references/raw/... or references/readable/... for
third-party authoritative text (statutes, regulations, ToS)
ingested via the trusted-sources
skill. If a referenced statute / regulation / ToS isn't already
under references/, hand off to trusted-sources before
filling this section — drafting against the actual text catches
paraphrase drift early.
Dry-read the manifest aloud. Before calling the builder,
literally read back to the user: "Exhibit A is X, exhibit B is
Y, exhibit C is Z." This catches reordered labels and missing
sources faster than debugging the PDF.
Build.
uv run python -m scripts.packet.build path/to/packet-manifest.yaml
The builder writes a unified packet.pdf plus per-exhibit
standalone PDFs (for filers who upload one at a time) into
packet.output_dir.
Open the PDF and read it. The script is a scaffold, not an
oracle (tone-modes). A silent build is not the same as a
correct packet — check cover page names, exhibit order, and the
first page of each exhibit.
Definition of done
packet-manifest.yaml validates against the schema, the builder
ran without errors, the merged packet PDF and per-exhibit standalone
PDFs are in packet.output_dir, and the user has read the cover
page + first page of each exhibit and confirmed nothing is wrong.
If the user's next move is to publish or hand off the packet
externally (anything beyond the regulator's intake portal), do
not declare done — invoke going-public first.
If they're filing only with the regulator, hand back to
pat-workflow; the workflow ends here unless publication safety
applies.
Synthetic example
Maryland-Mustang assembles into an 8-part packet against the
Maryland Insurance Administration: complaint narrative + 6
exhibits (A policy forms, B correspondence compilation, C
valuation report, D photographs, E specialist opinion, F
salvage-transfer record) + 1 reference appendix (compiled policy
reference). The full manifest is at
examples/maryland-mustang/complaint_packet/packet-manifest.yaml.
Do not
- Do not hardcode anything in the build script. The builder has
no case-specific branches; if you need something the schema
doesn't cover, extend the schema, don't fork the script.
- Do not point a packet source at
evidence/*/raw/. The raw layer
is forensic; packets use the readable/ layer for exhibits.
- Do not ship without the
going-public check if the packet is
being published anywhere beyond the regulator's intake.
1---2name: packet-builder3description: Interactive complaint-packet assembly driven by packet-manifest.yaml — walks through authority, exhibit list, reference appendices, and runs scripts/packet/build.py. Triggers when the user says "build the packet" or when a complaint narrative and exhibit set are ready to compile.4license: Apache-2.05---67# packet-builder89The builder is manifest-driven: everything authority-, case-, or10jurisdiction-specific lives in `packet-manifest.yaml`. This skill11shepherds that manifest to completeness and then runs the builder.1213See `templates/packet-manifests/schema.yaml` for the authoritative14schema, and `examples/maryland-mustang/complaint_packet/packet-manifest.yaml`15for a filled-in synthetic reference.1617## When this skill fires1819- User says "build the packet" or "compile the complaint."20- Complaint draft exists under `drafts/` and exhibit evidence is21 in place under `evidence/`.22- After the `authorities-finder` run has identified the forum.2324## Procedure25261. **Locate or scaffold the manifest.**27 - If `packet-manifest.yaml` exists in the packet directory, load28 it and list which sections are filled.29 - If not, copy `templates/packet-manifests/example-generic-dispute.yaml`30 into place and walk through the sections below.31322. **Fill the manifest header with the user.**33 - `packet.name` — a slug like `maryland-mustang-mia`.34 - `authority` — name, short code, mailing address, intake URL.35 Pulled from `authorities-finder` output; do not retype by36 hand if the skill already found it.37 - `complainant` — name, mailing address, email. For a public38 derivative, use the scrubbed synthetic values.39 - `respondent` — name, role, reference number (claim number,40 case number, policy number).41423. **Complaint narrative.** `complaint.source` points at the43 markdown or docx draft under `drafts/`. `complaint.title` shows44 up in the cover page. Write lawyer-mode per `tone-modes` skill;45 this is outbound.46474. **Exhibit list.** Each exhibit is `{label, title, description,48 source(s), date?}`. Labels are typically A, B, C, ... in the49 order they'll be referenced in the complaint. Sources are paths50 under `evidence/` or `drafts/`. Multiple sources per exhibit are51 fine — the builder concatenates in order.52535. **Reference appendices.** Optional. For policy / regulatory54 compilations that aren't exhibits per se but that the55 complainant wants attached for the reader's reference. Each has56 `{name, title, sources, note}`.5758 Sources may live anywhere in the case folder; common locations:59 - `evidence/policy/...` for case-specific governing documents60 produced by the counterparty (e.g., the insurer's policy form61 that applies to the insured).62 - `references/raw/...` or `references/readable/...` for63 third-party authoritative text (statutes, regulations, ToS)64 ingested via the [trusted-sources](../trusted-sources/SKILL.md)65 skill. If a referenced statute / regulation / ToS isn't already66 under `references/`, hand off to `trusted-sources` *before*67 filling this section — drafting against the actual text catches68 paraphrase drift early.69706. **Dry-read the manifest aloud.** Before calling the builder,71 literally read back to the user: "Exhibit A is X, exhibit B is72 Y, exhibit C is Z." This catches reordered labels and missing73 sources faster than debugging the PDF.74757. **Build.**7677 ```78 uv run python -m scripts.packet.build path/to/packet-manifest.yaml79 ```8081 The builder writes a unified `packet.pdf` plus per-exhibit82 standalone PDFs (for filers who upload one at a time) into83 `packet.output_dir`.84858. **Open the PDF and read it.** The script is a scaffold, not an86 oracle (`tone-modes`). A silent build is not the same as a87 correct packet — check cover page names, exhibit order, and the88 first page of each exhibit.8990## Definition of done9192`packet-manifest.yaml` validates against the schema, the builder93ran without errors, the merged packet PDF and per-exhibit standalone94PDFs are in `packet.output_dir`, and the user has read the cover95page + first page of each exhibit and confirmed nothing is wrong.9697If the user's next move is to publish or hand off the packet98externally (anything beyond the regulator's intake portal), do99**not** declare done — invoke `going-public` first.100101If they're filing only with the regulator, hand back to102`pat-workflow`; the workflow ends here unless publication safety103applies.104105## Synthetic example106107Maryland-Mustang assembles into an 8-part packet against the108Maryland Insurance Administration: complaint narrative + 6109exhibits (A policy forms, B correspondence compilation, C110valuation report, D photographs, E specialist opinion, F111salvage-transfer record) + 1 reference appendix (compiled policy112reference). The full manifest is at113`examples/maryland-mustang/complaint_packet/packet-manifest.yaml`.114115## Do not116117- Do not hardcode anything in the build script. The builder has118 no case-specific branches; if you need something the schema119 doesn't cover, extend the schema, don't fork the script.120- Do not point a packet source at `evidence/*/raw/`. The raw layer121 is forensic; packets use the `readable/` layer for exhibits.122- Do not ship without the `going-public` check if the packet is123 being published anywhere beyond the regulator's intake.