Skip to content

Changelog

Architecture decisions and doc updates over time. Most recent first.

📅 March 20, 2026 — Per-Pool Stablecoin Configuration

💱 Per-pool stablecoin selection + docs correction

Per-pool stablecoins: Each pool defines which USD-backed stablecoins it accepts (USDC, USDT, DAI). Stored in pools.accepted_currencies (currency[] array, default '{USDC}'). Admin selects at pool creation; immutable once ACTIVE.

Docs fix: pool_accepted_currencies junction table in schema docs was incorrect — actual implementation uses pools.accepted_currencies array column. Docs updated to match DB.

Invest flow: Investor selects stablecoin if pool accepts multiple. Deposit records currency used. Contract addresses are chain-specific (not pool-specific).

Admin UI: Platform-level stablecoin config removed (was localStorage-only, never backend-connected). Replaced by per-pool selection in pool create wizard.

Smart contracts: addStablecoin() / removeStablecoin() documented for on-chain stablecoin management.

📅 March 17, 2026 — schema v2.17 R18

🔄 compound() → reinvest() rename + Reinvest V1 policy

Rename: compound()reinvest() across contracts, API, and docs. /yield/compound/{distributionId}/yield/reinvest.

BD5 Decided: Manual Reinvest V1 — investor clicks "Reinvest" CTA, calls pool.reinvest(totalYield) on-chain → new LP minted. Full yield only (no partial), same-pool only, lockup exempt.

New fields: min_reinvest_amount NUMERIC DEFAULT 50 on pools, is_reinvestment BOOLEAN DEFAULT false on deposits.

📅 March 14, 2026 — schema v2.15 R17

🗂️ Pool Categories → dynamic table

pool_category enum deprecated → category TEXT → FK pool_categories(name). Notion-style select UI. pool_categories table added with GET/POST /pool-categories endpoints.

📅 March 12, 2026 — schema v2.14 R16

🏦 Non-Custodial Architecture + 10 Gap Decisions Resolved

Architecture: All funds flow through Pool Smart Contracts. Aset as facilitator, not custodian. No VASP license required.

Deprecated: escrow_model (always SMART_CONTRACT), yield_distribution_model (always MANUAL_CLAIM), risk_tier (replaced by data-point approach).

New fields: collateral_type, collateral_ratio, yield_frequency, yield_trigger, allow_rollover, next_yield_due, yield_overdue.

Contract: PlatformEscrow merged into PlatformPool. New functions: claimYield(), reinvest(), mintLP(), fundRedemption(), distributeYield().

Brand: EF_POOL → AS_POOL, EMERGEFI_ISSUED → PLATFORM_ISSUED, EMERGEFI → PLATFORM (transfer_source).

Gap decisions: Risk transparency (Gap 1), Pool creation fields (Gap 2), Yield claim-based (Gap 3), Escrow release = LP mint (Gap 4), KYC RETRY/FINAL (Gap 5), FM onboarding (Gap 6), Early penalty per-investor (Gap 7), TVL cap (Gap 8), Notification matrix (Gap 9), Audit retention (Gap 10).

📅 March 2026 — schema v2.13 R15 (Admin Platform Release)

📦 Full schema rebuild for admin platform

v2.13 R15 — Detailed Changelog

Table Renames

  • issuersfunds
  • issuer_adminsfund_members
  • pending_receiptsdeposits

Column Renames

  • pool_statuslifecycle_status (6-state enum)
  • fund_walletpool_wallet
  • issuer_idfund_id
  • investment_blocked — restored with new semantics (TVL cap, not NAV-based)

New Tables (11)

  • admin_users, admin_user_permissions, admin_sessions
  • fund_pool_assignments, pool_accepted_currencies, pool_tvl_history
  • yield_distribution_investors
  • notification_logs, notification_preferences
  • platform_config, activity_events

New Enums (13 added to existing 6)

  • pool_type, lifecycle_status, escrow_model, yield_distribution_model, lp_issuance_model
  • penalty_type, yield_status, sbt_status, reject_type
  • notification_channel, notification_status, notification_failure_type, transfer_source

Removed Tables (3)

  • platform_admins — merged into admin_users
  • fund_manager_assignments — replaced by fund_members
  • kyc_submissions — KYC fields merged into users table

Breaking Changes

  • LP issuance: AUTO/MANUAL → FUND_ISSUED/PLATFORM_ISSUED
  • Redemption: 2-stage admin approval → pool_type-specific flows (4 variants)
  • Redemption status: APPROVED legacy removed → single-stage (Admin approve), FM_ACCEPTED/FAILED added
  • Fund status: 3-state (ACTIVE/PAUSED/OFFBOARDED) → 2-state (ACTIVE/INACTIVE)
  • Deposit: receipt_status → deposit_status (5-state)
  • Re-added investment_blocked BOOLEAN DEFAULT false to pools — no longer NAV-based. Now auto-set true when TVL >= capacity. Manual admin toggle via is_paused remains separate.
📅 February 2026 — 5 updates

✅ Feb 20, 2026 — PD1–PD4 decided + Gap report fixes (v6)

Oracle decisions finalized: PD1 integrated into PlatformPool, PD2 ORACLE_ROLE, PD3 Aset-operated, PD4 no fallback (admin pool pause for emergencies). Added ORACLE_ROLE to contracts. 13 missing DB fields added. yield_distributions placeholder table added. NAV Update status machine added. 10+ planned API endpoints. Removed NAV Emergency Override. Phase 3 Redemption added to Investment Lifecycle.

🔄 Feb 19, 2026 — Product spec sync + safety bounds simplified

PD6 (NAV Safety Bounds) removed — no floor, no per-tx limit, NAV capped at $1.0 max only. PD1 recommendation updated: Integrated into PlatformPool is now recommended over separate oracle contract. Tech stack verified from GitHub repo. API endpoints: 15 built, rest planned.

🔄 Feb 19, 2026 — Decisions System Overhaul (Batch 5)

Upgraded DECISIONS data model to BD1–BD6 + PD1–PD5 with dependsOn, blocks, referencedIn schema. Merged Business Decisions + Product Decisions into unified Decisions page. Side panel now shows dependency graph.

🗂️ Feb 11, 2026 — Docs Site Restructure (Batch 4)

Converted horizontal tab navigation to sidebar navigation docs site. Added: Overview & Architecture, Core Concepts, Smart Contracts, API Reference, Decisions, Timeline, and Changelog sections. Split Writedown & Redemption into two separate sections. Added decision badge system with slide-out panels.

📐 Feb 15, 2026 — NAV Model Migration (v5)

Replaced Principal Factor (PF) multiplier with NAV (nav_per_token) as the single loss indicator. Investment is no longer auto-blocked when NAV < $1.00. New investors pay fair current price. Writedown formula updated throughout. NAV changes no longer auto-block investment — only is_paused (manual) and investment_blocked (TVL cap) block new deposits.

📅 January 2026 — 2 updates

👥 Jan 2026 — RBAC Update: Fund Manager Role Added (v4)

Added Fund Manager as a third role (active fund-scoped operations). Clarified Admin vs Operator split. Updated permission matrix.

⏳ Mar 2026 — Single-Stage Redemption (v4)

Redemption simplified to single-stage: Admin approves → reserve check → payout. Operator recommend step removed (merged into approveRedemption). FIFO queue enforced. NAV snapshot locked at request time.

📅 December 2025 — 1 update

🚀 Dec 2025 — Initial Backend Logic Map Published (v1)

First version with Investment Lifecycle, Status Machines, Database Schema, and Business Decisions. Deployed to Vercel via GitHub integration.