rename/delete gates: sweep #4 corners (quasiquote nesting, defunion v… #127
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: tests | |
| # CI runs the full tiered suite (active + demoted). The CI=true env var | |
| # triggers bin/beagle-test to include the demoted tier. Active failures | |
| # block the build; demoted failures are advisory (logged in the run | |
| # output and surface-debt.md tracks accumulated debt). See | |
| # lab/journal/synthesis/design-principle.md "Test-cadence decomposition". | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install Racket | |
| uses: Bogdanp/setup-racket@v1.14 | |
| with: | |
| architecture: x64 | |
| distribution: full | |
| variant: CS | |
| version: '9.1' | |
| - name: Link beagle packages | |
| run: | | |
| raco pkg install --auto --link \ | |
| beagle-lib/ beagle-test/ beagle/ | |
| - name: Run tiered test suite | |
| env: | |
| CI: 'true' | |
| run: bin/beagle-test | |
| # Byte-stable emit (move 2): the claims->source pretty-printer must be a | |
| # deterministic, LOCAL, comment-preserving, round-trip-preserving formatter — | |
| # the precondition for making claims canonical and text a regenerable lowering. | |
| # Racket-only (no fram/bb), so it runs right after the suite. | |
| - name: Byte-stable emit — fixed-point + locality + comments gate | |
| run: bin/test/byte-stable-emit/run.sh | |
| # Build reproducibility: the same source compiles BYTE-IDENTICALLY every build. | |
| # match's temp was (random ...) -> non-reproducible; now a deterministic counter. | |
| - name: Build reproducibility — deterministic match temps | |
| run: bin/test/build-reproducible/run.sh | |
| # Graph-native repair: beagle-cascade derives its call graph from the Fram | |
| # claim graph (scope-correct), not regex over text. That runs on the Fram | |
| # engine, so we install babashka + check out fram's committed classpath and | |
| # gate the scope-correctness proof (a change to mod_a/helper must NOT blast | |
| # mod_b's same-named helper). This is the load-bearing test for the thesis | |
| # that graph-backed repair beats text-backed repair. | |
| - name: Install babashka (graph-native repair tooling) | |
| run: curl -sL https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash | |
| - name: Checkout fram (the claim engine cascade runs on) | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: tompassarelli/fram | |
| path: .fram | |
| - name: Checkout chartroom (Layer-2 code-intelligence — refers_to resolver) | |
| uses: actions/checkout@v5 | |
| with: | |
| repository: tompassarelli/chartroom | |
| path: .chartroom | |
| - name: Graph-native cascade — scope-correctness gate | |
| run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" bin/test/cascade-graph/run.sh | |
| # Repair pipeline: beagle-repair consumes blame.rkt's semantic suspicions as | |
| # STRUCTURED records, not by regex-scraping the prose SUSPECT line. Gates that | |
| # a suspicion on a validly-named function the prose regex can't parse (e.g. | |
| # `total=`) survives. (Needs racket + bb, both above; no fram.) | |
| - name: Repair pipeline — structured semantic suspicions gate | |
| run: bin/test/repair-semantic/run.sh | |
| # Move 3: code can be claim-canonical. The loop .bclj -> lossless claims -> | |
| # (through a real Fram store) -> claims -> byte-stable .bclj is datum-identical | |
| # through the engine AND recompiles to the IDENTICAL program (modulo srcloc | |
| # debug pointers). Proven over fram/src. Needs racket + bb + fram's out/. | |
| - name: Code as canonical claims — recompile-identity gate | |
| run: CODE_AS_CLAIMS_CORPUS="$GITHUB_WORKSPACE/.fram/src" FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" bin/test/code-as-claims/run.sh | |
| # Scope-correct rename — the COMPLETE engine (chartroom's resolve.clj, refers_to), | |
| # ONE gate across every scope hazard: mod_a/helper renamed but mod_b's untouched | |
| # (collision); a shadowing local untouched (shadowing); every cross-module reader | |
| # renamed (cross-file, fram.cnf/value! -> intern! over fram/src); a collision onto | |
| # an existing binding refused; each renamed tree recompiles. Repair as a graph | |
| # operation, O(1) (edits the def; references follow refers_to). | |
| - name: Scope-correct rename (collision + shadowing + cross-module) gate | |
| run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.chartroom" CODE_AS_CLAIMS_CORPUS="$GITHUB_WORKSPACE/.fram/src" bin/test/code-as-claims/rename.sh | |
| # Delete as a graph op: the no-orphaned-references invariant. A safe delete omits | |
| # the form + its subtree and renumbers siblings (no truncation); a delete that | |
| # would orphan a reference (this module or a consumer) is refused, fail-closed. | |
| - name: Delete as a graph op — no-orphaned-references invariant | |
| run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.chartroom" bin/test/code-as-claims/delete.sh | |
| # NL -> edit authoring layer: prose intent -> a structured edit (data an agent | |
| # emits) -> the engine (rename/delete) -> recompile-gated commit, else fail closed. | |
| - name: NL-to-edit authoring layer — recompile-gated transaction | |
| run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.chartroom" bin/test/code-as-claims/authoring.sh | |
| - name: Show accumulated surface debt | |
| if: always() | |
| run: | | |
| if [ -f lab/surface-debt.md ]; then | |
| head -20 lab/surface-debt.md | |
| fi |