Skip to content

docs: process documents and release tooling for the 1.0-beta release - #519

Open
awatson1978 wants to merge 9 commits into
1.0-betafrom
release-process-docs
Open

awatson1978 wants to merge 9 commits into
1.0-betafrom
release-process-docs

Conversation

@awatson1978

@awatson1978 awatson1978 commented Sep 16, 2026

Copy link
Copy Markdown
Collaborator

This is the first step from the plan in #518: the documents and configuration that set the bar for everything that comes after. The three documents:

  • docs/WRITING_STYLE.md — who we're writing for and how. Short version: assume a smart reader who knows healthcare but not programming or DICOM, define terms the first time they show up, and skip the machine-flavored filler. Addresses language concerns raised on feat: dcmjs 1.0 rewrite — event streaming, bounded-memory large files, FHIR, video, DICOMDIR #512, and includes a concrete list of banned constructions rather than just "write plainly."
  • .github/PULL_REQUEST_TEMPLATE.md — what a PR description needs. Small staging PRs just fill in the summary and the checklist; the one-per-package merges into 1.0-beta fill in everything: a runnable example, test evidence, benchmarks where performance is claimed, and fixture citations.
  • DATACITATION.md — where each committed DICOM test file came from and under what license, following OHIF's file of the same name. The six older files are listed as "still tracing" — sorting that out is part of the planned fixtures package.

The release tooling is .releaserc.json, a forty-line script, and a workflow trigger change. The idea is that all the packages release together with one shared version number, like a newspaper edition: an editor (semantic-release) picks the edition number from the commit titles, the script stamps it on every publishable package, and pnpm -r publish prints the whole run under the npm beta tag. The publish workflow now also fires on 1.0-beta and release/0.5x.

To be clear, merging this publishes nothing yet. The publish GitHub environment still gates the workflow, and 1.0-beta isn't on its allowed-branch list until the repo owner adds it (RELEASE_PLAN.md, section 12, along with claiming the @dcmjs scope on npm).

The stamp script ships has a quality control test: it stamps a scratch workspace, verifies private packages are skipped, and verifies a garbage version string is rejected without touching any file.

awatson1978 and others added 9 commits September 16, 2026 18:12
Supersedes the 2026-08-07 plan. Describes the package split, the
1.0-beta release branch, per-package staging branches, the test-first
sequence for core, routing of the 33 review findings, and lockstep
publishing with semantic-release.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Two trivial assertions on the committed sample-sr.dcm fixture. The
purpose is to exercise the CI checks on the 1.0-beta branch and prove
they run and report on pull requests. See RELEASE_PLAN.md section 6,
step 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e 24

fs.readFileSync can return a small file inside a larger shared memory
pool. Taking .buffer on that result hands the parser the whole pool,
with the file sitting at a nonzero offset, and the DICM marker check
then fails. Node 24 pools more aggressively, which is why
anonymizer.test.js and data.test.js fail there today (7 tests) while
Node 22 passes by luck of alignment.

This adds readFileAsArrayBuffer() to testUtils and routes all 22
file-read sites through it. Typed-array .buffer uses are untouched.
Same class of problem as issue #311.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ware helper

The first pass converted single-line fs.readFileSync(...).buffer sites.
CI on Node 24 then failed in a second population: reads assigned to a
variable first, with .buffer taken on a later line. This converts those
sites in data.test.js, data-options.test.js, lossless-read-write.test.js
and normalizers.test.js, and drops the imports that became unused.
Sites that already handle byteOffset correctly are untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ensureTestDataDir checked for the directory and then created it. Two
parallel jest workers can both pass the check, and the slower mkdir then
fails with EEXIST, which failed test_multiframe_1 on one CI leg.
mkdirSync with recursive:true succeeds whether or not the directory
exists, so the check goes away.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Three process documents the release plan calls for. The style guide
defines the audience (healthcare-literate, no assumed programming or
imaging jargon) and bans machine-flavored prose. The PR template
requires plain-language descriptions, runnable examples, test evidence,
and fixture citations. DATACITATION.md records the origin and license
of every committed DICOM test file, with the legacy files honestly
marked as provenance-pending.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
semantic-release computes one version from conventional commits;
stamp-workspace-versions.mjs writes it into every publishable workspace
package.json, and pnpm -r publish releases them together under the npm
beta tag. The publish workflow now also fires on 1.0-beta and
release/0.5x, and passes NODE_AUTH_TOKEN for pnpm publish. Nothing
publishes until the repository owner adds 1.0-beta to the publish
environment allowlist. See RELEASE_PLAN.md sections 9 and 12.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brings in the Node 24 buffer fix and the temp-directory race fix so
this branch's CI can pass before #518 merges. Once #518 lands, the
diff of #519 collapses back to just the process files.
Adapts the rules from Cursor's unslop skill: the fuller AI-vocabulary
list, filler phrases, fancy synonyms for is, vague attributions,
synonym cycling, false ranges, punctuation and formatting rules
(em dashes, colons, bold, sentence-case headings, straight quotes),
abstract metaphor nouns, and a plain-speech section that includes the
rule against over-compressed arrow-speak. Also states the boundary
this guide draws that unslop does not: metaphors that teach a concept
to a non-technical reader stay, metaphors that decorate go. The
guide's own prose now follows its own em-dash rule.

Source: https://github.com/cursor/plugins/blob/main/pstack/skills/unslop/SKILL.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@awatson1978 awatson1978 changed the title docs: process documents and release tooling for the 1.0-beta line docs: process documents and release tooling for the 1.0-beta release Sep 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant