Skip to content

Reconsider yes/no replacement-intent clarifications when either item is prohibited #187

Description

@rlippmann

Description

The engine currently creates pending yes/no clarification for these use X instead of Y cases:

  1. Y is prohibited:
    • prompt: "Y" is currently prohibited. Did you mean to remove it and use "X" instead?
  2. 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.

Reproduction

  • 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.
  • Observe that each response creates pending clarification and can be accepted with yes.

Audit the exact state mutations performed after confirmation, including whether either path compiles to multiple policy operations.

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.

If the prohibited-item branches are changed, update engine tests, regression fixtures, conformance fixtures, and directive grammar/API documentation as applicable. Preserve Python/TypeScript parity.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions