chore: onboard action into the Socket fleet and rebuild dist - #14
Conversation
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 1401 file(s) touched: - .claude/agents/fleet/code-reviewer.md - .claude/agents/fleet/fix.md - .claude/agents/fleet/pr-feedback.md - .claude/agents/fleet/refactor-cleaner.md - .claude/agents/fleet/security-reviewer.md - .claude/commands/fleet/audit-gha-settings.md - .claude/commands/fleet/codifying-disciplines.md - .claude/commands/fleet/green-ci-local.md - .claude/commands/fleet/green-ci.md - .claude/commands/fleet/looping-quality.md - .claude/commands/fleet/researching-recency.md - .claude/commands/fleet/scanning-quality.md - .claude/commands/fleet/security-scan.md - .claude/commands/fleet/setup-security-tools.md - .claude/commands/fleet/squash-history.md - .claude/commands/fleet/update-coverage.md - .claude/commands/fleet/update-hooks-dry.md - .claude/commands/fleet/update-pricing.md - .claude/commands/fleet/update-security.md - .claude/output-styles/fleet.md ... and 1381 more
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 4 file(s) touched: - .config/repo/rolldown/bundle-stub.mts - .github/workflows/github-release.yml - CLAUDE.md - package.json
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 1161 file(s) touched: - .claude/hooks/fleet/_shared/.clangd - .claude/hooks/fleet/_shared/README.md - .claude/hooks/fleet/_shared/active-edits-ledger.mts - .claude/hooks/fleet/_shared/ai-attribution.mts - .claude/hooks/fleet/_shared/ai-slop-patterns.mts - .claude/hooks/fleet/_shared/ast/calls.mts - .claude/hooks/fleet/_shared/ast/comment-types.mts - .claude/hooks/fleet/_shared/ast/comments.mts - .claude/hooks/fleet/_shared/ast/core.mts - .claude/hooks/fleet/_shared/ast/literals.mts - .claude/hooks/fleet/_shared/authorization-phrases.mts - .claude/hooks/fleet/_shared/branch-switch.mts - .claude/hooks/fleet/_shared/brew-supply-chain.mts - .claude/hooks/fleet/_shared/bypass.mts - .claude/hooks/fleet/_shared/cdn-allowlist.mts - .claude/hooks/fleet/_shared/commit-command.mts - .claude/hooks/fleet/_shared/copyleft-upstreams.mts - .claude/hooks/fleet/_shared/dated-citation.mts - .claude/hooks/fleet/_shared/denied-domains.mts - .claude/hooks/fleet/_shared/dependency-spec-forms.mts ... and 1141 more
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 5 file(s) touched: - scripts/fleet/build-infra/lib/release-checksums/consumer.mts - scripts/fleet/build-infra/lib/release-checksums/core.mts - scripts/fleet/build-infra/lib/release-checksums/producer.mts - scripts/fleet/build-infra/release-assets.schema.json - scripts/fleet/create-release.mts
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 1 file(s) touched: - .config/repo/vitest.config.mts
rollup is an anti-fleet dependency, so the two bundles now build through rolldown from .config/repo/rolldown.config.mts. The @actions/* packages move to their current majors, which are ESM-only with named exports, because no undici 5.x release carries a provenance attestation and pnpm's trust policy refuses to install one.
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 1 file(s) touched: - .gitattributes
Auto-applied by socket-wheelhouse sync-scaffolding into action-onboard. 1 file(s) touched: - scripts/fleet/check/trusted-publishers-match-source.mts
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
Without an explicit permission input the minted token inherits every permission the installation holds, which zizmor flags High. The release only cuts tags and a GitHub Release.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Caution Review the following alerts detected in dependencies. According to your organization's Security Policy, you must resolve all "Block" alerts before proceeding. It is recommended to resolve "Warn" alerts too. Learn more about Socket for GitHub.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
The repo ran semantic-release with @semantic-release/git, which commits back to main. That push is rejected outright: main requires pull requests, a required workflow, and signed commits, so the release job has been failing since 2026-07-13 and nothing has shipped since v1.3.2. The cascaded fleet path replaces it. `github-release.yml` cuts a release from a pushed signed `v*` tag and skips the registry gate for a repo that publishes to no registry, and `release-reconcile.yml` covers drift. The version is named by a person through `bump.mts` rather than computed from commit types. `version` was the `0.0.0-semantically-released` placeholder; it now states the last released version.
Onboards this repo into the Socket fleet, and rebuilds
dist/— which was stale onmain.Important
Two things here change the bytes a workflow runner executes.
dist/was last rebuilt in 937f824 whilesrc/last changed in 48bdbd2 ("feat: add win32-arm64 to distributions (#13)"), so a tag cut frommaintoday ships a bundle that does not contain the win32-arm64 fix. This PR rebuilds it. The bundler also changed from rollup to rolldown, so every byte indist/is different.What changed
The bundler is rolldown, not rollup. rollup is an anti-fleet dependency. The build now runs
node scripts/repo/build.mtsover.config/repo/rolldown.config.mts, which emits the same two single-file ESM bundles at the same two pathsaction.ymlnames. rolldown has node-resolve and CommonJS handling built in, so the three@rollup/plugin-*packages have no equivalent and are simply gone. The output is no longer minified —bundle-flags-guardblocks minified shipped bundles fleet-wide, and for an artifact that is committed and executed straight from the tree that is the right call: a reviewer can read it and a stack trace points at real code. That is whydist/roughly doubles in size.The
@actions/*packages move to their current majors. This was forced, not optional.@actions/http-client(reached from every@actions/*package) asked forundici@^5.25.4, and no undici 5.x release carries a provenance attestation while later-published 6.x, 7.x, and 8.x releases do. pnpm'strustPolicy: no-downgradecompares trust evidence by publish date across the whole package, so any 5.x resolves as a trust downgrade and the install refuses outright. The current@actions/*majors are ESM-only and export named functions rather than a default object, sosrc/now uses named imports.@actions/iowas imported but never used, and is dropped.The action sources are rewritten to pass the fleet linter. Named imports, named exports, sorted object literals, braces on every
if, no top-levelawait(each entry is an exportedmain()the module invokes), anderrorMessage()in place of a bare${e.message}. The two<platform>-<arch>lookup tables are now exported so they can be tested, andtest/unit/tools/covers them.Everything else is the fleet payload: the shared-template marker under
.config/repo/(build.from: "github-action", the release source added for exactly this repo kind), the cascaded.claude/,scripts/fleet/,.github/actions/fleet/, and.config/fleet/trees, a pnpm lockfile in place ofpackage-lock.json, and the fleet CI workflow.How the rebuilt bundle was verified — every runtime path produces the same output as the old rollup bundle
The old bundle was extracted from
origin/mainand run side by side with the new one under a scrubbed environment, driving each path through the realINPUT_*variables a runner sets.main.js, unsupportedmode::error::Unsupported mode: bogus…main.js, SFW mode with an invalid token[401] …/repos/socketdev/sfw-free/releases/latestthen::error::failed to check version latestpost.js,mode: patchpatch mode: no post-run actions requiredpost.js,job-summary: nonepost.js, no report pathpost.js, full report toGITHUB_STEP_SUMMARYThe SFW-mode probe is the one that matters most: it exercises
@actions/githubv9 and octokit v7 against the real GitHub API, and lands on the same request and the same error handling octokit v5 did.Sizes.
dist/main.js595,112 to 1,036,221 bytes.dist/post.js467,895 to 1,050,405 bytes. Both parse undernode --check. The growth is unminified output plus the hardened@socketregistry/packageurl-jsdrop-in the fleet dedup gate requires in place of upstreampackageurl-js.Release workflow — same steps, driven by pnpm
release.ymlusednpm ciandnpx semantic-release. npm cannot resolve thecatalog:protocol the fleet'spackage.jsonnow uses, so the install step is the fleetsetup-and-installcomposite (checkout, node, pnpm, install) and the release step ispnpm exec semantic-release. A hand-written bootstrap fetch runs first, because auses: ./…composite cannot resolve before something is on disk — the same shapeci.ymluses..releaserc.json'sprepareCmdispnpm run build.The semantic-release plugin set, the bot identity, and the
dist/*.jsrelease assets are unchanged.Gates — what was run and what it said
Ran.
pnpm install(clean),pnpm run build(clean),pnpm test(11 tests across 2 files, passing),pnpm run check --all(177 checks, exit 0),pnpm run check --all --release(exit 0).Trade-off.
dist/stays git-tracked, so the root.gitignorere-includes it under the repo-owned block — the fleet block ignores**/dist/as a build output, which is wrong for a repo whose build output is the product..config/repo/root-files.jsondeclaresaction.yml,dist, and.releaserc.jsonas tool-anchored root entries for the same reason.Fuzzing is exempt, with the reason recorded in the marker: the action parses no untrusted input, and the only pure logic is two lookup tables whose entire input domain is the finite set of
process.platformandprocess.archvalues the unit tests already enumerate.The release model changed
The repo ran semantic-release with
@semantic-release/git, which commits back tomain. That push is rejected outright —mainrequires pull requests, a required workflow, and signed commits — so the release job has been failing since 2026-07-13 and nothing has shipped since v1.3.2.That path is removed:
.github/workflows/release.yml,.releaserc.json, and thesemantic-releasepackages are gone. Releases now run the standard cascaded workflows —github-release.ymlcuts a release from a pushed signedv*tag and skips the registry gate for a repo that publishes to no registry, andrelease-reconcile.ymlcovers drift. A person names the version throughbump.mtsinstead of it being computed from commit types.package.jsonversionwas the placeholder0.0.0-semantically-released; it now states the last released version, 1.3.2.