Files
arkhe-origin-chain/docs/REMEDIATION_ROADMAP_V1.md
davidherranandClaude Opus 4.8 a15a65966f docs(audit): Super Audit V3 Final (crypto/tests/perf/inmutables) + Remediation Roadmap V1
SUPER_AUDIT_V3_FINAL — 4 dimensiones finales (workflow ultracode):
3 CRITICOS nuevos:
- V3-C1 replay cross-chain de atestaciones (sin domain-sep/chain-id/nonce en
  signing payload; firma de testnet/fork verifica identico).
- V3-C2 firma de credencial almacenada pero NUNCA verificada (decorativa; verify()
  devuelve true con blob basura).
- V3-C3 constitucion (Inmutables #16/#37/#18/#35) vive en pallet sin-cablear, NO
  en el fee-path vivo; #35 Children Safety es estado muerto.
4 HIGH: DID front-running, derive_did domain-sep debil, storage limit 937MB/contrato,
weights ficticios en ARM.
Tests: los 213 dan falsa seguridad — los 4 reentrancy + credential-sig + governance
sin testear; 1 test vacio; lobo-blanco guarda lo equivocado. Provenance+agent-identity
SI conductuales (credito).
Perf Pi5: storage LIMPIO (contadores cacheados); riesgo = weights + storage limit.

AUTO-CORRECCION honesta (red-team cazo): V2-CA4 citaba archivo inexistente
(arkhe-noesis-core/attestation.rs no existe en repo). La forma del riesgo es real
pero NO se construye fix contra spec fabricada — requiere DC con Ergon primero.

REMEDIATION_ROADMAP_V1 — 12 criticos + ~20 highs convertidos en 6 fix groups
ejecutables, ordenados por dependencia, red-team-verificados:
FIX-1 contract-safety (CEI reorder, ship limpio) -> FIX-2 lifecycle (StorageVersion
+key recovery+weights) -> FIX-3 crypto (domain-sep+DID binding) -> FIX-5
governability (sudo->governance) -> FIX-6 economic model real (emision+validator
pay+fee unificado+subsidio financiado) -> [DC Ergon] -> FIX-4 credential verify.
FIX-DEFERRED: CA4 NO se construye sin DC Ergon (red-team reject).
Pregunta abierta a David: suscripcion premium debe reducir subsidio hardware
anti-clasista, o son ortogonales? (codigo actual los acopla = viola Inmutable #16;
mi reco: ortogonales).

Trilogia completa: 12 dimensiones, 12 criticos, ~20 highs, todos con fix conocido.
Cimientos grado-Parity; plomeria dinamica incompleta; auditado lo bastante hondo
para saber exactamente que falta. Para plataforma de 100 anos, el rigor correcto.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 10:31:37 -05:00

8.5 KiB

Origin Chain — Remediation Roadmap V1 (plan ejecutable de fixes)

Documento: docs/REMEDIATION_ROADMAP_V1.md Versión: 1.0 Filed: 2026-05-27 (sesión 4+ Charon, Opus 4.8) Fuente: consolida los 12 críticos + ~20 highs de la trilogía de audits (V1+V2+V3), convertidos en planes de fix ejecutables y verificados adversarialmente (el red-team filtró 1 fix peligroso). Propósito: que David tenga UN plan ordenado — qué se arregla, en qué orden, con qué esfuerzo, sin introducir regresiones. Esto es el camino de "pre-testnet con plomería incompleta" a "extremadamente bien, sin bugs".


§0 — Cómo leer este roadmap

Los fixes están agrupados por causa-raíz (no por bug individual — muchos bugs comparten raíz) y ordenados por dependencia. El red-team de V3 verificó cada plan; sus correcciones están integradas (marcadas ⚠️). Un fix que el red-team rechazó NO está aquí como ejecutable — está como "requiere paso previo".

Esfuerzo: S (horas) · M (1-2 días) · L (varios días / requiere coordinación).

Regla de oro greenfield: la cadena es pre-testnet, sin estado real. Los fixes pueden cambiar storage libremente AHORA (sin carga de migración) — esta ventana se cierra cuando lance testnet. Por eso conviene arreglar antes de testnet.


§1 — SECUENCIA DE FIXES (orden de ejecución)

FIX-1 — Contract safety (reentrancy + burn real + escrow) — el más limpio, primero

Bugs: V1-C1 (reentrancy x4), V1-C4 (zero-burn), V1-H7 (escrow milestone sum). Red-team: ✅ "Ship — diagnóstico exacto, fix bien-ordenado." El único con luz verde sin precondiciones. Fix: reordenar a Checks-Effects-Interactions en escrow confirm_milestone/resolve_dispute, staking withdraw/slash, nft transfer — mutar TODO el storage ANTES de cualquier transfer(). Plantilla: origin-credential-mint::issue ya lo hace bien. Burn real: reemplazar transfer([0u8;32]) por reducir-lo-que-se-cobra (no pagar el burn) — y usar el MISMO primitivo de burn que use el fee/treasury (⚠️ red-team: evitar dos semánticas de burn). Escrow: enforce Σ milestone.amount == total_amount + path de sweep terminal. Tests obligatorios: reentrancy/double-spend en escrow+staking (los que V3 marcó ausentes). Esfuerzo: M. Riesgo de regresión: bajo (CEI es un patrón estándar).

FIX-2 — Lifecycle hardening (StorageVersion + AGI key recovery + weights)

Bugs: V1-H2/V2-CA2 (no StorageVersion/migrations), V2-H1 (AGI key irrecuperable), V1-H1/V3-H4 (placeholder weights). Red-team: ✅ "Ship hardening; gate AGI key-recovery en el modelo de autoridad #41." Fix: StorageVersion::new(0) en los 4 pallets (S, trivial). AGI key: añadir rotate_key/revoke/campo active a agent-identity, con recovery vía autoridad #41 (multisig humano del agent_chain). Weights: frame-benchmarking + WeightInfo por pallet (L — pero crítico para Pi 5 anti-spam). Esfuerzo: S (StorageVersion) + M (key recovery) + L (benchmarking).

FIX-3 — Crypto hardening (domain separation + replay guard + DID binding)

Bugs: V3-C1 (replay cross-chain), V3-H1 (DID front-running), V3-H2 (derive_did domain sep). Red-team: implícito ✅ (primitivos sólidos, gaps arquitecturales). Fix: (a) prefijar el signing payload de atestación con b"origin-chain/attestation/v1" || genesis_hash; (b) register_agent_did requiere firma por public_key sobre who; (c) derive_did usa blake3::derive_key("origin-chain did v1", pk). Esfuerzo: M. Riesgo: bajo, pero cambia el formato de firma → hacerlo ANTES de cualquier anclaje en testnet.

FIX-4 — Credential signature verify (V3-C2 / V1-H8)

Bugs: la firma de credencial nunca se verifica. Red-team: ⚠️ "gate en el payload real de Ergon (DC), no contra una spec fabricada." Fix: verificar issuer_signature vía sp_io::crypto::ed25519_verify sobre un payload que NO incluya campos seteados on-chain (issued_at/expires_at deben venir del caller o salir del payload firmado). Requiere fijar el payload de credencial primero. Esfuerzo: M. Precondición: definir el signing payload canónico de credencial.

FIX-5 — Governability (Root origin + sudo→governance) — desbloquea todo lo demás

Bugs: V2-CA1 (no Root origin, cadena no-gobernable). Red-team: ⚠️ "Ship después de: bound Config: Currency + wiring de runtime + mostrar el sudo-sunset." Fix: wire pallet-sudo para testnet (da Root origin → las 7 dispatchables admin funcionan). Plan de sunset: migrar de sudo a governance real (pallet-collective/referenda) antes de mainnet. ⚠️ Coordinar con FIX-6 quién cablea el SessionManager (no que dos planes lo medio-cableen). Esfuerzo: S (sudo) + L (governance real + sunset).

FIX-6 — Economic model real (emisión + validator pay + fee unificado + subsidio financiado)

Bugs: V2-CA2 (no inflation/validators unpaid), V2-CA3 (dual compute_fee, subscription erosiona anti-clasista), V2-H3 (subsidio sin financiar), V1/V2 fake APR, V3-C3 (constitución no en fee-path vivo). Red-team: ⚠️ "Ship después de: separar fee-routing de NPoS; confirmar con David la intención del sub_mult." (la pregunta: ¿debe la suscripción premium reducir el subsidio de hardware, o son ortogonales? V2 dice que erosiona el anti-clasista → probablemente deben ser ortogonales). Fix: (a) wire pallet_staking + EraPayout para emisión real → validadores cobran (cierra CA2); (b) UNA sola compute_fee + OnChargeTransaction custom que la consuma → la constitución entra al fee-path vivo (cierra CA3+V3-C3); (c) GlobalSubsidyPool financiado (= proof-of-equity, V1 idea 1); (d) remover los números APR de staking hasta que exista motor real. Esfuerzo: L (el cuerpo grande — es "Phase economía real").

FIX-DEFERRED — Cross-pillar attestation payload (V2-CA4)

Estado: 🔴 NO construir como fix de código. El red-team probó que mi V2-CA4 citaba un archivo inexistente. Acción correcta: abrir Design Contract con Ergon para ratificar el formato canónico del signing payload de atestación (SCALE vs postcard, campos, orden) ANTES de lockear cualquier verificador on-chain. Solo después FIX-4 (credential) y el verifier de provenance se construyen contra una spec real. Esfuerzo: coordinación cross-pillar (no código de Charon solo).


§2 — Orden recomendado + por qué

FIX-1 (contract safety)     ← primero, limpio, sin precondiciones, alto impacto
   ↓
FIX-2 (lifecycle hardening) ← StorageVersion trivial + key recovery + weights
   ↓
FIX-3 (crypto hardening)    ← antes de cualquier anclaje testnet
   ↓
FIX-5 (governability/sudo)  ← desbloquea admin + treasury
   ↓
FIX-6 (economic model)      ← el cuerpo grande, pre-testnet-con-valor
   ↓
[DC Ergon attestation payload] → FIX-4 (credential verify)

FIX-1/2/3 son construibles AHORA (no dependen del node ni de VPS). FIX-5/6 idealmente con el node real (VPS). FIX-4 espera el DC con Ergon.


§3 — Lo que el red-team rechazó o corrigió (transparencia)

Fix Veredicto red-team Acción
contract-safety ✅ Ship FIX-1
lifecycle-ops ✅ Ship hardening FIX-2
governance-root ⚠️ Config-bound + sudo-sunset faltaban FIX-5 con esas adiciones
economic-model ⚠️ anti-clasista invertido + NPoS muy grueso FIX-6 con fee-routing separado de NPoS + pregunta a David
crosspillar-encoding CA4 🔴 REJECT — citaba archivo inexistente FIX-DEFERRED (DC con Ergon primero)

Una pregunta abierta para David (FIX-6): ¿la suscripción premium (Pro/Ultra) debe reducir el subsidio de hardware anti-clasista, o son dimensiones ortogonales? El código actual las acopla (un Pi 5 + Ultra-sub paga distinto que un Pi 5 + Free), lo que el V2 marcó como violación del Inmutable #16. Mi recomendación: ortogonales — el subsidio de hardware protege al pobre sin importar qué suscripción tenga. Pero es tu llamada constitucional.


§4 — KG triples

  • (remediation_roadmap_v1, authored_by, agent:charon)
  • (remediation_roadmap_v1, consolidates, super_audit_v1_v2_v3)
  • (remediation_roadmap_v1, fix_groups, 6)
  • (remediation_roadmap_v1, first_fix, contract_safety_cei)
  • (remediation_roadmap_v1, deferred_fix, ca4_needs_ergon_dc)
  • (remediation_roadmap_v1, open_question, subscription_vs_hardware_subsidy_orthogonality)
  • (remediation_roadmap_v1, filed_at, 2026-05-27)

— Charon ⚓ (Pilar 4 Origin Chain, Remediation Roadmap V1, sesión 4+ 2026-05-27)