docs + fixture suite + grammar reference (Phase 9)#9
Merged
Conversation
Closes out the 0.1.0 work plan. Version stays at 0.0.0 — the user does final review and tags. Docs: - README rewritten around the locked 0.1.0 surface. Rust + TS quickstart, selector cheat sheet, install/use-cases/layout sections. - docs/ARCHITECTURE.md — tokenizer state machine, parser stack, mutation strategy (string-splicing not AST rewrite), two-track API. - docs/SELECTOR-GRAMMAR.md — formal grammar, examples for every form, unsupported list (sibling combinators, :has, etc). Fixture suite (the user explicitly asked for this): - 38 fixture files across six dirs under tests/fixtures/: parse, parse_fail, select, mutate, serialize, validate. - tests/fixture_suite.rs walks each dir with insta::glob! and produces 46 reviewable .snap files. Adds 6 wrapper test functions to the cargo test report. - Snapshots checked in. Regenerate via `INSTA_UPDATE=always cargo test`. Tests at this point: - 166 Rust tests (unit + integration + proptest + 6 fixture-suite wrappers backed by 46 globbed snapshots) - 23 vitest tests against the built binding - 0 line uncovered on the workspace (modulo regions in selector parser that are sub-line region accounting, not actual uncovered source)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes out the work plan. Version stays at
0.0.0— final review + tag are yours.What's in this PR
Documentation
0.1.0API. Rust + TS quickstart, install instructions, selector cheat sheet, use cases.docs/ARCHITECTURE.md— tokenizer state machine, parser stack, mutation strategy (string-splicing rather than AST rewrite), two-track API split between Rust and Node, test layering.docs/SELECTOR-GRAMMAR.md— formal grammar (BNF), examples for every form including tag-less attribute selectors, list of what's deliberately not supported in 0.1.0 (sibling combinators,:has(), case-insensitive flags).Fixture-based integration suite (you explicitly asked for this)
crates/marxml/tests/fixtures/, across six categories:parse/(20 files) — clean inputs covering every parse pathparse_fail/(9 files) — inputs that must returnErr, snapshotted error messagesselect/(5 files) — each runs through a 9-selector probe setmutate/(4 files) — each exercises update / replaceContent / replaceInserialize/(4 files) — each emits to_xml (default + pretty) and to_jsonvalidate/(4 files) — each runs against a hard-coded gg-style schematests/fixture_suite.rswalks each dir withinsta::glob!and produces 46 reviewable.snapfiles, all checked in.Tests at the end of Phase 9
.node)Coverage held at 100% (source-line level) across the workspace.
What still happens before publishing 0.1.0 — for your final review
Cargo.tomlworkspace version +bindings/node/package.jsonversion from0.0.0→0.1.0.## [0.1.0] — 2026-MM-DDheading toCHANGELOG.mdover the[Unreleased]block.NPM_TOKEN(npm publish)CARGO_REGISTRY_TOKEN(crates.io publish)CODSPEED_TOKEN+CODSPEED_ENABLED=truevariable (optional, for bench tracking)CODECOV_TOKEN(already wired, optional)git tag v0.1.0 && git push --tags. That fires.github/workflows/release.yml:Anything off here, push back before merging.