Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
7d48354
test(authz): reject runtime type-confusion inputs
seonghobae Aug 21, 2026
c8cb0b0
fix(authz): protect purpose-bound runtime types
seonghobae Aug 21, 2026
3d3c81c
test(authz): reject hostile text and set subclasses
seonghobae Aug 28, 2026
7bb7bda
fix(authz): require exact text and set runtime types
seonghobae Aug 28, 2026
c8b7f30
docs(authz): record runtime integrity hardening
seonghobae Aug 29, 2026
9d0074c
chore(authz): adopt protected develop without rewriting runtime harde…
seonghobae Sep 3, 2026
b568b40
test(authz): reject malformed authorization decision evidence
seonghobae Sep 3, 2026
c35d434
fix(authz): validate authorization decision runtime evidence
seonghobae Sep 3, 2026
57e938e
test(authz): reject contradictory decision evidence
seonghobae Sep 3, 2026
fc89394
fix(authz): bind decision reasons to recovery evidence
seonghobae Sep 3, 2026
1693abd
test(authz): preserve non-authoritative recovery guidance
seonghobae Sep 3, 2026
e46314c
fix(authz): keep recovery guidance non-authoritative
seonghobae Sep 3, 2026
64a6a56
test(authz): keep denial vocabulary extensible
seonghobae Sep 3, 2026
edbd073
fix(authz): bind verdict polarity without closing denial codes
seonghobae Sep 3, 2026
bed6809
test(authz): reject decision subclass validator bypass
seonghobae Sep 3, 2026
7239eac
fix(authz): seal authorization decision validation
seonghobae Sep 3, 2026
1ccada3
test(authz): prove decision evidence resists low-level mutation
seonghobae Sep 3, 2026
0d22689
test(authz): prove issued decision detaches caller UUID state
seonghobae Sep 3, 2026
5a2bde8
test(authz): reject corrupted exact UUID decision evidence
seonghobae Sep 3, 2026
a10468f
fix(authz): make issued decisions structurally immutable
seonghobae Sep 3, 2026
23e2c6e
test(authz): cover immutable decision issuance lifecycle
seonghobae Sep 3, 2026
1a90211
test(authz): reproduce post-construction policy/request rewrite
seonghobae Sep 3, 2026
250c852
fix(authz): bind evaluation to issued policy and request snapshots
seonghobae Sep 3, 2026
7982463
test(authz): require side-effect-free issued input reinitialization
seonghobae Sep 3, 2026
2318ff8
fix(authz): guard issued policy and request reinitialization
seonghobae Sep 3, 2026
e92d2ac
test(authz): align invalid reinitialization lifecycle expectations
seonghobae Sep 3, 2026
0fef3f8
test(authz): reject direct post-init issuance
seonghobae Sep 3, 2026
dc94588
fix(authz): bind snapshot issuance to constructor lifecycle
seonghobae Sep 3, 2026
269b521
test(authz): require evaluator-issued decisions
seonghobae Sep 3, 2026
ffdf141
fix(authz): bind decisions to evaluator issuance
seonghobae Sep 3, 2026
01b55d0
test(authz): align decision integrity with evaluator issuance
seonghobae Sep 3, 2026
99459d8
test(people): issue authorization fixtures through evaluator
seonghobae Sep 3, 2026
83870fc
test(people): derive reason-binding authorization
seonghobae Sep 3, 2026
b43931a
test(people): derive evidence-binding authorization
seonghobae Sep 3, 2026
bc2cf64
test(people): use evaluated postgres authorization
seonghobae Sep 3, 2026
cdf21f0
test(people): derive mutation digest authorization
seonghobae Sep 3, 2026
c59359e
test(people): use evaluated hire authorization
seonghobae Sep 3, 2026
2351bd0
docs(authz): trace evaluator-issued decision authority
seonghobae Sep 3, 2026
b75fb41
chore(manifest): record authorization traceability
seonghobae Sep 3, 2026
7aebe4e
test(authz): reject fabricated decision helper issuance
seonghobae Sep 3, 2026
2b52217
fix(authz): keep decision issuance evaluator-local
seonghobae Sep 3, 2026
1e0c124
test(authz): seal evaluator-local issuance lifecycle
seonghobae Sep 3, 2026
98ad797
test(authz): reject direct decision registry forgery
seonghobae Sep 3, 2026
fc4fb5c
test(authz): model read-only registry repair
seonghobae Sep 3, 2026
3ea988e
fix(authz): hide decision registry mutation capability
seonghobae Sep 3, 2026
05d54af
test(authz): hide decision registry from module consumers
seonghobae Sep 3, 2026
a5d5983
fix(authz): remove module-visible decision registry
seonghobae Sep 3, 2026
b190b79
test(authz): reject module-level input issuance capability forgery
seonghobae Sep 3, 2026
52e3940
fix(authz): privatize input issuance capabilities
seonghobae Sep 3, 2026
611ebe8
refactor(authz): make input issuance closure-native
seonghobae Sep 3, 2026
b08d1e4
test(authz): reproduce closure-cell issuance forgery
seonghobae Sep 3, 2026
df99052
fix(authz): anchor authority at service trust boundary
seonghobae Sep 3, 2026
c2105d2
test(authz): bind provenance assertions to service TCB
seonghobae Sep 3, 2026
eed5c96
test(authz): revalidate live values without fake issuance state
seonghobae Sep 3, 2026
0ad7b91
test(authz): stop treating Python object provenance as authority
seonghobae Sep 3, 2026
5f809a1
test(authz): validate decision data at consumer boundary
seonghobae Sep 3, 2026
a3a943c
feat(authz): expose decision revalidation contract
seonghobae Sep 3, 2026
6ed5ec1
test(authz): cover durable decision revalidation boundary
seonghobae Sep 3, 2026
427a31f
docs(authz): anchor policy authority at trusted composition
seonghobae Sep 3, 2026
b141870
chore(manifest): reseal authorization traceability
seonghobae Sep 3, 2026
acf54ef
fix(manifest): restore full inventory after reseal error
seonghobae Sep 3, 2026
bf66cf4
chore(manifest): reseal authorization traceability
seonghobae Sep 3, 2026
f1abd66
fix(manifest): restore criterion ADR inventory path
seonghobae Sep 3, 2026
9e9a16a
test(people): require durable authorization revalidation
seonghobae Sep 3, 2026
b3cec0c
fix(people): revalidate decisions before durable digests
seonghobae Sep 3, 2026
79e0669
fix(people): revalidate hire authorization before persistence
seonghobae Sep 3, 2026
7d2d319
fix(people): revalidate mutation authorization before SQL
seonghobae Sep 3, 2026
e2db55a
test(people): require authorization revalidation before DB acquisition
seonghobae Sep 3, 2026
311b421
test(people): align digest validation error contract
seonghobae Sep 3, 2026
9d22d2e
test(authz): reproduce job-analysis audit authority drift
seonghobae Sep 3, 2026
307725f
fix(authz): bind job-analysis audit authority before persistence
seonghobae Sep 3, 2026
1149960
test(authz): reject executable Job Analysis audit subtypes
seonghobae Sep 3, 2026
33e1463
fix(authz): reject executable Job Analysis audit subtypes
seonghobae Sep 3, 2026
c4c96ae
test(authz): prove audit exact-type check precedes subtype access
seonghobae Sep 3, 2026
92d87c8
test(job-analysis): reproduce executable snapshot subtype trust breach
seonghobae Sep 3, 2026
d886623
fix(job-analysis): reject snapshot subtypes before command digest
seonghobae Sep 3, 2026
fc986dd
fix(job-analysis): reject snapshot subtype at PostgreSQL authority
seonghobae Sep 3, 2026
43c6e61
test(job-analysis): reproduce executable snapshot result subtype breach
seonghobae Sep 3, 2026
c5b39ad
fix(job-analysis): reject executable snapshot port results
seonghobae Sep 3, 2026
1c0fa1e
test(job-analysis): reproduce write-port snapshot alias mutation
seonghobae Sep 3, 2026
39f57fd
fix(job-analysis): detach authorized snapshot before persistence
seonghobae Sep 3, 2026
1d44c71
test(authz): bind decision reason and next action semantics
seonghobae Sep 3, 2026
8113609
fix(authz): bind decision recovery evidence to verdict
seonghobae Sep 3, 2026
0a54a06
test(authz): align runtime oracle with governed recovery evidence
seonghobae Sep 3, 2026
6127146
test(auth): reject People principal runtime subtypes
seonghobae Sep 3, 2026
92d481f
test(auth): reject Job Analysis principal runtime subtypes
seonghobae Sep 3, 2026
bf62ebb
fix(auth): reject People principal runtime subtypes
seonghobae Sep 3, 2026
9d9ebd3
fix(auth): reject Job Analysis principal runtime subtypes
seonghobae Sep 3, 2026
f764104
test(auth): reject executable People principal subclasses
seonghobae Sep 3, 2026
c671c12
test(auth): reject executable Job Analysis principal subclasses
seonghobae Sep 3, 2026
88312c4
fix(auth): seal People authenticated principal runtime class
seonghobae Sep 3, 2026
2b6b617
fix(auth): seal Job Analysis authenticated principal runtime class
seonghobae Sep 3, 2026
d1fba05
test(auth): detach People principal tenant UUID evidence
seonghobae Sep 3, 2026
b6fa64c
test(auth): detach Job Analysis principal tenant UUID evidence
seonghobae Sep 3, 2026
d3fbc97
fix(auth): detach People principal tenant UUID evidence
seonghobae Sep 3, 2026
b5f4a1d
fix(auth): detach Job Analysis principal tenant UUID evidence
seonghobae Sep 3, 2026
73e5b5c
test(auth): reproduce principal evidence rewrite
seonghobae Sep 3, 2026
59c37bc
test(auth): reproduce job-analysis principal rewrite
seonghobae Sep 3, 2026
2225c3d
fix(auth): make People principal structurally immutable
seonghobae Sep 3, 2026
a4e84c4
fix(auth): make Job Analysis principal structurally immutable
seonghobae Sep 3, 2026
eb4a177
test(auth): preserve principal value semantics
seonghobae Sep 3, 2026
1ceca38
test(auth): preserve job-analysis principal value semantics
seonghobae Sep 3, 2026
f35ee42
fix(auth): preserve strict People principal equality
seonghobae Sep 3, 2026
e588c91
fix(auth): preserve strict Job Analysis principal equality
seonghobae Sep 3, 2026
5e1eb4a
fix(auth): keep principal inequality strict
seonghobae Sep 3, 2026
92f7eb4
test(auth): protect returned tenant UUID evidence
seonghobae Sep 3, 2026
64deb92
fix(auth): detach returned People tenant UUID
seonghobae Sep 3, 2026
b468acc
fix(auth): detach returned Job Analysis tenant UUID
seonghobae Sep 3, 2026
1d13d6d
test(people): expose tuple principal validation bypass
seonghobae Sep 3, 2026
1d2eec5
test(job-analysis): expose tuple principal validation bypass
seonghobae Sep 3, 2026
3fcbe76
fix(people): revalidate tuple-backed principal storage
seonghobae Sep 3, 2026
7e5fc43
fix(job-analysis): revalidate tuple-backed principal storage
seonghobae Sep 3, 2026
e505b92
test(people): reject malformed principal sequence access
seonghobae Sep 3, 2026
8780c1a
test(job-analysis): reject malformed principal sequence access
seonghobae Sep 3, 2026
6d61dbe
fix(people): validate principal sequence views
seonghobae Sep 3, 2026
02568d0
fix(job-analysis): validate principal sequence views
seonghobae Sep 3, 2026
93c0f16
test(people): preserve validated principal sequence semantics
seonghobae Sep 3, 2026
934bb4d
test(job-analysis): preserve validated principal sequence semantics
seonghobae Sep 3, 2026
5755c4d
test(people): cover remaining principal tuple operations
seonghobae Sep 3, 2026
39208df
test(job-analysis): cover remaining principal tuple operations
seonghobae Sep 3, 2026
e7aff6a
fix(people): revalidate all ordinary tuple operations
seonghobae Sep 3, 2026
43821d8
fix(job-analysis): revalidate all ordinary tuple operations
seonghobae Sep 3, 2026
58e4447
test(job-analysis): reject malformed durable command scalars before DB
seonghobae Sep 3, 2026
2c8a114
fix(job-analysis): validate durable command scalars before DB
seonghobae Sep 3, 2026
d8b2260
test(authz): reject mutable or spoofed operational UUID evidence
seonghobae Sep 3, 2026
51a4fa5
fix(authz): detach exact operational UUID evidence
seonghobae Sep 3, 2026
ae0c8c8
test(authz): detach validated UUIDs at PostgreSQL boundary
seonghobae Sep 3, 2026
9058e0c
fix(authz): retain detached UUIDs at PostgreSQL boundary
seonghobae Sep 3, 2026
2d174f6
test(authz): reject durable authority text subtypes before PostgreSQL
seonghobae Sep 3, 2026
cf14ca8
fix(authz): exact-gate durable actor and purpose text
seonghobae Sep 3, 2026
f6b0d2c
test(security): reject forged durable audit authority text
seonghobae Sep 3, 2026
bd32e25
fix(security): snapshot durable audit authority before PostgreSQL
seonghobae Sep 3, 2026
abb9286
test(security): detect audit authority drift during canonicalization
seonghobae Sep 3, 2026
4cfa2bf
fix(security): verify frozen audit bytes match detached authority
seonghobae Sep 3, 2026
c788710
test(security): bind durable job-analysis audit semantics
seonghobae Sep 3, 2026
0ae7890
fix(security): bind durable job-analysis audit semantics
seonghobae Sep 3, 2026
1665f74
test(job-analysis): reproduce snapshot mutation across DB acquisition
seonghobae Sep 3, 2026
f8543a7
fix(job-analysis): detach snapshot before database hooks
seonghobae Sep 3, 2026
522559b
test(job-analysis): cover noncanonical snapshot rejection
seonghobae Sep 3, 2026
abb0916
refactor(job-analysis): keep snapshot detachment coverage exact
seonghobae Sep 3, 2026
8005a44
test(job-analysis): reproduce unbound durable request digest
seonghobae Sep 3, 2026
2780bca
fix(job-analysis): bind durable request digest to detached command
seonghobae Sep 3, 2026
f7e42ab
test(job-analysis): reject replay bound to another snapshot
seonghobae Sep 3, 2026
14c2b81
fix(job-analysis): bind idempotent replay to snapshot identity
seonghobae Sep 3, 2026
85beec4
test(job-analysis): cover malformed durable replay identity
seonghobae Sep 3, 2026
6ae246b
test(job-analysis): bind replayed snapshot to command digest
seonghobae Sep 3, 2026
462953a
fix(job-analysis): verify replay content against command digest
seonghobae Sep 3, 2026
def403c
test(job-analysis): reject malformed durable replay command rows
seonghobae Sep 3, 2026
cf5c9a6
fix(job-analysis): revalidate durable replay command evidence
seonghobae Sep 3, 2026
d355bbe
test(job-analysis): align replay fixtures with durable SQL row
seonghobae Sep 3, 2026
84e9c75
test(job-analysis): align concurrency replay sentinel
seonghobae Sep 3, 2026
a16b46f
test(job-analysis): reject partial-null replay command evidence
seonghobae Sep 3, 2026
1bb57bd
fix(job-analysis): fail closed on partial-null replay evidence
seonghobae Sep 3, 2026
3598b46
test(job-analysis): fail closed on missing idempotency projection
seonghobae Sep 4, 2026
521011f
fix(job-analysis): require idempotency lookup projection
seonghobae Sep 4, 2026
5b95eb4
test(job-analysis): model idempotency LEFT JOIN absence projection
seonghobae Sep 4, 2026
59e9a46
test(job-analysis): preserve missing-projection regression
seonghobae Sep 4, 2026
7002ff3
test(job-analysis): bind scope projections to requested identities
seonghobae Sep 4, 2026
013664c
fix(job-analysis): verify scope projection identities
seonghobae Sep 4, 2026
aed5eda
test(job-analysis): reject forged scope projection UUIDs
seonghobae Sep 4, 2026
94d9cf7
fix(job-analysis): validate scope projection UUID evidence
seonghobae Sep 4, 2026
9a97294
repair(job-analysis): keep scope fix causally minimal
seonghobae Sep 4, 2026
8d324b8
test(job-analysis): reject forged scope relationship UUIDs
seonghobae Sep 4, 2026
47074ca
fix(job-analysis): validate scope relationship UUID evidence
seonghobae Sep 4, 2026
a6ef26a
test(job-analysis): reject malformed scope projection shapes
seonghobae Sep 4, 2026
2a14b10
test(job-analysis): cover non-sequence scope projection rows
seonghobae Sep 4, 2026
0220e5a
fix(job-analysis): validate scope projection cardinality
seonghobae Sep 4, 2026
e022fe5
test(job-analysis): reject iterable non-row projections
seonghobae Sep 4, 2026
278a032
fix(job-analysis): require sequence scope projections
seonghobae Sep 4, 2026
f31f198
test(job-analysis): reject malformed durable read projections
seonghobae Sep 4, 2026
df92a02
fix(job-analysis): validate durable read projections
seonghobae Sep 4, 2026
84df3b7
test(job-analysis): cover failing sequence materialization
seonghobae Sep 4, 2026
bf447c7
test(auth): reject executable bearer header subtype
seonghobae Sep 4, 2026
9ff282d
test(auth): mirror executable bearer-header regression
seonghobae Sep 4, 2026
dfc0efe
fix(auth): reject executable bearer header values
seonghobae Sep 4, 2026
964391c
fix(auth): mirror bearer header exact-type gate
seonghobae Sep 4, 2026
f526259
test(job-analysis): reject iterable idempotency projection rows
seonghobae Sep 4, 2026
64d1a4c
fix(job-analysis): validate idempotency projection row kind
seonghobae Sep 4, 2026
1119741
test(job-analysis): reject executable idempotency-key text
seonghobae Sep 4, 2026
6c8c944
fix(job-analysis): gate idempotency key before sequence hooks
seonghobae Sep 4, 2026
84312a2
test(job-analysis): reject executable fixed projection rows
seonghobae Sep 4, 2026
995e61b
fix(job-analysis): reject executable fixed projection rows
seonghobae Sep 4, 2026
b192bbc
docs(job-analysis): narrow fixed-row driver contract
seonghobae Sep 4, 2026
410db05
fix(job-analysis): restore runtime after driver-contract doctoring
seonghobae Sep 4, 2026
b61bda6
test(job-analysis): reject executable DB row collections
seonghobae Sep 4, 2026
97232d8
test(job-analysis): repair row-collection RED fixture
seonghobae Sep 4, 2026
0567b4f
fix(job-analysis): seal DB row collections before projection reads
seonghobae Sep 4, 2026
912e52d
test(job-analysis): reject executable durable audit time
seonghobae Sep 4, 2026
8fa3db6
fix(job-analysis): seal durable audit time runtime type
seonghobae Sep 4, 2026
6773a04
fix(job-analysis): repair audit-time successor transcription
seonghobae Sep 4, 2026
348c6e5
fix(job-analysis): restore canonical postgres source after failed edit
seonghobae Sep 4, 2026
cec9eb8
fix(job-analysis): seal durable audit time before canonicalization
seonghobae Sep 4, 2026
a57d584
fix(job-analysis): restore canonical postgres source after rejected edit
seonghobae Sep 4, 2026
2c8ab24
chore(job-analysis): defer audit time type gate to canonical kernel o…
seonghobae Sep 4, 2026
854444f
test(job-analysis): reject executable driver error metadata
seonghobae Sep 4, 2026
9a5f1de
fix(job-analysis): normalize inert driver error metadata
seonghobae Sep 4, 2026
b0055c4
test(job-analysis): reject polymorphic error metadata lookup
seonghobae Sep 4, 2026
c71fc77
fix(job-analysis): statically read driver error metadata
seonghobae Sep 4, 2026
b60793a
test(job-analysis): decouple conflicts from driver diagnostics
seonghobae Sep 4, 2026
3a403a5
test(job-analysis): narrow driver contract to SQLSTATE evidence
seonghobae Sep 4, 2026
b051272
fix(job-analysis): decouple conflicts from driver diagnostics
seonghobae Sep 4, 2026
d47c962
test(job-analysis): reject executable snapshot document inputs
seonghobae Sep 4, 2026
106cff6
test(job-analysis): reject executable snapshot field names
seonghobae Sep 4, 2026
48cb282
test(job-analysis): reject executable timezone providers
seonghobae Sep 4, 2026
aa72ca1
fix(job-analysis): exact-gate posted snapshot runtime types
seonghobae Sep 4, 2026
8b8ee60
test(job-analysis): reject executable snapshot scalar leaves
seonghobae Sep 4, 2026
e0814b8
fix(job-analysis): exact-gate snapshot scalar evidence
seonghobae Sep 4, 2026
e2cb31e
test(job-analysis): cover exact boolean snapshot flag
seonghobae Sep 4, 2026
4973243
test(job-analysis): reject executable read target identities
seonghobae Sep 4, 2026
e1f483c
fix(job-analysis): validate returned snapshot target identities
seonghobae Sep 4, 2026
554ed9d
test(job-analysis): reject executable returned snapshot graph
seonghobae Sep 4, 2026
3d8cca2
fix(job-analysis): validate returned snapshot graph before export
seonghobae Sep 4, 2026
9cf0ff3
test(job-analysis): reject executable write-port result graph
seonghobae Sep 4, 2026
d378a93
fix(job-analysis): validate persisted snapshot graph before export
seonghobae Sep 4, 2026
9109f19
test(job-analysis): reproduce returned graph validation export gap
seonghobae Sep 4, 2026
ea0ec9e
fix(job-analysis): emit captured returned snapshot evidence
seonghobae Sep 4, 2026
6aab0c9
test(job-analysis): reproduce post-port input target alias execution
seonghobae Sep 4, 2026
5497a9b
fix(job-analysis): detach posted target before write port
seonghobae Sep 4, 2026
f8fdc39
test(job-analysis): reproduce nested returned owner drift
seonghobae Sep 4, 2026
b2541fd
fix(job-analysis): reject returned ownership drift
seonghobae Sep 4, 2026
09b321e
test(job-analysis): reject executable stored snapshot digest
seonghobae Sep 4, 2026
5e6b631
fix(job-analysis): exact-validate stored snapshot digest
seonghobae Sep 4, 2026
9aee97d
test(job-analysis): reject executable stored job identity
seonghobae Sep 4, 2026
58e0c6b
test(job-analysis): reject executable durable snapshot scalars
seonghobae Sep 4, 2026
4267092
fix(job-analysis): detach durable snapshot scalars
seonghobae Sep 4, 2026
201c675
test(job-analysis): preserve psycopg3 ZoneInfo timestamptz
seonghobae Sep 4, 2026
79ad46b
fix(job-analysis): preserve standard timestamptz adapters
seonghobae Sep 4, 2026
5b49fb1
test(job-analysis): reject executable timezone evidence
seonghobae Sep 4, 2026
f953dda
test(job-analysis): preserve ZoneInfo through governed read
seonghobae Sep 4, 2026
b1e6017
fix(job-analysis): preserve ZoneInfo through read export
seonghobae Sep 4, 2026
a0260ae
test(auth): bound job-analysis authorization header before parsing
seonghobae Sep 4, 2026
cb0b999
test(auth): mirror People authorization header budget
seonghobae Sep 4, 2026
5660fc6
fix(auth): bound job-analysis header before bearer parsing
seonghobae Sep 4, 2026
39b6a3f
fix(auth): mirror People header budget before parsing
seonghobae Sep 4, 2026
9102e9a
merge(authz): adopt protected workflow consolidation
seonghobae Sep 4, 2026
375b91f
merge(authz): preserve #161 changelog delta after restack
seonghobae Sep 4, 2026
50fd315
fix(ci): reseal foundation manifest after protected restack
seonghobae Sep 4, 2026
200cc2a
test(job-analysis): reject executable durable audit scalar evidence
seonghobae Sep 4, 2026
47059d8
test(job-analysis): align durable audit acceptance with shared-kernel…
seonghobae Sep 4, 2026
fee1989
test(job-analysis): satisfy runtime tripwire protocols
seonghobae Sep 5, 2026
e1471be
test(job-analysis): avoid unused subclass binding
seonghobae Sep 5, 2026
8f6a5fe
test(people): avoid unused subclass binding
seonghobae Sep 5, 2026
1caf8f7
test(authz): avoid unused subclass binding
seonghobae Sep 5, 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
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,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 Down Expand Up @@ -59,6 +59,7 @@ All notable changes to Orgmetra will be documented in this file.

