Skip to content

fix: consolidate AETHER reproducibility repair and evidence chain - #10

Merged
qt314wink merged 16 commits into
mainfrom
fix/consolidate-reproducibility-chain
Jul 28, 2026
Merged

qt314wink merged 16 commits into
mainfrom
fix/consolidate-reproducibility-chain

Conversation

@qt314wink

@qt314wink qt314wink commented Jul 25, 2026 •

Copy link
Copy Markdown
Contributor

Intent

Promote one consolidated AETHER reproducibility chain to current main instead of merging or cherry-picking overlapping PRs independently.

Provenance

This PR is the only promotion candidate.

Exact diff classes

Inherited verified repair

  • .eslintrc.json
  • package-lock.json
  • the two pinned ESLint development dependencies in package.json
  • .github/workflows/verify-aether-v0.yml
  • docs/verification/FROZEN_BUILD_REPAIR.md
  • retained accessibility and WebGL manual-check documents
  • README verification notes

New evidence layer

  • .github/workflows/reproducible-build.yml
  • docs/verification/REPRODUCIBLE_BUILD_EVIDENCE.md
  • tests/normalize-next-build.mjs
  • tests/webgl-evidence.mjs

Verified CI on head f4ce9eaa

  • Verify AETHER v0 — passed
  • AETHER Reproducible Build Evidence — passed

The committed lockfile was consumed without regeneration; frozen install, typecheck, noninteractive lint, two production builds, and narrowly normalized manifest comparison completed successfully.

Non-goals

No files under src/**, no shaders, uniforms, tokens, gallery behavior, deployment configuration, pricing, or secrets are changed.

Approval gate

Keep draft. Static WebGL findings remain distinct from runtime proof, and issue #9 remains the separate browser-lifecycle remediation path. Jennipher must approve the exact inherited-versus-new inventory before merge.

Rollback

Close the PR. Current main remains unchanged.

@qt314wink
qt314wink marked this pull request as ready for review July 28, 2026 12:29
Copilot AI review requested due to automatic review settings July 28, 2026 12:29
@qt314wink
qt314wink merged commit 0ffcf8d into main Jul 28, 2026
2 checks passed

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.

Pull request overview

This PR consolidates AETHER’s build verification and reproducible-build evidence chain onto current main, promoting the previously repaired frozen-install/lint workflow and adding a second workflow that captures two-build reproducibility artifacts plus a static WebGL evidence inventory.

Changes:

  • Adds a dedicated “reproducible build evidence” GitHub Actions workflow that runs two production builds and compares raw vs narrowly-normalized manifests.
  • Introduces two Node scripts to (a) normalize Next build outputs for comparison and (b) generate a static WebGL evidence inventory report.
  • Documents verification/evidence expectations in docs/verification/** and expands README verification notes; pins ESLint dev dependencies and adds .eslintrc.json.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
.github/workflows/reproducible-build.yml New workflow to run two builds, compare manifests, and upload reproducibility evidence artifacts.
.github/workflows/verify-aether-v0.yml Verification workflow for frozen install + lint/typecheck/build with retained evidence artifacts.
tests/normalize-next-build.mjs Normalizes Next build outputs to support narrowly-scoped reproducibility comparisons.
tests/webgl-evidence.mjs Produces a static WebGL evidence inventory JSON + console summary.
docs/verification/REPRODUCIBLE_BUILD_EVIDENCE.md Documents the reproducible-build evidence chain and normalization boundaries.
docs/verification/FROZEN_BUILD_REPAIR.md Receipt documenting the frozen-install/lint repair and its verification evidence.
docs/verification/WEBGL_SMOKE_TEST.md Manual WebGL smoke-test plan to be executed outside CI.
docs/verification/ACCESSIBILITY_CHECKLIST.md Manual accessibility verification checklist for the current v0 behavior.
README.md Adds npm run lint to validation and documents verification workflow intent/status.
package.json Pins ESLint and eslint-config-next to support next lint deterministically.
.eslintrc.json Adds Next-recommended ESLint configuration for core web vitals + TypeScript.
Comments suppressed due to low confidence (3)

.github/workflows/reproducible-build.yml:82

  • Same issue as build A: the raw manifest generation does not exclude .next/trace, despite the receipt/docs listing it as excluded.
          find .next -type f \
            ! -path '.next/cache/*' \
            ! -name 'BUILD_ID' \
            ! -name '*.trace' \
            -print0 \

.github/workflows/reproducible-build.yml:103

  • If the normalized manifest diff fails, this step exits before writing normalized_manifest_exit_code, so the later execution receipt reports -1 instead of the real exit code. Capturing and persisting the exit code (like the raw diff step) makes the evidence receipt accurate even on failures.
        run: |
          diff -u artifacts/build-a.normalized.sha256 artifacts/build-b.normalized.sha256 \
            | tee artifacts/build-normalized.diff
          echo "normalized_manifest_exit_code=0" >> "$GITHUB_ENV"

.github/workflows/reproducible-build.yml:47

  • verify-aether-v0.yml uses npm ci --ignore-scripts for the frozen install gate, but this workflow runs install scripts. If the intent is a consistent, bounded frozen-install contract, align these flags (or explicitly document why scripts are required here).
      - name: Frozen install
        run: npm ci --no-audit --no-fund

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread README.md
7. create a deterministic build archive and SHA-256 digest
8. retain verification evidence as a GitHub Actions artifact

A frozen installation cannot currently complete because this branch does not contain `package-lock.json`. The workflow reports that as a blocking failure and does not silently fall back to `npm install`. Adding or repairing the lockfile requires separate approval because the lockfile is outside the default verification-only scope.
Comment thread tests/webgl-evidence.mjs
Comment on lines +50 to +51
id: 'canvas-accessible-name',
status: /<canvas[^>]*aria-label=/.test(source) ? 'proven' : 'missing',
Comment on lines +25 to +30
const excluded = (relativePath) =>
relativePath === 'BUILD_ID' ||
relativePath === 'trace' ||
relativePath.endsWith('.trace') ||
relativePath.startsWith(`cache${sep}`) ||
relativePath.startsWith('cache/');
Comment on lines +61 to +67
find .next -type f \
! -path '.next/cache/*' \
! -name 'BUILD_ID' \
! -name '*.trace' \
-print0 \
| sort -z \
| xargs -0 sha256sum > artifacts/build-a.raw.sha256
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: '22'
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