Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
140 commits
Select commit Hold shift + click to select a range
335ce60
feat(tbtc/signer): mirror FROST/ROAST Rust signer from tBTC monorepo
mswilkison May 26, 2026
bfd7658
extraction: apply allowlisted-divergence transformations to signer sc…
mswilkison May 26, 2026
551bd42
ci(tbtc-signer): add formal verification workflow (moved from tbtc-v2)
mswilkison May 26, 2026
d1a1424
extraction: fix signer formal-verification CI (chmod + vector path)
mswilkison May 26, 2026
adb6f64
extraction: mirror p2tr-signature-fraud-v0 vector + fix test path
mswilkison May 26, 2026
220cff2
fix(tbtc-signer): harden signer validation and retries
mswilkison May 27, 2026
c12c593
ci(tbtc-signer): update tla tools checksum
mswilkison May 27, 2026
2e61c26
ci(tbtc-signer): add full rust checks
mswilkison May 27, 2026
2930091
fix(tbtc-signer): preserve cached build tx retries
mswilkison May 27, 2026
9cfcde6
fix(tbtc-signer): harden production defaults
mswilkison May 28, 2026
c1e72f5
fix(tbtc-signer): close hardening follow-ups
mswilkison May 28, 2026
506959d
Expose interactive FROST DKG signer ABI
mswilkison Jun 4, 2026
2e0a054
Support Taproot tweaked signer rounds
mswilkison Jun 5, 2026
3a259ec
Support seeded tbtc-signer DKG
mswilkison Jun 5, 2026
4c9c654
Reuse signer rounds across member identifiers
mswilkison Jun 5, 2026
8f5aec7
Harden Taproot signer aggregation
mswilkison Jun 6, 2026
a62cb26
Preserve legacy signer round fingerprints
mswilkison Jun 6, 2026
797417f
Clarify signer exported key boundary
mswilkison Jun 6, 2026
e5b4f16
Stabilize signer round reuse fingerprints
mswilkison Jun 6, 2026
815ea72
Classify malformed DKG seeds as validation errors
mswilkison Jun 6, 2026
64d9d64
Assert signer round retry idempotency
mswilkison Jun 6, 2026
2380c8c
Support Taproot tweaked signer rounds (#4018)
mswilkison Jun 6, 2026
4f775b9
Document interactive FROST nonce contract
mswilkison Jun 6, 2026
57461c3
Zeroize interactive FROST secret buffers
mswilkison Jun 6, 2026
6179a3f
Merge signer mirror updates into interactive FROST ABI
mswilkison Jun 6, 2026
abdae01
Expose interactive FROST DKG signer ABI (#4011)
mswilkison Jun 6, 2026
997ee1b
Pin concrete coordinator vector in order-independence test
mswilkison Jun 10, 2026
ac2d5e8
test(tbtc/signer): pin concrete coordinator vector in order-independe…
mswilkison Jun 11, 2026
299d79e
hardening(tbtc/signer): bind full transcript into round nonces, gate …
mswilkison Jun 11, 2026
80c3db8
unify(tbtc/signer): adopt RFC-21 Annex A coordinator-seed derivation …
mswilkison Jun 11, 2026
5b46db6
deps(tbtc/signer): move frost-secp256k1-tr off the release-candidate …
mswilkison Jun 11, 2026
686ef84
test(tbtc/signer): replay the 600-case cross-language coordinator-shu…
mswilkison Jun 11, 2026
710e59a
fix(tbtc/signer): seed the coordinator shuffle from the padded raw me…
mswilkison Jun 11, 2026
0b1f4db
docs(tbtc/signer): pin v2 nonce-seed encoding invariants in a comment
mswilkison Jun 11, 2026
8afe502
fix(tbtc/signer): bind full PublicKeyPackage into round-nonce seed (v3)
mswilkison Jun 11, 2026
fadbb3c
test(tbtc/signer): replay expanded corpus; document port coverage limits
mswilkison Jun 11, 2026
c5b0176
deps(tbtc/signer): move frost-secp256k1-tr off the rc pin to =3.0.0 f…
mswilkison Jun 11, 2026
f3f0ac4
test(tbtc/signer): replay the 600-case cross-language coordinator-shu…
mswilkison Jun 11, 2026
15a7a3e
unify(tbtc/signer): adopt RFC-21 Annex A coordinator-seed derivation …
mswilkison Jun 11, 2026
d47f009
hardening(tbtc/signer): bind full transcript into round nonces; gate …
mswilkison Jun 11, 2026
99e157c
refactor(tbtc/signer): split 18k-line engine.rs into focused engine/ …
mswilkison Jun 12, 2026
9b41d45
docs(tbtc/signer): review follow-ups for the engine split
mswilkison Jun 12, 2026
97e3bb5
refactor(tbtc/signer): split 18k-line engine.rs into focused engine/ …
mswilkison Jun 12, 2026
71083e7
feat(tbtc/signer): install TBTC_SIGNER_* knobs via init-time FFI config
mswilkison Jun 12, 2026
9226be1
fix(tbtc/signer): validate init config privately before publishing it
mswilkison Jun 12, 2026
5fdb096
fix(tbtc/signer): validate key-provider settings at config init
mswilkison Jun 12, 2026
7beceec
fix(tbtc/signer): validate the provenance gate at config init
mswilkison Jun 12, 2026
f77154b
feat(tbtc/signer): install TBTC_SIGNER_* knobs via init-time FFI conf…
mswilkison Jun 12, 2026
1d83147
docs(tbtc/signer): pin frost dependency audit status; attestation cad…
mswilkison Jun 12, 2026
484c377
docs(tbtc/signer): pin frost dependency audit status; attestation cad…
mswilkison Jun 12, 2026
153b14b
docs(tbtc/signer): record 2026-06-12 architecture decisions in gates doc
mswilkison Jun 12, 2026
54b041e
docs(tbtc/signer): commit the transitional deterministic path for del…
mswilkison Jun 12, 2026
6b74e5d
docs(tbtc/signer): correct the evidence-retention status in the decis…
mswilkison Jun 12, 2026
ee80aef
docs(tbtc/signer): record 2026-06-12 architecture decisions in gates …
mswilkison Jun 12, 2026
82a5ad6
docs(tbtc/signer): record the init-config fatality decision
mswilkison Jun 12, 2026
afde959
docs(tbtc/signer): scope the config-path variable to the service unit
mswilkison Jun 12, 2026
00fc651
docs(tbtc/signer): record the init-config fatality decision (#4048)
mswilkison Jun 12, 2026
36c6f5f
docs(tbtc/signer): Phase 7 interactive-session spec freeze
mswilkison Jun 12, 2026
73dc594
docs(tbtc/signer): close review findings in the Phase 7 spec
mswilkison Jun 12, 2026
5b05e20
docs(tbtc/signer): freeze the Phase 7 spec; record section-10 decisions
mswilkison Jun 12, 2026
5d65712
docs(tbtc/signer): Phase 7 interactive-session spec freeze (#4049)
mswilkison Jun 12, 2026
cde0946
docs(tbtc/signer): Phase 7.0 sidecar transport addendum
mswilkison Jun 12, 2026
769f9d7
feat(tbtc/signer): Phase 7.1 hardened interactive signing session
mswilkison Jun 12, 2026
90cb7c3
fix(tbtc/signer): free interactive session state on completion and re…
mswilkison Jun 12, 2026
36055a3
fix(tbtc/signer): declare the Phase 7.1 interactive FFI in the C header
mswilkison Jun 12, 2026
fb6f33d
fix(tbtc/signer): close firewall bypass, attempt-id casing, abort sweep
mswilkison Jun 13, 2026
03fb6d6
fix(tbtc/signer): apply session lifecycle and quarantine gates on int…
mswilkison Jun 13, 2026
0d739a5
fix(tbtc/signer): re-evaluate signing gates at the Round2 share release
mswilkison Jun 13, 2026
edf7952
fix(tbtc/signer): bound interactive session registry and validate thr…
mswilkison Jun 13, 2026
e45b975
docs(tbtc/signer): scope the sidecar secret-boundary claim to signing
mswilkison Jun 13, 2026
289df95
fix(tbtc/signer): resolve interactive key material from DKG state, no…
mswilkison Jun 13, 2026
4940a9c
fix(tbtc/signer): quarantine the full Round2 subset; reject phantom i…
mswilkison Jun 13, 2026
e4a8734
feat(tbtc/signer): Phase 7.1 hardened interactive signing session (#4…
mswilkison Jun 13, 2026
472dfa6
docs(tbtc/signer): Phase 7.0 sidecar transport addendum (#4050)
mswilkison Jun 13, 2026
f3ab6b5
feat(tbtc/signer): Phase 7.2a InteractiveAggregate with attributable …
mswilkison Jun 13, 2026
24f4eb2
fix(tbtc/signer): defer attributable aggregate blame until inputs are…
mswilkison Jun 13, 2026
312e106
docs(tbtc/signer): align aggregate FFI/API contract with fail-closed …
mswilkison Jun 13, 2026
f5a08a6
fix(tbtc/signer): sweep expired interactive state in InteractiveAggre…
mswilkison Jun 13, 2026
f96a54c
feat(tbtc/signer): Phase 7.2a InteractiveAggregate (tweaked, self-ver…
mswilkison Jun 13, 2026
33f673c
test(tbtc/signer): make the test lock poison-resilient and env hermetic
mswilkison Jun 13, 2026
d474a4f
fix(tbtc/signer): iterate env with vars_os in the test baseline reset
mswilkison Jun 13, 2026
a7c1c33
test(tbtc/signer): poison-resilient test lock + hermetic env baseline…
mswilkison Jun 13, 2026
a9a08c4
docs(tbtc/signer): Phase 7.2b design note - package envelopes + bound…
mswilkison Jun 13, 2026
53b23b4
docs(tbtc/signer): Phase 7.2b open-questions discussion doc for revie…
mswilkison Jun 13, 2026
479b58b
docs(tbtc/signer): resolve 7.2b open questions per Gemini+Codex review
mswilkison Jun 13, 2026
22bfa04
docs(tbtc/signer): fold in Codex re-review P1s + review-consistency f…
mswilkison Jun 13, 2026
4b1bf46
docs(tbtc/signer): pin AllCheaters aggregate + clear stale refs (review)
mswilkison Jun 13, 2026
1546239
docs(tbtc/signer): elected-coordinator + retain-on-reject + tweak-awa…
mswilkison Jun 13, 2026
50bdbac
docs(tbtc/signer): §3 wording — retain on receipt, not on signing
mswilkison Jun 13, 2026
7f78618
docs(tbtc/signer): context-bound share auth + group key in verify-share
mswilkison Jun 13, 2026
94eba3b
docs(tbtc/signer): verify-share selector + durable key source
mswilkison Jun 13, 2026
2b87a25
docs(tbtc/signer): record Phase 7.2b sign-off + durable-retention con…
mswilkison Jun 13, 2026
b74f209
feat(tbtc/signer): Phase 7.2b-1 InteractiveAggregate completion marker
mswilkison Jun 13, 2026
131c642
fix(tbtc/signer): make InteractiveAggregate idempotent (Codex P2)
mswilkison Jun 13, 2026
87b579c
docs(tbtc/signer): Phase 7.2b §6 idempotent aggregate re-emission
mswilkison Jun 13, 2026
c50ac59
fix(tbtc/signer): return persisted signature on aggregate race (Codex…
mswilkison Jun 13, 2026
e2e7fb2
docs(tbtc/signer): resolve Phase 7.2b doc review nits (Codex/Gemini P3)
mswilkison Jun 13, 2026
8bca31e
fix(tbtc/signer): validate completion record against request on re-em…
mswilkison Jun 13, 2026
d115781
docs(tbtc/signer): §6 validate aggregate re-emission against the request
mswilkison Jun 13, 2026
77a16a2
fix(tbtc/signer): reject empty attempt_id in InteractiveAggregate (Co…
mswilkison Jun 13, 2026
a07e8dc
docs(tbtc/signer): drop second stale pending-sign-off note (Codex P3)
mswilkison Jun 13, 2026
2e062ff
refactor(tbtc/signer): simplify 7.2b-1 to completion marker + reject
mswilkison Jun 13, 2026
3d690bb
docs(tbtc/signer): revert 7.2b-1 design to completion marker + reject
mswilkison Jun 13, 2026
9d0accf
docs(tbtc/signer): Phase 7.2b design note — package envelopes + bound…
mswilkison Jun 14, 2026
d57237d
feat(tbtc/signer): Phase 7.2b-1 InteractiveAggregate completion marke…
mswilkison Jun 14, 2026
2d0a37a
feat(tbtc/signer): Phase 7.2b-3 candidate-culprit detection in Intera…
mswilkison Jun 15, 2026
16b0483
fix(tbtc/signer): redact secret material in persisted-struct Debug
piotr-roslaniec Jun 15, 2026
e8e2498
fix(tbtc/signer): stop reflecting raw panic payloads across FFI in pr…
piotr-roslaniec Jun 15, 2026
3d4ddc3
fix(tbtc/signer): canonicalize interactive message_hex casing for ide…
piotr-roslaniec Jun 15, 2026
ad04c42
fix(tbtc/signer): count interactive abort success only on real aborts
piotr-roslaniec Jun 15, 2026
54d0958
refactor(tbtc/signer): assert (not re-test) the differing-attempt inv…
piotr-roslaniec Jun 15, 2026
8cc3071
fix(tbtc/signer): omit absent script_tree_hex in BuildTaprootTxRequest
piotr-roslaniec Jun 15, 2026
13a1e0f
docs(tbtc/signer): fix stale key_package_hex comment in open fingerprint
piotr-roslaniec Jun 15, 2026
fa26cc3
docs(tbtc/signer): document Phase 7 interactive signing endpoints in …
piotr-roslaniec Jun 15, 2026
4867b25
fix(tbtc/signer): use parseable placeholder for sample override trust…
piotr-roslaniec Jun 15, 2026
cbb9d58
docs(tbtc/signer): repoint mirrored doc paths to keep-core layout
piotr-roslaniec Jun 15, 2026
e34291d
docs(tbtc/signer): correct spec-freeze section 4 to match the shipped…
piotr-roslaniec Jun 15, 2026
8d7d661
ci(tbtc/signer): add blocking cargo-deny advisory gate
piotr-roslaniec Jun 15, 2026
bd73bad
test(tbtc/signer): fix env-race flake in interactive FFI roundtrip test
piotr-roslaniec Jun 15, 2026
dde5e79
fix(tbtc/signer): harden admission override replay registry
piotr-roslaniec Jun 15, 2026
65a678e
docs(tbtc/signer): frame the domain tag in roast phase 0 attempt-id f…
piotr-roslaniec Jun 15, 2026
5123dc3
test(tbtc/signer): pin int31n_fast rejection branch against Go math/rand
piotr-roslaniec Jun 15, 2026
ea29834
docs(tbtc/signer): mark TEE/rollout TLA models as planned, not shipped
piotr-roslaniec Jun 15, 2026
3524089
docs(tbtc/signer): clarify crate is unconsumed; add activation re-rev…
piotr-roslaniec Jun 15, 2026
b8407f6
fixup(tbtc/signer): align candidate culprits to u16 member ids + mult…
mswilkison Jun 15, 2026
023b058
Phase 7.2b-3: candidate-culprit detection in InteractiveAggregate (#4…
mswilkison Jun 15, 2026
b8b84dc
docs(tbtc/signer): record D1 exclusion-trust assumption at the activa…
piotr-roslaniec Jun 15, 2026
b0677c3
feat(tbtc/signer): Phase 7.2b-4 engine verify_signature_share FFI (ba…
mswilkison Jun 15, 2026
de93bc4
Fold #4068 review: header prototype + in-band Indeterminate for bad t…
mswilkison Jun 15, 2026
7332303
Fold #4068 review: sweep expired interactive state in verify_signatur…
mswilkison Jun 15, 2026
6af4d14
Fold #4068 review: judge share bytes only after membership context is…
mswilkison Jun 15, 2026
0e6f358
Fold #4068 review: require package membership before blaming malforme…
mswilkison Jun 16, 2026
129830d
Phase 7.2b-4: engine verify_signature_share FFI (backs Go Round2Share…
mswilkison Jun 16, 2026
43b649d
Phase 7.2b-4: tweaked-root (script-path) verify_signature_share equiv…
mswilkison Jun 16, 2026
2bd81fa
Phase 7.2b-4: tweaked-root verify_signature_share equivalence test (#…
mswilkison Jun 16, 2026
d12909a
frost(7.3): engine-side DeriveInteractiveAttemptContext helper
mswilkison Jun 17, 2026
7ad5fa5
frost(7.3): declare derive helper in the C header + clarify threshold…
mswilkison Jun 17, 2026
f87fc77
frost(7.3): reject zero threshold in the derive helper (Codex re-review)
mswilkison Jun 17, 2026
0fdea53
frost(7.3): mirror session-open front-door checks in the derive helper
mswilkison Jun 17, 2026
9fd9845
Phase 7.3: engine-side DeriveInteractiveAttemptContext helper (#4077)
mswilkison Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions .github/workflows/tbtc-signer-formal.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: tBTC Signer Formal Verification

on:
pull_request:
paths:
- pkg/tbtc/signer/**
- .github/workflows/tbtc-signer-formal.yml
schedule:
- cron: "23 5 * * *"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: tbtc-signer-formal-${{ github.ref }}
cancel-in-progress: true

jobs:
signer-rust-checks:
name: Signer Rust checks
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Check formatting
run: cargo fmt --manifest-path pkg/tbtc/signer/Cargo.toml -- --check

- name: Run clippy
run: cargo clippy --manifest-path pkg/tbtc/signer/Cargo.toml --all-targets -- -D warnings

- name: Run signer tests
env:
TBTC_SIGNER_STATE_PATH: /tmp/tbtc-signer-ci-state-${{ github.run_id }}-${{ github.run_attempt }}.json
run: cargo test --manifest-path pkg/tbtc/signer/Cargo.toml

signer-dependency-audit:
name: Signer dependency audit
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Check RustSec advisories
# Blocking gate: a newly-published advisory against any locked
# dependency fails the build. Accepted/unfixable advisories are
# recorded with rationale in pkg/tbtc/signer/deny.toml.
uses: EmbarkStudios/cargo-deny-action@v2
with:
manifest-path: pkg/tbtc/signer/Cargo.toml
command: check advisories

signer-formal-invariants:
name: Signer formal invariants
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
Comment on lines +66 to +67

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/tbtc-signer-formal.yml"
echo "== File exists? =="
ls -l "$FILE"
echo "== Lines 1-120 with numbers =="
nl -ba "$FILE" | sed -n '1,120p'

Repository: threshold-network/keep-core

Length of output: 272


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/tbtc-signer-formal.yml"
echo "== File exists? =="
ls -l "$FILE"
echo "== Lines 1-120 with numbers =="
nl -ba "$FILE" | sed -n '1,120p'

Repository: threshold-network/keep-core

Length of output: 272


🏁 Script executed:

#!/bin/bash
set -euo pipefail
FILE=".github/workflows/tbtc-signer-formal.yml"

echo "== Showing lines 1-80 =="
awk 'NR>=1 && NR<=80 {printf "%4d: %s\n", NR, $0}' "$FILE"

echo "== Showing checkout-related lines (search) =="
rg -n "name:\s*Checkout|uses:\s*actions/checkout|persist-credentials" "$FILE" || true

Repository: threshold-network/keep-core

Length of output: 2302


Set persist-credentials: false on both actions/checkout@v4 steps

The current workflow checks out without disabling persisted git credentials; add with: persist-credentials: false to reduce credential exposure.

Suggested patch
       - name: Checkout
         uses: actions/checkout@v4
+        with:
+          persist-credentials: false
@@
       - name: Checkout
         uses: actions/checkout@v4
+        with:
+          persist-credentials: false
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: Checkout
uses: actions/checkout@v4
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false
🧰 Tools
🪛 zizmor (1.25.2)

[warning] 25-26: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 26-26: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/tbtc-signer-formal.yml around lines 25 - 26, The checkout
steps using actions/checkout@v4 persist git credentials by default; update each
Checkout step (the uses: actions/checkout@v4 entries) to add with:
persist-credentials: false so credentials are not stored in the runner after
checkout. Ensure both occurrences of actions/checkout@v4 in the workflow are
modified accordingly.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

for repo in actions/checkout actions/setup-java dtolnay/rust-toolchain; do
  echo "=== $repo ==="
  git ls-remote "https://github.com/${repo}.git" | head -n 5
  echo
done

Repository: threshold-network/keep-core

Length of output: 535


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 1) Inspect workflow around the referenced lines
echo "=== Workflow file context ==="
nl -ba .github/workflows/tbtc-signer-formal.yml | sed -n '1,120p'

# 2) Resolve refs to commit SHAs (avoid SIGPIPE by capturing then slicing)
resolve_ref() {
  local repo="$1" ref="$2"
  local url="https://github.com/${repo}.git"
  local tmp="/tmp/lsremote_${repo//\//_}_${ref//\//_}"
  git ls-remote "$url" "$ref" > "$tmp" 2>/dev/null || true
  echo "--- ${repo} ${ref} ---"
  cat "$tmp" || true
  echo
  rm -f "$tmp" || true
}

echo "=== Resolve action refs to SHAs ==="
resolve_ref "actions/checkout" "refs/tags/v4"
resolve_ref "actions/checkout" "refs/heads/v4"
resolve_ref "actions/setup-java" "refs/tags/v4"
resolve_ref "actions/setup-java" "refs/heads/v4"
resolve_ref "dtolnay/rust-toolchain" "refs/heads/stable"
resolve_ref "dtolnay/rust-toolchain" "refs/tags/stable"

Repository: threshold-network/keep-core

Length of output: 162


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Workflow file context (numbered) ==="
python3 - <<'PY'
from pathlib import Path
p = Path(".github/workflows/tbtc-signer-formal.yml")
lines = p.read_text().splitlines()
start, end = 1, min(len(lines), 140)
for i in range(start, end+1):
    print(f"{i}\t{lines[i-1]}")
PY

echo
echo "=== Resolve action refs to commit SHAs ==="
resolve_ref() {
  local repo="$1" ref="$2"
  local url="https://github.com/${repo}.git"
  echo "--- ${repo} ${ref} ---"
  git ls-remote "$url" "$ref" || true
  echo
}

resolve_ref "actions/checkout" "refs/tags/v4"
resolve_ref "actions/checkout" "refs/heads/v4"
resolve_ref "actions/setup-java" "refs/tags/v4"
resolve_ref "actions/setup-java" "refs/heads/v4"
resolve_ref "dtolnay/rust-toolchain" "refs/heads/stable"
resolve_ref "dtolnay/rust-toolchain" "refs/tags/stable"

Repository: threshold-network/keep-core

Length of output: 2438


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Total lines: $(python3 - <<'PY'\nimport pathlib\np=pathlib.Path('.github/workflows/tbtc-signer-formal.yml')\nprint(len(p.read_text().splitlines()))\nPY)"

echo
echo "=== uses: occurrences ==="
rg -n "uses:" .github/workflows/tbtc-signer-formal.yml || true

echo
echo "=== persist-credentials occurrences ==="
rg -n "persist-credentials" .github/workflows/tbtc-signer-formal.yml || true

Repository: threshold-network/keep-core

Length of output: 133


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Total lines: $(python3 - <<'PY'
import pathlib
p=pathlib.Path('.github/workflows/tbtc-signer-formal.yml')
print(len(p.read_text().splitlines()))
PY)"

echo
echo "=== uses: occurrences ==="
rg -n "uses:" .github/workflows/tbtc-signer-formal.yml || true

echo
echo "=== persist-credentials occurrences ==="
rg -n "persist-credentials" .github/workflows/tbtc-signer-formal.yml || true

Repository: threshold-network/keep-core

Length of output: 424


Pin GitHub Actions to commit SHAs and harden checkout credentials.

  • actions/checkout@v4 (lines 26, 44) -> actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5; also add with: persist-credentials: false to both checkout steps.
  • dtolnay/rust-toolchain@stable (line 29) -> dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8.
  • actions/setup-java@v4 (line 47) -> actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9.
🧰 Tools
🪛 zizmor (1.25.2)

[warning] 25-26: credential persistence through GitHub Actions artifacts (artipacked): does not set persist-credentials: false

(artipacked)


[error] 26-26: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)

(unpinned-uses)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/tbtc-signer-formal.yml at line 26, Update the GitHub
Actions workflow to pin action versions and harden checkout credentials: replace
occurrences of actions/checkout@v4 with
actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 and add with:
persist-credentials: false to both checkout steps that use checkout, replace
dtolnay/rust-toolchain@stable with
dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8, and replace
actions/setup-java@v4 with
actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 so the workflow pins
SHA-based commits and disables persisting credentials on checkout.


- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Run signer formal invariant tests
# Filters cargo test by the formal_verification_ prefix so only
# the formal-invariant test cases run (faster + clearer signal
# than the full suite). Matches the convention used in the
# source monorepo's ci-formal-verification.yml.
run: cargo test --manifest-path pkg/tbtc/signer/Cargo.toml formal_verification_

tla-model-checks:
name: TLA model checks
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- name: Run TLA model checks
# Iterates over every .cfg under pkg/tbtc/signer/docs/formal/models/
# and runs TLC against the matching .tla module. MODELS_PATH defaults
# to the canonical signer-relative path; override via env var for
# alternate environments (set in extraction/frost-signer-mirror PR).
run: pkg/tbtc/signer/scripts/formal/run_tla_models.sh
1 change: 1 addition & 0 deletions pkg/tbtc/signer/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target/
Loading
Loading