Materialismo filosófico · Trituración de OASIS 1.0.7 con las coordenadas K1-K7
Revisión 0 — 2026-09-09. La semilla (draft.md) fijó la panorámica de Bueno, corrigió los errores del chuletario y dejó un plan (b0 trituración, b1 nueve ramas, b2 backlog; carriles D → T → EU). Este documento es b0: audita el código real con las siete coordenadas, propone siete parches de eutaxia EU-1…EU-7 y abre el backlog por carriles. No prescribe un régimen: Bueno no lo hace. Tritura.
0. Qué cambia respecto de la semilla
| # | Hallazgo | Consecuencia |
|---|---|---|
| 1 | Oasis politiza la capa conjuntiva y una rama basal; la capa cortical entera está en manos del operador del nodo. Parlamento y tribunales existen como órganos; defensa, diplomacia y federación existen como fichero de configuración, shell y técnica criptográfica. | El producto central (las nueve ramas, §3.D) no es «qué falta», sino «qué poderes no tienen rama». El operador es un poder exterior al cuerpo político (§3.E). |
| 2 | La red ejecuta una sola reducción entre géneros de materialidad, y la ejecuta dos veces. karmaScore = rawKarma − carbonGrams y engagementScore = rawScore − carbonGramsForScore: peso político (M3) menos gramos de CO₂ (M1) en la misma resta. |
K1 se viola en el único punto donde la red intenta articular géneros. No es materialismo, es fisicalismo (§3.C). |
| 3 | La eutaxia de Oasis es un calendario. Los mandatos se recurren en ventanas de 60 días desde 2020-01-01 sin convocante; si nadie gobierna, el ciclo es una anarquía virtual. Al lado, tres distaxias de código: el export excluye la clave, el pánico borra sin confirmación y /update hace git reset --hard sobre la configuración. |
La eutaxia se puede medir con indicadores de código (§3.A) y es el único lugar donde este nodo licencia parches (§4). |
| 4 | El log holiza y el karma des-holiza. Un feed que ha publicado es un inhabitant; la población que fija el quórum sale de ese censo; la mayoría es mitad más uno de partes iguales. Pero los empates se resuelven por karma, KARMATOCRACY es un régimen propio y las sugerencias de contacto re-estratifican el círculo. |
La democracia de Oasis es una forma aritmética sobre átomos definidos por autoría (§3.B), con una re-estratificación por notoriedad que la forma no reconoce. |
| 5 | Siete costuras de la exploración previa citaban la línea vecina. steward :163→:164, ssbKeys.box :319→:320, SecretStack :57→:56, removeSSB :7→:6, if (file === 'secret') :24→:25, enactApprovedChanges :1104→:1102, TERM_EPOCH :26→:25. |
Corregidas aquí con sed -n; ninguna cambia la lectura. Las dos que afectan a draft.md van como correcciones al margen. |
| 6 | La semilla heredaba cuatro supuestos técnicos falsos (CVN, contratos en Faircoin, nodo central, Faircoin vivo) y un diagrama que identificaba géneros de materialidad con ejes antropológicos. | Descartados. La capa económica es ECOin por RPC (§1.2). Géneros y ejes son cortes distintos y se auditan por separado (§2). |
Metodología. Todo lo que aquí se afirma sobre Oasis está verificado contra el código fuente, no contra su documentación. Árbol auditado: vendor/oasis (ignorado por git; clónalo con git clone --depth 1 https://github.com/epsylon/oasis.git). Commit auditado: 9a657b776fcafc7c24bf3ad61825316385ecf513, "Oasis release 1.0.7", 2026-09-08. Cada afirmación lleva fichero:línea y la línea contiene el símbolo nombrado. La doctrina de Bueno va con grado de certeza (A repetido en todas las fuentes, B conocido sin verbatim, C reconstrucción probable) y con la etiqueta [doctrina, sin verbatim] hasta que el carril D la verifique en los libros. Rutas: models/ y views/ relativas a vendor/oasis/src/; el resto con ruta completa.
1. Estado del arte verificado
1.1 OASIS 1.0.7
- Paquete
@krakenslab/oasisv1.0.7, AGPL-3.0 (src/server/package.json:2-3,9). Node.js en el servidor y HTML+CSS sin JavaScript en el navegador (README, «No browser JavaScript», fuente primaria del proyecto). 70 ficheros en src/models/ (32.849 líneas), 67 vistas, unbackend.jsde 10.556 líneas. - Los módulos que importan a la trituración: parliament_model.js (1.615 líneas), courts_model.js (961), industry_model.js (991), banking_model.js (1.479), tribes_model.js (939), crypto.js (571), inhabitants_model.js (505), stats_model.js (634), logs_model.js (380), larp_model.js (953), melody_model.js (181), fediverse_model.js (749) y los ficheros pequeños que deciden la persistencia: panicmode_model.js (15), exportmode_model.js (52), onboarding_model.js (182).
- Todo el mundo institucional es un log leído por tipo.
readTyped(ssbClient, types, opts)(L77) es la única puerta: parlamentos, tribunales, industrias y bancos son mensajes con untype, indexados en cliente. No hay base de datos de estado, hay un feed por clave y una reconstrucción por lectura. - La derogación es un tombstone que cada cliente valida por su cuenta.
tombstone_validator.jsacepta el mensaje sic.type === 'tombstone'yc.targetes una cadena (L12) y lo descarta si el autor no coincide con el del objetivo (L26). Nada obliga fuera de la interfaz.
1.2 La capa económica
- ECOin por RPC. Todo el dinero pasa por
makeClient(url, user, pass)yclientrpc.request({ method, params })(L22-L23) sobre@open-rpc/client-js(L5). El pago real de la RBU es unsendtoaddressdesde la cartera del PUB (L1004). Oasis no emite; lee la oferta de fuera. - Quién redistribuye: el nodo que se autodeclara PUB.
isPubNode()(L214) comparawalletPub.pubIddel fichero de configuración conconfig.keys.id(L215-L217). Ese nodo ejecutaexecuteEpochyprocessPendingClaimsen unsetIntervalde 30 minutos (L10265-L10273). - Consecuencia: la rama redistribuidora existe, es automática, y su titular es una entrada de JSON. Faircoin, Proof-of-Cooperation, CVN y contratos no aparecen en este árbol y no se usan en este nodo.
1.3 El corpus: siete coordenadas, no criterios
Bueno no prescribe un régimen; ofrece coordenadas de análisis. La única norma que sí ofrece, la eutaxia (K6), es la que se convierte en prueba de aceptación en §4. Escala A/B/C de draft.md §1; todo [doctrina, sin verbatim] hasta que el carril D lo verifique.
| # | Coordenada | Qué se le pregunta al código | Fuente | Cert. |
|---|---|---|---|---|
| K1 | Tres géneros de materialidad M1 (físico), M2 (fenomenológico), M3 (abstracto), inconmensurables y en symploké | ¿Qué es M1, M2 y M3 en cada módulo? ¿Ejecuta la red alguna reducción de un género a otro? | Ensayos materialistas (1972) | A |
| K2 | Cierre categorial: una categoría se cierra cuando concatena sus partes por operaciones propias; la filosofía es saber de segundo grado que coordina cierres | ¿Qué capas de la red son ciencia cerrada, técnica abierta o dependencia externa? | Teoría del cierre categorial (1992-93), ¿Qué es la ciencia? (1995) | A |
| K3 | Espacio antropológico: ejes radial (cosas), circular (otros sujetos humanos), angular (númenes: sujetos no humanos con conocimiento o apetición) | ¿Qué relaciones habita cada eje en Oasis? ¿Está gobernado el eje angular? | Ensayos materialistas, El animal divino (1985) | A; extender el angular a IA y máquinas es lectura nuestra: C |
| K4 | Capas del cuerpo político: conjuntiva (el cuerpo consigo mismo), basal (con la naturaleza y la producción), cortical (con otras sociedades) | ¿Qué módulos pertenecen a cada capa? | Primer ensayo sobre las categorías de las ciencias políticas (1991) | B |
| K5 | Nueve ramas del poder: conjuntiva = ejecutiva, legislativa, judicial · basal = planificadora, redistribuidora, gestora · cortical = militar, diplomática, federativa | Por rama: implementada, ausente, fusionada o en manos del operador; quién la controla | Primer ensayo… | B |
| K6 | Eutaxia / distaxia: buen orden como capacidad de la sociedad política para recurrir, para persistir en el tiempo; no un fundamento moral | ¿Qué hace durar al sistema? ¿Qué lo mata? ¿Se mide a sí mismo en el tiempo? | Primer ensayo… | B |
| K7 | Holización: la democracia exige reducir la sociedad a partes homogéneas (ciudadanos iguales); la democracia es una forma, no un valor | ¿Qué holiza la red (qué es un átomo)? ¿Qué la re-estratifica? | El fundamentalismo democrático (2010), Panfleto contra la democracia realmente existente (2004) | B |
Dos nociones auxiliares que uso sin coordenada propia: trituración (análisis que descompone una idea en sus partes materiales para mostrar qué queda de ella), B; y operador de una institución (quien sostiene la capa basal sin ser parte formal del cuerpo político), reconstrucción nuestra, C, a verificar en D07.
2. Anatomía de los módulos leída con las categorías
Cada bloque dice qué es M1, M2 y M3 en el módulo (K1), en qué eje se mueve (K3) y a qué capa y rama pertenece (K4/K5).
2.1 Parliament — parliament_model.js · conjuntiva legislativa
M3 fijado en constantes. TERM_DAYS = 60, PROPOSAL_DAYS = 7, REVOCATION_DAYS = 15, PROPOSAL_QUORUM = 2, QUORUM_RATIO = 0.25 (L17-L21); el catálogo de regímenes elegibles es METHODS = ['DEMOCRACY', 'MAJORITY', 'MINORITY', 'DICTATORSHIP', 'KARMATOCRACY'] (L23) y ANARCHY solo existe como método de voto, no como candidatura (L22). Los umbrales son aritmética pura: 80 % para MAJORITY, 20 % para MINORITY, mitad más uno para DEMOCRACY (L240-L242); quórum de propuesta max(2, ceil(n × 0,25)) (L257-L259). Ninguna de estas reglas constitutivas la ha votado nadie: son M3 sin sujeto.
El tiempo del cuerpo político es un calendario. TERM_EPOCH = Date.UTC(2020, 0, 1) y TERM_SPAN_MS = TERM_DAYS × 86400000 (L25-L26): las legislaturas son ventanas fijas desde el 1 de enero de 2020, sin convocante. Si en una ventana no hay mandato, virtualAnarchyTerm (L373) fabrica uno con method: 'ANARCHY' y powerType: 'none' (L379-L380). La sociedad política persiste sin gobierno por defecto de código.
Quién propone y quién enacta. canPropose (L1298-L1311): todos bajo ANARCHY, solo el titular bajo gobierno de persona, todos los miembros bajo gobierno de tribu. enactApprovedChanges(expiringTerm) (L1102) se invoca al expirar el mandato (L1167) y publica las leyes aprobadas como mensajes. Eso es todo lo que «ejecuta»: la rama legislativa está implementada; la ejecutiva no existe.
Holización y karma. La población que fija el quórum es inhabitantsCount() (L244, usado en L1191). Los empates electorales se resuelven por maxKarma (L422-L423); las propuestas se ordenan por karma descendente (L576); bajo DICTATORSHIP o KARMATOCRACY la revocación sigue otro camino (L650). El mismo módulo cuenta partes iguales y las pesa por notoriedad.
Eje: circular. M2: ninguna (el módulo no registra vivencia alguna, solo votos tipificados).
2.2 Courts — courts_model.js · conjuntiva judicial
Cinco formas de resolver: ALLOWED = new Set(['JUDGE', 'DICTATOR', 'POPULAR', 'MEDIATION', 'KARMATOCRACY']) (L139). El veredicto JUDGE solo vale si lo firma judgeId (L363); MEDIATION si lo firma uno de los mediadores aceptados (L364); POPULAR y KARMATOCRACY abren una votación pública con un plazo POPULAR_DAYS = 14 (L11, L368).
Fusión bajo dictadura. DICTATOR exige que el gobierno vigente sea DICTATORSHIP y toma dictatorId del powerId del mandato (L142-L151): la rama judicial se funde con la legislativa en una sola persona. Es la única fusión de ramas que el código declara explícitamente.
Eje: circular. M3: el catálogo de métodos. Rama judicial implementada; en KARMATOCRACY vuelve a entrar el karma como criterio de justicia.
2.3 Industry — industry_model.js · basal planificadora
El steward es el autor del mensaje raíz (L164); toda mutación de la instalación exige g.facility.steward === ssbClient.id o lanza Unauthorized (L457, L484). Las materias votables son SUBJECTS = ["admit", "dissolve", "pause", "bpUpdate", "bpDelete", "buildUpdate", "buildDelete"] (L532) con passesThreshold = máximo entre quórum y mayoría (L98-L101). La planificación de la producción tiene un titular personal derivado de la autoría y un voto para lo demás.
Eje: radial (relación con lo producido) y circular (miembros). M1: el objeto producido no está en la red, solo su plano y su lote. Rama planificadora implementada, en manos de una persona.
2.4 Banking — banking_model.js · basal redistribuidora y la única reducción entre géneros
M3 basal en constantes. DEFAULT_RULES (L14-L21): épocas mensuales, alpha 0.2, reserva 500, tope 2.000 por época, tope 50 y suelo 1 por persona, pesos [0,2, 6], 30 días de gracia. El fondo es el 20 % del saldo del PUB acotado por reserva y tope (L913-L917); computeEpoch (L920) pesa a cada persona con clamp(1 + score / 100, wMin, wMax) (L932) y paga max(floorUbi, min(pool × w / W, capUser)) (L941).
M1: el cuerpo físico del inhabitant es lo que pesa su feed. getCarbonGramsForUser (L609) suma Buffer.byteLength(JSON.stringify(m.value)) de cada mensaje (L617); carbonGramsFromBytes = bytes / ONE_MIB × 0.095 (L35) traduce bytes a gramos de CO₂ con una constante sin procedencia; el bloque de constantes (L31-L37) añade ECOIN_PER_GRAM_CO2 = 0.1 y ecoinTaxFromGrams (L36). Es la única traducción de M1 a mundo físico que hay en la red.
La reducción. rawKarma = scoreFromActions(actions) (L838), carbonGrams = await getCarbonGramsForUser(uid) (L839), karmaScore = Math.max(0, Math.round(rawKarma − carbonGrams)) (L840). Y otra vez para la RBU: engagementScore = Math.max(0, Math.round(rawScore − carbonGramsForScore)) (L1151). Un peso político (M3, acciones sociales) menos una magnitud física (M1, gramos) en la misma resta.
Eje: radial (bytes, carbono) y circular (acciones). Rama redistribuidora implementada y automática (backend.js:10265-10273); titular: el nodo autodeclarado PUB (§1.2).
2.5 Tribes y crypto — tribes_model.js, crypto.js · cortical militar y federativa como técnica
Los campos estructurales de la tribu, con parentTribeId, están en STRUCTURAL_FIELDS (L11); parentTribeId se fija al crear (L341) y anida círculos en jerarquía padre-hijo sin ningún órgano federativo por encima. La defensa es cifrado: crypto.createCipheriv('aes-256-gcm', key, iv) (L146) y reparto de la clave a cada miembro con ssbKeys.box(tribeKeyHex, [memberFeedId]) (L319-L320). Al expulsar, rotateTribeKey genera una clave nueva y la redistribuye a los que quedan (L753-L760): la frontera del círculo se repara sola.
Eje: circular (pertenencia). Capa cortical: la tribu se defiende de las demás por técnica, no por poder; se federa por herencia de campo, no por delegación.
2.6 Servidor, configuración, PUB y Multiverse · la capa cortical en manos del operador
- Cierre criptográfico importado.
const caps = require('ssb-caps')(L8) yconst Server = SecretStack({ caps })(L56); lacaps.shsviene deserver-config.json(L6). Replicación porssb-ebtyssb-friends(L60-L61) con horizonte"hops": 2(L12). Quién puede hablar con quién y hasta dónde se replica son parámetros de fichero. - El círculo inicial viene de fábrica.
"autofollow"(L25-L27) lo procesa el servidor enconfig.autofollow.feeds(L88-L93). En este commit está"enabled": falseconfeeds: [], pero el mecanismo existe y lo controla el operador. - La frontera individual.
POST /block/:feedllama afriend.block(L7306-L7307): la exclusión del círculo es una decisión de cada feed, sin órgano. - Federación desde shell. Los invites del PUB se crean con
ssb.invite.createdesdescripts/oasis-pub.jsconusespor argumento (L40-L41); el plugin de invite depende deconfig.pub(L70). - Diplomacia sin guard.
POST /settings/fediverse(L4651) yPOST /settings/fediverse/disconnect(L4663) no llaman aisLoopbackRequest(L170), a diferencia dePOST /update(L9552-L9553); la cuenta de Mastodon se guarda enconfigs/fediverse-accounts.json(L5). Cualquier petición que alcance el puerto puede conectar o desconectar la red de otra red.
Eje: circular hacia dentro, cortical hacia fuera. M3: ficheros JSON. Titular: el operador del nodo.
2.7 Inhabitants, Polls y Opinions · holización y M2
- El censo.
authorsMsgs= mensajes con autor y sintombstone(L87): un feed que ha publicado es un inhabitant. La presencia se reduce a tres cubos,green<2w,orange2w-6m,red≥6m (L65-L73). - La re-estratificación. Las sugerencias de contacto suman
karmaBonus ≤ 20,skillBonus = 4 × habilidad común,activityBonus5/2/0 por cubo (L217-L220): el círculo se ordena por notoriedad, competencia y recencia. - Un feed, un voto. Las consultas deduplican por
entry.voters.includes(v.author)(L99); la unidad de cuenta es la clave. - M2 tipificado. Las opiniones solo admiten categorías del catálogo
positive,constructive,moderation(L1, L18, L45); fuera del catálogo,Invalid voting category(L59). La única M2 que entra en el feed lo hace convertida en M3. El tema visual vive enoasis-config.jsondel nodo,themes.current || "Dark-SNH"(L24): la experiencia es local, no replicada.
2.8 El eje angular: AI 42, L.A.R.P. y Melody
- Un sujeto no humano que escribe en el feed.
createAI(L235) lee las acciones del usuario, las manda ahttp://localhost:4001/ai(L137) y publica hastaMAX_ACTIONS = 40(L243) mensajeslogconmode: 'ai'(L263, víapublishLog, L166). El humano aprueba conPOST /ai/approve(L61). El servicio cargaoasis-42-1-chat.Q4_K_M.gguf(L32), escucha en4001sin autenticación (L89) y se defiende de la inyección con una regex de siete palabras (L52). - Calendario mítico.
HOUSE_KEYScon nueve casas (L9),SOLAR_AGE_OFFSET = 10000000 − 2026(L139), casa del mes pormonthIdx % HOUSE_KEYS.length(L149). Una estructura numinosa embebida en el código, con turno rotatorio. - Comunicación oculta.
embedTextInWav(L124) esconde bits en el LSB de cada muestra a partir del byte 44 (L140-L141): mensajes para quien sabe leerlos, fuera del círculo visible.
Lectura C [doctrina, sin verbatim]: para Bueno el eje angular es la relación con númenes (animales, dioses). Que una IA local que narra la vida del usuario y un calendario de casas sean númenes es extensión nuestra; el hecho verificado es que Oasis tiene un sujeto no humano que publica en el feed y una liturgia de tiempo propia, y que ninguno de los dos está gobernado por ningún órgano.
2.9 Persistencia: pánico, export, onboarding, update, stats · los indicadores de eutaxia
removeSSB(L6) hacefs.promises.rm(ssbPath, { recursive: true, force: true })(L10); la rutaPOSTcorrespondiente llama apanicmodeModel.removeSSB(), mata el servidor conpkilly sale del proceso (L8054-L8057). Borrar M1 (el directorio) borra M3 (la clave): muerte sin confirmación en dos pasos.- El export excluye
secret(L25-L26). El onboarding tiene un pasobackupenSTEPS(L5) que solo escribe un fichero bandera conwriteFileSync(L116) desdemarkStep(L123-L125). No hay camino de respaldo de la identidad. POST /updateejecutagit reset --hard && git pullsobrerepoRoot(L9556), que contienesrc/configs/*.json(caps, hops, wallet, cuentas). Actualizar destruye la configuración local.stats_model.jsmide el disco de~/.ssbcongetFolderSize(L71, L438) y lista pubs desde~/.ssb/ebt(L24);grep -ci uptime= 0. La red mide su tamaño y sus pares, no su duración.
3. Confrontación: las coordenadas contra el código
Leyenda: ✅ la coordenada encuentra en el código una articulación reconocible · ⚠️ articulación parcial o fusionada · ❌ ausente, o violada.
| # | Coordenada / criterio | Estado en Oasis 1.0.7 | Veredicto |
|---|---|---|---|
| K1.a | Tres géneros presentes y distinguibles | M1 = bytes, disco, CO₂ (banking_model.js:609-617, :35; stats_model.js:438). M2 = opiniones tipificadas, tema local, cubos de actividad (opinions_model.js:59; settings_view.js:24; inhabitants_model.js:65-73). M3 = constantes y tipos de mensaje (parliament_model.js:17-23; typed_log.js:77) |
✅ Distinguibles, con M2 casi vacío: la vivencia solo entra como categoría |
| K1.b | Inconmensurabilidad: ninguna reducción entre géneros | karmaScore = rawKarma − carbonGrams (banking_model.js:840) y engagementScore = rawScore − carbonGramsForScore (:1151) |
❌ Violada en el único punto donde la red articula géneros (§3.C) |
| K2.a | Categorías cerradas | Criptografía (SSB_server.js:56, crypto.js:146) y replicación (SSB_server.js:60-61, server-config.json:12) son cierres importados y parametrizados por fichero |
✅ Cerradas, pero ajenas: Oasis no las reabre ni las gobierna |
| K2.b | Categorías abiertas o dependientes | Gobernanza cerrada en el log y abierta en la ejecución (tombstone_validator.js:12,26; parliament_model.js:1102); banca dependiente de RPC externo (wallet_model.js:22-23); IA sin cierre (ai_service.mjs:52,89) |
⚠️ Lo propio de Oasis está abierto; lo cerrado es de otros (§3.G) |
| K3.a | Eje radial | Infraestructura: pubs de ~/.ssb/ebt (stats_model.js:24), disco (:438), bytes y carbono (banking_model.js:617, :35) |
✅ Radial = infraestructura, no naturaleza |
| K3.b | Eje circular | Follows y hops (server-config.json:12), block individual (backend.js:7306-7307), autofollow de fábrica (server-config.json:25-27), tribus anidadas (tribes_model.js:11, :341) |
⚠️ El círculo lo trazan decisiones individuales y ficheros del operador |
| K3.c | Eje angular | IA que publica 40 mensajes por clic (logs_model.js:243, :263), calendario de nueve casas (larp_model.js:9, :139), esteganografía (melody_model.js:124); único gobierno: POST /ai/approve (AI_view.js:61) |
⚠️ Poblado y sin gobernar (§3.F; lectura C) |
| K4 | Tres capas identificables | Conjuntiva: parlamento y tribunales. Basal: industria, banca, mercado. Cortical: caps, hops, invites, Multiverse, cifrado | ✅ Identificables; la cortical no es política sino técnica y configuración |
| K5 | Nueve ramas con órgano y titular | Legislativa y judicial implementadas; ejecutiva ausente; planificadora en manos del steward (industry_model.js:164, :457); redistribuidora automática en el nodo autodeclarado PUB (banking_model.js:214-217; backend.js:10265-10273); militar, diplomática y federativa sin órgano (crypto.js:146; backend.js:4651; oasis-pub.js:40-41) |
❌ Poderes sin ramas: 2 implementadas, 1 fusionable, 1 ausente, 2 personales, 3 en manos del operador (§3.D, §3.E) |
| K6.a | Eutaxia: mecanismos de recurrencia | Calendario fijo desde TERM_EPOCH (parliament_model.js:25-26), anarquía virtual (:373-380), rotación de clave de tribu (tribes_model.js:753-760), motor de épocas cada 30 min (backend.js:10273) |
✅ La red recurre sola, por reloj y por defecto de código |
| K6.b | Distaxia: qué mata al sistema | Export sin secret (exportmode_model.js:25-26), backup que solo escribe una bandera (onboarding_model.js:116), pánico sin confirmación (backend.js:8054-8057), git reset --hard sobre configs (backend.js:9556), sin medida de uptime (stats_model.js, 0 resultados) |
❌ Cuatro distaxias y ninguna medida del tiempo (§3.A) |
| K7.a | Holización: partes homogéneas | Censo por autoría (inhabitants_model.js:87), población = censo (parliament_model.js:1191), mayoría = mitad más uno (parliament_view.js:21), un feed un voto (polls_model.js:99) |
✅ El log holiza: el átomo es la clave que ha publicado (§3.B) |
| K7.b | Democracia como forma, sin re-estratificación oculta | Empates por karma (parliament_model.js:422-423), KARMATOCRACY como régimen (:650), propuestas ordenadas por karma (:576), sugerencias por karma (inhabitants_model.js:217-220), justicia karmática (courts_model.js:139) |
❌ El karma des-holiza lo que el log holizó (§3.C) |
Recuento. 6 ✅, 4 ⚠️, 4 ❌. Las cuatro violaciones son una sola cosa vista desde cuatro coordenadas: el karma (K1.b, K7.b) y el operador (K5, K6.b). Los hallazgos que siguen ordenan el diagnóstico.
A. Eutaxia del sistema: ¿qué lo hace durar?
Lo que hace durar a Oasis no es un gobierno sino un reloj. Las legislaturas son ventanas de TERM_SPAN_MS contadas desde TERM_EPOCH (L25-L26 de parliament_model.js); nadie convoca y nadie puede no convocar. Si nadie gobierna, virtualAnarchyTerm (L373) devuelve un mandato con powerType: 'none' (L380): el cuerpo político existe aunque no tenga cabeza. La tribu que expulsa rota su clave y la reparte (tribes_model.js:753-760): la frontera se repara sin órgano. El PUB ejecuta épocas cada 30 minutos (backend.js:10273) aunque nadie mire. Con Bueno (K6, B, [doctrina, sin verbatim]): eutaxia es la capacidad de la sociedad política para recurrir, y Oasis recurre por automatismo.
Pero lo que la mata está a un clic. El export nunca incluye secret (exportmode_model.js:25-26), y el paso backup del onboarding escribe una bandera y nada más (onboarding_model.js:116, :123-125): quien pierde el disco pierde la identidad y con ella todos sus votos, cargos y saldos. El modo pánico borra ~/.ssb, mata el servidor y sale del proceso (panicmode_model.js:10; backend.js:8054-8057) sin segunda confirmación. POST /update hace git reset --hard sobre el repositorio que contiene src/configs/ (backend.js:9556): actualizar el software destruye caps, hops, wallet y cuentas del Multiverse. Y la red no se mide en el tiempo: stats_model.js conoce su disco (L438) y sus pares (L24), no su uptime. Un sistema que recurre por reloj pero no sabe cuánto lleva vivo no puede saber si es eutáxico. De aquí salen EU-2, EU-3, EU-4 y EU-6.
B. Holización: un feed es un átomo
Para Bueno (K7, B, [doctrina, sin verbatim]) la democracia exige holizar: descomponer la sociedad en partes homogéneas e intercambiables, los ciudadanos, para poder contarlos. Oasis holiza con el log: un inhabitant es un autor con mensajes no tombstone (inhabitants_model.js:87), la población que fija el quórum es ese censo (parliament_model.js:244, :1191), la mayoría es floor(total / 2) + 1 (parliament_view.js:21) y cada consulta cuenta un voto por v.author (polls_model.js:99). El átomo es la clave ed25519 que ha publicado. No hay persona, hogar ni edad: hay feeds.
Esto tiene dos consecuencias que la doctrina permite ver. Primera: el demos se define por haber hablado, no por pertenecer; quien calla seis meses cae al cubo red (inhabitants_model.js:65-73) pero sigue contando en el censo mientras tenga un mensaje. Segunda: la unidad de cuenta es técnica, no jurídica; nada impide a una persona ser dos feeds, ni a un feed ser una IA (§2.8). La holización de Oasis es perfecta como aritmética y vacía como antropología. Material para D03.
C. El karma como cierre categorial fallido
El karma quiere ser la categoría que concatena todas las demás: se calcula desde acciones sociales (scoreFromActions, banking_model.js:838), decide empates electorales (parliament_model.js:422-423), ordena propuestas (:576), funda un régimen (KARMATOCRACY, :23, :650), una forma de justicia (courts_model.js:139), el peso de la renta (banking_model.js:932) y las sugerencias de contacto (inhabitants_model.js:217). Un cierre categorial (K2, A) exigiría que esas operaciones fueran propias de un campo y volvieran sobre sus términos. El karma no cierra nada: para constituirse tiene que salir de su campo y restar gramos de CO₂ (banking_model.js:840, :1151), es decir, tiene que reducir M3 a M1. Y esa resta se apoya en una constante, 0.095 gramos por MiB (:35), sin procedencia.
El resultado es doble. Contra K1: la única symploké que la red ejecuta es una identificación, no una articulación; no es materialismo, es fisicalismo. Contra K7: el karma reintroduce partes heterogéneas (notorio / silencioso, ligero / pesado) en un demos que el log había hecho homogéneo, y lo hace por debajo de la forma democrática, en el desempate y en el orden de la lista. Bueno diría (C) que una democracia que se holiza por el log y se re-estratifica por el karma es una democracia con una aristocracia no declarada. De aquí sale EU-5 y el carril T06-T07.
D. Las nueve ramas: poderes sin ramas
| Capa | Rama | Módulo / costura | Estado | Quién la controla |
|---|---|---|---|---|
| Conjuntiva | Legislativa | parliament_model.js:17-27, canPropose :1298-1311, enactApprovedChanges :1102 |
Implementada | Voto del censo / titular del mandato |
| Conjuntiva | Judicial | courts_model.js:139, :363-368 |
Implementada; fusionada con la legislativa bajo DICTATORSHIP (:142-151) |
Juez, mediadores, voto público o dictador |
| Conjuntiva | Ejecutiva | ninguna: enactApprovedChanges publica mensajes (parliament_model.js:1102, :1167) y nadie fuera de la interfaz obedece |
Ausente | Nadie |
| Basal | Planificadora | industry_model.js:164, :457, :484, SUBJECTS :532 |
Implementada | steward único = autor del mensaje raíz |
| Basal | Redistribuidora | banking_model.js:14-21, :913-917, :920-941; motor backend.js:10265-10273 |
Implementada y autónoma | Nodo autodeclarado PUB (banking_model.js:214-217); constantes sin voto |
| Basal | Gestora | wallet_model.js:22-23 (RPC), banking_model.js:1004 (sendtoaddress) |
Dependiente de una cartera externa | Autor del feed; operador de la cartera |
| Cortical | Militar (defensa) | crypto.js:146, :319-320; caps.shs server-config.json:6; hops :12; block backend.js:7306-7307; pánico panicmode_model.js:6-10 |
Existe como técnica, no como poder | Operador del nodo (fichero, loopback); cada feed para el block |
| Cortical | Diplomática | backend.js:4651, :4663 sin isLoopbackRequest (:170); fediverse_model.js:5 |
Existe, sin órgano | Operador del nodo; cualquier petición que alcance el puerto |
| Cortical | Federativa | oasis-pub.js:40-41; ssb-invite si config.pub (SSB_server.js:70); autofollow (server-config.json:25-27, SSB_server.js:88-93); parentTribeId (tribes_model.js:341) |
Existe, sin órgano | Quien tiene shell en el PUB; el proyecto upstream |
Hallazgo estructural. Oasis politiza la capa conjuntiva (dos ramas de tres) y da forma personal o automática a la basal. Toda la capa cortical, y los parámetros constitutivos de la basal (constantes de carbono y de RBU, walletPub, hops, caps), están en manos del operador del nodo. En términos de Bueno (K5, B): la red tiene poderes sin ramas. Esta tabla es el producto b1 en bruto; T01 la pasa a limpio con columna de certeza.
E. El operador como poder exterior al cuerpo político
El operador no vota, no es elegido, no aparece en el censo como tal, y sin embargo decide: el caps.shs que separa esta red de cualquier otra (server-config.json:6), los hops que fijan el horizonte de replicación (:12), el autofollow que forma el círculo inicial (:25-27), el walletPub.pubId que lo convierte en redistribuidor (banking_model.js:215-217), los invites que federan (oasis-pub.js:40-41), y con POST /update reescribe todo eso desde el repositorio remoto (backend.js:9556). Las rutas que exigen isLoopbackRequest (backend.js:170, :9553) reconocen implícitamente que hay un sujeto distinto del usuario: el que está sentado en la máquina.
Bueno (C, [doctrina, sin verbatim], a verificar en D07) no tiene, que sepamos, una figura para «el que sostiene la institución sin ser parte de ella». La lectura que proponemos: el operador es el resto no holizado del cuerpo político, la parte que la forma democrática no puede contar porque no es un feed sino una máquina y un fichero. De aquí sale EU-1: no eliminar al operador, sino darle rama, es decir, que sus decisiones corticales pasen por el log.
F. El eje angular, poblado y sin gobernar
Oasis tiene tres habitantes no humanos con capacidad de escribir o de ordenar el tiempo: la IA 42, que narra las acciones del usuario y publica hasta 40 mensajes log por clic (logs_model.js:235-263) desde un proceso en localhost:4001 sin autenticación (ai_service.mjs:89); el calendario de nueve casas con año 10.000.000 (larp_model.js:9, :139, :149); y la esteganografía de melody_model.js:124-141, que abre un canal para quien sepa leerlo. El único gobierno del eje es un formulario individual, POST /ai/approve (AI_view.js:61), que no deja registro de la decisión y no cubre ni al calendario ni al canal oculto.
Con la cautela de K3 (angular→máquinas es C): si se acepta la extensión, Oasis es una sociedad con númenes activos y sin culto reglado; si no se acepta, sigue siendo cierto que hay un sujeto no humano escribiendo en el feed y que ninguna rama lo controla. D04 decide la doctrina; T03 documenta el hecho en cualquier caso.
G. Cierres: lo cerrado es de otros, lo propio está abierto
Las dos categorías cerradas de Oasis, criptografía (SSB_server.js:56, crypto.js:146) y replicación (SSB_server.js:60-61), son ciencia importada, parametrizada por fichero (server-config.json:6, :12) y nunca reabierta por el código propio. Lo que Oasis añade (gobernanza, banca, IA) está abierto: la gobernanza cierra en el log y no en la ejecución (tombstone_validator.js:12, :26; parliament_model.js:1102), la banca depende de una wallet por RPC (wallet_model.js:22-23) y la IA se defiende con una regex (ai_service.mjs:52). En términos de K2 (A): Oasis es una técnica (categoría del hacer) montada sobre dos ciencias ajenas; no hay cierre propio de la «gobernanza digital», y la pregunta de si puede haberlo (D05) es la única pregunta gnoseológica de este nodo.
4. Especificación EU-OASIS: parches de eutaxia
Bueno no licencia prescribir un régimen; licencia una sola cosa: aumentar la capacidad de la sociedad política para persistir. Cada parche repara una coordenada de K6 y, de paso, cierra un hueco de K5 o K1. Se documentan; no se implementan en este nodo.
| # | Cambio | Punto de intervención | Coordenada que repara |
|---|---|---|---|
| EU-1 | Órgano para la capa cortical. Las decisiones del operador que afectan a la frontera de la red (conectar o desconectar el Multiverse, crear invites del PUB, cambiar hops y autofollow) se publican como mensajes corticalRule en el log, con firma del operador y, si hay gobierno, del titular del mandato; POST /settings/fediverse y /disconnect exigen isLoopbackRequest y publican el hecho |
backend.js:4651, :4663, :170; oasis-pub.js:40-41; server-config.json:12, :25-27 |
K5 (militar, diplomática, federativa: de poder a rama), K6 |
| EU-2 | Respaldo real de la identidad. El export incluye secret cifrado con passphrase; el paso backup del onboarding solo se marca cuando existe un export verificado |
exportmode_model.js:25-26; onboarding_model.js:5, :116, :123-125 |
K6.b (muerte de identidad por accidente) |
| EU-3 | Actualización sin destruir la configuración. POST /update mueve src/configs/*.json fuera del árbol de git o los restaura tras el pull; token CSRF además del loopback |
backend.js:9552-9556 |
K6.b (destrucción de config al actualizar) |
| EU-4 | Medida del tiempo. stats publica uptime del proceso, edad del feed más antiguo, número de legislaturas transcurridas desde TERM_EPOCH y cuántas fueron ANARCHY virtual |
stats_model.js:24, :438; parliament_model.js:25-26, :373 |
K6.a (la red se mide en el tiempo; la eutaxia se vuelve observable) |
| EU-5 | Parámetros basales con procedencia. carbonGramsFromBytes, ECOIN_PER_GRAM_CO2 y DEFAULT_RULES pasan a un mensaje basalRule con fuente y fecha, modificable por el parlamento con el quórum general; el karma deja de restar gramos y el carbono se cobra como tasa aparte, sin tocar el peso político |
banking_model.js:14-21, :31-37, :840, :1151, :932 |
K1.b (fin de la reducción M3→M1), K5 (redistribuidora con sujeto), K7.b |
| EU-6 | Confirmación en dos pasos para el pánico. Token de un solo uso y ventana de 60 s entre POST /panic y removeSSB; el export con secret (EU-2) se ofrece antes |
backend.js:8054-8057; panicmode_model.js:6-10 |
K6.b (irreversibilidad sin fricción) |
| EU-7 | Registro del eje angular. Cada aprobación en /ai/approve se publica como aiApproval con el hash de lo aprobado; el servicio de 4001 exige un token local; el calendario de casas se declara en un mensaje larpCalendar en lugar de constantes |
AI_view.js:61; ai_service.mjs:89, :52; larp_model.js:9, :139 |
K3.c (eje angular gobernado), K2.b (cierre mínimo de la IA) |
Lo que no se toca, y por qué. El calendario fijo desde TERM_EPOCH y la anarquía virtual (parliament_model.js:25-26, :373-380): son la eutaxia que ya existe, recurrencia sin convocante. La rotación de claves de tribu (tribes_model.js:753-760): una frontera que se repara sola. La holización por el log (inhabitants_model.js:87; polls_model.js:99): Bueno no pide otra unidad de cuenta, pide saber cuál es. Los cierres importados (SSB_server.js:56, :60-61): no se reabre lo que está cerrado. Y el catálogo METHODS (parliament_model.js:23), incluida KARMATOCRACY: la democracia es una forma entre otras (K7), y este nodo no la privilegia; solo exige que la forma que rija sea la declarada, sin re-estratificación oculta (EU-5).
5. Backlog v0
Leyenda: T = tamaño (S/M/L) · P = prioridad (C crítica, H alta, M media). Cada tarea D tiene camino por defecto: si no se investiga, el carril siguiente usa el default; si se investiga y la respuesta difiere, la tarea dice qué cambia aguas abajo. Mapa de carriles: D → T → EU.
Carril D · Investigación en fuentes de Bueno
| ID | Buscar | Dónde | Default | Alternativas | Desbloquea |
|---|---|---|---|---|---|
| TK-D01 | Nombres exactos y definición de las nueve ramas; si «ejecutiva» es rama o poder; si la gestora es «gestora» o «económica» | Primer ensayo sobre las categorías de las ciencias políticas (1991) | Tabla §3.D tal cual (K5 en B) | otra partición de la basal; ramas no exhaustivas | TK-T01, TK-EU01 |
| TK-D02 | Definición de eutaxia: ¿duración, recurrencia, prudencia? ¿Es medible? ¿Distingue Bueno eutaxia de estabilidad? | Primer ensayo… | Eutaxia = capacidad de recurrencia; indicadores de §2.9 y §3.A; el automatismo del PUB cuenta como eutaxia | eutaxia exige prudencia de un sujeto (el automatismo no cuenta); eutaxia no medible | TK-T05, TK-EU04, TK-EU02 |
| TK-D03 | Holización y democracia como forma; qué diría Bueno de un demos definido por haber publicado | El fundamentalismo democrático (2010), Panfleto contra la democracia realmente existente (2004) | Holización por el log; karma como des-holización; una persona = una clave es holización técnica, no jurídica | Bueno exige holización jurídica (persona, no clave); la re-estratificación es inevitable y no crítica | TK-T06, TK-EU05 |
| TK-D04 | Eje angular: ¿admite Bueno sujetos no humanos artificiales? ¿Es la IA númen o instrumento? | El animal divino (1985), Ensayos materialistas (1972) | IA 42, calendario y esteganografía en el eje angular, marcados C | IA como instrumento (eje radial); solo el calendario es angular | TK-T03, TK-EU07 |
| TK-D05 | ¿Es la «gobernanza digital» una categoría del hacer con cierre posible, o una ideología? ¿Qué es una técnica sobre dos ciencias ajenas? | TCC (1992-93), ¿Qué es la ciencia? (1995) | Técnica sin cierre; solo criptografía y replicación cerradas | cierre posible como categoría del hacer; toda la red es ideología | TK-T02 |
| TK-D06 | Capa cortical, imperio generador / depredador: ¿aplica a puentes con otras redes (Mastodon, Telegram)? | España frente a Europa (1999), Primer ensayo… | Los puentes son diplomacia sin órgano; no se abre la cuestión imperial | los puentes son absorción (imperio depredador de la red mayor) | TK-T04, TK-EU01 |
| TK-D07 | Qué dice Bueno del operador de una institución (quien sostiene la basal sin ser parte formal); ¿hay figura para el resto no holizado? | Primer ensayo…; El fundamentalismo democrático | El operador es poder exterior al cuerpo político (C) | el operador es parte de la basal; el operador es la clase política real | TK-T01, TK-EU01 |
| TK-D08 | Rastreo de divulgación y contraste con los libros: fgbueno.es, El Catoblepas, Symploké; localizar verbatim para K4-K7 | web | ninguno: cada K4-K7 conserva B hasta el verbatim | ascenso a A de las coordenadas con verbatim | todas D |
OP-01 · Trituración por coordenada (carril T)
Documentos de revisión, uno por concepto, con el formato de ficha (tesis, certeza, mapeado/acierto/hueco/contradicción, veredicto). Producen revision/01-…06-….
| ID | Tarea | Depende | Seam | T | P |
|---|---|---|---|---|---|
| TK-T01 | Nueve ramas en limpio (b1 = draftv1): una fila por rama, columna de certeza de la rama y de la lectura, «quién controla» verificado |
D01, D07 | parliament_model.js:1102, :1298; courts_model.js:139; industry_model.js:164; banking_model.js:214; backend.js:4651, :10265; oasis-pub.js:40-41 |
M | C |
| TK-T02 | Cierres: ficha por capa (cripto, replicación, gobernanza, banca, IA) con veredicto cerrada / abierta / dependiente | D05 | SSB_server.js:56, :60-61; tombstone_validator.js:12, :26; wallet_model.js:22-23; ai_service.mjs:52, :89 |
M | H |
| TK-T03 | Espacio antropológico: radial, circular, angular con las tres piezas del angular y su (no) gobierno | D04 | stats_model.js:24; backend.js:7306-7307; logs_model.js:235-263; larp_model.js:9, :139; melody_model.js:124; AI_view.js:61 |
M | H |
| TK-T04 | Capa cortical completa: Multiverse, PUB, hops, caps, autofollow, pánico, update; inventario de lo que decide el operador | D06, D07 | backend.js:4651, :4663, :9556, :8054-8057; server-config.json:6, :12, :25-27; SSB_server.js:70, :88-93 |
M | H |
| TK-T05 | Eutaxia con indicadores: tabla mecanismo / seam / eutaxia o distaxia, base de EU-2…EU-6 | D02 | parliament_model.js:25-26, :373-380; tribes_model.js:753-760; exportmode_model.js:25-26; onboarding_model.js:116; backend.js:9556; stats_model.js:438 |
M | C |
| TK-T06 | Holización y karma: dónde holiza el log, dónde des-holiza el karma; la clave como unidad de cuenta | D03 | inhabitants_model.js:87, :217-220; parliament_model.js:244, :422-423, :576, :650; parliament_view.js:21; polls_model.js:99 |
M | H |
| TK-T07 | Materialidades y la reducción M3→M1: inventario M1/M2/M3 por módulo (§2) y las dos restas del karma | — | banking_model.js:35, :609-617, :838-840, :1151; opinions_model.js:59; settings_view.js:24; typed_log.js:77 |
S | H |
OP-02 · Parches de eutaxia (carril EU)
Especificación de cada EU-n como tarea documental: qué cambia, qué invariante conserva, cómo se verifica. Default del plan: se documenta, no se implementa.
| ID | Tarea | Depende | Seam | T | P |
|---|---|---|---|---|---|
| TK-EU01 | EU-1: corticalRule en el log para Multiverse, invites, hops y autofollow; loopback en /settings/fediverse* |
D01, D06, D07, T04 | backend.js:4651, :4663, :170; oasis-pub.js:40-41; server-config.json:12, :25-27 |
L | C |
| TK-EU02 | EU-2: export con secret cifrado por passphrase; backup verificado |
D02, T05 | exportmode_model.js:25-26; onboarding_model.js:5, :116, :123-125 |
M | C |
| TK-EU03 | EU-3: /update sin git reset --hard sobre src/configs/; CSRF |
T05 | backend.js:9552-9556 |
S | H |
| TK-EU04 | EU-4: uptime, edad del feed, legislaturas transcurridas y anárquicas en stats |
D02, T05 | stats_model.js:24, :438; parliament_model.js:25-26, :373 |
M | H |
| TK-EU05 | EU-5: basalRule con procedencia; karma sin resta de gramos; carbono como tasa aparte |
D03, T06, T07 | banking_model.js:14-21, :31-37, :840, :1151, :932 |
M | H |
| TK-EU06 | EU-6: dos pasos para el pánico con export previo | T05, EU02 | backend.js:8054-8057; panicmode_model.js:6-10 |
S | M |
| TK-EU07 | EU-7: aiApproval registrado, token local en 4001, larpCalendar como mensaje |
D04, T03 | AI_view.js:61; ai_service.mjs:52, :89; larp_model.js:9, :139 |
M | M |
OP-03 · Verificación y fichas
| ID | Tarea | Depende | Seam | T | P |
|---|---|---|---|---|---|
| TK-V01 | Script de lectura: cada fichero:línea de modelos/clase/*.md existe en vendor/oasis y la línea contiene el símbolo nombrado |
— | todos | S | H |
| TK-V02 | Fichas revision/01-materialidades.md … 06-holizacion-democracia.md con el formato de ficha; cada K con al menos un hueco o un «sin hueco» |
T01-T07 | — | L | H |
| TK-V03 | Notas al margen (2026-09-09) en draft.md con las dos correcciones de línea de §0.5 (steward :164/:457, box :320) |
— | industry_model.js:164, :457; crypto.js:320 |
S | M |
Resumen de prioridades v0
| Prioridad | Tareas |
|---|---|
| Crítica | TK-T01, TK-T05, TK-EU01, TK-EU02 |
| Alta | TK-T02, TK-T03, TK-T04, TK-T06, TK-T07, TK-EU03, TK-EU04, TK-EU05, TK-V01, TK-V02 |
| Media | TK-EU06, TK-EU07, TK-V03 |
El carril D no lleva prioridad propia: cada D tiene default y solo bloquea el ascenso de certeza. Decisión pendiente para el usuario (heredada del plan): si el carril EU se queda en documentación o se abre a tareas de código. Default: documentación.
6. Fuentes
Código auditado (disco): vendor/oasis @ 9a657b776fcafc7c24bf3ad61825316385ecf513 (release 1.0.7, 2026-09-08). Clonado con git clone --depth 1 https://github.com/epsylon/oasis.git. Versión y licencia en src/server/package.json.
Fuente primaria del proyecto: README.md de Oasis («No browser JavaScript. Just pure HTML+CSS»), no verificada de forma independiente.
Doctrina: draft.md §Panorámica y §1 (chuletario corregido). Obras: Ensayos materialistas (1972), El animal divino (1985), Primer ensayo sobre las categorías de las ciencias políticas (1991), Teoría del cierre categorial (1992-93), ¿Qué es la ciencia? (1995), España frente a Europa (1999), Panfleto contra la democracia realmente existente (2004), El fundamentalismo democrático (2010). Sin páginas: todo lo doctrinal es [doctrina, sin verbatim] con grado A/B/C hasta que el carril D lo verifique.
Grado de certeza. Cuatro niveles: verificado en código con fichero y línea (todo §1.1-1.2, §2 y §3, con sed -n sobre el commit) · fuente primaria del proyecto, no verificada de forma independiente (README de Oasis) · inferido de la actividad del repositorio (ninguno en este draft: Faircoin no se usa) · paráfrasis marcada, no cita (coordenadas K1-K7 con A/B/C; las lecturas del operador y del eje angular como extensiones C).