docs(theming): el dia queda cerrado - handoff 2026-08-26, causa corregida y suelo en 66

Cierre documental tras el adversarial de SS14 (firma sostenida; un claim de
ACTA cayo y se corrige aqui):

- La causa de la extension transitiva del censo era CONTRAFACTUAL en tres
  sitios (census.ts, next-features, CONTINUE): el alias de SS14 no lleva
  prefijo propio y el censo lo descarta antes - clasifica global con la
  razon CORRECTA (medido construyendolo: 1 new, rojo). La extension se
  justifica por tooltip (alias propio sobre canal propio), no por el alias.
  Reescrita con el contrafactico medido.
- El suelo sube a minAtHundred 66 - SS14 llevo a tabs al 100% y el
  adversarial cazo el suelo rezagado de su propia ley ("only moves up").
- SS15 NUEVO en next-features, redactado por el adversarial: el GEMELO un
  piso arriba - floating.svelte.ts publica cinco medidas de instancia como
  --floating-* (publico sin dueño, ~8 recetas lectoras); mas grande que SS14
  porque el posicionador sirve a muchos hosts. Dimensionar antes de firmar.
- Handoff 2026-08-26: las cinco firmas del dia con sus adversariales, lo
  primero de mañana por orden de valor (SS15 - la especie de forma sin dueño
  - cableado motion - palabras/timeline), el estado de la rama compartida
  (peer vicen-63 con su C2c/hook, que push falta) y las leyes nuevas del dia
  (el nombre dice la verdad en las dos direcciones; grep ciego a llaves;
  sonda ciega a canales; una causa sin contrafactico acaba corregida).

Suelo 5/5 con 66 - docs:check 0/0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
alpha-0.1-background
dev 1 month ago
parent 8ac23047f1
commit 613215fe7c

