b83d40a833
Rename batch de la Fase A del PLAN_MACRO: - 25 crates ente-* → arje-* (protocol/init/runtime/compat). El linaje arje (init Linux) queda con prefijo coherente. - vista → revista (revista-core + revista-web). - pluma → fana (fana-md + fana-md-reader-web). fana absorbe el linaje markdown de pluma; será el writer DAG editor (prioridad alta). Cambios: - git mv de 29 crate dirs + 2 SDDs - package/lib/bin names + path refs + imports .rs reescritos - workspace Cargo.toml + comentarios de sección - SDDs de init/runtime/compat/protocol actualizados a arje- - SDD de revista + SDD de fana (reescrito: writer DAG editor) - docs/STATUS.md, ROADMAP.md, PLAN_MACRO.md, arje-boot.md, arje-replace-systemd.md actualizados - docs/changelog/akasha.md → chasqui.md scripts/rename-fase-a.py idempotente (--dry-run soportado). cargo check --workspace verde. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
modules/fana/ — Writer DAG editor (absorbe pluma)
Propósito. Editor de escritura multidimensional: el documento es un
DAG de átomos narrativos con ramas (timelines), tracking de coherencia,
e indexación semántica. Absorbe el linaje markdown de pluma. Prioridad
alta entre las apps.
Estado
- Existente (de pluma):
fana-md(parser markdown, expluma-md),fana-md-reader-web(lector DOM, expluma-reader-web, aún dep degioser-web). - Planeado: el resto de sub-crates (writer DAG editor completo).
Crates (objetivo)
| crate | tipo | rol |
|---|---|---|
fana-core |
lib | NarrativeAtom + NarrativeGraph + CoherenceState |
fana-md |
lib | Parser markdown (ex pluma-md) |
fana-graph |
lib | DAG ops + propagate_mutation topológico |
fana-semantic |
lib | Cliente verbo + scoring de intensidad adjetiva |
fana-store |
lib | Persistencia sled/RocksDB + bincode/rkyv zero-copy |
fana-llm |
lib | Cliente HTTP a LLMs remotos (evaluación + merge) |
fana-render-plan |
lib | DrawCommands agnósticos (editor + sidepane + ghost) |
fana-editor-gpui |
lib | WorkspaceEditor View + OscilloscopeSidepane + Ghost |
fana-md-reader-web |
lib | Lector markdown DOM (ex pluma-reader-web) |
fana-editor-web |
lib | (futuro) editor WASM |
Modelo de datos
enum CoherenceState { Valid, InConflict { origin, reason }, PendingEvaluation }
struct NarrativeAtom {
id: Uuid,
content_hash: [u8; 32], // SHA-256 estricto
content: Arc<String>, // texto compartido (zero-alloc al ramificar)
semantic_vectors: HashMap<String, f32>, // concepto → intensidad
dependencies: Vec<Uuid>, // nodos prerrequisito
branch_id: String,
coherence: CoherenceState,
}
struct NarrativeGraph {
nodes: HashMap<Uuid, NarrativeAtom>,
adjacency_list: HashMap<Uuid, Vec<Uuid>>, // padre → hijos dependientes
}
Dependencias
fana-semantic←verbo(embeddings, instancia modelo ligero ~384d).fana-mdpuro (sin deps de host).fana-md-reader-web+fana-editor-web←wasm-bindgen,web-sys.fana-editor-gpui←gpui,nahual.gioser-websigue consumiendofana-md-reader-web.
Invariantes
- Toda mutación de texto valida contra el hash binario del contenido.
- Branches comparten texto vía
Arc<String>— clonar una rama es O(1). propagate_mutationmarcaPendingEvaluationen cascada topológica cuando un átomo origen cambia (shock-wave lógica).- Separabilidad UI estricta:
fana-core/md/graph/semantic/store/llm/ render-planagnósticos;fana-editor-{gpui,web}intercambiables.
Apps
apps/fana— binario GPUI (prioridad alta).apps/fana-web— (futuro) cdylib WASM.