diff --git a/docs/freeholders/anchor-preview.md b/docs/freeholders/anchor-preview.md new file mode 100644 index 0000000..1669816 --- /dev/null +++ b/docs/freeholders/anchor-preview.md @@ -0,0 +1,47 @@ +# Anchor Preview + +An **Anchor** (REQ-023) is the fourth and highest tier of the +[Partner Spectrum](partner-spectrum.md) (REQ-018) — the first **institutional** +Partner tier. Anchors are coming in v0.3 P4. This page previews what an Anchor +is and what the v0.3 skeleton will deliver; the runtime behavior is deferred +to v0.4+. + +## What an Anchor is + +An Anchor is a Partner that carries an **AnchorCredential**: a jurisdiction +(e.g., "EU-MiCA"), a custody provider, and a set of attestation references. +The Anchor tier is how the jurisdiction-light mesh interfaces with +jurisdiction-bound institutional actors without becoming them. An Anchor +holds a credential; the [Holder](../nomads/reach.md) still holds their +[Stash](../nomads/stash.md). The mesh says **custody**, **compliance**, and +**jurisdiction** — never the legacy institutional words banned by the +[lexicon](../shared/lexicon.md). + +## What is coming in v0.3 P4 + +v0.3 P4 (REQ-023) extends `x/partner` with the `AnchorCredential` struct and +a `Partner.AnchorCredential()` accessor (returns nil for non-Anchor tiers). +The four-tier `PartnerTier` enum (Op, Master Op, Pier, Anchor) is **unchanged** +— v0.3 adds Anchor-specific fields, not a new tier. The custody-provider-id +field is a by-ID-string reference to `x/hub` (the Hub API, coming in v0.3 P5), +empty in the v0.3 skeleton because the Hub is not live until P5/v0.4. This is +the P4→P5 ordering edge: `x/hub` in P5 references Anchor partner-ids from P4. + +## Why Anchors matter to a Freeholder + +A Freeholder engaging an Anchor gets a Partner with a verifiable credential +and a custody/compliance relationship — useful for cross-jurisdiction routes +and institutional [bonds](bonds.md). The Anchor's [Standing](standing.md) and +attestations are visible so the Freeholder can verify the Anchor is real +before opening a [Window](../nomads/window.md). See +[Partner Spectrum](partner-spectrum.md) for the other three tiers, and +[Councils & Voice](councils-voice.md) for how the Mesh Council can suspend or +revoke an Anchor. + +## What v0.3 does not deliver + +The v0.3 skeleton is types + tests only (D-035): the `AnchorCredential` +struct, the accessor, and the `ListAnchors()` keeper alias. Live custody +routing, attestation verification, and the Hub API integration are v0.4+ +runtime work. See [Components](../reference/components.md) for the full +module map. \ No newline at end of file diff --git a/docs/freeholders/bonds.md b/docs/freeholders/bonds.md new file mode 100644 index 0000000..e7fffe1 --- /dev/null +++ b/docs/freeholders/bonds.md @@ -0,0 +1,46 @@ +# Bonds + +A **Mesh Bond** (REQ-021, vision §17) is a [Stand](stands-guilds.md)-issued +instrument that pays a **coupon** to its holder over a term and returns the +principal at maturity. The coupon is bounded by a **mission-locked cap and +floor**: 8% upper cap, 0% floor (locked `CouponCapBps = 800` and +`CouponFloorBps = 0` in `x/bond`). The cap exists so the mesh cannot become a +speculative market; the floor exists so the coupon cannot go negative. + +## The coupon clamp + +The coupon is clamped to `[floor, cap]` by the `Clamp` helper in `x/bond` +(same shape as the [Fee Covenant](../shared/six-principles.md) clamp): a +coupon above 8% is reduced to 8%; a coupon below 0% is raised to 0%; a coupon +in range is unchanged. The clamp is a tested invariant: below floor → floor, +above cap → cap, in range → unchanged. This is the Mission Lock's expression +in the capital layer. + +## Why a cap + +OpenYield is a public-good mesh for **real production**, not a speculation +engine. An uncapped coupon market would let a Stand offer arbitrarily high +coupons to attract Bread, turning the mesh into a speculative race. The 8% +cap bounds the coupon at a level consistent with real production returns, and +the [Mission Lock](councils-voice.md) makes the cap non-amendable — no Council +vote can raise it. The mesh says **coupon** and **real return**, never the +passive-value or standalone-metric words banned by the +[lexicon](../shared/lexicon.md). + +## The bond lifecycle + +A Bond moves through five states (locked `BondStatus` enum in `x/bond`): +Issued → Active → Matured, with Defaulted and Repaid as terminal paths. The +issuer is a Stand (referenced by stand-id); the principal is denominated in +[Grain](../shared/bread-scale.md). The bond market is governed by the +[Stand Council](councils-voice.md) for the issuing Stand. + +## Coming in v0.3 P5 + +v0.3 P5 (REQ-026) extends the bond market with **Growth Bonds** (a coupon that +grows over the term, still clamped to the 8% cap) and a **secondary market** +(Buy/Sell orders on issued bonds). The 8% / 0% consts are unchanged — the +D-028 regression firewall guarantees v0.3 cannot alter the v0.2 mission-locked +ceiling. See [Partner Spectrum](partner-spectrum.md) for how Partners relate +to the bond market, and [Anchor Preview](anchor-preview.md) for the +institutional tier. \ No newline at end of file diff --git a/docs/freeholders/councils-voice.md b/docs/freeholders/councils-voice.md new file mode 100644 index 0000000..4980187 --- /dev/null +++ b/docs/freeholders/councils-voice.md @@ -0,0 +1,48 @@ +# Councils & Voice + +OpenYield governs itself through three **Councils** (REQ-011, vision §19): +the Mesh Council, the Guild Council, and the Stand Council. Each Freeholder +participates through the Councils, weighted by **Voice** — a multi-source +weight that combines [Stash](../nomads/stash.md), [Standing](standing.md), +Vouch, Freeholder status, and Guild membership. The **Mission Lock** makes +the covenant non-amendable: no Council can vote to change the +[Six Principles](../shared/six-principles.md) or the fee covenant. + +## The three Councils + +- **Mesh Council** — the mesh-wide Council. Handles protocol-level proposals + that affect every Holder and every [Stand](stands-guilds.md). +- **Guild Council** — the Council for [Guilds](stands-guilds.md). Handles + Guild-scope proposals, referenced by guild-id. +- **Stand Council** — the Council for a single Stand, referenced by stand-id. + Handles Stand-scope proposals (e.g., Vault use, [Bond](bonds.md) issuance). + +The three-tier shape mirrors the three [Storage Pools](../shared/storage-pools.md): +a Council exists at each layer where custody is held. + +## Multi-source Voice + +Voice is not one number. It is a weighted tally from five sources (locked as +the `VoiceSource` enum in `x/council`): Stash, Standing, Vouch, Freeholder, +and Guild. A Freeholder with high [Standing](standing.md) and a long-held +Stash carries more Voice than a freshly-minted one. The +[TallyResult](../reference/components.md) mirrors the Cosmos SDK `x/gov` +shape so the governance layer can wire to standard tooling. The VoteOption +enum is **Yes / No / Abstain** — there is no "no-with-veto", an anti-greed +design choice. + +## Mission Lock + +The Mission Lock is a locked `const bool` in `x/council` +(`MissionLockAmendable = false`). The Six Principles, the fee covenant +(ceiling 0.1% / floor 0.01% / 1-Grain minimum), and the bond coupon cap +([8% / 0%](bonds.md)) cannot be amended by any Council vote. This is the +firewall that keeps the mesh a public good: governance can act *within* the +covenant, never *on* the covenant. + +## How a Freeholder participates + +A Freeholder submits or votes on proposals in the Councils they belong to. +Each vote is weighted by multi-source Voice; the tally follows `x/gov` +semantics. See [Bonds](bonds.md) for the coupon cap the Mission Lock protects, +and [Standing](standing.md) for the metric that weights a Freeholder's Voice. \ No newline at end of file diff --git a/docs/freeholders/index.md b/docs/freeholders/index.md new file mode 100644 index 0000000..8c88b85 --- /dev/null +++ b/docs/freeholders/index.md @@ -0,0 +1,39 @@ +# Freeholders + +A **Freeholder** is a Holder who has earned all four Freeholder signals (REQ-005): +a 90-day [Stash](../nomads/stash.md), a [Standing](standing.md) threshold of +4.5★ or higher in 3 categories, the Capital signal, and the Vouch signal. A +Freeholder is the active participant in the OpenYield mesh — they sit in +[Stands & Guilds](stands-guilds.md), vote in the three +[Councils & Voice](councils-voice.md), issue [Bonds](bonds.md), and relate to +the four-tier [Partner Spectrum](partner-spectrum.md). + +## The four signals + +The signals are the gate to Freeholder participation. They are deliberately +heterogeneous — no single input can be pumped — so the path resists gaming: + +- [Signals](signals.md) — the four Freeholder signals (REQ-005): 90-day Stash, + 4.5★+ in 3 categories, Capital, Vouch. +- [Standing](standing.md) — the Bayesian anti-gaming formula (REQ-006): + Bayesian prior + time-decay + diversity + voucher-weighting − slashes. +- [Stands & Guilds](stands-guilds.md) — the nine Stand types (REQ-016) and + Guilds with free Hand-Passes (REQ-017). +- [Councils & Voice](councils-voice.md) — the three Councils and the + non-amendable Mission Lock (REQ-011). +- [Bonds](bonds.md) — the Mesh Bond Market, the 8% coupon cap / 0% floor + (REQ-021). +- [Partner Spectrum](partner-spectrum.md) — the four Partner tiers (REQ-018): + Op, Master Op, Pier, Anchor. +- [Anchor Preview](anchor-preview.md) — the first institutional Partner tier + (REQ-023), coming in v0.3 P4. + +## What a Freeholder does + +A Freeholder is a Holder who has crossed the signal gate. From there the mesh +opens: a Freeholder joins a [Stand](stands-guilds.md) (or forms a Guild), votes +in the [Councils](councils-voice.md) with multi-source Voice, issues or holds +[Bonds](bonds.md) under the mission-locked coupon cap, and engages the +[Partner Spectrum](partner-spectrum.md) — including the Anchor tier coming in +v0.3. The covenant is the same for every audience; the Freeholder pages +describe how it shows up in governance and capital. \ No newline at end of file diff --git a/docs/freeholders/partner-spectrum.md b/docs/freeholders/partner-spectrum.md new file mode 100644 index 0000000..03a61d2 --- /dev/null +++ b/docs/freeholders/partner-spectrum.md @@ -0,0 +1,42 @@ +# Partner Spectrum + +OpenYield defines a four-tier **Partner Spectrum** (REQ-018, vision §13): +**Op**, **Master Op**, **Pier**, and **Anchor**. Partners are the external +actors a [Freeholder](index.md) interacts with through the mesh — service +operators, route providers, and institutional bridges. The four tiers are +locked as the `PartnerTier` enum in `x/partner` (exactly 4, regression-tested). + +## The four tiers + +- **Op** — a service operator. Runs a service a Holder uses through a + [Window](../nomads/window.md) (e.g., a Maps provider). The lightest tier. +- **Master Op** — a senior operator. Coordinates multiple Ops or runs a + higher-trust service. "Op" is the safe short form; the full word is not + used as a standalone term. +- **Pier** — a routing Partner. Connects the mesh to external venues (e.g., + a DEX or an off-mesh service) and sources [Forex](../reference/components.md) + rates. Piers route; they do not custody Holder value. +- **Anchor** — the first institutional Partner tier. Carries a credential + (jurisdiction, custody provider, attestations). See + [Anchor Preview](anchor-preview.md) for what is coming in v0.3 P4. + +## How Freeholders relate to Partners + +A Freeholder authorizes a Partner to act on their behalf through a scoped, +time-limited, revocable [Window](../nomads/window.md) — never by handing over +custody. The Partner holds a credential, not the Holder's [Stash](../nomads/stash.md). +A Partner's [Standing](standing.md) is visible so a Freeholder can choose an +operator with a real history over a freshly-spun-up alternative (see +[Maps & Pay](../nomads/maps-pay.md)). + +## Partner status + +Each Partner has a status (locked `PartnerStatus` enum in `x/partner`): +Pending → Active, with Suspended and Revoked as the governance paths. The +[Mesh Council](councils-voice.md) can suspend or revoke a Partner. The four +tiers and the status enum are unchanged by v0.3 — v0.3 only *extends* +`x/partner` with the Anchor credential shape (REQ-023), not a new tier. + +See [Storage Pools](../shared/storage-pools.md) for why the mesh says +"Holder" and "Reach" rather than the legacy custodial words, and +[Bonds](bonds.md) for the coupon market a Partner may route to. \ No newline at end of file diff --git a/docs/freeholders/signals.md b/docs/freeholders/signals.md new file mode 100644 index 0000000..db28193 --- /dev/null +++ b/docs/freeholders/signals.md @@ -0,0 +1,45 @@ +# The Four Freeholder Signals + +The four **Freeholder signals** (REQ-005) are the gate to Freeholder +participation. A [Holder](../nomads/reach.md) who earns all four becomes a +[Freeholder](index.md) — eligible to join [Stands & Guilds](stands-guilds.md), +vote in the [Councils](councils-voice.md), and issue [Bonds](bonds.md). The +signals are deliberately heterogeneous: no single input can be pumped, so the +path resists gaming. + +## 1. The 90-day Stash + +A Holder must hold a [Stash](../nomads/stash.md) continuously for 90 days +(REQ-014). The signal is about **continuity, not size** — a small Stash held +steadily counts. This filters out transient actors who spin up a position to +game a vote and then leave. See [Storage Pools](../shared/storage-pools.md) +for the three-pool model. + +## 2. Standing of 4.5★ or higher in 3 categories + +A Holder must earn a [Standing](standing.md) of 4.5★ or higher in **three +distinct categories** (REQ-006). The diversity requirement is the anti-gaming +core: a Holder cannot reach Freeholder by repeating the same action with the +same counterparty. Three categories force breadth. + +## 3. Capital + +The Capital signal requires a Holder to hold a meaningful amount of +[Bread](../shared/bread-scale.md) in their Stash. The threshold is set by the +mesh [Councils](councils-voice.md) and is a stake, not a fee: the Holder keeps +the Bread. Capital aligns the Freeholder's stake with the mesh. + +## 4. Vouch + +The Vouch signal requires another Freeholder to vouch for the Holder. A +vouch from a high-[Standing](standing.md) Freeholder carries more weight +(voucher-weighting), so a single colluding vouch cannot carry a Holder over +the gate. Vouch is the social signal that ties the other three together. + +## Why four, not one + +Each signal covers a different attack surface: continuity (90-day Stash), +breadth (3-category Standing), stake (Capital), and social trust (Vouch). +Earning all four is the proof a Holder is a participant, not a transient +gamer. See [Standing](standing.md) for the anti-gaming math, and +[Bonds](bonds.md) for what a Freeholder can do once the signals are earned. \ No newline at end of file diff --git a/docs/freeholders/standing.md b/docs/freeholders/standing.md new file mode 100644 index 0000000..d5d0347 --- /dev/null +++ b/docs/freeholders/standing.md @@ -0,0 +1,49 @@ +# Bayesian Standing + +**Standing** (REQ-006) is a Holder's measured history on the mesh — the +anti-gaming metric that gates [Freeholder](index.md) participation and weighs +[Voice](councils-voice.md) in the [Councils](councils-voice.md). Standing is +not a count of transactions and not a reputation score you can farm. It is a +Bayesian score that resists the obvious attacks: volume spam, self-dealing, +fake vouches. + +## The formula, at conceptual depth + +Standing combines four signals and a penalty: + +- **Bayesian prior + updates.** The mesh starts with a prior for each Holder + and updates it from each observed action. A burst of activity cannot + inflate Standing because the prior anchors it. +- **Time-decay.** Old evidence decays, so a Holder cannot rest on a burst + from years ago. Standing reflects *recent, sustained* real production. +- **Diversity weighting.** A Holder who acts across many services, many + [Stands](stands-guilds.md), and many [bearers](../nomads/bearers.md) accrues + more Standing than one who repeats the same action with the same + counterparty. Diversity is the anti-collusion lever. +- **Voucher-weighting.** A vouch from a high-Standing Freeholder counts for + more than a vouch from a low-Standing one. This makes fake vouches expensive: + the voucher must themselves have Standing to lose. +- **Minus slashes.** Bad behavior (failed attestations, broken Pacts) removes + Standing. Slashes are the penalty that bounds the upside of gaming. + +> The full sub-tables (priors, decay rates, diversity categories, slash +> conditions) are deferred per PROJECT.md Q2. This page gives the conceptual +> depth; the [nomads Standing page](../nomads/standing.md) gives the plain- +> language version. + +## Why it cannot be gamed + +There is no single input a Holder can pump. Volume is bounded by the Bayesian +prior; recency is bounded by time-decay; breadth is bounded by diversity; +social trust is bounded by voucher-weighting; and any attempt that misfires +costs Standing via slashes. The four signals (the [90-day Stash](signals.md), +3-category threshold, Capital, Vouch) sit on top of this metric, so the +Freeholder gate inherits the same anti-gaming property. + +## What Standing is not + +Standing is not a custodial position, a tier you buy, or legacy history. It +is a measured, decayed, diversified Bayesian score. See +[Storage Pools](../shared/storage-pools.md) for why the mesh says "Stash" +rather than the legacy custodial words, and [Councils & Voice](councils-voice.md) +for how Standing weights a Freeholder's vote. \ No newline at end of file diff --git a/docs/freeholders/stands-guilds.md b/docs/freeholders/stands-guilds.md new file mode 100644 index 0000000..007d191 --- /dev/null +++ b/docs/freeholders/stands-guilds.md @@ -0,0 +1,47 @@ +# Stands & Guilds + +A **Stand** is a governed group of Holders that holds a [Vault](../shared/storage-pools.md) +in common (REQ-016). A **Guild** is a looser association of Holders that can +pass value among its members for free (REQ-017). Both are the organizational +layer a [Freeholder](index.md) joins after earning the four +[signals](signals.md). + +## The nine Stand types + +OpenYield defines exactly nine Stand types (REQ-016, vision §11), locked as a +const in `x/stand`: + +1. **Household** — a family-scale group. +2. **Crew** — a working team. +3. **Entity** — a single legal actor. +4. **Co-op** — a cooperative. +5. **Circle** — an affinity group. +6. **Trust** — a trust arrangement. +7. **Foundation** — a purpose-bound entity. +8. **Confederation** — a federation of Stands. +9. **Shadow** — a privacy-preserving Stand. + +A Stand's decision policy (threshold or weighted, mirroring the Cosmos SDK +`x/group` shape) governs how its Vault is used. A Stand can also issue +[Bonds](bonds.md) — the bond issuer is a Stand, referenced by stand-id. + +## Guilds and Hand-Passes + +A **Guild** is a looser association: it may affiliate with a Stand or stand +alone. Inside a Guild, a **Hand-Pass** moves [Bread](../shared/bread-scale.md) +between members at a **0% protocol fee** (REQ-017, locked `HandPassFeeBps = 0` +in `x/guild`). The 0% fee is mission-locked: the mesh does not tax the social +transfer of value among a self-organized group. See the +[Fee Covenant](../shared/six-principles.md) for the broader fee shape. + +## How a Freeholder joins + +A Freeholder joins a Stand by becoming a member (the Stand's policy admits +them) or forms a Guild as a founder. Membership is recorded in `x/stand` +and `x/guild` respectively, by stand-id / guild-id and the member's +[Reach](../nomads/reach.md). From a Stand a Freeholder gains Vault access and +the ability to issue [Bonds](bonds.md); from a Guild a Freeholder gains free +Hand-Passes with other members. + +See [Councils & Voice](councils-voice.md) for how Stands and Guilds each get a +Council, and [Storage Pools](../shared/storage-pools.md) for the Vault layer. \ No newline at end of file diff --git a/docs/reference/architecture.md b/docs/reference/architecture.md new file mode 100644 index 0000000..3189039 --- /dev/null +++ b/docs/reference/architecture.md @@ -0,0 +1,51 @@ +# Architecture + +This is the architecture index for OpenYield. The mesh is built from 14 +modular components and 6 cross-component interfaces, with a critical blocker +chain that fixes the build order. The full governance source lives in +`.ciagent/oy/ARCHITECTURE.md`; this page is the user-facing rewrite, kept +lexicon-clean by the [docs firewall](../shared/lexicon.md). + +## The 14 modular components + +| # | Component | Vision § | Phase | +|---|---|---|---| +| 1 | OY Chain & Mirror | §7 | P1 | +| 2 | Cross-Chain & Exit | §7 | P3 | +| 3 | Bread Unit & Root Basket | §6, §16 | P1 | +| 4 | Bloom Engine | §6 | P1 | +| 5 | Storage Substrate | §5 | P1 | +| 6 | Identity, Standing & Citizenship | §8, §9 | P1 | +| 7 | Window Primitive | §10 | P2 | +| 8 | Pacts Suite (Pause, Ground, Stance, Cover, Stand Registry, Hub API, Bonds) | §16, §17 | P2 | +| 9 | Mesh Experience (Maps, Pay) | §8 | P1 | +| 10 | Organizational Primitives (Stands, Guilds) | §11, §12 | P2 | +| 11 | Partner Spectrum & Forex | §13 | P2 | +| 12 | Bearers & Processing Mesh | §14, §15 | P1 | +| 13 | Fee Covenant | §18 | P1 | +| 14 | Governance (Mesh/Guild/Stand Councils) | §19 | P2 | + +## The 6 cross-component interfaces + +1. **Standing API** — consumed by Identity, Window, Pacts, Orgs, Partners, + and Governance. See [Standing](../freeholders/standing.md). +2. **Forge / Fold Interface** — mints [Bread](../shared/bread-scale.md) + against Root Basket assets only. See the Bloom Engine. +3. **Watcher Attestation Interface (the Mirror)** — 9 Watchers, 6-of-9 + quorum. See [Watchers & Mirror](../shared/watchers-mirror.md). +4. **Window Lifecycle Interface** — Holder-authorized, scope-bounded, + revocable. See [Window](../nomads/window.md). +5. **Fee Covenant Interface** — auto-decline, ceiling/floor enforced. + See [Six Principles](../shared/six-principles.md). +6. **Voice / Council Interface** — multi-source Voice, Mission Lock enforced. + See [Councils & Voice](../freeholders/councils-voice.md). + +## The critical blocker chain + +The components build in a fixed order: OY Chain (1) → Bread/Root Basket (3) +→ Storage (5) → Identity/Standing (6), which then unblocks {Window (7), +Pacts (8), Orgs (10), Partners (11), Governance (14)}. The Fee Covenant (13) +blocks Pacts, Orgs, Partners, and Bearers — the fee shape must exist before +any of those can ship. v0.3 adds the Cross-Chain & Exit layer (component 2) +and the Bearers/Partner/Bond extensions; see [Components](components.md) for +the `x/` module map and the v0.3 phase status. \ No newline at end of file diff --git a/docs/reference/components.md b/docs/reference/components.md new file mode 100644 index 0000000..3fcfad2 --- /dev/null +++ b/docs/reference/components.md @@ -0,0 +1,62 @@ +# Component Map + +This is the `x/` module map for OpenYield. Each module is a Cosmos-SDK-style +`x//types/` package, zero external Go deps (G-006), referenced by +ID-string across modules (G-003 — no struct imports). The map covers v0.1, +v0.2, and v0.3 (skeleton + tests depth, D-020/D-035). + +## v0.1 baseline (pre-MVP skeleton) + +| Module | Vision § | REQ | Purpose | +|---|---|---|---| +| `x/mesh` | §7 | REQ-008 | OY Chain (Layer 1) shell | +| `x/mirror` | §7 | REQ-004 | Mirror of canonical state to bearers | +| `x/bread` | §4, §6 | REQ-013 | Bread unit + 11-tier scale | +| `x/bloom` | §6 | REQ-003 | Bloom Engine (real production only) | +| `x/forge` | §4.2 | REQ-003 | Forge/Fold minting against Root Basket | +| `x/rootpool` | §5 | REQ-014 | Root-Pool (mesh treasury) | +| `x/stash` | §5 | REQ-014 | Stash (Holder-level storage pool) | +| `x/vault` | §5 | REQ-014 | Vault (Stand-level storage pool) | +| `x/identity` | §8 | REQ-005 | Reach identity (Holder, no KYC) | +| `x/standing` | §9.2 | REQ-006 | Bayesian Standing | +| `x/processing` | §15 | REQ-007 | FCFS processing mesh | +| `x/watcher` | §7 | REQ-004 | 9 Watchers, 6-of-9 quorum | +| `x/feecovenant` | §18 | REQ-002 | Fee ceiling/floor/minimum | +| `x/still` | §3 | — | Still/Stir pause/resume state | +| `x/bearers` | §14 | REQ-019 | Unified Bearer Layer (6 bearers) | + +## v0.2 (The Mesh — skeleton + tests) + +| Module | Vision § | REQ | Purpose | +|---|---|---|---| +| `x/window` | §10 | REQ-015 | Window primitive (scope, rate-limit, revoke) | +| `x/stand` | §11 | REQ-016 | Nine Stand types | +| `x/guild` | §12 | REQ-017 | Guilds + Hand-Passes at 0% protocol fee | +| `x/pact` | §16 | REQ-020 | Six Pacts (Pause, Ground, Stance, Cover, Stand Registry, Hub API) | +| `x/partner` | §13 | REQ-018 | Four-tier Partner Spectrum (Op, Master Op, Pier, Anchor) | +| `x/council` | §19 | REQ-011 | Three Councils + Mission Lock (non-amendable) | +| `x/forex` | §13 | Forex v1 | Forex Engine v1 (pair type + oracle interface) | +| `x/bond` | §17 | REQ-021 | Mesh Bond Market (8% cap / 0% floor clamp) | +| `x/satellite` | §7 | REQ-009 | L2 IBC Satellite (Polygon active + 4 stubs) | + +## v0.3 (Bearers & Documentation — in progress) + +| Module | Vision § | REQ | Status | Purpose | +|---|---|---|---|---| +| `x/bridge` | §7 | REQ-010 | P4 (pending) | L2↔L1 bridge routes | +| `x/exit` | §7 | REQ-010 | P4 (pending) | Exit routes + DEX swaps | +| `x/bearers` (ext) | §14 | REQ-022 | P4 (pending) | OY-SAT + OY-QR transport stubs | +| `x/partner` (ext) | §13 | REQ-023 | P4 (pending) | AnchorCredential (Anchor tier) | +| `x/hub` | §13, §16 | REQ-024 | P5 (pending) | Hub API (Custody, Lending, Compliance) | +| `x/services` | §13 | REQ-025 | P5 (pending) | Services (Care, SIM, Vault, Mail) | +| `x/bond` (ext) | §17 | REQ-026 | P5 (pending) | Growth Bonds + secondary market | + +## Notes + +- Every module follows the same pattern: `types/types.go` + `types/types_test.go` + (package `types`), zero external deps, by-ID-string inter-module refs (G-003). +- Each new/extended test file includes a lexicon assertion (REQ-012); the + project-wide meta-test (`lexicon_meta_test.go`) scans all `x/**/*.go`. +- The docs firewall (`lexicon_meta_docs_test.go`) scans `README.md` + all + `docs/**/*.md`. See the [architecture index](architecture.md) for the + 14-component view and the 6 cross-component interfaces. \ No newline at end of file