Skip to content

feat: rebuild the action on the effected Effect v4 suite - #206

Merged
C. Spencer Beggs (spencerbeggs) merged 4 commits into
mainfrom
dev
Aug 3, 2026
Merged

feat: rebuild the action on the effected Effect v4 suite#206
C. Spencer Beggs (spencerbeggs) merged 4 commits into
mainfrom
dev

Conversation

@spencerbeggs

@spencerbeggs C. Spencer Beggs (spencerbeggs) commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Complete greenfield rebuild of the internals on @effected/github-actions, npm, package-json and semver, replacing @savvy-web/github-action-effects.
The public interface is unchanged: same inputs, outputs, devEngines contract, job summary and log output — consuming repositories need no changes.
Package managers are now provisioned directly into the tool cache without corepack, and the dependency cache key gains a CPU-architecture segment and a two-rung restore ladder.
The embedded Turbo remote-cache server gets a per-run random auth token that fails closed, graceful SIGTERM teardown and EADDRINUSE handling.
Lifecycle scripts in consuming repos now see the installed runtimes and package manager on PATH, and Windows package-manager shims are invoked safely (CVE-2024-27980 mitigation).
Validated end to end at HEAD: 448 unit tests, the 35-job fixture matrix and the 5-job turbo-cache workflow including real S3, all green.
Ships a minor changeset (1.2.3 → 1.3.0) plus the dependency table, reconciled design and context docs, a rewritten README and the MIT license file.

Signed-off-by: C. Spencer Beggs spencer@savvyweb.systems

https://claude.ai/code/session_01YLYULzeqGaeTYSe4tWoNUv

Rebuild the action internals with @effected/github-actions and direct package-manager provisioning. Preserve the public interface, devEngines contract, outputs, summaries, and logs.

Add architecture-aware dependency cache keys with two-level restore. Run lifecycle scripts with installed runtimes and package managers on PATH.

Secure and harden the embedded Turbo cache server with per-run tokens, graceful shutdown, and EADDRINUSE handling. Add comprehensive unit and workflow coverage, documentation, an MIT license, and a 1.3.0 changeset.

feat: rebuild action internals with Effect services

- replace legacy action effects with `@effected/github-actions` services and typed setup steps
- harden dependency caching and embedded Turbo remote caching across platforms
- preserve action contracts while expanding tests, documentation, and release metadata
Signed-off-by: Full Name <email>

Complete greenfield rebuild of the internals on @effected/github-actions, npm, package-json and semver, replacing @savvy-web/github-action-effects.
The public interface is unchanged: same inputs, outputs, devEngines contract, job summary and log output — consuming repositories need no changes.
Package managers are now provisioned directly into the tool cache without corepack, and the dependency cache key gains a CPU-architecture segment and a two-rung restore ladder.
The embedded Turbo remote-cache server gets a per-run random auth token that fails closed, graceful SIGTERM teardown and EADDRINUSE handling.
Lifecycle scripts in consuming repos now see the installed runtimes and package manager on PATH, and Windows package-manager shims are invoked safely (CVE-2024-27980 mitigation).
Ships with a rebuilt unit suite (448 tests), a hardened fixture harness, reconciled design and context docs, and a rewritten README.

Signed-off-by: C. Spencer Beggs <spencer@savvyweb.systems>
Claude-Session: https://claude.ai/code/session_01YLYULzeqGaeTYSe4tWoNUv
Copilot AI review requested due to automatic review settings August 3, 2026 00:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@socket-security

socket-security Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Added@​effected/​sbom@​0.2.17710010090100
Added@​effected/​github@​0.2.17810010090100
Added@​effected/​github-actions@​0.3.07810010090100
Added@​effected/​runtimes@​0.2.27910010093100
Added@​effected/​markdown@​0.4.1791009993100

View full report

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@spencerbeggs, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 14 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: ae4c4984-062e-413b-b1b4-00b7feccad0c

📥 Commits

Reviewing files that changed from the base of the PR and between 2d1c582 and 947ab30.

