Skip to content

T-ARCR-leaf-parent-readiness-applicability

Status: closed/done · Impact: high · Complexity: small

The implementation-ready contract is a work-order contract: Files-to-touch tables and touchpoint resolution are category errors for a parent task, which is an organizational rollup, not a dispatchable work order (D-VSLI settled leaf-only dispatch; D-S30G lists this split as its own follow-up). Today nothing detects parenthood: /sdlc:task-ensure-ready run against a parent fails the contract on grounds that cannot apply. This task makes parenthood a deterministic fact the gate reads and formalizes the exemption.

LocationRole today
apps/sdlc/lib/model/entities/task/implementation-ready.mdThe readiness contract; says nothing about applicability to parent tasks
apps/sdlc/lib/model/entities/task/ops/gap-report.tsDeterministic composite gate (sections / placeholders / touchpoints / claims); no parenthood awareness
apps/sdlc/lib/model/entities/task/ops/gap-report.test.tsComposite’s test suite; no parent/child fixtures
apps/sdlc/skills/task-ensure-ready/SKILL.mdGate skill; evaluates every task against the leaf contract unconditionally
apps/sdlc/lib/model/read.ts#readRawFrontmatterBulk frontmatter scan primitive — the right tool to find tasks whose parent_key names a given basename

task gap-report reports parenthood as a fact; the ensure-ready skill short-circuits on it. A parent task is exempt from the leaf contract: the gate emits a distinct slug-namespaced marker and applies no mutation (no stamp, no downshift). The contract doc states the applicability rule so future readers do not re-litigate it.

  1. In gap-report.ts, add a parenthood slice to the output object: { is_parent: boolean, children: string[] }, computed by scanning docs/planning/tasks/*.md frontmatter with readRawFrontmatter for parent_key wikilinks that resolve to the target task’s basename (match on the T-NNNN id prefix; slug optional, per the wikilink grammar). Parenthood is reported as a FACT — the op does not suppress or alter the other slices for a parent (interpretation stays with the skill, matching the op’s existing facts-only doctrine).
  2. Extend the one-line GAP-REPORT marker with parent=<bool>.
  3. Add fixtures + tests in gap-report.test.ts: a parent task (named by a child’s parent_key) reports is_parent: true with the child basename listed; a childless task reports is_parent: false, children: [].
  4. In implementation-ready.md, add an ## Applicability section: the contract binds LEAF tasks (no children via parent_key); a parent task is an organizational rollup and is exempt — its readiness is its children’s readiness. Cross-link D-VSLI (leaf-only dispatch) and D-S30G.
  5. In the task-ensure-ready SKILL.md, add a Step 3 pre-check: when parenthood.is_parent is true, skip the contract evaluation and both mutation paths entirely; emit ENSURE-READY-PARENT-ROLLUP: <basename> and exit success. Document the new marker beside the existing ENSURE-READY-OK: / ENSURE-READY-NEEDS-DEFINITION: grammar.
LocationKindChange
apps/sdlc/lib/model/entities/task/ops/gap-report.tsmodifyAdd parenthood output slice (readRawFrontmatter scan of tasks’ parent_key) and parent= marker token
apps/sdlc/lib/model/entities/task/ops/gap-report.test.tsmodifyParent/child and childless fixtures asserting the parenthood slice
apps/sdlc/lib/model/entities/task/implementation-ready.mdmodifyNew ## Applicability section — leaf-only binding, parent exemption, cross-links
apps/sdlc/skills/task-ensure-ready/SKILL.mdmodifyStep 3 parent short-circuit; ENSURE-READY-PARENT-ROLLUP: marker documented
  • AC-1: sdlc task gap-report against a fixture parent task reports parenthood.is_parent: true with the child basename in parenthood.children; a childless fixture reports false / [] — asserted by tests in apps/sdlc/lib/model/entities/task/ops/gap-report.test.ts.
  • AC-2: the one-line marker carries the new token (e.g. GAP-REPORT gaps=N ... parent=true).
  • AC-3: apps/sdlc/lib/model/entities/task/implementation-ready.md contains an ## Applicability section naming the leaf-only rule and the parent exemption.
  • AC-4: apps/sdlc/skills/task-ensure-ready/SKILL.md documents the parent short-circuit and the ENSURE-READY-PARENT-ROLLUP: marker; the short-circuit path applies no frontmatter mutation.
  • AC-5: the composite’s test suite apps/sdlc/lib/model/entities/task/ops/gap-report.test.ts passes when bun-run as a test file.
  • Nested orchestration traversal (parents decomposing into children at dispatch time) — D-VSLI end-state, not this task.
  • Any change to task next / orchestrate selection (leaf filtering there is separate machinery).
  • Rolling up child readiness into a parent-level readiness summary.
  • none

← Back to Tasks