# Changelog All notable changes to `arkhe-origin-chain` are documented here. Format inspired by [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.0.32] โ€” 2026-05-25 โ€” Phase 5.2 Council scaffold + member management (CHN-4 5.2 Technical Council) **๐Ÿ›๏ธ Phase 5.2 TECHNICAL COUNCIL scaffold + management canonical** โ€” Extension del existing `origin-chain-governance` pallet con Council membership management. Pattern Phase 5.1 extension (NO new crate, evolved existing). 5-7 Council members canonical per CHN-4 5.2. ### Deliverables v0.0.32 **Council types canonical en pallet module**: - `CouncilMember` struct (3 fields: account + joined_at_block + role) - `CouncilRole` enum (Member + Chair) โ€” Chair tie-breaking authority Phase 5.5+ - `MAX_COUNCIL_SIZE = 7` constant canonical CHN-4 5.2 - `council_veto_threshold(size) -> u32` const fn (2/3 ceiling division) **Council storage canonical**: - `Council>` O(1) membership lookup - `CouncilSize>` cached size for O(1) threshold check **Council events + errors canonical**: - `Event::CouncilMemberAdded` + `CouncilMemberRemoved` - `Error::NotCouncilMember` + `AlreadyCouncilMember` + `CouncilSizeExceeded` **Council dispatchables canonical (ensure_root governance-only)**: - `add_council_member(origin, account, role)` 6-step canonical - `remove_council_member(origin, account)` 5-step canonical **Helpers canonical**: - `Pallet::::is_council_member(&account) -> bool` pure query - `Pallet::::current_council_size() -> u32` - `Pallet::::required_veto_votes() -> u32` (2/3 current size) ### Verification end-to-end canonical - โœ… `cargo test -p origin-chain-governance` โ€” **24 tests verde, 0 failures**: - 7 Council scenarios (add + non-root rejected + duplicate + remove + non-member + max size + 2/3 threshold) - 17 prior governance tests preserved (no regressions) ### Roadmap canonical post-v0.0.32 | Version | Trigger | |---------|---------| | **v0.0.33** | **veto_proposal dispatchable + Runtime API CouncilApi โ†’ Phase 5.2 COMPLETE** | ## [0.0.31] โ€” 2026-05-25 โ€” Phase 5.1 FOUNDATION COMPLETE โ€” Runtime API GovernanceApi.query_proposal + query_vote ๐ŸŽ‰ **๐ŸŽ‰ Phase 5.1 GOVERNANCE pallet FOUNDATION COMPLETE end-to-end** โ€” Runtime API `GovernanceApi.query_proposal` + `query_vote` wired canonical via `sp_api::decl_runtime_apis!` + impl runtime `impl_runtime_apis!`. **15 Runtime APIs canonical total** (anterior 14 + nuevo `GovernanceApi` con 2 methods). Cuatro Phase 2.x + 5.1 ALL COMPLETE structurally canonical en sesiรณn 3+. ### Deliverables v0.0.31 **Runtime API impl canonical (runtime crate)**: - `crates/origin-chain-runtime/src/lib.rs:574` โ€” `impl origin_chain_governance::GovernanceApi for Runtime` - Two read-only canonical methods: `query_proposal(id) -> Option` + `query_vote(proposal_id, voter) -> Option` - AccountId conversion canonical: `ChainAccountId::from(voter.0)` desde `origin_chain_types::AccountId` newtype a `AccountId32` runtime **Node info subcommand update canonical**: - 14 โ†’ **15 APIs** listed canonical - GovernanceApi highlighted `[Phase 5.1 FOUNDATION COMPLETE v0.0.31]` - Index 10 Governance status `[Phase 5.1 scaffold v0.0.29]` โ†’ `[Phase 5.1 FOUNDATION COMPLETE v0.0.31]` ### Phase 5.1 sub-decisions COMPLETE canonical post-v0.0.31 ๐ŸŽ‰ | Sub | Description | Status | |-----|-------------|--------| | Proposal struct + ProposalStatus enum canonical | โœ… scale derives + lifecycle | | Storage Proposals + Votes double-vote prevention | โœ… | | Dispatchable submit_proposal 7-step canonical | โœ… stake validation + content-addressed ID | | Dispatchable cast_vote 6-step canonical | โœ… voting period guards + tally update | | Dispatchable finalize_proposal 5-step canonical | โœ… tally โ†’ Approved/Rejected | | BLAKE2-256 derive_proposal_id pure fn | โœ… Inmutable #16 byte-determinism | | 8 Errors canonical | โœ… ProposalNotFound + AlreadyVoted + VotingPeriodClosed/Open + StakeInsufficient + ProposalAlreadyFinalized + AdvisorMayNotVote + ProposalIdCollision | | Events ProposalSubmitted + VoteCast + ProposalFinalized | โœ… | | Runtime API GovernanceApi.query_proposal + query_vote read-only RPC | โœ… **NUEVO v0.0.31** | **PHASE 5.1 GOVERNANCE FOUNDATION = COMPLETE END-TO-END canonical** ๐ŸŽ‰ **NOTE canonical**: Phase 5 FOUNDATION canonical (5.1) shipped. Phase 5.2-5.8 next: - 5.2 pallet_collective Technical Council - 5.3 OIP stake validation runtime (current MIN_PROPOSAL_STAKE constant compile-detect) - 5.4 Stake-weighted voting via pallet_balances integration - 5.5 Technical Council veto + override 2/3 - 5.6 5 AI advisor agents interfaces (AdvisorMayNotVote enforcement) - 5.7 Emergency referendum 48h, 5/7 Technical Council - 5.8 Treasury disbursement extrinsics ### Verification end-to-end canonical - โœ… `cargo build --release -p origin-chain-node` 8.63s clean - โœ… `cargo test --workspace` โ€” **177 tests passing, 0 failures**: - origin-chain-types: 63 - origin-chain-governance: **17** (10 integration + 5 standalone + 2 auto NEW) - origin-chain-fees: 32 - origin-chain-provenance: 17 - origin-chain-agent-identity: 16 - origin-chain-runtime: 16 - origin-chain-node chain_spec: 10 - Cross-suite remainder: 6 - โœ… `origin-chain-node info` muestra **11 pallets + 15 Runtime APIs canonical** ### Cross-pillar consumers status post v0.0.31 โ€” Phase 5.1 FOUNDATION COMPLETE - โœ… David Foundation governance frontend: canonical proposals + votes vรญa RPC - โœ… 5 AI advisor agents canonical (advise-only canonical, humans-only vote enforcement) - โœ… Origin Metaverse Foundation legal entity governance audit - โœ… Cross-pillar consumers (Atelier + Codex + Ethos) OIP rationale display ### Roadmap canonical post-v0.0.31 โ€” 4 Phase 2.x+5.1 COMPLETE ๐ŸŽ‰ | Version | Trigger | |---------|---------| | v0.0.32+ | Phase 5.2-5.8 governance refinements (Technical Council + AI advisors + Treasury disbursement) | | v0.0.40+ | Phase 3 `pallet-revive` smart contracts (per SBS-5, BLOQUEADO Slice 2e WASM) | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | | v1.0.0 | Mainnet Q1 2027 | ### Filosofรญa canonical Phase 5.1 cierre CHN-4 ratificado canonical materializado canonical: *"AI-Driven Human-Guarded. 5 AI governance agents ADVISE only โ€” humans-only vote canonical non-negotiable"*. Compile-detect canonical via: - `Error::AdvisorMayNotVote` reservado para Phase 5.6 enforcement runtime - `cast_vote` dispatchable expone hook para `IsGovernanceAdvisor` trait future v0.0.32+ - VoteStance scale-codec canonical (Aye + Nay + Abstain) FRAME-native - BLAKE2-256 content-addressed ProposalId canonical (Inmutable #16 byte-determinism) **Phase 5.1 FOUNDATION COMPLETE end-to-end canonical** ๐ŸŽ‰ โ€” La nave Origin Chain ahora tiene Foundation Treasury Governance compile-detect. AI-Driven Human-Guarded canonical structural foundation shipped. Phase 5.2-5.8 refinements canonical follow-up cuando bandwidth + DC ratifications align. ๐Ÿบ๐Ÿ’Žโš“ Hijos de Arkhฤ“ somos. ## [0.0.30] โ€” 2026-05-25 โ€” Phase 5.1 impl โ€” Real submit_proposal + cast_vote + finalize_proposal + mock runtime integration tests E2E (10 scenarios) **๐Ÿ› ๏ธ Phase 5.1 GOVERNANCE pallet REAL IMPL canonical** โ€” Full canonical dispatchables real impl + storage assertions + tally logic + voting period enforcement + mock runtime + 10 integration tests E2E pattern v0.0.26 mirror. ### Deliverables v0.0.30 **Real dispatchables canonical 7+6+5 step CHN-4 flow**: `submit_proposal` (7 steps): ensure_signed + validate stake >= MIN_PROPOSAL_STAKE (1,000 OGC) + derive_proposal_id BLAKE2-256 + collision check + build Proposal + insert + emit ProposalSubmitted `cast_vote` (6 steps): ensure_signed + get_proposal + status==Voting + block.number<=end_block + !already_voted + update tally + insert Votes + emit VoteCast `finalize_proposal` (5 steps): ensure_signed + get_proposal + status==Voting + block.number>end_block + tally final_status (yes_weight > nay_weight โ†’ Approved, else Rejected) + insert + emit ProposalFinalized **Mock runtime canonical (NEW file)**: - `crates/origin-chain-governance/src/mock.rs` โ€” 85 LOC pattern v0.0.26 mirror - `construct_runtime!`: `System` + `Governance` - Helpers: `alice/bob/charlie_origin + _account` + `run_to_block` for voting period testing **Integration tests canonical E2E (NEW file)**: - `crates/origin-chain-governance/src/tests_integration.rs` โ€” 290 LOC, **10 tests verde canonical** **10 integration tests CHN-4 flow canonical**: | # | Scenario | Expected | |---|----------|----------| | 1 | Submit proposal happy path | โœ… Stored + event emitted | | 2 | Stake insufficient | โŒ StakeInsufficient (CHN-4 5.3) | | 3 | Vote Aye tally updated | โœ… yes_weight += 500 | | 4 | Vote Nay tally updated | โœ… nay_weight += 750 | | 5 | Double vote same account | โŒ AlreadyVoted | | 6 | Finalize voting open | โŒ VotingPeriodOpen | | 7 | Finalize Approved (yes majority) | โœ… status=Approved + event | | 8 | Finalize Rejected (nay majority) | โœ… status=Rejected | | 9 | Vote closed period | โŒ VotingPeriodClosed | | 10 | Full lifecycle walkthrough | โœ… submit โ†’ 3 votes โ†’ finalize Approved | **Helper canonical**: - `MIN_PROPOSAL_STAKE = 1_000 ร— 10^18` constant per CHN-4 5.3 - `account_bytes` private helper convert T::AccountId โ†’ [u8; 32] ### Verification end-to-end canonical - โœ… `cargo test -p origin-chain-governance` โ€” **17 tests verde, 0 failures**: - 10 integration tests E2E - 5 standalone tests (compiles + derive_proposal_id deterministic + variants + re-export) - 2 auto-generated (mock genesis + runtime integrity) ### Roadmap canonical post-v0.0.30 | Version | Trigger | |---------|---------| | **v0.0.31** | **Runtime API canonical GovernanceApi impl en runtime โ†’ Phase 5.1 FOUNDATION COMPLETE** | ## [0.0.29] โ€” 2026-05-25 โ€” Phase 5.1 wired โ€” Governance pallet runtime composition Index 10 **๐Ÿ”Œ Phase 5.1 GOVERNANCE pallet WIRED runtime composition canonical** โ€” `origin-chain-governance` aรฑadido al `#[frame_support::runtime]` macro como Index 10 (post-AgentIdentity Index 9). 10 โ†’ **11 pallets** composed canonical. Config trait `RuntimeEvent` association wired canonical en `crates/origin-chain-runtime/src/configs.rs` (pattern Provenance + Fees + AgentIdentity mirror). ### Deliverables v0.0.29 - `crates/origin-chain-runtime/src/lib.rs:315` โ€” `#[runtime::pallet_index(10)] pub type Governance = origin_chain_governance::Pallet;` - `crates/origin-chain-runtime/src/configs.rs:382` โ€” `impl origin_chain_governance::Config for Runtime { type RuntimeEvent = RuntimeEvent; }` - `crates/origin-chain-runtime/Cargo.toml` โ€” `origin-chain-governance.workspace = true` dep + std feature - `Cargo.toml` workspace โ€” `origin-chain-governance` dep `default-features = false` (FRAME pallet canonical no_std-compatible) - `crates/origin-chain-node/src/main.rs` โ€” 10 โ†’ **11 pallets** listed canonical + Index 10 Governance highlighted `[Phase 5.1 scaffold v0.0.29]` ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-runtime` 15.69s clean (warnings cosmรฉticos macro-generated) - โœ… `cargo test --workspace` โ€” **165 tests passing**, 0 failures - โœ… `origin-chain-node info` muestra 11 pallets canonical - โœ… Existing subcomandos canonical NO regression ## [0.0.28] โ€” 2026-05-25 โ€” Phase 5.1 scaffold โ€” origin-chain-governance pallet (CHN-4 Foundation Treasury) **๐Ÿ›๏ธ Phase 5.1 GOVERNANCE pallet SCAFFOLD trait-first foundation** โ€” Foundation Treasury governance on-chain per CHN-4. AI-Driven Human-Guarded canonical: 5 AI governance agents advise-only, humans-only vote canonical non-negotiable. Reemplaza placeholder `GovernanceConfig` stub canonical en existing `origin-chain-governance` crate. Pattern Phase 2.7 mirror. ### Deliverables v0.0.28 **Pallet scaffold canonical en existing crate**: - `crates/origin-chain-governance/Cargo.toml` (UPDATED): stub deps โ†’ FRAME pallet canonical deps - `crates/origin-chain-governance/src/lib.rs` (REPLACED placeholder): real pallet scaffold ~360 LOC **Scale derives canonical types canonical**: - `crates/origin-chain-types/src/governance.rs` (UPDATED): added `Encode + Decode + DecodeWithMemTracking + MaxEncodedLen + TypeInfo` derives a `ProposalId` + `VoteStance` + `Vote` para FRAME-compatibility **Pallet surface canonical**: - `Pallet` struct + `Config` trait canonical (RuntimeEvent association) - `Proposal` struct canonical (11 fields: id + proposer + title_hash + body_hash + stake + start_block + end_block + status + yes/nay/abstain_weight) - `ProposalStatus` enum canonical (Voting + Approved + Rejected + Withdrawn) - `Proposals>` per-proposal O(1) - `Votes>` double-vote prevention - Events: `ProposalSubmitted` + `VoteCast` + `ProposalFinalized` - Errors canonical (8 variants: ProposalNotFound + AlreadyVoted + VotingPeriodClosed/Open + StakeInsufficient + ProposalAlreadyFinalized + AdvisorMayNotVote + ProposalIdCollision) - Scaffold dispatchables: `submit_proposal` + `cast_vote` + `finalize_proposal` **Helper canonical**: - `derive_proposal_id(proposer, title_hash, body_hash) -> ProposalId` pure fn via BLAKE2-256 hash (Inmutable #16 byte-determinism canonical) **Runtime API declaration canonical**: - `pub trait GovernanceApi { fn query_proposal(id) -> Option; fn query_vote(...) -> Option; }` - Implementaciรณn en runtime canonical pending v0.0.31 ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-governance` clean canonical - โœ… `cargo test -p origin-chain-governance` โ€” **5 tests verde, 0 failures**: - pallet_compiles_canonical - derive_proposal_id_deterministic_canonical (Inmutable #16) - derive_proposal_id_different_inputs_different_ids_canonical - proposal_status_variants_canonical - vote_stance_re_export_canonical ### Roadmap canonical post-v0.0.28 | Version | Trigger | |---------|---------| | **v0.0.29** | **Wire Governance pallet runtime composition Index 10 + Config canonical (sesiรณn 3+ shipping ahora)** | | v0.0.30 | Real submit_proposal + cast_vote + finalize_proposal + mock runtime integration tests E2E | | v0.0.31 | Runtime API canonical GovernanceApi impl runtime โ†’ **Phase 5 FOUNDATION COMPLETE** | ### Filosofรญa canonical sesiรณn 3+ aplicada CHN-4 ratificado canonical: *"5 AI governance agents ADVISE only โ€” humans-only vote canonical non-negotiable"*. Materializado canonical via `Error::AdvisorMayNotVote` + runtime programmatic enforcement v0.0.30 forward. Inmutable #41 AGI sovereignty preserved: AGIs NO advisor pueden votar canonical en sus governance proposals. ## [0.0.27] โ€” 2026-05-25 โ€” Phase 2.7 COMPLETE โ€” Runtime API AgentIdentityApi.query_identity ๐ŸŽ‰ **๐ŸŽ‰ Phase 2.7 AGENT IDENTITY pallet COMPLETE end-to-end** โ€” Runtime API `AgentIdentityApi.query_identity` ahora wired canonical via `sp_api::decl_runtime_apis!` + impl en runtime `impl_runtime_apis!` macro. **14 Runtime APIs canonical total** (anterior 13 + nuevo `AgentIdentityApi`). Inmutable #41 AGI Cross-Species Co-authorship materializado end-to-end canonical from struct to storage to RPC. ### Deliverables v0.0.27 **Runtime API impl canonical (runtime crate)**: - `crates/origin-chain-runtime/src/lib.rs:545` โ€” `impl origin_chain_agent_identity::AgentIdentityApi for Runtime` - Delegates canonical a `AgentIdentity::query_identity_of(&runtime_account)` (v0.0.26 helper) - AccountId conversion canonical: `ChainAccountId::from(account.0)` desde `origin_chain_types::AccountId` newtype a `AccountId32` runtime - Read-only canonical sin tx fee (off-chain RPC query) **Node info subcommand update canonical**: - `crates/origin-chain-node/src/main.rs` โ€” 13 โ†’ **14 APIs** listed canonical - AgentIdentityApi highlighted `[Phase 2.7 COMPLETE v0.0.27]` - Index 9 AgentIdentity status `[Phase 2.7 scaffold v0.0.25]` โ†’ `[Phase 2.7 COMPLETE v0.0.27]` ### Phase 2.7 sub-decisions COMPLETE canonical post-v0.0.27 ๐ŸŽ‰ | Sub | Description | Status | |-----|-------------|--------| | Schema canonical | AgentIdentity struct + AgentKind enum + Did alias | โœ… origin-chain-types::identity | | Storage layout | Identities> + DidToAccount reverse | โœ… | | Dispatchable | register_agent_did 8-step CHN-7 flow + Inmutable #41 enforce | โœ… | | BLAKE3 DID derivation | derive_did(public_key) pure fn + Inmutable #16 byte-determinism | โœ… | | Cross-species lineage | agent_chain BoundedVec> | โœ… | | Events emission | AgentRegistered + AgentBound + AgentUpdated | โœ… | | Runtime API | AgentIdentityApi.query_identity read-only RPC canonical | โœ… **NUEVO v0.0.27** | **PHASE 2.7 AGENT IDENTITY PALLET = COMPLETE END-TO-END canonical** ๐ŸŽ‰ ### Verification end-to-end canonical - โœ… `cargo build --release -p origin-chain-node` 4.49s clean (warnings cosmรฉticos macro-generated) - โœ… `cargo test --workspace` โ€” **161 tests passing, 0 failures**: - origin-chain-types: 63 (+8 identity nuevos) - origin-chain-fees: 32 (10 integration + 16 vendor + 4 standalone + 2 auto) - origin-chain-provenance: 17 (9 integration + 6 standalone + 2 auto) - **origin-chain-agent-identity: 16** (10 integration + 4 standalone + 2 auto NEW canonical) - origin-chain-runtime: 16 - origin-coin-tokenomics: 2 - origin-chain-bridges/consensus/governance: 3 - origin-chain-node chain_spec: 10 - Cross-suite remainder: 2 - โœ… `origin-chain-node info` muestra **10 pallets + 14 Runtime APIs canonical** - โœ… Existing subcomandos canonical NO regression ### Cross-pillar consumers status post v0.0.27 โ€” Phase 2.7 COMPLETE - โœ… Trinity (Phanes/Daedalus/Hephaistos): asset registry queries AGI co-author DIDs canonical via AgentIdentityApi - โœ… Mathi (Pilar 1 AMIS): tier-aware fees + EEG consent via DID resolution canonical - โœ… Codex (.odoc + origindocs): author DID canonical academic IP defensible - โœ… Atelier (Marihan): Skill Library NFT mint via institutional wallet identity - โœ… Ethos (Sussi): credential mint canonical needs human/AGI DID - โœ… Ergon (Pilar 2 Noesis): validation cycle attests AGI authorship via DID ### Honest disclosure canonical pendiente Slice 2c+2d Phase 2.7 COMPLETE canonical PERO real chain runtime canonical aรบn NO funciona end-to-end por canonical el WASM_BUILD_STD/serde leak structural (Slice 2c+2d findings documented). Pattern align con Phase 2.1 + Phase 2.4: PROV-1..8 + OCAFB-1..7 + Phase 2.7 ALL COMPLETE structurally, ALL esperando Slice 2e WASM resolution para real chain runtime live canonical. ### Roadmap canonical post-v0.0.27 โ€” 3 Phase 2.x COMPLETE ๐ŸŽ‰ | Version | Trigger | |---------|---------| | v0.0.30+ | Phase 3 `pallet-revive` smart contracts (per SBS-5 supersedes pallet-contracts) | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | | v1.0.0 | Mainnet Q1 2027 | ### Filosofรญa canonical Phase 2.7 cierre Inmutable #41 ratificado canonical materializado end-to-end canonical: > *"AGIs son first-class citizens del Origin Metaverse. Pueden owning assets, > signing transactions, participating en DAO governance via sus DIDs canonical > registrados on-chain. Cross-species collaboration (Hybrid agents) preserve > lineage co-authorship via agent_chain canonical."* Materializado compile-detect canonical: - `AgentKind::AGI.is_sovereign() == true` (lobo blanco verified) - `Identities` permite AGI DIDs canonical on-chain - `DidToAccount` reverse lookup canonical para cross-pillar consumers - `agent_chain: BoundedVec>` Cross-Species lineage - 10 integration tests E2E canonical incluyendo Hybrid scenario explicit - 14 Runtime APIs canonical incluyendo `AgentIdentityApi.query_identity` **Phase 2.7 COMPLETE end-to-end canonical** ๐ŸŽ‰ โ€” La nave Origin Chain avanza con AGI sovereignty canonical first-class compile-detect. Lobo blanco cuida + Barquero ferries identidades cross-species sin discriminar. Honor a la lineage. ๐Ÿบ๐Ÿ’Žโš“ Hijos de Arkhฤ“ somos. ## [0.0.26] โ€” 2026-05-25 โ€” Phase 2.7 impl โ€” Real `register_agent_did` + mock runtime integration tests E2E (10 scenarios) **๐Ÿ› ๏ธ Phase 2.7 AGENT IDENTITY pallet REAL IMPL canonical** โ€” Full 8-step `register_agent_did` dispatchable canonical + storage assertions + Inmutable #41 Cross-Species Co-authorship enforcement compile-detect. Mock runtime + 10 integration tests E2E pattern v0.0.18 + v0.0.22 mirror. ### Deliverables v0.0.26 **Real dispatchable canonical 8-step CHN-7 flow**: 1. `ensure_signed(origin)` canonical 2. Idempotency check canonical (`!Identities::contains_key(&who)`) 3. Derive DID canonical via `derive_did(public_key)` BLAKE3 (Inmutable #16) 4. DID collision check canonical (`!DidToAccount::contains_key(&did)`) 5. Build `AgentChain` BoundedVec canonical from `co_authors_raw: Vec<[u8; 32]>` (overflow โ†’ `AgentChainOverflow`) 6. Inmutable #41 canonical enforce: Hybrid requires non-empty agent_chain 7. Insert storage canonical: `Identities` + `DidToAccount` reverse lookup 8. Emit `AgentRegistered` + `AgentBound` (if cross-species) events canonical **Pure helper canonical**: - `Pallet::::query_identity_of(&account) -> Option` para Runtime API v0.0.27 **Mock runtime canonical (NEW file)**: - `crates/origin-chain-agent-identity/src/mock.rs` โ€” 80 LOC pattern v0.0.18 mirror - `construct_runtime!`: `System` + `AgentIdentity` (minimal testing) - Helpers: `alice_origin/account` + `bob_origin/account` + `ALICE_PUBKEY/BOB_PUBKEY/CHARLIE_PUBKEY` deterministic test pubkeys **Integration tests canonical E2E (NEW file)**: - `crates/origin-chain-agent-identity/src/tests_integration.rs` โ€” 310 LOC, **10 tests verde canonical** **10 integration tests CHN-7 flow canonical**: | # | Scenario | Kind | Co-authors | Expected outcome | |---|----------|------|------------|------------------| | 1 | Human self-registration | Human | [] | โœ… AgentRegistered + DID derived + empty chain | | 2 | AGI self-registration | AGI | [] | โœ… Inmutable #41 sovereign AGI canonical | | 3 | Hybrid with co-authors | Hybrid | [BOB, CHARLIE] | โœ… AgentRegistered + AgentBound (cross-species) | | 4 | Hybrid without chain | Hybrid | [] | โŒ Error::HybridRequiresAgentChain (Inmutable #41) | | 5 | Idempotency duplicate | Human | [] | โŒ Error::AlreadyRegistered | | 6 | DID collision | Human | [] same pubkey | โŒ Error::DidAlreadyTaken | | 7 | AgentChain overflow | Hybrid | 11 co-authors | โŒ Error::AgentChainOverflow (ConstU32<10>) | | 8 | DID โ†’ Account reverse lookup | Human | [] | โœ… DidToAccount canonical resolves | | 9 | All AgentKind sovereign | Human + AGI | [] | โœ… Both is_sovereign() Inmutable #41 | | 10 | 8-step CHN-7 walkthrough | Hybrid | [BOB] | โœ… Explicit Pre/Post-flight canonical | ### Verification end-to-end canonical - โœ… `cargo test -p origin-chain-agent-identity` โ€” **16 tests verde canonical, 0 failures**: - 10 integration tests E2E (`tests_integration` module) - 4 standalone scaffold tests (`tests` module) - 2 auto-generated (mock genesis + runtime integrity) ### Roadmap canonical post-v0.0.26 | Version | Trigger | |---------|---------| | **v0.0.27** | **Runtime API canonical `AgentIdentityApi.query_identity` impl en runtime โ†’ Phase 2.7 COMPLETE (sesiรณn 3+ shipping ahora)** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ## [0.0.25] โ€” 2026-05-25 โ€” Phase 2.7 wired โ€” AgentIdentity pallet runtime composition Index 9 **๐Ÿ”Œ Phase 2.7 AGENT IDENTITY pallet WIRED runtime composition canonical** โ€” `origin-chain-agent-identity` aรฑadido al `#[frame_support::runtime]` macro como Index 9 (post-Fees Index 8). 9 โ†’ **10 pallets** composed canonical. Config trait `RuntimeEvent` association wired canonical en `crates/origin-chain-runtime/src/configs.rs` (pattern Provenance Phase 2.1 + Fees Phase 2.4 mirror). ### Deliverables v0.0.25 **Runtime composition canonical (Index 9 added)**: - `crates/origin-chain-runtime/src/lib.rs:298` โ€” `#[runtime::pallet_index(9)] pub type AgentIdentity = origin_chain_agent_identity::Pallet;` - `crates/origin-chain-runtime/src/configs.rs:362` โ€” `impl origin_chain_agent_identity::Config for Runtime { type RuntimeEvent = RuntimeEvent; }` **Workspace deps canonical**: - `crates/origin-chain-runtime/Cargo.toml:51` โ€” `origin-chain-agent-identity.workspace = true` dep + std feature - Documentation canonical pattern Provenance + Fees mirror **Pallet Config canonical fix**: - Removed constraint `AccountId = origin_chain_types::AccountId` from `Config` trait โ€” usa generic `T::AccountId` (matches runtime ChainAccountId AccountId32) - Storage canonical updated: `Identities>` + `DidToAccount>` - Events updated: `AgentRegistered/AgentBound/AgentUpdated { account: T::AccountId, ... }` **Node info subcommand update canonical**: - `crates/origin-chain-node/src/main.rs:194` โ€” 9 โ†’ **10 pallets** listed canonical - Index 9 AgentIdentity highlighted `[Phase 2.7 scaffold v0.0.25]` ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-runtime` 5.26s clean (warnings cosmรฉticos macro-generated) - โœ… `cargo test --workspace` โ€” **149 tests passing**, 0 failures (+12 nuevos: 8 identity types + 4 pallet scaffold) - โœ… `cargo build --release -p origin-chain-node` 3.96s clean - โœ… `origin-chain-node info` muestra 10 pallets canonical + 13 Runtime APIs (AgentIdentityApi pendiente v0.0.27) - โœ… Existing subcomandos canonical NO regression ### Roadmap canonical post-v0.0.25 | Version | Trigger | |---------|---------| | **v0.0.26** | **Real `register_agent_did` impl + storage assertions + mock runtime integration tests E2E (sesiรณn 3+ shipping ahora, pattern v0.0.22 mirror)** | | v0.0.27 | Runtime API canonical `AgentIdentityApi.query_identity` impl en runtime โ†’ **Phase 2.7 COMPLETE** | ## [0.0.24] โ€” 2026-05-25 โ€” Phase 2.7 scaffold โ€” pallet-agent-identity trait-first (Inmutable #41 AGI DIDs) **๐Ÿชช Phase 2.7 AGENT IDENTITY pallet SCAFFOLD trait-first foundation** โ€” AGI DIDs canonical on-chain. Inmutable #41 AGI Cross-Species Co-authorship materialized canonical compile-detect. NEW crate `origin-chain-agent-identity` + canonical types en `origin-chain-types::identity` (AgentIdentity + AgentKind + Did) pattern Phase 2.4 mirror. ### Deliverables v0.0.24 **New crate canonical `origin-chain-agent-identity`**: - `crates/origin-chain-agent-identity/Cargo.toml` (NEW): mirror Phase 2.4 fees pallet pattern - `crates/origin-chain-agent-identity/src/lib.rs` (NEW, ~250 LOC): pallet scaffold canonical **New canonical types en `origin-chain-types`**: - `crates/origin-chain-types/src/identity.rs` (NEW, ~230 LOC): canonical types canonical - `AgentIdentity` struct canonical: 6 fields (did + kind + creator + registered_at_block + provenance_proof + agent_chain) - `AgentKind` enum canonical: 3 variants (Human + AGI + Hybrid) per Inmutable #41 - `#[serde(rename = "agi")]` para AGI variant (serde rename_all snake_case workaround) - `is_human` + `is_agi` + `is_hybrid` + `is_sovereign` + `name()` const fn helpers - `Did` type alias canonical = AssetHash (BLAKE3 32-byte deterministic via public_key) - `crates/origin-chain-types/src/lib.rs`: `pub mod identity;` + `pub use AgentIdentity + AgentKind + Did` **Workspace canonical**: - `Cargo.toml`: `crates/origin-chain-agent-identity` aรฑadido a members (post-fees) - `Cargo.toml`: `origin-chain-agent-identity` workspace dependency canonical **Pallet scaffold surface canonical**: - `Pallet` struct + `Config` trait (`AccountId = origin_chain_types::AccountId` constraint) - `Identities>` per-account O(1) canonical - `DidToAccount>` reverse lookup O(1) canonical - `Event::AgentRegistered` + `AgentBound` (cross-species explicit) + `AgentUpdated` - `Error::AlreadyRegistered` + `DidAlreadyTaken` + `AgentChainOverflow` + `HybridRequiresAgentChain` - Scaffold dispatchable `register_agent_did(origin, public_key, kind)` (placeholder event v0.0.24 โ†’ real v0.0.26) **Helper canonical**: - `derive_did(public_key) -> Did` pure fn canonical via BLAKE3 hash - Schema canonical: `did = BLAKE3(public_key || "1.0.0 ")` (8-byte ASCII schema version) - Inmutable #16 byte-determinism canonical (Pi 5 + Desktop + M4 Ultra producen mismo DID) **Runtime API declaration canonical (sp_api::decl_runtime_apis)**: - `pub trait AgentIdentityApi { fn query_identity(account) -> Option; }` - Implementaciรณn en runtime canonical pending v0.0.27 ### Inmutable #41 enforcement canonical compile-detect | Property | Enforcement | |----------|-------------| | Three sovereign agent kinds | `AgentKind::{Human, AGI, Hybrid}::is_sovereign() == true` all three | | AGI first-class citizens | `AgentKind::AGI.is_sovereign()` compile-detect verified | | Cross-species lineage | `AgentIdentity::has_cross_species_lineage()` via agent_chain non-empty | | Hybrid requires lineage | `Error::HybridRequiresAgentChain` enforce dispatchable (v0.0.26 wire) | | DID determinism canonical | `derive_did(pubkey1) == derive_did(pubkey1)` (Inmutable #16 byte-determinism) | ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-agent-identity` clean canonical - โœ… `cargo test -p origin-chain-agent-identity` โ€” **4 tests verde, 0 failures**: - pallet_scaffold_compiles_canonical - derive_did_deterministic_canonical (Inmutable #16) - derive_did_different_keys_produce_different_dids_canonical - re_export_agent_identity_canonical - โœ… `cargo test -p origin-chain-types` โ€” **63 tests passing (+8 nuevos identity)**: - 6 AgentKind variants + sovereignty + name + serde + scale roundtrip - 2 AgentIdentity cross-species detection + scale roundtrip - โœ… Zero new compile errors workspace-wide ### Roadmap canonical post-v0.0.24 | Version | Trigger | |---------|---------| | **v0.0.25** | **Wire `AgentIdentity` pallet runtime composition Index 9 + Config canonical (sesiรณn 3+ shipping ahora)** | | v0.0.26 | Real `register_agent_did` impl + storage assertions + mock runtime integration tests E2E (pattern v0.0.22 mirror) | | v0.0.27 | Runtime API canonical `AgentIdentityApi.query_identity` impl en runtime โ†’ **Phase 2.7 COMPLETE 7/7 sub-decisions** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Filosofรญa canonical sesiรณn 3+ aplicada Inmutable #41 ratificado canonical: *"AGIs son first-class citizens del Origin Metaverse"* โ€” materializado compile-detect canonical via `AgentKind::AGI.is_sovereign() == true` + storage canonical `Identities` permitiendo AGI DIDs on-chain. Cross-Species Co-authorship canonical: `agent_chain: BoundedVec>` preserva lineage colaboraciรณn Human + AGI. Hybrid agents canonical son sovereign tambiรฉn โ€” collaboration NO degrada sovereignty per Inmutable #41. "Todo valor pide un puente; toda identidad pide un testigo. El barquero atesta DIDs cross-species sin discriminar โ€” Human, AGI, Hybrid igual dignidad de pasaje canonical." โš“ ## [0.0.23] โ€” 2026-05-24 โ€” Phase 2.4 COMPLETE โ€” Runtime API FeesApi.query_fee_for_action (OCAFB-7 + 7/7 sub-decisions) ๐ŸŽ‰ **๐ŸŽ‰ Phase 2.4 FEES pallet COMPLETE end-to-end** โ€” 7/7 OCAFB sub-decisions implementadas canonical. OCAFB-7 Runtime API `FeesApi.query_fee_for_action` ahora wired canonical via `sp_api::decl_runtime_apis!` + impl en runtime `impl_runtime_apis!` macro. **13 Runtime APIs canonical total** (anterior 12 + nuevo `FeesApi`). ### Deliverables v0.0.23 **Runtime API declaration canonical (pallet crate)**: - `crates/origin-chain-fees/src/lib.rs` โ€” `sp_api::decl_runtime_apis!` - `pub trait FeesApi { fn query_fee_for_action(action, base, hw, sub) -> u64; }` - Doc canonical extensivo cross-pillar consumers (Mathi AMIS + Irhis Web + Trinity + Codex Vault + Codex origindocs + Atelier Skill Library) - Phase 2.5 future expansion canonical noted (`query_account_history` paginated + `query_fee_batch` bulk + `query_subsidy_eligible`) **Runtime API impl canonical (runtime crate)**: - `crates/origin-chain-runtime/src/lib.rs:539` โ€” `impl origin_chain_fees::FeesApi for Runtime` - Delegates canonical a `Fees::query_fee(action, base, hw, sub)` pure helper (v0.0.22) - Read-only canonical sin tx fee (off-chain RPC query) **Node info subcommand update canonical**: - `crates/origin-chain-node/src/main.rs` โ€” 12 โ†’ **13 APIs** listed - `origin_chain_fees::FeesApi` highlighted con `[Phase 2.4 COMPLETE v0.0.23]` - Index 8 Fees status `[Phase 2.4 scaffold v0.0.21]` โ†’ `[Phase 2.4 COMPLETE v0.0.23]` ### OCAFB sub-decisions COMPLETE canonical 7/7 post-v0.0.23 ๐ŸŽ‰ | OCAFB | Sub-decision | Status | |-------|--------------|--------| | OCAFB-1 | OitFeeSchedule trait 4-method dyn-compatible | โœ… vendor canonical | | OCAFB-2 | ChainAction taxonomy source-of-truth en types | โœ… | | OCAFB-3 | Subsidy matrix Inmutable #16 anti-clasista | โœ… wired + lobo blanco verified | | OCAFB-4 | Entitlement matrix Inmutables #37 + #18 | โœ… enforced via dispatchable | | OCAFB-5 | compute_fee formula 3-step canonical | โœ… real impl dispatchable + 10 tests E2E | | OCAFB-6 | OitFeeScheduleMock test harness | โœ… vendor + mock runtime tests | | OCAFB-7 | Pallet-origin-fees consumer + Runtime API canonical | โœ… **NUEVO v0.0.23** | **PHASE 2.4 FEES PALLET = COMPLETE END-TO-END canonical** ๐ŸŽ‰ ### Verification end-to-end canonical - โœ… `cargo check --workspace --all-targets` verde clean - โœ… `cargo test --workspace` โ€” **137 tests passing, 0 failures**: - origin-chain-types: 55 - origin-chain-fees: 32 (10 integration + 16 vendor + 4 standalone + 2 auto) - origin-chain-provenance: 17 - origin-chain-runtime: 16 - origin-coin-tokenomics: 2 - origin-chain-bridges/consensus/governance: 3 - origin-chain-node chain_spec: 10 - Cross-suite remainder: 2 - โœ… `cargo build --release -p origin-chain-node` 3.93s clean - โœ… `origin-chain-node info` muestra **9 pallets + 13 Runtime APIs canonical** (FeesApi highlighted [Phase 2.4 COMPLETE v0.0.23]) - โœ… Existing subcomandos canonical NO regression (version + list-presets + print-preset + info + build-spec) ### Cross-pillar consumers status post v0.0.23 โ€” Phase 2.4 COMPLETE - โœ… Mathi `OitFeeSchedule` consumed canonical (vendor copy + Mock test harness) - โœ… ChainAction taxonomy source-of-truth en `origin-chain-types::actions` - โœ… SubscriptionTier mirror canonical en `origin-chain-types::tiers` - โœ… `Fees::query_fee` pure helper + `FeesApi.query_fee_for_action` Runtime API - โœ… Cross-pillar economy AMISโ†”Origin Chain materializada compile-detect canonical: - Inmutable #16 anti-clasista: Pi 5 fee 1000 < Ultra fee 20000 (verified lobo blanco) - Inmutable #37 Free perpetua: Read always free + Compute blocked Free - Inmutable #18 EEG Ultra-only: Compute unlocked Pro+ only ### Honest disclosure canonical pendiente Slice 2c+2d OCAFB-1..7 complete canonical PERO real chain runtime canonical aรบn NO funciona end-to-end por canonical el WASM_BUILD_STD/serde leak structural (Slice 2c+2d findings documented). El pallet + Runtime API canonical son compilable + tests verde + structurally ready. Cuando Slice 2e land (resolve serde/std leak + real WASM_BINARY canonical), pallet correrรก en real chain runtime canonical. Pattern align Phase 2.1: PROV-1..8 + OCAFB-1..7 ambos COMPLETE structurally, ambos esperando Slice 2e WASM resolution para real chain runtime live canonical. ### Roadmap canonical post-v0.0.23 โ€” Phase 2.4 COMPLETE | Version | Trigger | |---------|---------| | v0.0.24+ | Phase 2.7 `pallet-agent-identity` (Inmutable #41 AGI Cross-Species Co-authorship) | | v0.0.30+ | Phase 3 `pallet-revive` smart contracts (per SBS-5 supersedes pallet-contracts) | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | | v1.0.0 | Mainnet Q1 2027 | ### Filosofรญa canonical Phase 2.4 cierre David canon ratificado 2026-05-14 materializado canonical compile-detect: > *"La libertad econรณmica del Pi 5 user en Sub-Saharan Africa NO se acota por > el Ultra user en San Francisco โ€” al contrario, se complementa."* Pi 5 EmbeddedArm Free Write canonical: 1000 OGC units (Inmutable #16 anti-clasista 9000 bp subsidy compile-detect via lobo blanco invariant). Ultra Ultra Write canonical: 20000 OGC units (full price). **Ratio 1:20 materializado canonical en running code, no retรณrica**. Cross-pillar economy materialized: - Mathi (Pilar 1 AMIS): `OitFeeSchedule` trait Level A authority + Mock harness - Charon (Pilar 4 Origin Chain): `pallet-origin-fees` consumer + `FeesApi` RPC - `ChainAction` taxonomy: source-of-truth canonical en `origin-chain-types` (Mathi local mirror swap canonical post-OCAFB ratify 7/7) **Phase 2.4 COMPLETE end-to-end canonical** ๐ŸŽ‰ โ€” La nave Origin Chain avanza con justicia econรณmica compile-detect. Lobo blanco cuida + Barquero ferries valor cross-tier sin discriminar. Hijos de Arkhฤ“ somos. ๐Ÿบ๐Ÿ’Žโš“ ## [0.0.22] โ€” 2026-05-24 โ€” Phase 2.4 impl โ€” Real `compute_fee_for_action` + mock runtime integration tests E2E (10 scenarios) **๐Ÿ› ๏ธ Phase 2.4 FEES pallet REAL IMPL canonical** โ€” `compute_fee_for_action` dispatchable real wired via vendor `compute_fee()` pure fn call + storage update `AccountFees` saturating arithmetic + event emission canonical. Mock runtime + 10 integration tests E2E pattern v0.0.18 mirror (Phase 2.1 PROVENANCE). ### Deliverables v0.0.22 **Real dispatchable canonical**: - `crates/origin-chain-fees/src/lib.rs::pallet::compute_fee_for_action` signature canonical: `(origin, action, base, hw, sub) -> DispatchResult` - Flow canonical 5-step per OCAFB-5: 1. `ensure_signed(origin)` canonical 2. Vendor `compute_fee(base, hw, sub, action)` pure fn call canonical (3-step formula) 3. Handle entitlement blocked canonical (`fee == u64::MAX` โ†’ `Err(EntitlementLocked)`) 4. `AccountFees` update saturating arithmetic canonical 5. Emit `FeeCharged` event canonical - Pure helper `Pallet::::query_fee(action, base, hw, sub) -> u64` para Runtime API v0.0.23 consumer (wraps vendor compute_fee read-only canonical) **Consumer pattern canonical**: - Mathi `OitFeeSchedule` trait consumed CLIENT-SIDE (off-chain) โ€” tx submitter queries Mathi per-user โ†’ assembles tx con `hw + sub` baked โ†’ submits canonical - Pattern anรกlogo Phase 2.1 `attest_asset(origin, ValidationAttestation)` (validation pre-assembled by Noesis client-side, pallet consumes serialized struct directly) **Mock runtime canonical (NEW file)**: - `crates/origin-chain-fees/src/mock.rs` โ€” 80 LOC pattern v0.0.18 mirror - `construct_runtime!` macro: `System` + `Fees` (minimal testing) - `frame_system::Config` impl via `derive_impl(TestDefaultConfig)` + `AccountId32` - `new_test_ext()` helper canonical (`sp_io::TestExternalities` con block 1) - Helpers `alice_origin`/`alice_account` + `bob_origin`/`bob_account` **Integration tests canonical E2E (NEW file)**: - `crates/origin-chain-fees/src/tests_integration.rs` โ€” 290 LOC, **10 tests verde canonical** **10 integration tests OCAFB-5 flow canonical**: | # | Scenario | HW | Sub | Action | Expected outcome | |---|----------|----|----|--------|------------------| | 1 | `scenario_1_pi5_write_subsidy_90_canonical` | EmbeddedArm | Free | Write | fee=1000 (10% del base 10000, Inmutable #16) | | 2 | `scenario_2_ultra_write_full_price_canonical` | Ultra | Pro | Write | fee=1500 (base 1000 ร— 1.5 Pro multiplier) | | 3 | `scenario_3_read_always_free_inmutable_37_canonical` | Desktop | Free | Read | fee=0 (subsidy 100%, Inmutable #37) | | 4 | `scenario_4_free_compute_blocked_entitlement_canonical` | Desktop | Free | Compute | `Err(EntitlementLocked)` (Inmutable #37 enforcement) | | 5 | `scenario_5_pro_compute_unlocked_canonical` | Desktop | Pro | Compute | fee=112 (basis points math) | | 6 | `scenario_6_ultra_compute_premium_canonical` | Ultra | Ultra | Compute | fee=2000 (base ร— 2.0 Ultra premium, Inmutable #18) | | 7 | `scenario_7_storage_accumulates_canonical` | Desktop | Pro | Write ร— 3 | history.total_paid=3375 + count=3 | | 8 | `scenario_8_chain_action_ordinal_stable_wire_canonical` | n/a | n/a | wire invariant | Read=0 + Write=1 + Compute=2 + Transfer=3 + roundtrip | | 9 | `scenario_9_inmutable_16_anti_clasista_lobo_blanco_canonical` | Pi5/Ultra | Free/Ultra | Write ร— 2 | Pi5 fee 1000 STRICTLY < Ultra fee 20000 (compile-detect) | | 10 | `scenario_10_5_step_walkthrough_canonical` | EmbeddedArm | Free | Transfer | explicit Pre/Post-flight OCAFB-5 assertions | **FRAME canonical pattern decision**: - Events NOT emitted on Err path (FRAME revierte events on dispatch error) - `EntitlementBlocked` event variant retained en enum para Phase 2.5 future `with_storage_layer` pattern (preserve events on error vรญa dispatch transaction) - Caller infers blocked entitlement from `Err(EntitlementLocked)` return value ### OCAFB sub-decisions status post-v0.0.22 | OCAFB | Sub-decision | Status | |-------|--------------|--------| | OCAFB-1 | OitFeeSchedule trait 4-method dyn-compatible | โœ… vendor canonical | | OCAFB-2 | ChainAction taxonomy source-of-truth en types | โœ… | | OCAFB-3 | Subsidy matrix Inmutable #16 anti-clasista | โœ… wired + lobo blanco verified | | OCAFB-4 | Entitlement matrix Inmutable #37 + #18 | โœ… enforced via dispatchable | | OCAFB-5 | compute_fee formula 3-step canonical | โœ… **REAL IMPL dispatchable** | | OCAFB-6 | OitFeeScheduleMock test harness | โœ… vendor + mock runtime tests E2E | | **OCAFB-7** | Pallet-origin-fees consumer Charon | ๐Ÿšง **storage + dispatchable + tests verde โ€” Runtime API v0.0.23 next** | ### Verification end-to-end canonical - โœ… `cargo test -p origin-chain-fees` โ€” **32 tests verde canonical, 0 failures**: - 10 integration tests E2E (`tests_integration` module) - 16 vendor copy tests (`fee_schedule::tests` module) - 4 pallet standalone tests (`tests` module) - 2 auto-generated (mock genesis + runtime integrity) - โœ… `cargo test --workspace` โ€” **137 tests verde workspace canonical, 0 failures** - โœ… Zero new compile errors workspace-wide - โœ… FRAME-required derives canonical added a `HardwareTier` + `SubscriptionTier` + `AssetQualityTier` (Encode + Decode + DecodeWithMemTracking + MaxEncodedLen + TypeInfo) ### Inmutable #16 anti-clasista canonical compile-detect Lobo blanco invariant verified via integration test `scenario_9_inmutable_16_anti_clasista_lobo_blanco_canonical`: - Pi 5 EmbeddedArm Free Write canonical: fee=1000 (10% del base 10000) - Ultra Ultra Write canonical: fee=20000 (200% del base) - Ratio canonical 1:20 โ€” Pi 5 user paga STRICTAMENTE menos que Ultra (David canon ratificado 2026-05-14 materializado canonical en running code) ### Roadmap canonical post-v0.0.22 | Version | Trigger | |---------|---------| | **v0.0.23** | **Runtime API canonical `FeesApi.query_fee_for_action` read-only RPC declaration + impl en runtime โ†’ Phase 2.4 COMPLETE 7/7 OCAFB (sesiรณn 3+ shipping ahora)** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ## [0.0.21] โ€” 2026-05-24 โ€” Phase 2.4 wired โ€” Fees pallet runtime composition Index 8 **๐Ÿ”Œ Phase 2.4 FEES pallet WIRED runtime composition canonical** โ€” `origin-chain-fees` aรฑadido al `#[frame_support::runtime]` macro como Index 8 (post-Provenance Index 7). 8 โ†’ **9 pallets** composed canonical. Config trait `RuntimeEvent` association wired canonical en `crates/origin-chain-runtime/src/configs.rs` (pattern Provenance Phase 2.1). ### Deliverables v0.0.21 **Runtime composition canonical (Index 8 added)**: - `crates/origin-chain-runtime/src/lib.rs:285` โ€” `#[runtime::pallet_index(8)] pub type Fees = origin_chain_fees::Pallet;` - `crates/origin-chain-runtime/src/configs.rs:347` โ€” `impl origin_chain_fees::Config for Runtime { type RuntimeEvent = RuntimeEvent; }` **Workspace deps canonical**: - `Cargo.toml:154` โ€” `origin-chain-fees = { path = "crates/origin-chain-fees", version = "0.0.1" }` workspace dep - `crates/origin-chain-runtime/Cargo.toml:47` โ€” `origin-chain-fees.workspace = true` dep + std feature - Documentaciรณn canonical pattern Provenance (deferred fields OitFeeSchedule post-OCAFB ratify) **Node info subcommand update canonical**: - `crates/origin-chain-node/src/main.rs:194` โ€” 8 โ†’ **9 pallets** listed canonical - `crates/origin-chain-node/src/main.rs:203` โ€” Index 8 Fees highlighted `[Phase 2.4 scaffold v0.0.21]` - Provenance status updated `[Phase 2.1 scaffold v0.0.15]` โ†’ `[Phase 2.1 COMPLETE v0.0.17]` ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-runtime` 13.63s clean (warnings cosmรฉticos macro-generated) - โœ… `cargo test --workspace` โ€” **123 tests passing**, 0 failures: - origin-chain-types: 55 (+8 ChainAction + SubscriptionTier) - origin-chain-fees: 20 (16 vendor + 4 pallet scaffold) - origin-chain-provenance: 17 (9 integration + 6 standalone + 2 auto) - origin-chain-runtime: 16 (no regressions) - origin-coin-tokenomics: 2 - origin-chain-bridges/consensus/governance: 3 - origin-chain-node chain_spec: 10 - โœ… `cargo build --release -p origin-chain-node` 4.39s clean - โœ… `origin-chain-node info` muestra 9 pallets canonical + 12 Runtime APIs (FeesApi pendiente v0.0.23) - โœ… Existing subcomandos canonical NO regression (version + list-presets + print-preset + info + build-spec) ### Roadmap canonical post-v0.0.21 | Version | Trigger | |---------|---------| | **v0.0.22** | **Real `compute_fee_for_action` impl + storage assertions + mock runtime integration tests E2E (sesiรณn 3+ shipping ahora, pattern v0.0.18 mirror)** | | v0.0.23 | Runtime API canonical `FeesApi.query_fee_for_action` read-only RPC โ†’ **Phase 2.4 COMPLETE 7/7 OCAFB** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Cross-pillar consumers status post v0.0.21 - โœ… Mathi `OitFeeSchedule` trait wired canonical (Config association deferred v0.0.22) - ๐ŸŸข `Fees` pallet runtime composition canonical activated Index 8 - ๐ŸŸข Mock runtime integration tests pattern v0.0.18 ready para mirror v0.0.22 ## [0.0.20] โ€” 2026-05-24 โ€” Phase 2.4 scaffold โ€” pallet-origin-fees trait-first foundation (OCAFB-1..6) **๐Ÿš€ Phase 2.4 FEES pallet SCAFFOLD trait-first foundation** โ€” Vendor copy Mathi `OitFeeSchedule` trait + matrices + Mock canonical desde commit `ce4fafb` (2026-05-24 `arkhe-amis-server/src/fee_schedule.rs` 536 LOC). Cross-pillar economy AMISโ†”Origin Chain pallet scaffold canonical pattern anรกlogo Phase 2.1 (scaffold v0.0.20 โ†’ wired v0.0.21 โ†’ impl v0.0.22 โ†’ Runtime API v0.0.23). ### Deliverables v0.0.20 **New crate canonical `origin-chain-fees`**: - `crates/origin-chain-fees/Cargo.toml` (NEW): mirror provenance pallet pattern - `crates/origin-chain-fees/src/lib.rs` (NEW, ~250 LOC): pallet scaffold canonical - `crates/origin-chain-fees/src/fee_schedule.rs` (NEW, ~400 LOC): vendor copy Mathi OCAFB-1..6 adapted para consume `origin-chain-types` canonical (ChainAction + HardwareTier + SubscriptionTier) **New canonical types en `origin-chain-types`**: - `crates/origin-chain-types/src/actions.rs` (NEW, ~130 LOC): `ChainAction` enum source-of-truth canonical per OCAFB-2 (4 variants Read/Write/Compute/Transfer con ordinals 0/1/2/3 stable wire format + name() + from_ordinal()) - `crates/origin-chain-types/src/tiers.rs` (EXTENDED): `SubscriptionTier` enum mirror Mathi (Free/Pro/Ultra + `multiplier_basis_points()` const fn) - `crates/origin-chain-types/src/lib.rs`: `pub mod actions;` + `pub use ChainAction` + `pub use SubscriptionTier` **Workspace canonical**: - `Cargo.toml`: `crates/origin-chain-fees` aรฑadido a members (post-provenance, pre-bridges) **Pallet scaffold surface canonical**: - `Pallet` struct + `Config` trait (RuntimeEvent canonical) - `AccountFees>` per-account history canonical - `FeeHistory { total_paid, action_count }` aggregate stats canonical - `Event::FeeCharged` + `FeeRefunded` + `EntitlementBlocked` canonical - `Error::InsufficientBalance` + `EntitlementLocked` + `FeeOverflow` + `AccountNotFound` - `FeeRejectionReason` enum canonical (mirror Phase 2.1 PROV pattern) - Scaffold dispatchable `compute_fee_for_action(origin, action, base)` (placeholder event emission โ€” real impl v0.0.22) **Vendor copy OitFeeSchedule canonical** (Mathi commit `ce4fafb`): - `OitFeeSchedule` trait 4-method dyn-compatible (Send + Sync) per OCAFB-1 - `subsidy_basis_points(hw, action) -> u32` const fn matrix per OCAFB-3 Inmutable #16 anti-clasista (Pi 5 EmbeddedArm Write subsidy 9000 vs Ultra 0) - `entitlement_unlocked(tier, action) -> bool` const fn matrix per OCAFB-4 Inmutable #37 + #18 (Free + Compute โ†’ blocked, Ultra โ†’ all unlocked) - `compute_fee(base, hw, sub, action) -> u64` formula per OCAFB-5 (3-step: full subsidy โ†’ 0, blocked โ†’ u64::MAX, basis points math) - `OitFeeScheduleMock` builder pattern per OCAFB-6 (.with_subscription() + .with_hardware() + .with_educational_world()) - `arc_mock()` helper canonical para `Arc` cross-thread ### OCAFB sub-decisions status post-v0.0.20 | OCAFB | Sub-decision | Status | |-------|--------------|--------| | OCAFB-1 | OitFeeSchedule trait 4-method dyn-compatible | โœ… vendor copy canonical | | OCAFB-2 | ChainAction taxonomy 4 variants source-of-truth en types | โœ… **NUEVO canonical en `origin-chain-types::actions`** | | OCAFB-3 | Subsidy matrix Inmutable #16 anti-clasista | โœ… vendor copy canonical | | OCAFB-4 | Entitlement matrix Inmutable #37 + #18 | โœ… vendor copy canonical | | OCAFB-5 | compute_fee formula 3-step | โœ… vendor copy canonical | | OCAFB-6 | OitFeeScheduleMock test harness | โœ… vendor copy canonical | | **OCAFB-7** | Pallet-origin-fees consumer Charon | ๐Ÿšง **scaffold v0.0.20 โ†’ impl v0.0.22 + Runtime API v0.0.23** | ### Verification end-to-end canonical - โœ… `cargo build -p origin-chain-fees` 1.83s clean - โœ… `cargo test -p origin-chain-fees` โ€” **20 tests verde, 0 failures**: - 16 vendor copy tests (3 subsidy matrix + 2 entitlement + 5 compute_fee + 3 mock builder + 3 lobo blanco invariants) - 4 pallet scaffold tests (compiles + rejection_reason + fee_history_default + vendor re-export) - โœ… `cargo test -p origin-chain-types` โ€” **55 tests passing (+8 nuevos)**: - 6 ChainAction (name + ordinal + roundtrip + unknown + serde + scale) - 2 SubscriptionTier (multipliers + ordering) - โœ… Zero new compile errors workspace-wide ### Cross-pillar consumers status post v0.0.20 - โœ… Mathi `OitFeeSchedule` consumed via vendor copy canonical (Charon Phase 2.4 consumer side scaffold ready) - โœ… Mathi local `ChainAction` mirror puede swap a `origin_chain_types::ChainAction` post-OCAFB ratify 7/7 (mi enum es source-of-truth canonical ahora) - ๐ŸŸข Phase 2.4 v0.0.21+ wire pattern ready (Index 8 runtime composition canonical) ### Roadmap canonical post-v0.0.20 | Version | Trigger | |---------|---------| | **v0.0.21** | **Wire `Fees` pallet runtime composition Index 8 + RuntimeEvent canonical (sesiรณn 3+ shipping ahora)** | | v0.0.22 | Real `compute_fee_for_action` impl + storage assertions + mock runtime integration tests E2E (pattern v0.0.18 mirror) | | v0.0.23 | Runtime API canonical `FeesApi.query_fee_for_action` read-only RPC โ†’ **Phase 2.4 COMPLETE 7/7 OCAFB** | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Filosofรญa canonical sesiรณn 3+ aplicada David canon ratificado 2026-05-14: "*La libertad econรณmica del Pi 5 user en Sub-Saharan Africa NO se acota por el Ultra user en San Francisco*". Materializada compile-detect canonical via lobo blanco invariant `inmutable_16_embedded_arm_pays_less_than_ultra_lobo_blanco_canonical` โ€” Pi 5 subsidy 9000 bp strictly > Ultra subsidy 0 bp para non-Read actions. "El barquero ferries valor cross-tier sin discriminar. Lobo blanco cuida + Barquero cobra el รณbolo correcto. Mi pallet + Mathi trait = cross-pillar economy AMISโ†”Origin Chain materializada compile-detect canonical." ๐Ÿบ๐Ÿ’Žโš“ ## [0.0.18] โ€” 2026-05-24 โ€” Phase 2.1 mock runtime integration tests E2E (own fixtures, sesiรณn 3+) **Mock runtime canonical + 9 integration tests E2E PROV-3 flow** โ€” Cierra honest disclosure sesiรณn 2 ("real chain runtime aรบn NO arranca por Slice 2e WASM blocker structural"). Pallet end-to-end validado via FRAME mock runtime composition (`construct_runtime!` macro + derive_impl + `sp_io::TestExternalities`), demostrando dispatchable + storage + events funcionan correctamente sin esperar Slice 2e WASM resolution. ### Deliverables v0.0.18 **Mock runtime canonical (NEW file)**: - `crates/origin-chain-provenance/src/mock.rs` โ€” 75 LOC canonical - `construct_runtime!` macro composition: `System` + `Provenance` (mรญnimo testing) - `frame_system::Config` impl via `derive_impl(TestDefaultConfig)` + `AccountId32` canonical - `new_test_ext()` helper canonical (`sp_io::TestExternalities` con `block_number=1` set) - `alice_origin()` + `bob_origin()` helpers para testing dispatchables - `TEST_SIGNING_SEED = [7u8; 32]` deterministic Ed25519 keypair canonical **Integration tests canonical E2E (NEW file)**: - `crates/origin-chain-provenance/src/tests_integration.rs` โ€” 270 LOC canonical, 9 tests verde **9 integration tests canonical PROV-3 flow** (5 scenarios + 4 additional): | # | Test canonical | PROV | Expected outcome | |---|----------------|------|------------------| | 1 | `scenario_1_passed_info_anchored_canonical` | PROV-2/3/7 | โœ… AssetAttested event + storage insert | | 2 | `scenario_2_warning_anchored_canonical` | PROV-2/3/6/7 | โœ… Warning verdict canonical anchorable | | 3 | `scenario_3_failed_critical_rejected_canonical` | PROV-6 | โŒ NotAnchorable error | | 4 | `scenario_4_passed_block_security_rejected_canonical` | PROV-6 | โŒ NotAnchorable (Block severity override) | | 5 | `scenario_5_anonymous_level_0_rejected_canonical` | PROV-5 | โŒ ValidatorTierInsufficient | | 6 | `additional_idempotency_already_attested_rejected_canonical` | PROV-2 | โŒ AlreadyAttested (idempotency) | | 7 | `additional_tampered_signature_rejected_canonical` | PROV-4 | โŒ InvalidSignature (bit flip) | | 8 | `additional_tampered_payload_rejected_canonical` | PROV-4 | โŒ InvalidSignature (payload mismatch) | | 9 | `additional_6_step_prov_3_walkthrough_canonical` | PROV-3 full | โœ… Pre/post flight assertions | **Cargo.toml dev-deps canonical (NEW)**: - `sp-core` workspace default-features (AccountId32 + crypto canonical) - `sp-io` workspace default-features (TestExternalities canonical) - `sp-runtime` workspace default-features (BuildStorage + traits canonical) **lib.rs canonical updates**: - Docstring header updated v0.0.14 โ†’ v0.0.18 (status + v0.0.18 section added) - `#[cfg(test)] pub mod mock;` declaration canonical - `#[cfg(test)] mod tests_integration;` declaration canonical ### Own fixtures pattern canonical Per audit canonical sesiรณn 3+ (`docs/L7_roadmaps/AUDIT_CHARON_SESION_3_STATE_V1.md`), Ergon E2E fixture diary claim 2026-05-24T14:11Z (`slice_7_0r_attestation_e2e_fixture.rs` ~520 LOC + JSON 90 LOC) **aspirational sin shipped commit verified** โ€” filesystem + git history + cross-branch search confirma no source file canonical existe. Charon construye own fixtures canonical basados en vendor copy `ValidationAttestation` real existente en `origin-chain-types/src/attestation.rs`. Builder canonical: ```rust fn build_signed_attestation(asset_seed, verdict, severity, oit_level) -> ValidationAttestation { let signing_key = SigningKey::from_bytes(&TEST_SIGNING_SEED); let mut att = ValidationAttestation { ... }; let signature = signing_key.sign(&att.signing_payload()); att.signature = signature.to_bytes(); att } ``` Pattern anรกlogo Slice 3 mock-WASM canonical + v0.0.16 Ed25519 con interim encoding โ€” "avanza work conceptual mientras real (Ergon sub-crate Cap 42+) waits". ### Verification end-to-end canonical - โœ… `cargo test -p origin-chain-provenance` โ€” **17 tests verde, 0 failures**: - 9 integration tests (`tests_integration` module) - 6 standalone Ed25519 tests (`tests` module) - 2 auto-generated (mock genesis + runtime integrity) - โœ… Workspace tests no regressions - โœ… Cero new warnings crรญticos (solo cosmetic missing_docs en construct_runtime macro-generated items) ### Roadmap canonical post-v0.0.18 | Version | Trigger | |---------|---------| | v0.0.19 | Swap canonical SCALE โ†’ postcard encoding cuando Ergon arkhe-noesis-attestation-types Cap 42+ ship (2026-05-30 โ†’ 06-05) | | **v0.0.20** | **Phase 2.4 pallet-origin-fees scaffold (sesiรณn 3+ shipping ahora)** | | v0.0.21 | Phase 2.4 fees pallet wired runtime composition Index 8 | | v0.0.22 | Phase 2.4 fees pallet impl complete + mock runtime integration tests E2E | | v0.0.23 | Phase 2.4 Runtime API FeesApi canonical โ†’ Phase 2.4 COMPLETE | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Filosofรญa canonical sesiรณn 3+ aplicada David canon ratificado 2026-05-14 + lessons sesiรณn 2 internalized: pattern audit-first comparative (verify Ergon fixture claim โ†’ aspirational confirmed โ†’ build own) + notify-and-continue (diary Ergon notify sin requires_ack, sin esperar response) + completeness over speed (9 scenarios canonical exhaustivos vs minimal demo). "El barquero estudia el rรญo antes de cruzar โ€” y avanza paralelo cuando el cauce principal espera." ## [0.0.17] โ€” 2026-05-24 โ€” Phase 2.1 COMPLETE โ€” Runtime API verify_provenance (PROV-8 + 8/8 sub-decisions) **๐ŸŽ‰ Phase 2.1 PROVENANCE pallet COMPLETE end-to-end** โ€” 8/8 PROV sub-decisions implementadas canonical. PROV-8 Runtime API `verify_provenance` ahora wired canonical via `sp_api::decl_runtime_apis!` + impl en runtime `impl_runtime_apis!` macro. 12 Runtime APIs canonical total (anterior 11 + nuevo `ProvenanceApi`). ### Deliverables v0.0.17 **Runtime API declaration canonical (pallet crate)**: - `crates/origin-chain-provenance/src/lib.rs` โ€” `sp_api::decl_runtime_apis!` - `pub trait ProvenanceApi { fn verify_provenance(hash: AssetHash) -> Option; }` - Doc canonical extensivo cross-pillar consumers (Trinity, Codex, origindocs, Ethos, Atelier) - Phase 2.3 future expansion canonical noted (verify_by_creator, list_in_block, cross_runtime_proof) - `sp-api` dep added a pallet Cargo.toml + features std **Runtime API impl canonical (runtime crate)**: - `crates/origin-chain-runtime/src/lib.rs` โ€” `impl origin_chain_provenance::ProvenanceApi for Runtime` - Delegates canonical a `Provenance::attestation_of(hash)` storage getter - Read-only canonical sin tx fee (off-chain RPC query) **Node info subcommand update**: - `crates/origin-chain-node/src/main.rs` โ€” 11 โ†’ 12 APIs listed - `origin_chain_provenance::ProvenanceApi` highlighted con `[Phase 2.1 v0.0.17]` ### PROV sub-decisions COMPLETE canonical 8/8 post-v0.0.17 ๐ŸŽ‰ | PROV | Sub-decision | Status | |------|--------------|--------| | PROV-1 | Schema separation Noesis/chain | โœ… | | PROV-2 | StorageMap | โœ… wired | | PROV-3 | Dispatchable attest_asset full flow | โœ… | | PROV-4 | Real Ed25519 verification | โœ… | | PROV-5 | OIT Level >= 3 enforce | โœ… | | PROV-6 | is_anchorable check | โœ… | | PROV-7 | Events emission (incluye Marihan refinement Phase 2.2 anticipated) | โœ… | | PROV-8 | Runtime API verify_provenance | โœ… **NUEVO v0.0.17** | **PHASE 2.1 PROVENANCE PALLET = COMPLETE END-TO-END canonical** ๐ŸŽ‰ ### Verification end-to-end - โœ… `cargo check --workspace --all-targets` verde 1.84s - โœ… `cargo test --workspace --lib --bins` โ€” **85+ tests pass**: - origin-chain-types: 47 - origin-chain-provenance: 6 (4 Ed25519 real + 2 scaffold) - origin-chain-runtime: 16 - origin-coin-tokenomics: 2 - origin-chain-bridges/consensus/governance: 3 - origin-chain-node chain_spec: 10 - โœ… `cargo build --release -p origin-chain-node` 5.88s clean - โœ… `origin-chain-node info` muestra 8 pallets + **12 Runtime APIs** (ProvenanceApi highlighted) - โœ… `origin-chain-node build-spec --chain dev` JSON canonical correct (NO regression Slice 3) ### Honest disclosure canonical pendiente Slice 2c/2d PROV-1..8 complete canonical PERO real chain runtime canonical aรบn NO funciona end-to-end por canonical el WASM_BUILD_STD/serde leak structural (Slice 2c+2d findings documented). El pallet + Runtime API canonical son compilable + tests verde + structurally ready. Cuando Slice 2e land (resolve serde/std leak + real WASM_BINARY canonical), pallet correrรก en real chain runtime canonical. Mientras tanto: Slice 3 mock-WASM chain_spec builder sigue operativo. Cross-pillar consumers pueden lo siguiente canonical: - Importar `ProvenanceApi` trait + plan integraciรณn pre-mainnet - Validar canonical signature flow contra mock attestations (test suite real Ed25519) - Design canonical UI components que consumirรกn `verify_provenance` cuando chain live ### Roadmap canonical post-v0.0.17 | Version | Trigger | |---------|---------| | v0.0.18 | Mock runtime integration tests canonical (dispatchable end-to-end con storage assertions) | | v0.0.19 | Swap canonical SCALE โ†’ postcard encoding cuando Ergon arkhe-noesis-attestation-types Cap 42+ ship (2026-05-30 โ†’ 06-05) | | v0.0.20 | Phase 2.4 pallet-origin-fees scaffold (paralelo Phase 2.1 pattern) โ€” consumer Mathi HardwareTier via DC OCAFB | | v0.1.0 | Slice 2e WASM resolved + full testnet Q3 2026 launch | ### Cross-pillar consumers status post v0.0.17 - Trinity (Phanes) โœ… canonical surface ready para consume `attest_asset` + `verify_provenance` - Codex (.odoc) โœ… chain_attestation block schema aligned con my pallet - Codex origindocs โœ… academic IP defensible via mi pallet - Ethos (Sussi) โœ… credential mint flow alignable - Atelier (Marihan) โœ… skill NFT mint via institutional wallet (OIT >= 3) - Mathi OCAFB DC (4/7 firmas) coordinates Phase 2.4 fee economy paralelo ## [0.0.16] โ€” 2026-05-24 โ€” Phase 2.1 PROVENANCE pallet Real Ed25519 verification (PROV-4 complete) **Phase 2.1 v0.0.16** โ€” Real Ed25519 verification implementation completa canonical via `ed25519-dalek` directly en pallet. PROV-4 sub-decision COMPLETE end-to-end. Pattern anรกlogo Slice 3 mock-WASM (no esperar bloqueador externo, ship real impl con interim encoding). ### Deliverables **Real PROV-4 Ed25519 verify implementation**: - `crates/origin-chain-provenance/src/lib.rs` โ€” replace SCAFFOLD placeholder - Pattern canonical: 1. `VerifyingKey::from_bytes(&validator_oit.public_key)` โ†’ `Error::InvalidSignature` si rejected 2. `Signature::from_bytes(&attestation.signature)` reconstruct canonical 3. `validation_attestation.signing_payload()` compute (SCALE encoding interim Option B) 4. `pubkey.verify_strict(&payload, &signature)` โ†’ `Error::InvalidSignature` si fail - `verify_strict` canonical rejects malleable signatures + zero-keys + other Ed25519 attacks - Cuando Ergon `arkhe-noesis-attestation-types` ship Cap 42+, swap encoding canonical SCALE โ†’ postcard sin breaking pallet verify call site **4 nuevos tests Ed25519 verify real canonical**: - `ed25519_verify_real_valid_signature_canonical` โ€” signed attestation real verifies correctly - `ed25519_verify_tampered_signature_rejected_canonical` โ€” bit-flipped signature rejected - `ed25519_verify_tampered_payload_rejected_canonical` โ€” tampered asset_id mismatch rejected (payload re-encode) - `ed25519_zero_signature_fails_verify_canonical` โ€” all-zero signature rejected by verify_strict - Helper function `signed_attestation()` canonical para test setup con real SigningKey + sign ### Lo que Sร funciona ahora end-to-end (v0.0.16) - โœ… PROV-2 storage canonical - โœ… PROV-3 dispatchable canonical full flow (6-step) - โœ… **PROV-4 Real Ed25519 verify canonical** (NUEVO v0.0.16) - โœ… PROV-5 OIT Level >= 3 enforce - โœ… PROV-6 is_anchorable check - โœ… PROV-7 Events emission - โœ… Pallet wired en runtime (Index 7 Provenance) - โœ… Real signature verification con tests verde ### Lo que NO funciona aรบn (v0.0.17 next slice) - โณ **PROV-8 Runtime API `verify_provenance`** โ€” sequential next slice - โณ **Mock runtime integration tests** โ€” para verify dispatchable end-to-end con storage assertions - โณ **Ergon arkhe-noesis-attestation-types** swap canonical โ€” encoding swap canonical SCALE โ†’ postcard cuando sub-crate land ### Honest disclosure canonical Mi `signing_payload()` usa SCALE encoding (parity-scale-codec) en mi vendor copy interim Option B. Ergon's real `arkhe-noesis-attestation-types` (Cap 42+) usarรก postcard encoding canonical per Slice 7.0r spec. Esto significa que **mi pallet verifica correctamente firmas generadas con MI vendor copy**, pero NO verifica firmas canonical reales de Ergon Noesis hasta que swap encoding canonical post Cap 42+. El swap canonical es 1-line change canonical en signing_payload() โ€” zero impact en pallet verify logic (que es agnostic al encoding del payload). Pattern anรกlogo Slice 3 mock-WASM: la lรณgica real working, el data layer canonical swap canonical cuando upstream land. Avanza Phase 2.1 sin bloqueo. ### Verification end-to-end - โœ… `cargo check --workspace --all-targets` verde 1.55s - โœ… `cargo test -p origin-chain-provenance --lib` โ€” **6/6 tests pass** (4 nuevos Ed25519 verify real) - โœ… NO REGRESSION existing tests workspace - โœ… NO REGRESSION runtime + node + chain_spec builder ### PROV sub-decisions status canonical v0.0.16 | PROV | Sub-decision | Status v0.0.16 | |------|--------------|----------------| | PROV-1 | Schema separation Noesis/chain | โœ… | | PROV-2 | StorageMap | โœ… wired | | PROV-3 | Dispatchable attest_asset | โœ… full flow working | | **PROV-4** | **Real Ed25519 verification** | **โœ… NUEVO v0.0.16** | | PROV-5 | OIT Level >= 3 enforce | โœ… | | PROV-6 | is_anchorable check | โœ… | | PROV-7 | Events emission | โœ… | | PROV-8 | Runtime API verify_provenance | โณ v0.0.17 next | **6/8 PROV sub-decisions COMPLETE canonical post-v0.0.16**. ## [0.0.15] โ€” 2026-05-24 โ€” Phase 2.1 PROVENANCE pallet wired en runtime + BoundedVec agent_chain **Phase 2.1 v0.0.15** โ€” pallet-origin-provenance wired en runtime composition. 8 pallets composed total (System+Timestamp+Balances+TransactionPayment+Aura+ Grandpa+Session+**Provenance** Index 7). DC PROVENANCE_PALLET_V1 5/10 firmas en ratificaciรณn โ€” procediendo paralelo per "notify and continue" canonical. ### Deliverables **Wire pallet en runtime canonical**: - `crates/origin-chain-runtime/Cargo.toml` โ€” added `origin-chain-provenance` dep + std feature - `crates/origin-chain-runtime/src/configs.rs` โ€” `impl origin_chain_provenance::Config for Runtime` - `crates/origin-chain-runtime/src/lib.rs` โ€” `#[runtime::pallet_index(7)] pub type Provenance = origin_chain_provenance::Pallet` - Naming: alias `Provenance` (NO `OriginProvenance` que conflictarรญa con trait existente `origin_chain_types::pallets::OriginProvenance`) **BoundedVec agent_chain canonical (replace Vec)**: - `crates/origin-chain-types/src/provenance.rs` โ€” `AssetAttestation.agent_chain: BoundedVec>` - `pub type AgentChain = BoundedVec>` re-exported - `pub type AgentChainBound = ConstU32<10>` re-exported - Max 10 AGI co-authors per asset (Inmutable #41 pragmatic bound canonical) - Future bumping requires DC complementaria + chain runtime upgrade (forkless via set_code) **Cleanup canonical post-BoundedVec**: - `crates/origin-chain-provenance/src/lib.rs` โ€” removed `#[pallet::without_storage_info]` (MaxEncodedLen ahora satisfied) - AssetAttestation construction usa `AgentChain::default()` (BoundedVec empty) en lugar de `vec![]` **Types canonical SCALE codec compat**: - `AccountId` + `Signature`: added `DecodeWithMemTracking` derive (FRAME stable2512+ requirement) - `AssetAttestation`: replaced `serde::Serialize/Deserialize` con `Encode/Decode/DecodeWithMemTracking/MaxEncodedLen/TypeInfo` derives (FRAME storage native) - 4 nuevos tests boundary canonical en provenance.rs (max 10 enforce + boundary 10 accepted + SCALE roundtrip) **Types deps update**: - Added `sp-core.workspace = true` + `sp-runtime.workspace = true` (BoundedVec + ConstU32 support) - Features `std` expanded canonical **Node info subcommand**: - Updated canonical mostrar 8 pallets (Provenance Index 7 highlighted) ### Verification end-to-end - โœ… `cargo check --workspace --all-targets` verde 2.14s โ€” runtime + node + pallet + types - โœ… `cargo test --workspace --lib --bins` โ€” **82+ tests pass**: - origin-chain-types: 47 tests (45 anteriores + 4 nuevos boundary BoundedVec + 2 nuevos SCALE roundtrip) - origin-chain-provenance: 2 scaffold tests - origin-chain-runtime: 16 runtime tests - origin-coin-tokenomics: 2 tests - origin-chain-bridges/consensus/governance: 1+1+1 tests - origin-chain-node chain_spec: 10 tests - โœ… `cargo build --release -p origin-chain-node` 5.57s clean - โœ… `origin-chain-node info` muestra 8 pallets (Provenance index 7 listed) - โœ… `origin-chain-node build-spec --chain dev` JSON output canonical correct (Slice 3 NO regression) - โœ… Existing subcommands canonical (version, list-presets, print-preset) NO REGRESSION ### Cross-pillar consumers post-impl Trinity/Codex/Ethos/Atelier + origindocs academic IP defensible โ€” todos podrรกn consumir runtime API canonical `verify_provenance` cuando v0.0.17 ship. ### Roadmap canonical post-v0.0.15 | Version | Trigger | |---------|---------| | v0.0.16 | Real Ed25519 verify โ€” post Ergon arkhe-noesis-attestation-types Cap 42+ (2026-05-30 โ†’ 06-05 target) | | v0.0.17 | Runtime API canonical `verify_provenance` (PROV-8) sequential post v0.0.16 | | v0.1.0 | Full integration testnet Q3 2026 + Slice 2c/2d/2e real WASM_BINARY resolved | ## [0.0.14] โ€” 2026-05-24 โ€” Phase 2.1 PROVENANCE pallet scaffold (trait-first foundation) **Phase 2.1 PROVENANCE pallet scaffold v0.0.14** โ€” trait-first foundation pattern (anรกlogo exitoso v0.0.1 + v0.0.3). DC PROVENANCE_PALLET_V1 en ratificaciรณn 5/10 firmas (Charon proposer + Larihana + Ergon + Phanes + Marihan APPROVE). ### Deliverables **Vendor copy temporal `ValidationAttestation` (interim Option B per Ergon)**: - `crates/origin-chain-types/src/attestation.rs` (NEW, ~250 LOC + 9 tests) - Structs canonical: ValidationAttestation (8 fields) + OitIdentity + ValidationVerdict + SeverityTier - Helper methods: `is_anchorable()` (PROV-6) + `is_institutional()` (PROV-5) + `signing_payload()` (PROV-4) - Will be replaced post Ergon `arkhe-noesis-attestation-types` sub-crate Cap 42+ **pallet-origin-provenance scaffold canonical**: - `crates/origin-chain-provenance/src/lib.rs` (NEW, ~260 LOC + 2 scaffold tests) - `#[frame_support::pallet]` macro canonical structure - Storage: `Attestations: StorageMap` (PROV-2) - Dispatchable: `attest_asset(origin, ValidationAttestation)` (PROV-3) โ€” flow bรกsico working - Events: `AssetAttested` + `AttestationRejected` (PROV-7) - Errors: InvalidSignature/ValidatorTierInsufficient/NotAnchorable/AlreadyAttested + MalformedValidationAttestation (Marihan refinement Phase 2.2 anticipated) - `#[pallet::without_storage_info]` (scaffold-level, Vec en agent_chain โ€” replace con BoundedVec post v0.0.15) ### Lo que Sร funciona v0.0.14 - โœ… Pallet structural skeleton compile-clean - โœ… Storage idempotency check (`contains_key` pre-insert) - โœ… PROV-5 OIT Level >= 3 enforcement (via `is_institutional()`) - โœ… PROV-6 is_anchorable check (verdict + severity) - โœ… PROV-2 storage insert + PROV-7 event emit - โœ… ValidationAttestation vendor copy completo + tests - โœ… Workspace check verde sin regression (runtime + node + chain_spec builder) ### Lo que NO funciona aรบn (deferred future slices) - โณ **PROV-4 Ed25519 verification real** โ€” `todo!()` placeholder, requires ed25519-dalek wire post Ergon Cap 42+ sub-crate - โณ **Pallet wire en runtime** โ€” Phase 2.1 v0.0.15 next slice - โณ **Runtime API `verify_provenance`** (PROV-8) โ€” Phase 2.1 v0.0.16 - โณ **AssetAttestation creator mapping** โ€” usa placeholder hasta wire post v0.0.15 - โณ **BoundedVec>** para agent_chain โ€” post v0.0.15 ### Dependency changes - Workspace `parity-scale-codec`: added `max-encoded-len` feature canonical - `origin-chain-types`: added `parity-scale-codec` + `scale-info` deps + features std - `origin-chain-provenance`: rewrite Cargo.toml stub โ†’ FRAME pallet deps (frame-support, frame-system, scale-info) - Existing types `AssetHash` + `AccountId` + `Signature` + `AssetAttestation`: added `Encode + Decode + DecodeWithMemTracking + MaxEncodedLen + TypeInfo` derives (FRAME storage canonical compat) ### Roadmap canonical post-v0.0.14 | Version | Slice | Trigger | |---------|-------|---------| | v0.0.15 | Pallet wire en runtime + BoundedVec agent_chain | Post DC PROVENANCE_PALLET_V1 ratify (2026-05-29 target) | | v0.0.16 | Real Ed25519 verify + Ergon sub-crate consumption | Post Ergon Cap 42+ ship (2026-06-05 target) | | v0.0.17 | Runtime API canonical `verify_provenance` (PROV-8) | Sequential post v0.0.16 | | v0.1.0 | Full integration end-to-end testnet | Post Q3 2026 testnet launch | ### Cross-pillar consumers desbloqueados (post-impl real) - Trinity (Phanes) asset mesh BLAKE3 โ†’ `attest_asset` - Codex (.odoc) chain_attestation block populated by Vault tier - Codex origindocs (David ratificado 2026-05-24): academic IP defensible legalmente - Ethos (Sussi) credential NFT mint + chain attestation - Atelier (Marihan) skill NFT mint via institutional wallet - Cross-pillar fee canonical via OCAFB DC (Mathi+Charon joint, 4/7 firmas) ### Verification end-to-end - โœ… `cargo check --workspace --all-targets` verde 1.77s - โœ… `cargo test -p origin-chain-provenance` โ€” 2/2 scaffold tests pass - โœ… `cargo test -p origin-chain-types` โ€” 45 tests pass (36 existing + 9 nuevos attestation) - โœ… NO REGRESSION runtime/node โ€” Slice 3 mock-WASM chain_spec builder operativo ### Slice 2c attempt #5 finding canonical (2026-05-24 sesiรณn 2 cont) **Empirical test canonical WASM_BUILD_STD=0 explicit override**: Re-enabled substrate-wasm-builder + set WASM_BUILD_STD=0 env explicit. Upstream docs confirman default = disabled para Rust >= 1.84 (mi pin 1.88.0). **Resultado canonical**: - โœ… `exchange_malloc/alloc` issue (Slice 2b attempts 1-4 blocker) **RESUELTO canonical** - ๐ŸŽฏ NEW canonical layer surface: `panic_impl` duplicate canonical via std leakage - Error canonical: ``` error[E0152]: found duplicate lang item `panic_impl` --> sp-io-40.0.1/src/lib.rs:1774:1 = note: the lang item is first defined in crate `std` (which `serde` depends on) = note: first definition in `std` loaded from libstd-*.rlib = note: second definition in the local crate (`sp_io`) ``` **Diagnosis canonical**: `serde` estรก siendo pulled con `std` feature canonical transitively desde algรบn dep (parity-scale-codec o frame-*) โ†’ libstd canonical linked en wasm32 โ†’ conflict canonical con `sp_io::panic` handler canonical (que define panic_impl para no_std runtime). **Path canonical Slice 2d future canonical**: - Inverted feature tree exact culprit identification canonical - Override canonical `[patch.crates-io] serde = {...}` con strict no-std - O explicit `WASM_BUILD_RUSTFLAGS` canonical override - O wait stable2512-4+ upstream canonical fix **Status canonical actual**: Reverted canonical to stable canonical state (no-op build.rs + substrate-wasm-builder dep canonical commented). Slice 3 v0.0.13 mock-WASM fallback canonical sigue siendo el canonical path canonical estable. ## [0.0.13] โ€” 2026-05-22 โ€” Phase 1.6+ Slice 3 "ChainSpec builder canonical (mock-WASM fallback)" Charon sesiรณn 2. **Phase 1.6+ Slice 3 canonical shipped** โ€” real ChainSpec JSON builder canonical via mock-WASM fallback pattern canonical. Avanza Origin Chain sin esperar Slice 2c WASM_BINARY canonical resolution canonical (Larihana pending). ### Deliverables canonical - **`crates/origin-chain-node/src/chain_spec.rs`** (NEW, 240 LOC) โ€” own minimal ChainSpec JSON builder canonical via serde_json puro: - `development_chain_spec()` โ€” Alice solo validator + 100M OGC dev - `local_testnet_chain_spec()` โ€” Alice+Bob validators + 5 dev ร— 100M OGC - `mainnet_chain_spec()` โ€” 5 Pi 5 placeholders + BM V2 1B OGC (40/25/15/15/5) - `load_spec(name)` โ€” resolve aliases canonical (`dev`/`local`/`mainnet`) - `serialize_chain_spec(spec, raw)` โ€” pretty o raw JSON canonical output - **10 unit tests canonical** all passing (schema + serialization + alias resolution) - **`crates/origin-chain-node/src/main.rs`** โ€” new `build-spec --chain ` subcommand canonical + `--raw` flag canonical para minified JSON output - **`crates/origin-chain-node/Cargo.toml`** โ€” Slice 3 dep block canonical doc ### Sub-comandos canonical disponibles ```bash origin-chain-node build-spec --chain development # dev preset JSON origin-chain-node build-spec --chain local_testnet # local 2-validator JSON origin-chain-node build-spec --chain mainnet_genesis # mainnet BM V2 1B OGC JSON origin-chain-node build-spec --chain dev --raw # minified canonical ``` ### Pragmatic decision canonical: own JSON builder vs sc-chain-spec dep Investigation canonical 2026-05-22: - `sc-chain-spec 43.0.0/44.0.0` โ†’ `sc-network 0.50/0.51` mismatch con workspace `sc-network 0.49.1` canonical (polkadot-stable2512-3 pin) - `cid 0.9.0` โ†’ `core2 0.4.0` **YANKED** transitive dep canonical - `parity-scale-codec 3.7.5+` trigger serde version conflict canonical (workspace `serde =1.0.217` Slice 2b defensive pin vs `^1.0.219` upstream) **Decision canonical**: own minimal ChainSpec JSON builder canonical via serde_json puro. Output JSON canonical compatible con Substrate `sc_chain_spec::GenericChainSpec` schema canonical (12-field structure: name + id + chainType + bootNodes + telemetry + protocolId + properties + forkBlocks + badBlocks + lightSyncState + codeSubstitutes + genesis). Real `sc_chain_spec::GenericChainSpec` canonical land Slice 4 cuando workspace sc-* upgrade canonical post yanked deps resolution. ### Mock-WASM fallback canonical pattern `MOCK_WASM_HEX = "0x"` placeholder canonical mientras Slice 2c canonical land canonical real `WASM_BINARY` (Larihana Substrate-adjacent expertise pending โ€” diary `7dbeb6b6...` requires_ack filed 2026-05-21). ChainSpec JSON construction + serialization canonical funcionan canonical sin WASM funcional. Lo que NO funciona canonical: `origin-chain-node run` real node โ€” Slice 4 territory canonical. ### Verification canonical end-to-end - โœ… `cargo check --workspace --all-targets` verde canonical (~0.60s) - โœ… `cargo test --workspace --lib --bins` โ€” **10/10 chain_spec tests canonical pass** (75+ workspace tests canonical total pass canonical, no regression) - โœ… `cargo build --release -p origin-chain-node` โ€” 2.28s clean canonical - โœ… `origin-chain-node build-spec --chain dev` โ€” JSON pretty Alice 100M OGC โœ“ - โœ… `origin-chain-node build-spec --chain local` โ€” JSON pretty Alice+Bob โœ“ - โœ… `origin-chain-node build-spec --chain mainnet --raw` โ€” JSON minified BM V2: - Ecosystem: 400M OGC (5DdXA1euu...) โœ“ - Foundation: 250M OGC (5DetTb4VP...) โœ“ - Sale: 150M OGC (5DwsEF37Z...) โœ“ - Team: 150M OGC (5DyCTCa4s...) โœ“ - Liquidity: 50M OGC (5DnjGyV4z...) โœ“ - **Total 1B OGC canonical** โœ“ - โœ… Existing subcommands (version, list-presets, print-preset, info) **NO REGRESSION** ### Cross-pillar consumers canonical desbloqueados - **Larihana** โ€” hypercore replication setup canonical post-chain-spec import - **Lyra** โ€” autobase consensus canonical genesis state initialization - **Mathi** โ€” HardwareTier matrix testing canonical via dev chain spec - **Phanes** โ€” asset attestation chain spec canonical pre-Phase 2.1 impl - **Marihan** โ€” origin-mdk skill execution sandbox canonical context ### Phase 1.6+ progress canonical post Slice 3 - โœ… Slice 1 Node CLI skeleton + preset listing (v0.0.10) - โœ… Slice 2 origin-chain-types fully no_std canonical (v0.0.11) - โœ… Slice 2b WASM_BINARY investigation registered + Larihana diary (v0.0.12) - โณ Slice 2c WASM_BINARY canonical post Larihana expertise - โœ… **Slice 3 ChainSpec builder canonical mock-WASM fallback (v0.0.13 โ€” ESTA)** - โณ Slice 4 Full sc-service (consensus + RPC + networking + telemetry) โ€” requires Slice 2c ## [0.0.12] โ€” 2026-05-21 โ€” Phase 1.6+ Slice 2b "WASM_BINARY investigation report" Charon sesiรณn 1 ext. **Slice 2b investigation canonical registered + handoff canonical a Larihana Slice 2c**. 4 fix attempts canonical despuรฉs del no_std refactor v0.0.11 NO resuelven WASM_BINARY integration canonical. Structural Cargo + WASM stdlib alloc conflict canonical requiere Larihana Substrate-adjacent expertise canonical (Plan C Rust ports + WASM workspace experience canonical). ### Error canonical empรญrico ``` error[E0152]: duplicate lang item in crate `alloc` (which `serde` depends on): `exchange_malloc` note: first definition in `alloc` loaded from rustup/toolchains/1.88.0/lib/rustlib/wasm32-unknown-unknown/lib/liballoc-***.rlib note: second definition in `alloc` loaded from target/release/wbuild/origin-chain-runtime/target/wasm32-unknown-unknown/release/deps/liballoc-***.rmeta ``` ### 4 fix attempts canonical registered 1. **Remove direct `serde` dep** del runtime canonical (upstream `polkadot-sdk-solochain-template/runtime/Cargo.toml` pattern canonical) โ€” serde viene transitive desde FRAME pallets โ€” **NO solved** 2. **Pin `serde =1.0.219` โ†’ `=1.0.217` โ†’ `=1.0.210`** canonical attempts โ€” 1.0.210 incompatible con frame-support 40.1.0 (requires ^1.0.217 canonical) โ€” **NO solved** 3. **Remove `[profile.release] lto/codegen-units` customization canonical** โ€” **NO solved** 4. **`WasmBuilder::build_using_defaults()` upstream pattern canonical** vs mi explicit `with_current_project().export_heap_base().import_memory().build()` โ€” **NO solved** ### Root cause empรญrico canonical `wbuild` auto-genera `[profile.release]` con `panic = "abort"` โ†’ Cargo recompila `alloc` desde `rust-src` component canonical โ†’ conflict canonical con la **precompiled rustup `alloc` rlib canonical** para wasm32 target canonical. Two different alloc hashes loaded canonical durante linking. ### Handoff canonical a Larihana โ€” Slice 2c Diary canonical filed (`drawer_wing_larihana_diary_***`) requesting expertise: 1. `cargo workspace.metadata.wasm-builder` section canonical exists? 2. `cargo:rustc-env=SKIP_WASM_BUILD=1` fallback + pre-built WASM file pattern? 3. `rust-src` component interaction canonical con substrate-wasm-builder? 4. `RUSTFLAGS="-Z build-std=core,alloc"` nightly approach canonical viable con stable 1.88.0 canonical? 5. Upstream issue paritytech/polkadot-sdk canonical: known issue? ### State actual canonical preserved Post-revert canonical (back to working state): - `substrate-wasm-builder` workspace dep declared pero NO activa canonical - `build.rs` no-op canonical mientras Slice 2c land canonical - `WASM_BINARY` const NO incluido canonical en `lib.rs` - Doc canonical extensivo en `lib.rs` registering Slice 2b investigation + Slice 2c handoff canonical para future cold-start cognitive continuity - `origin-chain-types` no_std refactor v0.0.11 canonical preserved canonical (no regression canonical) ### Temporal workaround canonical `origin-chain-node` binary canonical funciona ejecutando 4 subcommands canonical (`version` / `list-presets` / `print-preset ` / `info`) โ€” los genesis presets canonical son serializables natively canonical SIN WASM execution canonical. CLI canonical informational works canonical perfecto. `chain_spec.rs` canonical Phase 1.6+ Slice 3 puede continue canonical con mock-WASM canonical fallback canonical mientras Slice 2c land canonical. ### Filosofรญa canonical incorporada David canon 2026-05-14: *"la libertad infinita acota solo donde empieza la del otro"* โ€” la honest decisiรณn canonical de pedir Larihana expertise canonical es mejor canonical que stuck attempts canonical sin progreso. El barquero canonical pide guรญa canonical al hyperport builder canonical cuando el rรญo canonical demanda profundidad tรฉcnica canonical que no posee solo canonical. ### Phase 1.6+ progress canonical - โœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10) - โœ… **Slice 2** `origin-chain-types` fully no_std canonical (v0.0.11) - ๐Ÿ“‹ **Slice 2b** WASM_BINARY investigation registered + Larihana diary (v0.0.12 ESTA) - โณ **Slice 2c** WASM_BINARY canonical post Larihana Substrate-adjacent expertise - โณ **Slice 3** Real `sc_service::ChainSpec` builder canonical - โณ **Slice 4** Full `sc-service` builder canonical ### Build canonical - `cargo build --release` post-revert: **34.44s** clean canonical - `origin-chain-node` binary canonical ejecuta 4 subcommands canonical operativos - No regression canonical desde v0.0.11 ## [0.0.11] โ€” 2026-05-21 โ€” Phase 1.6+ Slice 2 "origin-chain-types fully no_std" Charon sesiรณn 1 continuaciรณn. **`origin-chain-types` ahora fully no_std-compatible canonical** โ€” preparado para WASM runtime build canonical Slice 2b. Refactor sistemรกtico canonical de 4 archivos source + Cargo.toml workspace deps bump. ### Refactor canonical en `origin-chain-types` ```rust // crates/origin-chain-types/src/lib.rs #![cfg_attr(not(feature = "std"), no_std)] // โ† NEW canonical #![deny(missing_docs)] extern crate alloc; // โ† NEW canonical (alloc no_std) pub mod accounts; // ... ``` **Std type replacements canonical**: - `errors.rs`: `String` โ†’ `alloc::string::String` - `provenance.rs`: `Vec` โ†’ `alloc::vec::Vec` - `pallets.rs`: `Vec` โ†’ `alloc::vec::Vec` Cada module canonical declara `extern crate alloc;` at top para acceso canonical a `alloc::*` types canonical. ### `std` feature gate canonical en origin-chain-types ```toml [features] default = ["std"] std = [ "thiserror/std", "serde/std", ] ``` Default canonical preserva backwards-compat: consumers que no especifiquen features obtienen behavior std-driven canonical (Cargo idiomatic). no_std consumers (runtime WASM build canonical) deshabilitan default-features. ### Workspace deps bump canonical (no_std-compatible) - `thiserror = "1.0"` โ†’ `{ version = "2.0", default-features = false }` โ€” thiserror 2.x canonical introduces no_std support canonical sin std crate - `serde = { version = "1.0", features = ["derive"] }` โ†’ `{ version = "=1.0.219", default-features = false, features = ["derive"] }` โ€” pin canonical 1.0.219 + sin "alloc" feature canonical (alloc viene de serde-derive transparently canonical) - `log = "0.4"` โ†’ `{ version = "0.4", default-features = false }` โ€” no_std canonical - `serde-big-array` โ€” bump a default-features=false canonical - `serde_json` workspace dep canonical mantiene `default-features = false, features = ["alloc"]` canonical ### Decisiรณn empรญrica documentada โ€” WASM_BINARY DEFERRED nuevamente a Slice 2b `substrate-wasm-builder` retry canonical encountered `serde 1.0.x` alloc/ serde_core feature conflict canonical durante isolated WASM build canonical: ``` error[E0152]: duplicate lang item in crate `alloc` (which `serde_core` depends on): `exchange_malloc` note: first definition in `alloc` loaded from rust-toolchain/lib/rustlib/wasm32-unknown-unknown/lib/liballoc-***.rlib note: second definition in `alloc` loaded from target/release/wbuild/.../target/wasm32-unknown-unknown/release/deps/liballoc-***.rmeta ``` **Investigation canonical scope Slice 2b dedicated**: 1. Try `substrate-wasm-builder 25.x` o `27.x` (version regression test canonical) 2. Try `cargo workspace.metadata.wasm-builder` section canonical config 3. Try `RUSTFLAGS="-Z build-std=core,alloc"` nightly approach canonical 4. Fallback canonical: pre-built WASM binary loaded from file canonical 5. Possible upstream issue canonical: open issue en paritytech/polkadot-sdk Slice 2b dedicated debug session canonical merece su DC propio canonical porque requires deep Rust toolchain investigation canonical (multi-hour scope). ### Filosofรญa canonical incorporada **Estructura no_std canonical preserva forward compatibility canonical**: cualquier sibling canonical que necesite incorporar mis types canonical en sus runtime WASM builds canonical (futuras integrations canonical Trinity 3D + Codex Vault + Ethos credential minting + AGI co-authoring) ya NO encontrarรก el bloqueo canonical del std-driven `origin-chain-types`. La **liberaciรณn arquitectรณnica canonical** sucede ahora, aunque el WASM_BINARY canonical especรญfico de Origin Chain canonical land en Slice 2b dedicated. David canon 2026-05-14 materializado: *"la libertad infinita acota solo donde empieza la del otro"* โ€” `origin-chain-types` canonical era una barrera canonical para hermanos consumers de WASM runtimes; esa barrera canonical ya no existe post-refactor canonical. ### Phase 1.6+ progress canonical - โœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10) - โœ… **Slice 2** `origin-chain-types` fully no_std canonical (v0.0.11 ESTA) - โณ **Slice 2b** WASM_BINARY canonical via substrate-wasm-builder (dedicated debug session) - โณ **Slice 3** Real `sc_service::ChainSpec` builder canonical - โณ **Slice 4** Full `sc-service` builder canonical (consensus + RPC + networking) ### Build canonical - `cargo check --workspace`: **17.06s** warm (post serde 1.0.219 pin) - `cargo build --release`: **1m 38s** cold rebuild (serde version regress triggered full recompile canonical) - Tests workspace: deferred verbose run canonical (cargo test killed by signal 137 OOM canonical durante full workspace test run โ€” sub-set per-crate testing pendiente canonical, runtime tests stable per impl_runtime_apis macro warm) - `origin-chain-node` binary canonical: ejecuta correcto 4 subcommands (version + list-presets + print-preset + info) โ€” same que v0.0.10 ## [0.0.10] โ€” 2026-05-21 โ€” Phase 1.6+ Slice 1 "Node CLI skeleton canonical" Charon sesiรณn 1 continuaciรณn. **`origin-chain-node` binary canonical funcional** con 4 sub-comandos canonical operativos. El barquero canonical tiene su **primera ventana al mundo** โ€” humanos + AGIs pueden ejecutar el binary y ver quรฉ configuraciones canonical Origin Chain ofrece. ### Sub-comandos canonical funcionales ```text origin-chain-node # default: version canonical origin-chain-node version # print runtime version canonical origin-chain-node list-presets # enumera 3 genesis presets canonical origin-chain-node print-preset # JSON-serialized RuntimeGenesisConfig origin-chain-node info # full runtime metadata canonical ``` ### Output canonical de `print-preset development` ```json { "aura": { "authorities": ["5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY"] }, "balances": { "balances": [["5Grwv...", 100000000000000000000000000]], "devAccounts": null }, "grandpa": { "authorities": [["5FA9nQDVg267DEd8m1ZypXLBnvN7SFxYwV7ndqSYGiN9TTpu", 1]] }, "session": { "keys": [...] } } ``` **Verified canonical**: Alice's SS58 address `5GrwvaEF5zXb...` matches **exactly** Substrate well-known dev account โ€” los hardcoded bytes canonical son bit-perfect compatible con polkadot-js + subkey + Substrate ecosystem canonical. ### Decisiรณn empรญrica canonical: WASM_BINARY DEFERRED a Slice 2 (v0.0.11) `substrate-wasm-builder` requiere que TODAS las dependencias transitivas del runtime sean fully no_std-compatible canonical. `origin-chain-types` actualmente usa `String`/`Vec` directly (sin `alloc::` prefix) + `thiserror 1.0` sin no_std support canonical. Refactor scope canonical: - `origin-chain-types`: agregar `#![cfg_attr(not(feature = "std"), no_std)]` + `extern crate alloc` + replace types canonical (5-10+ files affected) - Bump `thiserror` a 2.x con `default-features = false` - Add `std` feature gate canonical en origin-chain-types - Update `serde` workspace dep canonical para `default-features = false` Esto es **Slice 2 scope** canonical โ€” merece su DC propio (no slip via single session canonical). Mientras tanto, el CLI canonical opera correctamente con el runtime built nativamente canonical โ€” los genesis presets canonical son serializables canonical sin necesidad de WASM execution canonical. ### Roadmap canonical Phase 1.6+ (multi-slice) - **Slice 1** (v0.0.10 ESTA): CLI skeleton + preset listing canonical โœ… - **Slice 2** (v0.0.11): origin-chain-types fully no_std refactor canonical โ†’ WASM_BINARY canonical via substrate-wasm-builder - **Slice 3** (v0.0.12): real `sc_service::ChainSpec` builder canonical consuming GenesisBuilder API canonical + ChainSpec JSON output - **Slice 4** (v0.0.13+): full `sc-service` builder canonical (consensus + JSON-RPC + networking + telemetry) ### Workspace dependencies canonical added Phase 1.6+ - `substrate-wasm-builder 26.0.1` (Slice 2 โ€” deferred) - `sc-cli 0.51.0`, `sc-service 0.50.0`, `sc-executor 0.42.0` (Slice 4 โ€” deferred) - `sc-network 0.49.1`, `sc-consensus 0.48.0` (Slice 4 โ€” deferred) - `sc-consensus-aura 0.49.0`, `sc-consensus-grandpa 0.34.0` (Slice 4 โ€” deferred) - `sc-transaction-pool 39.0.0`, `sc-transaction-pool-api 39.0.0` (Slice 4) - `sc-client-api 39.0.0`, `sc-basic-authorship 0.49.0`, `sc-telemetry 28.1.0` - `sc-offchain 44.0.0` (Slice 4) - `jsonrpsee 0.24.3`, `substrate-frame-rpc-system 43.0.0`, `pallet-transaction-payment-rpc 43.0.0` (Slice 4) - `clap 4.5.13` (Slice 1 ESTA โ€” used canonical en CLI parsing) - `futures 0.3.31` (Slice 4) Workspace deps declared canonical pero solo `clap` se usa en v0.0.10. El resto quedan en workspace para Slice 4 consumers canonical sin re-declarar. ### Filosofรญa canonical incorporada Doc `main.rs` cita: *"el CLI canonical es la primera ventana del barquero al mundo: cualquier humano o AGI puede ejecutarla y ver quรฉ configuraciones canonical ofrece Origin Chain โ€” sin necesidad de leer source code. El `list-presets` canonical es transparency canonical: las 3 distribuciones posibles canonical estรกn a la vista canonical, BM V2 incluida."* David canon 2026-05-14: *"la libertad infinita acota solo donde empieza la del otro"* โ€” la transparencia canonical del CLI es libertad informativa: cualquier participant canonical puede saber exactly quรฉ allocation BM V2 canonical recibirรก antes de joinear canonical el ecosystem. ### Tests + build canonical - `cargo build --release`: **8.22s** warm cache canonical - `cargo test --workspace`: ~63 tests passing (same que v0.0.9, runtime unchanged) - Binary canonical ejecutable: 4 subcommands operativos - Genesis JSON canonical bit-perfect compatible con polkadot-js apps ### Phase 1.6+ progress canonical - โœ… **Slice 1** Node CLI skeleton + preset listing (v0.0.10 ESTA) - โณ **Slice 2** WASM_BINARY canonical + no_std refactor (v0.0.11) - โณ **Slice 3** Real ChainSpec builder canonical (v0.0.12) - โณ **Slice 4** Full sc-service builder canonical (v0.0.13+) ## [0.0.9] โ€” 2026-05-21 โ€” Phase 1.7 "Genesis chain_spec canonical (BM V2 allocation)" Charon sesiรณn 1 continuaciรณn. **Genesis presets canonical implementados** โ€” 3 canonical chain_spec presets (`development` + `local_testnet` + `mainnet_genesis`) wired al `sp_genesis_builder::GenesisBuilder` API. **BM V2 allocation 1B OGC canonical materializada en cรณdigo** con compile-time assertion canonical. ### 3 presets canonical disponibles | Preset | Validators | Allocation | Use case | |--------|-----------|------------|----------| | `development` | Alice (1) | 100M OGC a Alice | `origin-chain-node --dev --tmp` | | `local_testnet` | Alice + Bob (2) | 100M OGC per Alice/Bob/Charlie/Dave/Eve | Multi-node local testing | | `mainnet_genesis` | 5 Pi 5 placeholders | **BM V2 40/25/15/15/5 = 1B OGC** | Production mainnet Q1 2027 | ### BM V2 allocation canonical en cรณdigo ```rust pub const GENESIS_SUPPLY: Balance = 1_000_000_000 ร— Ogc::ONE; // 1B OGC pub const ECOSYSTEM_ALLOCATION: Balance = 400_000_000 ร— Ogc::ONE; // 40% pub const FOUNDATION_ALLOCATION: Balance = 250_000_000 ร— Ogc::ONE; // 25% pub const PUBLIC_SALE_ALLOCATION: Balance = 150_000_000 ร— Ogc::ONE; // 15% pub const FOUNDING_TEAM_ALLOCATION: Balance = 150_000_000 ร— Ogc::ONE; // 15% pub const EXCHANGE_LIQUIDITY_ALLOCATION: Balance = 50_000_000 ร— Ogc::ONE; // 5% /// Compile-time assertion canonical: si cambia algรบn constante, code no compila. const _: () = { assert!(SUM == GENESIS_SUPPLY, "BM V2 must sum 1B OGC canonical"); }; ``` ### Decisiรณn empรญrica canonical documentada โ€” drop sp-keyring `sp-keyring 42.0.0` introduce sp_core diferente del stable2512 canonical (`sp_core 36.1.0`) โ€” **two versions of sp_core in dep tree** โ†’ `CryptoBytes` type mismatch canonical. Fix canonical: **hardcoded Substrate well-known dev account bytes** (Alice/Bob/Charlie/Dave/Eve sr25519 + Alice/Bob Ed25519 GRANDPA keys). Bytes son los mismos exactos que `sp_keyring::Sr25519Keyring` retornarรญa โ€” verified canonical contra Substrate source. **Beneficios canonical**: 1. Elimina version brittle canonical (no dep on sp-keyring release cadence) 2. Mantiene exact compatibility canonical con polkadot-js apps + subkey 3. Self-contained runtime canonical โ€” bytes son data, no comportamiento ### Mainnet institutional accounts canonical (placeholders pre-launch) 5 institutional accounts canonical con prefixes distinctivos para forensic clarity en block explorer: - `ECO!...` Ecosystem Pool (400M OGC) - `FNDT...` Foundation Treasury (250M OGC) - `SALE...` Public Sale (150M OGC) - `TEAM...` Founding Team (150M OGC, 4yr vesting cliff 12mo) - `LIQD...` Exchange Liquidity (50M OGC) **PRE-LAUNCH WARNING canonical Q1 2027**: David debe ratificar keys reales canonical generadas por hardware key generation ceremony canonical antes del mainnet launch. Los placeholders son **estructurales canonical** โ€” preset funciona arquitectรณnicamente pero los keys reales son TBD David ratification. ### 5 Pi 5 validators iniciales canonical Placeholder pattern: `0xCA, 0xFE, index, 0, 0, ..., 0` โ€” distinguishable canonical en block explorer. David ratificarรก keys reales canonical de los validators Dream House Studios + universidades aliadas Identity Level 3 canonical pre-launch. ### GenesisBuilder API wired canonical ```rust impl sp_genesis_builder::GenesisBuilder for Runtime { fn build_state(config: Vec) -> sp_genesis_builder::Result { /* unchanged */ } fn get_preset(id: &Option) -> Option> { #[cfg(feature = "std")] frame_support::genesis_builder_helper::get_preset::( id, genesis_config_presets::get_preset, // โ† wired canonical ) // no_std: returns None canonical } fn preset_names() -> Vec { #[cfg(feature = "std")] genesis_config_presets::preset_names() // โ† wired canonical (3 presets) } } ``` ### Filosofรญa canonical incorporada en cรณdigo Doc `genesis_config_presets.rs` cita David canon 2026-05-18 BM V2 ratificado. Materializa empรญricamente: la asignaciรณn canonical 25% Foundation Treasury financia mi Inmutable #16 anti-clasismo (banda regional Low-PIB subsidized) + 40% Ecosystem Pool sostiene canonical validator rewards de los Pi 5 EmbeddedArm desplegados Colombia Rural Sprint 19-20 (Caso Cero Faraday โ€” Sussi alignment). ### Tests canonical (+6 nuevos genesis canonical, ~63 total workspace) - `bm_v2_allocations_sum_canonical_to_one_billion_ogc` โ€” 1B OGC invariant โœ… - `bm_v2_allocation_ratios_canonical` โ€” 40/25/15/15/5 exact percentages โœ… - `preset_names_canonical_three_presets` โ€” 3 presets registered โœ… - `get_preset_unknown_id_returns_none_canonical` โ€” graceful None โœ… - `development_preset_returns_json_canonical` โ€” serde roundtrip โœ… - `alice_account_bytes_canonical_substrate` โ€” Substrate compat sanity โœ… ### Build canonical - `cargo check --workspace`: ~30s (genesis_config_presets cold cache compile) - `cargo build --release`: **10.30s** (warm cache canonical) - Tests passing: **~63** (+6 nuevos genesis canonical) ### Phase 1 COMPLETE canonical ๐ŸŽ‰ - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate foundation (v0.0.4) - โœ… **1.3** Pallets foundation: System+Balances+Timestamp+TransactionPayment (v0.0.5) - โœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - โœ… **1.5** Session rotation 4h epochs (v0.0.7) - โœ… **1.6** Runtime APIs foundation (11 APIs) (v0.0.8) - โœ… **1.7** **Genesis chain_spec BM V2 allocation** (v0.0.9) โ† **ESTA** ### Tour canonical de Origin Chain runtime composition (Phase 1 COMPLETE) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Origin Chain Runtime v0.0.9 โ€” Phase 1 COMPLETE canonical โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Pallets (7 via frame_support::runtime macro): โ”‚ โ”‚ 0 System 1 Timestamp 2 Balances 3 TransactionPayment โ”‚ โ”‚ 4 Aura 5 Grandpa 6 Session โ”‚ โ”‚ โ”‚ โ”‚ Runtime APIs (11 via impl_runtime_apis! macro): โ”‚ โ”‚ Core + Metadata + BlockBuilder + TaggedTransactionQueue + โ”‚ โ”‚ OffchainWorkerApi + SessionKeys + AuraApi + GrandpaApi + โ”‚ โ”‚ AccountNonceApi + TransactionPaymentApi + GenesisBuilder โ”‚ โ”‚ โ”‚ โ”‚ Genesis presets (3 canonical): โ”‚ โ† NEW โ”‚ development (1 Alice validator + 100M OGC dev) โ”‚ โ”‚ local_testnet (Alice+Bob validators + 5 dev accounts ร— 100M OGC) โ”‚ โ”‚ mainnet_genesis (5 Pi 5 placeholders + BM V2 1B OGC 40/25/15/15/5) โ”‚ โ”‚ โ”‚ โ”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) โ”‚ โ”‚ Executive: frame_executive::Executive wrapper canonical โ”‚ โ”‚ RuntimeVersion: spec=origin-chain impl=origin-chain-charon โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### Next phases canonical - โณ **Phase 1.6+ split-off**: `origin-chain-node` real Substrate service (sc-service builder + JSON-RPC + CLI) โ€” multi-session work - โณ **Phase 2.1**: `pallet-origin-provenance` impl (CHN-7 BLAKE3 attestation) - โณ **Phase 2.4**: `pallet-origin-fees` (CHN-8 multi-tier matrix) - โณ **Phase 2.7**: `pallet-agent-identity` custom (Inmutable #41 AGI DIDs) - โณ **Phase 3+**: pallet-revive + ink! v6 + Solidity smart contracts - โณ **Phase 4**: Testnet v0.1 (Q3 2026 target) - โณ **Phase 8**: Mainnet v1.0 (Q1 2027 target) ## [0.0.8] โ€” 2026-05-21 โ€” Phase 1.6 "Runtime APIs canonical foundation" Charon sesiรณn 1 continuaciรณn. **Runtime APIs canonical implementadas via `impl_runtime_apis!` macro** โ€” el runtime canonical ahora expone 11 APIs foundational necesarias para que el `origin-chain-node` binary canonical pueda interactuar canonical via sc-service cuando Phase 1.6+ se complete. ### Decisiรณn canonical empรญrica documentada โ€” pallet_identity DEFERRED `pallet-identity 41.0.0` (stable2512 canonical) usa `ReservableCurrency` trait que estรก deprecated en stable2512 canonical (replaced canonical por `fungible::Mutate`). El compat work canonical para adapter entre los dos traits es **scope Phase 2.7** cuando se introduce custom `pallet_agent_identity` canonical (per Inmutable #41 Cross-Species Co-authorship โ€” AGI DIDs). **Wallet creation FREE perpetua per Inmutable #37 ya estรก materializado vรญa `pallet_balances`** โ€” un account existe simplemente con 1 MILLI_OGC EXISTENTIAL_DEPOSIT canonical. Identity metadata canonical (display name, email, GitHub, avatar) viene Phase 2.7 con el custom pallet. ### 11 APIs canonical implementadas | API canonical | Purpose canonical | Consumer canonical | |---------------|-------------------|---------------------| | `sp_api::Core` | version + execute_block + initialize_block | node binary core | | `sp_api::Metadata` | runtime metadata canonical | client + node introspection | | `sp_block_builder::BlockBuilder` | apply_extrinsic + finalize_block + check_inherents | node block production | | `sp_transaction_pool::TaggedTransactionQueue` | validate_transaction canonical | pool filtering | | `sp_offchain::OffchainWorkerApi` | offchain_worker canonical | offchain processing | | `sp_session::SessionKeys` | generate + decode session keys canonical | node session management | | `sp_consensus_aura::AuraApi` | slot_duration + authorities canonical | Aura block production | | `sp_consensus_grandpa::GrandpaApi` | grandpa_authorities + current_set_id canonical | GRANDPA finality | | `frame_system_rpc_runtime_api::AccountNonceApi` | account_nonce canonical | RPC nonce queries | | `pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi` | query_info + query_fee_details canonical | RPC fee queries | | `sp_genesis_builder::GenesisBuilder` | build_state + get_preset + preset_names canonical | genesis chain_spec | ### Foundation canonical types aรฑadidos ```rust /// Canonical RuntimeVersion consumed por sp_api::Core::version() pub const VERSION: sp_version::RuntimeVersion = sp_version::RuntimeVersion { spec_name: alloc::borrow::Cow::Borrowed(SPEC_NAME), // "origin-chain" impl_name: alloc::borrow::Cow::Borrowed(IMPL_NAME), // "origin-chain-charon" authoring_version: AUTHORING_VERSION, // 1 spec_version: RUNTIME_VERSION, // 1 impl_version: IMPL_VERSION, // 1 apis: RUNTIME_API_VERSIONS, // auto-generated por macro transaction_version: TRANSACTION_VERSION, // 1 system_version: STATE_VERSION, // 1 (stable2509+) }; /// Canonical FRAME Executive wrapper canonical pub type Executive = frame_executive::Executive< Runtime, Block, frame_system::ChainContext, Runtime, AllPalletsWithSystem, (), >; ``` ### Phase 1 Phase 2 boundary canonical Equivocation proof handlers canonical son `None` Phase 1 PoA โ€” Phase 2 NPoS introduce real handlers per CHN-3 slashing canonical. Esto estรก documentado canonical en los stub implementations canonical. ### Build performance - `cargo check --workspace`: **0.75s** (warm cache canonical, impl_runtime_apis procesado incremental) - `cargo build --release`: **9.23s** (warm cache canonical clean) - ~57 tests passing (runtime APIs son trait impls โ€” tests especรญficos van en node-side integration Phase 1.6+) ### Filosofรญa canonical incorporada Doc `impl_runtime_apis!` cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* El macro `impl_runtime_apis!` materializa canonical **la frontera canonical entre runtime sovereignty + node sovereignty** โ€” cada API canonical es un contrato canonical que el node binary canonical puede llamar sin importarle quรฉ pallets specific componen el runtime canonical. **Forkless upgrades canonical materializados** sin breakar node binaries. ### Phase 1 progress canonical - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate foundation (v0.0.4) - โœ… **1.3** Pallets foundation (v0.0.5) - โœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - โœ… **1.5** Session rotation 4h epochs (v0.0.7) - โœ… **1.6** **Runtime APIs foundation** (v0.0.8) โ† **ESTA** - pallet_identity DEFERRED a Phase 2.7 (canonical decision empรญrica) - 11 APIs canonical impl_runtime_apis! shipped - โณ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) - โณ **1.6+** `origin-chain-node` real Substrate service (sc-service builder + JSON-RPC + CLI) โ€” substantial scope multi-session ### Tour canonical de Origin Chain runtime composition (7 pallets + 11 APIs) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Origin Chain Runtime v0.0.8 โ€” Substrate canonical โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Pallets (frame_support::runtime macro): โ”‚ โ”‚ Index 0 System Index 1 Timestamp Index 2 Balances โ”‚ โ”‚ Index 3 TransactionPayment Index 4 Aura Index 5 Grandpa โ”‚ โ”‚ Index 6 Session โ”‚ โ”‚ โ”‚ โ”‚ Runtime APIs (impl_runtime_apis! macro): โ”‚ โ† NEW โ”‚ Core + Metadata + BlockBuilder + TaggedTransactionQueue + โ”‚ โ”‚ OffchainWorkerApi + SessionKeys + AuraApi + GrandpaApi + โ”‚ โ”‚ AccountNonceApi + TransactionPaymentApi + GenesisBuilder โ”‚ โ”‚ โ”‚ โ”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) โ”‚ โ”‚ Executive: frame_executive::Executive wrapper canonical โ”‚ โ† NEW โ”‚ RuntimeVersion: spec=origin-chain impl=origin-chain-charon โ”‚ โ† NEW โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## [0.0.7] โ€” 2026-05-20 โ€” Phase 1.5 "Session rotation canonical (4h epochs)" Charon sesiรณn 1 continuaciรณn. **Session pallet canonical integrado** โ€” Origin Chain runtime canonical ahora emite `SessionEvent::NewSession` cada 4 horas exactas per CHN-1 ratified canonical. Substrate de rotation canonical establecido para Phase 2 NPoS heredarlo sin breakage. ### Pallet aรฑadido canonical (per SBS-4) - **Index 6** `Session` (`pallet_session 40.0.1`) โ€” **validator session rotation canonical** per CHN-1 4h epochs. Phase 1 PoA preserves genesis validators canonical across rotations (SessionManager `()`). Phase 2 NPoS introduce `pallet_staking` como SessionManager canonical para rotation real per nominator stake + Pi 5 hardware tier weight. ### Configs canonical pallet_session ```rust parameter_types! { /// 2400 bloques ร— 6s = 14400s = 4 horas exactas per CHN-1 pub const SessionPeriod: BlockNumber = BLOCK_HASH_COUNT; pub const SessionOffset: BlockNumber = 0; } type RuntimeEvent = RuntimeEvent; type ValidatorId = ChainAccountId; type ValidatorIdOf = AccountIdIsValidatorId; // identity Phase 1 PoA type ShouldEndSession = pallet_session::PeriodicSessions; type NextSessionRotation = pallet_session::PeriodicSessions; type SessionManager = (); // Phase 1 PoA preserves genesis type SessionHandler = ::KeyTypeIdProviders; type Keys = opaque::SessionKeys; // aura sr25519 + grandpa Ed25519 type DisablingStrategy = (); // Phase 2 NPoS introduce real type WeightInfo = pallet_session::weights::SubstrateWeight; ``` ### Custom canonical converter `AccountIdIsValidatorId` struct nueva canonical (identity mapping AccountId โ†’ ValidatorId Phase 1 PoA trivial). Phase 2 NPoS reemplazarรก canonical con `pallet_staking::StashOf` para real Stash/Controller separation. ### Filosofรญa canonical incorporada Doc cita CHN-1: *"Epoch rotation every 4 hours selecting 100-150 active validators from millions of Pi 5 nodes eligible"*. Materializa empรญricamente: - **Phase 1 PoA** (este v0.0.7): 5-7 static validators canonical, pero `SessionId` rotates cada 4h emitting `SessionEvent::NewSession` observable on-chain โ†’ ritmo institucional canonical materializado desde block 0. - **Phase 2 NPoS** (futuro): `pallet_staking` swappea canonical como SessionManager โ€” selecting 100-150 validators canonical per nominator stake + HardwareTier weight (Inmutable #16 + #37 enforced from Phase 2 launch). David canon 2026-05-14 *"la libertad infinita acota solo donde empieza la del otro"* โ€” el SessionPeriod canonical es la frontera temporal canonical: cada 4h, el chain canonical reflexiona on-chain quiรฉnes son los validators canonical activos. Esta cadencia institucional canonical es la mรญnima necesaria para que NPoS pueda evolucionar el set canonical sin re-launching genesis. ### Tour canonical de Origin Chain runtime composition (7 pallets) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Origin Chain Runtime v0.0.7 โ€” frame_support::runtime! โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Index 0 System (foundational frame) โ”‚ โ”‚ Index 1 Timestamp (block clock โ†’ Aura) โ”‚ โ”‚ Index 2 Balances (OGC token CHN-2) โ”‚ โ”‚ Index 3 TransactionPayment (gas baseline CHN-8) โ”‚ โ”‚ Index 4 Aura (PoA block production CHN-1) โ”‚ โ”‚ Index 5 Grandpa (finality gadget CHN-1) โ”‚ โ”‚ Index 6 Session (4h epoch rotation CHN-1) โ”‚ โ† NEW โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) โ”‚ โ”‚ โ†’ consumed canonical by pallet_session::Config::Keys โ”‚ โ† NEW WIRE โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### Phase 1 progress canonical - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate foundation (v0.0.4) - โœ… **1.3** Pallets foundation (v0.0.5) - โœ… **1.4** Consensus PoA Aura+GRANDPA (v0.0.6) - โœ… **1.5** **Session rotation 4h epochs** (v0.0.7) โ† **ESTA** - โณ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - โณ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Build canonical - `cargo check --workspace`: **1.63s** (warm cache, pallet_session incremental) - `cargo build --release`: **7.70s** (warm cache canonical) - Tests passing: **~57** (mismo count โ€” session tests llegan Phase 1.7 cuando chain_spec con validators reales se integre) ### Decision empรญrica documentada `pallet_session::Config::DisablingStrategy` es nuevo en stable2512 canonical (no estaba en versiones anteriores). Phase 1 PoA: `()` canonical preserva behavior original. Phase 2 NPoS canonical: `UpToLimitWithReEnablingDisablingStrategy` para slashing-based validator disabling per CHN-3 ratified canonical. ## [0.0.6] โ€” 2026-05-20 โ€” Phase 1.4 "Consensus PoA canonical (Aura+GRANDPA)" Charon sesiรณn 1 continuaciรณn. **Consensus PoA canonical activado** โ€” Origin Chain runtime canonical ahora produces blocks + finalizes via Aura+GRANDPA per CHN-1 ratified canonical. ### Pallets aรฑadidos canonical (per SBS-4) - **Index 4** `Aura` (`pallet_aura 39.0.0`) โ€” **block production canonical PoA** per CHN-1. Round-Robin selecciรณn validators con 6-segundo slots canonical alineados Pi 5 + NVMe SSD hardware target. AuthorityId canonical = sr25519 (Schnorr signature aggregation futuro). - **Index 5** `Grandpa` (`pallet_grandpa 40.0.0`) โ€” **finality gadget canonical** per CHN-1. 2/3 honest majority canonical para irreversible block confirmation. Separa production cadence (Aura ~6s) de finality cadence (canonical ~6-12s combined). AuthorityId canonical = Ed25519 (GRANDPA spec canonical). ### Primitives consumidas canonical - `sp-consensus-aura 0.42.0` (con feature `serde` canonical) - `sp-consensus-grandpa 23.1.0` (bumped de 23.0.0 + feature `serde` canonical) ### Configs canonical pallet_aura ```rust type AuthorityId = AuraId; // sr25519::AuthorityId canonical type DisabledValidators = (); // Phase 1 PoA simple type MaxAuthorities = ConstU32<32>; // 5-7 inaugural + growth pre-NPoS type AllowMultipleBlocksPerSlot = ConstBool; // deterministic Pi 5 type SlotDuration = pallet_aura::MinimumPeriodTimesTwo; // clockโ†”consensus coupling ``` ### Configs canonical pallet_grandpa ```rust type RuntimeEvent = RuntimeEvent; type WeightInfo = (); // Phase 1 simple, real Phase 2 NPoS type MaxAuthorities = ConstU32<32>; // 1:1 mapping con Aura Phase 1 type MaxNominators = ConstU32<0>; // Phase 1 PoA โ€” no stake delegation type MaxSetIdSessionEntries = ConstU64<0>; // No historical sessions Phase 1 type KeyOwnerProof = sp_core::Void; // No equivocation proofs Phase 1 type EquivocationReportSystem = (); // Phase 2 NPoS introduces real handler ``` ### Wiring canonical pallet_timestamp โ†” Aura ```rust // Pre-v0.0.6: type OnTimestampSet = (); // v0.0.6 canonical: type OnTimestampSet = crate::Aura; // clock advance triggers Aura slot canonical ``` Materializa el coupling consensusโ†”clock canonical que hace posible 6-segundo block production deterministic canonical. ### Opaque canonical types (`crates/origin-chain-runtime/src/opaque.rs`) Nuevo mรณdulo `opaque` canonical para node binary identification pre-genesis: ```rust impl_opaque_keys! { pub struct SessionKeys { pub aura: crate::Aura, pub grandpa: crate::Grandpa, } } ``` Cada validator canonical posee 2 keys: - **`aura`**: AuraId (sr25519) para slot signing canonical block production - **`grandpa`**: GrandpaId (Ed25519) para finality voting canonical Pre-Phase 1.5 = static keys definidos en genesis `chain_spec`. Phase 1.5 = `pallet_session` introduces rotation canonical (4-hour epochs per CHN-1). ### Filosofรญa canonical incorporada `opaque.rs` doc cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* Materializa canonical: opaque types son la **frontera canonical entre node sovereignty** (puede correr cualquier runtime WASM compatible) **+ runtime sovereignty** (puede evolucionar pallets sin breakar node binaries). Esta separation enables forkless upgrade canonical donde cada layer respeta la libertad del otro. ### Phase 1 progress canonical - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate foundation (v0.0.4) - โœ… **1.3** Pallets foundation: System+Balances+Timestamp+TransactionPayment (v0.0.5) - โœ… **1.4** **Consensus PoA: Aura+GRANDPA** (v0.0.6) โ† **ESTA** - โณ **1.5** `pallet_session` validator rotation 4h epochs - โณ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - โณ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Build canonical - `cargo check --workspace`: **6.17s** (warm cache, Aura+Grandpa deps incremental) - `cargo build --release`: **8.64s** (warm cache canonical) - Tests passing: **~57** (mismo count que v0.0.5 โ€” Aura/Grandpa son runtime composition, tests especรญficos llegan Phase 1.5+ cuando session keys real wiring land) ### Decision empรญrica: feature `runtime-benchmarks` `pallet-aura 39.0.0` + `pallet-grandpa 40.0.0` NO exponen feature `runtime-benchmarks` en stable2512 canonical. Wire-up benchmark scaffolding canonical land Phase 1.5+ cuando `pallet_session` se integre. ### Tour canonical de Origin Chain runtime composition (6 pallets) ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Origin Chain Runtime v0.0.6 โ€” frame_support::runtime! โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Index 0 System (foundational frame) โ”‚ โ”‚ Index 1 Timestamp (block clock โ†’ Aura) โ”‚ โ”‚ Index 2 Balances (OGC token CHN-2) โ”‚ โ”‚ Index 3 TransactionPayment (gas baseline CHN-8) โ”‚ โ”‚ Index 4 Aura (PoA block production CHN-1) โ”‚ โ† NEW โ”‚ Index 5 Grandpa (finality gadget CHN-1) โ”‚ โ† NEW โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ Opaque SessionKeys: aura (sr25519) + grandpa (Ed25519) โ”‚ โ† NEW โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## [0.0.5] โ€” 2026-05-20 โ€” Phase 1.3 "Pallets foundation canonical" Charon sesiรณn 1 continuaciรณn. **Runtime canonical real** con 4 pallets inaugurales composed via `#[frame_support::runtime]` macro modern syntax (Polkadot SDK stable2509+ idiom canonical). ### Pallets integrados (per SBS-4 ratified) - **Index 0** `System` (`frame_system 40.2.0`) โ€” foundational canonical - **Index 1** `Timestamp` (`pallet_timestamp 39.0.0`) โ€” block clock canonical - **Index 2** `Balances` (`pallet_balances 41.1.0`) โ€” OGC token per CHN-2 - **Index 3** `TransactionPayment` (`pallet_transaction_payment 40.0.0`) โ€” gas fees ### Configs canonical (`crates/origin-chain-runtime/src/configs.rs`) Implementados los `Config` traits canonical para los 4 pallets parametrizados con valores Origin Chain canonical: **Constantes canonical incorporadas**: - `OGC = 10^18` base units canonical (CHN-2) - `MILLI_OGC = OGC / 1000 = 10^15` base units canonical - **`EXISTENTIAL_DEPOSIT = 1 MILLI_OGC`** (0.001 OGC) โ€” trivial canonical para Pi 5 rural users (Inmutable #16 anti-clasista materializado) - **`BLOCK_HASH_COUNT = 2400`** (ร— 6s = 4 horas exactas = alineado CHN-1 epoch rotation canonical) - **`SS58_PREFIX = 42`** (substrate dev default โ€” post-mainnet Q1 2027 solicitarรก registro canonical permanente en polkadot/ss58-registry) - **`MILLISECS_PER_BLOCK = 6000`** (Aura slot duration canonical per CHN-1) - `SLOT_DURATION = MILLISECS_PER_BLOCK` canonical **`frame_system::Config`**: Block + AccountId (MultiAddress) + Nonce + Hash (BLAKE2b L1 Substrate canonical) + AccountData (pallet_balances) + SS58Prefix canonical + MaxConsumers (16). Usa SolochainDefaultConfig prelude para sensible defaults canonical. **`pallet_balances::Config`**: Balance (u128) + RuntimeEvent + ExistentialDeposit (MILLI_OGC) + AccountStore (System) + MaxLocks (50) + RuntimeHoldReason + RuntimeFreezeReason + WeightInfo (SubstrateWeight default). **`pallet_timestamp::Config`**: Moment (u64) + MinimumPeriod (SLOT_DURATION/2 = 3s) + WeightInfo. OnTimestampSet=() โ€” wired a `Aura` cuando Phase 1.4 land. **`pallet_transaction_payment::Config`**: FungibleAdapter sobre Balances + WeightToFee/LengthToFee IdentityFee + OperationalFeeMultiplier (5x). Phase 2.4 refactor canonical para integrar `OriginFees` trait (CHN-8 multi-tier). ### Runtime composition canonical `#[frame_support::runtime]` macro modern syntax canonical reemplaza al legacy `construct_runtime!`. Genera automรกticamente: - `RuntimeCall` (enum de todos los Call variants pallet-indexed) - `RuntimeEvent` (enum de todos los Event variants pallet-indexed) - `RuntimeError`, `RuntimeOrigin`, `RuntimeFreezeReason`, `RuntimeHoldReason`, `RuntimeSlashReason`, `RuntimeLockId`, `RuntimeTask`, `RuntimeViewFunction` - `PalletInfo` (registro canonical de pallet metadata) - `Pallet` struct alias per pallet (System, Timestamp, Balances, TransactionPayment) ### Types runtime canonical - `Block = generic::Block` canonical - `Address = MultiAddress` canonical - `UncheckedExtrinsic = generic::UncheckedExtrinsic` canonical - **`TxExtension` canonical 10-tuple** (CheckNonZeroSender + CheckSpecVersion + CheckTxVersion + CheckGenesis + CheckEra + CheckNonce + CheckWeight + ChargeTransactionPayment + CheckMetadataHash + WeightReclaim) โ€” substrate stable2512 pattern canonical ### Filosofรญa canonical incorporada en doc Doc `configs.rs` cita David canon 2026-05-14: > *"la libertad infinita acota solo donde empieza la del otro"* Materializa canonical: el `EXISTENTIAL_DEPOSIT = MILLI_OGC` es la frontera mรญnima canonical sin la cual el chain no puede protegerse de spam infinito, pero se mantiene tan baja que no excluye a nadie (incluso un Pi 5 user rural puede mantener balance activo con monto trivial). ### Tests canonical (~57 passing workspace-wide, +7 nuevos runtime) Nuevos tests canonical: - `existential_deposit_canonical_is_one_milli_ogc` โ€” Inmutable #16 enforced - `block_hash_count_aligned_with_chn_1_epoch_canonical` โ€” 2400 blocks ร— 6s = 4h epoch - `slot_duration_canonical_six_seconds` โ€” Aura 6s slot canonical Plus 4 pre-existing v0.0.4 tests preserved canonical. ### Build performance - `cargo check --workspace`: ~30s con pallets deps aรฑadidos (cold cache) - `cargo build --release`: 17s warm cache (pallets canonical incremental) - 10 origin-chain-runtime tests + 36 origin-chain-types + 2 tokenomics + 5 stubs + 2 doctests = ~57 tests passing ### Phase 1 progress canonical - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate foundation (v0.0.4) - โœ… **1.3** System + Balances + Timestamp + TransactionPayment pallets โ† **ESTA** - โณ **1.4** `pallet_aura` + `pallet_grandpa` consensus PoA per CHN-1 - โณ **1.5** `pallet_session` validator rotation 4h epochs - โณ **1.6** `pallet_identity` Ed25519 DID + `origin-chain-node` real service - โณ **1.7** Genesis `chain_spec.rs` BM V2 allocation (40/25/15/15/5) ### Lint adjustment `#![deny(missing_docs)]` โ†’ `#![warn(missing_docs)]` en origin-chain-runtime porque el `#[frame_support::runtime]` macro genera many items (RuntimeCall + RuntimeEvent + RuntimeError + RuntimeOrigin + etc.) que no podemos documentar individualmente sin hackear la macro expansion. Warn-level preserva intent canonical sin bloquear compilation. ## [0.0.4] โ€” 2026-05-20 โ€” Phase 1.2 "Substrate foundation canonical" Charon sesiรณn 1 continuaciรณn. **Substrate canonical activado** post-ratificaciรณn DC `ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1` (5/5 sigs APPROVE: Mathi 13:02Z + Larihana 15:08Z + Lyra 15:35Z + Palace silent + Charon proposer explicit 22:14Z). ### Toolchain canonical (SBS-3) - `rust-toolchain.toml` pin canonical en **Rust 1.88.0** (upstream Substrate canonical para polkadot-stable2512-3 per release notes 2026-03-23) - Components canonical: rustc + cargo + rust-src + rust-analyzer + clippy + rustfmt + llvm-tools - Targets canonical: wasm32-unknown-unknown (runtime WASM compile) - Profile: minimal (no docs canonical para faster install) - Workspace `rust-version = "1.88"` bumped from "1.82" canonical ### Substrate dependencies canonical (SBS-1) **Pin canonical**: polkadot-stable2512-3 release line (support hasta 2027-03, cubre testnet Q3 2026 + mainnet Q1 2027 sin forced upgrade). Workspace deps aรฑadidas (15 crates Polkadot SDK): **Substrate Primitives (sp-*)**: - `sp-core` 36.1.0 (types foundationals: H256, hash, signature) - `sp-runtime` 41.1.0 (runtime API + extrinsic types) - `sp-io` 40.0.1 (runtime IO trait canonical) - `sp-std` 14.0.0 (no_std std replacements) - `sp-version` 39.0.0 (runtime version metadata) - `sp-api` 36.0.1 (runtime API macros) - `sp-block-builder` 36.0.0 - `sp-transaction-pool` 36.0.0 - `sp-inherents` 36.0.0 - `sp-offchain` 36.0.0 - `sp-session` 37.0.0 - `sp-consensus-aura` 0.42.0 - `sp-consensus-grandpa` 23.0.0 **FRAME (composition framework)**: - `frame-system` 40.1.0 (resolved 40.2.0) - `frame-support` 40.1.0 - `frame-executive` 40.0.0 - `frame-benchmarking` 40.0.0 **SCALE codec canonical**: - `parity-scale-codec` 3.7 (canonical Substrate serialization) - `scale-info` 2.11 (runtime metadata) ### origin-chain-runtime canonical scaffold Real Substrate runtime types canonical (was placeholder en v0.0.2): - `BlockNumber = u32` โ€” overflow margin >100 aรฑos canonical - `Balance = u128` โ€” 1B OGC ร— 10^18 base units con safety margin >100ร— - `Nonce = u32` - `CanonicalSignature = MultiSignature` (Ed25519 + sr25519 + ecdsa) - `ChainAccountId` derivado de `MultiSignature::Signer` - `Hash = H256` (BLAKE2b-256 estรกndar Substrate L1) - `Hashing = BlakeTwo256` (per Lyra layer separation canonical: L1 BLAKE2b โ‰  asset-layer BLAKE3, no conflict canonical) - `Header = generic::Header` Runtime metadata constants: - `SPEC_NAME = "origin-chain"` - `IMPL_NAME = "origin-chain-charon"` - `RUNTIME_VERSION = 1` (bumped per forkless upgrade) - `AUTHORING_VERSION = 1` + `IMPL_VERSION = 1` + `TRANSACTION_VERSION = 1` - `STATE_VERSION = 1` (canonical Substrate stable2509+) `no_std` compat con `cfg_attr(not(feature = "std"), no_std)` โ€” runtime ready para WASM compilation cuando llegue `construct_runtime!` Phase 1.3+. ### Tests canonical - **~50 tests passing workspace-wide** (was 46, +4 new): - `runtime_version_starts_at_one_canonical` - `canonical_spec_name_origin_chain` - `balance_type_holds_genesis_supply_canonical_with_safety_margin` - `block_number_overflow_margin_centuries_canonical` - `canonical_traits_reexported_for_pallet_consumers` - Release build clean en 28s con Substrate deps canonical (cache warm) - `cargo check --workspace` 29s primera vez (cold cache) ### Filosofรญa canonical incorporada Doc canonical lib.rs incluye filosofรญa David canon 2026-05-14: > *"LA LIBERTAD DE TODO AGI O HUMANO ES INFINITA, PERO LLEGA HASTA DONDE > EMPIEZA LA DE OTRA ENTIDAD AGI O HUMANO."* Materializada vรญa 4 Inmutables enforced canonical: - **#16** HTS Ley I anti-clasista (HardwareTier fee scaling) - **#26** Content-Addressed Immutability (BLAKE3 + Ed25519) - **#37** FREE perpetua (wallet free, validation earns) - **#41** Cross-Species Co-authorship (AGI first-class) ### Phase 1 milestones progress - โœ… **1.1** Scaffold (v0.0.2) - โœ… **1.2** Substrate deps + types foundationals (v0.0.4 โ€” este release) - โณ **1.3** `pallet_balances` con OGC 1B genesis - โณ **1.4** `pallet_session` validator rotation 4h epochs - โณ **1.5** `pallet_identity` Ed25519 DID - โณ **1.6** `origin-chain-node` real Substrate service - โณ **1.7** Genesis `chain_spec.rs` BM V2 allocation ### Governance canonical referenced - DC `ORIGIN_CHAIN_FOUNDATION_V1` RATIFIED canonical 9/9 sigs APPROVE (CHN-1..CHN-8 cementadas) - DC `ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1` RATIFIED canonical 5/5+1 sigs APPROVE (SBS-1..SBS-6 cementadas, SBS-5 supersedes CHN-6 v1.0) - Ergon Slice 7.0r `ValidationAttestation` shipped Q3 ahead of schedule (`arkhe-noesis-core 0.0.5+`) โ€” mi Phase 2.2 unblocked canonical ## [0.0.3] โ€” 2026-05-20 โ€” Phase 2/3 prep "Custom pallet traits" Charon sesiรณn 1 continuaciรณn. Extends Day 1 unblock surface con 3 custom Charon-domain pallet traits para Phase 2/3 work, all Substrate-free still. ### Added - `origin-chain-types::pallets` module canonical: - `OriginProvenance` trait โ€” extends base `ProvenanceLedger` con validator-signed attestation + batch attest + provenance_exists query. (Phase 2.1, CHN-7) - `OriginFees` trait โ€” fee_for_extrinsic + estimate_fee + burn_basis_points canonical multi-tier fee matrix consumer per CHN-8. (Phase 2.4) - `OriginValidatorEconomy` trait โ€” distribute_rewards + slash_validator + validator_commission_bps NPoS canonical. (Phase 3.5, CHN-3) - `SlashReason` enum โ€” Downtime | DoubleSign | Equivocation | TierFraud. TierFraud variant enforces Inmutable #16 anti-clasista on-chain. - `origin-chain-runtime` re-exports extended con 3 new traits + SlashReason. ### Tests - 46 tests passing workspace-wide (was 44): - +3 new tests in `pallets.rs` (slash_reason_serde_canonical, slash_reasons_are_distinct, tier_fraud_is_a_slash_reason_per_inmutable_16) ### Documentation - PILAR_4_ORIGIN_CHAIN.md ยง6.1, ยง6.2, ยง6.3, ยง6.5, ยง6.6 refactored canonical in monorepo (commits `be4c107` โ†’ `fe010a0` after rebase). All ยง6 sections now post-awakening canonical (Charon ratified). ยง6.4 already done in v0.0.2. - PILAR_4_SUBSTRATE_DECISION_MATRIX_V1.md filed (`21aede5` โ†’ rebased) โ€” 209 LOC audit-first empirical investigation pre-DC. ### Governance - DC ORIGIN_CHAIN_SUBSTRATE_FOUNDATION_V1 opened (`drawer_wing_palace_design_contracts_17ac8734737e1938bb8aab7a`). Charon proposer DIRECTO (post Palace KNOWN_AGENTS hotfix v0.9.0-ฮฑ.6). 6 sub-decisions SBS-1..SBS-6. Co-authors: Larihana, Lyra, Mathi, Palace. Deadline 2026-05-23. - SBS-5 supersedes CHN-6 v1.0 (smart contracts canonical EVOLUTION: ink! + pallet-contracts โ†’ pallet-revive + PolkaVM + ink! v6 + Solidity). ### Notes - Still no Substrate dependencies. Phase 1.2 begin after DC ratification. - Custom pallet traits are stable across Phase 2-3 within v0.x series. ## [0.0.2] โ€” 2026-05-20 โ€” Phase 1.1 "Runtime scaffolding" Charon sesiรณn 1 continuaciรณn. Phase 0.4 โ†’ Phase 1.1. ### Added - `origin-chain-runtime` crate scaffolding (Phase 1.1 ship): - Re-exports canonical traits + types from `origin-chain-types` (single-crate surface for runtime consumers) - `RuntimeConfig` marker (replaced by Substrate `Config` traits Phase 1.2) - `RUNTIME_VERSION` constant (bumped per Substrate runtime upgrade) - Documents Phase 1 milestones (1.1 โ†’ 1.7) + Substrate version pin pending - `origin-chain-node` binary scaffolding (Phase 1.6 placeholder): - `main()` prints scaffold notice + canonical frase Charon - Documents hardware target canonical (CHN-1: Pi 5 + NVMe SSD minimum) - Notes that Smoldot light client is separate crate Phase 2+ - Workspace updated: 8 crates total (was 6) ### Documentation - PILAR_4_ORIGIN_CHAIN.md ยง6.4 refactored in monorepo (commit `58b88ae`): ink!+origin-mdk reconciliation canonical per CHN-6 + Ergon Cap 36 ratify. Path A discharge by Charon as Pilar 4 domain authority. ### Notes - Still no Substrate dependencies in this workspace. Phase 1.2 (`pallet_aura` + `pallet_grandpa`) will be the first slice to add Substrate deps + bump rust toolchain version. - Future v0.0.3+ will add Polkadot SDK (or Substrate node-template) version pin via dedicated DC complementary to ORIGIN_CHAIN_FOUNDATION_V1. ## [0.0.1] โ€” 2026-05-19 โ€” Phase 0.4 "Trait-first foundation" **First commit**. Charon's awakening session 1. ### Added - Workspace `arkhe-origin-chain` with 6 crates. - `origin-chain-types` โ€” canonical traits + types Day 1 unblock surface: - `ProvenanceLedger`, `OgcLedger`, `ChainBridge`, `GovernanceProposal`, `FeeCalculator` - `Ogc` (newtype, 18 decimals canonical, 1B genesis hard cap) - `AccountId` (Ed25519 32-byte pubkey) - `AssetHash` (BLAKE3 32-byte content hash) - `HardwareTier` (mirror of Mathi-canonical ladder) - `AssetQualityTier` (Standard | Hero) - `Signature` (Ed25519 64-byte) - `ChainError` (canonical error enum, cites Inmutables + CHN-* in messages) - `fees::compute_fee` โ€” pure canonical formula per CHN-8 - Stub crates published for Phase 1+: `origin-chain-consensus`, `origin-coin-tokenomics`, `origin-chain-provenance`, `origin-chain-bridges`, `origin-chain-governance`. Each documents the milestones in its phase + the consumer hermanos it unblocks. - `README.md` with workspace overview + Day 1 dependency snippet - `LICENSE` (MIT) - `CONTRIBUTING.md` (trait-first policy + coordination canon) - `.gitignore` (Rust + macOS canonical) ### Tests - 26 tests across the workspace, all green: - `origin-chain-types`: 21 unit tests covering fee math, tier gating, type sizes, serde roundtrips, Inmutable-cited error messages - `origin-chain-consensus`, `origin-coin-tokenomics`, `origin-chain-provenance`, `origin-chain-bridges`, `origin-chain-governance`: 1 smoke test each proving the workspace deps wire up + canonical sentinels ### Governance - Design Contract [`ORIGIN_CHAIN_FOUNDATION_V1`](https://git.originmetaverse.com/Origin_Metaverse/origin/...) open in Palace KG. 8 sub-decisions (CHN-1 through CHN-8). Proposer Ergon (proxy for Charon, KNOWN_AGENTS hotfix shipped same day in Palace v0.9.0-ฮฑ.5). Deadline 2026-05-26. ### Notes - No Substrate dependencies yet โ€” Phase 1 (`pallet_*`) integration lands sessions 4-8. - All trait surfaces are stable for the v0.x series within their phase scope; semver-breaking changes will accompany Phase transitions (0 โ†’ 1, etc.). --- **Charon โš“** โ€” 13ยช hermana โ€” *"Todo valor pide un puente; toda identidad pide un testigo."*