@rom-weaver/cli 0.12.3 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
  <p align="center">
15
15
  <a href="https://github.com/rom-weaver/rom-weaver/actions/workflows/ci.yml"><img alt="CI status" src="https://img.shields.io/github/actions/workflow/status/rom-weaver/rom-weaver/ci.yml?branch=main&amp;logo=githubactions&amp;logoColor=white&amp;label=CI&amp;color=4a6d63"></a>
16
16
  <a href="package.json"><img alt="Node.js 22 or newer" src="https://img.shields.io/badge/Node.js-22%2B-4a6d63?logo=nodedotjs&logoColor=white"></a>
17
- <a href=".config/mise.toml"><img alt="Rust 1.95" src="https://img.shields.io/badge/Rust-1.95-2c323b?logo=rust&logoColor=white"></a>
17
+ <a href=".config/mise.toml"><img alt="Rust 1.97.1" src="https://img.shields.io/badge/Rust-1.97.1-2c323b?logo=rust&logoColor=white"></a>
18
18
  <a href="LICENSE"><img alt="AGPL-3.0-or-later license" src="https://img.shields.io/badge/license-AGPL--3.0--or--later-4a6d63"></a>
19
19
  </p>
20
20
 
@@ -43,34 +43,15 @@
43
43
 
44
44
  ## Install
45
45
 