⛔ Files ignored due to path filters (5)
  • .github/actions/local/dist/main.js is excluded by !**/dist/**
  • .github/actions/local/dist/turbo-server.js is excluded by !**/dist/**
  • .github/workflows/CLAUDE.md is excluded by !**/CLAUDE.md
  • dist/main.js is excluded by !**/dist/**, !dist/**
  • dist/turbo-server.js is excluded by !**/dist/**, !dist/**
📒 Files selected for processing (14)
  • .github/workflows/test.yml
  • README.md
  • __test__/unit/layers.test.ts
  • __test__/unit/schema/domain.test.ts
  • __test__/unit/schema/outputs.test.ts
  • __test__/unit/steps/detect-biome.test.ts
  • __test__/unit/steps/turbo-cache.test.ts
  • __test__/unit/turbo-cache/handler.test.ts
  • src/steps/detect-biome.ts
  • src/steps/install-runtimes.ts
  • src/steps/setup-package-manager.ts
  • src/steps/turbo-cache.ts
  • src/turbo-cache/handler.ts
  • src/turbo-server.ts
📝 Walkthrough

Walkthrough

Changes

The action was reorganized around typed Effect schemas and dedicated steps for configuration loading, runtime and package-manager installation, dependency caching, Biome installation, Turbo caching, output emission, and job summaries. Application and post-action layers now use the new services and state formats. Workflows and unit tests cover the new behavior.

Runtime and cache architecture

Layer / File(s) Summary
Typed contracts and installation descriptors
src/schema/*, src/descriptors/*, src/state.ts, package.json, __fixtures__/bun-bun/package.json
Added typed input, output, configuration, runtime-plan, and cache-state contracts. Runtime and Biome descriptors now return platform-specific installation plans.
Configuration, installation, and dependency cache steps
src/steps/*, src/summary/format.ts
Added configuration loading, runtime and package-manager installation, Biome detection and installation, dependency installation, cache-key construction, cache restoration, and summary formatting.
Turbo cache activation and server
src/turbo-cache/*, src/turbo-server.ts, src/steps/turbo-cache.ts
Added Turbo cache resolution, embedded-server startup, backend configuration, artifact handling, metadata storage, readiness checks, request handling, and shutdown behavior.
Pipeline composition and post-action handling
src/program.ts, src/post.ts, src/layers/app.ts, src/main.ts
Reworked execution order, PATH construction, output mapping, summary inputs, service layers, Turbo teardown, and dependency-cache saving.
Workflow, documentation, and validation coverage
.github/workflows/*, .github/actions/test-fixture/action.yml, __test__/unit/*, README.md, vitest.config.ts, repository metadata
Expanded workflow checks and unit tests for the new contracts and execution paths. Updated documentation, coverage configuration, repository metadata, and licensing.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Action
  participant Program
  participant Installers
  participant Cache
  participant Turbo
  participant Summary
  Action->>Program: load inputs and configuration
  Program->>Installers: install runtimes and package manager
  Program->>Cache: restore dependency cache
  Program->>Turbo: start Turbo cache
  Program->>Summary: emit outputs and write summary
  Action->>Cache: save cache during post phase
  Action->>Turbo: reap embedded server
Loading

Possibly related issues

Possibly related PRs

Suggested reviewers: copilot

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: rebuilding the action on the Effect v4-based @effected suite.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 26

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@__test__/unit/layers.test.ts`:
- Around line 39-49: Update the MainLive test to import and request
PackageManagerInstaller alongside ActionCache and ToolInstaller in the
Effect.all service list, then assert all three services are provided so the test
verifies MainLive's required service contract.

In `@__test__/unit/program.test.ts`:
- Around line 405-427: Replace the manual process.env.PATH try/finally
restoration in the three tests around the current test and the adjacent
PATH-mutation tests with the existing withEnvRestored helper. Wrap each test
body using the helper’s established API so PATH is restored exactly, including
deleting it when it was initially unset, while preserving each test’s existing
assertions and behavior.
- Around line 61-74: Update childProcessSpawnerTest to construct the
ChildProcessSpawner service through ChildProcessSpawnerNS.make, matching the
pattern in layers.test.ts. Pass the existing spawn, exitCode, and quietHandle
behavior to the factory, and remove the manually defined streamString,
streamLines, lines, and string members.

In `@__test__/unit/schema/domain.test.ts`:
- Around line 23-38: Extend the invalid-version cases in the bad-input list of
the domain schema test to include a string using “<”, a bare “=”, and uppercase
“X”. Keep these additions alongside the existing rejected range-character cases.

In `@__test__/unit/schema/outputs.test.ts`:
- Around line 54-75: Update the emitted helper and the “writes every action.yml
output exactly once” test to record every publication in an array alongside the
existing Map, then assert the publication count equals OUTPUT_NAMES.length. Keep
the Map assertions for final values and ensure duplicate calls remain visible to
the count.

In `@__test__/unit/state.test.ts`:
- Around line 54-72: The tests invoking acrossPhases and makeTempDirectoryScoped
must run with scoped test support. Update the relevant `@effect/vitest` test
declarations from it.effect to it.scoped, preserving the existing CacheState
round-trip assertions and test logic.

In `@__test__/unit/steps/install-dependencies.test.ts`:
- Around line 377-397: Update the test around run to use the platform-resolved
pathKey consistently: capture the existing live value through pathKey before
modifying the environment, restore that same key in finally, and assert the
spawned environment using pathKey rather than separately reading or deleting
PATH. Preserve the test’s case-insensitive Windows behavior while avoiding reads
and writes through different spellings of the same environment key.

In `@__test__/unit/turbo-cache/activation.test.ts`:
- Around line 8-28: Extract the duplicated baseInputs fixture and
inputs(overrides) builder into a shared test helper module, then replace the
local definitions in activation.test.ts, restore-cache.test.ts, and
turbo-cache.test.ts with imports from that helper. Preserve the existing fixture
values and builder behavior across all three suites.

In `@__test__/unit/turbo-cache/meta.test.ts`:
- Around line 53-63: Annotate the tuple array passed to the duration-clamping
it.each test so each row is typed as [string, number, number]. Keep the existing
test cases and clampDurationMs assertions unchanged, ensuring input is inferred
as number rather than string | number.

In `@__test__/unit/turbo-cache/server-config.test.ts`:
- Around line 174-199: The test should exercise an actual S3 store operation
while console.log is being captured, rather than relying only on build’s typeof
probes. In the “never writes the s3 credentials” test, invoke an appropriate
operation on the built store inside the existing capture window, or otherwise
verify that layer construction performs declassification, while preserving the
assertions that neither credential nor “add-mask” appears in captured output.

In @.github/workflows/test-turbo-cache.yml:
- Around line 194-220: Add cleanup for the run-scoped cache objects created by
the workflow’s turbo-cache-prefix under ci/. Prefer configuring an S3 lifecycle
rule to expire objects with the ci/ prefix after a short retention period;
alternatively, add an always-running cleanup step that deletes the current run’s
ci/${{ github.run_id }}-${{ github.run_attempt }}/ prefix using the configured
bucket and endpoint credentials.

In @.github/workflows/test.yml:
- Line 47: Add a bun entry to the test-node-restore-cache matrix alongside npm,
pnpm, yarn, and multi, setting expected-cache-hit to "true" so it restores the
cache created by test-node-create-cache.

In @.gitmodules:
- Around line 1-4: Update the .repos/effect submodule configuration so shallow
initialization fetches a branch or tag containing the recorded commit, using
appropriate branch/shallow-branch settings; alternatively remove shallow = true
to allow the commit to be fetched directly. Preserve the existing submodule path
and URL.

In `@package.json`:
- Around line 34-48: Remove the unused `@effected/`* entries from the dependencies
section of package.json: `@effected/commands`, `@effected/git`, `@effected/github`,
`@effected/glob`, `@effected/lockfiles`, `@effected/markdown`, `@effected/package-json`,
`@effected/runtimes`, `@effected/sbom`, `@effected/workspaces`, and `@effected/yaml`.
Preserve the existing `@effected/github-actions`, `@effected/jsonc`, `@effected/npm`,
and `@effected/semver` dependencies.

In `@README.md`:
- Line 4: Update the Node.js badge in the README so its Markdown alt text uses
the readable “>=” characters rather than the percent-encoded “%3E%3D”; keep the
percent-encoding unchanged in the badge URL.

In `@src/descriptors/biome.ts`:
- Around line 63-69: Validate and normalize resolved Biome versions before they
reach the URL construction in the plan method: apply SemVer.ExactVersionString
to biome-version overrides and validate the config-file $schema capture,
rejecting values that are not safe exact versions or contain path traversal such
as "/" or "..". Preserve normal supported-platform handling while ensuring only
validated versions are interpolated into the GitHub release URL.

In `@src/descriptors/node.ts`:
- Around line 39-45: Update the Node tarball descriptor’s tarFlags in the
version URL configuration to use the BSD-compatible strip-components option
instead of --strip=1, while preserving the existing extraction flags and
behavior on other platforms.

In `@src/steps/cache-config.ts`:
- Around line 151-177: Update storePaths for the pnpm and deno cases to add
darwin-specific defaults: use ~/Library/pnpm/store for pnpm and
~/Library/Caches/deno for deno, while preserving the existing Windows and Linux
paths.

In `@src/steps/install-dependencies.ts`:
- Around line 75-81: Update anyLockfile’s Effect.reduce call to use false
directly as the initial boolean accumulator instead of () => false, preserving
the existing short-circuiting lockfile checks and installDependencies selection
behavior.

In `@src/steps/install-runtimes.ts`:
- Line 82: Remove the redundant Error check at line 82 because Error instances
are already handled by the preceding object branch; retain the existing handling
for empty-message Errors without adding unrelated changes.

In `@src/steps/setup-package-manager.ts`:
- Around line 9-12: Update the docstring for the setup-package-manager error to
remove the stale “activated via corepack” wording. Describe failure to install,
activate through the current addPath-based flow, or verify the package manager,
consistent with PackageManagerInstaller and the activate behavior.

In `@src/steps/turbo-cache.ts`:
- Around line 254-256: The fixed-port startup flow must not accept a stale
server as ready when readinessProbe checks the unauthenticated status endpoint.
Update the readinessProbe/spawn logic around DEFAULT_TURBO_SERVER_PORT and
credential so readiness is tied to this spawn’s token, or ensure an EADDRINUSE
listen failure rejects startup instead of proceeding with the existing server;
preserve authenticated Turbo cache requests using the new credential.

In `@src/turbo-cache/handler.ts`:
- Around line 89-93: Update artifactHash to reject "." and ".." in addition to
empty values and segments containing "/", before constructing any artifact key.
Ensure the BlobStore backends also enforce artifact-key containment, preserving
valid single-segment hashes.

In `@src/turbo-server.ts`:
- Around line 121-129: Update the SIGTERM handler to call
server.closeIdleConnections() immediately after server.close(), ensuring idle
keep-alive sockets are closed so the close callback reaches runtime.dispose()
before the shutdown deadline.
- Around line 71-74: Add an error listener to the request stream alongside the
existing data and end listeners in the request handling flow. On request-stream
errors, discard the accumulated chunks and send the appropriate response only
when the socket remains writable, preventing aborted uploads from becoming
uncaught exceptions while preserving normal end handling.

In `@vitest.config.ts`:
- Around line 25-26: Update the coverage configuration in vitest.config.ts to
exclude the detached src/turbo-server.ts entry point from coverage, while
continuing to include other src/**/*.ts files so unimported source files are
scored.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6c4577f2-9e9d-4325-9480-0ca169c44877

