Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
271 commits
Select commit Hold shift + click to select a range
9888223
fix(people): exact-gate hire decision time providers
seonghobae Sep 4, 2026
61cba0f
fix(people): restore hire insert contract after timestamp repair
seonghobae Sep 4, 2026
42d988a
test(people): document executable timezone tripwire
seonghobae Sep 4, 2026
792dfe3
test(people): reject executable durable hire UUID evidence
seonghobae Sep 4, 2026
6443ee5
fix(people): exact-gate durable hire UUID evidence
seonghobae Sep 4, 2026
2ac5a11
test(people): reject executable hire idempotency digest text
seonghobae Sep 4, 2026
d81260f
fix(people): exact-gate durable hire idempotency digest text
seonghobae Sep 4, 2026
878e98b
test(people): reject executable hire provenance text
seonghobae Sep 4, 2026
c260b05
fix(people): exact-gate durable hire provenance text
seonghobae Sep 4, 2026
5514b74
test(people): reject executable durable hire row containers
seonghobae Sep 4, 2026
adab344
fix(people): exact-gate durable hire row containers
seonghobae Sep 4, 2026
cf76786
test(people): reject executable generic mutation row containers
seonghobae Sep 4, 2026
34c6e55
fix(people): exact-gate generic mutation row containers
seonghobae Sep 4, 2026
e7f84b2
test(people): reject executable generic mutation durable scalars
seonghobae Sep 4, 2026
36bdc32
fix(people): exact-gate generic mutation durable scalars
seonghobae Sep 4, 2026
0498eaa
test(people): reject executable generic replay digest
seonghobae Sep 4, 2026
55033e7
fix(people): exact-gate generic replay digest
seonghobae Sep 4, 2026
19f2129
test(people): reject executable persisted status text
seonghobae Sep 4, 2026
2c0b114
fix(people): exact-gate persisted status codes
seonghobae Sep 4, 2026
ad1c1db
test(people): reject executable persisted allocation Decimal
seonghobae Sep 4, 2026
3a63e92
fix(people): exact-gate persisted allocation Decimal
seonghobae Sep 4, 2026
11c30cd
test(people): reject executable Position parent UUID evidence
seonghobae Sep 4, 2026
46884c2
fix(people): validate Position parent UUIDs before equality
seonghobae Sep 4, 2026
3e7eb20
test(people): prove post-construction mutation escapes runtime integrity
seonghobae Sep 5, 2026
e278023
fix(people): revalidate mutation evidence at consumption boundaries
seonghobae Sep 5, 2026
c7e0319
test(people): prove rewritten command reaches PostgreSQL authority
seonghobae Sep 5, 2026
6826999
fix(people): revalidate commands at PostgreSQL mutation entry
seonghobae Sep 5, 2026
8c40a18
test(people): cover all PostgreSQL rewritten command entries
seonghobae Sep 5, 2026
1ab0bd0
test(people): prove confirmed-hire post-construction integrity gap
seonghobae Sep 5, 2026
0a39455
fix(people): revalidate confirmed-hire application evidence
seonghobae Sep 5, 2026
bf24c2e
fix(people): revalidate confirmed-hire durable entry command
seonghobae Sep 5, 2026
2064a52
test(people): expose post-validation command rewrite
seonghobae Sep 5, 2026
e4cab11
fix(people): detach validated mutation commands before callbacks
seonghobae Sep 5, 2026
0daa68a
test(people): bind mutation results to commanded identities
seonghobae Sep 5, 2026
e09e557
fix(people): bind mutation results to command identities
seonghobae Sep 5, 2026
40ef9b2
fix(people): bind confirmed hire result identities
seonghobae Sep 5, 2026
6142f7d
test(people): bind result checks to pre-port targets
seonghobae Sep 5, 2026
abd5492
fix(people): compare results to detached pre-port targets
seonghobae Sep 5, 2026
62a6b7a
fix(people): compare hire result to detached targets
seonghobae Sep 5, 2026
f741508
test(people): bind mutation commands before authorization callbacks
seonghobae Sep 5, 2026
e4d538c
fix(people): detach commands before authorization callbacks
seonghobae Sep 5, 2026
5a6354a
test(people): bind hire command before authorization callbacks
seonghobae Sep 5, 2026
9771be6
fix(people): detach hire command before authorization callbacks
seonghobae Sep 5, 2026
6fcb1c4
test(people): reject allocation text runtime subtype
seonghobae Sep 5, 2026
7779a85
fix(people): require exact allocation text
seonghobae Sep 5, 2026
8d38776
style(people): preserve source trailing newline
seonghobae Sep 5, 2026
abd5dc5
test(people): expose zero allocation contract split
seonghobae Sep 5, 2026
7a95aa9
fix(people): reject zero allocation before domain construction
seonghobae Sep 5, 2026
f659b65
fix(api): align assignment allocation contract with domain invariant
seonghobae Sep 5, 2026
da4b628
chore(manifest): reseal updated OpenAPI allocation contract
seonghobae Sep 5, 2026
8f98685
fix(manifest): restore unaffected outbox digest
seonghobae Sep 5, 2026
d7440d4
test(people): specify idempotent replay result evidence
seonghobae Sep 5, 2026
cc1cc53
fix(people): bind foreign replay identity to semantic digest
seonghobae Sep 5, 2026
a61617f
fix(people): return verified idempotency replay receipt
seonghobae Sep 5, 2026
3f3b23a
test(people): cover fixed projection shape guards
seonghobae Sep 5, 2026
f933fbc
test(people): use standard UUID attribute trap
seonghobae Sep 5, 2026
4e9e04f
test(people): use standard row-container trap errors
seonghobae Sep 5, 2026
7485cb2
test(people): use standard durable UUID trap
seonghobae Sep 5, 2026
59f6eae
test(people): use standard projection-container trap errors
seonghobae Sep 5, 2026
998e06f
test(people): use standard scalar tripwire protocols
seonghobae Sep 5, 2026
4be7f16
test(people): use numeric protocol errors for Decimal tripwires
seonghobae Sep 5, 2026
9de94ba
test(people): expose stale internal package pins
seonghobae Sep 6, 2026
358152d
fix(people): align HRIS kernel package dependency
seonghobae Sep 6, 2026
f488fef
test(people): reject impossible Python runtime metadata
seonghobae Sep 7, 2026
a605749
fix(people): align Python floor with owned dependencies
seonghobae Sep 7, 2026
d5c2937
test(people): reject executable exact UUID payloads
seonghobae Sep 7, 2026
9b40b8e
fix(people): validate UUID integer payload before comparison
seonghobae Sep 7, 2026
a0b3695
fix(people): gate durable hire UUID payload
seonghobae Sep 7, 2026
b863478
fix(people): gate durable mutation UUID payload
seonghobae Sep 7, 2026
c72519e
test(people): reject forged out-of-range UUID integers
seonghobae Sep 7, 2026
87a3224
fix(people): enforce UUID integer range
seonghobae Sep 7, 2026
1406657
fix(people): enforce hire UUID integer range
seonghobae Sep 7, 2026
598b64a
fix(people): enforce mutation UUID integer range
seonghobae Sep 7, 2026
f4dac8a
test(people): cover all People UUID boundaries
seonghobae Sep 7, 2026
3f24bfc
fix(people): harden hire UUID payload validation
seonghobae Sep 7, 2026
dab8487
fix(people): harden read UUID payload validation
seonghobae Sep 7, 2026
0bc1c53
chore(people): preserve dedicated read-owner boundary
seonghobae Sep 7, 2026
e1f9da8
test(people): keep UUID regression in mutation owner
seonghobae Sep 7, 2026
b5ca7e4
chore(people): restore read-owner bytes exactly
seonghobae Sep 7, 2026
9227ff2
test(people): prove PostgreSQL capability replacement RED
seonghobae Sep 7, 2026
b6bc808
fix(people): bind validated hire connection capability
seonghobae Sep 7, 2026
51f132b
fix(people): bind validated mutation connection capability
seonghobae Sep 7, 2026
2a2dd54
test(people): forbid descriptor capability indirection
seonghobae Sep 7, 2026
368951e
fix(people): remove descriptor capability path
seonghobae Sep 7, 2026
f566fd2
fix(people): remove descriptor capability path
seonghobae Sep 7, 2026
338305f
test(people): expose direct hire command drift during DB acquisition
seonghobae Sep 7, 2026
e01e825
fix(people): snapshot hire command before database acquisition
seonghobae Sep 7, 2026
86a346b
test(people): expose retained hire UUID alias during authorization
seonghobae Sep 7, 2026
b01ffad
fix(people): detach nested hire UUID aliases at command validation
seonghobae Sep 7, 2026
728c63d
test(people): expose generic nested UUID alias across authorization
seonghobae Sep 7, 2026
5a7be53
test(people): expose generic nested UUID alias at PostgreSQL boundary
seonghobae Sep 7, 2026
6c8be6d
fix(people): detach generic nested UUID aliases at validation
seonghobae Sep 7, 2026
0cd270f
test(people): expose retained result alias drift
seonghobae Sep 7, 2026
6f3a54b
fix(people): detach generic mutation results from port aliases
seonghobae Sep 7, 2026
41829e0
fix(people): detach confirmed-hire results from port aliases
seonghobae Sep 7, 2026
a9848fb
test(people): bind replay verification to pre-port semantics
seonghobae Sep 7, 2026
ee7b03d
fix(people): bind replay checks to pre-port command semantics
seonghobae Sep 7, 2026
d9cb26e
test(people): bind replay receipt to pre-port authorization evidence
seonghobae Sep 7, 2026
41a35a5
fix(people): freeze replay evidence before executable persistence
seonghobae Sep 7, 2026
1cdaa06
test(people): expose assignment conflict serialization gap
seonghobae Sep 7, 2026
f6a7836
fix(people): serialize assignment employment portfolio writes
seonghobae Sep 7, 2026
06744f4
fix(people): restore unrelated position-parent diagnostic
seonghobae Sep 7, 2026
19c6c7e
fix(people): remove redundant assignment root lock
seonghobae Sep 7, 2026
fb28b01
test(people): execute real Assignment lock interleavings
seonghobae Sep 7, 2026
015ba7c
test(people): repair Assignment concurrency harness review findings
seonghobae Sep 7, 2026
1ea5cb1
docs(test): classify synthetic Assignment concurrency evidence honestly
seonghobae Sep 7, 2026
6cf31e8
test(people): clean up assignment concurrency writers on failure
seonghobae Sep 7, 2026
558afdf
test(people): prove concurrency failure cleanup before teardown
seonghobae Sep 7, 2026
07c2ff1
test(people): prove client cleanup on concurrency failure
seonghobae Sep 7, 2026
fb8eeb9
test(people): require bounded Assignment writer cleanup joins
seonghobae Sep 7, 2026
614ee5f
fix(people): bound Assignment concurrency writer joins
seonghobae Sep 7, 2026
c1fb77b
test(people): require backend termination after cleanup deadline
seonghobae Sep 7, 2026
0d78299
fix(people): terminate expired concurrency writer backend
seonghobae Sep 7, 2026
b712639
test(people): observe backend termination before releasing client
seonghobae Sep 7, 2026
52257a6
test(people): bind backend termination receipt to owned session
seonghobae Sep 7, 2026
8189509
test(people): expire only held concurrency writer join
seonghobae Sep 7, 2026
b8ce423
feat(people): add governed employment separation transition
seonghobae Sep 12, 2026
2a3b381
fix(people): bind separation audit time to database clock
seonghobae Sep 12, 2026
3cc9322
test(people): prove governed employment separation history
seonghobae Sep 12, 2026
3578026
test(people): keep Foundation contract ownership unchanged
seonghobae Sep 12, 2026
ba4dc19
fix(people): separate the exact current Employment interval
seonghobae Sep 12, 2026
1e17a59
test(people): add Employment separation PostgreSQL contract
seonghobae Sep 12, 2026
efa89a6
test(people): complete Employment separation acceptance
seonghobae Sep 12, 2026
57f778a
docs(people): record Employment separation truth decision
seonghobae Sep 12, 2026
c887b49
docs(people): trace Employment separation acceptance
seonghobae Sep 12, 2026
36e901e
fix(people): revoke public separation capability
seonghobae Sep 12, 2026
d297eab
test(people): prove separation SQL capability is fail closed
seonghobae Sep 12, 2026
fdb3379
test(people): isolate separation capability probe lifecycle
seonghobae Sep 12, 2026
b249c43
test(people): require least-privilege separation executor
seonghobae Sep 12, 2026
351e489
fix(people): isolate separation mutation capability
seonghobae Sep 12, 2026
a0569d5
test(people): exercise separation executor boundary
seonghobae Sep 12, 2026
e408bc8
docs(people): record separation capability boundary
seonghobae Sep 12, 2026
30960c5
docs(people): trace separation executor capability
seonghobae Sep 12, 2026
b1d2b19
test(people): require authorized separation application boundary
seonghobae Sep 12, 2026
aadb570
fix(people): add authorized separation application boundary
seonghobae Sep 12, 2026
efa9862
test(people): harden separation application evidence
seonghobae Sep 12, 2026
a3d3700
test(people): require PostgreSQL separation adapter
seonghobae Sep 12, 2026
443a487
fix(people): add PostgreSQL separation adapter
seonghobae Sep 12, 2026
f08b712
fix(people): export separation application port
seonghobae Sep 12, 2026
0254da5
fix(people): make separation error translation total
seonghobae Sep 12, 2026
cb7b61b
test(people): cover separation adapter trust boundary
seonghobae Sep 12, 2026
6a734db
fix(people): make separation validation branches explicit
seonghobae Sep 12, 2026
6c49abd
test(people): cover separation validation boundary
seonghobae Sep 12, 2026
320fb01
docs(people): trace separation application boundary
seonghobae Sep 12, 2026
d5cc990
test(people): require governed separation HTTP boundary
seonghobae Sep 12, 2026
54761aa
feat(people): expose governed separation HTTP boundary
seonghobae Sep 12, 2026
40aa7dd
feat(people): export separation HTTP boundary
seonghobae Sep 12, 2026
cb14494
test(people): fail server-generated separation ids as operational errors
seonghobae Sep 12, 2026
4a142ef
fix(people): classify separation server identity failures correctly
seonghobae Sep 12, 2026
b11440d
fix(people): repair separation adapter authorization fixtures
seonghobae Sep 12, 2026
8172c64
docs(people): document governed separation buyer route
seonghobae Sep 12, 2026
1d7b157
docs(people): trace separation HTTP boundary
seonghobae Sep 12, 2026
af5d6d6
feat(people): publish Employment separation OpenAPI contract
seonghobae Sep 12, 2026
faaf190
test(people): require exact separation OpenAPI contract
seonghobae Sep 12, 2026
1e1b9aa
fix(people): publish separation state conflict semantics
seonghobae Sep 12, 2026
872230e
fix(people): reseal separation OpenAPI manifest
seonghobae Sep 12, 2026
36502fb
fix(people): use exact OpenAPI manifest provenance
seonghobae Sep 12, 2026
2206e47
fix(ci): remove deprecated setup-node runtime
seonghobae Sep 12, 2026
2818fa2
fix(ci): reseal Foundation workflow after Node runtime update
seonghobae Sep 12, 2026
881fdba
fix(validation): allow PostgreSQL public schema qualification
seonghobae Sep 12, 2026
e999f31
fix(validation): reseal naming contract provenance
seonghobae Sep 12, 2026
a726479
fix(validation): accept qualified FORCE RLS owner tables
seonghobae Sep 12, 2026
efd94d7
fix(validation): reseal qualified RLS validator
seonghobae Sep 12, 2026
607ef0e
fix(foundation): seal separation validation contracts
seonghobae Sep 12, 2026
b86c831
fix(foundation): reseal exact workflow provenance
seonghobae Sep 12, 2026
0e6e332
test(people): construct governed denial evidence
seonghobae Sep 12, 2026
4ba75c0
test(people): require separation result validation before commit
seonghobae Sep 12, 2026
1e69528
fix(people): validate separation receipt before commit
seonghobae Sep 12, 2026
cd92071
docs(people): trace separation commit-boundary validation
seonghobae Sep 12, 2026
c8d1c39
test(people): cover separation HTTP failure boundaries
seonghobae Sep 12, 2026
01ca8e8
test(people): classify malformed separation receipts as internal errors
seonghobae Sep 12, 2026
362329d
fix(people): distinguish separation persistence integrity faults
seonghobae Sep 12, 2026
1ae78e1
fix(people): type separation persistence integrity failures
seonghobae Sep 12, 2026
05b400d
fix(people): keep persistence integrity faults server-side
seonghobae Sep 12, 2026
f6db78d
test(people): preserve separation error taxonomy contracts
seonghobae Sep 12, 2026
6f89e6c
docs(people): trace separation integrity error taxonomy
seonghobae Sep 12, 2026
ba766db
test(people): remove unused separation integrity imports
seonghobae Sep 12, 2026
a67ed4b
test(people): prove distinct-key separation serialization
seonghobae Sep 12, 2026
fbcaee1
docs(people): trace distinct-key separation acceptance
seonghobae Sep 12, 2026
b3a30d8
test(people): observe distinct-key pre-commit boundary in PostgreSQL
seonghobae Sep 12, 2026
92e4c36
test(people): prove separation failure cleanup
seonghobae Sep 12, 2026
ea9d534
test(people): qualify separation cleanup by durable rollback
seonghobae Sep 12, 2026
52db8ff
docs(people): trace separation failure cleanup
seonghobae Sep 12, 2026
07cf114
test(people): cover separation uncertain commit recovery
seonghobae Sep 12, 2026
c099e36
docs(people): trace uncertain commit recovery
seonghobae Sep 12, 2026
7fdde5c
test(people): expose assignment separation lock race
seonghobae Sep 12, 2026
acd99ac
fix(people): serialize assignment against employment separation
seonghobae Sep 12, 2026
0bd405a
test(people): bind assignment separation guard to database owner
seonghobae Sep 12, 2026
f3d6bf8
test(people): prove assignment separation serialization
seonghobae Sep 12, 2026
012005d
fix(people): least-privilege assignment separation guard
seonghobae Sep 12, 2026
ef5facd
test(people): assert least-privilege assignment guard
seonghobae Sep 12, 2026
dba7ff5
docs(people): define assignment separation conflict boundary
seonghobae Sep 12, 2026
0d0b18e
docs(people): trace assignment separation serialization
seonghobae Sep 12, 2026
d565ed9
fix(foundation): provenance-index assignment separation artifacts
seonghobae Sep 12, 2026
c110547
fix(foundation): regenerate exact provenance manifest
seonghobae Sep 12, 2026
9a64933
fix(foundation): reconcile Node provenance inventory
seonghobae Sep 12, 2026
77c8e02
fix(foundation): reseal reconciled Node inventory
seonghobae Sep 12, 2026
aa277fb
test(people): require exact conversion Employment binding
seonghobae Sep 12, 2026
c6f72b0
fix(people): bind conversion to exact Employment
seonghobae Sep 12, 2026
6ea491b
revert(people): drop circular pre-insert conversion binding
seonghobae Sep 12, 2026
20e2996
test(people): reject conversion as generic Employment authority
seonghobae Sep 12, 2026
7f9fbd0
fix(people): serialize generic Employment on Person anchor
seonghobae Sep 12, 2026
5eb7d15
test(people): bind recorded-time regression to Person anchor
seonghobae Sep 12, 2026
ec3fb59
test(people): cover Person anchor temporal integrity
seonghobae Sep 12, 2026
079eb79
test(people): reject recruiting provenance as generic Assignment auth…
seonghobae Sep 12, 2026
3fa5849
docs(people): separate recruiting provenance from generic writes
seonghobae Sep 12, 2026
c7a0d15
fix(people): serialize generic Assignment on Employment root
seonghobae Sep 12, 2026
3918d2a
test(people): bind Assignment concurrency to Employment root
seonghobae Sep 12, 2026
63f0d94
test(people): order Assignment Employment and Position locks
seonghobae Sep 12, 2026
acff887
test(people): cover canonical Assignment conflict anchors
seonghobae Sep 12, 2026
aae2a7f
test(people): prove Assignment without recruiting conversion
seonghobae Sep 12, 2026
252f418
docs(adr): align People conflict roots with canonical aggregates
seonghobae Sep 12, 2026
854ae87
fix(foundation): reseal People conflict-root ADR
seonghobae Sep 12, 2026
31ce6a6
fix(people): restore governed mutation boundary integrity
seonghobae Sep 12, 2026
842a28b
test(people): make Assignment provenance fixture time-safe
seonghobae Sep 12, 2026
15fa5ca
fix(people): detach mutation identities at construction
seonghobae Sep 12, 2026
02e412b
test(people): align generic Assignment fixture coverage window
seonghobae Sep 12, 2026
af87c0f
test(people): cover detached snapshot fail-closed guards
seonghobae Sep 12, 2026
9ed69b6
test(people): require governed separation reason vocabulary
seonghobae Sep 13, 2026
279da65
fix(people): close separation reason vocabulary
seonghobae Sep 13, 2026
4458afa
fix(people): enforce separation reason vocabulary in database
seonghobae Sep 13, 2026
118c497
build: reseal separation reason migration
seonghobae Sep 13, 2026
c804ca8
test(people): reject unreviewed separation reasons in postgres
seonghobae Sep 13, 2026
fa191e5
build: reseal separation reason contract
seonghobae Sep 13, 2026
d000c07
test(people): close public separation reason vocabulary
seonghobae Sep 13, 2026
101af52
fix(people): publish controlled separation reasons
seonghobae Sep 13, 2026
1a094cb
build: reseal public separation vocabulary
seonghobae Sep 13, 2026
4805eac
docs(people): publish governed employment separation API
seonghobae Sep 13, 2026
1476b48
docs(people): model authoritative employment separation
seonghobae Sep 13, 2026
9ff4f5b
docs(people): reconcile ERD with separation truth
seonghobae Sep 13, 2026
5e0d863
docs(people): show governed separation lifecycle
seonghobae Sep 13, 2026
46d816c
docs(people): add governed separation product requirement
seonghobae Sep 13, 2026
08e6a21
docs(people): specify separation technical boundary
seonghobae Sep 13, 2026
22e7f26
chore(manifest): reseal separation documentation
seonghobae Sep 13, 2026
e38fe69
fix(manifest): restore canonical ADR seal
seonghobae Sep 13, 2026
780ba27
fix(manifest): apply exact ADR digest
seonghobae Sep 13, 2026
7f81193
docs(security): reconcile governed separation boundary
seonghobae Sep 13, 2026
ffcf4ad
docs(security): model employment separation threats
seonghobae Sep 13, 2026
5b86bb5
chore(manifest): reseal separation security docs
seonghobae Sep 13, 2026
9f42c5c
docs(test): register separation acceptance matrix
seonghobae Sep 13, 2026
4981c80
docs(ops): define employment separation recovery
seonghobae Sep 13, 2026
fb5f5c8
chore(manifest): reseal separation acceptance docs
seonghobae Sep 13, 2026
7899754
docs(security): preserve published header contract
seonghobae Sep 13, 2026
dbf0f8e
chore(manifest): reseal security contract
seonghobae Sep 13, 2026
10aa915
docs(changelog): record governed employment separation
seonghobae Sep 13, 2026
d9cc516
chore(manifest): adopt changelog provenance
seonghobae Sep 13, 2026
f4f7e12
fix(people): pin separation digest resolution
seonghobae Sep 13, 2026
71d7226
test(people): prove separation tenant capability boundary
seonghobae Sep 13, 2026
120616b
docs(security): state separation tenant GUC trust boundary
seonghobae Sep 13, 2026
c0ba482
chore(provenance): reseal separation hardening evidence
seonghobae Sep 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/foundation-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
python-version: "3.14"
check-latest: false
- name: Set up Node.js LTS
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: "24"
check-latest: false
Expand Down
7 changes: 5 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ All notable changes to Orgmetra will be documented in this file.

