Skip to content

PLAN — Task-list field discipline (ID-34.4)

PLAN — Task-list field discipline (ID-34.4)

Section titled “PLAN — Task-list field discipline (ID-34.4)”

Task: ID-34. This Subtask: {34.4} PLAN — decompose into implementation Subtasks. Predecessors: RESEARCH, PRODUCT, TECH.

Four implementation Subtasks {34.5}–{34.8}, sibling-only deps. The sweep ({34.8}) is the lowest-priority, integration-sensitive piece and is gated behind an OQ-pending.md to the parent (4 terminals share task-list.json).


Subtask records (to splice into ID-34 subtasks[])

Section titled “Subtask records (to splice into ID-34 subtasks[])”

{34.5} — Author the canonical discipline doc + inventory entry

Section titled “{34.5} — Author the canonical discipline doc + inventory entry”
  • deps: [] · PRODUCT inv: 1, 2, 3, 4, 5, 6, 7
  • ALLOWED files: docs/reference/task-list-discipline.md (new), docs/reference/documentation-inventory.md
  • details: Author docs/reference/task-list-discipline.md publishing the per-field table (PRODUCT §2), the canonical-ref-vs-traceability boundary (“would-it-survive-the-task” test, RESEARCH §3), and ≥3 worked examples from the live ledger (ID-28/ID-29 description drift; a good cross_doc_links pointer example). Cross-link taskmaster-schema-reference.md
    • lib/validation/task-list-schema.ts. Register one entry in documentation-inventory.md.
  • testStrategy: Doc exists with the full per-field table + boundary rule + ≥3 examples; documentation-inventory grep finds the new entry.

{34.6} — Soft-warning extension to parseTaskListWithWarnings + test

Section titled “{34.6} — Soft-warning extension to parseTaskListWithWarnings + test”
  • deps: [5] · PRODUCT inv: 8, 10, 11
  • ALLOWED files: lib/validation/task-list-schema.ts, __tests__/lib/validation/task-list-discipline-warnings.test.ts (new)
  • details: Add a FIELD_BUDGETS const + per-Task/per-Subtask budget scan inside parseTaskListWithWarnings (TECH §3), emitting TaskListWarning entries that name the id, field, and measured-vs-budget chars. NO schema .max(). Warning logic stays in the function body (vendor-drift safe). Test: an over-budget fixture parses without throwing and yields the expected warnings; the existing 25-Subtask-ceiling warning still fires.
  • testStrategy: bun run test on the new test green; over-budget fixture warns not throws; git diff shows no .max( added to any text field.

{34.7} — Cite the discipline doc from the 3 repo-local skills

Section titled “{34.7} — Cite the discipline doc from the 3 repo-local skills”
  • deps: [5] · PRODUCT inv: 9
  • ALLOWED files: .claude/skills/workflow-orchestration/SKILL.md, .claude/skills/write-product-spec/SKILL.md, .claude/skills/write-tech-spec/SKILL.md
  • details: Via the update-skill skill (workflow-security hook may block the first raw .claude/skills/ edit once — retry). workflow-orchestration: add a canonical-doc pointer to ## Ledger field-discipline + align budgets. write-product-spec / write-tech-spec: at ## Keep the spec current, add the “rationale lives in the spec; task-list description points via cross_doc_links” rule + doc link. Excludes the global planning-and-task-breakdown (OQ-34-5 — uncommittable; deferred to parent).
  • testStrategy: grep each of the 3 SKILL.md for the discipline-doc path; all 3 match.

{34.8} — Retroactive description sweep (LOWEST priority; OQ-first)

Section titled “{34.8} — Retroactive description sweep (LOWEST priority; OQ-first)”
  • deps: [5, 6, 7] · PRODUCT inv: 12, 13
  • ALLOWED files: docs/reference/task-list.json (broad), plus docs/specs/** / docs/research/** for relocated rationale targets
  • details: FIRST action: write/append OQ-pending.md to the parent requesting a sequencing slot — this is a broad task-list.json edit and 4 terminals share the file. Do NOT begin the rewrite until the parent confirms sequencing. Then relocate over-budget content per PRODUCT §4 (rationale → docs/ + cross_doc_links pointer; narrative → Subtask details journal; trim status_note/testStrategy). Relocate-not-delete; spot- check recoverability. Target priority order: the 10 descriptions >2500, then >1500, then status_notes >300; subtask-level cosmetic trims last/optional.
  • testStrategy: Post-sweep, re-run the field-length audit — targeted Tasks under budget (or warnings reduced); each removed fact reachable via its new cross_doc_links target; parseTaskListWithWarnings warning count drops.

  • {34.5} first (doc is the reference everything else points at).
  • {34.6} and {34.7} parallel after {34.5} (disjoint file sets: schema+test vs skill bodies).
  • {34.8} last, serialised, parent-gated (shared task-list.json).
  • Shared-file contention on {34.8} — mitigated by the OQ-first gate.
  • Global-skill gap (OQ-34-5) — planning-and-task-breakdown amendment deferred to parent; does not block ID-34 close or ID-35.
  • Vendor-drift false-positive — mitigated by keeping the warning in the function body (TECH §3).