-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (117 loc) · 7.66 KB
/
Copy pathtest.yml
File metadata and controls
137 lines (117 loc) · 7.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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/
# Babashka must be installed BEFORE the tiered suite: conformance.rkt's
# cross-target value-conformance harness uses bb as the real-Clojure ORACLE.
# Without it the oracle silently skips AND the pinned-divergence tests error
# (a missing #f exec path -> system* contract violation). It is also used by
# the graph-native gates further down. (Was installed too late, after the suite.)
- name: Install babashka (CLJ oracle + graph-native repair tooling)
run: curl -sL https://raw.githubusercontent.com/babashka/babashka/master/install | sudo bash
- 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 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. (babashka installed above.)
- name: Checkout fram (the claim engine cascade runs on)
uses: actions/checkout@v5
with:
repository: tompassarelli/fram
path: .fram
# beagle-callgraph RENTS the scope-correct call-graph engine (resolve.clj),
# which was FOLDED into the fram repo at fram/chartroom (beagle source
# code-intelligence, renting fram's public claim+Datalog API). No separate
# chartroom checkout — it ships inside the fram checkout, so CHARTROOM points
# at .fram/chartroom. (The fold is licensed by lockstep cadence + this very
# friction relief; fram's core_code_blind_test guards the seam stays clean.)
- name: Graph-native cascade — scope-correctness gate
run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.fram/chartroom" bin/test/cascade-graph/run.sh
# Reasoning call-graph cross-module completeness: the call graph is derived from the
# converged resolver (refers_to), so qualified cross-module calls (a/f, m/f) resolve
# and the blast radius is NOT silently emptied. Guards the dangerous "0 callers" lie.
- name: Reasoning call-graph — cross-module completeness gate
run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.fram/chartroom" bin/test/callgraph-xmodule/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/.fram/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/.fram/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/.fram/chartroom" bin/test/code-as-claims/authoring.sh
# Graph-native AUTHORING (the dogfood at the root): upsert-form (add/replace a def)
# and set-body are CLAIM operations on the AST-claims, not text patches — scope-correct
# by identity (an authored ref resolves through refers_to), recompile-gated, fail-closed.
- name: Authoring-as-claims — upsert-form + set-body verbs
run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.fram/chartroom" bin/test/code-as-claims/authoring-verbs.sh
# One engine, both pillars, on REAL code: the blast radius (REASON) of fram.cnf/value!
# predicts the cross-module reach of renaming it (REPAIR), and the repaired tree
# recompiles — both derived from the same converged refers_to resolver.
- name: Engine demo — reason + repair consistent on real fram/src
run: FRAM_OUT="$GITHUB_WORKSPACE/.fram/out" CHARTROOM="$GITHUB_WORKSPACE/.fram/chartroom" CODE_AS_CLAIMS_CORPUS="$GITHUB_WORKSPACE/.fram/src" bin/test/engine-demo/run.sh
- name: Show accumulated surface debt
if: always()
run: |
if [ -f lab/surface-debt.md ]; then
head -20 lab/surface-debt.md
fi