- Accepted ADRs 0001–0003 now include buyer-facing Context, Decision, and Consequences grounded in verified ISO 30400:2022, ISO 30414:2025, Uniform Guidelines (29 C.F.R. Part 1607), SIOP (2018), OpenAPI Specification v3.2.0, OpenID Connect Core 1.0 errata set 2, CloudEvents v1.0.2, Jensen and Snodgrass (1999), Snodgrass (1999), and Allen (1983) records already listed in `docs/doctoring/REFERENCES.md`. ADRs 0004 and 0005 gained APA 7th References pointers to that same bibliography without changing their Decision bodies.
- Active-PR governed Job Analysis persistence/API on the canonical `JobAnalysisSnapshot` model: migration `0013_job_analysis_snapshot.sql` stores immutable tenant-scoped snapshot, Task, KSAO, Task–KSAO, FJA and write-command evidence; `POST /v1/tenants/{tenant_record_id}/job-analysis-snapshots` and matching GET enforce purpose-bound Keyverse scope, authenticated-principal actor authority, bounded/strict JSON handling, transactional Idempotency-Key serialization, parent-scope fail-closed integrity, forced RLS, and atomic audit/outbox evidence. ADR 0014 records the persistence decision while ADR 0007 remains the domain/evidence authority; validated evidence still requires accountable human review and non-LLM provenance, and the service does not make a high-impact employment decision.
- Active-PR governed Employment separation via `POST /v1/employment-separations`: exact current-known Employment/version targeting, five controlled separation reasons, human-confirmed versioned evidence, bitemporal supersession instead of in-place termination, append-only `employment_separation_record`, atomic People idempotency plus audit/outbox evidence, capability-separated PostgreSQL execution, and shared Employment-anchor serialization with Assignment creation. ADR 0015 remains Proposed; canonical #311 PostgreSQL execution, remaining security/review gates, protected integration, and downstream #302 rehire are not claimed by this Unreleased entry.
- Active-PR `orgmetra_selection_review` packet for PII-minimized, evidence-bound human selection review: canonical operational tenant identity, UUID-backed opaque candidate/Job/sealed-evidence/reviewer references, explicit purpose/reason/evidence version, deterministic canonical JSON and SHA-256 correlation, mandatory human decision state, redacted packet repr, and provenance-paired model evidence that remains `untrusted_draft`, with exact 100% owned statement and branch coverage required by its quality gate.
- Active performance-criterion scope hardening: `criterion_observation_scope_guard` rejects criterion outcomes for a Job the worker did not effectively hold at the observation date, observations before the relevant assignment, and observations outside the referenced performance cycle while preserving valid multiple-assignment cases and existing bitemporal correction semantics. The guard evaluates current-recorded facts, derives the date coordinate from `observed_at` in UTC so session `TimeZone` cannot alter the result, uses a trusted function search path, and adds no PII or automated employment decision authority. The Foundation PostgreSQL contract also rejects a closed `recorded_to` on each time-coordinate lookup and proves UTC midnight plus non-UTC session `TimeZone` boundaries.
- Bitemporal tenant-scoped organization hierarchy validation that rejects visible indirect parent cycles and reuses single-valued recorded-time reconstruction before graph traversal.
Expand All @@ -18,7 +19,7 @@ All notable changes to Orgmetra will be documented in this file.
- `employment_record_version.employment_concurrency_code` constrained to `exclusive` or `concurrent`.
- ADR 0005 for exclusive employment and staffable seats.
- `orgmetra_hris_kernel` 0.3.0 with identity-scoped bitemporal resolution, assignment-employment coverage, allocation-portfolio checks, and a Memorial Hospital RN correction case at 100% statement and branch coverage.
- `employment_record_version` and `position_record_version` so employment and position identity stay stable across retroactive corrections.
- `employment_record_version` and `position_record_version` so corrections no longer mint a new employment or position identifier.
- `assignment_record.employment_record_id` bound to the same person as the covering employment.
- `orgmetra_keyverse_adapter` that binds an opaque Keyverse subject to a person and rejects passwords, passkeys, and tokens.
- Design tokens for the repeating HR actions: approve, review, correct, request evidence, compare, export, and escalate.
Expand All @@ -37,6 +38,7 @@ All notable changes to Orgmetra will be documented in this file.

