serde-hl7 0.1.1

Serde support for Health Level Seven (HL7®) messages in Rust: serialize and deserialize HL7 v2 and HL7 v3 values with Serde, so they can flow through JSON, YAML, or any other Serde data format. `serde_hl7::v2` is the `serde-hl7-v2` crate and `serde_hl7::v3` is `serde-hl7-v3`, each behind a feature of the same name. HL7®, and FHIR® are the registered trademarks of Health Level Seven International and their use of these trademarks does not constitute an endorsement by HL7. This project is an independent work.
Documentation
# Tasks — `serde-hl7`, `serde-hl7-v2`, `serde-hl7-v3`

Execution checklist; rationale lives in [`plan.md`](plan.md). A `[x]` means
the work is **verified done**, not intended — check items off in the same
change that completes them, with the evidence named.

## Evaluation (verified 2026-09-10)

- [x] Confirmed no Serde code existed to extract: `grep -rIl serde` over
      the workspace excluding `target/` hit only `Cargo.lock`, `spec/phi`,
      four `AGENTS.md` files listing Serde under *don't*, and one website
      page. No member `Cargo.toml` named `serde`.
- [x] Read `serde-er7` in full (Cargo.toml, every `src/*.rs`, all eleven
      spec sections, tests, examples, README) to mirror its structure.
- [x] Checked crates.io: `serde-hl7`, `serde_hl7`, `serde-hl7-v2`, and
      `serde-hl7-v3` all returned 404 from
      `https://crates.io/api/v1/crates/<name>` on 2026-09-10.
- [x] Recorded the gate in root `plan.md` → Non-goals, and the
      maintainer's explicit override of it for these three crates.

## Build (done 2026-09-10)

- [x] Decided the names, the umbrella-with-features shape, and the
      sub-crate split — the maintainer's, in session.
- [x] Wrote `serde-hl7-v2`: `src/{lib,message,node,diagnostic,kind,version,strict}.rs`,
      `tests/integration.rs`, three examples, `spec/` with index and
      eleven sections, README, AGENTS.md, CLAUDE.md, LICENSE.md.
      41 unit + 12 integration + 10 doc tests pass.
- [x] Wrote `serde-hl7-v3`: `src/{lib,object,element,message,vocabulary,null_flavor,rim,strict}.rs`,
      `tests/integration.rs`, three examples, `spec/` with index and
      eleven sections, README, AGENTS.md, CLAUDE.md, LICENSE.md.
      32 unit + 9 integration + 17 doc tests pass.
- [x] Wrote `serde-hl7`: `Cargo.toml` with `v2`/`v3` features (both
      default), `src/lib.rs`, README, AGENTS.md, CLAUDE.md, LICENSE.md.
      Builds with `--no-default-features`, with each feature alone, and
      with both; the crate-level doctest passes.
- [x] All six examples run (`cargo run -p <crate> --example <name>`).
- [x] `cargo clippy --all-targets -- -D warnings` clean for all three with
      the pedantic group on; `cargo fmt --check` clean;
      `cargo rustdoc --lib -- -W missing-docs` clean for all three.
- [x] `bin/check-trademarks` and `bin/check-docs` pass with the new files
      staged.

## Workspace integration (done 2026-09-10)

- [x] Root `Cargo.toml` members and `.github/workflows/ci.yml`'s rustdoc
      loop list the three crates; "fourteen" → "seventeen" in both.
- [x] `spec/phi/index.md` "No serialization framework" row amended to name
      the three bridge crates as the opt-in exception.
- [x] Root `plan.md` non-goal reworded; crate counts updated in `plan.md`,
      `tasks.md`, `README.md`, `CHANGELOG.md`, `MAINTAINERS.md`, `RFC.md`,
      `CONTRIBUTING.md`, `AGENTS.md`, `AI_STATEMENT.md`, `SECURITY.md`,
      `spec/trusted-publishing/index.md`, `spec/release-process/index.md`.
- [x] Root `README.md` crate tree and table gained the three crates.
- [x] `llms.txt`, `llms.json`, and the website's `static/llms.json` gained
      the three crates.
- [x] Website: three entries in `src/lib/data/crates.ts`, three
      `src/routes/crates/<name>/` pages, crate counts updated in the
      spec, FAQ, architecture, and agent-skill pages and the navigation
      blurb; `pnpm run check` and `pnpm run build` pass.
- [x] `CHANGELOG.md` entry for the seventh release, dated 2026-09-10,
      written before publishing per the runbook's step 3.

## Release (the runbook in `spec/release-process/index.md`)

