Problem
The deterministic compiler ModuleState does not store the authored prompt path. napl q currently fills promptPath from working-tree discovery, and napl prompt falls back to the working tree when a prompt ref carries no module.
This violates the canonical-document guarantee that refs and prompt materialization resolve from committed snapshot state only.
Decision
Add promptPath to deterministic ModuleState, not to Receipt. The path is committed module metadata, not producer evidence or candidate-output identity.
The migration must preserve location-free generation identity: moving a prompt updates committed metadata without pretending generated semantics changed.
Acceptance criteria
- Every newly committed ModuleState records a canonical workspace-relative
promptPath.
napl q obtains committed modules and prompt paths from the selected snapshot, not working-tree discovery.
- A hand-built prompt ref carrying
head and promptPath resolves without consulting the working tree.
- Prompt moves have an explicit metadata transition and do not require fabricated generated changes.
- Historical states are migrated or return a pinned path-unavailable diagnostic.
- The schema and contract versions change explicitly, with conformance coverage.
References
Problem
The deterministic compiler ModuleState does not store the authored prompt path.
napl qcurrently fillspromptPathfrom working-tree discovery, andnapl promptfalls back to the working tree when a prompt ref carries no module.This violates the canonical-document guarantee that refs and prompt materialization resolve from committed snapshot state only.
Decision
Add
promptPathto deterministicModuleState, not to Receipt. The path is committed module metadata, not producer evidence or candidate-output identity.The migration must preserve location-free generation identity: moving a prompt updates committed metadata without pretending generated semantics changed.
Acceptance criteria
promptPath.napl qobtains committed modules and prompt paths from the selected snapshot, not working-tree discovery.headandpromptPathresolves without consulting the working tree.References
docs/specs/2026-07-28-test-directives-v1.md