@zanii/decisions
v0.1.1
Published
Gig/creator algorithmic fairness: decision receipts a worker can audit — completeness (every decision about me, tamper-evident), rule-consistency (the same rulebook decided everyone, via manifest_hash), and committed factors (no post-hoc rationalization).
Readme
@zanii/decisions
Auditable algorithmic decisions about a person. A driver, seller, or creator can't
audit the decisions platforms' algorithms make about them — dispatch, ranking,
demonetization, payout. @zanii/subject already gives them their slice; this adds the
decision-shaped receipt and the one fairness claim cryptography can actually make.
What it truthfully proves:
- Completeness — every decision about me is on the record, ordered, tamper-evident.
- Rule-consistency — every decision carries
manifest_hash(which algorithm/policy version governed it; the builder rejects a decision without a rulebook). A worker — or a regulator across many workers — verifies the same rulebook decided everyone, and exactly when it changed.ruleConsistencyflags interleaved rulebooks: rules that differed between people at the same time. - Factor commitment — the inputs the algorithm used are salt-committed at decision time; in a dispute the platform discloses my factors to me alone, provably what was committed — not a post-hoc rationalization.
What it cannot prove (read this): that the algorithm is fair — no receipt makes a bad rule good. It converts "trust our algorithm" into same rules, complete record, committed inputs — which is what platform-work transparency regulation actually asks for.
npm install @zanii/decisions @zanii/subject @zanii/coreimport { buildDecisionReceipt, ruleConsistency } from '@zanii/decisions';
// platform side — at decision time:
const d = buildDecisionReceipt({
subjectDid: driver.did, platform: 'gig.example.com',
kind: 'dispatch', manifestHash: deployedRulesHash, // required — no rulebook, no receipt
outcome: { assigned: false }, factors: { rating: 4.9, distance_km: 2.1 }, ts,
});
await zanii.record({ target: d.target, payload: d.payload, subjectTag: d.subjectTag });
// keep d.nonce — in a dispute, disclose the committed factors with verifyPayload
// auditor side — over a slice (one worker, or many):
ruleConsistency(payloads); // rulebook windows + the interleaving red flagReference kinds: dispatch, rank, payout — any string works.
Changelog
- 0.1.0 — initial release:
buildDecisionReceipt,verifyDecision,ruleConsistency.
License
Apache-2.0.
