forge site deploy sets FORGE_SITE_URL, and the absolute links in llms.txt now use it; without it they still point at GitHub Pages. Every other link on the site is relative, so it works under any path. .forge/sites declares the site so it deploys to https://pages.src.rest/sites/cat/nobel/site/.
- commit
- d251df52d0f4244fbd3392d51f65abe5d4f3fbd7
- parent
- 8d46caab10a71467aa4618edbe0ab09c7652352d
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 35s, signed by cat
ci attestation
forge-attestation 1
type ci
commit d251df52d0f4244fbd3392d51f65abe5d4f3fbd7
tree 344fdc3f958edda31d08107dcd37f3a2aa3fce0f
script .forge/ci 636eb49ec97b86ff6e331b1f4543b958519cc728
result pass
exit 0
started 2026-10-17T22:57:13Z
duration 35s
runner (not shown here; refs/notes/ci has it)
system Darwin 25.5.0 arm64
env host
log sha256:70dc5ef02f985848db9ee953f4f84e0d6e2e6aed63b1bbbc3a3801ae01f73e4b 195 lines
|running 1 test from ./test/lanthanides.test.js
|lanthanides: praseodymium presets, cerium styles ...
|------- post-test output -------
|nobel: http://localhost:57865/demo/
|----- post-test output end -----
| an empty npr-card gets exactly the documented markup ... ok (4ms)
| hand-writing markup() gives the same result as the preset ... ok (52ms)
| a card with hand-written children is left alone ... ok (11ms)
| npr-avatar shows the identicon before a picture ... ok (5ms)
| a published kind 0 fills cards, chips and avatars ... ok (43ms)
| after reload radon loads the profile from the relay ... ok (74ms)
| a broken picture falls back to the identicon ... ok (304ms)
| npr-copy copies and toggles npr-copied ... ok (1s)
| cerium injects one layered, zero-specificity style ... ok (3ms)
| page CSS overrides a themed property ... ok (1ms)
| nce-bare skips the style but keeps cerium.css ... ok (56ms)
|lanthanides: praseodymium presets, cerium styles ... ok (2s)
|running 1 test from ./test/lithium.test.js
|lithium reconciles with bindws negentropy ... ignored (0ms)
|running 0 tests from ./test/live.test.js
|running 3 tests from ./test/mercury.test.js
|mercury: NIP-98 requests validate with nostr-tools ...
| post JSON: u, method, payload match; nostr-tools' JSON payload check passes ... ok (33ms)
| get puts the body in the signed query string and has no payload ... ok (28ms)
| string, Blob, bytes, URLSearchParams and FormData bodies hash the bytes sent ... ok (72ms)
| fetch returns the Response; verbs throw on errors with status ... ok (28ms)
| nhy:config can swap the signer; cancelling nhg:sign aborts and fires nhg:error ... ok (18ms)
| Blossom upload, media, list and remove ... ok (75ms)
|mercury: NIP-98 requests validate with nostr-tools ... ok (257ms)
|mercury: fixi requests under nhg-sign carry NIP-98 ...
| a POST button signs its multipart body ... ok (104ms)
| a PUT form signs, with UTF-8 fields ... ok (432ms)
| nhg-sign on an ancestor signs a GET with the query in u ... ok (416ms)
| without nhg-sign the request is not signed ... ok (417ms)
| Blossom upload from the page ... ok (14ms)
|mercury: fixi requests under nhg-sign carry NIP-98 ... ok (1s)
|mercury: tinyrelay NIP-86 and Blossom ... ignored (0ms)
|running 4 tests from ./test/neon.test.js
|npub, nsec and note match nostr-tools ... ok (1ms)
|nprofile, nevent and naddr cross-decode with nostr-tools ... ok (1ms)
|decode rejects bad checksums ... ok (427µs)
|rich escapes and links ... ok (449µs)
|running 1 test from ./test/oganesson.test.js
|oganesson: presence, typing, cursors, nothing stored ...
|------- post-test output -------
|nobel: http://localhost:57912/demo/
|----- post-test output end -----
| each sees the other present at once, not themselves ... ok (928ms)
| a status change replaces the entry and fills {status} ... ok (71ms)
| typing shows, refreshes in place, and stops when emptied ... ok (3s)
| typing expires after its 5s ttl ... ok (7s)
| cursors carry {x} and {y} on the custom kind ... ok (133ms)
| a hidden page goes offline at once and returns when visible ... ok (70ms)
| argon stores none of it ... ok (17ms)
|oganesson: presence, typing, cursors, nothing stored ... ok (12s)
|
|ok | 34 passed (61 steps) | 0 failed | 3 ignored (34s)
|
|Task bundle deno run -A scripts/bundle.ts
|dist/nobel.js 56866 raw | dist/nobel.min.js 41791 min, 15495 br
Signature: good, cat
| A | .forge/ | 2 | ++ |
| M | scripts/ | 4 | +++- |
@@ -6,7 +6,9 @@ import { copy } from "jsr:@std/fs@1/copy";
66 import { marked } from "npm:marked@15";77 import { groups, libs, prefix } from "./libs.ts";88 9-const SITE = "https://felinestatemachine.github.io/nobel/";9+// Absolute links (llms.txt) point at GitHub Pages, or wherever `forge site deploy`10+// serves the site, which it names in FORGE_SITE_URL. Every other link is relative.11+const SITE = Deno.env.get("FORGE_SITE_URL") || "https://felinestatemachine.github.io/nobel/";1012 const root = new URL("../", import.meta.url), out = new URL("_site/", root);1113 const kb = (n: number) => (n / 1024).toFixed(1);1214 const read = (p: string) => Deno.readTextFile(new URL(p, root));