Changelog
phil/checkinAll notable changes to phil/checkin will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.0-alpha - 2026-11-11
Added
CheckpointId,DeviceIdandScanId: identifiers of 1 to 64 letters, digits,.,_,:or-;ScanId::generate()draws 128 random bits.CredentialCode: what a device read, valid UTF-8 without control characters, at most 512 bytes, never recorded;fingerprint(), its HMAC-SHA256 under a key;estimatedBits(), its strength from its length and alphabet.CredentialandCredentialStatus: the application's identifier, a label for the staff, the checkpoints it opens, its opening and closing, its entries — one by default, or any number — and whether it is revoked.Attendance: the entries of a credential, whether its holder is inside, the last entry, and the version that counts the check-ins that changed it.Direction,ScanOutcomeandAdmissionPolicy: entries and exits decided in a fixed order — revoked, wrong checkpoint, check-out, not yet open with an early window, closed, already admitted under anti-passback or with its entries used, admitted.CheckIn: one scan of a known credential with its decision, the sequence of an admission or a check-out, and the conflict of a scan made offline.CredentialResolver,CheckInLedgerandCredentialCatalog, the ports of the application;CredentialResolvers, several resolvers asked in their order;CatalogEntry, a credential with one of its codes.CheckInDeskandScanResult: a code resolved, decided and recorded, refusals included, once per scan identifier, decided again up to three times when another scan of the credential is recorded first; a scan sent again is replayed only when its credential, checkpoint, device and direction match the one recorded, and answeredScanOutcome::Collisionotherwise, without the outcome or the check-in recorded.InMemoryCheckInLedger, a ledger for tests.ManifestIssuer,OfflineManifestandManifestEntry: the credentials of a checkpoint for a device, under the fingerprints of their codes with a key of the manifest, their attendance read in chunks of 500, labels only when asked, valid 12 hours by default and bounded to 10 000 credentials by default; codes under 64 bits refused by default, since the manifest carries its key.OfflineScan,OfflineBatch,OfflineSync,SyncStatusandSyncReport: the journal of a device read, at most 500 scans, and recorded by instant with the device's decision, a conflict when the ledger decides otherwise, a duplicate when the same scan is already recorded, a collision when its identifier is recorded for another scan, rejected when the credential is unknown or the instant out of bounds; the ledger's attendance follows the device's claim.CheckinException, implemented byInvalidCheckin,InvalidOfflineBatch,LedgerContention,ManifestTooLargeandWeakManifestCodes.- The fuzz target of the journals and the benchmark of a scan, a decision, a fingerprint, a manifest and a journal.
- The documentation in
doc/, one file per topic, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.