📥 Commits

Reviewing files that changed from the base of the PR and between 1ac1a00 and 2d1c582.

⛔ Files ignored due to path filters (22)
  • .changeset/happy-trees-rest.md is excluded by !.changeset/**
  • .changeset/sturdy-engines-ignite.md is excluded by !.changeset/**
  • .claude/design/refs.json is excluded by !.claude/**
  • .claude/design/silk-runtime-action/INDEX.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/architecture.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/build-and-distribution.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/caching-strategy.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/effect-service-model.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/runtime-installation.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/testing-strategy.md is excluded by !.claude/**
  • .claude/design/silk-runtime-action/turbo-remote-cache.md is excluded by !.claude/**
  • .github/actions/local/dist/main.js is excluded by !**/dist/**
  • .github/actions/local/dist/post.js is excluded by !**/dist/**
  • .github/actions/local/dist/turbo-server.js is excluded by !**/dist/**
  • CLAUDE.md is excluded by !**/CLAUDE.md
  • __fixtures__/CLAUDE.md is excluded by !**/CLAUDE.md
  • __fixtures__/bun-bun/bun.lock is excluded by !**/*.lock
  • dist/main.js is excluded by !**/dist/**, !dist/**
  • dist/post.js is excluded by !**/dist/**, !dist/**
  • dist/turbo-server.js is excluded by !**/dist/**, !dist/**
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
  • src/CLAUDE.md is excluded by !**/CLAUDE.md
