@link-foundation/sensitive-data-sanitizer 0.0.0-stage → 0.12.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +578 -0
  2. package/LICENSE +24 -0
  3. package/README.md +184 -2
  4. package/bin/legacy-example-package-name.js +95 -0
  5. package/bin/sensitive-data-sanitizer.js +430 -0
  6. package/bin/stream.js +56 -0
  7. package/docs/API.md +336 -0
  8. package/docs/COVERAGE.md +136 -0
  9. package/docs/HISTORY-REMEDIATION.md +41 -0
  10. package/examples/combined-scanners.mjs +23 -0
  11. package/examples/presidio-bridge.py +32 -0
  12. package/examples/realistic-fakes.mjs +18 -0
  13. package/examples/sanitize-session.mjs +27 -0
  14. package/examples/shared-tool-logs.mjs +21 -0
  15. package/examples/stream-jsonl.mjs +17 -0
  16. package/package.json +124 -4
  17. package/src/adapters.js +204 -0
  18. package/src/arithmetic.js +11 -0
  19. package/src/confidence.js +65 -0
  20. package/src/context.js +424 -0
  21. package/src/credentials.js +54 -0
  22. package/src/detection.js +293 -0
  23. package/src/encoded.js +233 -0
  24. package/src/engines.js +348 -0
  25. package/src/entities.js +166 -0
  26. package/src/escape-spans.js +20 -0
  27. package/src/eslint-plugin.d.ts +10 -0
  28. package/src/eslint-plugin.js +193 -0
  29. package/src/external.js +169 -0
  30. package/src/fake-names.js +222 -0
  31. package/src/fake.js +524 -0
  32. package/src/files.js +131 -0
  33. package/src/gitleaks.js +194 -0
  34. package/src/history-rewrite.js +339 -0
  35. package/src/history.js +103 -0
  36. package/src/identity.js +274 -0
  37. package/src/index.d.ts +321 -0
  38. package/src/index.js +40 -0
  39. package/src/jsonl-stream.js +198 -0
  40. package/src/keywords.js +45 -0
  41. package/src/known.js +164 -0
  42. package/src/legacy.d.ts +3 -0
  43. package/src/legacy.js +2 -0
  44. package/src/locales.js +217 -0
  45. package/src/log-bytes.js +85 -0
  46. package/src/names.js +65 -0
  47. package/src/national-checks.js +129 -0
  48. package/src/national.js +128 -0
  49. package/src/outbound.js +28 -0
  50. package/src/personal-context.js +85 -0
  51. package/src/personal.js +248 -0
  52. package/src/projection.js +126 -0
  53. package/src/propagation.js +163 -0
  54. package/src/public-verifier.js +77 -0
  55. package/src/public.js +153 -0
  56. package/src/record-worker.js +20 -0
  57. package/src/rules.js +210 -0
  58. package/src/sanitizer.js +794 -0
  59. package/src/specimens.js +34 -0
  60. package/src/stream-identity.js +129 -0
  61. package/src/stream-worker.js +18 -0
  62. package/src/stream.js +449 -0
  63. package/src/structured.js +278 -0
  64. package/src/transforms.js +192 -0
  65. package/src/transliteration.js +75 -0
  66. package/src/utf8.js +60 -0
  67. package/src/vendor/entities/aws.json +42 -0
  68. package/src/vendor/entities/azure.json +182 -0
  69. package/src/vendor/entities/google.json +219 -0
  70. package/src/vendor/gitleaks/LICENSE +21 -0
  71. package/src/vendor/gitleaks/provenance.json +8 -0
  72. package/src/vendor/gitleaks/rules-0.json +268 -0
  73. package/src/vendor/gitleaks/rules-1.json +1794 -0
  74. package/src/vendor/gitleaks/rules-2.json +292 -0
  75. package/src/vendor/gitleaks/rules-3.json +263 -0
  76. package/src/vendor/gitleaks/rules-4.json +277 -0
  77. package/src/vendor/gitleaks/rules-5.json +154 -0
  78. package/src/worker-options.js +27 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,578 @@
