tsc -p . (as CI runs it) left out test/*.ts: the authenticator, the fcgiwrap stand-in, the code search benchmark, the search phrase checker and the HTTP client the scenarios run. They are in its include now. The only error it found: test/authenticator.ts encoded an untyped new Map() as the attestation's empty attStmt, which the Map it sits in doesn't accept; it is a Map<string, never> now, the same empty map.
- commit
- 0a05b713b00bb453003962e1e2b1bc59206773fb
- parent
- e28b6f339e2cff74247745d2732ece5a0239c196
- author
- cat <admin@dev.site>
- ci
- ✓ passed in 76s, signed by cat
- kind
- build risk score 0.8 of 3, Jev's estimate
- review
- #5 Pass the scenarios in the container, as root
ci attestation
forge-attestation 1 type ci commit 0a05b713b00bb453003962e1e2b1bc59206773fb tree f29857a2b74d7073b4fc4425ddfb9c4f0fad2460 script .forge/ci e6f038ae810b87f90a4be115a762a9c91dd76a01 result pass exit 0 started 2026-10-18T23:06:49Z duration 76s runner (not shown here; refs/notes/ci has it) system Darwin 25.5.0 arm64 env host log sha256:dfa14c2cce7f93075f3ea2c41456543a5a7a5662e38b08054f0ddb0de335f920 240 lines |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |fb99730 running .forge/ci: greet.sh: say what it is | | sh: /bin/sh | | ok greet |fb99730 pass in 0s, signed |pushed main |remote: review #4: /dami/greet/reviews/4/ |pushed wip/i18n |646d717 running .forge/ci: wave at the world | | sh: /bin/sh | | FAIL greet : got 'hello, world o/', want 'hello, world' |646d717 fail in 0s, signed |forge: 1 commit(s) did not pass |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |cf080d0 running .forge/ci: update the test for the wave | | sh: /bin/sh | | ok greet |cf080d0 pass in 0s, signed |remote: review #6: /dami/greet/reviews/6/ |pushed ana/wave |warning: You appear to have cloned an empty repository. |site home: deployed bd2e344 -> /sites/ana/dotfiles/home/ |created ana/notes |remote: review #1: /ana/notes/reviews/1/ |pushed ana/todo |landing #1 A todo list: ana/todo -> main |ff6c001 running .forge/ci: web, server and Python versions of greet | | sh: /bin/sh | | ok greet |ff6c001 pass in 0s, signed |pushed main |f6d9547 running .forge/ci: messages: notes for the later regions | | sh: /bin/sh | | ok greet |f6d9547 pass in 0s, signed |remote: review #7: /dami/greet/reviews/7/ |pushed dami/regions |created dami/forge |warning: You appear to have cloned an empty repository. |site guide: deployed 4ffbd1f -> /sites/dami/forge/guide/ |(node:92952) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built ana/dotfiles in 0s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:93076) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built ana/notes in 1s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:93213) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built dami/forge in 0s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:93343) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built dami/greet in 1s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |(node:94020) ExperimentalWarning: stripTypeScriptTypes is an experimental feature and might change at any time |(Use `node --trace-warnings ...` to show where the warning was created) |built - in 1s -> /Users/dami/Library/Caches/forge/ci/35f7a65d0235/demo/root/.forge/www |226 of 226 pages render the same without 11ty |guide: 4 files, links ok |ok
Signature: good, cat
| M | test/ | 2 | +- |
| M | tsconfig.json | 2 | +- |
@@ -101,7 +101,7 @@ if (mode === 'enroll' && rest.length === 2) {
101101 len.writeUInt16BE(id.length);102102 const authData = Buffer.concat([sha256(rpOverride ?? o.rp.id), Buffer.from([flags(true)]), u32(0), Buffer.alloc(16), len, id, cose]);103103 const clientDataJSON = Buffer.from(JSON.stringify({ type: 'webauthn.create', challenge: o.challenge, origin: clientOrigin, crossOrigin: false }));104- const attestationObject = isoCBOR.encode(new Map<string, string | Map<string, never> | Uint8Array>([['fmt', 'none'], ['attStmt', new Map()], ['authData', authData]]));104+ const attestationObject = isoCBOR.encode(new Map<string, string | Map<string, never> | Uint8Array>([['fmt', 'none'], ['attStmt', new Map<string, never>()], ['authData', authData]]));105105 const response = {106106 id: b64(id), rawId: b64(id), type: 'public-key', authenticatorAttachment: 'platform', clientExtensionResults: {},107107 response: { clientDataJSON: b64(clientDataJSON), attestationObject: b64(attestationObject), transports: ['internal'] },