📒 Files selected for processing (95)
  • .github/actions/test-fixture/action.yml
  • .github/workflows/test-turbo-cache.yml
  • .github/workflows/test.yml
  • .gitignore
  • .gitmodules
  • .repos/config.json
  • .repos/effect
  • .repos/effect-smol
  • LICENSE
  • README.md
  • __fixtures__/bun-bun/package.json
  • __test__/unit/descriptors.test.ts
  • __test__/unit/layers.test.ts
  • __test__/unit/post.test.ts
  • __test__/unit/program.test.ts
  • __test__/unit/schema/domain.test.ts
  • __test__/unit/schema/inputs.test.ts
  • __test__/unit/schema/outputs.test.ts
  • __test__/unit/state.test.ts
  • __test__/unit/steps/cache-config.test.ts
  • __test__/unit/steps/detect-biome.test.ts
  • __test__/unit/steps/detect-turbo.test.ts
  • __test__/unit/steps/install-biome.test.ts
  • __test__/unit/steps/install-dependencies.test.ts
  • __test__/unit/steps/install-runtimes.test.ts
  • __test__/unit/steps/load-config.test.ts
  • __test__/unit/steps/restore-cache.test.ts
  • __test__/unit/steps/setup-package-manager.test.ts
  • __test__/unit/steps/steps.test.ts
  • __test__/unit/steps/summary.test.ts
  • __test__/unit/steps/turbo-cache.test.ts
  • __test__/unit/summary/format.test.ts
  • __test__/unit/turbo-cache/activation.test.ts
  • __test__/unit/turbo-cache/handler.test.ts
  • __test__/unit/turbo-cache/meta.test.ts
  • __test__/unit/turbo-cache/server-config.test.ts
  • action.config.ts
  • package.json
  • src/descriptors/biome.ts
  • src/descriptors/bun.ts
  • src/descriptors/deno.ts
  • src/descriptors/descriptor.ts
  • src/descriptors/descriptors.test.ts
  • src/descriptors/node.ts
  • src/errors/errors.test.ts
  • src/errors/errors.ts
  • src/layers/app.ts
  • src/main.ts
  • src/post.test.ts
  • src/post.ts
  • src/program.test.ts
  • src/program.ts
  • src/schema/domain.ts
  • src/schema/inputs.ts
  • src/schema/outputs.ts
  • src/schemas/domain.test.ts
  • src/schemas/domain.ts
  • src/services/cache.test.ts
  • src/services/cache.ts
  • src/services/config-loader.test.ts
  • src/services/config-loader.ts
  • src/services/runtime-installer.test.ts
  • src/services/runtime-installer.ts
  • src/services/summary.test.ts
  • src/services/summary.ts
  • src/services/turbo-cache/activation.test.ts
  • src/services/turbo-cache/activation.ts
  • src/services/turbo-cache/apply.test.ts
  • src/services/turbo-cache/apply.ts
  • src/services/turbo-cache/codec.test.ts
  • src/services/turbo-cache/codec.ts
  • src/services/turbo-cache/handler.test.ts
  • src/services/turbo-cache/handler.ts
  • src/services/turbo-cache/lifecycle.test.ts
  • src/services/turbo-cache/lifecycle.ts
  • src/state.test.ts
  • src/state.ts
  • src/steps/cache-config.ts
  • src/steps/detect-biome.ts
  • src/steps/detect-turbo.ts
  • src/steps/install-biome.ts
  • src/steps/install-dependencies.ts
  • src/steps/install-runtimes.ts
  • src/steps/load-config.ts
  • src/steps/restore-cache.ts
  • src/steps/setup-package-manager.ts
  • src/steps/summary.ts
  • src/steps/turbo-cache.ts
  • src/summary/format.ts
  • src/turbo-cache/activation.ts
  • src/turbo-cache/handler.ts
  • src/turbo-cache/meta.ts
  • src/turbo-cache/server-config.ts
  • src/turbo-server.ts
  • vitest.config.ts
