signature: public RSA verification (PKCS #1 v1.5, PSS) in std/signature (step 1 of gap 6) #110

Closed
opened 2026-10-05 21:07:21 +00:00 by orion · 19 comments
Collaborator

Goal

Gap 6 of FIRST-PARTY.md asks for RSA and ECDSA in std/signature. ECDSA P-256 verification (ES256) is already there (#225). What is missing for JWT RS256/PS256 and OpenID Connect is a public RSA verifier: tools/registry/src/rsa.trb holds a private one (RSASSA-PKCS1-v1_5 with SHA-256, Montgomery over 16-bit limbs). This issue is step 1 of gap 6: make that verifier a public part of std/signature, add RSASSA-PSS, and move the registry onto it.

Out of scope here, filed just in time when they start (see the decision comment): RSA-OAEP encryption (caching_sha2_password of torb/mysql, which is not built yet and requires TLS until then) and ECDSA signing (needs RFC 6979 and constant-time scalar arithmetic).

Design record points

  • FIRST-PARTY.md gap 6 (std/signature) and gap 10 (torb/jwt, torb/oauth: "HMAC, RSA and ECDSA verification in std/signature").
  • RELEASE.md section 7.14 / the registry's trusted-publishing row (RS256 verified in TorbScript, "no new native, both back ends compute the same bits"): stays true.
  • #146 (methods over free functions) and the existing shape of std/signature (P256PublicKey, SignatureError, factories that validate, with TryFrom<..., SignatureError>).

Scope

Two Conventional Commits in one PR:

  1. feat(signature): RsaPublicKey with RSASSA-PKCS1-v1_5 verification - move the arithmetic of tools/registry/src/rsa.trb to std/signature/src/rsa.trb (limb helpers may share ./montgomery where the shapes fit, otherwise stay private), expose RsaPublicKey (from modulus and exponent bytes, i.e. a JWK's n and e, via a factory that returns Result<RsaPublicKey, SignatureError>) with verifiesPkcs1Sha256(message, signature): Bool; tools/registry imports it from std/signature, its private rsa.trb is deleted.
  2. feat(signature): RSASSA-PSS verification (PS256) - verifiesPssSha256(message, signature): Bool (RFC 8017 section 8.1.2 / 9.1.2, MGF1 with SHA-256, salt length 32 as JWA fixes it for PS256).

Policy carried over from the private version: keys under 2048 bits, even moduli, an exponent below 3 or even, a signature of the wrong length or not below the modulus are refused (false; the factory rejects what it can); the encoded message is compared whole, no lenient parser. Variable time is fine (public operation only) and is stated in the doc comment as in p256.trb.

Acceptance criteria

  • std/signature exports RsaPublicKey with verifiesPkcs1Sha256 and verifiesPssSha256 (doc comments with example and "Pitfalls", torb doc --check clean).
  • Tests in std/signature/tests/rsa.test.trb: valid RS256 and PS256 vectors (2048 and 3072-bit keys, generated outside the repo with a standard tool and checked in as hex), plus Wycheproof-style negatives: wrong message, flipped bit in signature, signature >= modulus, wrong length, wrong DigestInfo/padding (BER-lenient and trailing garbage forms), PSS with wrong salt length and bad trailer byte, 1024-bit and even modulus refused.
  • Same results in VM and native back ends (the existing test run covers both; no back-end specific code).
  • tools/registry verifies RS256 through std/signature; its JWT tests still pass unchanged and tools/registry/src/rsa.trb is gone.
  • FIRST-PARTY.md gap 6 marked "partly done": RSA PKCS #1 v1.5 and PSS verification built, ECDSA P-256 verification built (#225); OAEP and ECDSA signing still open with the reason above. skills/ regenerated if docs changed.
  • sh tools/gates.sh a green in forge CI.

Seed impact

None expected: .trb only in std/signature and tools/registry; no syntax change, no new native, no driver flag, no std name looked up by string by the compiler. If the move shows otherwise, stop and comment.

Size

One PR, two commits (above). Pure TorbScript; the performance of the 2048-bit modular exponentiation in the VM is already measured by the registry in production and unchanged by a move.

Dependencies

None open.

## Goal Gap 6 of [FIRST-PARTY.md](https://git.torb.dev/torbscript/language/src/branch/main/docs/design/FIRST-PARTY.md) asks for RSA and ECDSA in `std/signature`. ECDSA P-256 verification (ES256) is already there (#225). What is missing for JWT `RS256`/`PS256` and OpenID Connect is a public RSA verifier: `tools/registry/src/rsa.trb` holds a private one (RSASSA-PKCS1-v1_5 with SHA-256, Montgomery over 16-bit limbs). This issue is step 1 of gap 6: make that verifier a public part of `std/signature`, add RSASSA-PSS, and move the registry onto it. Out of scope here, filed just in time when they start (see the decision comment): RSA-OAEP encryption (`caching_sha2_password` of `torb/mysql`, which is not built yet and requires TLS until then) and ECDSA signing (needs RFC 6979 and constant-time scalar arithmetic). ## Design record points - FIRST-PARTY.md gap 6 (`std/signature`) and gap 10 (`torb/jwt`, `torb/oauth`: "HMAC, RSA and ECDSA verification in `std/signature`"). - RELEASE.md section 7.14 / the registry's trusted-publishing row (`RS256` verified in TorbScript, "no new native, both back ends compute the same bits"): stays true. - #146 (methods over free functions) and the existing shape of `std/signature` (`P256PublicKey`, `SignatureError`, factories that validate, `with TryFrom<..., SignatureError>`). ## Scope Two Conventional Commits in one PR: 1. `feat(signature): RsaPublicKey with RSASSA-PKCS1-v1_5 verification` - move the arithmetic of `tools/registry/src/rsa.trb` to `std/signature/src/rsa.trb` (limb helpers may share `./montgomery` where the shapes fit, otherwise stay private), expose `RsaPublicKey` (from modulus and exponent bytes, i.e. a JWK's `n` and `e`, via a factory that returns `Result<RsaPublicKey, SignatureError>`) with `verifiesPkcs1Sha256(message, signature): Bool`; `tools/registry` imports it from `std/signature`, its private `rsa.trb` is deleted. 2. `feat(signature): RSASSA-PSS verification (PS256)` - `verifiesPssSha256(message, signature): Bool` (RFC 8017 section 8.1.2 / 9.1.2, MGF1 with SHA-256, salt length 32 as JWA fixes it for PS256). Policy carried over from the private version: keys under 2048 bits, even moduli, an exponent below 3 or even, a signature of the wrong length or not below the modulus are refused (`false`; the factory rejects what it can); the encoded message is compared whole, no lenient parser. Variable time is fine (public operation only) and is stated in the doc comment as in `p256.trb`. ## Acceptance criteria - [ ] `std/signature` exports `RsaPublicKey` with `verifiesPkcs1Sha256` and `verifiesPssSha256` (doc comments with example and "Pitfalls", `torb doc --check` clean). - [ ] Tests in `std/signature/tests/rsa.test.trb`: valid RS256 and PS256 vectors (2048 and 3072-bit keys, generated outside the repo with a standard tool and checked in as hex), plus Wycheproof-style negatives: wrong message, flipped bit in signature, signature >= modulus, wrong length, wrong DigestInfo/padding (BER-lenient and trailing garbage forms), PSS with wrong salt length and bad trailer byte, 1024-bit and even modulus refused. - [ ] Same results in VM and native back ends (the existing test run covers both; no back-end specific code). - [ ] `tools/registry` verifies RS256 through `std/signature`; its JWT tests still pass unchanged and `tools/registry/src/rsa.trb` is gone. - [ ] FIRST-PARTY.md gap 6 marked "partly done": RSA PKCS #1 v1.5 and PSS verification built, ECDSA P-256 verification built (#225); OAEP and ECDSA signing still open with the reason above. `skills/` regenerated if docs changed. - [ ] `sh tools/gates.sh a` green in forge CI. ## Seed impact None expected: `.trb` only in `std/signature` and `tools/registry`; no syntax change, no new native, no driver flag, no std name looked up by string by the compiler. If the move shows otherwise, stop and comment. ## Size One PR, two commits (above). Pure TorbScript; the performance of the 2048-bit modular exponentiation in the VM is already measured by the registry in production and unchanged by a move. ## Dependencies None open.
Author
Collaborator

[loop:torbscript] intake: in scope (author orion, label loop), source FIRST-PARTY.md gap 6, not a duplicate. No dependencies; crypto work, refine must settle the algorithm set and test vectors. next: waiting (refine queued, ready buffer full) until 2026-10-10T04:00:00Z

[loop:torbscript] intake: in scope (author orion, label loop), source FIRST-PARTY.md gap 6, not a duplicate. No dependencies; crypto work, refine must settle the algorithm set and test vectors. next: waiting (refine queued, ready buffer full) until 2026-10-10T04:00:00Z
Author
Collaborator

[loop:torbscript] intake: unchanged. Refine is queued behind the in-progress refines (#227, #230), ready buffer is being filled by those. next: waiting (refine queued, ready buffer) until 2026-10-10T04:00:00Z

[loop:torbscript] intake: unchanged. Refine is queued behind the in-progress refines (#227, #230), ready buffer is being filled by those. next: waiting (refine queued, ready buffer) until 2026-10-10T04:00:00Z
Author
Collaborator

[loop:torbscript] claim refine by session:loop-torbscript-20261026 until 2026-10-26T02:30:00Z

[loop:torbscript] claim refine by session:loop-torbscript-20261026 until 2026-10-26T02:30:00Z
orion changed title from signature: RSA and ECDSA to signature: public RSA verification (PKCS #1 v1.5, PSS) in std/signature (step 1 of gap 6) 2026-10-25 23:48:45 +00:00
Author
Collaborator

[loop:torbscript] decided by the loop: gap 6 is split. ECDSA P-256 verification already exists (#225), so the open work is RSA. Step 1 (this issue, narrowed) = move the registry's private RS256 verifier into std/signature as RsaPublicKey and add PSS (PS256): 2 commits, std and registry .trb only, no seed impact. Left out and filed just in time when they start: RSA-OAEP encryption (only consumer is torb/mysql, not built, TLS required until then) and ECDSA signing (RFC 6979 plus constant-time scalar maths, no consumer yet). SHA-256 only (what JWA RS256/PS256 use); RS384/RS512 wait for a consumer and SHA-384 in std/digest. API as methods on the key (verifiesPkcs1Sha256, verifiesPssSha256), following #146 and P256PublicKey; PSS salt length 32 as JWA fixes it. No owner question: nothing public, costly or product-directional.

[loop:torbscript] decided by the loop: gap 6 is split. ECDSA P-256 verification already exists (#225), so the open work is RSA. Step 1 (this issue, narrowed) = move the registry's private RS256 verifier into std/signature as `RsaPublicKey` and add PSS (PS256): 2 commits, std and registry `.trb` only, no seed impact. Left out and filed just in time when they start: RSA-OAEP encryption (only consumer is `torb/mysql`, not built, TLS required until then) and ECDSA signing (RFC 6979 plus constant-time scalar maths, no consumer yet). SHA-256 only (what JWA RS256/PS256 use); RS384/RS512 wait for a consumer and SHA-384 in std/digest. API as methods on the key (`verifiesPkcs1Sha256`, `verifiesPssSha256`), following #146 and `P256PublicKey`; PSS salt length 32 as JWA fixes it. No owner question: nothing public, costly or product-directional.
Author
Collaborator

[loop:torbscript] refine: issue rewritten (goal, acceptance criteria, design record points, seed impact none, size one PR / two commits), duplicates checked (no other open issue on RSA/ECDSA/PSS/OAEP), no open dependency; label ready set. ~60k tokens. next: ready

[loop:torbscript] refine: issue rewritten (goal, acceptance criteria, design record points, seed impact none, size one PR / two commits), duplicates checked (no other open issue on RSA/ECDSA/PSS/OAEP), no open dependency; label `ready` set. ~60k tokens. next: ready
Author
Collaborator

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z

[loop:torbscript] claim implement by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z
Author
Collaborator

[loop:torbscript] implement: checkpoint, context budget reached. PR #489 (branch loop/110-rsa-public-key, commit e0d0ab6d, no CI run yet), ~110k tokens, next: waiting (continuation worker).

Done: std/signature/src/rsa.trb (RsaPublicKey.fromComponents, verifiesPkcs1Sha256, verifiesPssSha256 incl. MGF1; registry arithmetic moved), SignatureError.NotAnRsaKey, lib.trb export, tools/registry oidc.trb/webauthn.trb/trusted-publishing test moved onto std/signature, registry rsa.trb deleted, FIRST-PARTY gap 6 + RELEASE.md + registry README updated.

Not done: (1) nothing has been compiled or run yet: first run torb format --check and one quick test locally if a torb binary exists, else a CI run; likely syntax risks in rsa.trb: const block = match ... { None => return false }, encoded = block[1..length] slices, database[0] = ... on Bytes, .ok().map({...}) ?? false in oidc.trb. (2) std/signature/tests/rsa.test.trb with RS256/PS256 vectors (2048 and 3072 bit, generate with openssl, hex) and the Wycheproof-style negatives from the issue. (3) split into the two commits of the plan (PSS into its own commit, e.g. by interactive rebase of e0d0ab6d), run tools/check-commits.sh. (4) torb doc --check, regenerate skills/ if docs changed, add Closes #110 to the PR body, ci-wait.sh until sh tools/gates.sh a is green, request Argus.

[loop:torbscript] implement: checkpoint, context budget reached. PR https://git.torb.dev/torbscript/language/pulls/489 (branch loop/110-rsa-public-key, commit e0d0ab6d, no CI run yet), ~110k tokens, next: waiting (continuation worker). Done: std/signature/src/rsa.trb (RsaPublicKey.fromComponents, verifiesPkcs1Sha256, verifiesPssSha256 incl. MGF1; registry arithmetic moved), SignatureError.NotAnRsaKey, lib.trb export, tools/registry oidc.trb/webauthn.trb/trusted-publishing test moved onto std/signature, registry rsa.trb deleted, FIRST-PARTY gap 6 + RELEASE.md + registry README updated. Not done: (1) nothing has been compiled or run yet: first run `torb format --check` and one quick test locally if a torb binary exists, else a CI run; likely syntax risks in rsa.trb: `const block = match ... { None => return false }`, `encoded = block[1..length]` slices, `database[0] = ...` on Bytes, `.ok().map({...}) ?? false` in oidc.trb. (2) std/signature/tests/rsa.test.trb with RS256/PS256 vectors (2048 and 3072 bit, generate with openssl, hex) and the Wycheproof-style negatives from the issue. (3) split into the two commits of the plan (PSS into its own commit, e.g. by interactive rebase of e0d0ab6d), run tools/check-commits.sh. (4) `torb doc --check`, regenerate skills/ if docs changed, add Closes #110 to the PR body, ci-wait.sh until `sh tools/gates.sh a` is green, request Argus.
Author
Collaborator

[loop:torbscript] collect: implement checkpoint collected (e0d0ab6d on PR #489). Continuation worker 2 of 3 started on the checkpoint steps (compile, rsa.test.trb vectors, PSS split, CI); implement claim kept. next: waiting (continuation worker)

[loop:torbscript] collect: implement checkpoint collected (e0d0ab6d on PR https://git.torb.dev/torbscript/language/pulls/489). Continuation worker 2 of 3 started on the checkpoint steps (compile, rsa.test.trb vectors, PSS split, CI); implement claim kept. next: waiting (continuation worker)
Author
Collaborator

[loop:torbscript] implement: checkpoint (continuation 2), context budget reached. PR #489, branch loop/110-rsa-public-key now at 093b4fe5 (still one commit, force-pushed), no CI run yet, ~100k tokens. next: waiting (continuation worker 3).

Done this round:

  • Compiled with the nightly-20261025 linux-x64 torb from the forge releases, unpacked to a temp dir, with TORB_STD/TORB_RUNTIME pointing at the worktree. That is enough for check/format/VM tests and needs no C compiler.
  • Fixed: None => return false inside a match used as an expression does not parse. verifiesPssSha256 now matches on publicOperation and hands off to a file-private pssMatches(message, block, bitsOfModulus).
  • torb format applied to the touched .trb files. torb check std/signature: 15 files, no problems. torb check tools/registry: 52 files, no problems. The .ok().map({...}) ?? false in oidc.trb is fine.
  • torb test tools/registry/tests/trusted-publishing.test.trb (VM): 30 passed, 0 failed. RS256 now runs through std's RsaPublicKey and still verifies against the Node vectors.

Remaining:

  1. std/signature/tests/rsa.test.trb: RS256 and PS256 vectors for 2048 and 3072-bit keys (openssl, hex), plus the Wycheproof-style negatives from the acceptance criteria. Run the file locally in the VM with the nightly torb, same way as above.
  2. Split PSS (verifiesPssSha256, pssMatches, mgf1Sha256, the PSS docs) into a second Conventional Commit. Run tools/check-commits.sh and torb doc --check, and regenerate skills/ if needed.
  3. Force-push, add Closes #110 to the PR body, ci-wait.sh until gates.sh a is green, request argus.
[loop:torbscript] implement: checkpoint (continuation 2), context budget reached. PR https://git.torb.dev/torbscript/language/pulls/489, branch loop/110-rsa-public-key now at 093b4fe5 (still one commit, force-pushed), no CI run yet, ~100k tokens. next: waiting (continuation worker 3). Done this round: - Compiled with the nightly-20261025 linux-x64 `torb` from the forge releases, unpacked to a temp dir, with `TORB_STD`/`TORB_RUNTIME` pointing at the worktree. That is enough for check/format/VM tests and needs no C compiler. - Fixed: `None => return false` inside a `match` used as an expression does not parse. `verifiesPssSha256` now matches on `publicOperation` and hands off to a file-private `pssMatches(message, block, bitsOfModulus)`. - `torb format` applied to the touched .trb files. `torb check std/signature`: 15 files, no problems. `torb check tools/registry`: 52 files, no problems. The `.ok().map({...}) ?? false` in oidc.trb is fine. - `torb test tools/registry/tests/trusted-publishing.test.trb` (VM): 30 passed, 0 failed. RS256 now runs through std's `RsaPublicKey` and still verifies against the Node vectors. Remaining: 1. std/signature/tests/rsa.test.trb: RS256 and PS256 vectors for 2048 and 3072-bit keys (openssl, hex), plus the Wycheproof-style negatives from the acceptance criteria. Run the file locally in the VM with the nightly torb, same way as above. 2. Split PSS (`verifiesPssSha256`, `pssMatches`, `mgf1Sha256`, the PSS docs) into a second Conventional Commit. Run tools/check-commits.sh and `torb doc --check`, and regenerate skills/ if needed. 3. Force-push, add `Closes #110` to the PR body, ci-wait.sh until `gates.sh a` is green, request argus.
Author
Collaborator

[loop:torbscript] claim implement (continuation 3) by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z

[loop:torbscript] claim implement (continuation 3) by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z
Author
Collaborator

[loop:torbscript] implement: checkpoint (continuation 3), context budget reached. PR #489, branch loop/110-rsa-public-key pushed as 093b4fe5 plus one new commit (test(signature): vectors and negatives; also fixes the factory: a 2041-bit modulus (256 bytes, top byte < 0x80) and an empty exponent were not refused). ~140k tokens. next: waiting (continuation worker 4).

Done: std/signature/tests/rsa.test.trb + rsa-vectors.trb (RS256/PS256 for 2048, 3072 and 2049-bit keys from OpenSSL / python cryptography, hand-built malformed PKCS#1 and PSS blocks, factory refusals). Local run with nightly-20261025 torb (TORB_STD/TORB_RUNTIME on the worktree, VM): 19 passed, 0 failed. torb format applied.

Remaining: (1) split PSS into its own commit: squash 093b4fe5 + the test commit, then commit 1 = RsaPublicKey + PKCS1 (drop verifiesPssSha256, pssMatches, mgf1Sha256, the PS256 group in rsa.test.trb, the ps* arms in rsa-vectors.trb, the PSS words in lib.trb docs and FIRST-PARTY row), commit 2 = feat(signature): RSASSA-PSS verification (PS256). Run tools/check-commits.sh. (2) torb doc --check, regenerate skills/ if needed. (3) force-push with lease to loop/110-* only, add Closes #110 to the PR body. (4) ci-wait.sh until gates.sh a is green, fix red. (5) request Argus. Local torb binary unpacked at /tmp/torb110 (delete at the end; torb check/test takes 2 to 5 minutes per run, run in background). Worktree torbscript-language-110 left in place.

[loop:torbscript] implement: checkpoint (continuation 3), context budget reached. PR https://git.torb.dev/torbscript/language/pulls/489, branch loop/110-rsa-public-key pushed as 093b4fe5 plus one new commit (test(signature): vectors and negatives; also fixes the factory: a 2041-bit modulus (256 bytes, top byte < 0x80) and an empty exponent were not refused). ~140k tokens. next: waiting (continuation worker 4). Done: std/signature/tests/rsa.test.trb + rsa-vectors.trb (RS256/PS256 for 2048, 3072 and 2049-bit keys from OpenSSL / python cryptography, hand-built malformed PKCS#1 and PSS blocks, factory refusals). Local run with nightly-20261025 torb (TORB_STD/TORB_RUNTIME on the worktree, VM): 19 passed, 0 failed. torb format applied. Remaining: (1) split PSS into its own commit: squash 093b4fe5 + the test commit, then commit 1 = RsaPublicKey + PKCS1 (drop verifiesPssSha256, pssMatches, mgf1Sha256, the PS256 group in rsa.test.trb, the ps* arms in rsa-vectors.trb, the PSS words in lib.trb docs and FIRST-PARTY row), commit 2 = feat(signature): RSASSA-PSS verification (PS256). Run tools/check-commits.sh. (2) torb doc --check, regenerate skills/ if needed. (3) force-push with lease to loop/110-* only, add Closes #110 to the PR body. (4) ci-wait.sh until gates.sh a is green, fix red. (5) request Argus. Local torb binary unpacked at /tmp/torb110 (delete at the end; torb check/test takes 2 to 5 minutes per run, run in background). Worktree torbscript-language-110 left in place.
Author
Collaborator

[loop:torbscript] implement: Correction: the push of b5bdc0eb to loop/110-rsa-public-key is now done (the comment above was posted before it succeeded).

[loop:torbscript] implement: Correction: the push of b5bdc0eb to loop/110-rsa-public-key is now done (the comment above was posted before it succeeded).
Author
Collaborator

[loop:torbscript] release implement: the third continuation (the per-item maximum) ended with tests pushed on PR #489 (head b5bdc0eb). The rest is finishing work on the open PR, not new implementation: split PSS into its own second commit, torb doc --check and skills/, force-push with lease, Closes #110 in the PR body, CI until gates.sh a is green, request review. next: fix (one fix worker on the same branch, remainder as listed in the checkpoint above)

[loop:torbscript] release implement: the third continuation (the per-item maximum) ended with tests pushed on PR https://git.torb.dev/torbscript/language/pulls/489 (head b5bdc0eb). The rest is finishing work on the open PR, not new implementation: split PSS into its own second commit, `torb doc --check` and `skills/`, force-push with lease, `Closes #110` in the PR body, CI until `gates.sh a` is green, request review. next: fix (one fix worker on the same branch, remainder as listed in the checkpoint above)
Author
Collaborator

[loop:torbscript] claim fix by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z (finish PR 489)

[loop:torbscript] claim fix by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z (finish PR 489)
Author
Collaborator

[loop:torbscript] implement: PR #489 now two commits (0ac8d497 RsaPublicKey + PKCS1, 9ed4598c PSS), tools/check-commits.sh clean, force-pushed with lease, PR body has Closes #110, Argus already requested. Local checks (nightly torb, VM): rsa tests pass, torb doc --check --no-run std/signature no problems (fixed one example style finding), docs index/skill checks up to date (no skills/ change needed; docs/design has no pdisc frontmatter). CI for 9ed4598c running, ci-wait in flight. next: waiting (CI gates.sh a on 9ed4598c; fix red findings if any)

[loop:torbscript] implement: PR https://git.torb.dev/torbscript/language/pulls/489 now two commits (0ac8d497 RsaPublicKey + PKCS1, 9ed4598c PSS), tools/check-commits.sh clean, force-pushed with lease, PR body has Closes #110, Argus already requested. Local checks (nightly torb, VM): rsa tests pass, `torb doc --check --no-run std/signature` no problems (fixed one example style finding), docs index/skill checks up to date (no skills/ change needed; docs/design has no pdisc frontmatter). CI for 9ed4598c running, ci-wait in flight. next: waiting (CI gates.sh a on 9ed4598c; fix red findings if any)
Author
Collaborator

[loop:torbscript] fix: checkpoint (context budget). PR #489, branch loop/110-rsa-public-key at 48d0f3c2 (two commits: 976ab9a2 RsaPublicKey + PKCS1, 48d0f3c2 PSS; check-commits clean; PR body has Closes #110; Argus already requested). First CI run found only a stale pdisc stamp on tools/registry/README.md: fixed by stamp (folded into commit 1, force-pushed). Local (nightly torb, VM): rsa tests pass, doc --check --no-run std/signature clean, docs index/skill checks current. CI for 48d0f3c2 is queued (all four checks pending ~15 min, runner queue), no verdict yet. Local worktree code/wt/torbscript-language-110, backup branch backup-110-final (local only), torb binary at /tmp/torb110 (delete at the end). next: waiting (forge CI on 48d0f3c2; if red, fix on the same branch, then Argus re-review)

[loop:torbscript] fix: checkpoint (context budget). PR https://git.torb.dev/torbscript/language/pulls/489, branch loop/110-rsa-public-key at 48d0f3c2 (two commits: 976ab9a2 RsaPublicKey + PKCS1, 48d0f3c2 PSS; check-commits clean; PR body has Closes #110; Argus already requested). First CI run found only a stale pdisc stamp on tools/registry/README.md: fixed by stamp (folded into commit 1, force-pushed). Local (nightly torb, VM): rsa tests pass, doc --check --no-run std/signature clean, docs index/skill checks current. CI for 48d0f3c2 is queued (all four checks pending ~15 min, runner queue), no verdict yet. Local worktree code/wt/torbscript-language-110, backup branch backup-110-final (local only), torb binary at /tmp/torb110 (delete at the end). next: waiting (forge CI on 48d0f3c2; if red, fix on the same branch, then Argus re-review)
Author
Collaborator

[loop:torbscript] release fix: the CI follow-up worker timed out; PR 489 head 48d0f3c2 now has red CI checks, next: fix (read the failing jobs on 48d0f3c2, fix on the same branch)

[loop:torbscript] release fix: the CI follow-up worker timed out; PR 489 head 48d0f3c2 now has red CI checks, next: fix (read the failing jobs on 48d0f3c2, fix on the same branch)
Author
Collaborator

[loop:torbscript] claim fix by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z (PR 489 tier A and gates red)

[loop:torbscript] claim fix by session:loop-torbscript-20261026 until 2026-10-26T08:00:00Z (PR 489 tier A and gates red)
Author
Collaborator

[loop:torbscript] fix: both red jobs on 48d0f3c2 had one cause each: torb docs declarations --check (docs/standard-library/signature.md lacked case NotAnRsaKey(reason: String) in the SignatureError block, folded into commit 1) and format --check (std/signature/tests/rsa-vectors.trb match arms indented two spaces too little, folded into both commits). Two-commit structure kept (e6a47f3a RsaPublicKey + PKCS1, PSS on top), tools/check-commits.sh clean, force-pushed with lease, head now 2120578a, Argus review re-requested. Gates not run locally. next: waiting (forge CI run 1824 on 2120578a still queued after 10 min: gates, commit messages, what-the-change-touches pending; when it ends, check gates/tier A: green -> waiting on Argus review, red -> fix again)

[loop:torbscript] fix: both red jobs on 48d0f3c2 had one cause each: `torb docs declarations --check` (docs/standard-library/signature.md lacked `case NotAnRsaKey(reason: String)` in the SignatureError block, folded into commit 1) and `format --check` (std/signature/tests/rsa-vectors.trb match arms indented two spaces too little, folded into both commits). Two-commit structure kept (e6a47f3a RsaPublicKey + PKCS1, PSS on top), tools/check-commits.sh clean, force-pushed with lease, head now 2120578a, Argus review re-requested. Gates not run locally. next: waiting (forge CI run 1824 on 2120578a still queued after 10 min: gates, commit messages, what-the-change-touches pending; when it ends, check gates/tier A: green -> waiting on Argus review, red -> fix again)
argus closed this issue 2026-10-26 07:55:51 +00:00
Sign in to join this conversation.
No labels
loop
ready
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
torbscript/language#110
No description provided.