Skip to content

Enforce COPY-based Docker execution without losing test workflow behavior #921

Description

@flyingrobots

1. Background Context

The maintainer requires every test and benchmark to run in a COPY-based Docker container, with no host checkout or Git-directory mounts and no isolation bypass flags. Existing PR #915 implements the execution boundary but has four unresolved review findings. This executable card owns that PR and its complete acceptance outcome for v20.0.0.

2. Problem Description

Current main still runs several CI test and performance commands on the runner host. PR #915 routes commands into Docker, but its performance job uses a runner-mounted workspace, direct commands can miss the package binary directory, watch mode sees a static snapshot, and automatic container removal loses generated reports and ratchet outputs.

2b. Proposed Solution

Complete the Docker execution boundary: copy both performance revisions into an image, resolve package executables inside the container, refresh copied source for watch iterations, and export only declared results before removing containers. Preserve command exit status and cleanup on failure or interruption.

2c. Alternatives considered and rejected

  • Runner job containers: reject because their checkout remains a host mount.
  • Host test execution or environment bypass flags: reject because they violate isolation.
  • Silently dropping watch behavior or generated outputs: reject because existing maintainer commands must remain usable.

2d. Acceptance Criteria

  • All npm/direct test, smoke, BATS, Deno, coverage, and performance entry points either execute in Docker or refuse before loading tests.
  • No test container mounts a host repository or Git directory; performance base and head are copied into its image.
  • Direct package commands resolve installed executables without network installation.
  • Watch mode observes source edits through copy/rebuild execution, without a repository mount.
  • Coverage reports, ratchet snapshots, and permitted coverage-threshold updates survive container cleanup; only the authorized coverage command may update thresholds.
  • Errors and signals retain useful evidence, preserve failure status, and clean up owned containers.
  • Focused regressions, relevant full suites, and hosted checks pass; PR Enforce Docker isolation for tests and benchmarks #915 is merged with integration evidence.

2e. Test Plan

Golden: real COPY-based Docker execution and artifact export.

Edges: commands outside npm, argument forwarding, nonzero exits, cancellation, missing optional outputs, repeated watch edits and cleanup.

Known failure modes: forged Docker flags, automatic runner mounts, missing executable PATH, stale watch snapshots, deleted outputs, accidental overwrites outside the allowlist.

Fuzz and stress: deterministic fixture runners and bounded watch/edit cycles; no host tests or repository mounts.

3. Prerequisites

No separate implementation PR is required. Current main must be merged normally; history must not be rewritten.

4. Scope

In: the shared test/benchmark execution boundary, its workflows, artifact handling, watch behavior, guards, documentation and regressions in PR #915.

Out: domain runtime fixes, test-harness performance redesign, the separately owned Bun frozen-install repair (#865), and the independently executable public-registry consumer lifecycle (#922). The complete Docker-only release requirement is preserved across #921 and #922; both remain in v20.0.0.

Safe intermediate state: existing commands remain usable with isolation enforced, and main passes its required checks immediately after merge.

5. Why now

Release validation cannot satisfy the maintainer's isolation rule until this lands. The inherited host-executing workflows for PR #914 were canceled; that PR will be refreshed and revalidated after this prerequisite merges.

6. Risks

Source synchronization and exported files must not overwrite unrelated host work. Signals and failed tests must not lose evidence or leave test containers running. Performance measurements must retain exact base/head identities.

7. Definition of Done

Acceptance checks have concrete Docker evidence; review threads are resolved by their corresponding fixes; PR #915 merges; both trackers link the mainline integration commit. Merely detecting a container is insufficient proof of checkout isolation.

8. Stakeholders

James Ross, contributors, CI operators, and release consumers who depend on trustworthy validation.

9. Related Issues

Blocks completion of #891's hosted validation and release coordinator #876. Related to #865, #870, and #882; those retain their separate outcomes and PR ownership.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions