Constitution / Rights — Repo State & Gap Analysis
1. Current State
1.1 Identity Primitives
Layer 0: Cryptographic Root
| Type | Location | Description |
|---|---|---|
Did (newtype) |
icn-identity/src/lib.rs:177 |
did:icn:<base58-pubkey> — validated on construction/deserialization. Ed25519 public key in multibase. |
KeyPair |
icn-identity/src/lib.rs:308 |
Ed25519 + optional ML-DSA post-quantum hybrid. Zeroizing secret bytes. |
Anchor |
icn-identity/src/anchor.rs |
SDIS anchor — permanent identity root, survives key rotation. |
PersonhoodAnchor |
icn-identity/src/personhood.rs:71 |
Wraps Anchor + status lifecycle + POP attestations + key rotation history + uniqueness proofs. |
AnchorStatus |
icn-identity/src/personhood.rs:98 |
`Active |
POPAttestation |
icn-identity/src/personhood.rs:129 |
Proof-of-personhood attestation: issuer DID, method, level, expiry, signature. |
POPMethod |
icn-identity/src/personhood.rs:157 |
8 variants: InPerson, Sponsored, Biometric, Ceremony, VideoCall, GovernmentId, WebOfTrust, Genesis |
POPLevel |
icn-identity/src/personhood.rs:232 |
`Weak(1) |
UniquenessProof |
icn-identity/src/personhood.rs:248 |
Sybil resistance: VUI-based, biometric, or social graph proofs with steward attestations. |
UniquenessProofType |
icn-identity/src/personhood.rs:264 |
`Vui { vui_commitment } |
KeyRotationRecord |
icn-identity/src/personhood.rs:301 |
Old key, new key, reason, authorization signature, optional recovery signatures. |
KeyRotationReason |
icn-identity/src/personhood.rs:326 |
`Scheduled |
RecoverySignature |
icn-identity/src/personhood.rs:341 |
Signer DID + signature over rotation for social recovery. |
Vui |
icn-identity/src/vui.rs |
Verifiable Unique Identifier — threshold PRF-based uniqueness commitment. |
IdentityBundle |
icn-identity/src/bundle.rs |
DID + binding info + verification methods. |
KeyBundle |
icn-identity/src/keybundle.rs |
Extended key management with X25519 for DH. |
Layer 1: Commons Holder
| Type | Location | Description |
|---|---|---|
CommonsHolderRecord |
icn-identity/src/commons.rs:116 |
Links anchor → holder. Fields: holder_id, holder_did, anchor_id, display_name, status, personhood_level, affiliations[], baseline_rights, timestamps. |
HolderStatus |
icn-identity/src/commons.rs:337 |
`Active |
Affiliation |
icn-identity/src/commons.rs:383 |
Links holder → jurisdiction: jurisdiction_id, membership_status, capabilities[], roles[], joined_at, expires_at. |
MembershipStatus (commons) |
icn-identity/src/commons.rs:499 |
`Candidate |
MembershipCapability (commons) |
icn-identity/src/commons.rs:529 |
6 variants: `Vote |
CommonsRights |
icn-identity/src/commons.rs:592 |
Struct with 6 boolean fields — baseline rights that jurisdictions CANNOT revoke. |
CommonsRight |
icn-identity/src/commons.rs:559 |
6 variants: `VoteInCommons |
JurisdictionId |
icn-identity/src/commons.rs:24 |
<type>:<id> — coop:, community:, federation:, network: prefixes. |
JurisdictionType |
icn-identity/src/commons.rs:87 |
`Cooperative |
CommonsHolderStore |
icn-identity/src/commons_store.rs |
Trait for persisting CommonsHolderRecord. |
Recovery & Revocation
| Type | Location | Description |
|---|---|---|
RecoveryAttestation |
icn-identity/src/recovery.rs |
Social recovery event with attestation chain. |
RevocationRecord |
icn-identity/src/revocation.rs |
Records revocation: RevocationType, RevocationScope, CommonsRevocationReason. |
RevocationScope |
icn-identity/src/revocation.rs |
Scope of revocation action. |
AppealStatus |
icn-identity/src/revocation.rs |
Due process tracking for appeals. |
1.2 Scope / Jurisdiction Model
Kernel Scope Primitives
| Type | Location | Description |
|---|---|---|
ScopeLevel |
icn-kernel-api/src/scope.rs:45 |
Local(0) < Cell(1) < Org(2) < Federation(3) < Commons(4) — ordinal hierarchy. Methods: widen(), narrow(), includes(). Defaults to Local (narrowest = safest). |
CellId |
icn-kernel-api/src/scope.rs:162 |
[u8; 32] — blake3 hash of scope_id + cell_name + genesis_salt. Deterministic, collision-resistant. |
MockCellService |
icn-kernel-api/src/scope.rs:223 |
Test implementation of CellService trait. Provides local_cell(), peer_scope(), is_cell_peer(), is_org_peer(). |
Scope flow through the system: ScopeLevel is a kernel primitive — it flows into PolicyRequest context, gossip topic routing, and compute task placement. The kernel never interprets what "Org" means; it just knows Org is wider than Cell but narrower than Federation.
App-Layer Jurisdiction
JurisdictionId (icn-identity/src/commons.rs:24) is the app-layer counterpart to ScopeLevel. It uses typed prefixes (coop:, community:, federation:, network:) to identify the specific organizational unit, while ScopeLevel provides the generic "how wide" dimension.
Key separation: The kernel uses ScopeLevel for routing/replication/capacity decisions. Apps use JurisdictionId to track membership affiliations. The meaning firewall prevents the kernel from knowing what coop:food-portland means.
1.3 Rights / Capabilities
Two Capability Systems
The codebase has two distinct capability systems serving different architectural layers:
1. Commons-layer MembershipCapability (icn-identity/src/commons.rs:529)
- 6 variants:
Vote | Propose | Transact | HoldOffice | AccessPrivate | Sponsor - Carried on
Affiliationrecords withinCommonsHolderRecord - Checked by
affiliation.has_capability() - No kernel enforcement — purely app-layer bookkeeping
2. Entity-layer MembershipCapability (icn-entity/src/membership.rs:648)
- 9 variants:
Vote | Propose | TreasuryAccess | Invite | ManageSubEntities | Sign | Configure | ViewSensitive | Custom(String) - Carried on
Membershiprecords in the entity model - Role-based defaults (Founder gets all; Observer gets none)
- Checked by
membership.has_capability() - No kernel enforcement — purely app-layer bookkeeping
3. Kernel Capability (icn-kernel-api/src/authz.rs:736)
Capabilitystruct: bearer token withresource,action,constraints,holder,issuer,expiration,signatureCapabilityEnginetrait:issue(),check(),delegate(),revoke()- This is the kernel enforcement layer — cryptographically signed, delegation-aware
- NOT yet wired into the app-layer membership capabilities
How Rights Are Actually Checked Today
- Gateway membership endpoints: Use
CommonsHolderStoreto checkMembershipCapability::HoldOfficebefore allowing admin operations (icn-gateway/src/api/membership/mod.rs:260) - Governance voting: Checks
MembershipCapability::VoteonMembershiprecords - PolicyOracle: Converts trust scores into
ConstraintSet(rate limits, max topics) — kernel enforces blindly - No scope-aware capability checking: The gateway does not ask "what capabilities does this DID have in this scope?"
1.4 Personhood Model
Layered design is implemented:
Layer 0 — PersonhoodAnchor (
icn-identity/src/personhood.rs:71):- Permanent anchor ID (survives key rotation)
- Multiple POP attestations with levels (Weak/Strong/Verified)
- Uniqueness proofs (VUI, biometric, social graph)
- Key rotation history with recovery signatures
- Status lifecycle: Active → Suspended → Revoked (with due process)
Layer 1 — CommonsHolderRecord (
icn-identity/src/commons.rs:116):- Links to Layer 0 via
anchor_id - Baseline rights (non-revocable by jurisdictions)
- Multi-affiliation tracking
- Display name
- Links to Layer 0 via
Steward Network (
icn-steward/src/):StewardProfile(profile.rs:14): status, jurisdiction tier, statsStewardStatus(profile.rs:86):Active | Suspended | Revoked | ProbationaryJurisdictionTier(profile.rs:123): Steward's operating scopeVuiRegistry(vui_registry.rs:16): Manages VUI registrations and uniqueness checksEnrollmentService(enrollment.rs:170): Full ceremony-based enrollment with config for challenge expiry, quorum requirementsRecoveryService(recovery.rs:154): Key recovery with evidence requirements
Personhood vs Membership IS enforced as a distinction: The CommonsHolderRecord explicitly separates baseline rights (attached to personhood, non-revocable) from Affiliation capabilities (attached to jurisdiction membership, revocable). The code comment at commons.rs:9-10 states: "A cooperative can revoke your membership. A cooperative cannot revoke your personhood."
1.5 Entity Model
EntityId (icn-entity/src/entity.rs)
Format: entity:icn:<type>:<identifier> with three type prefixes:
entity:icn:individual:<pubkey>— wraps a DIDentity:icn:cooperative:<name>— organizational entityentity:icn:federation:<name>— federation of entities
EntityId::from_did() creates individual entities; EntityId::to_did() returns Some(Did) for individuals, None for organizations.
Cooperative Types (icn-coop/src/types.rs:332)
CoopType: Worker | Consumer | Producer | MultiStakeholder | Platform | Housing | Credit
(7 variants)
Cooperative Lifecycle (icn-coop/src/types.rs:344)
CoopStatus: Forming → Active → Suspended → Dissolving → Dissolved
↑__________|
(5 states, with state machine at can_transition_to() on line 677)
Note: The issue mentions Merged | Split but these are NOT in the current code. Only 5 states.
Entity Relationships & Membership
Membership(icn-entity/src/membership.rs:23): Recursive membership (individuals in coops, coops in federations)MembershipRole(membership.rs:294): 12 variants including individual roles (Founder, Worker, Consumer) and entity roles (FederatedMember, AssociateMember, ObserverMember)MembershipStatus(membership.rs:453):Pending | Active | Suspended | Inactive | Resigned | Removed | ExpelledUnifiedMembershipStatus(membership.rs:535): Simplified state machine:Applicant → Pending → Active → Suspended → TerminatedCooperativeEntity(icn-entity/src/entity.rs): Entity with profile, relationships, kindEntityRelationship/RelationType(entity.rs): How entities relate to each otherAccountId(entity.rs):Did(Did) | Entity(EntityId)for backward compatibility
Community Types (icn-entity/src/entity.rs)
CommunityProfile exists as a profile variant on CooperativeEntity. Community types are defined in the EntityKind enum rather than a separate crate.
1.6 Gateway Endpoints
Identity Endpoints (icn-gateway/src/api/identity.rs)
| Method | Path | Returns |
|---|---|---|
| GET | /identity/resolve/{did} |
DID resolution with optional attestations |
| GET | /identity/health |
Identity service health check |
Commons Endpoints (icn-gateway/src/api/commons/mod.rs)
| Method | Path | Returns |
|---|---|---|
| GET | /commons/status |
CommonsStatusResponse — holder count, network stats |
| GET | /commons/holder/{did} |
HolderDetailResponse — full holder record with affiliations |
| POST | /commons/holder/{did}/affiliate |
Join a jurisdiction |
| PUT | /commons/holder/{did}/affiliate |
Update affiliation status |
| DELETE | /commons/holder/{did}/affiliate/{jurisdiction} |
Leave a jurisdiction |
Commons Anchor Endpoints (icn-gateway/src/api/commons/anchor.rs)
| Method | Path | Returns |
|---|---|---|
| GET | /commons/anchor/{id} |
AnchorDetailResponse — anchor with attestations |
| PUT | /commons/anchor/{id}/status |
Update anchor status |
| POST | /commons/anchor/{id}/attestation |
Add POP attestation |
Membership Endpoints (icn-gateway/src/api/membership/mod.rs)
| Method | Path | Returns |
|---|---|---|
| POST | /v1/membership/enroll |
Enroll holder with capabilities |
| GET | /v1/membership/{holder_id}/{jurisdiction_id} |
Get affiliation details |
| PUT | /v1/membership/{holder_id}/{jurisdiction_id}/status |
Update membership status |
| POST | /v1/membership/capability/grant |
Grant a capability to holder |
| POST | /v1/membership/capability/revoke |
Revoke a capability |
| POST | /v1/membership/revoke |
Revoke commons holder status |
| POST | /v1/membership/appeal |
File an appeal |
| GET | /v1/membership/appeal/{holder_id} |
Get appeal status |
| GET | /v1/membership/{holder_id}/all |
List all affiliations |
Constitutional Endpoints (icn-gateway/src/api/constitutional/)
voting.rs— Constitutional voting endpointsappeals_ui.rs— Appeals UI endpoints
Steward Endpoints (icn-gateway/src/api/steward/mod.rs)
- Steward profile management
- Enrollment ceremony coordination
SDIS Endpoints (icn-gateway/src/api/sdis/)
enrollment.rs— SDIS enrollment flowsimple_enrollment.rs— Simplified enrollmentverify.rs— Verification endpointsrecovery.rs— Key recoveryqr.rs— QR code generationephemeral.rs— Ephemeral sessions
Trust Endpoints (icn-gateway/src/api/trust.rs)
- Trust score queries
Entity Endpoints (icn-gateway/src/api/entity.rs)
- Entity CRUD operations
2. Critical Questions
Can a user see their rights in the current system?
Partially YES. Evidence:
GET /v1/membership/{holder_id}/allreturns all affiliations with capabilitiesCommonsHolderRecord.baseline_rightsexposes the 6 commons rightsAffiliation.capabilitieslists per-jurisdiction capabilitiesGET /commons/holder/{did}returns full holder record with affiliations and rights
But NO for: There is no single "what can I do right now?" endpoint. A user would need to call multiple endpoints and correlate: commons holder record + each affiliation + trust score + kernel constraint set. No "rights dashboard" endpoint exists.
Can a user know "where am I" (scope/jurisdiction)?
Partially YES. Evidence:
CommonsHolderRecord.affiliations[]tracks all jurisdiction membershipsJurisdictionIdtypes (coop:,community:,federation:,network:) identify locationScopeLevelhierarchy exists in the kernel- Gateway commons endpoints expose affiliation data
But NO for: There is no "current scope context" concept. The API doesn't return "you are currently operating in scope X with these constraints." ScopeLevel is not exposed in gateway responses. A user cannot see "I'm in coop:food-portland at scope level Org."
Is "personhood vs membership" enforced as a distinction?
YES. Strong evidence:
CommonsRightsare structurally separate fromMembershipCapabilityCommonsRights::restricted()still guaranteesMinimalFuelFloor,DueProcess,ExitFreelyeven when other rights are restrictedCommonsHolderRecord.has_right()checksis_active()first but the rights struct itself is not cleared on membership revocation- Code comment: "A cooperative can revoke your membership. A cooperative cannot revoke your personhood."
Affiliation.ban()clears capabilities and roles but doesn't touchCommonsHolderRecord.baseline_rights
What rights survive org departure?
Evidenced in the code:
- Always survive (baseline rights on
CommonsHolderRecord):VoteInCommons— commons-level governance participationPetition— right to petition for constitutional changesMinimalFuelFloor— guaranteed compute fuel for civic participationDueProcess— right to due process before suspensionExitFreely— right to leave any jurisdictionAuditAccess— right to audit public records
- Lost on departure: All
MembershipCapabilityvariants attached to the specificAffiliation(Vote, Propose, Transact, HoldOffice, AccessPrivate, Sponsor) - Retained:
PersonhoodAnchorand all POP attestations survive membership departure - Not addressed: Data portability (ledger history, trust edges) on departure — no export mechanism exists
Is scope exposed in the gateway API?
NO. ScopeLevel is not returned by any gateway endpoint. The kernel scope primitive is completely invisible to API consumers. JurisdictionId is exposed (via affiliations), but the scope level (Local/Cell/Org/Federation/Commons) is not surfaced.
3. Gap Analysis
Gap 1: No "rights dashboard" endpoint
- User story blocked: "As a member, I want to see all my rights and capabilities in one place so I can understand what I can do."
- Missing primitive OR surface: A composite endpoint that aggregates: commons rights + all affiliation capabilities + trust-derived constraints + active capability tokens
- Where it belongs: Gateway (aggregation layer)
- Receipt expectation: No receipts needed — this is a read-only query
- Phase: 0
Gap 2: Scope not exposed in gateway API
- User story blocked: "As a user, I want to know what scope level I'm operating in and what law applies here."
- Missing primitive OR surface:
ScopeLevelis a kernel primitive but has no gateway representation. No endpoint returns scope context. - Where it belongs: Gateway (expose existing kernel data) + UI (scope context banner)
- Receipt expectation: N/A — metadata, not an action
- Phase: 0
Gap 3: Two capability systems not unified
- User story blocked: "As a developer, I need one consistent way to check 'can this DID do X in scope Y?'"
- Missing primitive OR surface: The commons-layer
MembershipCapability(6 variants) and entity-layerMembershipCapability(9 variants) are separate enums with overlapping names but different semantics. Neither is wired to the kernelCapabilityEngine. - Where it belongs: App layer (unify) + kernel (wire to
CapabilityEngine) - Receipt expectation: Capability grants/revocations should produce audit receipts
- Phase: 1
Gap 4: No scope-aware capability resolution
- User story blocked: "As a system, I need to answer: given DID X in scope Y, what specific capabilities apply?"
- Missing primitive OR surface:
PolicyOracleevaluates per-DID but does not incorporate scope.PolicyContext.namespaceexists but is unused for scope-aware resolution. - Where it belongs: App layer (oracle implementation) —
PolicyContext.namespacecould carry scope - Receipt expectation: Capability resolution should be logged for audit
- Phase: 1
Gap 5: No data portability on departure
- User story blocked: "As a departing member, I want to export my transaction history, trust edges, and receipts before I leave."
- Missing primitive OR surface: No export endpoint. Ledger entries are immutable but not extractable per-member. Trust edges have no export format.
- Where it belongs: Gateway (export endpoints) + kernel (data extraction queries)
- Receipt expectation: Departure should produce an exit receipt chain: membership termination → data export acknowledgment → exit confirmation
- Phase: 1
Gap 6: No "what law applies here?" surface
- User story blocked: "As a member, I want to know what governance rules (charter, bylaws, voting thresholds) apply in my current scope."
- Missing primitive OR surface:
Cooperative.charter_idandCooperative.bylawsexist but are not exposed in a user-friendly way. No endpoint returns "active governance policies for scope X." - Where it belongs: Gateway (policy reference endpoint) + UI (scope context)
- Receipt expectation: Policy changes should produce governance receipts (already partially handled by governance proposals)
- Phase: 0
Gap 7: Multi-org affiliation home screen data missing
- User story blocked: "As a member of multiple coops and communities, I want a home screen showing all my affiliations, roles, and standings."
- Missing primitive OR surface:
GET /v1/membership/{holder_id}/allexists but returns raw affiliations. No aggregated "home view" with enriched org metadata, standings, and active proposals. - Where it belongs: Gateway (aggregation endpoint) + UI (home screen)
- Receipt expectation: N/A — read-only
- Phase: 1
4. Phase 0 Tasks (3-5 tasks)
Task P0-1: Add "rights summary" gateway endpoint
Description: Create GET /v1/rights/{did} that returns a composite view of all rights for a DID:
- Commons baseline rights (from
CommonsHolderRecord.baseline_rights) - Per-jurisdiction capabilities (from each
Affiliation.capabilities) - Trust-derived constraint set (from
TrustPolicyOracleevaluation) - Active kernel capabilities (from
CapabilityEngineif any)
Files to touch:
icn-gateway/src/api/— newrights.rsmoduleicn-gateway/src/server.rs— register new routeicn-gateway/src/commons_mgr.rs— add rights aggregation method
Validation step: curl /v1/rights/{test-did} returns JSON with baseline_rights, affiliation_capabilities, trust_constraints sections.
Task P0-2: Expose scope level in gateway API responses
Description: Add scope_level field to relevant gateway responses. When a request carries a jurisdiction context, include the corresponding ScopeLevel in the response.
Files to touch:
icn-gateway/src/api/commons/mod.rs— addscope_leveltoHolderDetailResponseandAffiliationResponseicn-gateway/src/api/membership/mod.rs— add scope context to membership responsesicn-gateway/src/models.rs— add scope-level response types
Validation step: GET /commons/holder/{did} response includes scope_level for each affiliation.
Task P0-3: Add "what law applies here?" policy reference endpoint
Description: Create GET /v1/governance/policies/{jurisdiction_id} that returns:
- Charter ID and status (from
Cooperative.charter_id) - Active bylaws (from
Cooperative.bylaws) - Governance domain (from
Cooperative.governance_domain) - Voting thresholds and methods (from governance config)
- Rate limits and constraint values that apply
Files to touch:
icn-gateway/src/api/governance.rs— add policy reference endpointicn-gateway/src/governance_mgr.rs— add policy aggregation query
Validation step: curl /v1/governance/policies/coop:food-portland returns charter, bylaws, and active constraint parameters.
Task P0-4: Capability set exposure endpoint
Description: Create GET /v1/capabilities/{did}/{jurisdiction_id} that answers "what can this DID do in this jurisdiction?" by resolving:
- Membership status and role
- MembershipCapability list (both commons-layer and entity-layer)
- Trust score and derived constraints
- Any active delegation chains
Files to touch:
icn-gateway/src/api/membership/mod.rs— add capability resolution endpointicn-gateway/src/commons_mgr.rs— add scope-aware capability query
Validation step: curl /v1/capabilities/{did}/coop:test returns { "can_vote": true, "can_propose": true, "trust_class": "Partner", "rate_limit": 100 }.
Task P0-5: Document constitutional invariants (complete Issue #1011)
Description: Complete the "Constitutional Genesis" documentation (Wave 5, Issue #1011) that categorizes hard invariants (immutable) vs meta-invariants (governable). This provides the "what law applies" reference for the system.
Files to touch:
docs/genesis.md(new) ordocs/ARCHITECTURE.md(new section)- Reference
icn-kernel-api/src/authz.rsfor enforcement mechanisms - Reference
apps/trust/src/oracle.rsfor meta-invariant sources
Validation step: Document exists, reviewed, and linked from ARCHITECTURE.md. Contains hard/meta invariant table with enforcement locations.
5. Phase 1 Tasks (3-5 tasks)
Task P1-1: Unify capability systems
Description: Merge the two MembershipCapability enums into one authoritative definition. The entity-layer enum (icn-entity/src/membership.rs:648) has more variants and should be the canonical source. The commons-layer enum (icn-identity/src/commons.rs:529) should re-export or alias it.
Files to touch:
icn-identity/src/commons.rs— replace 6-variant enum with re-export from icn-entityicn-entity/src/membership.rs— ensure all 9+ variants cover both systemsicn-gateway/src/api/membership/mod.rs— updateparse_capability()for unified set- All tests referencing either enum
Validation step: Single MembershipCapability definition; no two enums with the same name. All existing tests pass.
Task P1-2: Wire MembershipCapability to kernel CapabilityEngine
Description: Bridge the app-layer capability grants to kernel-layer CapabilityEngine. When a membership grants MembershipCapability::Vote, it should produce a signed Capability token the kernel can verify.
Files to touch:
icn-kernel-api/src/authz.rs— implementCapabilityEnginetrait- App layer (future
apps/membership) — produceCapabilitytokens on grant icn-gateway/src/api/membership/mod.rs— issue capability tokens on enroll
Validation step: grant_capability() produces a cryptographically signed Capability token that CapabilityEngine::check() validates.
Task P1-3: Multi-org affiliations home screen data model
Description: Create a rich "home" endpoint that aggregates across all affiliations for a DID: org name + type + role + standing + active proposals + trust score + pending notifications.
Files to touch:
icn-gateway/src/api/— newhome.rsor extendcommons/mod.rsicn-gateway/src/commons_mgr.rs— aggregation queryicn-gateway/src/governance_mgr.rs— pending proposals for user
Validation step: GET /v1/home/{did} returns enriched list of all org memberships with metadata.
Task P1-4: Data portability / exit rights
Description: Implement member departure data export: transaction history, trust edge export, receipt chain export. This fulfills the ExitFreely right with practical data portability.
Files to touch:
icn-gateway/src/api/— newexport.rsendpointicn-ledger/src/— per-member transaction extractionicn-trust/src/— trust edge export formaticn-gateway/src/receipt_store.rs— receipt export
Validation step: POST /v1/export/{did} produces a downloadable archive with transaction history, trust edges, and receipts. Exit receipt is generated.
Task P1-5: Scope-aware PolicyOracle evaluation
Description: Extend PolicyOracle::evaluate() to incorporate scope. Use PolicyContext.namespace to carry JurisdictionId, and have oracles return scope-specific constraint sets.
Files to touch:
apps/trust/src/oracle.rs— check namespace/scope in evaluationicn-kernel-api/src/authz.rs— documentPolicyContext.namespacefor scope usage- Gateway middleware — populate
PolicyContext.namespacefrom request context
Validation step: Same DID gets different constraint sets when evaluated in coop:A vs coop:B.
6. Relevant Open Issues
| Issue | Title | Recommendation |
|---|---|---|
| #1147 | [EPIC] Vertical Slice: Identity → Governance → Compute → Receipts → Audit | Keep — directly tracks the end-to-end rights flow this analysis supports. Phase 0 tasks feed into this epic's Track A (kernel/app separation). |
| #1137 | [A3] Phase 5: Membership Consolidation | Keep — merging icn-entity + icn-coop + icn-community into apps/membership would be the natural location for the unified capability system (Task P1-1). |
| #1139 | [B1] Treasury-Coop Integration | Keep — treasury access is a capability (TreasuryAccess) that needs to be wired into the rights system. |
| #1011 | [Wave 5] Constitutional Genesis Documentation | Keep and prioritize — directly maps to Task P0-5. The hard/meta invariant categorization is foundational for the "what law applies here?" surface. |
| #1090 | [PR8c] Fallback atomicity via CoopActor single-writer | Keep — treasury nonce enforcement is a capability-gated operation. |