- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
26 KiB
GRU M00 Diamond — Detailed Review: Gaps, Wire-Ins, and Recommendations
Purpose: Structured review of the GRU M00 Diamond (ERC-2535) Token Factory architecture against the current codebase and docs. Covers missing components, functional wire-ins to complete, naming/alignment gaps, and actionable recommendations.
References: GRU_M00_DIAMOND_FACET_MAP.md, gru-docs/contracts/README.md (GRU docs; same repo as GRU-Official-Docs-Monetary-Policies when cloned standalone), smom-dbis-138, VAULT_SYSTEM_MASTER_TECHNICAL_PLAN.md.
1. Executive Summary
| Area | Status | Summary |
|---|---|---|
| Spec vs implementation | Gap | Facet Map describes M00 Diamond + GRUStorage + PolicyRouter + gates; repo has GRC-2535 Diamond (different facets) and standalone UniversalAssetRegistry/TokenFactory/VaultFactory — no single M00 Diamond yet. |
| Missing components | Multiple | Institutional spec doc, GRUStorage layout, PolicyRouter + four gates (on-chain), Token Factory facets (AssetRegistry, MarketFactory, MintBurn, InterestRate, BridgeWrap, DWIN), Standards facets (IPSAS, IFRS, ISO20022, i18n, GovernanceLevel), minimum ship stubs. |
| Wire-ins | Incomplete | No Diamond → Token Factory wiring; no PolicyRouter → gate calls; no governance level bitmask → enforcement; off-chain ComplianceGate (dbis_core) not mirrored on-chain. |
| Naming alignment | Gap | Spec grammar uses a<ISO>, d<ISO>; deployed/specified tokens use ac*, vdc*/sdc* — need explicit mapping or doc alignment. |
2. Missing Components
2.1 Documentation
| Item | Description | Recommendation |
|---|---|---|
| GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md | Full §1–§8 institutional architecture spec (Diamond topology, storage, facets, governance, markets, W rules, Pattern A/B, minimum checklist, token model A/B/C). | Done: GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md created; token model A and Pattern A locked; GRC vs M00 evolution note added. |
| Token model decision | Facet Map had “[ A | B | C ]”; locked choice was missing. | Done: Institutional spec §8 locks Token model A; Facet Map updated to “A (locked).” |
| Pattern A vs B | Target pattern was not stated. | Done: Institutional spec §6 locks Target: Pattern A; Facet Map “Target pattern” line added. |
2.2 Storage (GRUStorage)
| Domain | Facet Map / Spec | Current State | Gap |
|---|---|---|---|
| Governance & roles | DAO/Council/Guardian, upgrade admin, timelock, policy controllers | GRCStorage has Gov (timelock, quorum, proposals), Access (role bits), no DAO/Council/Guardian names. | Add GRUStorage namespace constants and structs for governance; align or migrate from GRCStorage if M00 supersedes GRC. |
| Token Factory Registry | assetId → (c,a,d) addresses; symbol → assetId; per-asset config | UniversalAssetRegistry has token → UniversalAsset (type, compliance, metadata); no assetId, no c/a/d triple per asset. | Define GRUStorage.TokenFactoryRegistry (or equivalent) with assetId, symbol→assetId, and c/a/d address triple; or document migration path from UniversalAssetRegistry. |
| Accounting / Ledger | Journal entries, CoA, cost centers, reserve attestations, policy hashes | Not in Diamond; OMNL/Fineract off-chain. No on-chain journal/CoA structs. | Add GRUStorage.Accounting placeholder structs (journal entry, CoA slot, attestation hashes) for AccountingGateFacet stub. |
| Compliance & Identity | KYC/AML allowlists, jurisdiction, sanctions, travel rule, audit roots | ComplianceGuard (iso4217w) validates mint/reserve only; no allowlist/jurisdiction/sanctions in contracts. dbis_core has ComplianceGateService (sanctions/AML). | Add GRUStorage.Compliance placeholder (allowlist/denylist, jurisdiction tags); wire ComplianceGate to it or to external oracle. |
| ISO-20022 Message Vault | Schema registry, in/out logs, canonicalization hashes, correlation IDs | SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY defines canonical struct; no on-chain vault or log storage. | Add GRUStorage.ISO20022Vault (or event-only + off-chain index); implement MessagingGate.logISO20022. |
| i18n Registry | Locale packs, translation keys, disclosure templates | Not present in any contract. | Add GRUStorage.i18n placeholder (locale keys, hash pointers); i18nFacet stub reads from it. |
| Expandable Standards Registry | standardId → moduleConfig (enabled, version, validators, constraints, pointers) | Not present. | Add GRUStorage.StandardsRegistry; StandardsRegistryFacet activate/deactivate modules and enforce “required modules per governance level.” |
2.3 Core Diamond Facets
| Facet | Spec | Current State | Gap |
|---|---|---|---|
| DiamondCutFacet | Upgrade mechanism | GrcDiamond has diamondCut inline; no separate facet. | OK if M00 keeps cut in core; else extract to DiamondCutFacet. |
| DiamondLoupeFacet | Introspection | GrcDiamond has loupe inline. | Same as above. |
| OwnershipFacet / GovernanceFacet | Owner, timelock, upgrade approval | GrcDiamond has owner; GovernanceFacet has proposeCut/queue/execute. | Alias or merge into single “GovernanceFacet” for M00; ensure timelock and upgrade approval workflow documented. |
| PauseFacet | Global and per-selector pause | PauseFacet exists in gru-docs; GRCStorage has PauseState. | Keep; ensure M00 uses same slot namespace if migrating from GRC. |
2.4 Token Factory Facets (all missing as Diamond facets)
| Facet | Spec | Current State | Gap |
|---|---|---|---|
| AssetRegistryFacet | Asset definitions, W semantics, assetId hash | UniversalAssetRegistry (standalone) has asset types and metadata; iso4217w TokenFactory enforces <CCC>W. No deterministic assetId or c/a/d symbol grammar in one place. | Implement as facet (or wrap UniversalAssetRegistry behind facet); add symbol→assetId and W-before/W-after parsing per Facet Map grammar. |
| MarketFactoryFacet | Creates market per ISO; emits c/a/d token contracts | VaultFactory creates vault + DepositToken + DebtToken per asset; TokenFactory138 is stub; CompliantUSDC/USDT and CompliantFiatToken are separate contracts. | Either (1) MarketFactoryFacet deploys proxy/minimal clones for c/a/d, or (2) MarketFactoryFacet registers existing external c/a/d addresses in GRUStorage; document vs VaultFactory/TokenFactory138. |
| MintBurnFacet | Mint/burn rules, reserve gating, supply caps, emergency locks | ComplianceGuard validates mint; individual token contracts have mint/burn. No single MintBurnFacet. | Implement MintBurnFacet calling ReserveGate and token contracts or internal ledger; centralize caps and emergency locks in storage. |
| InterestRateFacet | Aave-style index math, rate models, accrual | Not in gru-docs or smom-dbis-138 as a facet. DepositToken/DebtToken do not implement interest indices. | Add InterestRateFacet (stub or full) with index storage and rate model hooks. |
| BridgeWrapFacet | W-before-ISO (wrapped bridge), escrow, bridge operators | Bridge contracts (GRUCCIPBridge, ISO4217WCCIPBridge, etc.) are standalone; no “BridgeWrapFacet” in Diamond. | Add facet that delegates to bridge contracts or holds bridge operator config in GRUStorage. |
| DWINFacet | W-after-T/C (D-WIN), denomination, windowing | Not present. | Add DWINFacet stub with storage for denomination/windowing rules. |
2.5 Standards / Compliance Facets (all missing or stub-only)
| Facet | Spec | Current State | Gap |
|---|---|---|---|
| IPSASFacet | GRU ledger ↔ IPSAS reporting, fund accounting | OMNL has IPSAS in Fineract/off-chain journal matrix; no on-chain facet. | Add IPSASFacet stub; document mapping from GRUStorage ledger to IPSAS classifications. |
| IFRSUSGAAPFacet | Revenue recognition, lease/contract hooks, impairment | Not present. | Add stub; document future hooks. |
| ISO20022Facet | pacs/camt builders, dictionary, settlement correlation | Methodology doc and runbook exist; no on-chain message builder facet. | Add ISO20022Facet stub; emit or store canonical message hashes/correlation IDs per MessagingGate. |
| i18nFacet | Locale packs, translation keys, disclosure templates | Not present. | Add stub; read from GRUStorage.i18n. |
| GovernanceLevelFacet | Policy levels 0..N, bitmask, routes enforcement | Not present. GRCStorage has no policy level or bitmask. | Add GovernanceLevelFacet; add GRUStorage policy level and bitmask; document “required modules per level.” |
2.6 Policy Layer (Router + Gates)
| Component | Spec | Current State | Gap |
|---|---|---|---|
| PolicyRouterFacet | Calls ComplianceGate, AccountingGate, MessagingGate, ReserveGate | Not present in contracts. | Implement PolicyRouterFacet: e.g. checkTransfer → ComplianceGate, postJournal → AccountingGate, logISO20022 → MessagingGate, checkBacking → ReserveGate; gate addresses from storage or facet. |
| ComplianceGate | checkTransfer (KYC/AML, sanctions, jurisdiction) | dbis_core ComplianceGateService (off-chain); ComplianceGuard (on-chain) only validates mint/reserve. | Add ComplianceGateFacet (stub) with allowlist/denylist and jurisdiction placeholders; optionally call off-chain or oracle. |
| AccountingGate | postJournal (ledger, CoA) | No on-chain gate. | Add AccountingGateFacet stub; write to GRUStorage.Accounting or emit events. |
| MessagingGate | logISO20022 (message log, correlation IDs) | No on-chain gate. | Add MessagingGateFacet stub; write to GRUStorage.ISO20022Vault or emit events. |
| ReserveGate | checkBacking (reserve proofs, attestations) | ComplianceGuard validates reserve for mint; no generic “checkBacking” gate. | Add ReserveGateFacet stub; delegate to existing reserve/oracle logic or attestation hashes in storage. |
2.7 Minimum Ship List (Stubs)
| Item | Spec | Current State | Gap |
|---|---|---|---|
| AppStorage skeleton | Module registry, policy bitmask, ledger/ISO20022/i18n structs | GRCStorage has different namespaces; no GRUStorage. | Define GRUStorage (or extend GRCStorage with reserved namespaces) with all 7 domains + policy bitmask + module registry. |
| GovernanceFacet | RBAC, timelock, upgrade approval | Exists in gru-docs (GovernanceFacet). | Verify it fits M00; add “policy controllers per module” if required. |
| PolicyRouterFacet | Empty gates callable, events | Missing. | Implement as above. |
| TokenFactoryFacet | Register assets, deploy or ledger tokens | TokenFactory138 is stub; no Diamond facet. | Implement TokenFactoryFacet (or unify AssetRegistry + MarketFactory) to register assets and create/link c/a/d. |
| ComplianceGateFacet (stub) | Allowlist, jurisdiction placeholders | Missing. | Add stub. |
| AccountingGateFacet (stub) | Journal, CoA placeholders | Missing. | Add stub. |
| StandardsRegistryFacet | Activate/deactivate modules, enforce required per level | Missing. | Add; wire to GRUStorage.StandardsRegistry and GovernanceLevelFacet. |
3. Functional Wire-Ins to Complete
3.1 Diamond ↔ Token Factory
- Current: No single Diamond owns token creation. VaultFactory, TokenFactory (iso4217w), CompliantFiatToken deployments are independent.
- Target: M00 Diamond exposes AssetRegistryFacet + MarketFactoryFacet (or TokenFactoryFacet); all c/a/d registration and creation go through Diamond.
- Wire-in: (1) Deploy M00 Diamond with GRUStorage; (2) Add AssetRegistryFacet + MarketFactoryFacet (or TokenFactoryFacet); (3) MarketFactoryFacet either deploys new c/a/d contracts or registers existing ones in GRUStorage; (4) All mint/burn/transfer that must be gated go through Diamond (or token contracts call back into Diamond for gate checks).
c GRU integration (implemented):* All c* (compliant) tokens are integrated with the GRU ERC-2535 facet path: (1) UniversalAssetRegistry — register each c* via registerGRUCompliantAsset() (AssetType.GRU, no timelock); (2) GRUCCIPBridge and PoolManager read the registry and accept GRU assets; (3) GRUAssetRegistryFacet delegates to UniversalAssetRegistry so the M00 Diamond can expose the same registry when the facet is attached. Run RegisterGRUCompliantTokens.s.sol after deploying c* tokens; run GRUCompliantTokensRegistryTest (integration tests) before deployments. See DEPLOYMENT_ORDER_OF_OPERATIONS § Phase 2.4.
3.2 PolicyRouter → Gates
- Current: No PolicyRouter; no on-chain gates except ComplianceGuard (mint-only).
- Target: Every transfer (or mint/burn) that is policy-sensitive calls PolicyRouter.checkTransfer (or equivalent); PolicyRouter reads GovernanceLevelFacet level and calls ComplianceGate, AccountingGate, MessagingGate, ReserveGate as required.
- Wire-in: (1) Implement PolicyRouterFacet with
checkTransfer,postJournal,logISO20022,checkBacking; (2) Implement each gate as facet or internal module; (3) Token contracts or Diamond entry points call PolicyRouter before state changes; (4) GovernanceLevelFacet exposes level/bitmask; PolicyRouter reads it and skips or enforces each gate.
3.3 Governance Level → Enforcement
- Current: No governance level or bitmask in storage; no routing by level.
- Target: Governance levels 0–5 (per Facet Map); level stored in GRUStorage; GovernanceLevelFacet and PolicyRouter use it to decide which gates to call and with what strictness.
- Wire-in: (1) Add
governanceLevel(and optionalpolicyBitmask) to GRUStorage; (2) GovernanceLevelFacet get/set level (restricted); (3) PolicyRouter and gate stubs branch on level; (4) Document level semantics (0–5) in Facet Map and runbooks.
3.4 Off-Chain vs On-Chain Compliance
- Current: dbis_core ComplianceGateService does sanctions/AML off-chain; on-chain ComplianceGuard only validates mint/reserve for ISO4217W.
- Target: Clear split: which checks are on-chain (allowlist/denylist, jurisdiction tags) vs off-chain (full sanctions/AML); on-chain ComplianceGateFacet calls external adapter or stores results.
- Wire-in: (1) Define interface for “compliance result” (allowed/denied + reason); (2) ComplianceGateFacet stub stores allowlist/denylist and jurisdiction in GRUStorage; (3) Optionally add “oracle” or relayer that posts off-chain ComplianceGateService result on-chain for PolicyRouter to read.
3.5 ISO-20022 and MessagingGate
- Current: Canonical message format and methodology doc exist; no on-chain message log or correlation.
- Target: MessagingGate.logISO20022 stores or emits message hash + correlation ID; ISO20022Facet can build/reference pacs/camt payloads.
- Wire-in: (1) Add GRUStorage.ISO20022Vault (or event-only design); (2) MessagingGateFacet accepts canonical struct hash + correlationId; (3) Emit event and/or write to storage; (4) Link to SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY and MULTI_CHAIN_EXECUTION_ISO20022_EMONEY.
3.6 Reserve and Attestation
- Current: ComplianceGuard validates reserve for mint; PoR in GRCStorage (AuditPeriod); no generic “checkBacking” for all operations.
- Target: ReserveGate.checkBacking(assetId, amount) used by PolicyRouter before mint/transfer where level requires; attestation hashes in GRUStorage.
- Wire-in: (1) ReserveGateFacet stub checks GRUStorage or external oracle for reserve/attestation; (2) MintBurnFacet (or token contracts) call ReserveGate when level ≥ 2; (3) Document attestation format and who posts hashes.
4. Naming and Alignment Gaps
4.1 Symbol Grammar: a/d vs ac/vdc/sdc
- Facet Map / institutional spec: Canonical grammar uses a<ISO><T|C> (asset) and d<ISO><T|C> (debt). Examples: aUSDC, dUSDC, aEURCT, dWUSDT.
- TOKEN_SCOPE_GRU and deployment: Tokens are named ac* (e.g. acUSDC, acUSDT) and vdc*/sdc* (e.g. vdcUSDC, sdcUSDC). These are Aave-style “deposit” and “debt” tokens.
- Gap: “a” and “d” in the spec are logical roles; “ac” and “vdc/sdc” are implementation names. Either (1) document that a = ac (asset/deposit) and d = vdc/sdc (debt) and keep both nomenclatures, or (2) rename in spec to ac/d for consistency with deployed tokens.
- Recommendation: Add a short subsection in Facet Map or TOKEN_SCOPE_GRU: “Canonical grammar: a (asset) ↔ ac (DepositToken), d (debt) ↔ vdc / sdc (DebtToken). Symbol in registry may be aUSDC or acUSDC; both refer to same asset token type.”
4.2 GRC-2535 vs M00 Diamond
- GRC-2535 (gru-docs): GrcDiamond + GRCStorage + Monetary, Triangulation, Index, Bond, Audit, Governance, Access, Pause, ComplianceFacet (stub), OracleAggregatorFacet (stub). No Token Factory, no PolicyRouter, no GRUStorage as in Facet Map.
- M00 Diamond (Facet Map): Single Diamond with GRUStorage, Token Factory facets, Standards facets, PolicyRouter + gates.
- Gap: Two different “Diamond” designs. Migration path or relationship is undefined.
- Recommendation: Document in institutional spec or a “GRU Diamond Evolution” note: “GRC-2535 is the current GRU Diamond (monetary, bond, index, audit). M00 Diamond extends or replaces it with Token Factory + GRUStorage + policy gates. Decision: migrate GRC → M00 (same contract, new facets + storage) vs deploy M00 as new Diamond and deprecate GRC.”
4.3 UniversalAssetRegistry vs AssetRegistryFacet
- UniversalAssetRegistry (smom-dbis-138): Central registry for asset types (GRU, ISO4217W, Commodity, etc.); used by bridges, PoolManager, GovernanceController, TokenlistGovernanceSync. Not a Diamond facet.
- AssetRegistryFacet (spec): Asset definitions, W semantics, assetId, symbol→assetId inside M00 Diamond.
- Gap: Duplication or migration path unclear.
- Recommendation: (1) If M00 is new deployment: AssetRegistryFacet could wrap or replace UniversalAssetRegistry (Diamond holds registry state or delegates to external registry). (2) Document “UniversalAssetRegistry remains source of truth for bridges until M00 is deployed; then migrate or mirror to GRUStorage.TokenFactoryRegistry.”
5. Recommendations and Suggestions
5.1 High priority
- Create GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md — Paste the full §1–§8 institutional spec; link from Facet Map. This is the single hand-off doc for Solidity engineers.
- Lock token model (A/B/C) — Document in spec or Facet Map which of (A) separate ERC-20, (B) internal ledger, (C) hybrid is the target; update Facet Map “Token model” line accordingly.
- Define GRUStorage layout — One Solidity library or doc with namespaced structs and slots for all 7 domains + policy bitmask + standards registry. Reserve namespaces for future facets to avoid collision.
- Implement minimum ship list — PolicyRouterFacet + four gate stubs (Compliance, Accounting, Messaging, Reserve), StandardsRegistryFacet, GovernanceLevelFacet (level + bitmask), and TokenFactoryFacet (or AssetRegistry + MarketFactory) that register assets and optionally deploy/link c/a/d. Start with stubs that revert or no-op with events.
- Wire PolicyRouter to governance level — PolicyRouter reads level from GovernanceLevelFacet; for each transfer/mint path, call only the gates required for that level; document in runbook.
5.2 Medium priority
- Align symbol grammar with TOKEN_SCOPE_GRU — Add a↔ac, d↔vdc/sdc mapping and keep single source of truth for “canonical symbol” (either Facet Map or TOKEN_SCOPE_GRU with cross-link).
- Document GRC-2535 → M00 path — One-page “Diamond evolution” or “M00 migration”: whether M00 is new Diamond or upgrade of GrcDiamond; which facets/storage are reused vs new.
- Reserve GRUStorage namespaces — Even if a domain is stub-only, reserve its slot (keccak256 namespace) so future facets can extend without migration.
- ISO-20022 on-chain footprint — Decide event-only vs storage for message log; implement MessagingGate.logISO20022 and optional ISO20022Facet stub.
- Off-chain ComplianceGate integration — Define how dbis_core ComplianceGateService result is consumed on-chain (relayer, oracle, or keep transfer checks off-chain and only log).
5.3 Lower priority / optional
- InterestRateFacet and DWINFacet — Stub with storage for rate indices and D-WIN rules; full implementation when a/d token behavior is finalized.
- IPSASFacet / IFRSUSGAAPFacet — Stub and mapping doc from GRU ledger codes to IPSAS/IFRS; full logic later.
- i18nFacet — Stub reading locale/key hashes from GRUStorage; UI/legal can consume from indexer or API.
- Pattern B (facet packs per asset) — Only if a flagship USD/EUR market needs dedicated rate/compliance/settlement logic; document when and how.
6. Checklist for “Spine” Completion
Use this as a quick gate for “deployable spine” per institutional spec §7.
| # | Item | Done |
|---|---|---|
| 1 | AppStorage skeleton (module registry, policy bitmask, ledger/ISO20022/i18n structs) | ☐ |
| 2 | GovernanceFacet (RBAC, timelock, upgrade approval) | ☐ (exists in GRC; verify for M00) |
| 3 | PolicyRouterFacet (callable gates, events) | ☐ |
| 4 | TokenFactoryFacet or AssetRegistry + MarketFactory (register assets, deploy or ledger c/a/d) | ☐ |
| 5 | ComplianceGateFacet (stub: allowlist, jurisdiction) | ☐ |
| 6 | AccountingGateFacet (stub: journal, CoA) | ☐ |
| 7 | StandardsRegistryFacet (activate/deactivate, require per level) | ☐ |
| 8 | GovernanceLevelFacet (level 0..N, bitmask) | ☐ |
| 9 | GRUStorage namespaces defined and reserved | ☐ |
| 10 | PolicyRouter wired to level and gates | ☐ |
| 11 | Institutional spec doc created and linked | ☑ (GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md) |
| 12 | Token model A/B/C locked and documented | ☑ (Token model A, Pattern A in institutional spec §8, §6) |
| 13 | Testing and verification (post-deploy) | ☐ — Run GRU_M00_DIAMOND_DEPLOYMENT_RUNBOOK.md §6 (loupe, governance level, PolicyRouter, storage layout, upgrade, events). Add Forge/Hardhat tests when spine is implemented. |
7. Additional Recommendations, Suggestions, and Gaps
Beyond §2–§6 and the spine checklist, the following are additional recommendations, suggestions, or gaps.
7.1 Runbooks and deployment
| Item | Gap | Recommendation |
|---|---|---|
| M00 deployment runbook | Institutional spec said “Document the chosen path in the deployment runbook”; no runbook existed. | Done: GRU_M00_DIAMOND_DEPLOYMENT_RUNBOOK.md — Option A (new Diamond), Option B (migrate GRC→M00), target chain, CREATE2, initial facet order, testing §6. |
| Chain and CREATE2 | M00 Diamond spec did not state target chain(s) or CREATE2. | Done: Runbook §1 and institutional spec "Deployment target chain and CREATE2" state: primary chain 138, then mainnet/651940; CREATE2 when same-address parity required. |
7.2 Cross-doc and repo alignment
| Item | Gap | Recommendation |
|---|---|---|
| TOKEN_SCOPE_GRU ↔ Facet Map | Facet Map §5.5 links to TOKEN_SCOPE_GRU; TOKEN_SCOPE_GRU did not link back. | Done: TOKEN_SCOPE_GRU §8 has “Canonical symbol grammar” note with link to Facet Map §5. |
| VAULT_SYSTEM_MASTER_TECHNICAL_PLAN | VAULT_SYSTEM mentioned M00 but did not link to M00 docs. | Done: VAULT_SYSTEM §3 (GRU Assets) links to institutional spec and Facet Map. |
| REQUIRED_FIXES_UPDATES_GAPS | Repo-wide gaps doc did not list GRU M00 Diamond spine. | Done: §9 includes “GRU M00 Diamond spine (optional)” with links to institutional spec §7, Review §6 checklist, deployment runbook. |
7.3 Defaults and interfaces
| Item | Gap | Recommendation |
|---|---|---|
| Default governance level | Facet Map defined levels 0–5 but did not state default at deployment. | Done: Institutional spec “Deployment target chain and CREATE2” and runbook §2 state default level 0; Facet Map §4 references runbook and spec. |
| PolicyRouter and gate events | Spec said gates “emit events” but no standard event names/signatures were defined. | Done: Institutional spec Appendix: PolicyRouter and gate event signatures defines TransferChecked, JournalPosted, MessageLogged, BackingChecked, GovernanceLevelSet. Runbook §6 references the appendix. |
7.4 Testing and verification
| Item | Gap | Recommendation |
|---|---|---|
| M00 Diamond tests | No tests or verification steps were documented for M00 Diamond. | Done: Runbook §6 defines post-deploy checks (loupe, governance level, PolicyRouter, storage layout, upgrade, events). Spine checklist item 13 added; add Forge/Hardhat tests when spine is implemented. |
7.5 UniversalAssetRegistry migration
| Item | Gap | Recommendation |
|---|---|---|
| Explicit migration note | Review §4.3 recommended documenting UniversalAssetRegistry as source of truth until M00. | Done: Institutional spec “GRU Diamond evolution” includes “Existing registries”: UniversalAssetRegistry remains source of truth until M00; after M00, migrate or mirror to GRUStorage.TokenFactoryRegistry and document cutover. |
8. Related Documents
- GRU_M00_DIAMOND_FACET_MAP.md — Facet map, storage namespaces, governance levels, symbol grammar.
- GRU_M00_DIAMOND_DOCS_REVIEW_GAPS_AND_INCONSISTENCIES.md — Review of all GRU M00 Diamond docs for gaps and inconsistencies.
- GRU_M00_DIAMOND_INSTITUTIONAL_SPEC.md — Full §1–§8 institutional spec; token model A and Pattern A locked; GRC vs M00 evolution.
- gru-docs/contracts/README.md — GRC-2535 Diamond.
- smom-dbis-138/docs/tokenization/TOKEN_SCOPE_GRU.md — c/a/d and W token lists.
- SMART_CONTRACTS_ISO20022_FIN_METHODOLOGY.md — Canonical message format.
- VAULT_SYSTEM_MASTER_TECHNICAL_PLAN.md — Vault and M00 reference.
- REQUIRED_FIXES_UPDATES_GAPS.md — Repo-wide fixes and gaps.
See also §7 for additional recommendations (runbooks, cross-docs, defaults, events, testing, UniversalAssetRegistry migration).