1
+ # Changelog
2
+
3
+ ## 0.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Keep credential label values inside their JSON string and logical line, treat
8
+ prose such as "token for ES." as text, redact credential values covering escaped
9
+ JSON runs as a whole, and redact values found again after redaction in bounded
10
+ fixed-point rounds before failing closed with ERR_RESIDUAL.
11
+
12
+ Detect passport MRZ fragments, country document formats, travel identifiers,
13
+ contextual birth dates, national identifiers and national messenger phones.
14
+ Add fixed identity masks and audited specimen/synthetic identity exemptions.
15
+ Support batched JSON/JSONL sanitization with explicit structural fields and
16
+ bounded, audited fallback for oversized encoded runs. Protect netrc, NuGet,
17
+ WordPress and PuTTY v3 credentials across text and streamed records.
18
+
19
+ Bound escaped label values and propagation seeds, preserve ordinary session keys and CI service paths, retain Unicode surrogate escapes, and add two-pass atomic publication with encoding record/offset diagnostics.
20
+
21
+ Format changesets with Prettier so the release job no longer needs Deno, and autostash merged changesets when a release re-run rebases onto an advanced main.
22
+
23
+ Make version and changeset validation fail on unavailable Git comparisons, verify npm trusted publishing with a package-specific OIDC exchange, repair release badge detection and commit quoting, and recover missing GitHub releases without another version bump. Correct process survivor reporting, remove a busy-looping test fixture, pin CI scanners and hosted runner images, and exclude experimental and example code from CodeQL.
24
+
25
+ Introduce an offline sensitive-text library and CLI with required Secretlint and 221 bundled Gitleaks RE2 rules, complete contextual credential spans, default multilingual names/PII, checksum/format validators, Unicode/encoded detection and external scanner adapters. Publish under the repository's package name and require Node.js 22.
26
+
27
+ Add bounded streaming/workers, typed cloud catalog labels and confidence, keyed transformations, encoding preservation, opt-in public verification/local GitHub auth, outbound/Sentry helpers and an ESLint publication guard. Explicit private values and credential findings override public exemptions. Atomic publication and full-redaction verification block incomplete results; prose boundaries handle long whitespace in linear time.
28
+
29
+ Provide fresh-clone Git-history preview/rewrite with private plans and a required clean post-rewrite audit. Move template arithmetic, its CLI and historical documents to explicit legacy entries while preserving their behavior.
30
+
31
+ Fix session false positives and identity spans, propagate confirmed travel references and names, generate deterministic realistic fake values with valid dates and checksums, and process large JSONL sessions with bounded ordered workers.
32
+
33
+ Require Node.js 22.13 or later for the supported Faker runtime.
34
+
35
+ Protect structural document names and cross-script identities across bounded
36
+ streams, fail closed on late confirmations, and add a publication profile used
37
+ by CLI redact. Restore formatted SNILS and personal INN coverage, preserve JSON
38
+ escape boundaries, reduce code/place/booking false positives, and keep fake
39
+ phones in plausible or fictional ranges. Handle disabled Pages deployments and
40
+ separate bounded regex timing from child-process startup in cross-runtime CI.
41
+
42
+ Require plausible name and place label values, confine inferred JSON propagation
43
+ to string values, and preserve coding-session tokens and metadata. Align decoded
44
+ public-name policy and credential quote boundaries, canonicalize two-pass
45
+ confirmations, and detect national tel URIs, fax, and Vietnamese phone labels.
46
+
47
+ Support shared tool-log sanitization with credentials-only policy, automatic environment-value discovery and GitHub CLI config credentials. Preserve invalid log bytes losslessly, accept long text records within the total input limit, remove quadratic scanning and retain benign auth metadata, dependency names, local addresses and credential references. Raise the whole-text default to 32 MiB for image-bearing rollout lines.
48
+
49
+ Retry transient HTTP link failures with bounded backoff and authenticated GitHub contents fallback, and pin the Bun CI runtime to the supported 1.x line. Refresh vulnerable development dependencies so pipeline security checks can pass.
50
+
51
+ ## 0.11.31
52
+
53
+ ### Patch Changes
54
+
55
+ - Fix every open CI correctness and resilience issue in the pipeline: scope the
56
+ Docker buildx cache, retry transient fetch and download failures, make the
57
+ budget wrapper escalate to SIGKILL, add a terminal status gate to every
58
+ workflow with supersede detection, verify the husky install, make the jscpd
59
+ gate analyse real files, guard the package manager declaration, turn on
60
+ command-stream errexit, gate staged formatting before release commits, add
61
+ release-preflight credential checks, and sweep zizmor/actionlint/persisted
62
+ credentials/link-recheck fixes across the workflows.
63
+
64
+ Allow protected releases to use the built-in GitHub Actions token after
65
+ metadata-only attestation, wait through npm registry propagation without
66
+ republishing, and skip deleted changesets during staged formatting checks.
67
+
68
+ Make protected-branch release fallbacks wait for real pull-request checks with
69
+ a dedicated automation token, and pin every Linux CI job to Ubuntu 24.04.
70
+
71
+ Harden CI verdicts, Docker manifest publication, timeout cleanup, broken-link
72
+ rechecks, and contributor-authored workflow logs, and refresh vulnerable
73
+ transitive development dependencies.
74
+
75
+ ## 0.11.30
76
+
77
+ ### Patch Changes
78
+
79
+ - 8b129f9: Recognise npm's E409 "Cannot publish over previously staged version" wording as an already-published conflict in `publish-retry`, so a release that reached the registry verifies instead of failing the job.
80
+
81
+ ## 0.11.29
82
+
83
+ ### Patch Changes
84
+
85
+ - 0cd60b8: Bound the use-m CDN fetch with a per-attempt deadline and a retry, and report a load failure from the script that needs it.
86
+
87
+ `loadUse()` fetched `https://unpkg.com/use-m/use.js` with a bare `fetch()`, so a CDN blip surfaced as `TypeError: fetch failed` — a message naming neither the CDN nor the URL — and a connection that was accepted but never answered was bounded only by undici's 300 s `headersTimeout`. Each attempt now carries a 15 s deadline enforced by an `AbortController`, a failed attempt is retried up to three times with exponential backoff (51 s worst case), and the final error names the URL, the attempt count and the underlying reason, keeping the original failure as its `cause`.
88
+
89
+ The seven release scripts that loaded these modules at module scope now go through `scripts/bootstrap-dependencies.mjs`, which prints a GitHub `::error::` annotation and writes the fallback outputs the workflow reads — `published=false` for `publish-to-npm.mjs`, `version_committed=false` for `version-and-commit.mjs` — so a CDN outage no longer leaves a job with an empty `GITHUB_OUTPUT` and a loader stack.
90
+
91
+ ## 0.11.28
92
+
93
+ ### Patch Changes
94
+
95
+ - Configure the release and merge-simulation commit author as `41898282+github-actions[bot]@users.noreply.github.com` in `scripts/version-and-commit.mjs` and `scripts/simulate-fresh-merge.sh`, so those commits are attributed to the `github-actions[bot]` account and no longer require an extra approval under rulesets with `require_extra_approval_for_unattributed_changes`.
96
+
97
+ Add a scheduled fail-closed high-severity audit for every committed npm lock.
98
+
99
+ Ignore successful redirects when checking Lychee reports for broken links.
100
+
101
+ Lint the workflows themselves: a new `workflows` check runs `actionlint` (from the Docker image that bundles shellcheck) and `zizmor`, and the findings they reported are fixed — the manifest digest list is built as an array, the packaging retry logs its attempt number, the npm wait passes the release version through the environment, and third-party actions are pinned to commit hashes.
102
+
103
+ Fail the web archive check on lychee errors that have no http(s) URL
104
+
105
+ `scripts/check-web-archive.mjs` only extracted `http(s)` links from the lychee
106
+ report, so errors such as a missing local file or an unresolvable root-relative
107
+ link were silently dropped. When those were the only errors the script printed
108
+ "No broken URLs found" and set `all_archived=true`, masking a failing lychee
109
+ run. The parser now matches the status marker instead of the URL and splits the
110
+ results into archivable URLs and links the Wayback Machine cannot answer; the
111
+ latter are annotated as errors and force `all_archived=false` with exit code 1.
112
+ Adds regression tests over a captured lychee report fixture.
113
+
114
+ Compare change detection paths package-relative so the ignore list (`examples/`, `.changeset/`, `experiments/`, `dev/log/`, `docs/case-studies/`) also matches in the multi-language layout, and stop reporting other languages' files as JavaScript code changes.
115
+
116
+ Publish Docker images for both amd64 and arm64 using native runners and a multi-architecture manifest.
117
+
118
+ Suppress the reviewed DEP0005 warning from the Docker manifest artifact download step.
119
+
120
+ Land the release version bump through a pull request when a repository ruleset declines the direct push to `main`, and stop reporting a GH013 rule violation as a lost push race.
121
+
122
+ Give long CI steps their own execution budget so an overrun reports `failure` instead of `cancelled`.
123
+
124
+ Fail broken-link checks until archived replacements are applied to dead links.
125
+
126
+ Load `command-stream` and `lino-arguments` through a shared use-m interop shim so the release scripts work on Node 24.
127
+
128
+ Node 22.12+ adds a synthetic `module.exports` named export to CommonJS namespaces whose names cannot be inferred, which stops use-m from unwrapping the callable default. Destructuring `$` off the result therefore yields `undefined` and every release script fails with `TypeError: $ is not a function` on the Node 24 runners the workflows request. `scripts/use-module.mjs` normalises the namespace, reports the HTTP status when `use.js` cannot be fetched, names the observed keys when no callable export is found, and traces the resolved shape under `CI_SCRIPTS_DEBUG=1`.
129
+
130
+ Report why `scripts/wait-for-npm.mjs` could not confirm a release. The check
131
+ queries the npm registry over HTTP and returns `{ available, status, httpStatus,
132
+ url, error }`, so an HTTP 404 ("not published") is distinguished from an
133
+ unanswered probe (5xx, rate limit, proxy, DNS). Every attempt logs its outcome,
134
+ and an unanswered probe no longer claims the version "did not become available
135
+ on npm" — it says the publish status is unknown and points at the registry URL
136
+ to check. The step also exposes an `npm_check_status` output.
137
+
138
+ ## 0.11.27
139
+
140
+ ### Patch Changes
141
+
142
+ - 53519f1: Report release pipeline timeout cancellations as visible failures on the default branch.
143
+
144
+ ## 0.11.26
145
+
146
+ ### Patch Changes
147
+
148
+ - 328d858: Add CodeQL analysis for JavaScript and GitHub Actions plus high-severity dependency review for pull requests.
149
+
150
+ ## 0.11.25
151
+
152
+ ### Patch Changes
153
+
154
+ - 8af8547: Require successful lint and test quality gates before manual releases can publish.
155
+
156
+ ## 0.11.24
157
+
158
+ ### Patch Changes
159
+
160
+ - dd8a969: Reject unsupported keys in generated workflow concurrency blocks.
161
+
162
+ ## 0.11.23
163
+
164
+ ### Patch Changes
165
+
166
+ - e73716a: Harden workflow inputs, checkout configuration, and deployment concurrency.
167
+
168
+ ## 0.11.22
169
+
170
+ ### Patch Changes
171
+
172
+ - d0b42fa: Keep excluded-directory changes from activating change-gated CI jobs on pull
173
+ requests and direct pushes.
174
+
175
+ ## 0.11.21
176
+
177
+ ### Patch Changes
178
+
179
+ - 5bf9619: Quote the fresh merge base ref to prevent shell word splitting.
180
+
181
+ ## 0.11.20
182
+
183
+ ### Patch Changes
184
+
185
+ - dfd681f: Report ESLint warnings only on lines changed relative to the base branch, so unchanged findings such as `local/no-changelog-comments` stop repeating on every run. Errors are still reported for all files.
186
+
187
+ ## 0.11.19
188
+
189
+ ### Patch Changes
190
+
191
+ - 8608672: Split publish and verification failure domains in `publish-to-npm.mjs`: verification now polls the npm registry with exponential backoff, and a verification miss no longer re-runs `changeset publish`.
192
+
193
+ ## 0.11.18
194
+
195
+ ### Patch Changes
196
+
197
+ - 6b3289a: Build the Dockerfile on pull requests via a new `docker-build` job, so a broken image fails the pull request instead of only surfacing after the package is published. The build uses `push: false` with `load: true` (works for fork pull requests, which have no registry credentials) and the GHA layer cache. Repositories without a Dockerfile skip the job automatically.
198
+
199
+ ## 0.11.17
200
+
201
+ ### Patch Changes
202
+
203
+ - ebaa52a: Add a least-privilege top-level `permissions: contents: read` block to `release.yml` and `links.yml` so jobs no longer inherit the repository default `GITHUB_TOKEN` scope, with write access escalated only on the publishing jobs.
204
+
205
+ ## 0.11.16
206
+
207
+ ### Patch Changes
208
+
209
+ - 1349837: Suppress the Git default-branch hint during release workflow checkout.
210
+
211
+ ## 0.11.15
212
+
213
+ ### Patch Changes
214
+
215
+ - f04c820: Quiet release logs by checking npm package versions through the registry HTTP API and removing deprecated setup-node `always-auth` config before publish-job npm commands run.
216
+
217
+ ## 0.11.14
218
+
219
+ ### Patch Changes
220
+
221
+ - 63b31c3: Harden generated preview-image pushes against main branch non-fast-forward races.
222
+
223
+ ## 0.11.13
224
+
225
+ ### Patch Changes
226
+
227
+ - Add a warning-level ESLint rule for changelog-style comments and strings.
228
+
229
+ Detect code changes from real merge commits pushed to main with the first-parent
230
+ merge diff while preserving pull request synthetic merge behavior.
231
+
232
+ ## 0.11.12
233
+
234
+ ### Patch Changes
235
+
236
+ - 89fb151: Ignore stray Markdown files when checking for pending changesets.
237
+
238
+ ## 0.11.11
239
+
240
+ ### Patch Changes
241
+
242
+ - d2e3932: Require exact changelog version headers when extracting GitHub release notes.
243
+ - e7356e9: Fail release-time changeset merging when any pending changeset is malformed.
244
+
245
+ ## 0.11.10
246
+
247
+ ### Patch Changes
248
+
249
+ - 9915756: Auto-detect single-language versus `js/` monorepo layouts when naming GitHub
250
+ releases, namespace multi-language JavaScript tags as `js_v<version>`, and
251
+ normalize prefixed tags before linking npm version badges.
252
+
253
+ ## 0.11.9
254
+
255
+ ### Patch Changes
256
+
257
+ - 49a8205: Add a post-publish smoke test that installs the just-published npm package in a clean project and verifies its entry points.
258
+
259
+ ## 0.11.8
260
+
261
+ ### Patch Changes
262
+
263
+ - 391530e: Skip the slow CI test matrix for pull requests that only touch non-code files.
264
+
265
+ ## 0.11.7
266
+
267
+ ### Patch Changes
268
+
269
+ - 674f9ce: Fix npm release path for brand-new packages (issue #77):
270
+ - `publish-to-npm.mjs` now classifies authentication / registry-configuration
271
+ failures (404/401/403, `access token expired`, `ENEEDAUTH`, etc.) as
272
+ non-retryable and fails fast with actionable guidance instead of retrying
273
+ `MAX_RETRIES` times and hiding the real cause behind a generic error.
274
+ - The `release` and `instant-release` publish steps now pass an optional
275
+ `NODE_AUTH_TOKEN` sourced from `secrets.NPM_TOKEN`, providing a first-publish
276
+ bootstrap path. OIDC trusted publishing remains the steady-state mechanism;
277
+ the token is only needed for the very first release of a new package.
278
+
279
+ ## 0.11.6
280
+
281
+ ### Patch Changes
282
+
283
+ - 8ca3e32: Harden the `publish-dockerhub` buildx boot against transient Docker Hub registry outages. A new reusable `setup-buildx-resilient` composite action pre-pulls the pinned `moby/buildkit` image with retries and a `mirror.gcr.io` pull-through fallback, then boots buildx with the driver image pinned to the locally cached copy so a `registry-1.docker.io` blip no longer fails the publish job (issue #75).
284
+
285
+ ## 0.11.5
286
+
287
+ ### Patch Changes
288
+
289
+ - 312a2fe: Add a `concurrency` block to the Broken Link Checker workflow (`links.yml`) so redundant runs are cancelled on new commits, consistent with the other workflows in the template.
290
+
291
+ ## 0.11.4
292
+
293
+ ### Patch Changes
294
+
295
+ - 35696cc: Cap generated GitHub release notes before creating releases so oversized changelog
296
+ entries link to the full tagged changelog instead of failing GitHub API
297
+ validation.
298
+
299
+ ## 0.11.3
300
+
301
+ ### Patch Changes
302
+
303
+ - a8e4030: Run the preview screenshot regeneration workflow inside the official Playwright container to avoid stalled Chromium downloads in CI, and keep the desktop packaging job on Node 20 while verifying package output before artifact upload.
304
+
305
+ ## 0.11.2
306
+
307
+ ### Patch Changes
308
+
309
+ - aeec4cb: Enforce the 1500-line architecture limit across all JavaScript (`.js`, `.mjs`, `.cjs`) and Markdown (`.md`) files in the `check-file-line-limits` CI gate, lower the documentation limit from 2500 to 1500, and exempt case-study generated-data files explicitly.
310
+
311
+ ## 0.11.1
312
+
313
+ ### Patch Changes
314
+
315
+ - 8cd0d70: Correct CI workflow concurrency and preview failure artifact handling in the template.
316
+
317
+ ## 0.11.0
318
+
319
+ ### Minor Changes
320
+
321
+ - e7025ed: Add a release-time `preview-regen` job to `example-app.yml` and a
322
+ `scripts/update-preview-images.mjs` driver that boot the universal example app
323
+ in a headless Chromium via `browser-commander` + Playwright, capture a
324
+ locale × theme matrix of screenshots into `docs/screenshots/example-app/`, and
325
+ commit any drift back to `main` with `[skip ci]`. Adds the matching
326
+ `npm run example:web:preview-images` script.
327
+
328
+ ## 0.10.2
329
+
330
+ ### Patch Changes
331
+
332
+ - f044604: Document the one-time **Settings → Pages → Source = GitHub Actions** prerequisite for the example app deployment, and note it in a comment above the `pages-deploy` job.
333
+
334
+ ## 0.10.1
335
+
336
+ ### Patch Changes
337
+
338
+ - ede9f84: Publish the template as the real link-foundation example package and add the globally installable CLI entry point.
339
+
340
+ ## 0.10.0
341
+
342
+ ### Minor Changes
343
+
344
+ - 5a81a7f: Add a universal React example app with GitHub Pages, Electron desktop, and Capacitor mobile build paths.
345
+
346
+ ## 0.9.0
347
+
348
+ ### Minor Changes
349
+
350
+ - f23283c: Add an optional Docker Hub publishing path that waits for the exact npm
351
+ package version before tagging Docker images.
352
+
353
+ ## 0.8.6
354
+
355
+ ### Patch Changes
356
+
357
+ - acccf75: Format GitHub release names as human-readable `[Language] x.y.z` titles while keeping prefixed tag names unchanged.
358
+
359
+ ## 0.8.5
360
+
361
+ ### Patch Changes
362
+
363
+ - Fail GitHub release creation on unexpected gh api errors and clearly skip releases that already exist.
364
+
365
+ Enforce npm and Node.js minimum versions for trusted publishing setup and resolve a supported npm 11 tarball for fallback installs.
366
+
367
+ ## 0.8.4
368
+
369
+ ### Patch Changes
370
+
371
+ - 031f7cd: Add explicit CI job timeouts and per-test runner timeout limits.
372
+
373
+ ## 0.8.3
374
+
375
+ ### Patch Changes
376
+
377
+ - bdaa4b7: Derive release script package names from package.json instead of template placeholders.
378
+
379
+ ## 0.8.2
380
+
381
+ ### Patch Changes
382
+
383
+ - d179bb7: Add warning annotations for files approaching the CI file line limit.
384
+
385
+ ## 0.8.1
386
+
387
+ ### Patch Changes
388
+
389
+ - f0c69af: Normalize language-prefixed release tags before building npm shields.io badge URLs.
390
+
391
+ ## 0.8.0
392
+
393
+ ### Minor Changes
394
+
395
+ - 3e45a9c: Add `--tag-prefix` option to release scripts for multi-language repos
396
+
397
+ The `create-github-release.mjs` and `format-github-release.mjs` scripts now accept a `--tag-prefix` CLI parameter (defaulting to `v`) that allows users to customize the git tag prefix. This enables use in multi-language repositories where different language packages need distinct tag prefixes (e.g., `js-v1.0.0` vs `rust-v1.0.0`).
398
+
399
+ ## 0.7.3
400
+
401
+ ### Patch Changes
402
+
403
+ - ae2cc9a: Add self-healing release mechanism that checks npm registry for unpublished versions
404
+
405
+ ## 0.7.2
406
+
407
+ ### Patch Changes
408
+
409
+ - 9126e16: fix: npm upgrade fallbacks and Node.js 24.x upgrade for CI/CD
410
+ - Upgrade Node.js from 20.x to 24.x in all workflow files (avoids broken npm in Node.js 22.22.2)
411
+ - Add 4-strategy fallback chain to setup-npm.mjs (standard, curl tarball, npx, corepack)
412
+ - Update GitHub Actions to latest versions (checkout v6, setup-node v6, create-pull-request v8)
413
+ - Add case study documentation for issue #33
414
+
415
+ ## 0.7.1
416
+
417
+ ### Patch Changes
418
+
419
+ - 6916409: Use per-commit diff instead of full-PR diff for CI change detection
420
+
421
+ ## 0.7.0
422
+
423
+ ### Minor Changes
424
+
425
+ - 983789a: Add CI/CD best practices from hive-mind: fast-fail job ordering, test compilation, file line limits check, secrets detection, documentation validation, extracted fresh merge simulation script, and proper cancellation propagation
426
+
427
+ ## 0.6.0
428
+
429
+ ### Minor Changes
430
+
431
+ - 8961862: Add automated broken link checker with Web Archive fallback suggestions
432
+ - Add `.github/workflows/links.yml` with lychee-action for link checking in Markdown and HTML files
433
+ - Add `scripts/check-web-archive.mjs` to check broken links against the Wayback Machine API
434
+ - Add `.lycheeignore` for excluding known false-positive URLs (localhost, example.com, etc.)
435
+ - Update `README.md` to document the broken link checker feature
436
+ - Scheduled weekly check (Mondays at 09:00 UTC) to catch links that break over time
437
+ - On PRs, broken links with no Web Archive fallback will fail the check
438
+ - For broken links that have archived versions, provides actionable replacement suggestions
439
+ - On scheduled runs, automatically creates a GitHub Issue with the full broken links report
440
+
441
+ Fixes #27
442
+
443
+ ## 0.5.1
444
+
445
+ ### Patch Changes
446
+
447
+ - e398190: Add comprehensive best practices comparison and improve CI concurrency
448
+ - Add DETAILED-COMPARISON.md with side-by-side analysis of ALL scripts, workflows, and configurations
449
+ - Implement cancel-in-progress for main branch concurrency (hive-mind Issue #1274 fix)
450
+ - Fix max-lines documentation (1500, not 1000)
451
+ - Reference detailed comparison from BEST-PRACTICES.md
452
+
453
+ ## 0.5.0
454
+
455
+ ### Minor Changes
456
+
457
+ - 66211b5: Add fresh merge simulation to CI/CD to prevent stale merge preview issues
458
+ - Add "Simulate fresh merge with base branch" step to lint and test jobs
459
+ - This ensures PR CI validates the actual merge result, not a stale snapshot
460
+ - Prevents CI failures on main branch after merging PRs that sat open for days
461
+ - Add case study documentation for issue #23 with root cause analysis
462
+ - Add ignore patterns for case study data files in ESLint and Prettier
463
+
464
+ See docs/case-studies/issue-23 for detailed analysis of the stale merge preview problem.
465
+
466
+ Fixes #23
467
+
468
+ ## 0.4.0
469
+
470
+ ### Minor Changes
471
+
472
+ - e6c2691: Add multi-language repository support for CI/CD scripts
473
+ - Add `scripts/js-paths.mjs` utility for automatic JavaScript package root detection
474
+ - Support both `./package.json` (single-language) and `./js/package.json` (multi-language repos)
475
+ - Add `--legacy-peer-deps` flag to npm install commands in release scripts to fix ERESOLVE errors
476
+ - Save and restore working directory after `cd` commands to fix `command-stream` library's `process.chdir()` behavior
477
+ - Add case study documentation with root cause analysis in `docs/case-studies/issue-21/`
478
+
479
+ ## 0.3.0
480
+
481
+ ### Minor Changes
482
+
483
+ - 80d9c84: Add CI check to prevent manual version modification in package.json
484
+ - Added `check-version.mjs` script that detects manual version changes in PRs
485
+ - Added `check-changesets.mjs` script to check for pending changesets (converted from inline shell)
486
+ - Added `version-check` job to release.yml workflow
487
+ - Automated release PRs (changeset-release/_ and changeset-manual-release-_) are automatically skipped
488
+
489
+ ## 0.2.2
490
+
491
+ ### Patch Changes
492
+
493
+ - 9a12139: Fix CI/CD check differences between pull request and push events
494
+
495
+ Changes:
496
+ - Add `detect-changes` job with cross-platform `detect-code-changes.mjs` script
497
+ - Make lint job independent of changeset-check (runs based on file changes only)
498
+ - Allow docs-only PRs without changeset requirement
499
+ - Handle changeset-check 'skipped' state in dependent jobs
500
+ - Exclude `.changeset/`, `docs/`, `experiments/`, `examples/` folders and markdown files from code changes detection
501
+
502
+ ## 0.2.1
503
+
504
+ ### Patch Changes
505
+
506
+ - 55aef41: Make Bun the primary runtime choice throughout the template
507
+ - Update all shebangs from `#!/usr/bin/env node` to `#!/usr/bin/env bun` in scripts, experiments, and case studies
508
+ - Update README.md to prioritize Bun in all sections (features, development, runtime support, package managers, scripts reference)
509
+ - Update examples to list Bun first
510
+ - Bun now described as "Primary runtime with highest performance" and "Primary choice" for package management
511
+ - Maintains full compatibility with Node.js and Deno
512
+
513
+ ## 0.2.0
514
+
515
+ ### Minor Changes
516
+
517
+ - d3f7fcd: Improve changeset CI/CD robustness for concurrent PRs
518
+ - Update validate-changeset.mjs to only check changesets ADDED by the current PR (not pre-existing ones)
519
+ - Add merge-changesets.mjs script to combine multiple pending changesets during release
520
+ - Merged changesets use highest version bump type (major > minor > patch) and combine descriptions chronologically
521
+ - Update release workflow to pass SHA environment variables and add merge step
522
+ - Add comprehensive case study documentation for the CI/CD improvement
523
+ - This prevents PR failures when multiple PRs merge before a release cycle completes
524
+
525
+ ## 0.1.4
526
+
527
+ ### Patch Changes
528
+
529
+ - e9703b9: Add ESLint complexity rules with reasonable thresholds
530
+
531
+ ## 0.1.3
532
+
533
+ ### Patch Changes
534
+
535
+ - 0198aaa: Add case study documentation comparing best practices from effect-template
536
+
537
+ This changeset adds comprehensive documentation analyzing best practices from
538
+ ProverCoderAI/effect-template repository, identifying gaps in our current setup,
539
+ and providing prioritized recommendations for improvements.
540
+
541
+ Key findings include missing best practices like code duplication detection (jscpd),
542
+ ESLint complexity rules, VS Code settings, and test coverage thresholds.
543
+
544
+ ## 0.1.2
545
+
546
+ ### Patch Changes
547
+
548
+ - 2ea9b78: Enforce strict no-unused-vars ESLint rule without exceptions. All unused variables, arguments, and caught errors must now be removed or used. The `_` prefix no longer suppresses unused variable warnings.
549
+
550
+ ## 0.1.1
551
+
552
+ ### Patch Changes
553
+
554
+ - 042e877: Fix GitHub release formatting to support Major/Minor/Patch changes
555
+
556
+ The release formatting script now correctly handles all changeset types (Major, Minor, Patch) instead of only Patch changes. This ensures that:
557
+ - Section headers are removed from release notes
558
+ - PR detection works for all release types
559
+ - NPM badges are added correctly
560
+
561
+ ## 0.1.0
562
+
563
+ ### Minor Changes
564
+
565
+ - 65d76dc: Initial template setup with complete AI-driven development pipeline
566
+
567
+ Features:
568
+ - Multi-runtime support for Node.js, Bun, and Deno
569
+ - Universal testing with test-anywhere framework
570
+ - Automated release workflow with changesets
571
+ - GitHub Actions CI/CD pipeline with 9 test combinations
572
+ - Code quality tools: ESLint + Prettier with Husky pre-commit hooks
573
+ - Package manager agnostic design
574
+
575
+ All notable changes to this project will be documented in this file.
576
+
577
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
578
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
package/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <https://unlicense.org>