Summary
The engine currently creates pending yes/no clarification for these use X instead of Y cases:
Y is prohibited:
- prompt:
"Y" is currently prohibited. Did you mean to remove it and use "X" instead?
X is prohibited:
- prompt:
"X" is currently prohibited. Did you mean to remove "Y" and use "X" instead?
These paths appear to go beyond a conservative repair of replacement intent. Resolving them requires the engine to choose or authorize additional policy mutations rather than merely correcting a uniquely recoverable directive.
The directive drafter is likely the better layer for reformulating intent in these conflict cases. Core can return a non-pending clarify that explains the state conflict, after which the user or drafter can produce a new explicit directive.
The separate case where Y does not exist should remain out of scope for this issue: proposing use X is a straightforward deterministic repair.
Expected behavior
Decide and document a narrower ownership boundary:
- core-owned pending confirmation for deterministic, semantics-preserving repairs;
- non-pending clarification for conflicts that require a stronger policy rewrite or additional inferred mutations;
- drafter/user supplies the new explicit directive.
Actual behavior
The prohibited-item branches establish pending clarification and accept yes/no, allowing the engine to apply a stronger corrective transition.
Minimal reproduction
- Input(s):
- establish
prohibit Y, then submit use X instead of Y
- establish
prohibit X (and any state required for Y), then submit use X instead of Y
- Engine state before input: one of the replacement-intent items is prohibited
- Decision output observed:
clarify with pending yes/no confirmation
Audit the exact state mutations performed after confirmation, including whether either path compiles to multiple policy operations.
Parity context
Environment
- Package version: current
main
- Node version: not applicable to design audit
Summary
The engine currently creates pending yes/no clarification for these
use X instead of Ycases:Yis prohibited:"Y" is currently prohibited. Did you mean to remove it and use "X" instead?Xis prohibited:"X" is currently prohibited. Did you mean to remove "Y" and use "X" instead?These paths appear to go beyond a conservative repair of replacement intent. Resolving them requires the engine to choose or authorize additional policy mutations rather than merely correcting a uniquely recoverable directive.
The directive drafter is likely the better layer for reformulating intent in these conflict cases. Core can return a non-pending
clarifythat explains the state conflict, after which the user or drafter can produce a new explicit directive.The separate case where
Ydoes not exist should remain out of scope for this issue: proposinguse Xis a straightforward deterministic repair.Expected behavior
Decide and document a narrower ownership boundary:
Actual behavior
The prohibited-item branches establish pending clarification and accept
yes/no, allowing the engine to apply a stronger corrective transition.Minimal reproduction
prohibit Y, then submituse X instead of Yprohibit X(and any state required forY), then submituse X instead of Yclarifywith pending yes/no confirmationAudit the exact state mutations performed after confirmation, including whether either path compiles to multiple policy operations.
Parity context
Environment
main