Parent
#799. Design record: .scratch/render-execution-unit/spec.md.
What to build
Tests that pin what STEP_ENTERED carries today on each path, so the behaviour change that follows reads as a one-line diff. Green against unmodified code.
Three divergences to capture, all caused by collection-service building a StepEntryMetadata the CLI's builder fills differently:
- A substep with a description emits that description when entered via
rundown run, and emits none when entered via rundown collect.
prompted is composed from the persisted flag and the step's prompted-FOR kind on the loop path, but from the persisted flag alone on the collect path.
substepId is populated from the raw cursor while isSubstep is derived from the resolved execution unit, so a cursor naming no live substep yields a populated substepId with isSubstep: false.
Follows the #790 pattern: characterise first, so the fix is visible as an assertion flipping.
Acceptance criteria
Blocked by
None — can start immediately.
Parent
#799. Design record:
.scratch/render-execution-unit/spec.md.What to build
Tests that pin what
STEP_ENTEREDcarries today on each path, so the behaviour change that follows reads as a one-line diff. Green against unmodified code.Three divergences to capture, all caused by
collection-servicebuilding aStepEntryMetadatathe CLI's builder fills differently:rundown run, and emits none when entered viarundown collect.promptedis composed from the persisted flag and the step's prompted-FOR kind on the loop path, but from the persisted flag alone on the collect path.substepIdis populated from the raw cursor whileisSubstepis derived from the resolved execution unit, so a cursor naming no live substep yields a populatedsubstepIdwithisSubstep: false.Follows the #790 pattern: characterise first, so the fix is visible as an assertion flipping.
Acceptance criteria
promptedandsubstepId/isSubstepassertions state which value is the correct one in a comment, so the later flip is unambiguous.Blocked by
None — can start immediately.