### Changed

- Foundation database validation now treats PostgreSQL-owned `public` as an infrastructure qualifier, continues enforcing multiword naming for organization-owned schemas and created tables, and recognizes the optional qualifier on forced row-level-security declarations.
- Consolidated repository-owned PR validation from twelve workflows into one Foundation CI job, while keeping the dual-cluster recovery rehearsal separately path-scoped. Central required review and security workflows remain organization-owned.
- New predictive-validity membership must use one normalized worker-level case; the three independent validity-study decision/evidence/outcome link relations are historical read surfaces only and can no longer accept new rows. A case insert also rejects a criterion observation whose recorded interval is already closed at `linked_at`.
- Canonicalized service identifiers as two-or-more-word `snake_case` across architecture, deployment, ACL, metrics, and client contracts.
Expand All @@ -54,6 +56,7 @@ All notable changes to Orgmetra will be documented in this file.
- Made assignment coverage status-aware: `active` and `leave` remain staffable while `terminated` and other non-eligible employment statuses fail closed.
- Made organization hierarchy reconstruction fail closed on a cycle at the requested tenant, effective day, and knowledge cutoff while ignoring future-recorded and foreign-tenant facts.
- Build the outbox due-work index concurrently during migration 0008, requiring that index step to run outside an explicit transaction block so established queues do not block writers while the index is built; pre-index hardening and post-index privileged role setup use separate explicit transactions.
- Active-PR People mutation commands now require exact built-in governance text and hire status values before digesting or persisting high-impact employment evidence.

