Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/conformance/owasp-asi-mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ SINT is a security enforcement layer for physical AI. Every agent action — too

**Enforcement detail:** Rate limiting is enforced via a sliding-window bucket keyed by `tokenId`. The circuit breaker tracks denials per agent; excess denials open the circuit and block all subsequent requests. The circuit auto-transitions to HALF_OPEN after `halfOpenAfterMs` to test recovery, unless it was manually tripped by an operator.

**Testing note:** CI conformance coverage uses a slightly longer `halfOpenAfterMs` probe window so the HALF_OPEN recovery path stays deterministic across shared runners and does not flap on scheduler variance.

---

### ASI09 — Human Oversight Bypass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,11 +306,12 @@ describe("InMemoryCircuitBreaker — state machine", () => {

it("OPEN → HALF_OPEN after halfOpenAfterMs", async () => {
// Open via recordDenial (not trip) so manualTrip stays false
const cb = new InMemoryCircuitBreaker({ failureThreshold: 2, halfOpenAfterMs: 5 });
// Use a wider window so CI timing variance does not advance the state early.
const cb = new InMemoryCircuitBreaker({ failureThreshold: 2, halfOpenAfterMs: 100 });
await cb.recordDenial("a", "x");
await cb.recordDenial("a", "x");
expect(await cb.getState("a")).toBe("OPEN");
await new Promise((r) => setTimeout(r, 10));
await new Promise((r) => setTimeout(r, 120));
expect(await cb.getState("a")).toBe("HALF_OPEN");
});

Expand Down
Loading