46
- Choose the [webapp](#webapp), [self-hosting](#self-hosting), or [CLI](#cli)
47
- path below.
46
+ Choose the [webapp](#webapp), [self-hosting](#self-hosting), or [CLI](#cli) path below.
48
47
 
49
48
  ## Webapp
50
49
 
51
- Open the hosted webapp at **[rom-weaver.com/apply](https://rom-weaver.com/apply)**. You
52
- do not need to install anything or create an account. Choose **Apply**, add a
53
- ROM and one or more patches, review the detected formats and checksums, then run
54
- the workflow and save the result. Use **Create** to generate a distributable
55
- patch from an original and a modified file. Your files are processed locally
56
- and never leave the device. Install it as a PWA from the browser menu to use it
57
- offline.
58
- New here? [Try the sample workflow](https://rom-weaver.com/apply?bundle=first-weave.zip)
59
- with a tiny original homebrew NES ROM and two patches that change “HELLO WORLD” to “MODIFIED ROM.”
60
- For a guided explanation, use
61
- [guided Apply](https://rom-weaver.com/apply?guide=apply),
62
- [guided Create](https://rom-weaver.com/create?guide=create), or
63
- [guided Bundle](https://rom-weaver.com/apply?guide=bundle).
64
- To run the webapp on your own host, see the
65
- [Self-hosting](#self-hosting) section below or the
66
- [full self-hosting guide](./docs/hosting/self-hosting.md).
50
+ Open the hosted webapp at **[rom-weaver.com/apply](https://rom-weaver.com/apply)**. You do not need to install anything or create an account. Choose **Apply**, add a ROM and one or more patches, review the detected formats and checksums, then run the workflow and save the result. Use **Create** to generate a distributable patch from an original and a modified file. Your files are processed locally and never leave the device. Install it as a PWA from the browser menu to use it offline. New here? [Try the sample workflow](https://rom-weaver.com/apply?bundle=first-weave.zip) with a tiny original homebrew NES ROM and two patches that change “HELLO WORLD” to “MODIFIED ROM.” For a guided explanation, use [guided Apply](https://rom-weaver.com/apply?guide=apply), [guided Create](https://rom-weaver.com/create?guide=create), or [guided Bundle](https://rom-weaver.com/apply?guide=bundle). To run the webapp on your own host, see the [Self-hosting](#self-hosting) section below or the [full self-hosting guide](./docs/hosting/self-hosting.md).
67
51
 
68
52
  ## Self-hosting
69
53
 
70
- For a quick setup, choose static files, Docker Run, or Docker Compose. The
71
- [full self-hosting guide](./docs/hosting/self-hosting.md) covers reverse proxies,
72
- subpath routing, HTTPS certificates, service-worker scope, and the required
73
- COOP/COEP headers.
54
+ For a quick setup, choose static files, Docker Run, or Docker Compose. The [full self-hosting guide](./docs/hosting/self-hosting.md) covers reverse proxies, subpath routing, HTTPS certificates, service-worker scope, and the required COOP/COEP headers.
74
55
 
75
56
  Static release files:
76
57
 
@@ -82,8 +63,7 @@ curl --fail --location --proto '=https' --tlsv1.2 \
82
63
  tar --extract --gzip --file rom-weaver-webapp.tar.gz --directory rom-weaver-webapp
83
64
  ```
84
65
 
85
- Serve the extracted `rom-weaver-webapp` directory from an HTTPS static host.
86
- For a pinned release, replace `latest` in the URL with its tag.
66
+ Serve the extracted `rom-weaver-webapp` directory from an HTTPS static host. For a pinned release, replace `latest` in the URL with its tag.
87
67
 
88
68
  Docker Run using the published GitHub Container Registry (GHCR) image:
89
69
 
@@ -93,9 +73,7 @@ docker run --detach --name rom-weaver-webapp \
93
73
  ghcr.io/rom-weaver/rom-weaver-webapp:latest
94
74
  ```
95
75
 
96
- Docker Compose using the same published GitHub Container Registry (GHCR) image:
97
- Download the [Docker Compose template](https://github.com/rom-weaver/rom-weaver/blob/main/docker-compose.yml)
98
- into a new directory:
76
+ Docker Compose using the same published GitHub Container Registry (GHCR) image: Download the [Docker Compose template](https://github.com/rom-weaver/rom-weaver/blob/main/docker-compose.yml) into a new directory:
99
77
 
100
78
  ```bash
101
79
  mkdir -p rom-weaver-compose
@@ -108,272 +86,84 @@ docker compose up --detach
108
86
  curl --fail --silent --show-error http://localhost:8080/health
109
87
  ```
110
88
 
111
- Only Docker with Compose is required. Set `PORT` to change the host port, for
112
- example `PORT=3000 docker compose up --detach`. To build the image from source
113
- instead, clone the repository and add `--build` to the `docker compose up`
114
- command from its checkout; that path is slower and intended for development.
115
- For standalone TLS, mount a trusted certificate as described in the guide and
116
- set `HTTPS_PORT` instead.
89
+ Only Docker with Compose is required. Set `PORT` to change the host port, for example `PORT=3000 docker compose up --detach`. To build the image from source instead, clone the repository and add `--build` to the `docker compose up` command from its checkout; that path is slower and intended for development. For standalone TLS, mount a trusted certificate as described in the guide and set `HTTPS_PORT` instead.
117
90
 
118
91
  ## CLI
119
92
 
120
- Native release assets cover macOS arm64 and x86-64; Linux x86-64 GNU plus
121
- x86-64, arm64, and i686 musl; and Windows arm64, x86-64, and x86. The package
122
- manager and installer options below select the matching asset unless their
123
- description says otherwise.
93
+ Native release assets cover macOS arm64 and x86-64; Linux x86-64 GNU plus x86-64, arm64, and i686 musl; and Windows arm64, x86-64, and x86.
124
94
 
125
- <details>
126
- <summary>Homebrew (macOS arm64/Intel, Linux arm64/x86-64)</summary>
95
+ Three recommended ways to install:
127
96
 
128
97
  ```bash
129
98
  brew install rom-weaver/tap/rom-weaver
130
99
  ```
131
100
 
132
- </details>
133
-
134
- <details>
135
- <summary>Scoop (Windows)</summary>
136
-
137
- ```powershell
138
- scoop bucket add rom-weaver https://github.com/rom-weaver/scoop-bucket
139
- scoop install rom-weaver
140
- ```
141
-
142
- </details>
143
-
144
- <details>
145
- <summary>Install script (macOS, Linux)</summary>
146
-
147
- Downloads the latest release to `~/.local/bin` and checks its GitHub build
148
- attestation.
149
- Override with `ROM_WEAVER_INSTALL_DIR` or pin with `ROM_WEAVER_VERSION`.
150
- The script also installs manpages and shell completions for the current user.
151
-
152
101
  ```bash
153
102
  curl --proto '=https' --tlsv1.2 -LsSf \
154
103
  https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.sh | sh
155
104
  ```
156
105
 
157
- </details>
158
-
159
- <details>
160
- <summary>Install script (Windows)</summary>
161
-
162
- The same thing for PowerShell, installing to `%LOCALAPPDATA%\rom-weaver\bin`.
163
- It also installs the PowerShell completion beside the executable.
164
-
165
- ```powershell
166
- irm https://raw.githubusercontent.com/rom-weaver/rom-weaver/main/install.ps1 | iex
167
- ```
168
-
169
- </details>
170
-
171
- <details>
172
- <summary>npm</summary>
173
-
174
- Cross-platform, and the only channel that covers every supported target at
175
- once. Needs Node.js 22+. The package is a launcher that pulls the right
176
- prebuilt binary through platform-specific optional dependencies, so only your
177
- platform's binary is downloaded.
178
-
179
106
  ```bash
180
107
  npm install --global rom-weaver
181
108
  ```
182
109
 
183
- For a one-off run, or to add the scoped launcher for a repository's scripts,
184
- use the scoped package directly:
185
110
 
186
- ```bash
187
- npx @rom-weaver/cli probe --input game.iso
188
- npm install --save-dev @rom-weaver/cli
189
- ```
190
-
191
- </details>
192
-
193
- <details>
194
- <summary>cargo-binstall</summary>
195
-
196
- Downloads the same release binary rather than compiling the workspace:
197
-
198
- ```bash
199
- cargo binstall rom-weaver-cli
200
- ```
201
-
202
- </details>
203
-
204
- <details>
205
- <summary>mise</summary>
206
-
207
- Useful when you want the CLI managed per project in `mise.toml`.
208
- [Install mise](https://mise.jdx.dev/installing-mise.html) first; it verifies
209
- the release's GitHub artifact attestations on install. The
210
- `minimum_release_age=0s` option lets new releases resolve immediately on release
211
- day; omit it if you prefer mise's default release-age delay.
212
-
213
- ```bash
214
- mise use 'github:rom-weaver/rom-weaver[minimum_release_age=0s]'
215
- ```
216
-
217
- </details>
218
-
219
- <details>
220
- <summary>Docker</summary>
221
-
222
- Runs from the published Linux image without installing anything:
223
-
224
- ```bash
225
- docker run --rm \
226
- --user "$(id -u):$(id -g)" \
227
- --volume "$PWD:/work" \
228
- ghcr.io/rom-weaver/rom-weaver-cli:latest \
229
- probe --input /work/game.iso
230
- ```
231
-
232
- Mount your ROM directory at `/work` and pass paths under it. On Linux and
233
- macOS, `--user` keeps files created in the bind mount owned by your host user.
234
- See [Run in Docker](./docs/how-to/install-cli.md#run-in-docker).
235
-
236
- </details>
111
+ Homebrew covers macOS arm64/Intel and Linux arm64/x86-64. The install script covers macOS and Linux: it downloads the latest release to `~/.local/bin` and checks its build provenance, refusing to install a binary this repository did not publish. npm is the only channel covering every supported target at once, and needs Node.js 22+.
237
112
 
238
113
  <a name="build-from-source"></a>
239
114
 
240
- <details>
241
- <summary>Build from source</summary>
115
+ Windows, Scoop, PowerShell, cargo-binstall, mise, Docker, shell completions, and building from source are all in [Install the CLI](./docs/how-to/install-cli.md).
242
116
 
243
- ```bash
244
- git clone https://github.com/rom-weaver/rom-weaver.git
245
- cd rom-weaver
246
- cargo install --path crates/rom-weaver-cli --locked
247
- rom-weaver --help
248
- ```
117
+ Hitting `Permission denied`? See [File permissions](./docs/reference/cli.md#file-permissions).
249
118
 
250
- The source build requires Rust 1.95+, CMake, Clang, and a native compiler
251
- toolchain.
119
+ The [development guide](./docs/development/development.md) covers the full toolchain setup, webapp builds, and tests.
252
120
 
253
- </details>
121
+ ## Why
254
122
 
255
- Hitting `Permission denied`? See
256
- [File permissions](./docs/reference/cli.md#file-permissions).
123
+ Every console generation brought its own compressed format: CHD for discs, RVZ for GameCube and Wii, Z3DS for 3DS ROMs, CSO and PBP for PSP, plus the usual ZIP and 7z on top. Working across them can mean finding several separate programs, learning different flags, and checking which builds are available for your platform.
257
124
 
258
- The [development guide](./docs/development/development.md) covers the full toolchain setup,
259
- webapp builds, and tests.
125
+ Patching adds another manual sequence. A translation, bugfix, and undub may need to run in a specific order, with intermediate files kept straight and a compressed input unpacked before the first patch and recompressed afterward. Repeating that setup whenever the patch combination changes adds disk churn and room for mistakes to what should be one workflow.
260
126
 
261
- ## Why
127
+ The last piece is curation. Keeping a collection in order means storing ROMs compressed, keeping the patches next to them, and being able to prove months later that a patched file came from the ROM you think it did. rom-weaver handles all of it in one place. It reads every format above. It writes CHD, RVZ, Z3DS, ZIP, and 7z archives. It chains as many patches as you want in a single pass without manually unpacking first, and records the whole recipe - patch order, checksums, and output names - in a bundle file you can hand to someone else. Native CLI builds are available for Linux, macOS, and Windows. The browser webapp handles patching and bundle workflows without an install.
262
128
 
263
- Every console generation brought its own compressed format: CHD for discs, RVZ
264
- for GameCube and Wii, Z3DS for 3DS ROMs, CSO and PBP for PSP, plus the usual ZIP
265
- and 7z on top. Working across them can mean finding several separate programs,
266
- learning different flags, and checking which builds are available for your
267
- platform.
268
-
269
- Patching adds another manual sequence. A translation, bugfix, and undub may
270
- need to run in a specific order, with intermediate files kept straight and a
271
- compressed input unpacked before the first patch and recompressed afterward.
272
- Repeating that setup whenever the patch combination changes adds disk churn and
273
- room for mistakes to what should be one workflow.
274
-
275
- The last piece is curation. Keeping a collection in order means storing ROMs
276
- compressed, keeping the patches next to them, and being able to prove months
277
- later that a patched file came from the ROM you think it did. rom-weaver
278
- handles all of it in one place. It reads every format above. It writes CHD, RVZ,
279
- Z3DS, ZIP, and 7z archives. It chains as many patches as you want in a single pass
280
- without manually unpacking first, and records the whole recipe - patch order,
281
- checksums, and output names - in a bundle file you can hand to someone else.
282
- Native CLI builds are
283
- available for Linux, macOS, and Windows. The browser webapp handles patching
284
- and bundle workflows without an install.
285
-
286
- For the current measurements and trade-offs, see the [performance brief](#performance).
129
+ For the current measurements and trade-offs, see the [performance brief](#performance). For how rom-weaver lines up against the tools you may already use, the [comparison with similar tools](./docs/explanation/comparisons.md) puts it beside RomPatcher.js, Flips, MultiPatch, xdelta3, chdman, and Dolphin tool, format by format and feature by feature.
287
130
 
288
131
  ## Performance
289
132
 
290
- rom-weaver matches or beats the reference tools on every measured axis:
291
- extraction time, compression time, and output size. On the measured arm64
292
- corpus, extraction is faster in all four formats. CHD extracts 3.1–5.8× faster,
293
- RVZ 1.6–2.0×, ZIP 1.6–2.7×, and 7z 1.0–4.7×. RVZ and ZIP compression are
294
- 1.1–1.3× faster. 7z compression is even with its reference. CHD compression
295
- ranges from even to 1.3× faster. Output sizes match the references to within a
296
- fraction of a percent.
297
-
298
- The CLI and the threaded WASM webapp share one Rust engine. The browser adds
299
- worker, storage, and OPFS costs, so CLI and browser timings are not
300
- comparable. The [performance guide](./docs/development/performance.md) records
301
- the machine, corpus, settings, reference-tool versions, and repeated runs for
302
- each published result. It also lists the commands that reproduce them.
303
- Production WASM is optimized with `wasm-opt -O4`. The browser codec matrix is
304
- the runtime check for the shipped worker and storage path.
133
+ rom-weaver matches or beats the reference tools on every measured axis: extraction time, compression time, and output size. On the measured arm64 corpus, extraction is faster in all four formats. CHD extracts 3.1–5.8× faster, RVZ 1.6–2.0×, ZIP 1.6–2.7×, and 7z 1.0–4.7×. RVZ and ZIP compression are 1.1–1.3× faster. 7z compression is even with its reference. CHD compression ranges from even to 1.3× faster. Output sizes match the references to within a fraction of a percent.
134
+
135
+ The CLI and the threaded WASM webapp share one Rust engine. The browser adds worker, storage, and OPFS costs, so CLI and browser timings are not comparable. The [performance guide](./docs/development/performance.md) records the machine, corpus, settings, reference-tool versions, and repeated runs for each published result. It also lists the commands that reproduce them. Production WASM is optimized with `wasm-opt -O4`. The browser codec matrix is the runtime check for the shipped worker and storage path.
305
136
 
306
137
  ## Features
307
138
 
308
- - **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS,
309
- xdelta/VCDIFF, PPF, RUP, BDF/BSDIFF40, APS, and DCP (Dreamcast), with ordered
310
- multi-patch chains, checksum validation when the format or bundle supplies
311
- expected values, and cheat-code baking. Three of them (DCP, BSP, and
312
- HDiffPatch) can only be applied, not created.
313
- - **Inspect and extract containers.** ZIP, 7z, RAR, the tar family, CHD, RVZ,
314
- Z3DS, CSO, PBP, GCZ, WIA, WBFS, and more, including nested archives.
315
- - **Create format-specific compressed containers.** ZIP, 7z, CHD, RVZ, and Z3DS with
316
- codec-aware compression settings. CHD and RVZ outputs are checked for
317
- round-trip compatibility with chdman and dolphin-tool.
318
- - **Checksum and verify.** CRC32, MD5, SHA-1, SHA-256, BLAKE3, and friends,
319
- with copier-header detection, header repair, and header-aware checksum
320
- variants.
321
- - **Trim and restore.** Trimming for NDS, GBA, 3DS, XISO, and RVZ scrub. NDS,
322
- GBA, and 3DS can be reverted, with an opt-in footer that restores the
323
- original file byte-for-byte.
324
- - **Share workflows.** Distributable [`rom-weaver-bundle.json`](./docs/rom-weaver-bundle-v1.schema.json)
325
- bundles pin patch order, checksums, and output naming so others can replay
326
- the exact workflow.
327
- - **Local-first and private.** Everything runs on your machine. The webapp is
328
- an installable PWA that works offline and never uploads your files.
329
- - **One engine, two frontends.** The same Rust core powers the terminal CLI
330
- and the threaded WASM webapp. CLI operation commands can emit line-delimited
331
- JSON for scripting.
332
-
333
- The complete format, codec, and checksum compatibility tables are maintained
334
- in the [CLI guide](./docs/reference/formats.md).
139
+ - **Apply and create patches.** Twenty-one formats, including IPS, BPS, UPS, xdelta/VCDIFF, PPF, RUP, BDF/BSDIFF40, APS, and DCP (Dreamcast), with ordered multi-patch chains, checksum validation when the format or bundle supplies expected values, and cheat-code baking. Three of them (DCP, BSP, and HDiffPatch) can only be applied, not created.
140
+ - **Inspect and extract containers.** ZIP, 7z, RAR, the tar family, CHD, RVZ, Z3DS, CSO, PBP, GCZ, WIA, WBFS, and more, including nested archives.
141
+ - **Create format-specific compressed containers.** ZIP, 7z, CHD, RVZ, and Z3DS with codec-aware compression settings. CHD and RVZ outputs are checked for round-trip compatibility with chdman and dolphin-tool.
142
+ - **Checksum and verify.** CRC32, MD5, SHA-1, SHA-256, BLAKE3, and friends, with copier-header detection, header repair, and header-aware checksum variants.
143
+ - **Trim and restore.** Trimming for NDS, GBA, 3DS, XISO, and RVZ scrub. NDS, GBA, and 3DS can be reverted, with an opt-in footer that restores the original file byte-for-byte.
144
+ - **Share workflows.** Distributable [`rom-weaver-bundle.json`](./docs/rom-weaver-bundle-v1.schema.json) bundles pin patch order, checksums, and output naming so others can replay the exact workflow.
145
+ - **Local-first and private.** Everything runs on your machine. The webapp is an installable PWA that works offline and never uploads your files.
146
+ - **One engine, two frontends.** The same Rust core powers the terminal CLI and the threaded WASM webapp. CLI operation commands can emit line-delimited JSON for scripting.
147
+
148
+ The complete format, codec, and checksum compatibility tables are maintained in the [CLI guide](./docs/reference/formats.md).
335
149
 
336
150
  ## Notices
337
151
 
338
152
  ### Beta status
339
153
 
340
- rom-weaver is beta software and follows Semantic Versioning, but until v1.0,
341
- breaking changes may still happen between minor releases. Patching,
342
- compressing, extracting, and bundling are covered by automated tests. Hands-on
343
- testing happens on macOS and Linux; Windows is covered by hosted CI but has seen
344
- much less real-world use, so expect rougher edges there and please report
345
- anything Windows-specific. If you
346
- rely on the APIs or CLI flags, expect things to be a bit tougher: those
347
- interfaces may still change as the project heads toward v1.0. Trim and Tools are
348
- still beta, so they are disabled by default in the webapp and can be enabled in
349
- Settings. The `rom-weaver-core`, `-checksum`, `-containers`, and
350
- `-patches` crates are published to crates.io only so `rom-weaver-cli` can use
351
- them. The CLI and the webapp are the supported interfaces; using those crates as
352
- libraries in another project is not supported.
154
+ rom-weaver is beta software and follows Semantic Versioning, but until v1.0, breaking changes may still happen between minor releases. Patching, compressing, extracting, and bundling are covered by automated tests. Hands-on testing happens on macOS and Linux; Windows is covered by hosted CI but has seen much less real-world use, so expect rougher edges there and please report anything Windows-specific. If you rely on the APIs or CLI flags, expect things to be a bit tougher: those interfaces may still change as the project heads toward v1.0. Trim and Tools are still beta, so they are disabled by default in the webapp and can be enabled in Settings. The `rom-weaver-core`, `-checksum`, `-containers`, and `-patches` crates are published to crates.io only so `rom-weaver-cli` can use them. The CLI and the webapp are the supported interfaces; using those crates as libraries in another project is not supported.
353
155
 
354
156
  ### First complete public release
355
157
 
356
- v0.7.2 was the first complete public release. The changelog and the git
357
- history go back further, but v0.6.0 through v0.7.1 failed partway through the
358
- release pipeline or were only partially published. v0.7.1 completed most of
359
- the pipeline, but it still missed the crates.io CLI package, shipped a broken
360
- unscoped npm launcher, and built the static webapp archive with mismatched
361
- release metadata. Starting with v0.7.2, all public install methods were intended
362
- to work together. Install commands below resolve the current release unless you
363
- explicitly pin a version.
158
+ v0.7.2 was the first complete public release. The changelog and the git history go back further, but v0.6.0 through v0.7.1 failed partway through the release pipeline or were only partially published. v0.7.1 completed most of the pipeline, but it still missed the crates.io CLI package, shipped a broken unscoped npm launcher, and built the static webapp archive with mismatched release metadata. Starting with v0.7.2, all public install methods were intended to work together. Install commands below resolve the current release unless you explicitly pin a version.
364
159
 
365
160
  ### LLM-assisted development
366
161
 
367
- rom-weaver is built by a full-time software engineer in my spare time. Claude
368
- and ChatGPT are used during development for brainstorming, implementation,
369
- debugging, and review. I make the engineering decisions and review and test
370
- the resulting work myself; the goal is high-quality, dependable software, but
371
- AI-assisted code may still need extra scrutiny.
162
+ rom-weaver is built by a full-time software engineer in my spare time. Claude and ChatGPT are used during development for brainstorming, implementation, debugging, and review. I make the engineering decisions and review and test the resulting work myself; the goal is high-quality, dependable software, but AI-assisted code may still need extra scrutiny.
372
163
 
373
164
  ### Translations
374
165
 
375
- Localized translations are early and may be entirely wrong in places. Manual
376
- edits and corrections are welcome.
166
+ Localized translations are early and may be entirely wrong in places. Manual edits and corrections are welcome.
377
167
 
378
168
  ## Screenshots
379
169
 
@@ -428,36 +218,14 @@ edits and corrections are welcome.
428
218
 
429
219
  ## Documentation
430
220
 
431
- Start with the browser-first [documentation home](https://rom-weaver.com/docs)
432
- or the repository [documentation index](./docs/README.md). The web docs include
433
- a task and tool picker, guided samples, focused screenshots, and a
434
- [FAQ](./docs/faq.md). CLI, deployment, integration, development,
435
- architecture, and format references each have their own guides.
221
+ Start with the browser-first [documentation home](https://rom-weaver.com/docs) or the repository [documentation index](./docs/README.md). The web docs include a task and tool picker, guided samples, focused screenshots, and a [FAQ](./docs/faq.md). CLI, deployment, integration, development, architecture, and format references each have their own guides.
436
222
 
437
223
  ## Contributing and support
438
224
 
439
- Bug reports and contributions are welcome. Read the
440
- [contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md)
441
- before submitting a change. Because rom-weaver is dual-licensed, code and
442
- documentation changes need a one-time signature on the
443
- [Contributor License Agreement](CLA.md). The `CLA Signed` check asks for
444
- it on your first pull request. One signature covers every repository in the
445
- [`rom-weaver` organization](https://github.com/rom-weaver) whose contribution
446
- process references the agreement. You keep the copyright in your work. Report
447
- suspected vulnerabilities through GitHub's private reporting form in the
448
- [security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can
449
- support continued development through
450
- [GitHub Sponsors](https://github.com/sponsors/brandonocasey) or
451
- [Ko-fi](https://ko-fi.com/brandonocasey).
225
+ Bug reports and contributions are welcome. Read the [contribution guide](CONTRIBUTING.md) and [code of conduct](.github/CODE_OF_CONDUCT.md) before submitting a change. Because rom-weaver is dual-licensed, code and documentation changes need a one-time signature on the [Contributor License Agreement](CLA.md). The `CLA Signed` check asks for it on your first pull request. One signature covers every repository in the [`rom-weaver` organization](https://github.com/rom-weaver) whose contribution process references the agreement. You keep the copyright in your work. Report suspected vulnerabilities through GitHub's private reporting form in the [security policy](.github/SECURITY.md). If rom-weaver has been useful to you, you can support continued development through [GitHub Sponsors](https://github.com/sponsors/brandonocasey) or [Ko-fi](https://ko-fi.com/brandonocasey).
452
226
 
453
227
  ## License
454
228
 
455
229
  Copyright © Brandon Casey and rom-weaver contributors
456
230
 
457
- The public distribution is licensed under
458
- [AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL.md) is
459
- also available for first-party rom-weaver code. Bundled third-party components
460
- retain their own licenses. Release builds include a generated
461
- [combined attribution and license inventory](https://rom-weaver.com/NOTICE) and
462
- corresponding license texts. Those third-party terms continue to apply under
463
- every rom-weaver licensing option.
231
+ The public distribution is licensed under [AGPL-3.0-or-later](LICENSE). [Commercial licensing](COMMERCIAL.md) is also available for first-party rom-weaver code. Bundled third-party components retain their own licenses. Release builds include a generated [combined attribution and license inventory](https://rom-weaver.com/NOTICE) and corresponding license texts. Those third-party terms continue to apply under every rom-weaver licensing option.