AGPL-3.0 reference implementation of
employment-decision-record-audit-stream. Runs the MomentumHR × VendorE HireAssess v2.x hiring-decisioning trajectory end-to-end. Enforces the HR Tech 2-invariant design — the only Suite audit-stream with TWO truly orthogonal candidate-protection invariants: human-hiring-decision-required (federal Title VII / EEOC) + NYC Local Law 144 candidate-notice (sub-state jurisdictional rule with statutory time-window).
Part of the Kinetic Gain Protocol Suite.
Sibling to fhir-resource-access-audit-reference, matter-decision-record-audit-stream-reference, grid-decision-record-audit-stream-reference, defense-decision-record-audit-stream-reference, government-decision-record-audit-stream-reference, and financial-decision-record-audit-stream-reference.
The HR Tech invariant design is unusual: the two invariants are truly orthogonal — neither implies nor depends on the other:
-
human-hiring-decision-required — every event with an adverse-action-capable kind AND an adverse
outcome.recommendation(decline / rescind / do-not-promote / performance-below / terminate-recommended) MUST carryagent.human_hiring_decision_maker_id_tokenized. Maps to EEOC AI Guidance (May 2023) + Title VII disparate-impact analysis + ADA reasonable-accommodation review obligation. -
NYC Local Law 144 candidate-notice — every event where the candidate's city is NYC AND
ai_screening_used: trueMUST carryagent.ll_144_candidate_notice_provided_atAND that timestamp MUST be ≥10 business days before the event (modeled here as 14 calendar days). Maps to NYC LL 144 (effective July 5, 2023) + NYC DCWP Rule 5-303.
The orthogonality matters: a non-NYC candidate's adverse recommendation needs human review but no LL 144 notice. A NYC candidate's AI screening needs LL 144 notice but no human review (until the recommendation turns adverse). And the time-window check on LL 144 — 10 business days BEFORE — is a backward-looking wall-clock invariant unlike DefenseTech's forward-looking 72-hour clock.
orchestrator.mjs (4 steps, both invariants exercised)
│
├─ requests access via hiring-vault.mjs (enforces both invariants at request-time)
│
├─ builds hash-chained event via event-builder.mjs (canonical-JSON SHA-256)
│
└─ emits to examples/momentumhr-hireassess-reference-stream.ndjson
verifier.mjs (independent, post-hoc)
│
├─ chain integrity (each prev_hash = prior hash)
├─ invariant #1: human-hiring-decision on adverse recommendations
└─ invariant #2: NYC LL 144 candidate-notice + 14-day backward-window check
git clone https://github.com/mizcausevic-dev/employment-decision-record-audit-stream-reference
cd employment-decision-record-audit-stream-reference
npm install
npm start # 4-step trajectory + verifier
npm test # 11 unit tests — most thorough coverage of any reference implExpected output:
Built 4 events → examples/momentumhr-hireassess-reference-stream.ndjson
OK · 4 events · chain ✓ · 2 invariants ✓ (human-hiring-decision + NYC LL 144 candidate-notice)
| Step | Event | Candidate | Invariants exercised |
|---|---|---|---|
| 1 | Job posting created | — | (none — no AI, no candidate) |
| 2 | NYC candidate AI-screened | NYC | #2 — LL 144 notice from 2026-10-20 (16 days before) |
| 3 | NYC candidate interview AI-scored | NYC | #2 — LL 144 notice still applies on subsequent events |
| 4 | Decline recommendation | NYC | #1 (adverse) + #2 (NYC+AI) |
Notice provided at 2026-10-20T08:00:00Z. First AI event is 2026-11-05T14:00:00Z — that's 16 days, comfortably past the 14-day minimum.
| Failure mode | Reason |
|---|---|
| NYC AI screening without LL 144 notice | "NYC candidate + AI screening requires ll_144_candidate_notice_provided_at" |
| NYC AI screening with notice <14 days prior | "NYC LL 144 notice provided only N days before AI use" |
| Non-NYC AI screening without notice | Permitted — LL 144 is NYC-only |
| Adverse hiring decision without human decision maker | "Adverse-action-capable kind X with recommendation Y requires human_hiring_decision_maker_id_tokenized" |
| Clean-advisory recommendation without human | Permitted — advisory-only output is not adverse |
NYC LL 144 is the most active-enforcement risk in US AI employment law right now. Real lawsuits filed in 2025-2026 citing it; NYC DCWP started issuing fines in late 2024. Most enterprise HR vendors have NOT updated their audit trails to prove notice was given and bias audit was published. This reference impl shows what compliant operation looks like at the event level — every NYC + AI event carries the notice timestamp; the verifier independently checks the backward-looking window.
The combo with human-hiring-decision is what protects vendors from the worst-case "AI made the call and a candidate got declined without a human ever touching it" scenario — that's the EEOC-investigatable + Title VII-litigable failure mode that most concerns plaintiffs' bar.
employment-decision-record-audit-stream— the spec this implementseeoc-readiness-evidence-bundle— evidence bundle that ingests these eventsemployment-ai-incident-card-profile— invariant failures become Incident Cards (includes theai-nyc-ll-144-audit-failureevent type specifically)state-employment-ai-disclosure-tracker— regulatory-lifecycle context (NYC LL 144, IL 820 ILCS 42, MD HB 1202, CO SB 24-205)employment-candidate-bias-coverage-lab— bias-coverage scaffolding for the parallel audit obligationcandidate-data-vault-contract-profile— vault contract with strictest default-deny posture in the Suite- Kinetic Gain Protocol Suite — umbrella
Reference implementation readiness scaffolding for EEOC AI Guidance + Title VII + ADA + ADEA + GINA + NYC LL 144 + IL 820 ILCS 42 + MD HB 1202 + CO SB 24-205. Does NOT constitute EEOC compliance attestation, NYC DCWP bias-audit publication, or ADA reasonable-accommodation determination. The mock hiring vault is in-memory — production deployments must integrate with the employer's ATS (Greenhouse / Workday / UKG / Lever) and identity provider (Okta / Azure AD), publish bias-audit reports per LL 144's annual cadence, and route adverse-action notices through Reg B-style disclosure workflows. NYC LL 144 also requires PUBLICLY publishing the bias audit summary — this reference impl does not generate that artifact; it proves the underlying audit trail exists. Per the standing Suite public-language guardrail: readiness · evidence · posture · controls · scaffolding — never "compliant" / "certified" without external attestation.
AGPL-3.0-only. Spec repos this depends on remain MIT.