pack.yaml reference
Every Charter Pack carries an authored pack.yaml at its root. The model is
PackDescriptor (src/charter/offering/packs/pack_descriptor.py); unknown
fields are refused, and a field retired by an earlier release is refused with
RETIRED_PACK_FIELD. The generated pack-manifest.yaml is a separate file and
is never hand-edited.
Fields
| Field | Required | Meaning |
|---|---|---|
pack_id |
yes | Stable 26-character ULID identity. Minted once, never changed. |
name |
yes | Human-readable handle. Display only, not the identity. |
pack_version |
built-in only | Semantic version string. Required when pack_level is built-in; optional for org and project. |
parent_pack |
no | ULID of the pack this one extends. Omit or null for a root pack. |
pack_level |
yes (see below) | The tier the pack belongs to: built-in, org or project. |
requires_core |
no | PEP 440 version specifier of the Spec Kitty core versions the pack supports, for example ">=4.0,<5.0". An unparsable value is a schema error. Absent means no constraint (#6046). |
active_charter |
no | Pack-relative path to the active-charter file. Defaults to org-charter.yaml for an org pack. |
pack_drg |
no | Pack-relative path to the DRG source. Defaults per level: the sharded *.graph.yaml files at the root (built-in), drg/fragment.yaml (org), graph.yaml (project). |
active_charter and pack_drg must resolve inside the pack; an absolute path or a .. escape is rejected by
charter pack validate.
pack_level
The allowed values are the three tiers owned by kernel.pack_tiers. The
declared value must match the position the pack is configured at:
- org packs: a mismatch is refused when the pack is loaded
(
PACK_LEVEL_MISMATCH, attributed topack.yaml). Apack.yamlthat cannot be read or fails the schema is refused too. - built-in and project positions: nothing refuses at load. The validator
can report the mismatch when a caller passes the configured position
(
validate_pack(..., expected_level=...)), butcharter pack validateon a bare path has no position, so it skips the mismatch check and still reportsPACK_LEVEL_MISSINGand schema faults.
Deprecation window. During the window a pack.yaml that omits pack_level
(or an org pack with no pack.yaml) still loads under the tier of the position
it is configured at, and reports a PACK_LEVEL_MISSING warning. After the
window the omission is a refusal. The pack_level_backfill upgrade migration
writes pack_level: project into an existing project pack.
Regenerating a built-in pack's graph
spec-kitty charter pack regenerate-graph [--check] --pack-root <dir>
regenerates (or, with --check, verifies) the sharded *.graph.yaml fragments
and pack-manifest.yaml for a fetched copy of a built-in-level pack. The
root needs a valid pack.yaml declaring pack_level: built-in; org and project
packs are refused with exit 1 before anything is written, because the generators
would overwrite their graph.yaml or write a wrong manifest. Without the flag
the command targets the shipped built-in pack.