You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Breaking (bindings + Rust API): a single canonical Card wire shape now
flows in both directions. Core owns it as quillmark_core::CardWire (with From<&Card> / TryFrom<CardWire>); the WASM/Python bindings serialize and
deserialize it instead of hand-rolling their own per-card translation. The
flat CardInput { kind, fields?, body? } input type is removed: Document.pushCard / insertCard (push_card / insert_card) now accept the
same Card shape they return ({ kind, payloadItems, … }), so a card from cards / removeCard / quill.seedCard feeds straight back in. Build a fresh
card from a flat field map with the new Document.makeCard / Document.make_card helper. A stale { kind, fields } object is now a loud
error (deny_unknown_fields), not a silently-empty card. The seeded per-card
getters quill.seedMain / quill.seedCard (seed_main / seed_card) are
exposed on both bindings, mirroring the Rust Quill::seed_main / seed_card.
Breaking (Rust API):Document::push_card now returns Result<(), EditError> and, with insert_card, validates that the card's $kind is a valid, non-reserved composable kind — the cards-list invariant is
enforced at the edit op rather than incidentally at Card::new.
Breaking (bindings + Rust API): the schema-aware form view is removed. Quill::form / Quill::blank_main / Quill::blank_card (and the quill.form / blankMain / blankCard bindings) are gone, along with the Form / FormCard / FormFieldValue / FormFieldSource types. Validation
diagnostics now flow through Quill::validate(&Document) -> Vec<Diagnostic>
(quill.validate(doc) in WASM/Python), which forwards the canonical validation::* diagnostics and keeps the non-fatal validation::field_absent
completeness signal that render demotes. Field values/defaults/order are a Document × quill.schema join the consumer performs directly. See docs/migrations/0.87-to-0.88.md.
Breaking (diagnostics): the validation code validation::must_fill_absent
is renamed validation::field_absent. "Must-fill" is now scoped to the
blueprint communication surface (the <must-fill> sentinel and the fatal validation::must_fill_sentinel); an absent field is a non-fatal
completeness signal, not a fill requirement, since the render floor
zero-fills it. The schema cell axis is renamed accordingly: the no-default:
cell is Unendorsed (was "Must Fill"), the antonym of Endorsed —
consumers routing on the old code or label must update. Internally ValidationError::MustFillUnset { source } splits into FieldAbsent and MustFillSentinel and the MustFillSource enum is removed.
Breaking (bindings + Rust API): the example reference document is
removed. QuillConfig::example() and the Quill.example (WASM) / Quill.example (Python) getters are gone. Its "show me a filled-out one"
role is served by seeding — Quill::seed_document() / Quill.seedDocument()
/ Quill.seed_document() — which returns a committed Document rather than
an annotated string. The CLI render with no input file now renders the
seeded document. Nothing consumed the example document's annotations (the
authoring surface is blueprint()), so the projection collapses into the
seed: internally the FillSource fork in blueprint emission is gone and the
blueprint always renders default: else the <must-fill> sentinel.
wasm: lower the npm package engines.node floor from >=24 to >=22.
The runtime never required 24 — --weak-refs needs only Node 14.6+, and the using sugar that motivated the 24 floor is optional (a try / finally
fallback covers Node 22). The aggressive floor hard-blocked installs on Node
22 CI/dev images under engine-strict.
wasm:Document.makeCard(kind, fields?, body?) now types fields as
optional in the generated .d.ts (was required, contradicting its docs);
omitting it yields an empty field map, as before.
docs: fix the Quill.schema getter doc — the returned schema includes ui hints (it never stripped them); the stale "ui hints stripped" wording is
corrected. The 0.87→0.88 migration guide now documents the fill flag's !fill-placeholder semantics and clarifies that seeding is example-filled,
not a blank-form replacement.
blueprint: flatten group_fields and drop the unused group label (#697).
docs: document seeding (example → absent), fix a block-scalar prescan
bug, and add commitment-ladder docs (#691).
docs(canon): dedup field-resolution semantics into SCHEMAS (#692); note
that released migration guides are era-accurate and immutable (#695); prune
evolutionary information from comments and canon docs (#700).