Skip to content
tsbouncerpreview
guide

Guarantees

What this library claims, checked on every build. A ✗ means the claim is not currently true.

Every line below is a clause in a contract, run against a real store on every CI build. The report is uploaded as an artifact; this page is the same list.

The value is not the re-testing — the unit suite does that. It is that each clause states its rule in a sentence, so the claim is answerable without reading the evaluator. A clause that throws fails, because a contract that treats a crash as a pass reports green on a broken library.

Engine

guaranteeexpected
✓direct-granta direct grant allows the subject that holds it
✓direct-denied-for-othersa grant grants nobody else
✓userset-rewritesmembership in a group carries the group’s grant
✓a-group-is-not-its-membersnaming a group grants the group object, not the people in it
✓wildcard-covers-every-subjecta wildcard grant reaches every subject of that type
✓exclusion-beats-a-satisfied-basean exclusion removes an access its own base granted
✓exclusion-does-not-leak-to-other-permissionsan exclusion on write leaves read alone
✓declared-wildcard-is-not-a-grantdeclaring a wildcard edge is not banning everyone
✓inheritance-follows-the-parent-chainpermission flows from an ancestor to its descendants
✓inheritance-does-not-leak-upwarda descendant grant does not reach the ancestor
✓the-tuple-is-authoritative-over-the-requestthe writer’s binding wins on a conflict
✓a-condition-without-its-context-deniesa missing key is a denial, never a pass
✓an-undeclared-condition-deniesan unrecognised condition is a denial
✓a-cycle-terminatesevaluation terminates rather than hanging, and denies
✓list-and-check-agreethe list query and the single check never contradict
✓the-list-queries-honour-contextlistResources applies the caller context
✓a-denied-decision-is-explainablea denial cites tuples or the query that came back empty
✓explain-cites-a-granting-tuplethe trace names the tuple that granted it
✓a-malformed-tuple-is-rejected-at-writea bad grant fails at write time
✓a-store-that-matches-too-much-is-detectablean over-matching store is rejected
✓a-store-that-drops-conditions-is-detectablea fail-open store is caught

Store

guaranteeexpected
✓filtered-reada correct store reproduces the recorded answers exactly
✓an-over-matching-store-is-rejectedit must not reproduce the reference answers
✓a-condition-stripping-store-is-rejecteda store that drops bindings must be caught
✓the-dataset-covers-every-shapeequivalence is proven for more than the easy cases

What is not guaranteed

The guarantees above are only as good as what is actually exercised, and three things are not:

Why this exists

A test suite says “this input produced this output”, and a reader has to read the body to learn what rule was being checked. For a library whose whole pitch is a list of guarantees, that list should be readable on its own.

The contract runner is not a test framework — no discovery, no fixtures, no mocking, no lifecycle. It is a shape for expectations plus a runner and a formatter, so a guarantee can be written once and reported on.

Next