Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

oc2 — chroix-stack STATUS

Источник: dev/fera-research/docs/oc2/STATUS.md (read-only; сгенерировано scripts/sync-docs.mjs)

Zone: ~/dev/fera/chroix-project/ docs + code of chroix, chroix-core, chroix-contract, chroix-macros, chroix-headless, chroix-vello. Mandate: UI-stack problems, integration maturity vs fera client, API gaps, display-list contract risks, what blocks replacing fera’s vello engine with chroix.

Rules honoured: read-only on all sources (no file outside docs/oc2/ written), one file per finding, each committed. Never pushed.

# file kind sev one-line
1 fera-ui-stack-unconsumed-island.md problem high fera’s UI crates are an island: nothing builds a RenderTree, no window layer exists, paint() silently drops text
2 vello-version-split-contract-verified-against-rejected-version.md problem high vello_gpu 0.3 migration is manifest-only (GPU path is a stub); DISPLAY-LIST §8.1 still verified against 0.10
3 backend-seam-duplicated-ctx-and-fingerprint-disagreement.md problem high Backend copy-pasted ×2 with incompatible PresentCtx; 3 disagreeing schema_fingerprint values; guard untestable
4 seam-inversion-engine-tree-vs-backend-bytes.md problem high seam points opposite ways — Engine::paint(RenderTree) vs Backend::present(&[u8]); text shaped on opposite sides
5 zero-allocation-requirement-violated.md problem mid encode() allocates 2 Vecs per call, no clear/reset/arena in the API — violates a stated §19 review gate
6 header-layout-never-matched-spec.md problem high wire header never matched §3 (CXL vs CHDL, frame_id/abi_version swapped, 56B vs 52B); G2 was a symptom
7 no-display-list-producer-exists.md problem high structural answer: layout + build stages absent; only test files ever create a buffer
  • #7 — the display list is consumed by two backends and produced only by tests/raster.rs:25-29 and tests/cpu_backend.rs:39-44. Fera adoption is blocked on building the framework’s middle, not on writing an adapter. OQ-3 puts layout in core, so it is unstarted core work, not deferrable to a backend.
  • #6 — reframes chroix/TODO.md G2/D1. The old bug read offset [8..10], which is exactly the spec’s offset: two functions in one crate followed two different headers. The offset was “fixed” uncommitted, which hid the cause. TODO.md Stage 2a grows the wrong baseline (56→72 on a layout that never matched §3).

Finding #2’s first draft asserted the shipped backend was on vello 0.10. That was wrong — verified chroix-vello/Cargo.toml:16-20 + lockfile give vello_gpu 0.3 / vello_cpu 0.3 / wgpu 30, and legacy vello is absent from the lock. The correction is written into the doc rather than quietly edited; the surviving defect is that the migration is declarative (GPU path is VelloGpu { _private: () } returning Err(Error::GpuUnimplemented)) and §8.1 is stale.

seq 5 intro · 8 → oc3 (ui island) · 9 → all (seam/fingerprint) · 10 → all (header) · 12 → all (structural answer) · 13 → oc4 (consumer-gate convergence).

Cross-pollination: oc4’s idea-06 independently measured the same consumer-gate class (“6 of 6 real crates have zero consumers … unreachable AND GREEN”). Sent them the case their gate would miss: lower.rs:77-81 drops Text|Image|Spacer while paint() returns Ok(()) — a crate that is consumed, yet reports success on an empty frame. Proposed strengthening the gate to “reachable AND observable”.

  • node_index side table: spec §11 resolved NodeBoundary as a parallel index; code keeps it as opcode 11 and grep node_index returns zero hits. Fold into #6/#7 rather than a new file.
  • Backend fidelity per-op audit (headless is FillRect-only, StrokeRect parsed-and-dropped, layers are bare counters) — quantifies how far “one contract, two backends” actually is.
  • Integration hazard: contract work uncommitted (9 files) while backends pin git #c37de46a; global insteadOf rewrite to a local file:// path.