Tasks: Pack skills — charter-activatable skill kind (slices 0+1)
Strictly sequential (single_branch): WP01 → WP02 → WP03 → WP04 → WP05.
WP01 — Slice 0 — derive remaining lockstep kind tables from ArtifactKind
Prompt: tasks/WP01-slice0-kind-table-derivation.md Dependencies: none Requirements: FR-001, FR-002, SC-005
Subtasks:
- T001 — Add ArtifactKind facts
org_requirableandselection_overlayable(plan IC-01): requirable = the 10 kinds in today'sREQUIRED_KIND_FIELDS(org_charter - T002 — Derive
REQUIRED_KIND_FIELDS(specify_cli) and_REQUIRED_KIND_FIELDS(charter) from those facts — byte-for-byte same membership and ORDER-insensitive consumers verified (check iteration order dependence at org_charter - T003 — Derive
_SINGULAR_TO_PER_KIND_FIELD(drg_activation - T004 — Architectural test tests/architectural/test_kind_table_derivation
- T005 — Fix stale comment org_pack_discovery
WP02 — Register the skill kind — enum, NodeKind, schema, model, repository, doctor health
Prompt: tasks/WP02-skill-kind-registration.md Dependencies: WP01 Requirements: FR-003, FR-004, FR-005, FR-015, SC-008, SC-009
Subtasks:
- T006 — Add `ArtifactKind
- T007 — Pydantic model
PackSkill(pack_skills/models - T008 — Validator: for org/project tiers refuse a
scripts/dir next to the skill and any permission-widening frontmatter key (allowed-tools) in the body; refuse ids/rendered names starting withspk-,spec-kitty-, `spec-kitty - T009 —
PackSkillRepository(BaseDoctrineRepository subclass) loading built-in/org/project tiers; same id in two sibling org packs → hard conflict error; overrides/enhances per ADR (enhances may change defaults/triggers/tools/narrow invocation, never body or expansion) - T010 — Doctor health dimension
PackSkillHealth(loaded/skipped) in _doctrine_health
WP03 — Skill activation, default-in-force, and prepare_skill_activations
Prompt: tasks/WP03-skill-activation-and-preparation.md Dependencies: WP02 Requirements: FR-006, FR-007, FR-008, SC-006, SC-011
Subtasks:
- T011 — Config key
activated_skills(derived via CHARTER_KIND_TOKENS / YAML_KEY_MAP; verify pack_manager, charter_yaml_io,_NON_PACK_ACTIVATION_KEYSin specify_cli/charter_pack_registry - T012 — Default in force (plan decision 5): add ArtifactKind fact
effective_when_absent(all|required); SKILL =required - T013 — Cascade:
charter activate skill X --cascade procedure,directivefollows DRG requires/suggests; deactivate keeps artifacts still referenced (C-005) - T014 —
prepare_skill_activations(pack_context/service, project_root-agnostic inputs) -> list[PreparedSkill]pure: id, tier, rendered_name (<namespace>-<id>; project namespace from config key `charter_packs
WP04 — Catalog seam and project-root projection through the managed installer
Prompt: tasks/WP04-project-skill-projection.md Dependencies: WP03 Requirements: FR-009, FR-010, FR-011, FR-013, SC-001, SC-003, SC-007, SC-010, NFR-002, NFR-004
Subtasks:
- T015 — RED FIRST: write tests/integration/test_pack_skill_lifecycle
- T016 — Renderer (pack_skill_renderer
- T017 — Catalog seam catalog
- T018 — Migrate every install/assess caller to the seam: verifier
- T019 —
charter activate/deactivate skill(cli/commands/charter/activate
WP05 — Drift/staleness findings, packaging safety, ADR acceptance, docs
Prompt: tasks/WP05-drift-findings-docs-closeout.md Dependencies: WP04 Requirements: FR-012, FR-014, SC-002, SC-004, NFR-001, NFR-003
Subtasks:
- T020 — pack_skill_drift
- T021 — Packaging safety: add explicit assertion no
packs/internal/skills/path in wheel (test_packaging_safety - T022 — ADR → Accepted (status front-matter + body), resolve open questions with plan decisions 1–3; note #2470 supersession remains owner call
- T023 — Quality sweep: ruff check, ruff format --check --force-exclude on changed files, mypy on changed modules, complexity ≤15; make test-fast + targeted dirs (tests/charter tests/doctrine tests/specify_cli/skills + specific architectural gates)