Skip to content

release: v3.15.1 - pass BOT_NAME/BOT_EMAIL to v4 release/feature-PR… - #315

Merged
Shinrai merged 21 commits into
masterfrom
next
Sep 3, 2026
Merged

Shinrai merged 21 commits into
masterfrom
next

Conversation

@cldmv-bot

@cldmv-bot cldmv-bot Bot commented Aug 26, 2026 •

Copy link
Copy Markdown
Contributor

Slothlet v3.15.1 Changelog

Release Date: August 2026
Release Type: Patch
Branch: release/3.15.1


Overview

Version 3.15.1 is a maintenance and supply-chain-hardening release — no runtime code changed. The public API, loader behavior, and every runtime surface are identical to 3.15.0. This release is entirely CI/release-pipeline hardening, a dev-toolchain security bump, and documentation fixes.

The substantive change is least-privilege GitHub Actions token permissions across the workflow set, alongside clearing two high-severity advisories in the dev-only test/lint toolchain. An OpenSSF Scorecard badge now surfaces the repository's supply-chain posture in the README.


🔒 Security & supply chain

Least-privilege workflow token permissions (#319)

Every GitHub Actions workflow now declares a read-only top-level permissions: { contents: read } default, with write scopes narrowed to the single job that needs them rather than granted workflow-wide. This satisfies OpenSSF Scorecard's Token-Permissions check and shrinks the blast radius of a compromised action. Behavior is unchanged — each job still receives exactly the permissions it had before, only scoped to the job instead of the whole workflow.

Dev-toolchain advisories cleared (#322)

Two high-severity denial-of-service advisories were resolved by bumping dev-only, transitive dependencies:

Both live purely in the test/lint toolchain and are never reachable from the published package, which remains dependency-free at runtime — consumers were never exposed. npm audit now reports 0 vulnerabilities.


🔧 CI & tooling


📚 Documentation


🔧 Dependencies


Upgrade notes

  • No breaking changes, and no runtime code changed. v3.15.1 is a drop-in for 3.15.0 — the API and behavior are identical. There is nothing to adjust on upgrade; the changes are to the repository's CI/release tooling, its documentation, and its dev-only toolchain.
👥 Contributors

coverage

Metric Coverage
Statements 100.0%
Branches 100.0%
Functions 100.0%
Lines 100.0%

Avg: 100.0% · 36fba25 · Node lts/*

@cldmv-bot cldmv-bot Bot added ! release → master v4 flow: persistent next → master release PR (carries the next feature release) release Marks a pull request as a pending release — merge to publish a new version semver: patch This release contains only backwards-compatible bug fixes type: ci Changes to CI workflows, actions, or build pipelines type: config Changes to repository or project configuration files type: dependencies Relates to dependency updates, version bumps, or package management labels Aug 26, 2026
@github-actions

github-actions Bot commented Aug 26, 2026 •

Copy link
Copy Markdown

🔒 Dependency Review

  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ✅ 0 package(s) with unknown licenses
  • ✅ 0 denied package(s)
  • ✅ 0 package(s) with OpenSSF Scorecard score < 3

Full job summary

@cldmv-bot

cldmv-bot Bot commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

📦 Bundle size unchanged

File Raw Δ Raw Gzipped Δ Gzipped
dist/lib/builders/api-assignment.mjs 15.5 kB — 3.4 kB —
dist/lib/builders/api_builder.mjs 49.0 kB — 9.9 kB —
dist/lib/builders/builder.mjs 2.7 kB — 1.2 kB —
dist/lib/builders/modes-processor.mjs 40.6 kB — 6.9 kB —
dist/lib/errors.mjs 4.4 kB — 1.7 kB —
dist/lib/factories/component-base.mjs 1.7 kB — 866 B —
dist/lib/factories/context.mjs 1010 B — 525 B —
dist/lib/handlers/api-cache-manager.mjs 3.4 kB — 1.4 kB —
dist/lib/handlers/api-manager.mjs 59.6 kB — 12.3 kB —
dist/lib/handlers/context-async.mjs 4.0 kB — 1.4 kB —
dist/lib/handlers/context-live.mjs 7.0 kB — 2.2 kB —
dist/lib/handlers/framework-internals.mjs 1.1 kB — 611 B —
dist/lib/handlers/hook-manager.mjs 19.6 kB — 4.9 kB —
dist/lib/handlers/lifecycle-token.mjs 959 B — 540 B —
dist/lib/handlers/lifecycle.mjs 2.2 kB — 1010 B —
dist/lib/handlers/materialize-manager.mjs 1.2 kB — 672 B —
dist/lib/handlers/metadata.mjs 12.3 kB — 3.2 kB —
dist/lib/handlers/module-manager.mjs 9.3 kB — 3.0 kB —
dist/lib/handlers/ownership.mjs 6.4 kB — 2.1 kB —
dist/lib/handlers/permission-manager.mjs 15.9 kB — 4.0 kB —
dist/lib/handlers/trusted-root.mjs 3.1 kB — 1.2 kB —
dist/lib/handlers/unified-wrapper.mjs 74.6 kB — 13.2 kB —
dist/lib/handlers/version-manager.mjs 14.4 kB — 3.7 kB —
dist/lib/helpers/caller-pinning.mjs 804 B — 496 B —
dist/lib/helpers/class-instance-wrapper.mjs 2.7 kB — 1.1 kB —
dist/lib/helpers/config.mjs 14.5 kB — 3.8 kB —
dist/lib/helpers/eventemitter-context.mjs 9.0 kB — 1.8 kB —
dist/lib/helpers/eventtarget-context.mjs 3.3 kB — 1.2 kB —
dist/lib/helpers/generate-manifest.mjs 10.6 kB — 3.3 kB —
dist/lib/helpers/hint-detector.mjs 1.3 kB — 756 B —
dist/lib/helpers/manifest-resolver.mjs 1004 B — 611 B —
dist/lib/helpers/modes-utils.mjs 1.1 kB — 696 B —
dist/lib/helpers/module-discovery.mjs 7.5 kB — 2.5 kB —
dist/lib/helpers/module-manifest-validator.mjs 8.7 kB — 1.9 kB —
dist/lib/helpers/module-sort.mjs 1.0 kB — 593 B —
dist/lib/helpers/pattern-matcher.mjs 2.6 kB — 1.2 kB —
dist/lib/helpers/platform.mjs 1.8 kB — 953 B —
dist/lib/helpers/resolve-from-caller.mjs 3.0 kB — 1.3 kB —
dist/lib/helpers/sanitize.mjs 7.7 kB — 2.3 kB —
dist/lib/helpers/scheduler-context.mjs 1.9 kB — 876 B —
dist/lib/helpers/utilities.mjs 1.7 kB — 909 B —
dist/lib/i18n/languages/de-de.json 64.9 kB — 18.6 kB —
dist/lib/i18n/languages/en-gb.json 57.3 kB — 16.1 kB —
dist/lib/i18n/languages/en-us.json 57.2 kB — 16.1 kB —
dist/lib/i18n/languages/es-es.json 64.4 kB — 18.0 kB —
dist/lib/i18n/languages/es-mx.json 64.4 kB — 18.0 kB —
dist/lib/i18n/languages/fr-fr.json 65.4 kB — 18.0 kB —
dist/lib/i18n/languages/hi-in.json 108.0 kB — 20.3 kB —
dist/lib/i18n/languages/ja-jp.json 77.1 kB — 19.0 kB —
dist/lib/i18n/languages/ko-kr.json 66.8 kB — 18.1 kB —
dist/lib/i18n/languages/pt-br.json 63.6 kB — 17.7 kB —
dist/lib/i18n/languages/ru-ru.json 78.8 kB — 19.2 kB —
dist/lib/i18n/languages/zh-cn.json 56.1 kB — 17.6 kB —
dist/lib/i18n/translations.mjs 5.0 kB — 1.8 kB —
dist/lib/modes/eager.mjs 2.0 kB — 1006 B —
dist/lib/modes/lazy.mjs 2.5 kB — 1.2 kB —
dist/lib/processors/flatten.mjs 9.9 kB — 2.4 kB —
dist/lib/processors/loader.mjs 12.3 kB — 4.0 kB —
dist/lib/processors/type-generator.mjs 6.7 kB — 2.6 kB —
dist/lib/processors/typescript.mjs 10.7 kB — 4.0 kB —
dist/lib/runtime/runtime-asynclocalstorage.mjs 3.0 kB — 1.1 kB —
dist/lib/runtime/runtime-livebindings.mjs 3.1 kB — 1.1 kB —
dist/lib/runtime/runtime.mjs 2.2 kB — 800 B —
dist/lib/typegen/typegen.mjs 2.1 kB — 1.0 kB —
dist/slothlet.mjs 18.0 kB — 5.1 kB —
Total 1.30 MB ±0 B 348.9 kB ±0 B

📊 Generated by bundle-size. Brotli sizes also measured but omitted from the table for brevity.

Shinrai and others added 2 commits August 26, 2026 13:47
docs/ isn't in package.json's files allowlist (only README.md,
REFERENCE.md, and a few others ship), so every relative ./docs/*.md link
in README.md 404s for anyone reading it from an installed package - npm's
site, an editor previewing node_modules, etc. Rewritten all 54 as
absolute https://github.com/CLDMV/slothlet/blob|tree/master/docs/... URLs
(tree for the one folder-only link, blob for every .md file, anchors
preserved), so they resolve the same everywhere regardless of what's
actually present on disk.
@cldmv-bot cldmv-bot Bot added the type: documentation Relates to docs, README updates, guides, or inline code comments label Aug 27, 2026
Shinrai and others added 11 commits August 31, 2026 22:07
Harden GitHub Actions token permissions for OpenSSF Scorecard's
Token-Permissions check without changing what any workflow can do:

- Add a read-only top-level default (`permissions: { contents: read }`) to
  the caller workflows that declared none. Their jobs already grant their own
  scopes, so behavior is unchanged.
- For workflows that declared a dangerous WRITE scope at the top level
  (contents/statuses/security-events), narrow the top level to `contents: read`
  and move the full original scope set onto the single reusable-calling job, so
  the write is granted job-scoped instead of workflow-wide. Affected: branch-
  retention, ci, cla, codeql, dependabot-auto-merge, docs, tag-health,
  v4-bootstrap.

Non-dangerous top-level grants (pull-requests/issues write, which Scorecard
does not penalize) are left as-is. scorecard.yml keeps writes job-scoped as its
header documents; the header is reworded to match the new read-only default.

These are caller-side permissions, which live in each repo's own workflow files
(a reusable workflow can't set its caller's permissions), so this is a per-repo
change; the CLDMV/.github templates should get the same treatment for future
syncs.
Align the two remaining 2-space workflow files with the fleet's deliberate
4-space YAML convention. Pure reindentation — verified semantically identical
(yaml.safe_load before == after); no block scalars, so no embedded-script risk.
Clears the two high-severity advisories flagged by npm audit / OpenSSF
Scorecard Vulnerabilities (GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895 in
brace-expansion via eslint; GHSA-2v37-7h3g-55p8 in nanoid via vitest). Both
are dev-only transitive deps bumped within existing ranges via npm audit fix;
the published package has zero runtime dependencies. npm audit now reports 0
vulnerabilities. Lockfile-only — neither package is a direct dependency.
The reusable workflow-feature-pr.yml already maps deps/* -> next (type: deps),
and branch-naming.md lists deps/* as an allowed prefix, but this caller's
push-trigger branch list omitted deps/**, so deps/* branches never auto-opened
a PR. Add deps/** (and the mapping comment) to match the reusable and the
convention.
Release-prep docs for v3.15.1 — a maintenance / supply-chain-hardening release
with no runtime code changes (API identical to 3.15.0): least-privilege
workflow token permissions (#319), dev-toolchain security bumps
(brace-expansion, nanoid — dev-only transitive; #322), an OpenSSF Scorecard
badge (#320), and doc-link + CI fixes (#316, #321, #314).

Adds docs/changelog/v3/v3.15.1.md and promotes v3.15.1 to the README What's New
Latest block, demoting v3.15.0 into Recent Releases (kept at the 4-entry cap;
v3.13.1 drops off).
Shinrai
Shinrai previously approved these changes Sep 1, 2026
dependabot Bot and others added 3 commits September 2, 2026 01:04
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 26.2.0 to 26.4.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [eslint](https://github.com/eslint/eslint) from 10.9.0 to 10.9.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.9.0...v10.9.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 10.9.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 26.2.0 to 26.4.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=26.2.0&new-version=26.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
Bumps [eslint](https://github.com/eslint/eslint) from 10.9.0 to 10.9.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/eslint/eslint/releases">eslint's
releases</a>.</em></p>
<blockquote>
<h2>v10.9.1</h2>
<h2>Bug Fixes</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/1e641c919fc1421493bf913feb607896982451a3"><code>1e641c9</code></a>
fix: no-loss-of-precision false positive with trailing decimal point (<a
href="https://redirect.github.com/eslint/eslint/issues/21251">#21251</a>)
(Aleksandr Shoronov)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b"><code>ad74a8d</code></a>
docs: add deprecation steps for EOL package versions (<a
href="https://redirect.github.com/eslint/eslint/issues/21248">#21248</a>)
(Francesco Trotta)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/3c3ae53a43721162f0db76c69665ebd9d752ea52"><code>3c3ae53</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21249">#21249</a>)
(ESLint Bot)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eslint/eslint/commit/5c8c2417b9ff462f2dc4e54a062c59135b45b845"><code>5c8c241</code></a>
10.9.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/a7f3b7ddca7de8464995707d1bbac3ca91090015"><code>a7f3b7d</code></a>
Build: changelog update for 10.9.1</li>
<li><a
href="https://github.com/eslint/eslint/commit/1e641c919fc1421493bf913feb607896982451a3"><code>1e641c9</code></a>
fix: no-loss-of-precision false positive with trailing decimal point (<a
href="https://redirect.github.com/eslint/eslint/issues/21251">#21251</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/ad74a8dada2aaa17bfd0b8cc7b4119ff7a8ac04b"><code>ad74a8d</code></a>
docs: add deprecation steps for EOL package versions (<a
href="https://redirect.github.com/eslint/eslint/issues/21248">#21248</a>)</li>
<li><a
href="https://github.com/eslint/eslint/commit/3c3ae53a43721162f0db76c69665ebd9d752ea52"><code>3c3ae53</code></a>
chore: update ecosystem plugins (<a
href="https://redirect.github.com/eslint/eslint/issues/21249">#21249</a>)</li>
<li>See full diff in <a
href="https://github.com/eslint/eslint/compare/v10.9.0...v10.9.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=10.9.0&new-version=10.9.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
@Shinrai
Shinrai merged commit aedc31d into master Sep 3, 2026
40 checks passed
@cldmv-bot
cldmv-bot Bot deleted the next branch September 3, 2026 01:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

! release → master v4 flow: persistent next → master release PR (carries the next feature release) release Marks a pull request as a pending release — merge to publish a new version semver: patch This release contains only backwards-compatible bug fixes type: ci Changes to CI workflows, actions, or build pipelines type: config Changes to repository or project configuration files type: dependencies Relates to dependency updates, version bumps, or package management type: documentation Relates to docs, README updates, guides, or inline code comments

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant