clone

an offline map explorer where each world, from a game map to a city's open data, ships as one .atlas file

ci: make test and make test-e2e run on your machine for src.rest

cat committed dc2196e
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

1 file changed, +13 -0
A.forge/ci13+++++++++++++
A .forge/ci +13 -0