Skip to content

build(acquisition): pin scheduled audit workflow actions and toolchain #147

Description

@seonghobae

Problem

Protected main c85d710804139c0697d7ef8fa47d02b1389e6d84 runs .github/workflows/acquisition-readiness-scan.yml as a retained buyer-evidence producer. The protected version predates Noema's current immutable-action/exact-runtime/least-authority contracts: it uses mutable major-tag Actions, broad Node selection, default persisted checkout credentials, and executes npm ci even though the acquisition manifest/audit entrypoints are repository Node scripts composed from Node built-ins and local modules and do not require node_modules.

That final point matters: merely making installation deterministic would still leave avoidable dependency/lifecycle-script execution in the buyer-evidence authority plane.

RCA

  • First failing boundary: trusted scheduled/manual acquisition audit -> executable setup/dependency execution -> retained acquisition artifact.
  • Immediate causes: mutable Action tags, broad Node/npm identity, persisted checkout credential, and an unnecessary dependency installation step.
  • Root cause: the acquisition evidence workflow reused a generic CI-style install pattern instead of declaring the smallest execution authority actually required by its entrypoints.
  • Systemic risk: buyer-facing evidence can be generated/uploaded under executable identities or dependency lifecycle behavior not required by the evidence code itself, while repository Git credentials remain available longer than necessary.

Distinct remedies / feasibility

  1. Pin trusted Actions and exact Node/npm, disable persisted checkout credentials, and remove dependency installation entirely — selected smallest root-cause remedy. Fresh source inspection confirmed acquisition:data-room-manifest and acquisition:audit execute Node built-ins/local modules without installed packages.
  2. Keep the install but use the frozen protected-CI command — deterministic, but preserves unnecessary lifecycle/dependency execution authority.
  3. Keep the install with --ignore-scripts — narrower than ordinary install, but still performs dependency materialization the entrypoints do not need.
  4. Replace acquisition auditing with a separate service/image — substantially larger trust/provenance change without need for this bounded defect.

Active test-first repair

PR #148 (fix(acquisition): pin scheduled audit toolchain) is the current direct-main repair.

  • protected/live base: c85d710804139c0697d7ef8fa47d02b1389e6d84;
  • branch: fix/acquisition-scan-immutable-toolchain;
  • no-install RED contract: 07a6514250c8100f0362c28391a855c6033a7809;
  • exact current GREEN head: 358eaa053ee7de7bcaa0a412ea858cb61cd376a9;
  • changed paths: .github/workflows/acquisition-readiness-scan.yml, test/acquisition-readiness-scan-toolchain-integrity.test.ts.

The RED contract rejects npm ci, npm install, npm i, and an install step in this acquisition workflow and requires tracked-source/exact-workflow-SHA validation immediately before evidence generation. GREEN removes the install step, preserves exact Node 24.19.0 / npm 11.17.0 verification, and retains scheduled report-only/manual strict, manifest, audit, and artifact semantics.

Exact current proof

For unchanged #148 head 358eaa053ee7de7bcaa0a412ea858cb61cd376a9:

  • application ci run 31467514954: terminal success;
  • reviewer-ci run 31467514985: terminal success;
  • eligible central Security Scan run 31467514947: terminal success;
  • current formal reviews: 0;
  • current inline review threads: 0;
  • GitHub reports the PR Ready and mergeable.

Technical GREEN is not independent approval, live governance authority, protected-main operational acceptance, production KPI evidence, immutable release/deployment evidence, legal/outbound-rights evidence, revenue evidence, transfer evidence, or acquisition readiness.

Acceptance

Repository-owned implementation on #148 current exact head

  • Test-first contract demonstrates the unnecessary dependency-execution boundary.
  • Checkout/setup-node/upload-artifact use immutable reviewed revisions.
  • Checkout does not persist credentials.
  • Node 24.19.0 and npm 11.17.0 are explicitly verified.
  • Acquisition evidence generation performs no dependency installation or lifecycle-script execution.
  • Tracked source is clean and checked-out HEAD equals exact github.sha immediately before manifest/audit execution.
  • Scheduled report-only/manual strict, manifest, audit, and artifact semantics remain unchanged.
  • Exact-head application CI, reviewer-ci, eligible central Security Scan, reviews, and threads are freshly revalidated.
  • No outbound license, rights, revenue, KPI, deployment, transfer, or acquisition-readiness evidence is manufactured.

Remaining protected integration / operation

Related: #5, #27, #29, #68, #69, #77, #79, #145, #148, #155

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions