# PLAN — Arts docs reconciliation (the `active-app` ecosystem) > **Why this exists**: the docs reconciliation (Phase 6 drift-fix + Phase 7 > corpus-libro) covered the **active-uix** ecosystem (morfo · soma · sema · > eidos → the `docs/architecture/*` chapters). The **active-app** side — the > `arts/` runtime artifacts that `ActiveApp` composes — was left as E5-in-place > and never got the same pass. This plan does for arts what F6+F7 did for the > UIX layers. Grounded in a 22-agent per-art audit (2026-07-03) — every drift > below was verified against the code. > **Kickoff for a new session**: *"Lee docs/process/PLAN-arts-docs-reconciliation.md > y ejecuta la tanda que toque."* Rules (inherited): respond in Castilian, docs > in English; NEVER touch `words/` `palabras/` `chronos/` `media-player`; commit > per batch (`-F file` messages — backticks in `-m` run command substitution); > `git reset -q` + stage only your own files; each systemic fix ships a guard. ## The ecosystem (22 arts) `src/arts/` = the runtime building blocks `ActiveApp` composes (the `active-app/README.md` composition root is the analogue of `active-uix`). Naming canon: `Engine*` (stateless, pure factory) / `Active*` (reactive `$state`, `.svelte.ts`). The shared `ActiveEngine` contract + the index live in [`src/arts/README.md`](../../src/arts/README.md). ## Audit findings (2026-07-03, evidence-based) | Art | Lang | Drift | Extra docs | Disposition | |---|---|---|---|---| | **active-app** | mixed | 3 (missing `defineEngineMotion` in services table; 3/7 presets shown; incomplete FS layout) | — | **→ architecture chapter** (composition root; has a Spanish "Handoff 2026-05-13" to extract) | | **orca** | spanish | **6** (phantom `OrcaAction.priority`/`tokenTimeoutMs`/`onFatal`/`execution`+`ORCA_EXEC_*`) | — | **book-chapter candidate** (orchestration kernel; highest drift; ES→EN, high effort) | | adom | spanish | 3 (missing `prefersReducedMotion`/`writeProperty`/`removeProperty`; `listen()` 4 overloads; 9 undoc rune helpers) | docs page (ok) | E5-reconciled + ES→EN; stale `/test/adom` ref | | bus | english | 4 (layer diagram says `arts/bus` but files in `libs/bus`; stale preset names post-refactor; `COLLECT` error mode undoc) | — | E5-reconciled (agent said book-chapter) | | cache | mixed | 4 (wrong `createActiveApp({cache})` sig → `services:{cache:defineActiveCache()}`; undoc `clearError`/`snapshot`/`onChange`; demo URL placeholder) | — | E5-reconciled (agent said book-chapter) | | format | spanish | 4 (`unts/`→`units/` typo; undoc `currency.convertAs/formatAs`, `units.convertToDefault`) | `currency/README.md` (keep) | E5-reconciled + ES→EN | | timer | english | 4 (FS diagram 11→20 files; "50 tests"→47; `reschedule` behavior/errors drift vs DESIGN) | `DESIGN_TIMR.md` (1400 L, **Spanish**, normative) | E5-reconciled; **DESIGN doc → decisions/ (translate)** | | color | english | 3 (JSDoc `setCssVariables`→`applyColorScheme`; "Phase 0 not consumed" stale; bare THEMING ref) | — | E5-reconciled | | connection | spanish | 2 (`createEngineConnections()` needs `{timers}`; 6 missing `Active` props) | `DESIGN_CONN.md` (486 L, historical) | E5-reconciled + ES→EN; **DESIGN → decisions/**; stale `/active`+`conn-chat` refs | | sium | spanish | 3 (18 codes listed, 8 omitted; undoc `cssLength`/`CSS_LENGTH_REGEX`) | `COMPARATIVA_*` (foreign/untracked), `_examples/README` | E5-reconciled + ES→EN | | prefs | spanish | 2 (wrong `createPrefsStorageBridge`/`applyBrowserEnvironment` param names) | — | E5-reconciled + ES→EN | | clipboard | spanish | 1 (`$active-app/services`→`/service-factories`) | — | E5-reconciled + ES→EN (small) | | motion | english | 2 (missing `resolve/has/list/exit`; `JsDriver` `svelte` unimplemented) | — | E5-reconciled | | http | english | 1 (`DEFAULT_*`→`HTTP_DEFAULT_*` names) | — | E5-reconciled | | **ethereal** | english | 0 | `PERF.md` only | **needs-readme** (no README at all) | | session | english | 0 | `DESIGN.md` (historical) | E5 clean; **DESIGN → decisions/** | | perm | english | 0 | — | E5 clean; stale `/test/perm` ref | | perf | english | 0 | — | E5 clean | | auth | spanish | 0 | — | E5 clean + ES→EN only | | langs | mixed | 0 | — | E5-reconciled (light EN pass) | | logger | mixed | 0 | — | E5-reconciled (light EN pass) | | storage | english | 0 | — | E5 clean | **Rollup**: ~40 verified drift findings across 15 arts · **12 READMEs need ES→EN** (8 spanish: adom, auth, clipboard, connection, format, orca, prefs, sium; 4 mixed: active-app, cache, langs, logger) · **1 missing README** (ethereal) · **3 historical DESIGN docs** (connection, session, timer) + 1 foreign COMPARATIVA (sium) · several **dead route/demo cross-refs**. ## Batches (mirror F6 drift-fix → F7 structure) | Batch | Content | Effort | |---|---|---| | **A0** | **Guard first**: extend `docs-check` (or a new `arts:check`) — every `src/arts/{name}/` has a README; the `Engine*/Active*` naming holds; (optional) an I-invariant that the arts index lists every art. Ship it so A1–A3 land against a net. | low | | **A1 — drift sweep** | Fix the ~40 doc↔code mismatches, art by art (verify each edit against the code symbol the audit cited). Priority by count: orca(6) · bus/cache/format/timer(4) · active-app/adom/color(3) · connection/prefs/sium(2) · clipboard/http/motion(1). Also the dead cross-refs (adom `/test/adom`, connection `/active`+`conn-chat`, perm `/test/perm`, cache demo URL). | high | | **A2 — ES→EN** | Translate the 8 Spanish + 4 mixed READMEs (faithful, mark stale with ``, same rule as F6). Biggest: orca, adom, format, connection, prefs, sium. | high | | **A3 — ethereal README** | Author `src/arts/ethereal/README.md` (it only has `PERF.md`). Ethereal is the floating/positioning engine (`$ethereal` = the own floating-UI runtime). Follow the art README shape; link `PERF.md` as its correctness record. | low | | **B1 — active-app chapter** | Promote `active-app` to `docs/architecture/active-app.md` — the arts composition root, the missing analogue of `active-uix.md`. Extract the "Handoff 2026-05-13" Spanish block to `docs/process/`; ES→EN; stub at the old path (like the layer READMEs). Wire into `docs/README.md` E1 + the reading order. **This is the "active-app was missing from the book" fix the user pointed at.** | medium | | **B2 — DESIGN docs** | Move the historical design docs to `docs/decisions/` like the eidos RFCs (they're already indexed in `docs/decisions.md`): `DESIGN_CONN.md`, `session/DESIGN.md`, `timer/DESIGN_TIMR.md` (Spanish, 1400 L — translate or move verbatim-as-historical per the F7 chronicle rule). Stubs at old paths keep the ~30 `DESIGN_TIMR §12.8`-style provenance citations resolving. `sium/COMPARATIVA` is foreign/untracked — leave unless staged. | medium | | **B3 — index + TOC** | Verify `src/arts/README.md` lists all 22 (add any missing); confirm `docs/README.md` E5 pointer + add the arts to the "I want to… use a runtime artifact" shortcut. `docs:check` green. | low | ## Decisions (locked by the user, 2026-07-03) 1. **Arts structure** → **E5-in-place-reconciled + `active-app` promoted to an architecture chapter.** The 22 arts stay next to the code (drift-fixed, ES→EN, indexed); only active-app becomes `docs/architecture/active-app.md` (B1). Same call F7 made for the peripheral READMEs. 2. **orca** → **E5-reconciled for now** (fix the 6 phantom fields + ES→EN); NOT an architecture chapter. Revisit only if it grows a consumer-facing surface. 3. **DESIGN docs** → **move to `docs/decisions/`** as `design-*` siblings of the RFCs (stubs at old paths keep the `§N` provenance citations resolving). `DESIGN_TIMR.md` (Spanish, 1400 L): translate, OR keep verbatim-historical with a `status: historical` header (the F7 chronicle rule) — decide at B2 based on how much of it is normative-vs-narrative. These lock B1/B2. A1/A2 are unaffected (drift + language are needed regardless). ## Verification (per batch) `npm run check` (compare to the drifting foreign baseline, not 59) · the art's own tests where they exist (`vitest src/arts/{name}`) · `npm run docs:check` after any doc move · `arts:check` (A0) green · browser only if an art has a live docs page.