@siax/access får en universell idempotenskontrakt — härledd från 0pt:s durable upload attempts, så DOC0/N0D/fremtidprodukter kan anta samma form i stället för att reimplementera.
operationIdentity binder tenant/projekt/aktör + alla resultatpåverkande indata i ett stabilt fingerprint; ändrat payload under samma nyckel = KONFLIKT, aldrig replay av någons annans kvitto.
runIdempotentOperation kodar den beprövade ordningen (durable claim → downstream dispatch → spara kvitto → replay) och commit-gränserna.
Strukturellt IdempotencyStore<Identity,Receipt> - varje produkt behöver bara skriva en Postgres-adapter.
7 tester: payloadkonflikt, replay av lifetime-kvitto, order (claim → dispatch → save), store-fel = conflict, ingen om-dispatch efter sparfel.
`@siax/access` får en **universell idempotenskontrakt** — härledd från 0pt:s durable upload attempts, så DOC0/N0D/fremtidprodukter kan anta samma form i stället för att reimplementera.
- `operationIdentity` binder tenant/projekt/aktör + **alla resultatpåverkande indata** i ett stabilt fingerprint; ändrat payload under samma nyckel = **KONFLIKT**, aldrig replay av någons annans kvitto.
- `runIdempotentOperation` kodar den beprövade ordningen (durable claim → downstream dispatch → spara kvitto → replay) och commit-gränserna.
- Strukturellt `IdempotencyStore<Identity,Receipt>` - varje produkt behöver bara skriva en Postgres-adapter.
- 7 tester: payloadkonflikt, replay av lifetime-kvitto, order (claim → dispatch → save), store-fel = conflict, ingen om-dispatch efter sparfel.
operationIdentity binds tenant/project/actor + every result-affecting input
into a stable fingerprint; a changed payload under the same key is a CONFLICT,
never a replay of someone else's receipt. runIdempotentOperation encodes the
0pt-proven order (durable claim -> downstream dispatch -> save receipt ->
replay) and the commit boundaries. Structural IdempotencyStore lets each
product ship its own Postgres adapter while sharing the contract.
Derived from 0pt's durable upload attempts; DOC0/N0D can adopt the same
shape instead of re-implementing it.
CODEOWNERS rules
requested review from sax3l 2026-11-06 09:48:01 +00:00
b323948 shipped the OpenFGA relationship client inside src/index.ts; when
src/idempotency.ts was added, index.ts was rewritten as the diff of both,
losing every relationship export and breaking the existing tests. Move the
original module to src/relationships.ts and let index.ts re-export both.
Restores 7 pre-existing relationship tests (both suites 14 passed).
admin
merged commit 9ca16b7f6c into main2026-11-06 10:02:00 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
@siax/accessfår en universell idempotenskontrakt — härledd från 0pt:s durable upload attempts, så DOC0/N0D/fremtidprodukter kan anta samma form i stället för att reimplementera.operationIdentitybinder tenant/projekt/aktör + alla resultatpåverkande indata i ett stabilt fingerprint; ändrat payload under samma nyckel = KONFLIKT, aldrig replay av någons annans kvitto.runIdempotentOperationkodar den beprövade ordningen (durable claim → downstream dispatch → spara kvitto → replay) och commit-gränserna.IdempotencyStore<Identity,Receipt>- varje produkt behöver bara skriva en Postgres-adapter.