- [x] Step 1–2: first release, 0.1.0 for all three; no existing
      inter-crate requirement changes (`hl7-2` 0.3.0 and `hl7-3` 0.2.0 were
      already on crates.io). `cargo +1.96 check --workspace --all-targets`
      clean — done 2026-09-10.
- [x] Step 3: `CHANGELOG.md` entry "2026-09-10, seventh release" written
      before publishing, in commit `5e17a4e`.
- [x] Step 4: `cargo test`, `clippy --all-targets -D warnings`, `fmt
      --check`, `rustdoc -W missing-docs` per new crate, the MSRV check,
      `bin/check-trademarks`, `bin/check-docs`, and the site's `pnpm run
      check`/`build` all clean; commit `5e17a4e` pushed to GitHub and
      Codeberg; GitHub Actions run 34452665459 (`ci`) and 34452665554
      (`security`) green. **GitLab rejected the push as non-fast-forward:**
      its `main` holds `9d4d98d`, an earlier version of local `8c622b2`
      with a different tree (`hl7/Cargo.toml`, `hl7/README.md`), a
      divergence that predates this work; resolving it needs a force push
      the maintainer has to choose.
- [x] Step 5: `cargo publish` in dependency order — `serde-hl7-v2` 0.1.0,
      `serde-hl7-v3` 0.1.0, then `serde-hl7` 0.1.0 — all three reported
      "Published … at registry `crates-io`" on 2026-09-10.
- [x] Step 6: `cargo package` for each confirms a literal
      `rust-version = "1.96"`, the path dependencies stripped to versions,
      and the umbrella's `default = ["v2", "v3"]` in the published manifest.
- [x] Step 7: annotated, SSH-signed tags `serde-hl7-v2-v0.1.0`,
      `serde-hl7-v3-v0.1.0`, `serde-hl7-v0.1.0` on `5e17a4e`, verified with
      `git tag -v`, pushed to all three remotes.
- [x] Step 8: recorded here, in `CHANGELOG.md`'s "Released" line, and in
      root `tasks.md`.

## Later

- [ ] **GitLab `main` is behind.** `git@gitlab.com:hl7-rust/hl7-rust.git`
      still holds `9d4d98d` (checked 2026-09-10 with `git ls-remote`); the
      three `serde-hl7*-v0.1.0` tags did land there. Bringing it forward
      needs a force push to that one URL (`origin` fans out to all three
      hosts, so not `git push --force origin`), which is the maintainer's
      decision, not an agent's.
- [ ] **`Deserialize` for `serde_hl7_v2::Node`** — only if `hl7-2` adds a
      public constructor for `hl7_2::Node` (its own decision; v2 spec
      §9.1). Then: add the impl in `serde-hl7-v2/src/node.rs`, retire rule
      S14 in `serde-hl7-v2/spec/index.md` and §2.2/§4.3/§9.1 the way
      `serde-er7`'s §9.2 struck through its resolved question, update the
      §7.1 coverage row, and release `serde-hl7-v2` — additive, not
      breaking, per its spec §8.1, so a patch bump suffices.
- [x] **`serde-er7/README.md` "The crate family" table** — done
      2026-09-13 in `~/git/er7-rust/er7-rust`, commit `a7a7a4f`: one row
      for `serde-hl7-v2` (reached via the `serde-hl7` umbrella), plus a
      paragraph where that README points at the dictionary layer saying
      how the two crates' shapes relate. One row, not three: `serde-hl7-v3`
      has nothing to do with ER7. That repository's checks pass; pushed
      to its three remotes 2026-09-13.
- [x] **Cross-link the two JSON shapes of a v2 tree** — done 2026-09-10
      in the fifth accuracy sweep (`fa6e3fd`): `hl7-2-from-er7-into-json`'s
      README and AGENTS.md say its JSON is a document keyed by HL7® names
      while `serde-hl7-v2`'s `Node` is a generic six-key object per node,
      same names, not interchangeable; `serde-hl7-v2/README.md` and the
      website's converting guide and FAQ say the same from the other side.
- [ ] **Next `hl7-2`/`hl7-3` minor release.** Each bridge crate pins its
      sibling by `version` (`hl7-2 = "0.3.0"`, `hl7-3 = "0.2.0"`); a `0.x`
      minor bump there fails Cargo's caret rule, so the runbook's step 2
      must bump the requirement here and release the bridge crate in the
      same pass.

## Trademarks

HL7®, and FHIR® are the registered trademarks of Health Level Seven
International and their use of these trademarks does not constitute an
endorsement by HL7. This project is an independent work.