- Predictive-validity cases fail closed when selection evidence, Job scope, study criterion, converted worker, or system-recorded visibility does not match; the normalized case relation is tenant-qualified, append-only, TRUNCATE-protected, and forced through row-level security.
- Purpose-bound PII authorization now fails closed across active tenant, authenticated actor tenant, resource tenant, resource kind, purpose, operation, operation-specific Keyverse scope, and requested-field subset; malformed/wildcard-like attributes, mutable field/scope collections, reserved UUID sentinels, and cross-tenant confused-deputy contexts are rejected before protected values are returned. Authorization requests and allow/deny evidence now also require and preserve one namespaced opaque target-resource reference, so immutable audit correlation identifies the exact HR record without copying its protected values. Authorization evidence otherwise contains governance metadata and field names only, with stable denial reasons and actionable next steps rather than PII.
- Active-PR authorization runtime-integrity hardening at `orgmetra_keyverse_adapter` additionally requires exact built-in UUID, string, and `frozenset` values plus exact policy/request classes before evaluation, so subclass-controlled equality, membership, and validation bypasses fail closed. This is active-PR refinement to ADR 0008 and is not yet protected-`develop` truth.
- LLM output constrained to draft evidence.
- No direct cross-service application-table access.
- Service-owned database schemas and roles inside the initially shared physical PostgreSQL cluster.
Expand Down
4 changes: 2 additions & 2 deletions docs/TRACEABILITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
| Tenant-safe atomic outbox claiming and crash recovery | Integration Hub dispatcher boundary | `outbox_delivery_record` pending/expired-lease claim indexes plus `claim_outbox_delivery(...)` | PostgreSQL already-expired-new-lease rejection, due-order claim, live-lease exclusion, pre-exhaustion takeover with `lease_expired` evidence, retry-budget claim bound, tenant-context binding, opaque-worker validation, and bounded-lease contract | ADR-0006 | implemented_on_active_pr |
| Owner-bound outbox completion, retry, and terminal dead-letter escalation | Integration Hub dispatcher boundary | immutable `outbox_delivery_record.maximum_attempt_count`, `complete_outbox_delivery(...)`, `retry_outbox_delivery(...)`, `dead_letter_outbox_delivery(...)`, `outbox_delivery_escalation_record` | PostgreSQL foreign/stale-owner denial, dispatcher-budget-signature rejection, direct-terminal-DML rejection, stored-budget exhaustion, retry-attempt-N+1 denial, exhausted expired-lease non-reclaimability, recorded-owner terminalization, nonterminal-escalation rejection, terminal non-reclaimability, and append-only escalation evidence | ADR-0006 | implemented_on_active_pr |
| Predictive-validity case integrity | Workforce Validation | `validity_study`, normalized `validity_study_case_record`, exact `selection_decision`, sealed `decision_evidence_set`, governed `candidate_worker_conversion_record`, `criterion_observation` | `test_validity_study_case_postgres.sh`: legacy loose-link write rejection; exact evidence-set ID, Job, criterion and worker mismatch rejection; study/observation system-recorded visibility boundaries; governed upstream decision/evidence/conversion lineage from the evidence-sealing and candidate-worker conversion contracts; UPDATE/DELETE/TRUNCATE protection; missing/foreign-tenant RLS denial. Statistical estimation remains subsequent work. | ADR-0001, SIOP Principles 5th ed., 29 C.F.R. Part 1607 | implemented_on_protected_main |
| Purpose-bound PII access | Security architecture / Keyverse adapter boundary | `PurposeBoundAccessPolicy`, `PurposeBoundAccessRequest.resource_reference`, `AuthorizationDecision.resource_reference` | exact tenant/actor/resource binding, exact opaque target correlation for allow/deny audit evidence, resource/purpose/operation matching, operation-specific scope, field-subset minimization, malformed-attribute rejection, reserved-UUID rejection, PII-minimized denial evidence, and exact 100% owned statement/branch coverage | ADR-0008 | implemented_on_protected_main |
| Purpose-bound PII access and authorization decision integrity | Security architecture / Keyverse adapter / trusted service composition | `PurposeBoundAccessPolicy`, `PurposeBoundAccessRequest.resource_reference`, `AuthorizationDecision` | exact tenant/actor/resource binding; exact opaque target correlation; resource/purpose/operation/scope/field minimization; exact built-in runtime types; UUID detachment; evaluation-time policy/request revalidation; verdict/reason/field coherence; consumer-side decision revalidation; regressions proving no mutable module/closure registry is represented as an issuance capability; exact 100% owned statement/branch coverage | ADR-0008 | implemented_on_active_pr |
| Least-privilege API capability | Keyverse gateway boundary | operation scope conceptual | structural per-operation scope and confused-deputy contract tests | ADR-0002 | implemented_on_active_pr |
| Client-safe failure correlation | API error boundary | `support_reference` conceptual | error disclosure and support-lookup tests | ADR-0002 | implemented_on_active_pr |
| Foundation artifact integrity | Repository governance | deterministic `manifest.json` file inventory | SHA-256/byte/line validation plus Python/Node inventory-equivalence regression and explicit dispatcher/validity/criterion/job-analysis migration and execution-contract provenance regression | ADR-0001 | implemented_on_active_pr |
Expand All @@ -30,7 +30,7 @@

