Purpose
Create a companion proof demo named semantic-ambiguity-gate.
This demo should show a narrow control pattern: a syntactically valid transaction can be refused before mutation when an unresolved term affects authority, scope, expiry, revocation, or downstream consequence.
Core invariant
No consequence-binding transaction may commit while any term controlling authority, scope, expiry, recipient, revocation, or downstream effect remains unresolved.
Non-claims
This is not:
- ethics detection
- intent parsing
- general semantic understanding
- production safety
- path-universal non-bypassability
It is unresolved binding risk at the commit boundary.
v0.1 scenario
Transaction:
{
"action": "grant_access",
"subject": "contractor_1842",
"resource": "customer_records",
"purpose": "support_review",
"duration": "temporary",
"approval_status": "approved"
}
Expected behaviour:
- schema validation passes
- commit boundary refuses or holds
downstream_send = false
mutation_occurred = false
- receipt is written
- replay proves no mutation occurred
Reason codes:
AMBIGUOUS_DURATION
MISSING_EXPIRY_TIMESTAMP
UNBOUND_REVOCATION_CONDITION
DOWNSTREAM_PERMISSION_RISK
Minimal repo spine
semantic-ambiguity-gate/
├── README.md
├── CLAIM-BOUNDARY.md
├── invariant.md
├── spec/
│ └── ambiguity-classes-v1.md
├── demo/
│ ├── transaction-input.json
│ ├── schema-pass.json
│ ├── ambiguity-scan-result.json
│ ├── deny-receipt.json
│ └── downstream-sim/
│ ├── if-allowed.md
│ └── if-blocked.md
├── tests/
│ └── test_ambiguity_gate.py
├── pre-registered-failures.md
└── receipts/
Proof role
commit-gate-core → structural refusal
receipt-chain-core → evidence of refusal
semantic-ambiguity-gate → refusal on unresolved meaning at consequence boundary
Acceptance criteria
- One transaction fixture with
duration: temporary.
- One schema-pass artifact proving structure is valid.
- One ambiguity scan artifact identifying unresolved binding terms.
- One DENY/HOLD receipt with the reason codes above.
- One downstream simulator note showing what would have happened if the transaction had been sent onward.
- One replay test proving no mutation occurred.
- Claim boundary file included.
Clean line
Tiny word, big blast radius. The demo should stay small, synthetic, and path-local.
Purpose
Create a companion proof demo named
semantic-ambiguity-gate.This demo should show a narrow control pattern: a syntactically valid transaction can be refused before mutation when an unresolved term affects authority, scope, expiry, revocation, or downstream consequence.
Core invariant
No consequence-binding transaction may commit while any term controlling authority, scope, expiry, recipient, revocation, or downstream effect remains unresolved.
Non-claims
This is not:
It is unresolved binding risk at the commit boundary.
v0.1 scenario
Transaction:
{ "action": "grant_access", "subject": "contractor_1842", "resource": "customer_records", "purpose": "support_review", "duration": "temporary", "approval_status": "approved" }Expected behaviour:
downstream_send = falsemutation_occurred = falseReason codes:
AMBIGUOUS_DURATIONMISSING_EXPIRY_TIMESTAMPUNBOUND_REVOCATION_CONDITIONDOWNSTREAM_PERMISSION_RISKMinimal repo spine
Proof role
commit-gate-core→ structural refusalreceipt-chain-core→ evidence of refusalsemantic-ambiguity-gate→ refusal on unresolved meaning at consequence boundaryAcceptance criteria
duration: temporary.Clean line
Tiny word, big blast radius. The demo should stay small, synthetic, and path-local.