@ -2655,11 +2655,14 @@ retiró una sola). Catálogo: `atHundred` **65 → 66**, global 763 → **761**,
RETIRADAS** —la clave entera desaparece— con acta en la cabecera de
`scripts/theming-census-debt.ts`; **1154 → 1152 · 0 NEW · 0 STALE**.
**La trampa de clasificación, prevista y resuelta**: la regla de canal del censo
mira el privado que el knob lee DIRECTAMENTE con cero declaraciones; una
línea-alias es un privado DECLARADO cuya única fuente es el canal, así que la
esquiva y cae a residuo `private` no-derivado. El tercer paso de `scanComponent`
resuelve ahora el canal **TRANSITIVAMENTE** (molde de `derivesFromPublic`:
**La trampa de clasificación, prevista y resuelta** — *con la causa CORREGIDA
por el adversarial el mismo día*: la premisa «la línea-alias esquiva la regla y
cae a residuo» era CONTRAFACTUAL — el alias de §14 (`--_indicator-*`) no lleva
prefijo propio y el censo lo descarta antes de coleccionar privados: un knob que
lo lea clasifica `global`, rojo con la razón CORRECTA. El caso que JUSTIFICA la
extensión es `tooltip` (alias con prefijo propio sobre canal propio: reclasificó
`exception` → `channel`, lo que su comentario firmado siempre afirmó). El tercer
paso de `scanComponent` resuelve el canal **TRANSITIVAMENTE** (molde de `derivesFromPublic`:
memoizado, a prueba de ciclos, `every` en todo el camino). La **mutación de
rigor** que lo delimita: un alias hacia un privado que SÍ está declarado NO
clasifica canal — resuelve al valor de esa declaración, cuyas refs son vacías (un
@ -2710,3 +2713,27 @@ docs, `npm run check` sin errores atribuibles.
siguen siendo dos públicos de FORMA sin prefijo de dueño y sin entrada de
contrato — la misma fuga de espacio que esta firma cerró para las medidas, una
especie más allá. El punto 2 los mandó a la puerta del contrato y ahí siguen.
## 15. La capa flotante publica cinco medidas con nombre público sin dueño — 2026-08-26
**PENDIENTE — redactado por el adversarial de §14, NO ejecutado.** El gemelo del
defecto que §14 acaba de cerrar, un piso arriba y con más superficie:
`src/uix/soma/layers/floating/floating.svelte.ts:300-336` publica por instancia
`--floating-{transform-origin, available-width, available-height, anchor-width,
anchor-height}` — **una capa compartida escribiendo medidas de instancia bajo
forma PÚBLICA sin dueño**, la especie exacta de los `--indicator-*` retirados.
Los leen **~8 recetas** (`popover.css:132,157` · `tooltip.css:22,45` ·
`select.css:192,205` · `combobox.css:178,191` · `menubar.css` · `split-button` ·
`palabras-chrome.css:161` · `generated/base.css:8872`). Invisibles a la ley del
espacio cerrado por la misma razón: esa ley audita `--{c}-*` y un nombre sin
prefijo de componente es vocabulario ajeno.
La diferencia que hace este expediente MÁS grande que §14: aquí el host no es
uno por instancia de capa — el posicionador flotante sirve a MUCHOS componentes
a la vez, así que «el namespace del host» exige que la capa reciba el kebab de
CADA superficie que posiciona (la forma ya existe: §14 le enseñó a
`MeasuredIndicator` a recibirlo del morfo). Y `getFloatingContentCSSVars`
(`floating/utils.ts:18`, export muerto ya registrado en §13) construye
`--${name}-anchor-width` por plantilla — el mismo expediente decide si muere o
se alinea. Dimensionar antes de firmar: ~8 recetas × N sitios, la cadena de
verificación dinámica de §14 sirve de molde.

@ -29,7 +29,68 @@ firma B′ quedaron FIRMADAS Y EJECUTADAS** — las dos decisiones más caras
pendientes. Global **73 %** (68 % antes de la clase `structural`, 69 % antes de
`bridge`/`channel`), **65 componentes al 100 %**.
## HANDOFF 2026-08-25 (noche) — POR AQUÍ MAÑANA
## HANDOFF 2026-08-26 (noche) — POR AQUÍ MAÑANA
**El día ejecutó CINCO firmas más, todas con su adversarial**: la
clasificación de los 318 privados (`e812d3ffd`+`a74aeec7b`+`90b93a79e`,
adversarial 13/13) · la ley del ESPACIO CERRADO (`6499eb2a4`, 7/7) · el
codemod de los 13 canales (`e100ea520`, atómico verificado) · el indicador de
navigation-menu, (a) completada (`de2e136a0`, 6/6 — la especie `output` se
propuso y se RECHAZÓ por abrir excepciones) · **§14, MeasuredIndicator con
nombre poseído** (`8ac23047f` — «la capa es la pluma, no la dueña»; `tabs`
cierra al 100 %). La familia de indicadores entera habla UNA doctrina.
### Lo PRIMERO mañana, por orden de valor
1. **§15 — el GEMELO un piso arriba** (redactado por el adversarial de §14,
abajo en `next-features.md` §15): la capa flotante publica CINCO medidas de
instancia como `--floating-*` — forma pública sin dueño, ~8 recetas
lectoras. La especie exacta que §14 cerró, con más superficie y con el
matiz de que el posicionador sirve a MUCHOS hosts. Dimensionar antes de
firmar; la cadena de verificación de §14 es el molde.
2. **La especie de FORMA sin dueño**: `--indicator-duration`/`-ease` (flagged
en §14) — ¿contrato de qué componente, o vocabulario de capa declarado?
3. **Cableado `EidosConfig.motion`→CSS** — mata la última entrada del registro
`PENDING_PRIVATE_RENAME`.
4. **Re-clasificar `palabras`** (canal de valor del scheme, no tema) y
**reabrir `timeline`** (§5 pre-B′) — los dos con expediente escrito.
### Estado de la RAMA al cerrar el día (léelo antes de tocar nada)
- **SIN PUSH desde `e100ea520`**: el codemod de canales, navigation-menu,
§14 (`8ac23047f`) y el cierre documental del día. El resto del día está
pusheado hasta `cec75d04e`.
- **Sesión peer `vicen-63` ACTIVA en la rama** (auditoría P0): su C2c retiró
los `syncAttrs` (los de tabs/radio-group VIAJARON en `8ac23047f` con
atribución declarada y acuerdo por canal), su cirugía del runtime y su
commit venían detrás, y **re-armará el hook pre-push** (`scripts/hooks/
pre-push` es la fuente; el gate ya pasa en verde sobre HEAD con el lint
fuera hasta el one-shot de formato). Si un push falla, el mensaje del gate
dice qué. La sesión de fichas (`vicen-3c`) commiteó `cc2894b36`.
- **Protocolo de rama compartida que el día confirmó tres veces**: staging
por RUTA explícita (nunca `add -A` — 375 ficheros a punto de colarse una
vez), la RAÍZ del repo también se stagea (STUMBLES.md se quedó fuera una
vez), y antes de medir un fichero, `git diff HEAD -- <f>` por si el peer lo
movió.
### Las leyes nuevas del día (además de las firmas)
- **El nombre dice la verdad en las DOS direcciones** — ni knobs que un tema
no puede mover (el inline gana), ni privados que un README enseña como API.
Cuando ninguna de las dos ortografías dice la verdad, la respuesta NO es
una especie nueva: es preguntar qué está mal en el DISEÑO (así cayó
`output`, y así el README de navigation-menu aprendió a enseñar la PARTE).
- **El grep literal es ciego a la forma con llaves** (`--x-{a,b,c}`) — se
barre por STEM.
- **La sonda estándar es CIEGA a los canales** (PROPS sin
translate/rotate/gridTemplateColumns/animationDuration): su 0-diff prueba
lo circundante; el canal se verifica en DINÁMICA por CDP con control
negativo y positivo.
- **Un alias sin prefijo propio ni siquiera entra al clasificador** — y una
causa escrita sin su contrafáctico medido acaba corregida por el
adversarial (pasó dos veces hoy).
## HANDOFF 2026-08-25 (noche) — histórico
**Las CINCO firmas del eje están EJECUTADAS y pusheadas** (`2daa683fa`
file-upload · `df3a4d054` form/compuesto · `2ce43db56` tags-input aria ·
@ -220,12 +281,14 @@ claves de contrato INTACTOS — ni una acuñada ni retirada). Catálogo `atHundr
(la clave entera desaparece), **1154 → 1152 · 0 NEW · 0 STALE**, con acta en la
cabecera de `theming-census-debt.ts`. `radio-group` no mueve una cifra.
**⚠ La trampa de clasificación, prevista y resuelta**: la regla de canal miraba
el privado que el knob lee DIRECTAMENTE con cero declaraciones — una línea-alias
es un privado DECLARADO cuya única fuente es el canal, así que la esquivaba y
caía a residuo `private` no-derivado, `newDebt` ROJO con la razón equivocada. El
tercer paso del censo resuelve ahora el canal **TRANSITIVAMENTE** (molde de
`derivesFromPublic`). **Mutación de rigor**: un alias hacia un privado que SÍ
**⚠ La trampa de clasificación, prevista y resuelta** — *causa CORREGIDA por el
adversarial el mismo día*: la premisa del alias que «esquiva y cae a residuo»
era CONTRAFACTUAL — el alias de §14 no lleva prefijo propio, el censo lo
descarta antes de coleccionar privados, y un knob que lo lea clasifica `global`
con la razón CORRECTA (medido construyéndolo: `1 new`, rojo). La extensión
TRANSITIVA del tercer paso se justifica por `tooltip` (alias con prefijo propio
sobre canal propio, reclasificado `exception` → `channel` como su comentario
firmado afirmaba); molde de `derivesFromPublic`. **Mutación de rigor**: un alias hacia un privado que SÍ
está declarado NO clasifica canal — `refs.length > 0` es la línea que lo impone.
Y el ORDEN de pasos es carga estructural: el segundo (deriva de un público) corre
antes, y por eso `--_tooltip-max-width` sigue siendo público.

@ -654,13 +654,16 @@ export function scanComponent(dir: string): Scan | null {
const own = '--_' + dir + '-';
const isChannel = (r: string) =>
r.startsWith(own) && !declBySource.has(r) && !GENERATED_PRIVATES.has(r);
// TRANSITIVE, and this is the shape that forced it (firma §14, 2026-08-26): a
// SHARED layer's CSS cannot spell its host's name, so the consuming recipe
// declares a local ALIAS over the channel and the layer reads the alias — the
// palette bridge's wiring, one class over. That alias is a DECLARED private
// whose only source is an UNDECLARED one, so the direct test above misses it
// by construction and the knob falls to residue as a non-derived private:
// `newDebt` red with the wrong reason. Same mould as `derivesFromPublic`
// TRANSITIVE (firma §14, 2026-08-26) — and the honest record of WHY, corrected
// by the adversarial pass of the same day: the case that JUSTIFIES it is
// `tooltip` (an own-prefixed alias declared over an own-prefixed channel:
// `--_tooltip-content-width-override` → measured, it reclassified from
// `exception` to `channel`, which its signed comment had always claimed).
// The §14 alias of `radio-group` was the shape that PROMPTED the thought but
// never needed the rule: its alias (`--_indicator-*`) carries no own prefix,
// so the declaration filter above discards it before privates are even
// collected — a knob reading it classifies `global`, red, with the RIGHT
// reason. Same mould as `derivesFromPublic`
// (cycle-safe via `seen`, memoized), and `every` throughout, so a knob mixing
// a channel with anything else stays residue.
//

@ -77,8 +77,11 @@ const FLOOR = {
// the question was asked correctly, and none of the 31 was a real advance.
// 45 → 65 on 2026-08-26 for the same reason as the ratio above: a recipe
// whose only unreached knobs were among those 252 measures 100 % once they
// leave its denominator.
minAtHundred: 65
// leave its denominator. 65 → 66 later the same day: firma §14 took `tabs`
// to 100 % (its two `global` knobs were the misnamed indicator channel, now
// owned and out of the ratio) — raised in the commit that earned it, per the
// adversarial pass that caught the floor lagging the measure.
minAtHundred: 66
};
describe('theming reach — the floor only moves up', () => {

Loading…
Cancel
Save

Powered by TurnKey Linux.