Decisions called during the slice-1 → slice-6 work. These supplement
the 12 binding decisions in docs/styling-spec.md §10 — they're
project-level calls about scope, sequencing, and deprecations, not
about the styling dialect's design.
Recorded so they don't get re-litigated.
The bib-data render-prop returns content JSX. Resolver flips from
renderTemplateFragmentToIR to renderContentToIR (or a
*FragmentToIR variant). <bib-entry-content> moves to content side.
The bibliography IS content; this is the architecturally honest path.
~10 files. Costs are paid once.
Catches typos. The dialect is supposed to be typed; an open-ended
pass-through erodes that contract. Add table-layout, word-wrap,
overflow-wrap for slice 5.4. Future missing properties get added
in their own slice — it's cheap.
Propagate real parent sibling info so parent: {index: "last"} just
works. No new selector form. The walker already has this info; just
needs to pass it down.
Authors write <section role="abstract">. Engine doesn't define
"abstract." 12 files of mechanical change, but keeping dead
semantics in the engine is exactly what slice 6 exists to delete.
Split resolver/ir.ts and resolver/resolve.ts. Pure refactor,
behavior-preserving. Every future slice gets cheaper.
It's the one blocking customCss completion. The others (indent,
text-flow, column-fit, caption-position) wait for actual
demand. Don't pre-build.
reactwright-* becomes stable public surface. Renaming to
underscore-prefixed internals breaks user CSS without proportional
gain. Spec §9 slice-4 entry: rejected. Engine classes are public
API as of v1.0.
Wait until IEEE_CSS hits zero. Warning the only consumer is noise.
<bibliography>, <toc>, <list-of>, and the template-side
<index> were removed in 0.3.0 (pre-1.0 breaking change). Authors
use the <Bibliography>, <Toc>, <ListOf>, <Index> userland
helpers from reactwright/userland, which compose the data-source
primitives. The <index term=...> content-side marker remains.
Single-package. Don't fragment into a separate @reactwright/defaults
until packaging demands it (subscriber feedback, monorepo split, etc.).
Hasn't been touched. If it bites again it resurfaces with fresh context. Don't carry unmaintained pending work.
The author-facing guide tree (see docs/roadmap.md Track C) ships as
packages/docs-site/ — a reactwright document whose source uses every
primitive it describes. Rationale: (a) strongest possible drift check —
broken primitives can't ship if the docs that demonstrate them won't
compile; (b) showcase value — readers arrive at the docs and see the
engine's output; (c) zero-cost migration when the web-HTML render
target (Track D) lands, the same source compiles to a browsable site.
Cost: doc-site engineering (prop-table generator, live-example check)
that a markdown-based site wouldn't need. Worth it.
Reactwright is not trying to be HTML. HTML's element list is treated as a coverage checklist for "what genuine document primitives exist." A node graduates to a reactwright primitive only when ALL THREE filters pass:
- Templates need to address it by selector — the kind carries
information a
<rule match>would want to bind to. (<dfn>passes: templates italicize first-mentions, link to glossary.<u>fails: purely presentational.) - It has a print-relevant rendering distinct from a generic role
— a template would treat it differently. (
<hr>passes — thematic break renders as dingbat/asterism/rule per template.<small>fails — a class binding via the styles dialect handles it.) - It appears in source ASTs we plan to bridge — Pandoc, MDX,
Wit, AsciiDoc, etc.
Failing filter 2 means the answer is "use
role=or<rule>with the styles dialect," not a new IR kind. Failing filter 1 means it's presentational and doesn't belong in the engine at all. The phased prioritization indocs/roadmap.mdTrack A applies this policy.
Established by these decisions:
- Slice 5.4 — cssPropertyMap (D2) + parentContext fix (D3) + 3 table customCss migrations. Next.
- Refactors #68 / #69 (D5).
- Slice 6.3 path A (D1) + slice 6.4.
- Slice 6.5 (D4) + slice 3
hanging-indent(D6). customCssdeprecation (D8) when IEEE_CSS = 0.- v1.0 removal pass (D9) when ready to cut.