| External contract | Orgmetra owner boundary | Integration style | Required evidence | ADR | Maturity |
|---|---|---|---|---|---|
| Keyverse identity and authorization | API Gateway / purpose-bound authorization | Published OIDC/API identity and scope contract plus Orgmetra-owned `orgmetra_keyverse_adapter` policy evaluation | tenant/actor/resource agreement, exact opaque target-resource reference, purpose, operation-specific scope, requested-field minimization, opaque subject, no stored credentials or protected values in authorization evidence | ADR-0002, ADR-0008 | implemented_on_protected_main |
| Keyverse identity and authorization | API Gateway / purpose-bound authorization | Published OIDC/API identity and scope contract plus Orgmetra-owned `orgmetra_keyverse_adapter` policy evaluation | tenant/actor/resource agreement, exact opaque target-resource reference, purpose, operation-specific scope, requested-field minimization, opaque subject, no stored credentials or protected values in authorization evidence; production policy values come from trusted Orgmetra service composition/policy sources rather than request-controlled data; Python decision objects are revalidated PII-minimized data, not unforgeable capabilities against arbitrary same-process code | ADR-0002, ADR-0008 | implemented_on_active_pr |
| naruon communication and calendar | Integration Hub | Published API/event adapter | idempotency, delivery audit, no direct table access | ADR-0002 | planned |
| Psychometrics Commons @ `cc5850a0d1eacbbf16d03075534fce460a8286e6` | Workforce Validation | Immutable response/result snapshot contract | pinned revision, model/version/provenance snapshot, immutable result linkage, no direct application-table access | ADR-0002 | accepted_architecture |
| fast-mlsirm @ `fb67ced09d8ee00542c05d56374537a9a7239751` | Workforce Validation | Published `orgmetra.fast_mlsirm.v1` result contract; direct calls only from approved offline validation worker | pinned revision, contract identifier, backend/result provenance, CPU/GPU parity evidence where material, no duplicated kernel | ADR-0002 | accepted_architecture |
Expand Down
10 changes: 5 additions & 5 deletions manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
},
{
"path": "CHANGELOG.md",
"sha256": "f2d2e0b488c0440533effa821808f2f17e37d92f8fb586174c2fdb594f760ca5",
"bytes": 17539,
"lines": 77
"sha256": "8712d0ec7442acb52fcb5776988799da1d8550a90bcced6630273af0be6468ba",
"bytes": 17907,
"lines": 78
},
{
"path": "CLAUDE.md",
Expand Down Expand Up @@ -197,8 +197,8 @@
},
{
"path": "docs/TRACEABILITY.md",
"sha256": "dbf6fd91375ea28e05456d2a0c9ba629506cbac6f52f5dfda61ae68db2395f7e",
"bytes": 11462,
"sha256": "d5b57dfa3b4b5c4a408062b6a47f947080aa98eb4b82ffaf130a85ac17c80892",
"bytes": 11841,
"lines": 40
},
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
"""Keyverse identity binding and purpose-bound authorization for Orgmetra.

Orgmetra never stores passwords, passkeys, or raw credentials on a person
record. Use ``bind_identity_subject`` after Keyverse authenticates the actor,
then evaluate the authenticated subject, tenant, purpose, operation, scope, and
requested field set against an Orgmetra-owned purpose-bound policy before
returning protected HR data.
record. Keyverse authenticates identity and scopes; Orgmetra's trusted service
composition supplies HR policy. The exported value objects validate data but do
not pretend to be unforgeable capabilities against arbitrary same-process code.
"""

from orgmetra_keyverse_adapter.authorization import (
Expand All @@ -14,6 +13,7 @@
PurposeBoundAccessRequest,
evaluate_purpose_bound_access,
require_purpose_bound_access,
validate_authorization_decision,
)
from orgmetra_keyverse_adapter.binding import (
CredentialRejectedError,
Expand All @@ -31,4 +31,5 @@
"bind_identity_subject",
"evaluate_purpose_bound_access",
"require_purpose_bound_access",
"validate_authorization_decision",
]
Loading
Loading