💤 Files with no reviewable changes (27)
  • src/errors/errors.test.ts
  • src/state.test.ts
  • src/services/config-loader.test.ts
  • .repos/effect-smol
  • src/services/runtime-installer.test.ts
  • src/descriptors/descriptors.test.ts
  • src/services/turbo-cache/apply.ts
  • src/services/turbo-cache/apply.test.ts
  • src/services/turbo-cache/handler.test.ts
  • src/services/summary.ts
  • src/services/cache.test.ts
  • src/services/runtime-installer.ts
  • src/post.test.ts
  • src/services/turbo-cache/lifecycle.test.ts
  • src/services/config-loader.ts
  • src/services/turbo-cache/activation.test.ts
  • src/services/turbo-cache/codec.test.ts
  • src/services/turbo-cache/activation.ts
  • src/errors/errors.ts
  • src/schemas/domain.test.ts
  • src/services/summary.test.ts
  • src/services/turbo-cache/handler.ts
  • src/schemas/domain.ts
  • src/services/cache.ts
  • src/services/turbo-cache/lifecycle.ts
  • src/services/turbo-cache/codec.ts
  • src/program.test.ts

Comment thread __test__/unit/layers.test.ts
Comment thread __test__/unit/program.test.ts
Comment thread __test__/unit/program.test.ts
Comment thread __test__/unit/schema/domain.test.ts
Comment thread __test__/unit/schema/outputs.test.ts
Comment thread src/steps/turbo-cache.ts Outdated
Comment thread src/turbo-cache/handler.ts
Comment thread src/turbo-server.ts
Comment thread src/turbo-server.ts
Comment thread vitest.config.ts
Hardens the detached turbo server (request-stream error listener so a client abort cannot kill the process, idle keep-alive sockets closed on SIGTERM so graceful shutdown beats the exit deadline) and refuses relative-segment artifact hashes.
Adds a path-safety guard on resolved Biome versions so neither the biome-version input nor a poisoned $schema can redirect the binary download, while npm-style tags keep working.
Removes an unreachable error-formatting branch, fixes a stale corepack docstring and the README badge alt text, strengthens three unit assertions, retries the fixed-port bind in the probe test against transient ephemeral-port collisions, and adds the missing bun restore-cache workflow row.

Signed-off-by: C. Spencer Beggs <spencer@savvyweb.systems>
Claude-Session: https://claude.ai/code/session_01YLYULzeqGaeTYSe4tWoNUv
Copilot AI review requested due to automatic review settings August 3, 2026 01:21

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings August 3, 2026 01:24

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

…port

This repository's own CI is set up by this very action, so a real turbo cache server holds the default port 41230 for the whole job and the probe test's fixed-port bind failed with EADDRINUSE.
The step gains a port seam alongside its existing detached and serverEntry seams, and the test now binds port 0 first and points the step at whatever the OS handed out — no fixed-port bind, no retry loop, deterministic under a busy runner.
Verified by running the suite with a listener deliberately holding 41230.

Signed-off-by: C. Spencer Beggs <spencer@savvyweb.systems>
Claude-Session: https://claude.ai/code/session_01YLYULzeqGaeTYSe4tWoNUv
Copilot AI review requested due to automatic review settings August 3, 2026 01:34

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@spencerbeggs
C. Spencer Beggs (spencerbeggs) merged commit 18644c6 into main Aug 3, 2026
68 of 69 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants