forge attest runs .forge/ci in a clean worktree of each commit and signs the result into refs/notes/ci; forge push sends it with the branch. It is the README's Verification section in ci.yml's order: npm ci, the check that the checkout came through unmodified, make test, then the browser walk over the committed corpus with Playwright's Chromium. It runs on the Go that go.mod names, as setup-go does in ci.yml. A newer local Go writes export data that depcheck's golang.org/x/tools v0.47.0 cannot read, which fails make test before it has judged anything.
- commit
- dc2196e4898cf3c2b8d02b51ff18dc368134fd60
- parent
- 107f0677205b46a7ec3cbc26c2c8c86acc3cb95e
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 35s, signed by cat
- kind
- build risk score 1.1 of 3, Jev's estimate
ci attestation
forge-attestation 1 type ci commit dc2196e4898cf3c2b8d02b51ff18dc368134fd60 tree 4415fd6494eb42d199b07cbfaa996b468ff639cc script .forge/ci 5f9bd4d9a471ff02456fd690bf9f6ad515b52e30 result pass exit 0 started 2026-10-17T23:15:06Z duration 35s runner (not shown here; refs/notes/ci has it) system Darwin 25.5.0 arm64 env host log sha256:ddc82c395a5fb889e045d7b54e6908db0c5429129f8d3e5488545c03c18fae8f 7416 lines |test/hover.test.ts 184 code 57 prose |test/keys.test.ts 319 code 52 prose |test/lifecycle.test.ts 335 code 84 prose |test/markers.test.ts 298 code 41 prose |test/models.ts 126 code 49 prose |test/pick.test.ts 312 code 70 prose |test/pins.test.ts 206 code 72 prose |test/projection.test.ts 65 code 36 prose |test/pyramid.test.ts 78 code 32 prose |test/raster.test.ts 109 code 48 prose |test/report.test.ts 106 code 25 prose |test/resilience.test.ts 299 code 132 prose |test/scene.test.ts 101 code 12 prose |test/styles.test.ts 448 code 124 prose |test/texture.test.ts 123 code 36 prose |test/viewport.test.ts 343 code 101 prose |test/visibility.test.ts 129 code 22 prose |viewport.ts 346 code 318 prose |world/model.ts 179 code 68 prose |world/visibility.ts 161 code 63 prose | |the seam: 4722 authored lines of code, 3396 of prose (budget 3000) |its tests: 4769 lines of code, 1394 of prose | |::warning::the seam is 1722 lines past its ~3000-line guideline (issue #5 §5.5). This is a warning, not a wall: either the seam has grown a second application inside it, or the budget wants revising in the issue. Both are decisions, and neither is silent. |render lane: the boundary rules, tsc --strict, the seam tests and the line budget all green |go run ./tools/depcheck |depcheck: 4 rules over github.com/FelineStateMachine/atlas github.com/FelineStateMachine/atlas/format/... github.com/FelineStateMachine/atlas/internal/logging/... github.com/FelineStateMachine/atlas/internal/generate/... github.com/FelineStateMachine/atlas/internal/enrich/... github.com/FelineStateMachine/atlas/internal/app/... github.com/FelineStateMachine/atlas/internal/workbench/... github.com/FelineStateMachine/atlas/cmd/atlas/... github.com/FelineStateMachine/atlas/tests/... |npm run --silent seam-build | | dist/app.js 2.4mb ⚠️ | |⚡ Done in 87ms |mkdir -p dist/static |cp render/dist/app.js dist/static/app.js |cp render/dist/app.js static/app.js |go run ./tests/e2e/prep |dist/e2e/bundles/bend-or-20260802-3610a0f10798.atlas |dist/e2e/bundles/mars-20260801-68e141f26b1a.atlas |dist/e2e/bundles/earth-20260803-76633cb323ec.atlas |npx playwright test --config tests/e2e/playwright.config.ts |[WebServer] time=2026-10-17T17:15:38.429-06:00 level=INFO msg="volume serving" op=scan volume=bend-or stamp=3610a0f10798 |[WebServer] time=2026-10-17T17:15:38.429-06:00 level=INFO msg="volume serving" op=scan volume=earth stamp=76633cb323ec |[WebServer] time=2026-10-17T17:15:38.429-06:00 level=INFO msg="volume serving" op=scan volume=mars stamp=68e141f26b1a |[WebServer] time=2026-10-17T17:15:38.429-06:00 level=INFO msg=serving op=serve addr=127.0.0.1:43117 path=dist/e2e/bundles volumes=3 | |Running 10 tests using 1 worker | | ✓ 1 tests/e2e/app.spec.ts:29:3 › the doorways › the root is a doorway to a real world URL (487ms) | ✓ 2 tests/e2e/app.spec.ts:34:3 › the doorways › open names a volume and lands on its world (206ms) | ✓ 3 tests/e2e/app.spec.ts:39:3 › the doorways › the catalog serves every corpus volume (19ms) | ✓ 4 tests/e2e/app.spec.ts:53:3 › the doorways › a volume nobody installed is not found (39ms) | ✓ 5 tests/e2e/app.spec.ts:61:3 › the doorways › the included Earth serves a real raster tile (4ms) | ✓ 6 tests/e2e/app.spec.ts:79:5 › the explorer page › mars arrives arranged (242ms) | ✓ 7 tests/e2e/app.spec.ts:79:5 › the explorer page › bend-or arrives arranged (377ms) | ✓ 8 tests/e2e/app.spec.ts:79:5 › the explorer page › earth arrives arranged (271ms) | ✓ 9 tests/e2e/app.spec.ts:121:3 › the explorer page › a lens is addressed by name and remembered (423ms) | ✓ 10 tests/e2e/app.spec.ts:148:3 › the explorer page › the last volume is where the root door leads (296ms) | | 10 passed (3.7s)
Signature: good, cat
| A | .forge/ | 13 | +++++++++++++ |
@@ -0,0 +1,13 @@
1+2+# CI for src.rest: README.md's Verification, as ci.yml runs it: npm ci, make test3+# (vet, skip-proof Go tests, both TypeScript lanes, depcheck) and make test-e2e.4+set -eu5+# ci.yml installs the Go that go.mod names; depcheck's golang.org/x/tools cannot6+# read the export data of a newer Go, so use that toolchain here too.7+export GOTOOLCHAIN=go$(sed -n 's/^go //p' go.mod)8+export GOFLAGS=-buildvcs=false9+npm ci --ignore-scripts --no-audit --no-fund10+git diff --exit-code11+make test12+npx --no-install playwright install chromium13+make test-e2e