### Security

Expand All @@ -67,7 +70,7 @@ All notable changes to Orgmetra will be documented in this file.
- Expired dispatcher ownership is recoverable only after the recorded lease deadline and while attempts remain; takeover preserves immutable event/audit identity and retry budget, increments the attempt count, issues a new future lease, and records `lease_expired` failure evidence. An expired final-attempt row is not reclaimable beyond the budget.
- Normal dead-lettering remains restricted to the exact recorded worker identity after the immutable database-owned retry budget is exhausted. If that final worker identity is permanently unavailable, a distinct operator-only function may terminalize only an already-expired exhausted lease, must supply an opaque operator reference and failure code, and must append matching immutable escalation evidence before the existing transition guard accepts the dead-letter state. `PUBLIC` cannot execute the function; the externally assignable `orgmetra_outbox_operator` role receives EXECUTE only, while a separate NOLOGIN/NOBYPASSRLS `orgmetra_outbox_recovery_owner` owns the SECURITY DEFINER function and narrowly scoped table privileges. The operator role cannot SELECT/UPDATE outbox state or INSERT escalation evidence directly. Pre-existing reserved role names are rejected before migration 0008 changes project objects, and the temporary schema `CREATE` used for ownership transfer is transactionally revoked before the role setup can commit.
- Audit/outbox SQL boundaries pin a trusted `pg_catalog, public, pg_temp` search path while `PUBLIC` loses schema-creation privilege on `public`; immutable envelope validation uses C-collated deterministic comparisons and calendar-field validation rather than session-sensitive timestamp input parsing.
- Bitemporal reconstruction plus assignment, position-seat, employment-exclusivity, and organization-hierarchy kernel decisions are tenant-scoped so foreign-tenant identifiers cannot leak historical facts, provide coverage, consume capacity, or create false conflicts.
- Bitemporal reconstruction plus assignment, position-seat, employment-exclusivity, and organization-hierarchy kernel decisions are tenant-scoped so foreign-tenant identifiers cannot leak historical facts, provide coverage, consume capacity, create false conflicts, or enter reconstructed history.
- Keyverse outage policy that blocks PII and high-risk actions when current authorization cannot be verified.
- Cross-tenant threat, denial evidence, and negative authorization test contracts.
- Replaced client-visible internal trace identifiers with random support references and actionable next-step error guidance.
Expand Down
Loading
Loading