Tasks: Charter Pack level declared in pack.yaml

Mission: pack-level-declared-in-pack-yaml-01M4NVEN | Branch: issue-6048-pack-level-pack-yaml Plan: plan.md · Spec: spec.md

7 work packages across lanes A–G. Critical path WP01→WP02. WP06 (provenance respell, isolated) and WP07 (docs) run parallel from t0. After WP01: WP02/WP03/WP04/WP05 run in parallel. Dependency DAG: WP01 → {WP02, WP03, WP04, WP05}; WP06, WP07 independent.

Subtask Index

IDDescriptionWPParallel
T001ATDD: descriptor level/version/requires_core schemaWP01
T002Add pack_level (reuse kernel PackTier Literal)WP01
T003Add requires_core (optional, specifier-validated)WP01
T004Add active_charter/pack_drg + conditional pack_versionWP01
T005New pack_level single-authority gate (empty allowlist)WP01
T006ATDD: load refusals (MISMATCH/MISSING)WP02
T007resolve_pack_layout seam (new pack_layout.py)WP02
T008Route existing filename lookups through the seamWP02
T009validate branches on declared levelWP02
T010check_pack_level + MISMATCH wiring (position-aware)WP02
T011PACK_LEVEL_MISSING warn-then-refuse constantWP02
T012Org-path pack.yaml read (OrgPackConfig, bounded)WP02
T013ATDD: project-pack backfill migrationWP03[P]
T014Implement migration (config-aware, no mkdir)WP03[P]
T015Idempotency + non-clobberWP03[P]
T016Register + wire the migrationWP03[P]
T017ATDD: authored-field gate expects pack_levelWP04[P]
T018built-in pack.yaml += pack_level: built-inWP04[P]
T019new packs/internal/pack.yaml (org + pointers + id)WP04[P]
T020internal pack_id drift testWP04[P]
T021Regenerate + commit built-in manifest (LS-4)WP04[P]
T022ATDD: regenerate-graph --pack-rootWP05[P]
T023--pack-root on regenerate-graph (write + --check)WP05[P]
T024Clean-tree level-aware digest (LF-normalized)WP05[P]
T025Assert snapshot_sha256 untouched (NFR-004)WP05[P]
T026requires_core checker (core_compat)WP05[P]
T027Wire + help textWP05[P]
T028ATDD: get_provenance hyphenated + manifest self-healWP06[P]
T029Respell emitter + derive displays from kernel (LS-1)WP06[P]
T030Mappers + serialized surfaces respellWP06[P]
T031Drop NFR-003 carve-out + rewrite docstringsWP06[P]
T032Update dogfood agent_profiles_manifest.jsonWP06[P]
T033Update ~7 serialized-contract testsWP06[P]
T034Update ~24 in-memory assertion testsWP06[P]
T035Fold ADR 2026-10-11-2 (Decision §2 aligned)WP07[P]
T036ADR consequences: retire NFR-003 + cross-version noteWP07[P]
T037docs/context charter.md + governance.mdWP07[P]
T038CHANGELOG entryWP07[P]
T039Finalize diagram/README + close #6049WP07[P]

Work Packages

WP01 — Descriptor schema + pack_level single-authority gate (lane A, root)

  • Goal: new pack.yaml fields + the empty-allowlist pack_level gate. Priority: P1. Deps: none.
  • Independent test: tests/charter_offering/test_pack_descriptor_level.py + tests/architectural/test_pack_level_single_authority.py.
  • Subtasks: T001 T002 T003 T004 T005 → WP01 prompt

WP02 — Load refusals + validate branch-on-level + resolution seam (lane B)

  • Goal: MISMATCH/MISSING, level-branched validate, the one layout seam. Priority: P1. Deps: WP01.
  • Independent test: test_pack_level_load_refusals.py, test_pack_layout.py, test_org_pack_level_read.py.
  • Subtasks: T006 T007 T008 T009 T010 T011 T012 → WP02 prompt

WP03 — Project-pack backfill migration (lane C)

  • Goal: backfill pack.yaml for project packs. Priority: P2. Deps: WP01.
  • Independent test: tests/upgrade/test_pack_level_backfill.py.
  • Subtasks: T013 T014 T015 T016 → WP03 prompt

WP04 — In-repo descriptors + authored-field gate + manifest regen (lane D)

  • Goal: built-in += level; new internal pack.yaml; gate key set; regen manifest. Priority: P1. Deps: WP01.
  • Independent test: test_pack_manifest_no_author_edit.py, test_internal_pack_identity.py, test_packaging_safety.py.
  • Subtasks: T017 T018 T019 T020 T021 → WP04 prompt

WP05 — Vendoring tooling (lane E)

  • Goal: --pack-root, requires_core checker, clean-tree digest. Priority: P2. Deps: WP01.
  • Independent test: test_regenerate_graph_pack_root.py, test_pack_clean_digest.py, test_requires_core_check.py.
  • Subtasks: T022 T023 T024 T025 T026 T027 → WP05 prompt

WP06 — Provenance respell + tier-token gate extension (lane F, ISOLATED)

  • Goal: builtin→built-in unified on kernel.pack_tiers, one coherent change. Priority: P1. Deps: none (parallel t0).
  • Independent test: tests/charter/, tests/charter_offering/, test_pack_tier_token_single_authority.py, tests/specify_cli/tool_surface/.
  • Subtasks: T028 T029 T030 T031 T032 T033 T034 → WP06 prompt

WP07 — ADR fold + docs + diagram (lane G, fold last)

  • Goal: ADR 2026-10-11-2, docs/glossary/CHANGELOG, diagram/README, close #6049. Priority: P3. Deps: none.
  • Independent test: test_no_legacy_terminology.py + docs-lint/freshness/inventory checks.
  • Subtasks: T035 T036 T037 T038 T039 → WP07 prompt

MVP scope

WP01 + WP02 (schema + load/validate) is the functional MVP of #6048; WP06 (provenance unification) and WP05 (#6046 tooling) are the other two pillars.

Dependencies

WP01 ──┬── WP02
       ├── WP03
       ├── WP04
       └── WP05
WP06  (independent, isolated lane, from t0)
WP07  (independent, docs, folds last)