Skip to content

Commit 51a00c6

Browse files
hyperpolymathclaudedependabot[bot]hyperpolymath
authored
Merge main into feat/solo-core-metatheory-proofs (un-block #614) (#615)
## What Merges current `main` into `feat/solo-core-metatheory-proofs` and resolves all conflicts, so that **#614 stops being `mergeable_state: dirty`**. While #614 is dirty, GitHub cannot build the merge commit, so its entire CI suite is suppressed (only `lint-workflows` runs). Merging this PR into the feature branch un-blocks #614's CI. ## Why it was needed #614 branched off an old `main` (merge-base 61 commits back) and conflicts with the standalone-CI + codegen work that has since landed (#602, #603, #604, #606, #609, #610, #611, #612, #613). ## Conflict resolutions (5 files) | File(s) | Resolution | |---|---| | `governance.yml`, `scorecard.yml`, `scorecard-enforcer.yml`, `hypatia-scan.yml` | Take `main`'s **standalone** versions. The branch re-adopted the estate `standards` reusables that `main` deliberately dropped (#603/#604) to stop run-creation `startup_failure`s. `main`'s `hypatia-scan.yml` also restores the permissions Hypatia needs (`security-events: write`, `pull-requests: write`, `secrets: inherit`) and the `MPL-2.0` SPDX id the Palimpsest license doc mandates for tooling. | | `docs/PROOF-NEEDS.md` | Drop the branch's stale 103-line `.md`; keep `main`'s canonical 359-line `.adoc` (#609). Also satisfies DOC-FORMAT. | | `docs/history/MODULE-SYSTEM-PROGRESS` | Keep the branch's `.md`→`.adoc` migration; **port** `main`'s additive #138 codegen-follow-up note + status-table row into the `.adoc` so `main`'s work is preserved. | `spark-theatre-gate.yml` and `mirror.yml` were identical to `main`. ## Verification (merged tree) - `dune build` — clean - `dune test` — **534/534 pass** (incl. `cross-module constructor linking, Wasm (#138)`, `Wasm nested tuple patterns`, `Deno-ESM / JS no duplicate Option/Result constructor`) - wasm-runtime harness (`tools/run_codegen_wasm_tests.sh`) — all pass - workflow scan — no `startup_failure` risk introduced ## How to use Merge this into `feat/solo-core-metatheory-proofs`. #614 then becomes mergeable and its full CI runs. > Routed via this branch because the environment only permits pushes to `claude/inspiring-newton-dg5wov`, not directly to the feature branch. Un-blocks #614. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Lz7pRcec2Z3tVtaAhvB3M8 --- _Generated by [Claude Code](https://claude.ai/code/session_01Lz7pRcec2Z3tVtaAhvB3M8)_ --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: hyperpolymath <paraordinate@yahoo.co.uk>
1 parent 0a53ec5 commit 51a00c6

35 files changed

Lines changed: 1744 additions & 239 deletions

.claude/CLAUDE.md

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -230,24 +230,35 @@ not the log content. The fast paths for an agent are:
230230
`gh run view --log-failed <run-id>`; do not loop trying to scrape
231231
the UI.
232232

233-
### Known-failing baseline checks
234-
235-
These checks currently fail on *every* PR for repo-wide reasons, not
236-
because of any individual PR's changes. Do not waste turns
237-
investigating them on a per-PR basis:
238-
239-
* `vscode-smoke` — npm 404 on `@hyperpolymath/affine-vscode` (the
240-
in-editor harness depends on a not-yet-published npm package).
241-
* `migration-assistant` — was fixed by #342, but any branch created
242-
from a base older than #342 will still see it red until rebased.
243-
* `governance / Language / package anti-pattern policy` — flags the
244-
approved TypeScript exemptions (`affinescript-deno-test/*.ts`,
245-
`editors/vscode/test/*.js`, etc., all documented in this file's
246-
exemptions tables); the check has no allowlist for them.
247-
* The Hypatia security-scan bot comment — 143 findings; the bulk are
248-
the same TypeScript exemption hits + pre-existing root files. A
249-
real new finding will show as a *delta* in the count; otherwise
250-
ignore.
233+
### Known-failing baseline checks — updated 2026-06-20
234+
235+
Historically these failed on *every* PR for repo-wide reasons. Most are now
236+
resolved; kept here with current status so agents don't re-investigate:
237+
238+
* `vscode-smoke`**now passes**. Self-contained since the codegen-embed fix
239+
(skips cleanly when the optional `@hyperpolymath/affine-vscode` npm package
240+
is absent). The old "npm 404 fails every PR" no longer holds.
241+
* `migration-assistant`**passes on current `main`**; only red on branches
242+
based before #342. Rebase to clear.
243+
* `governance` — replaced (#603/#604) by a self-contained local gate
244+
(`tools/ci/governance-standalone.sh`); the old estate
245+
`Language / package anti-pattern policy` sub-check (from the
246+
`hyperpolymath/standards` reusable) no longer runs.
247+
* The Hypatia security-scan bot *comment*~43–71 findings depending on scan
248+
scope; the bulk are the documented TypeScript/JS exemptions + pre-existing
249+
root files. A real new finding shows as a *delta in your changed files*;
250+
otherwise ignore. (The Hypatia *check run* gates separately and is green.)
251+
252+
**CI is now standalone and green on `main` (since #604 / `c7922cf`).** Two
253+
`startup_failure` classes bit `ci` / `governance` / `secret-scanner` for days
254+
(and `main` itself) — worth knowing so they aren't reintroduced:
255+
256+
1. The repo's Actions "allowed actions" policy **rejects tag-pinned action
257+
refs at run-creation** (a `startup_failure` with zero jobs). **Pin every
258+
`uses:` to a full commit SHA**`actions/foo@v4` will fail to start.
259+
2. A reusable-workflow *caller* that declares `concurrency:` on the same key
260+
the reusable also declares is rejected at run-creation (BP008 — see
261+
`.github/workflows/spark-theatre-gate.yml`).
251262

252263
If a check from this list *changes status* on a PR (e.g.
253264
`vscode-smoke` suddenly passes, or Hypatia surfaces a new class of

.github/workflows/affine-vscode-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
timeout-minutes: 10
3333
steps:
3434
- name: Checkout code
35-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
35+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
3636
- name: Verify tag matches package version
3737
working-directory: packages/affine-vscode
3838
run: |

.github/workflows/casket-pages.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ jobs:
4949
timeout-minutes: 10
5050
steps:
5151
- name: Checkout
52-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v4
52+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
5353
- name: Checkout casket-ssg
54-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v4
54+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
5555
with:
5656
repository: hyperpolymath/casket-ssg
5757
path: .casket-ssg

.github/workflows/ci.yml

Lines changed: 65 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
# SPDX-License-Identifier: MPL-2.0
2+
#
3+
# Standalone CI: no dependency on third-party actions or external-repo
4+
# reusable workflows. The OCaml toolchain is self-hosted via apt + opam
5+
# (replacing ocaml/setup-ocaml), and only first-party `actions/*` are used
6+
# (checkout / setup-node / upload-artifact), SHA-pinned. dune-project requires
7+
# OCaml >= 4.14, satisfied by the runner's apt OCaml (ocaml-system), with a
8+
# base-compiler fallback.
9+
#
10+
# NOTE on pins: first-party `actions/*` are SHA-pinned (repo SHA-pinning
11+
# policy + Hypatia workflow_audit + the "allowed actions" policy that rejects
12+
# tag refs at run-creation). `actions/checkout` is v7.0.0 (`9c091bb…`, bumped
13+
# by Dependabot in #605); `setup-node` / `upload-artifact` remain v4.
214
name: CI
315
on:
416
push:
@@ -9,27 +21,36 @@ permissions:
921
contents: read
1022
# Actions concurrency pool. Applied only to read-only check workflows
1123
# (no publish/mutation), so cancelling a superseded run is always safe.
24+
# Safe here: this is a normal workflow (not a reusable-workflow caller),
25+
# so there is no caller/reusable concurrency stacking (the BP008 startup
26+
# failure class).
1227
concurrency:
1328
group: ${{ github.workflow }}-${{ github.ref }}
1429
cancel-in-progress: true
1530
jobs:
1631
build:
1732
runs-on: ubuntu-latest
18-
timeout-minutes: 10
33+
timeout-minutes: 25
1934

2035
steps:
2136
- name: Checkout code
22-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
23-
- name: Set up OCaml
24-
uses: ocaml/setup-ocaml@e32b06a3e831ff2fbc6f08cf35be2085e3918014 # v3
25-
with:
26-
ocaml-compiler: "5.1"
37+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
38+
- name: Set up OCaml toolchain (self-hosted; replaces ocaml/setup-ocaml)
39+
run: |
40+
sudo apt-get update
41+
sudo apt-get install -y --no-install-recommends opam ocaml
42+
opam init --bare --disable-sandboxing --yes
43+
# Prefer the runner's system OCaml (>= 4.14 satisfies dune-project)
44+
# for an instant switch; fall back to a pinned base compiler.
45+
opam switch create . ocaml-system --no-install --yes \
46+
|| opam switch create . ocaml-base-compiler.4.14.2 --no-install --yes
47+
opam exec -- ocaml -version
2748
- name: Set up Node.js
2849
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v4
2950
with:
3051
node-version: "20"
3152
- name: Install dependencies
32-
run: opam install . --deps-only --with-test --with-doc
53+
run: opam install . --deps-only --with-test --with-doc --yes
3354
- name: Install tree-sitter CLI (for res-to-affine walker tests)
3455
# Same rationale as the migration-assistant job (see below):
3556
# npm distribution is the fast CI install (~5 s). The walker
@@ -72,21 +93,25 @@ jobs:
7293
run: opam exec -- dune build @fmt
7394
lint:
7495
runs-on: ubuntu-latest
75-
timeout-minutes: 10
96+
timeout-minutes: 25
7697

7798
steps:
7899
- name: Checkout code
79-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
80-
- name: Set up OCaml
81-
uses: ocaml/setup-ocaml@e32b06a3e831ff2fbc6f08cf35be2085e3918014 # v3
82-
with:
83-
ocaml-compiler: "5.1"
100+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
101+
- name: Set up OCaml toolchain (self-hosted; replaces ocaml/setup-ocaml)
102+
run: |
103+
sudo apt-get update
104+
sudo apt-get install -y --no-install-recommends opam ocaml
105+
opam init --bare --disable-sandboxing --yes
106+
opam switch create . ocaml-system --no-install --yes \
107+
|| opam switch create . ocaml-base-compiler.4.14.2 --no-install --yes
108+
opam exec -- ocaml -version
84109
- name: Install dependencies
85110
# Match the build job: `dune build` compiles everything including
86111
# test/ (which depends on alcotest, with-test) and the @doc target
87112
# below (which depends on odoc, with-doc). Without these flags, lint
88113
# fails on missing alcotest before it ever reaches the doc step.
89-
run: opam install . --deps-only --with-test --with-doc
114+
run: opam install . --deps-only --with-test --with-doc --yes
90115
- name: Build
91116
run: opam exec -- dune build
92117
- name: Lint with odoc
@@ -97,17 +122,21 @@ jobs:
97122
# §"Bench standards". Does NOT block merge. Promotion to a
98123
# ratcheted gate requires a calibrated baseline first.
99124
runs-on: ubuntu-latest
100-
timeout-minutes: 10
125+
timeout-minutes: 25
101126

102127
steps:
103128
- name: Checkout code
104-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
105-
- name: Set up OCaml
106-
uses: ocaml/setup-ocaml@e32b06a3e831ff2fbc6f08cf35be2085e3918014 # v3
107-
with:
108-
ocaml-compiler: "5.1"
129+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
130+
- name: Set up OCaml toolchain (self-hosted; replaces ocaml/setup-ocaml)
131+
run: |
132+
sudo apt-get update
133+
sudo apt-get install -y --no-install-recommends opam ocaml
134+
opam init --bare --disable-sandboxing --yes
135+
opam switch create . ocaml-system --no-install --yes \
136+
|| opam switch create . ocaml-base-compiler.4.14.2 --no-install --yes
137+
opam exec -- ocaml -version
109138
- name: Install dependencies
110-
run: opam install . --deps-only --with-test --with-doc
139+
run: opam install . --deps-only --with-test --with-doc --yes
111140
- name: Build bench targets
112141
run: opam exec -- dune build @bench --force
113142
continue-on-error: true
@@ -133,7 +162,7 @@ jobs:
133162
} >> "$GITHUB_STEP_SUMMARY"
134163
- name: Upload bench log
135164
if: always()
136-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
165+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v4
137166
with:
138167
name: bench-output
139168
path: bench-output.log
@@ -143,17 +172,21 @@ jobs:
143172
# docs/standards/TESTING.adoc §"Coverage (visibility-only)".
144173
# No merge-blocking floor today.
145174
runs-on: ubuntu-latest
146-
timeout-minutes: 10
175+
timeout-minutes: 25
147176

148177
steps:
149178
- name: Checkout code
150-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
151-
- name: Set up OCaml
152-
uses: ocaml/setup-ocaml@e32b06a3e831ff2fbc6f08cf35be2085e3918014 # v3
153-
with:
154-
ocaml-compiler: "5.1"
179+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
180+
- name: Set up OCaml toolchain (self-hosted; replaces ocaml/setup-ocaml)
181+
run: |
182+
sudo apt-get update
183+
sudo apt-get install -y --no-install-recommends opam ocaml
184+
opam init --bare --disable-sandboxing --yes
185+
opam switch create . ocaml-system --no-install --yes \
186+
|| opam switch create . ocaml-base-compiler.4.14.2 --no-install --yes
187+
opam exec -- ocaml -version
155188
- name: Install dependencies
156-
run: opam install . --deps-only --with-test --with-doc
189+
run: opam install . --deps-only --with-test --with-doc --yes
157190
- name: Run tests with bisect_ppx instrumentation
158191
run: |
159192
opam exec -- dune runtest --force --instrument-with bisect_ppx
@@ -178,7 +211,7 @@ jobs:
178211
} >> "$GITHUB_STEP_SUMMARY"
179212
- name: Upload coverage HTML
180213
if: always()
181-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
214+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v4
182215
with:
183216
name: coverage-html
184217
path: _coverage
@@ -203,7 +236,7 @@ jobs:
203236

204237
steps:
205238
- name: Checkout code
206-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
239+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
207240
- name: Set up Node.js
208241
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v4
209242
with:
@@ -248,7 +281,7 @@ jobs:
248281

249282
steps:
250283
- name: Checkout code
251-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
284+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
252285
- name: Set up Node.js
253286
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v4
254287
with:

.github/workflows/codeql.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
build-mode: none
3333
steps:
3434
- name: Checkout
35-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
35+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
3636
- name: Initialize CodeQL
3737
uses: github/codeql-action/init@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v3.28.1
3838
with:

.github/workflows/governance.yml

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
1+
# SPDX-License-Identifier: MPL-2.0
2+
#
3+
# Standalone governance gate. Previously a thin caller of
4+
# `hyperpolymath/standards/.github/workflows/governance-reusable.yml@main`;
5+
# that cross-repo dependency (a) coupled this repo's CI to another repo's
6+
# moving `@main` and (b) startup-failed because a `concurrency:` block in a
7+
# reusable-workflow caller, when the reusable also declares concurrency on the
8+
# same key, is rejected at run-creation (the BP008 class — see
9+
# spark-theatre-gate.yml's note). This self-contained version runs the repo's
10+
# own conservative, delta-aware checks (tools/ci/governance-standalone.sh) and
11+
# is a normal workflow, so the concurrency block is safe to keep.
212
name: Governance
3-
413
on:
514
push:
615
branches: [main, master]
716
pull_request:
8-
branches: [main, master]
917
workflow_dispatch:
10-
18+
concurrency:
19+
group: ${{ github.workflow }}-${{ github.ref }}
20+
cancel-in-progress: true
1121
permissions:
1222
contents: read
13-
1423
jobs:
1524
governance:
16-
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910
25+
runs-on: ubuntu-latest
26+
timeout-minutes: 5
27+
steps:
28+
- name: Checkout code
29+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
30+
with:
31+
fetch-depth: 0
32+
- name: Fetch base ref (DOC-FORMAT delta)
33+
if: github.event_name == 'pull_request'
34+
run: git fetch --no-tags origin "+refs/heads/${GITHUB_BASE_REF}:refs/remotes/origin/${GITHUB_BASE_REF}"
35+
- name: Run governance gate
36+
env:
37+
GITHUB_BASE_REF: ${{ github.base_ref }}
38+
run: ./tools/ci/governance-standalone.sh

.github/workflows/hypatia-scan.yml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
# SPDX-License-Identifier: PMPL-1.0-or-later
2-
name: Hypatia Security Scan
1+
# SPDX-License-Identifier: MPL-2.0
2+
# Thin wrapper around hyperpolymath/standards hypatia-scan-reusable.yml.
3+
# See standards#191 for the reusable's purpose and design.
34

5+
name: Hypatia Security Scan
46
on:
57
push:
68
branches: [main, master, develop]
@@ -9,11 +11,15 @@ on:
911
schedule:
1012
- cron: '0 0 * * 0'
1113
workflow_dispatch:
12-
14+
# Estate guardrail: cancel superseded runs so re-pushes don't pile up.
15+
concurrency:
16+
group: ${{ github.workflow }}-${{ github.ref }}
17+
cancel-in-progress: true
1318
permissions:
1419
contents: read
15-
security-events: read
16-
20+
security-events: write
21+
pull-requests: write
1722
jobs:
18-
scan:
19-
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@5a93d9d57cc04de4002d6d0ecd336fc7a8698910
23+
hypatia:
24+
uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@5eb28d7d8790d5389b7b6a5233fe6265a775e3d0
25+
secrets: inherit

.github/workflows/panic-attack.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
timeout-minutes: 10
3232
steps:
3333
- name: Checkout
34-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
34+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
3535
with:
3636
persist-credentials: false
3737
- name: Install Rust toolchain (stable)

.github/workflows/publish-jsr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
runs-on: ubuntu-latest
4040
timeout-minutes: 10
4141
steps:
42-
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10
42+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
4343
- uses: denoland/setup-deno@v2
4444
with:
4545
deno-version: v2.x

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
timeout-minutes: 10
3434
steps:
3535
- name: Checkout code
36-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
36+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
3737
- name: Create the release (idempotent)
3838
env:
3939
GH_TOKEN: ${{ github.token }}
@@ -60,7 +60,7 @@ jobs:
6060
timeout-minutes: 10
6161
steps:
6262
- name: Checkout code
63-
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
63+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
6464
- name: Set up OCaml
6565
uses: ocaml/setup-ocaml@e32b06a3e831ff2fbc6f08cf35be2085e3918014 # v3
6666
with:

0 commit comments

Comments
 (0)