This file holds completed items and completion notes moved out of TODO.md so active backlog work stays focused.
Validated 2026-04-22. Items #29, #30, #31, #32 all landed in the 2026-04-19 batch. All 29 previously-draft lint rules now graduated (37 total tested, 0 draft). Cross-repo WOS-T4 / Trellis signature closeout is now tracked canonically here at the stack level; submodule TODOs remain the local execution notes. Formspec's signed-response / authoredSignatures slice landed 2026-04-22. Trellis SignatureAffirmation append/export/verify/tamper vectors and Core extension prose landed 2026-04-22 (trellis/ submodule).
- Respondent Ledger §6.2 MUST promotion closed 2026-04-22 —
eventHash/priorEventHashare now mandatory when a Respondent Ledger event is wrapped by a Trellis envelope;priorEventHash = nullis reserved for the first wrapped event. - ADR 0072 Formspec-side implementation closed 2026-04-22 —
attachment.added/attachment.replacednow carryEvidenceAttachmentBinding;attachment.removedreferencespriorAttachmentBindingHashwithout minting a new binding; schema conditionals and a concrete attachment-binding fixture landed.
- #30 — Changelog snake→camel boundary hardened.
generate_changelogPython binding now acceptswire_style="snake" | "camel";change_to_objectincrates/formspec-core/src/json_artifacts.rsskips None for optional string fields so camel output matcheschangelog.schema.jsondirectly._changelog_snake_to_camelhelper + 52 LOC of private allowlist deleted fromvalidate.py. 8 new tests (5 Python, 3 Rust) pin the contract. - #31 — Release-pipeline scripts now have 22 tests across
scripts/tests/(8 filter + 10 placement + 4 CLI subprocess). Scripts refactored to export purefilterForTier/restoreFromScratch/checkPlacementfunctions with CLI guards. CLI behavior preserved byte-for-byte. - #32 — Registry assertion at
tests/unit/test_lint_rule_registry.pyextracted into_check_diagnostics_against_registrythat iterates all matching diagnostics instead of pickingmatching[0]. 5 new unit tests pin divergent-emission detection with per-emission locator. - #29 fully closed — all 29 previously-draft lint rules graduated to
testedwith triggering fixtures andwith_metadata-wrapped emission sites. - Schema additions —
variant: "plain" | "richtext" | "markdown" | "latex"on TextInput in bothschemas/component.schema.jsonandcrates/formspec-lint/schemas/component.schema.json. - Baselines — 300 Rust lint tests green, 13/13 registry tests green, 1986 Python tests green.
- #22 — FEL trace bridge through WASM → Python → TS → MCP. New MCP tool
formspec_fel_tracereturnsTraceStep[]byte-identical to Rust. - #23 —
benchmarks/run_mcp_loop.pyverified end-to-end (score=1.0 / validates=truein one round on invoice task). - #24 — Tier-split release pipeline with scripted partitioning + per-tier sequential CI.
- #25 — CI gate verified; 8 on-disk fixtures + generic registry-driven assertion replaced 3 hand-crafted per-rule tests.
- #26 — 29 draft rules carry verified
specRef+suggestedFix(state intentionally remaineddraftat that point). - #27 — Changelog E100 fix: envelope marker in generator + snake→camel translation at lint boundary + 4 round-trip conformance tests + benchmark widening.
- #28 — ADR-0064 landed in earlier session; submodule pointer already current.
- Studio-core extraction review batch resolved (type maps, dispatch typing, catalog entries, fallback removals, exports, dependency cleanup, duplicate tests).
- Individual review findings resolved across screener evaluation, widget hint casing, adapter defaults, dead code removal, layout mapping, bind pills, test naming, E2E placement, prose alignment, and cast cleanup.
- ARCH/BUG/UX/CONF findings listed in the prior TODO log are completed and archived here.
- Includes FEL chain wiring, sigil hints, per-row shape evaluation, date coercion, repeat template required handling, sampling overrides, place-on-page resolution, status persistence, widget mapping fixes, wildcard shape rewrites, and documented sortable E2E limits.