Release Train
The release dashboard for a swamp extension repository. It draws the dependency graph of every extension you own plus the extensions they use, shows what needs publishing (and in what order, and to which channel), and reports release-hygiene compliance and test depth — so "what do I ship next?" is one command. WHAT IT DOES
Turns a repo of extensions into a single release picture. It discovers every
git-tracked manifest.yaml, builds the dependency graph from each
dependencies: list (external dependencies included), and topologically
orders them so a dependency is always published before what depends on it.
Optional integration declared in optionalDependencies: is drawn as a
dotted edge: the extension uses that dependency when it is installed, but
it never blocks a publish. The diagram runs right-to-left so the
most-reused dependencies sit on the left. Each extension is annotated with
its on-disk version, the latest version
published to each of stable / rc / beta, the version actually pulled, and a
publish state — up-to-date on stable (bright green), up-to-date but only on
beta/rc, i.e. needs promoting (duller lime), needs-publish, or blocked on a
dependency. It
also reports release-hygiene compliance and test depth, separating colocated
unit tests (with measured line coverage) from the black-box
test-factory.yaml acceptance tests. Prefer it over reading git status,
swamp extension version, and the scoreboard by hand: one read-only run
produces a Mermaid diagram, a hygiene/test matrix, and an ordered publish
plan, with a target channel advised from the published trend and check
health.
INSTALL
swamp extension pull @svendowideit/release-trainDEPENDENCIES
@svendowideit/meta-factory — pulled automatically. release-train reads its
score/summary resources for the documentation score and the test axes
(unit-test coverage and test-factory.yaml acceptance coverage); it never
re-runs those checks itself. A missing or stale score is shown as stale, not
recomputed. Otherwise it uses only the swamp CLI and the bundled deno binary
that swamp already ships.
RUN
# The whole dashboard: dependency diagram, hygiene/test matrix, and the
# ordered publish plan. It writes release-train.md — one GitHub/gist-
# renderable document with every table and the Mermaid diagram.
swamp workflow run @svendowideit/release-train
cat release-train.md
# Skip the slower hygiene checks — versions, graph and reused data only.
swamp workflow run @svendowideit/release-train --input runChecks=false
# Run offline (no registry lookups or push dry-runs); published versions
# come from the lockfile and review state is reported unknown.
swamp workflow run @svendowideit/release-train --input offline=true
# Same dashboard, but scoped to the extensions *installed on this serve*
# (pulled-extensions cache, pulled version/channel and triggers included).
swamp workflow run @svendowideit/release-train-serve
cat release-train-serve.md
# Same dashboard for one swamp-club user or collective. Reads the registry
# at swamp-club.com and downloads each manifest into
# .swamp/release-train-cache/; it does NOT modify, clone, or push into
# any existing swamp repository.
# The '@' is optional; pass the bare collective name (no file lookup).
swamp workflow run @svendowideit/release-train-club --input owner=webframp
cat release-train-club.md
# Run just the analysis and read the diagram it wrote to disk.
swamp model @svendowideit/release-train method run analyze release-train
cat release-train.mmd
# Read the rendered report from the last run.
swamp report get @svendowideit/release-train-report \
--workflow @svendowideit/release-train --markdownCONFIGURE
All settings are optional global arguments (set at model creation or per
run with --input):
root Directory scanned for manifests (default extensions)
gitOnly Only git-tracked manifests (default true)
includeExternal Show dependencies outside this repo (default true)
runChecks Run quality/fmt/deno/push checks (default true)
concurrency Extensions checked in parallel (default 4)
checkTimeoutMs Per-check timeout (default 120000)
offline Skip registry and network checks (default false)
threshold Docs score below which -> stay beta (default 75)
metaModel Meta-factory model to read (default meta-factory)
outputFile Where the Mermaid diagram is written (default release-train.mmd)
markdownFile Where the one-file dashboard is written (default release-train.md;
empty disables the write)The channel advice is advisory only: release-train reports each channel's published version and suggests a target, but never publishes, bumps, or promotes.
WHAT IT INSTALLS
Nothing on the host — no services, daemons, cron triggers, or webhooks. It
runs only when invoked and never modifies the extensions it analyses. It
writes a Mermaid diagram to outputFile, the full one-file dashboard to
markdownFile, and its own swamp resources (node/graph/plan/summary).
Global Arguments
| Argument | Type | Description |
|---|---|---|
| root? | string | Directory (relative to the repo root) scanned when git discovery is unavailable. |
| owner? | string | swamp-club user or collective (bare name, e.g. webframp, or with a |
| gitOnly? | boolean | Scan only git-tracked manifests (excludes pulled/generated copies under .swamp/). |
| includeExternal? | boolean | Show and query dependencies that are not in this repo as external nodes. |
| runChecks? | boolean | Run the quality/fmt/deno/workflow-validate/push-dry-run hygiene checks in bounded parallel. |
| concurrency? | number | How many extensions to check in parallel. |
| checkTimeoutMs? | number | Per-subprocess timeout for hygiene checks; a timeout is recorded as a hygiene issue, never fatal. |
| offline? | boolean | Skip registry lookups and network checks; published versions come from the lockfile only and review state is reported unknown. |
| threshold? | number | Documentation score below which an extension is advised to stay on beta. |
| metaModel? | string | Name of the @svendowideit/meta-factory model whose score/summary resources are read for docs score and test coverage. |
| outputFile? | string | Path (relative to the repo root) the Mermaid diagram is written to by `analyze`. |
| markdownFile? | string | Path (relative to the repo root) the full dashboard is written to as one GitHub/gist-renderable markdown document. Empty disables the write; the same document is always available via `swamp report get @svendowideit/release-train-report --markdown`. |
Resources
Draw the dependency graph of every extension in this repo plus the extensions they use, annotate each with its on-disk and published (stable / rc / beta) versions, flag which extensions have changes that need publishing, show release-hygiene compliance and test depth (unit vs test-factory acceptance), and print an ordered publish plan. The run is read-only: it publishes nothing, bumps nothing, and edits no extension. It reuses `@svendowideit/meta-factory`'s score/coverage data for the docs and
Draw the dependency graph of every extension *installed on (available to) this swamp serve* — the pulled extensions cache — plus the extensions they use, annotated with on-disk and published (stable / rc / beta) versions, publish state, hygiene compliance, and test depth, and print an ordered publish plan. Unlike `@svendowideit/release-train`, this variant does not scan the worktree (`extensions/`) for git-tracked manifests; it scans the installed extension cache, with gitOnly disabled, so it r
Draw the dependency graph of every extension published by a single swamp-club user or collective — plus the extensions they use — annotated with on-disk and published (stable / rc / beta) versions, pull and update information, docs/test scores and hygiene state, and print an ordered publish plan. It queries the public registry at swamp-club.com for every extension published by the given user/collective and pulls each manifest into `.swamp/release-train-cache/` (the only file writes it makes, in
Dependency diagram, hygiene/test matrix, and ordered publish plan across every analysed extension
Added 2 workflows
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit1/2partial
- @std/assert--jsr:@std/assert@1 is a range; audited 1.0.19, the version the registry resolved
- @std/path--jsr:@std/path@1 is a range; audited 1.1.6, the version the registry resolved
2 dependencies found
- jsr:@std/assert@1 -- audited 1.0.19
- jsr:@std/path@1 -- audited 1.1.6
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License2/2earned
- Verified public repository2/2earned
Spawns a subprocess with Deno.Command().
- models/release_train.ts:283 — no reason given