diff --git a/examples/informed-decision-sitting/attribute_admission_v8.json b/examples/informed-decision-sitting/attribute_admission_v8.json index 7a6dad8..15cd095 100644 --- a/examples/informed-decision-sitting/attribute_admission_v8.json +++ b/examples/informed-decision-sitting/attribute_admission_v8.json @@ -1,6 +1,6 @@ { "policy_id": "informed-decision.compact-sitting", - "policy_version": "v8", + "policy_version": "v9", "note": "Offline request/response fixtures. Shipped admitted sets are empty, so attribute_eligible is not in this file. An allow here is an exact-record pin, not proof of a live approval.", "cases": [ { diff --git a/examples/informed-decision-sitting/policy.md b/examples/informed-decision-sitting/policy.md index 59d8166..c67d8c5 100644 --- a/examples/informed-decision-sitting/policy.md +++ b/examples/informed-decision-sitting/policy.md @@ -2,7 +2,7 @@ id: informed-decision.compact-sitting name: Compact sitting exact-record human review namespace: informed-decision:decision-memo -version: v8 +version: v9 status: ready package: flexauth.informed_decision.compact_sitting allow_ttl: 30s @@ -81,6 +81,13 @@ hash is read. Context fields are `review_group`, `memo_class`, `intake_submitter`, `approval_requester`, `approval_human_control`, `memo_version`, `approval_id` and `approval_binding_digest`. +v9 (2026-10-04, EMERGENT-WP-0002 profile adoption) adds exactly one record, +`memo:emergent-profile-adoption-0-2-6`. Native pins come from informed-decision +`docs/evidence/2026-10-04-emergent-profile-approval-create.json`, approval +`05751e09-3a5b-4a41-a4e8-b79e96de6484`. Existing exact records stay. The v8 +attribute branch remains beside them and still admits nobody, because the +shipped submitter and class sets are empty. + `admitted_submitters` and `admitted_classes` are generated from informed-decision `deploy/intake-submitters.json`. The shipped registry is empty, so both sets are empty and this branch admits nobody. Regenerate with @@ -103,6 +110,10 @@ records := { "approval_id": "706f4205-aaa7-44f6-be30-d0f57664d69c", "binding_digest": "sha256:c8a1a9c8fb22616e3aacfb877ba7974feb5eedaed491f856a6c90719c502ebe4" }, + "memo:emergent-profile-adoption-0-2-6": { + "approval_id": "05751e09-3a5b-4a41-a4e8-b79e96de6484", + "binding_digest": "sha256:7843e660694dcd7c806dc02ee0cca05dd3a96488f614b1946291496259a02001" + }, "memo:infd-20260914-c02": { "approval_id": "ccfd8007-2061-48fd-9356-99b16279dac1", "binding_digest": "sha256:942cf7d5e6805987df2077a0cc6cde75b148e1729a96dd0692153287820b6a0a" diff --git a/examples/informed-decision-sitting/records.json b/examples/informed-decision-sitting/records.json index 8285cc8..3963b5f 100644 --- a/examples/informed-decision-sitting/records.json +++ b/examples/informed-decision-sitting/records.json @@ -339,6 +339,23 @@ }, "memo_version": 1 }, + "memo:emergent-profile-adoption-0-2-6": { + "approval_id": "05751e09-3a5b-4a41-a4e8-b79e96de6484", + "binding_digest": "sha256:7843e660694dcd7c806dc02ee0cca05dd3a96488f614b1946291496259a02001", + "label": "emergent-profile-0-2-6", + "binding": { + "action": "accept", + "actor": "informed-decision", + "principal": "emergent-security", + "purpose": "Accept only the non-normative knowledge profile boundary", + "target": { + "id": "emergent-security:knowledge:0.2.6:8d1d6a9d4d07fec7b619618de7dfe2be2254c1790f85f4198c7fe19db9751c02", + "type": "knowledge-profile", + "system": "emergent-security" + } + }, + "memo_version": 1 + }, "memo:infd-20261003-p01": { "approval_id": "706f4205-aaa7-44f6-be30-d0f57664d69c", "binding_digest": "sha256:c8a1a9c8fb22616e3aacfb877ba7974feb5eedaed491f856a6c90719c502ebe4", diff --git a/internal/policy/informed_decision_attribute_test.go b/internal/policy/informed_decision_attribute_test.go index d83f041..02b7a4e 100644 --- a/internal/policy/informed_decision_attribute_test.go +++ b/internal/policy/informed_decision_attribute_test.go @@ -23,8 +23,8 @@ func TestInformedDecisionAttributeAdmission(t *testing.T) { if !pkg.Valid { t.Fatalf("package invalid: %+v", pkg.Validation) } - if pkg.Metadata.Version != "v8" { - t.Fatalf("version = %s; want v8", pkg.Metadata.Version) + if pkg.Metadata.Version != "v9" { + t.Fatalf("version = %s; want v9", pkg.Metadata.Version) } if strings.Contains(pkg.RegoModule, "view_hash") { t.Fatal("rule module reads view_hash") @@ -50,7 +50,7 @@ func TestInformedDecisionAttributeAdmission(t *testing.T) { if err := json.Unmarshal(raw, &doc); err != nil { t.Fatal(err) } - if doc.PolicyVersion != "v8" { + if doc.PolicyVersion != "v9" { t.Fatalf("fixture policy_version = %s", doc.PolicyVersion) } exactKeys := map[string]bool{"memo_version": true, "approval_id": true, "approval_binding_digest": true}