From 9a283b96ff14bbf90d563d2b7da9d616ac24cfc9 Mon Sep 17 00:00:00 2001 From: Code Orange Devs Date: Sat, 26 Sep 2026 12:16:21 +0800 Subject: [PATCH 1/2] Re-verify every PR link, add verifier tool and weekly CI - tools/verify_dashboard.py: checks each linked PR's state via GitHub, recounts per-developer and total merged, and lists unlisted PRs by listed contributors since a cutoff (candidates only) - Apply its findings: 10 'open' PRs had merged (96 -> 106 merged), 23 had closed unmerged; Alex Xie's merged PRs get direct links - Weekly workflow + on PRs touching README - Remove README-backup-20260712.md Co-Authored-By: Claude Opus 5.5 --- .github/workflows/verify.yml | 36 ++++ README-backup-20260712.md | 308 ----------------------------------- README.md | 63 +++---- tools/verify_dashboard.py | 201 +++++++++++++++++++++++ 4 files changed, 272 insertions(+), 336 deletions(-) create mode 100644 .github/workflows/verify.yml delete mode 100644 README-backup-20260712.md create mode 100644 tools/verify_dashboard.py diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml new file mode 100644 index 0000000..bb7d572 --- /dev/null +++ b/.github/workflows/verify.yml @@ -0,0 +1,36 @@ +name: Verify dashboard + +on: + schedule: + - cron: "0 2 * * 1" # Mondays 02:00 UTC, the data contract's weekly check + pull_request: + paths: ["README.md", "tools/**"] + workflow_dispatch: + inputs: + since: + description: "Also list unlisted PRs created/merged after this date (YYYY-MM-DD)" + required: false + +permissions: + contents: read + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Verify every linked PR against GitHub + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SINCE: ${{ github.event.inputs.since }} + run: | + args="--strict --out report.md" + if [ -n "$SINCE" ]; then args="$args --since $SINCE"; fi + set +e + python3 tools/verify_dashboard.py $args + status=$? + cat report.md >> "$GITHUB_STEP_SUMMARY" + exit $status diff --git a/README-backup-20260712.md b/README-backup-20260712.md deleted file mode 100644 index be62215..0000000 --- a/README-backup-20260712.md +++ /dev/null @@ -1,308 +0,0 @@ -# Code Orange Dev School - PR Tracking Dashboard - -> **Tracking every pull request by Code Orange community members to Bitcoin open-source projects.** -> -> Last updated: June 13, 2026 - ---- - -## Summary - -| Metric | Count | -|--------|-------| -| **Total PRs Opened** | **110+** | -| **PRs Merged** | **70+** | -| **PRs Open / Under Review** | **23** | -| **Distinct Projects Contributed To** | **30+** | -| **Active Contributors** | **16** | -| **Emerging Contributors (first PR imminent)** | **7** | - -> **Note (June 13 update):** Full re-scan of every community member against live GitHub. Three contributors promoted emerging → active: **Muhammad** (3 merged BDK security/audit PRs + open Bitcoin Core #35320), **Captain Levi** (merged ddust #46), and **Alex Xie** (merged Lightning/ecash PRs to OpenTollGate). The Silent Payments wallet formerly at `Bitshala-Incubator/silent-pay-wallet` is now developed at [`CypherCommons/shroud`](https://github.com/CypherCommons/shroud). - -### Quick view - contributors by merged PRs - -| Contributor | Merged (2026) | Primary focus | -|---|---|---| -| Chaitika | 15+ | Silent Payments (BIP352) wallet | -| Vaan | 11+ | Payjoin, BDK, rust-bitcoin | -| Peter | 9+ | Bitcoin Core, kernel-node SP scanning | -| Psychemist | 6 | Taproot, Script, LDK | -| Muhammad | 4 | BDK security/audit, Bitcoin Core | -| Gradale | 4 | rust-bitcoin, corepc, Lightning | -| Razor | 6 | peer-observer, P2P/BIP324 | -| Alex Xie | 3 | OpenTollGate (Lightning/ecash) | -| Arowolo | 2 | Payjoin (BIP77) | -| Captain Levi | 1 | ddust (BIP451 dust analysis) | -| Mwihoti | 1 | Payjoin (first merge) | -| Diegodev, Dayvvo, Bunny | - | LN fingerprinting, Alby/Cashu, translation | - ---- - -## Merged Pull Requests - -| # | Developer | GitHub | Project | PR Link | Description | Date | Status | -|---|-----------|--------|---------|---------|-------------|------|--------| -| 1 | Peter | [@pzafonte](https://github.com/pzafonte) | [Bitcoin Core](https://github.com/bitcoin/bitcoin) | [#34885](https://github.com/bitcoin/bitcoin/pull/34885) | kernel: expose btck_block_tree_entry_get_ancestor | Apr 2026 | Merged | -| 2 | Peter | [@pzafonte](https://github.com/pzafonte) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#5968](https://github.com/rust-bitcoin/rust-bitcoin/pull/5968) | p2p: add encoding trait impls to NetworkMessage encoder/decoder | Apr 2026 | Merged | -| 3 | Peter | [@pzafonte](https://github.com/pzafonte) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#5917](https://github.com/rust-bitcoin/rust-bitcoin/pull/5917) | p2p: add BlockLocator newtype with logarithmic build method | Apr 2026 | Merged | -| 4 | Peter | [@pzafonte](https://github.com/pzafonte) | [rust-bitcoinkernel](https://github.com/sedited/rust-bitcoinkernel) | [#164](https://github.com/sedited/rust-bitcoinkernel/pull/164) | feat(core): expose BlockTreeEntry::ancestor | Apr 2026 | Merged | -| 5 | Peter | [@pzafonte](https://github.com/pzafonte) | [kernel-node](https://github.com/kernel-node/kernel-node) | [#30](https://github.com/kernel-node/kernel-node/pull/30) | feat: add logarithmic block locators for getheaders and getblocks | Mar 2026 | Merged | -| 6 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#93](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/93) | Clean repo - root file cleanup | May 2026 | Merged | -| 7 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#89](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/89) | Remove BIP47 payment codes | Apr 2026 | Merged | -| 8 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#86](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/86) | Remove Apple platform features | Apr 2026 | Merged | -| 9 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#83](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/83) | Remove Multisig wallet support | Apr 2026 | Merged | -| 10 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#79](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/79) | FIX: handle odd Y parity for SP UTXO spend pubkeys | Apr 2026 | Merged | -| 11 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-indexer](https://github.com/Bitshala-Incubator/silent-pay-indexer) | [#100](https://github.com/Bitshala-Incubator/silent-pay-indexer/pull/100) | feat: add endpoint to get txn by txid | Feb 2026 | Merged | -| 12 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [#67](https://github.com/Bitshala-Incubator/silent-pay-wallet/pull/67) | OPS: update integration tests with addresses and balances | Feb 2026 | Merged | -| 13 | Chaitika | [@chaitika](https://github.com/chaitika) | [LN-week-4-assignment](https://github.com/Bitshala-Classrooms/LN-week-4-assignment) | [#1](https://github.com/Bitshala-Classrooms/LN-week-4-assignment/pull/1) | Add readme, tests and all language templates | Feb 2026 | Merged | -| 14 | Chaitika | [@chaitika](https://github.com/chaitika) | [LN-week-3-assignment](https://github.com/Bitshala-Classrooms/LN-week-3-assignment) | [#1](https://github.com/Bitshala-Classrooms/LN-week-3-assignment/pull/1) | Add readme, tests and all language templates | Jan 2026 | Merged | -| 15 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet) | [View PRs](https://github.com/Bitshala-Incubator/silent-pay-wallet/pulls?q=involves%3Achaitika) | Silent Payments (BIP352) wallet implementation | 2025 | Merged | -| 16 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay-indexer](https://github.com/Bitshala-Incubator/silent-pay-indexer) | [View PRs](https://github.com/Bitshala-Incubator/silent-pay-indexer/pulls?q=involves%3Achaitika) | Silent Payments indexer | 2025 | Merged | -| 17 | Chaitika | [@chaitika](https://github.com/chaitika) | [silent-pay](https://github.com/Bitshala-Incubator/silent-pay) | [View PRs](https://github.com/Bitshala-Incubator/silent-pay/pulls?q=involves%3Achaitika) | Silent Payments library | 2025 | Merged | -| 18 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#6125](https://github.com/rust-bitcoin/rust-bitcoin/pull/6125) | crypto: use constant-time equality for Poly1305 tags | May 2026 | Merged | -| 19 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [hex-conservative](https://github.com/rust-bitcoin/hex-conservative) | [#245](https://github.com/rust-bitcoin/hex-conservative/pull/245) | macros: add docs and examples to fmt_hex_exact | May 2026 | Merged | -| 20 | Vaan | [@va-an](https://github.com/va-an) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1554](https://github.com/payjoin/rust-payjoin/pull/1554) | refactor(cli): simplify bip cli args | May 2026 | Merged | -| 21 | Vaan | [@va-an](https://github.com/va-an) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1509](https://github.com/payjoin/rust-payjoin/pull/1509) | fix(mailroom): reject post requests over capacity | May 2026 | Merged | -| 22 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#270](https://github.com/bitcoindevkit/bdk-cli/pull/270) | fix: fix RUSTSEC-2026-0097 for rand 0.9 | Apr 2026 | Merged | -| 23 | Vaan | [@va-an](https://github.com/va-an) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#5939](https://github.com/rust-bitcoin/rust-bitcoin/pull/5939) | bitcoin: derive Clone for SighashCache | Apr 2026 | Merged | -| 24 | Vaan | [@va-an](https://github.com/va-an) | [esplora-cli](https://github.com/yancyribbens/esplora-cli) | [#3](https://github.com/yancyribbens/esplora-cli/pull/3) | chore: update deps | Mar 2026 | Merged | -| 25 | Vaan | [@va-an](https://github.com/va-an) | [bdk_wallet](https://github.com/bitcoindevkit/bdk_wallet) | [#422](https://github.com/bitcoindevkit/bdk_wallet/pull/422) | docs(wallet): fix misleading RBF comment in create_tx | Mar 2026 | Merged | -| 26 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#241](https://github.com/bitcoindevkit/bdk-cli/pull/241) | chore: remove remaining MSRV mentions | Feb 2026 | Merged | -| 27 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#237](https://github.com/bitcoindevkit/bdk-cli/pull/237) | feat: add completions subcommand | Feb 2026 | Merged | -| 28 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#224](https://github.com/bitcoindevkit/bdk-cli/pull/224) | fix(pretty-format): use --pretty in any position | Oct 2025 | Merged | -| 29 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#208](https://github.com/bitcoindevkit/bdk-cli/pull/208) | Update compile command to support taproot descriptors | Jul 2025 | Merged | -| 30 | Arowolo | [@Arowolokehinde](https://github.com/Arowolokehinde) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1498](https://github.com/payjoin/rust-payjoin/pull/1498) | Fix send success log error and order | May 2026 | Merged | -| 31 | Arowolo | [@Arowolokehinde](https://github.com/Arowolokehinde) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1457](https://github.com/payjoin/rust-payjoin/pull/1457) | Unify mailbox TTL to a single value | Apr 2026 | Merged | -| 32 | Razor | [@RazorBest](https://github.com/RazorBest) | [rust-bitcoin/corepc](https://github.com/rust-bitcoin/corepc) | [#547](https://github.com/rust-bitcoin/corepc/pull/547) | Change prune_target_size type from u32 to u64 | Apr 2026 | Merged | -| 33 | Razor | [@RazorBest](https://github.com/RazorBest) | [peer-observer](https://github.com/peer-observer/peer-observer) | [#408](https://github.com/peer-observer/peer-observer/pull/408) | ebpf-extractor: Reload eBPF objects when bitcoind restarts | Apr 2026 | Merged | -| 34 | Razor | [@RazorBest](https://github.com/RazorBest) | [peer-observer](https://github.com/peer-observer/peer-observer) | [#393](https://github.com/peer-observer/peer-observer/pull/393) | fix(shared): remove glob from rerun condition in build.rs | Mar 2026 | Merged | -| 35 | Razor | [@RazorBest](https://github.com/RazorBest) | [peer-observer](https://github.com/peer-observer/peer-observer) | [#390](https://github.com/peer-observer/peer-observer/pull/390) | docs(rpc-extractor): document what RPCs are currently being used | Mar 2026 | Merged | -| 36 | Razor | [@RazorBest](https://github.com/RazorBest) | [bitcointranscripts](https://github.com/bitcointranscripts/bitcointranscripts) | [#612](https://github.com/bitcointranscripts/bitcointranscripts/pull/612) | Add merkle-trees Floresta review to tabconf/2025 | Mar 2026 | Merged | -| 37 | Psychemist | [@psychemist](https://github.com/psychemist) | [saving-satoshi-script](https://github.com/saving-satoshi/saving-satoshi-script) | [#19](https://github.com/saving-satoshi/saving-satoshi-script/pull/19) | Implement OP_CHECKSIGADD opcode (BIP-342) | Mar 2026 | Merged | -| 38 | Psychemist | [@psychemist](https://github.com/psychemist) | [bitcointranscripts](https://github.com/bitcointranscripts/bitcointranscripts) | [#615](https://github.com/bitcointranscripts/bitcointranscripts/pull/615) | Add cluster-mempool-by-murch review to tabconf/2024 | Mar 2026 | Merged | -| 39 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#31](https://github.com/aaron-recompile/mastering-taproot/pull/31) | Add week-1 lab solution | Mar 2026 | Merged | -| 40 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#24](https://github.com/aaron-recompile/mastering-taproot/pull/24) | Fix Schnorr tweak verification | Mar 2026 | Merged | -| 41 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#23](https://github.com/aaron-recompile/mastering-taproot/pull/23) | Fix Schnorr tweak logic (BIP341) | Feb 2026 | Merged | -| 42 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#22](https://github.com/aaron-recompile/mastering-taproot/pull/22) | Correct transaction visualizations | Feb 2026 | Merged | -| 43 | Psychemist | [@psychemist](https://github.com/psychemist) | [rust-lightning (LDK)](https://github.com/lightningdevkit/rust-lightning) | [#4293](https://github.com/lightningdevkit/rust-lightning/pull/4293) | Change Bolt11Invoice payment_hash function return type | Jan 2025 | Merged | -| 44 | Diegodev | [@0xlaga](https://github.com/0xlaga) | [gossip-observer](https://github.com/0xlaga) | - | Gossip observer contributions | 2025 | Merged | -| 45 | Bunny Rolling Dice | [@rollingdice](https://github.com/rollingdice) | [BlueWallet](https://github.com/BlueWallet/BlueWallet) | - | Bahasa Indonesia translation | 2025 | Merged | -| 46 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [SurrealDB](https://github.com/surrealdb/surrealdb) | - | OSS contribution in Rust (non-Bitcoin, demonstrating capability) | 2025 | Merged | -| 47 | Dayvvo | [@dayvvo](https://github.com/dayvvo) | [getalby/js-sdk](https://github.com/getalby/js-sdk) | - | Alby JS SDK contribution | 2025 | Merged | -| 48 | Dayvvo | [@dayvvo](https://github.com/dayvvo) | [getalby/bitcoin-connect](https://github.com/getalby/bitcoin-connect) | - | Alby Bitcoin Connect contribution | 2025 | Merged | -| 49 | Dayvvo | [@dayvvo](https://github.com/dayvvo) | [cashu-ts](https://github.com/cashubtc/cashu-ts) | - | Cashu TypeScript library contribution | 2025 | Merged | -| 50 | Peter | [@pzafonte](https://github.com/pzafonte) | [kernel-node](https://github.com/kernel-node/kernel-node) | [#50](https://github.com/kernel-node/kernel-node/pull/50) | Silent Payments: integrate SPDK scanning and wallet IPC (BIP352) | May 2026 | Merged | -| 51 | Peter | [@pzafonte](https://github.com/pzafonte) | [kernel-node](https://github.com/kernel-node/kernel-node) | [#56](https://github.com/kernel-node/kernel-node/pull/56) | Silent Payments: file-based key import/export | May 2026 | Merged | -| 52 | Peter | [@pzafonte](https://github.com/pzafonte) | [kernel-node](https://github.com/kernel-node/kernel-node) | [#60](https://github.com/kernel-node/kernel-node/pull/60) | Silent Payments: file-backed wallet store | Jun 2026 | Merged | -| 53 | Peter | [@pzafonte](https://github.com/pzafonte) | [rust-bitcoinkernel](https://github.com/sedited/rust-bitcoinkernel) | [#177](https://github.com/sedited/rust-bitcoinkernel/pull/177) | feat(core): expose Block::check (context-free block validation) | May 2026 | Merged | -| 54 | Vaan | [@va-an](https://github.com/va-an) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1576](https://github.com/payjoin/rust-payjoin/pull/1576) | fix(cli): v1 config rejecting endpoints without explicit port | May 2026 | Merged | -| 55 | Vaan | [@va-an](https://github.com/va-an) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1590](https://github.com/payjoin/rust-payjoin/pull/1590) | docs(cli): update relay url | May 2026 | Merged | -| 56 | Vaan | [@va-an](https://github.com/va-an) | [payjoin.org](https://github.com/payjoin/payjoin.org) | [#133](https://github.com/payjoin/payjoin.org/pull/133) | docs(typo): oblivous → oblivious | May 2026 | Merged | -| 57 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-bitcoin/corepc](https://github.com/rust-bitcoin/corepc) | [#604](https://github.com/rust-bitcoin/corepc/pull/604) | test: make explicit returned stdlib types in tests | May 2026 | Merged | -| 58 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [hex-conservative](https://github.com/rust-bitcoin/hex-conservative) | [#247](https://github.com/rust-bitcoin/hex-conservative/pull/247) | Add fmt_hex_exact_lower and fmt_hex_exact_upper macros | May 2026 | Merged | -| 59 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#73](https://github.com/CypherCommons/shroud/pull/73) | FEAT: Track payment by TXID (Silent Payments scan-by-txid) | May 2026 | Merged | -| 60 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#102](https://github.com/CypherCommons/shroud/pull/102) | DEL: push-notification telemetry, Sign/Verify, Export Private Key (privacy hardening) | May 2026 | Merged | -| 61 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#101](https://github.com/CypherCommons/shroud/pull/101) | DEL: quick-actions toggle and Android home-screen widgets | May 2026 | Merged | -| 62 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#76](https://github.com/CypherCommons/shroud/pull/76) | FIX: persist birth height to disk | May 2026 | Merged | -| 63 | Mwihoti | [@mwihoti](https://github.com/mwihoti) | [rust-payjoin](https://github.com/payjoin/rust-payjoin) | [#1589](https://github.com/payjoin/rust-payjoin/pull/1589) | chore: add lcov.info to root .gitignore - **first merged Bitcoin PR** | May 2026 | Merged | -| 64 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [bdk_wallet](https://github.com/bitcoindevkit/bdk_wallet) | [#471](https://github.com/bitcoindevkit/bdk_wallet/pull/471) | fix(audit): non-witness-utxo txid validation for PSBT (security) | May 2026 | Merged | -| 65 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [bdk_wallet](https://github.com/bitcoindevkit/bdk_wallet) | [#487](https://github.com/bitcoindevkit/bdk_wallet/pull/487) | fix(types): avoid reachable panics in Utxo::txout for Foreign variant | May 2026 | Merged | -| 66 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [bdk_wallet](https://github.com/bitcoindevkit/bdk_wallet) | [#476](https://github.com/bitcoindevkit/bdk_wallet/pull/476) | fix(signer): respect allow_all_sighashes in SignerWrapper::sign_input | May 2026 | Merged | -| 67 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [cove](https://github.com/bitcoinppl/cove) | [#728](https://github.com/bitcoinppl/cove/pull/728) | chore(deps): replace cbor4ii with minicbor-serde in redb Cbor wrapper | May 2026 | Merged | -| 68 | Captain Levi | [@SIDHARTH20K4](https://github.com/SIDHARTH20K4) | [ddust](https://github.com/bip451/ddust) | [#46](https://github.com/bip451/ddust/pull/46) | fix: is_ddust_tx sighash check for P2WSH multisig inputs (BIP451) | May 2026 | Merged | -| 69 | Alex Xie | [@alexxie16](https://github.com/alexxie16) | [tollgate-module-basic-go](https://github.com/OpenTollGate/tollgate-module-basic-go) | [#107](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/107) | feat: Lightning checkout + balance view (Lightning/ecash) | Apr 2026 | Merged | -| 70 | Alex Xie | [@alexxie16](https://github.com/alexxie16) | [tollgate-module-basic-go](https://github.com/OpenTollGate/tollgate-module-basic-go) | [#105](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/105) | feat(packaging): local OpenWrt SDK source-build helper | Apr 2026 | Merged | -| 71 | Alex Xie | [@alexxie16](https://github.com/alexxie16) | [tollgate-captive-portal-site](https://github.com/OpenTollGate/tollgate-captive-portal-site) | [#9](https://github.com/OpenTollGate/tollgate-captive-portal-site/pull/9) | Add Lightning support UI (captive portal) | Apr 2026 | Merged | - ---- - -## Pull Requests Open / Under Review - -| # | Developer | GitHub | Project | PR Link | Description | Status | -|---|-----------|--------|---------|---------|-------------|--------| -| 1 | Peter | [@pzafonte](https://github.com/pzafonte) | [Bitcoin Core](https://github.com/bitcoin/bitcoin) | [#35380](https://github.com/bitcoin/bitcoin/pull/35380) | kernel: expose witness stack & scriptSig for btck_TransactionInput (needed for SP scanning) | Open | -| 2 | Peter | [@pzafonte](https://github.com/pzafonte) | [bdk-ffi](https://github.com/bitcoindevkit/bdk-ffi) | [#1008](https://github.com/bitcoindevkit/bdk-ffi/pull/1008) | test: cover descriptors that are not supported | Open | -| 3 | Peter | [@pzafonte](https://github.com/pzafonte) | [bitcoinfibre](https://github.com/bitcoinfibre/bitcoinfibre) | [#20](https://github.com/bitcoinfibre/bitcoinfibre/pull/20) | net: persist UDP peers (mapPersistentNodes) across restarts | Open | -| 4 | Peter | [@pzafonte](https://github.com/pzafonte) | [kernel-node](https://github.com/kernel-node/kernel-node) | [#32](https://github.com/kernel-node/kernel-node/pull/32) | feat: add PeerManager with multi-peer IBD and per-peer stall detection | Open | -| 5 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#281](https://github.com/bitcoindevkit/bdk-cli/pull/281) | chore(rustsec): update rustls-webpki 0.103.13 | Open | -| 6 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#225](https://github.com/bitcoindevkit/bdk-cli/pull/225) | feat(compile): taproot descriptor with randomized unspendable internal key | Open | -| 7 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-bitcoin/corepc](https://github.com/rust-bitcoin/corepc) | [#614](https://github.com/rust-bitcoin/corepc/pull/614) | integration_test: add explicit types everywhere | Open | -| 8 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [ldk-node](https://github.com/lightningdevkit/ldk-node) | [#905](https://github.com/lightningdevkit/ldk-node/pull/905) | tests: BOLT12 (Offers) interoperability with Core Lightning | Open | -| 9 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [ldk-node](https://github.com/lightningdevkit/ldk-node) | [#906](https://github.com/lightningdevkit/ldk-node/pull/906) | fix(payment): skip store insertion on routing failures to allow retry | Open | -| 10 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [Core Lightning (CLN)](https://github.com/ElementsProject/lightning) | [#9162](https://github.com/ElementsProject/lightning/pull/9162) | offers: add used_count to listoffers (BOLT12) | Open | -| 11 | Razor | [@RazorBest](https://github.com/RazorBest) | [peer-observer](https://github.com/peer-observer/peer-observer) | [#400](https://github.com/peer-observer/peer-observer/pull/400) | Generic anomaly detection with Prometheus | Open | -| 12 | Razor | [@RazorBest](https://github.com/RazorBest) | [bip324-mitm](https://github.com/RazorBest/bip324-mitm) | [View repo](https://github.com/RazorBest/bip324-mitm) | BIP324 MITM tool - state machine + protocol error handling | Active development | -| 13 | Psychemist | [@psychemist](https://github.com/psychemist) | [devkit-wallet](https://github.com/bitcoindevkit/devkit-wallet) | [#53](https://github.com/bitcoindevkit/devkit-wallet/pull/53) | feat: minimal sweep WIF QR-code implementation | Open | -| 14 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#88](https://github.com/CypherCommons/shroud/pull/88) | Integrate Tor/Orbot to wallet for indexer requests | Under review | -| 15 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#103](https://github.com/CypherCommons/shroud/pull/103) | REF: rewrite e2e suite | Open | -| 16 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#108](https://github.com/CypherCommons/shroud/pull/108) | Unit test cleanup | Open | -| 17 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#109](https://github.com/CypherCommons/shroud/pull/109) | Fix BuildReleaseApk workflow | Open | -| 18 | Mwihoti | [@mwihoti](https://github.com/mwihoti) | [saving-satoshi-script](https://github.com/saving-satoshi/saving-satoshi-script) | [#20](https://github.com/saving-satoshi/saving-satoshi-script/pull/20) | Migrate ScratchDnD from react-beautiful-dnd to dnd-kit | Open | -| 19 | Muhammad | [@muhahahmad68](https://github.com/muhahahmad68) | [Bitcoin Core](https://github.com/bitcoin/bitcoin) | [#35320](https://github.com/bitcoin/bitcoin/pull/35320) | key: validate BIP32 seed length in CExtKey::SetSeed | Open | -| 20 | Captain Levi | [@SIDHARTH20K4](https://github.com/SIDHARTH20K4) | [ddust](https://github.com/bip451/ddust) | [#49](https://github.com/bip451/ddust/pull/49) | test: P2SH-P2WSH and P2SH 2of3 multisig integration tests | Open | -| 21 | Captain Levi | [@SIDHARTH20K4](https://github.com/SIDHARTH20K4) | [Ride-The-Lightning](https://github.com/Ride-The-Lightning/RTL) | [#1609](https://github.com/Ride-The-Lightning/RTL/pull/1609) | a11y: add mat-labels and fix keyboard nav | Open | -| 22 | Alex Xie | [@alexxie16](https://github.com/alexxie16) | [tollgate-module-basic-go](https://github.com/OpenTollGate/tollgate-module-basic-go) | [#106](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/106) | fix: evict expired timed sessions and start scan loop | Open | -| 23 | Diegodev | [@0xlaga](https://github.com/0xlaga) | [gossip_observer](https://github.com/jharveyb/gossip_observer) | [#12](https://github.com/jharveyb/gossip_observer/pull/12) | impl_fingerprint - Lightning node implementation fingerprinting | Open | - ---- - -## Closed Pull Requests (Not Merged) - -These PRs were submitted but closed without merge - still valuable learning and contribution attempts. - -| # | Developer | GitHub | Project | PR Link | Description | Status | -|---|-----------|--------|---------|---------|-------------|--------| -| 1 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#6131](https://github.com/rust-bitcoin/rust-bitcoin/pull/6131) | Add fuzz tests for constant_time_eq | Closed | -| 2 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#6112](https://github.com/rust-bitcoin/rust-bitcoin/pull/6112) | fuzz: rewrite hashes_json target using Arbitrary | Closed | -| 3 | Gradale | [@alexgrad42](https://github.com/alexgrad42) | [rust-lightning (LDK)](https://github.com/lightningdevkit/rust-lightning) | [#4589](https://github.com/lightningdevkit/rust-lightning/pull/4589) | fuzz: remove splicing blocks in chanmon_consistency_target | Closed | -| 4 | Vaan | [@va-an](https://github.com/va-an) | [rust-miniscript](https://github.com/rust-bitcoin/rust-miniscript) | [#916](https://github.com/rust-bitcoin/rust-miniscript/pull/916) | tests: add regression tests for compile_tr_private_experimental panic | Closed | -| 5 | Vaan | [@va-an](https://github.com/va-an) | [bitcoin-dev-project](https://github.com/bitcoin-dev-project) | [#311](https://github.com/bitcoin-dev-project/bitcoin-dev-project/pull/311) | chore: remove bdk issues | Closed | -| 6 | Vaan | [@va-an](https://github.com/va-an) | [bdk-cli](https://github.com/bitcoindevkit/bdk-cli) | [#240](https://github.com/bitcoindevkit/bdk-cli/pull/240) | ci: update pull request template | Closed | -| 7 | Vaan | [@va-an](https://github.com/va-an) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#5951](https://github.com/rust-bitcoin/rust-bitcoin/pull/5951) | p2p: optional fields in version message | Closed | -| 8 | Peter | [@pzafonte](https://github.com/pzafonte) | [Bitcoin Core](https://github.com/bitcoin/bitcoin) | [#35382](https://github.com/bitcoin/bitcoin/pull/35382) | kernel: expose btck_transaction_input_get_script_sig (bundled into #35380) | Closed | -| 9 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#25](https://github.com/aaron-recompile/mastering-taproot/pull/25) | feat: add tweak explainer section | Closed | -| 10 | Psychemist | [@psychemist](https://github.com/psychemist) | [mastering-taproot](https://github.com/aaron-recompile/mastering-taproot) | [#26](https://github.com/aaron-recompile/mastering-taproot/pull/26) | Fix table formatting | Closed | -| 11 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#69](https://github.com/CypherCommons/shroud/pull/69) | FIX: e2e test setup | Closed | -| 12 | Chaitika | [@chaitika](https://github.com/chaitika) | [shroud](https://github.com/CypherCommons/shroud) | [#62](https://github.com/CypherCommons/shroud/pull/62) | FIX: remove uppercase conversion in DeeplinkSchemaMatch | Closed | -| 13 | Mwihoti | [@mwihoti](https://github.com/mwihoti) | [rust-bitcoin](https://github.com/rust-bitcoin/rust-bitcoin) | [#5801](https://github.com/rust-bitcoin/rust-bitcoin/pull/5801) | Add missing encoder and decoders for units crate | Closed | - ---- - -## Emerging Contributors (First PR Imminent) - -| Developer | GitHub | Target Project | Expected Timeline | -|-----------|--------|---------------|-------------------| -| Yongki | [@ywiyogo](https://github.com/ywiyogo) | Bitcoin Core (C++) | Q3 2026 | -| Ilie | [@Ilie27](https://github.com/Ilie27) | Bitaxe / Stratum V2 | Q3 2026 | -| Elijahhh | [@ElijahMwambazi](https://github.com/ElijahMwambazi) | Lightning Network (Rust) | Q3 2026 | -| Kirito | [@yomanthunder](https://github.com/yomanthunder) | coinswap / Stratum V2 | Q3 2026 | -| Shivam Gupta | [@shiivamgupta](https://github.com/shiivamgupta) | Bitcoin Core (C++) / Bitaxe | Q3 2026 | -| Martin Barilik | [@martinbarilik](https://github.com/martinbarilik) | StartOs / Robosats | Q3 2026 | -| Dailycisea | [@fqhhusain](https://github.com/fqhhusain) | Bitcoin FOSS (TBD) | Q3 2026 | - ---- - -## Projects Contributed To - -| Category | Project | Contributors | -|----------|---------|-------------| -| **Protocol & Privacy** | Bitcoin Core (C++) | Peter | -| | rust-bitcoin | Vaan, Peter, Gradale | -| | rust-miniscript | Vaan | -| | rust-payjoin (BIP77) | Arowolo, Vaan, Mwihoti | -| | Silent Payments (BIP352) | Chaitika, Peter (kernel-node SP integration) | -| | shroud (SP wallet, formerly silent-pay-wallet) | Chaitika | -| | coinswap | Kirito | -| | ddust (BIP451 dust analysis) | Captain Levi | -| | hex-conservative | Gradale | -| **Wallet & Infrastructure** | BDK / bdk-cli / bdk_wallet / bdk-ffi | Vaan, Psychemist, Peter, Muhammad | -| | cove (Bitcoin wallet) | Muhammad | -| | devkit-wallet | Psychemist | -| | LDK (Lightning Dev Kit) / ldk-node | Psychemist, Gradale | -| | Core Lightning (CLN) | Gradale | -| | kernel-node | Peter | -| | rust-bitcoinkernel | Peter | -| | bitcoinfibre | Peter | -| **Network & Monitoring** | peer-observer | Razor | -| | gossip-observer / gossip_observer | Diegodev | -| | bip324-mitm | Razor | -| | corepc | Razor, Gradale | -| | Stratum V2 | Kirito, Ilie | -| **Lightning & eCash** | OpenTollGate (Lightning/ecash captive portal) | Alex Xie | -| | Alby (js-sdk, bitcoin-connect) | Dayvvo | -| | cashu-ts | Dayvvo | -| | ldk-node / Core Lightning | Gradale | -| | Fedi ecosystem (BICustody) | Dashingtimmy | -| **Education & Docs** | bitcointranscripts | Psychemist, Razor | -| | saving-satoshi-script | Psychemist, Mwihoti | -| | mastering-taproot | Psychemist | -| | bitcoin-dev-project | Vaan | -| | payjoin.org | Vaan | -| **Ecosystem** | BlueWallet (translation) | Bunny Rolling Dice | -| | esplora-cli | Vaan | -| | StartOs / Robosats | Martin Barilik | - -**Total distinct Bitcoin projects: 30+** - ---- - -## Monthly Tracking Log - -### June 2026 (Week 2 Update - June 13) -- **Full re-scan of every community member** against live GitHub. 8 new merged PRs since June 2; merged total now 70+, opened 110+, projects 30+, active contributors 16. -- **Muhammad ([@muhahahmad68](https://github.com/muhahahmad68)) promoted emerging → active** - 3 merged BDK security/audit PRs ([#471](https://github.com/bitcoindevkit/bdk_wallet/pull/471) non-witness-utxo validation, [#487](https://github.com/bitcoindevkit/bdk_wallet/pull/487) panic-safety, [#476](https://github.com/bitcoindevkit/bdk_wallet/pull/476) sighash enforcement), a merged PR to the [cove](https://github.com/bitcoinppl/cove) wallet, and an open **Bitcoin Core PR [#35320](https://github.com/bitcoin/bitcoin/pull/35320)** (BIP32 seed-length validation). -- **Captain Levi ([@SIDHARTH20K4](https://github.com/SIDHARTH20K4)) promoted emerging → active** - merged [ddust #46](https://github.com/bip451/ddust/pull/46) (P2WSH multisig sighash fix, BIP451 dust analysis); ddust #49 and RTL #1609 open. -- **Alex Xie ([@alexxie16](https://github.com/alexxie16)) now active** - 3 merged Lightning/ecash PRs to [OpenTollGate](https://github.com/OpenTollGate/tollgate-module-basic-go) (Lightning checkout, balance view, packaging). -- **Diegodev** opened [gossip_observer #12](https://github.com/jharveyb/gossip_observer/pull/12) - Lightning node implementation fingerprinting. -- Deep-foundation members (Yongki, Ilie, Elijah, Shivam, Kirito, Dayvvo) - no new upstream merges this cycle; Dayvvo's Alby/Cashu work remains 2025. - -### June 2026 (Week 1 Update - June 2) -- **Re-scanned all 14 active contributor profiles against live GitHub.** New since the May 14 update: - - **14 new merged PRs** (merged total now 60+): - - **Peter** - Silent Payments milestone: kernel-node #50 (SPDK scanning + wallet IPC), #56 (key import/export), #60 (file-backed wallet store) all merged; rust-bitcoinkernel #177 (expose `Block::check`) merged. - - **Vaan** - rust-payjoin #1576, #1590 merged; payjoin.org #133 merged. - - **Gradale** - corepc #604 merged; hex-conservative #247 merged. Expanded into Lightning (ldk-node, Core Lightning BOLT12). - - **Chaitika** - shroud #73 (Track-payment-by-TXID, SP scan), #102 (privacy hardening: removed push-notification telemetry), #101, #76 merged. - - **Mwihoti** - rust-payjoin #1589 merged - **first merged Bitcoin PR**, promoted from emerging to active contributor. - - **New notable open PRs:** Peter - **Bitcoin Core #35380** (expose witness stack & scriptSig, required for Silent Payments scanning); Gradale - Core Lightning #9162 (BOLT12 `used_count`), ldk-node #905 BOLT12 interop; Chaitika - shroud #103/#108/#109. - - **Status corrections:** moved kernel-node #50, rust-bitcoinkernel #177, hex-conservative #247, payjoin.org #133, shroud #76 from Open/Draft → Merged; moved rust-bitcoin #5951 (Vaan), bitcoin #35382 (Peter) → Closed. - - **Repo migration noted:** `Bitshala-Incubator/silent-pay-wallet` → `CypherCommons/shroud` (Chaitika's SP wallet). -- Active contributors: 14 (Mwihoti added). Distinct projects: 28+ (added shroud, ldk-node, Core Lightning, bdk-ffi, bitcoinfibre). - -### May 2026 (Week 3 Update - May 14) -- **Cross-checked every PR against live GitHub data.** Major corrections: - - **9 PRs moved from "Open" to "Merged"** - Peter (#34885 Bitcoin Core!, #5968, #5917, #164), Vaan (#1554), Arowolo (#1498, #1457), Psychemist (#24, #31) - - **9 PRs moved to new "Closed" section** - Gradale (#6131, #6112, #4589), Vaan (#916, #311, #240), Psychemist (#25, #26), Mwihoti (#5801) - - **4 missing PRs added** - Peter kernel-node #30 (merged), Razor bitcointranscripts #612 (merged), Psychemist rust-lightning #4293 (merged), Vaan bdk-cli #224, #208 (merged) - - **3 new open PRs added** - Chaitika #88 (Tor/Orbot), #76 (persist birth height), Peter kernel-node #32 (PeerManager) -- **Peter's Bitcoin Core PR #34885 confirmed MERGED into bitcoin:master** - huge milestone -- **Arowolo's 2 rust-payjoin PRs both merged** - now has 2 merged contributions -- Merged PRs now 45+ (up from 30+) -- Added "Closed Pull Requests" section for transparency - -### May 2026 (Week 2 - May 13) -- **NEW CONTRIBUTOR:** Gradale added with 6 PRs - rust-bitcoin (#6125 merged), hex-conservative (#245 merged, #247 open), plus 3 closed PRs -- **Chaitika:** 11 merged PRs in 2026 across silent-pay-wallet, silent-pay-indexer, and Bitshala LN assignments -- **Vaan:** 14 PRs across 7 projects - rust-payjoin, bdk-cli, bdk_wallet, rust-bitcoin, esplora-cli, payjoin.org -- **Razor:** peer-observer (anomaly detection with Prometheus, eBPF extractor), corepc, bitcointranscripts, bip324-mitm (new project) -- **Peter:** Bitcoin Core (#34885), kernel-node (Silent Payments integration), rust-bitcoinkernel, rust-bitcoin P2P work -- **Psychemist:** saving-satoshi-script (OP_CHECKSIGADD), bitcointranscripts, mastering-taproot, devkit-wallet, rust-lightning -- **Arowolo:** 2 PRs to rust-payjoin (#1498, #1457) - both merged -- Active contributors: 13 - -### May 2026 (Week 1) -- Added 4 new merged PRs: Gradale (rust-bitcoin), Dayvvo (Alby js-sdk, Alby bitcoin-connect, cashu-ts) -- 12 active contributors now tracked (up from 7) -- New projects added: coinswap, Kernel-Node, Stratum V2, Alby, cashu-ts, Fedi/BICustody, StartOs, Robosats - -### April 2026 -- Dashboard created with baseline data from all cohort graduates -- 7 active contributors with merged/approved PRs -- 7 emerging contributors with first PRs expected Q2-Q3 2026 -- Tracking begins for monthly PR counts - -### How to Update (Monthly Process) -1. Check each contributor's GitHub profile for new PRs -2. Update the tables above with new entries -3. Update the Summary counts -4. Add an entry to the Monthly Tracking Log -5. Commit and push to GitHub - ---- - -## How We Count - -Following OpenSats methodology: -- **Opened**: PR submitted to a Bitcoin-related open-source project -- **Merged**: PR accepted and merged by the project maintainer -- **Closed**: PR submitted but closed without merge (still counts as contribution effort) -- **Under Review**: PR submitted and actively being reviewed -- **Draft**: PR opened as draft, work in progress -- We count contributions to: Bitcoin Core, rust-bitcoin, BDK, LDK, Fedimint, BTCPay Server, Lightning implementations, BlueWallet, peer-observer, payjoin, and other Bitcoin FOSS projects -- We do NOT count: personal repos, forks with no upstream PR, or non-Bitcoin projects (except to note OSS capability) - ---- - -*This dashboard is updated regularly. For real-time contribution data, check the GitHub profiles linked above.* - -*Code Orange Dev School | [codeorange.dev](https://codeorange.dev) | [github.com/code-orange-dev](https://github.com/code-orange-dev)* diff --git a/README.md b/README.md index ef61f45..2a0f6f6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > **Tracking every pull request by Code Orange community members to Bitcoin open-source projects.** > -> Last updated: July 2026 (full verification pass via GitHub API) | Next update: August 2026 +> Last updated: 26 September 2026 (link states re-verified with `tools/verify_dashboard.py`; new PRs since 12 July pending review) | Checked weekly by CI --- @@ -10,14 +10,14 @@ | Metric | Count | | --- | --- | -| **PRs Merged (direct link for every one)** | **96** | -| **PRs Open / Under Review** | **40+** | +| **PRs Merged (direct link for every one)** | **106** | +| **PRs Open / Under Review** | **7 linked** (post-July PRs pending review) | | **Total PRs Opened** | **135+** | | **Distinct Projects Contributed To** | **30+** | | **Active Contributors (linked below)** | **12** | | **Emerging Contributors (first PR imminent)** | **4** | -Highlights: a merged **Bitcoin Core** PR (Peter), **9 merged rust-payjoin** PRs across three contributors (Vaan ×5, Arowolo ×3, Mwihoti ×1), merged PRs in **rust-bitcoin** (Peter ×2, Vaan, Muhammad, Gradale), **hex-conservative**, **Floresta**, **BDK/bdk-cli/bdk_wallet/bdk-ffi**, **LDK**, and **peer-observer** ×4. +Highlights: **3 merged Bitcoin Core** PRs (Peter ×2, Muhammad), **9 merged rust-payjoin** PRs across three contributors (Vaan ×5, Arowolo ×3, Mwihoti ×1), merged PRs in **rust-bitcoin** (Peter ×2, Vaan, Muhammad, Gradale), **hex-conservative**, **Floresta**, **BDK/bdk-cli/bdk_wallet/bdk-ffi**, **LDK**, and **peer-observer** ×4. --- @@ -27,7 +27,7 @@ This dashboard is Code Orange's public source for **current PR output**. Histori | Field | Rule | | --- | --- | -| **Reporting cutoff** | Full link-level verification through **12 July 2026**; the dashboard revision is dated 13 July 2026. | +| **Reporting cutoff** | Link states re-verified **26 September 2026**. PRs opened or merged after **12 July 2026** that aren't linked yet are pending the Verifier's scope review. | | **Attribution** | Count only in-scope Bitcoin OSS PRs with a direct link. PRs made before a developer joined Code Orange may be listed as history, but are excluded from program-outcome claims. | | **PR state** | *Merged* means accepted upstream. *Open / under review* means submitted and neither merged nor closed at the reporting cutoff. Closed-unmerged PRs are not counted as open. | | **Active contributor** | A unique named community member with an in-scope PR that is open/under review or had a verified merged contribution in the reporting window. Re-verify the label at each monthly update. | @@ -38,15 +38,16 @@ This dashboard is Code Orange's public source for **current PR output**. Histori --- -## Merged Pull Requests by Developer (96) +## Merged Pull Requests by Developer (106) -### Peter ([@pzafonte](https://github.com/pzafonte)) - 14 merged +### Peter ([@pzafonte](https://github.com/pzafonte)) - 17 merged | Project | PR | Date | | --- | --- | --- | | **Bitcoin Core** | [bitcoin/bitcoin #34885](https://github.com/bitcoin/bitcoin/pull/34885) | Apr 2026 | +| **Bitcoin Core** | [bitcoin/bitcoin #35380](https://github.com/bitcoin/bitcoin/pull/35380) - kernel: expose witness/scriptSig (Silent Payments scanning) | Jul 2026 | | rust-bitcoin | [#5968](https://github.com/rust-bitcoin/rust-bitcoin/pull/5968) | Apr 2026 | | rust-bitcoin | [#5917](https://github.com/rust-bitcoin/rust-bitcoin/pull/5917) | Apr 2026 | -| kernel-node | [#71](https://github.com/kernel-node/kernel-node/pull/71) · [#66](https://github.com/kernel-node/kernel-node/pull/66) · [#64](https://github.com/kernel-node/kernel-node/pull/64) · [#63](https://github.com/kernel-node/kernel-node/pull/63) · [#60](https://github.com/kernel-node/kernel-node/pull/60) · [#56](https://github.com/kernel-node/kernel-node/pull/56) · [#50](https://github.com/kernel-node/kernel-node/pull/50) · [#30](https://github.com/kernel-node/kernel-node/pull/30) | Mar–Jun 2026 | +| kernel-node | [#78](https://github.com/kernel-node/kernel-node/pull/78) · [#31](https://github.com/kernel-node/kernel-node/pull/31) · [#71](https://github.com/kernel-node/kernel-node/pull/71) · [#66](https://github.com/kernel-node/kernel-node/pull/66) · [#64](https://github.com/kernel-node/kernel-node/pull/64) · [#63](https://github.com/kernel-node/kernel-node/pull/63) · [#60](https://github.com/kernel-node/kernel-node/pull/60) · [#56](https://github.com/kernel-node/kernel-node/pull/56) · [#50](https://github.com/kernel-node/kernel-node/pull/50) · [#30](https://github.com/kernel-node/kernel-node/pull/30) | Mar–Jun 2026 | | rust-bitcoinkernel | [#177](https://github.com/sedited/rust-bitcoinkernel/pull/177) · [#164](https://github.com/sedited/rust-bitcoinkernel/pull/164) | Apr–May 2026 | | BDK (bdk-ffi) | [#1008](https://github.com/bitcoindevkit/bdk-ffi/pull/1008) | Jun 2026 | @@ -60,10 +61,10 @@ This dashboard is Code Orange's public source for **current PR output**. Histori | bdk_wallet | [#422](https://github.com/bitcoindevkit/bdk_wallet/pull/422) | Apr 2026 | | esplora-cli | [#3](https://github.com/yancyribbens/esplora-cli/pull/3) | Apr 2026 | -### Chaitika ([@chaitika](https://github.com/chaitika)) - 17 merged (2026) +### Chaitika ([@chaitika](https://github.com/chaitika)) - 20 merged (2026) | Project | PR | Date | | --- | --- | --- | -| shroud (Silent Payments, CypherCommons) | [#122](https://github.com/CypherCommons/shroud/pull/122) · [#121](https://github.com/CypherCommons/shroud/pull/121) · [#120](https://github.com/CypherCommons/shroud/pull/120) · [#114](https://github.com/CypherCommons/shroud/pull/114) · [#108](https://github.com/CypherCommons/shroud/pull/108) · [#103](https://github.com/CypherCommons/shroud/pull/103) · [#102](https://github.com/CypherCommons/shroud/pull/102) · [#101](https://github.com/CypherCommons/shroud/pull/101) · [#93](https://github.com/CypherCommons/shroud/pull/93) · [#89](https://github.com/CypherCommons/shroud/pull/89) · [#86](https://github.com/CypherCommons/shroud/pull/86) · [#83](https://github.com/CypherCommons/shroud/pull/83) · [#79](https://github.com/CypherCommons/shroud/pull/79) · [#76](https://github.com/CypherCommons/shroud/pull/76) · [#73](https://github.com/CypherCommons/shroud/pull/73) · [#67](https://github.com/CypherCommons/shroud/pull/67) | Feb–Jul 2026 | +| shroud (Silent Payments, CypherCommons) | [#118](https://github.com/CypherCommons/shroud/pull/118) · [#124](https://github.com/CypherCommons/shroud/pull/124) · [#123](https://github.com/CypherCommons/shroud/pull/123) · [#122](https://github.com/CypherCommons/shroud/pull/122) · [#121](https://github.com/CypherCommons/shroud/pull/121) · [#120](https://github.com/CypherCommons/shroud/pull/120) · [#114](https://github.com/CypherCommons/shroud/pull/114) · [#108](https://github.com/CypherCommons/shroud/pull/108) · [#103](https://github.com/CypherCommons/shroud/pull/103) · [#102](https://github.com/CypherCommons/shroud/pull/102) · [#101](https://github.com/CypherCommons/shroud/pull/101) · [#93](https://github.com/CypherCommons/shroud/pull/93) · [#89](https://github.com/CypherCommons/shroud/pull/89) · [#86](https://github.com/CypherCommons/shroud/pull/86) · [#83](https://github.com/CypherCommons/shroud/pull/83) · [#79](https://github.com/CypherCommons/shroud/pull/79) · [#76](https://github.com/CypherCommons/shroud/pull/76) · [#73](https://github.com/CypherCommons/shroud/pull/73) · [#67](https://github.com/CypherCommons/shroud/pull/67) | Feb–Jul 2026 | | shroud-indexer | [#100](https://github.com/CypherCommons/shroud-indexer/pull/100) | Mar 2026 | Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet/pulls?q=involves%3Achaitika), [silent-pay-indexer](https://github.com/Bitshala-Incubator/silent-pay-indexer/pulls?q=involves%3Achaitika), [silent-pay](https://github.com/Bitshala-Incubator/silent-pay/pulls?q=involves%3Achaitika). @@ -96,19 +97,22 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht -### Muhammad ([@muhahahmad68](https://github.com/muhahahmad68)) - 7 merged +### Muhammad ([@muhahahmad68](https://github.com/muhahahmad68)) - 8 merged | Project | PR | Date | | --- | --- | --- | +| **Bitcoin Core** | [bitcoin/bitcoin #35320](https://github.com/bitcoin/bitcoin/pull/35320) - BIP32 seed-length validation | Jul 2026 | | rust-bitcoin | [#6394](https://github.com/rust-bitcoin/rust-bitcoin/pull/6394) | Jun 2026 | | **Floresta** | [#1001](https://github.com/getfloresta/Floresta/pull/1001) | Apr 2026 | | bdk_wallet | [#487](https://github.com/bitcoindevkit/bdk_wallet/pull/487) · [#476](https://github.com/bitcoindevkit/bdk_wallet/pull/476) · [#471](https://github.com/bitcoindevkit/bdk_wallet/pull/471) | May 2026 | | Cove wallet | [#728](https://github.com/bitcoinppl/cove/pull/728) | May 2026 | | SeedSigner (kdmukai) | [#12](https://github.com/kdmukai/seedsigner/pull/12) | Apr 2026 | -### Razor ([@RazorBest](https://github.com/RazorBest)) - 4 merged +### Razor ([@RazorBest](https://github.com/RazorBest)) - 6 merged | Project | PR | Date | | --- | --- | --- | | peer-observer | [#408](https://github.com/peer-observer/peer-observer/pull/408) · [#400](https://github.com/peer-observer/peer-observer/pull/400) · [#393](https://github.com/peer-observer/peer-observer/pull/393) · [#390](https://github.com/peer-observer/peer-observer/pull/390) | Mar–Jun 2026 | +| corepc | [#547](https://github.com/rust-bitcoin/corepc/pull/547) | Apr 2026 | +| bitcointranscripts | [#612](https://github.com/bitcointranscripts/bitcointranscripts/pull/612) | Mar 2026 | ### Arowolo ([@Arowolokehinde](https://github.com/Arowolokehinde)) - 3 merged | Project | PR | Date | @@ -116,17 +120,17 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht | **rust-payjoin (BIP77 Async Payjoin)** | [#1659](https://github.com/payjoin/rust-payjoin/pull/1659) | Jun 2026 | | rust-payjoin | [#1498](https://github.com/payjoin/rust-payjoin/pull/1498) · [#1457](https://github.com/payjoin/rust-payjoin/pull/1457) | 2026 | -### Gradale ([@alexgrad42](https://github.com/alexgrad42)) - 3 merged +### Gradale ([@alexgrad42](https://github.com/alexgrad42)) - 4 merged | Project | PR | Date | | --- | --- | --- | | rust-bitcoin | [#6125](https://github.com/rust-bitcoin/rust-bitcoin/pull/6125) - constant-time Poly1305 equality | 2026 | -| hex-conservative | [#245](https://github.com/rust-bitcoin/hex-conservative/pull/245) | 2026 | +| hex-conservative | [#247](https://github.com/rust-bitcoin/hex-conservative/pull/247) · [#245](https://github.com/rust-bitcoin/hex-conservative/pull/245) | 2026 | | corepc | [#604](https://github.com/rust-bitcoin/corepc/pull/604) | 2026 | ### Alex Xie ([@alexxie16](https://github.com/alexxie16)) - 3 merged | Project | PR | Date | | --- | --- | --- | -| OpenTollGate (Lightning/ecash) | [Lightning checkout, balance view, OpenWrt packaging](https://github.com/OpenTollGate/tollgate-module-basic-go/pulls?q=involves%3Aalexxie16) | 2026 | +| OpenTollGate (Lightning/ecash) | [#107](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/107) Lightning checkout + balance view · [#105](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/105) SDK source-build packaging · [#79](https://github.com/OpenTollGate/tollgate-module-basic-go/pull/79) apk packaging | Apr 2026 | ### Mwihoti ([@mwihoti](https://github.com/mwihoti)) - 1 merged | Project | PR | Date | @@ -136,26 +140,22 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht ### Claimed, not yet linked | Developer | Project | Note | | --- | --- | --- | -| Bunny Rolling Dice ([@rollingdice](https://github.com/rollingdice)) | BlueWallet | Bahasa Indonesia translation - add PR link | +| Bunny Rolling Dice ([@rollingdice](https://github.com/rollingdice)) | BlueWallet | [#315](https://github.com/BlueWallet/BlueWallet/pull/315) Indonesian translation, merged Feb 2019 - predates Code Orange, history only | | Psychemist | BDK Android · BIP375 Go | From 2025 report - add direct links or drop | --- -## Open / Under Review (40+) +## Open / Under Review (7 linked) + +Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. PRs opened since the July cutoff are not listed yet - see the verifier's "unlisted PRs" report. | Developer | Project | PR | | --- | --- | --- | -| Muhammad | **Bitcoin Core** | [#35320](https://github.com/bitcoin/bitcoin/pull/35320) | -| Peter | Bitcoin Core | [#35382](https://github.com/bitcoin/bitcoin/pull/35382) · [#35380](https://github.com/bitcoin/bitcoin/pull/35380) · [#34843](https://github.com/bitcoin/bitcoin/pull/34843) | -| Peter | kernel-node | [#78](https://github.com/kernel-node/kernel-node/pull/78) · [#68](https://github.com/kernel-node/kernel-node/pull/68) · [#47](https://github.com/kernel-node/kernel-node/pull/47) · [#32](https://github.com/kernel-node/kernel-node/pull/32) · [#31](https://github.com/kernel-node/kernel-node/pull/31) · [#29](https://github.com/kernel-node/kernel-node/pull/29) · [#28](https://github.com/kernel-node/kernel-node/pull/28) | -| Mwihoti | Saving Satoshi | [#20](https://github.com/saving-satoshi/saving-satoshi-script/pull/20) - note: rust-bitcoin [#5801](https://github.com/rust-bitcoin/rust-bitcoin/pull/5801) was closed unmerged; next attempt in progress | -| Razor | corepc · bitcointranscripts | [corepc #547](https://github.com/rust-bitcoin/corepc/pull/547) · [#612](https://github.com/bitcointranscripts/bitcointranscripts/pull/612) | -| Gradale | hex-conservative · ldk-node · Core Lightning | [#247](https://github.com/rust-bitcoin/hex-conservative/pull/247) · [ldk-node #905](https://github.com/lightningdevkit/ldk-node/pull/905) · [CLN #9162](https://github.com/ElementsProject/lightning/pull/9162) | -| Vaan | rust-bitcoin · rust-miniscript · bdk-cli · Bitcoin Dev Project | [#5951](https://github.com/rust-bitcoin/rust-bitcoin/pull/5951) · [#916](https://github.com/rust-bitcoin/rust-miniscript/pull/916) · [#281](https://github.com/bitcoindevkit/bdk-cli/pull/281) · [#240](https://github.com/bitcoindevkit/bdk-cli/pull/240) · [#311](https://github.com/bitcoin-dev-project/bitcoin-dev-project/pull/311) | -| Chaitika | shroud / shroud-indexer | [#124](https://github.com/CypherCommons/shroud/pull/124) · [#123](https://github.com/CypherCommons/shroud/pull/123) · [#118](https://github.com/CypherCommons/shroud/pull/118) · [#109](https://github.com/CypherCommons/shroud/pull/109) · [#88](https://github.com/CypherCommons/shroud/pull/88) · [#72](https://github.com/CypherCommons/shroud/pull/72) · [#69](https://github.com/CypherCommons/shroud/pull/69) · [#103](https://github.com/CypherCommons/shroud-indexer/pull/103) | -| Psychemist | BDK devkit-wallet · Mastering Taproot | [#53](https://github.com/bitcoindevkit/devkit-wallet/pull/53) · [#26](https://github.com/aaron-recompile/mastering-taproot/pull/26) · [#25](https://github.com/aaron-recompile/mastering-taproot/pull/25) | -| Dayvvo | Btrust website · Cashu nutshell · bitcointranscripts | [#25](https://github.com/btrustteam/website/pull/25) · [#550](https://github.com/cashubtc/nutshell/pull/550) · [#470](https://github.com/bitcointranscripts/bitcointranscripts/pull/470) | -| Muhammad | SeedSigner | [#920](https://github.com/SeedSigner/seedsigner/pull/920) | +| Peter | kernel-node | [#32](https://github.com/kernel-node/kernel-node/pull/32) | +| Mwihoti | Saving Satoshi | [#20](https://github.com/saving-satoshi/saving-satoshi-script/pull/20) | +| Chaitika | shroud-indexer | [#103](https://github.com/CypherCommons/shroud-indexer/pull/103) | +| Psychemist | BDK devkit-wallet | [#53](https://github.com/bitcoindevkit/devkit-wallet/pull/53) | +| Dayvvo | Btrust website | [#25](https://github.com/btrustteam/website/pull/25) | | Diegodev | gossip_observer · b4os-bitcoin | [#12](https://github.com/jharveyb/gossip_observer/pull/12) · [#5](https://github.com/danielabrozzoni/b4os-bitcoin/pull/5) | --- @@ -176,6 +176,13 @@ Four contributors below have verified GitHub handles and are included in the sum ## Monthly Tracking Log +### September 2026 +- Re-verified every linked PR with the new `tools/verify_dashboard.py` (now run weekly by CI) +- 10 PRs listed as open had merged and moved to merged: Bitcoin Core #35380 (Peter) and #35320 (Muhammad), kernel-node #78 and #31, corepc #547, bitcointranscripts #612, hex-conservative #247, shroud #118/#123/#124 (merged total 96 → 106) +- 23 PRs listed as open had been closed unmerged and were removed from the open list, per the data contract +- Alex Xie's 3 merged OpenTollGate PRs now have direct links; the BlueWallet translation claim is linked as pre-Code Orange history +- PRs opened or merged since 12 July are pending the Verifier's scope review (run the tool with `--since 2026-07-12`) + ### July 2026 * Full verification pass via the GitHub API: every merged PR now carries a direct link * The April baseline was substantially undercounted. Link-level verification first established 88 merged PRs; follow-up verification raised the linked total to 96. diff --git a/tools/verify_dashboard.py b/tools/verify_dashboard.py new file mode 100644 index 0000000..fab3eec --- /dev/null +++ b/tools/verify_dashboard.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +""" +Verify the PR dashboard against GitHub, so the PR Verifier's weekly check +takes minutes instead of clicking 130+ links. + + python3 tools/verify_dashboard.py # report to stdout + python3 tools/verify_dashboard.py --since 2026-07-12 # also find new PRs since the cutoff + python3 tools/verify_dashboard.py --out report.md + +It checks, without changing README.md: + 1. every PR in "Merged Pull Requests" is actually merged + 2. every PR in "Open / Under Review" is still open (flags merged -> move, + closed -> remove) + 3. per-developer "- N merged" headers and the section total match the links + 4. (--since) merged and open PRs by each listed developer created or merged + after the cutoff that the dashboard doesn't list yet - candidates only; + a human still applies the scope rules in "How We Count" + +Needs a GitHub token: GITHUB_TOKEN / GH_TOKEN, or a logged-in `gh` CLI. +No third-party packages. +""" + +import argparse +import json +import os +import re +import subprocess +import sys +import urllib.request +from collections import defaultdict +from pathlib import Path + +README = Path(__file__).resolve().parent.parent / "README.md" +PR_RE = re.compile(r"https://github\.com/([\w.-]+)/([\w.-]+)/pull/(\d+)") +DEV_RE = re.compile(r"^### (.+?) \(\[@([\w-]+)\]\(https://github\.com/[\w-]+\)\) - (\d+) merged") + + +def token(): + for var in ("GITHUB_TOKEN", "GH_TOKEN"): + if os.environ.get(var): + return os.environ[var] + try: + return subprocess.run(["gh", "auth", "token"], capture_output=True, text=True, check=True).stdout.strip() + except (OSError, subprocess.CalledProcessError): + sys.exit("No GitHub token: set GITHUB_TOKEN or log in with `gh auth login`.") + + +def graphql(tok, query): + req = urllib.request.Request( + "https://api.github.com/graphql", + data=json.dumps({"query": query}).encode(), + headers={"Authorization": f"bearer {tok}", "User-Agent": "co-dashboard-verifier"}, + ) + with urllib.request.urlopen(req, timeout=60) as r: + body = json.load(r) + if body.get("errors") and not body.get("data"): + raise RuntimeError(body["errors"]) + return body.get("data") or {} + + +def section(text, start, stop_prefix="## "): + lines, inside = [], False + for line in text.splitlines(): + if line.startswith(start): + inside = True + continue + if inside and line.startswith(stop_prefix): + break + if inside: + lines.append(line) + return lines + + +def parse(text): + merged_lines = section(text, "## Merged Pull Requests") + open_lines = section(text, "## Open / Under Review") + header_total = re.search(r"## Merged Pull Requests by Developer \((\d+)\)", text) + + devs, merged, current = [], [], None + for line in merged_lines: + m = DEV_RE.match(line) + if m: + current = {"name": m.group(1), "handle": m.group(2), "claimed": int(m.group(3)), "prs": []} + devs.append(current) + continue + if line.startswith("### "): + current = None # e.g. "Claimed, not yet linked" + continue + if current is not None and line.startswith("|"): + for pr in PR_RE.findall(line): + current["prs"].append(pr) + merged.append((current["name"], pr)) + + opened = [] + for line in open_lines: + if line.startswith("|") and not line.startswith("| Developer") and not line.startswith("| ---"): + name = line.split("|")[1].strip() + for pr in PR_RE.findall(line): + opened.append((name, pr)) + handles = {d["name"]: d["handle"] for d in devs} + return devs, merged, opened, int(header_total.group(1)) if header_total else None, handles + + +def fetch_states(tok, prs): + prs = sorted(set(prs)) + states = {} + for i in range(0, len(prs), 40): + chunk = prs[i:i + 40] + parts = [ + f'p{j}: repository(owner: "{o}", name: "{r}") {{ pullRequest(number: {n}) {{ state mergedAt url }} }}' + for j, (o, r, n) in enumerate(chunk) + ] + data = graphql(tok, "{ " + " ".join(parts) + " }") + for j, pr in enumerate(chunk): + node = (data.get(f"p{j}") or {}).get("pullRequest") + states[pr] = node["state"] if node else "NOT_FOUND" + return states + + +def find_new(tok, handles, since, listed): + found = [] + for name, handle in sorted(handles.items()): + for kind, q in (("merged", f"is:pr author:{handle} is:merged merged:>{since}"), + ("open", f"is:pr author:{handle} is:open created:>{since}")): + data = graphql(tok, 'query { search(type: ISSUE, first: 50, query: %s) { nodes { ... on PullRequest { url title repository { nameWithOwner isFork } } } } }' % json.dumps(q)) + for node in data["search"]["nodes"]: + m = PR_RE.match(node.get("url", "")) + if not m or m.groups() in listed: + continue + if node["repository"]["nameWithOwner"].lower().startswith(handle.lower() + "/"): + continue # PRs into the contributor's own repos/forks aren't upstream work + found.append((name, kind, node["url"], node["title"])) + return found + + +def fmt(pr): + o, r, n = pr + return f"[{o}/{r}#{n}](https://github.com/{o}/{r}/pull/{n})" + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--since", help="cutoff date YYYY-MM-DD for discovering unlisted PRs") + ap.add_argument("--out", help="write the markdown report to this file") + ap.add_argument("--strict", action="store_true", help="exit 1 if anything needs attention (for CI)") + args = ap.parse_args() + + tok = token() + devs, merged, opened, header_total, handles = parse(README.read_text()) + states = fetch_states(tok, [pr for _, pr in merged + opened]) + + out = ["# Dashboard verification report", ""] + problems = 0 + + bad = [(n, pr, states[pr]) for n, pr in merged if states[pr] != "MERGED"] + out.append(f"## Merged section: {len(merged) - len(bad)}/{len(merged)} links confirmed merged") + for n, pr, st in bad: + out.append(f"- ❌ {n}: {fmt(pr)} is **{st}**, not merged") + problems += len(bad) + + out += ["", "## Per-developer counts"] + recount = 0 + for d in devs: + actual = sum(1 for pr in d["prs"] if states[pr] == "MERGED") + recount += actual + mark = "✓" if actual == d["claimed"] else "❌" + if actual != d["claimed"]: + problems += 1 + out.append(f"- {mark} {d['name']}: header says {d['claimed']}, links show {actual}") + mark = "✓" if recount == header_total else "❌" + if recount != header_total: + problems += 1 + out.append(f"- {mark} **Total**: section header says {header_total}, verified links sum to {recount}") + + moved = [(n, pr) for n, pr in opened if states[pr] == "MERGED"] + closed = [(n, pr) for n, pr in opened if states[pr] in ("CLOSED", "NOT_FOUND")] + still = len(opened) - len(moved) - len(closed) + out += ["", f"## Open section: {still}/{len(opened)} still open"] + for n, pr in moved: + out.append(f"- 🟢 {n}: {fmt(pr)} **merged**, move it to the merged section") + for n, pr in closed: + out.append(f"- ⚪ {n}: {fmt(pr)} is **{states[pr].lower()}**, remove it from open") + problems += len(moved) + len(closed) + + if args.since: + listed = {pr for _, pr in merged + opened} + new = find_new(tok, handles, args.since, listed) + out += ["", f"## Unlisted PRs since {args.since} (candidates, apply 'How We Count' before adding)"] + out += [f"- {n} ({kind}): [{url.split('github.com/')[1]}]({url}) {title}" for n, kind, url, title in new] or ["- none found"] + + out += ["", f"**{problems} item(s) need attention.**" if problems else "**Dashboard matches GitHub.**"] + report = "\n".join(out) + "\n" + if args.out: + Path(args.out).write_text(report) + print(report) + if args.strict and problems: + sys.exit(1) + + +if __name__ == "__main__": + main() From bedbbcccc34d22b71b902601b8e5eebfcb8b66b4 Mon Sep 17 00:00:00 2001 From: Code Orange Devs Date: Sat, 26 Sep 2026 13:43:14 +0800 Subject: [PATCH 2/2] Add 25 merged + 17 open in-scope PRs since the July cutoff (106 -> 131) Applied How We Count: Bitcoin/Lightning repos in; Stellar, Cardano, Docker and two unconfirmed repos out (listed in the monthly log). Co-Authored-By: Claude Opus 5.5 --- README.md | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 2a0f6f6..d16fc70 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > **Tracking every pull request by Code Orange community members to Bitcoin open-source projects.** > -> Last updated: 26 September 2026 (link states re-verified with `tools/verify_dashboard.py`; new PRs since 12 July pending review) | Checked weekly by CI +> Last updated: 26 September 2026 (full re-verification with `tools/verify_dashboard.py`) | Checked weekly by CI --- @@ -10,9 +10,9 @@ | Metric | Count | | --- | --- | -| **PRs Merged (direct link for every one)** | **106** | -| **PRs Open / Under Review** | **7 linked** (post-July PRs pending review) | -| **Total PRs Opened** | **135+** | +| **PRs Merged (direct link for every one)** | **131** | +| **PRs Open / Under Review** | **24** | +| **Total PRs Opened** | **155+** (merged + open; closed-unmerged not counted) | | **Distinct Projects Contributed To** | **30+** | | **Active Contributors (linked below)** | **12** | | **Emerging Contributors (first PR imminent)** | **4** | @@ -27,7 +27,7 @@ This dashboard is Code Orange's public source for **current PR output**. Histori | Field | Rule | | --- | --- | -| **Reporting cutoff** | Link states re-verified **26 September 2026**. PRs opened or merged after **12 July 2026** that aren't linked yet are pending the Verifier's scope review. | +| **Reporting cutoff** | Full link-level verification through **26 September 2026**. | | **Attribution** | Count only in-scope Bitcoin OSS PRs with a direct link. PRs made before a developer joined Code Orange may be listed as history, but are excluded from program-outcome claims. | | **PR state** | *Merged* means accepted upstream. *Open / under review* means submitted and neither merged nor closed at the reporting cutoff. Closed-unmerged PRs are not counted as open. | | **Active contributor** | A unique named community member with an in-scope PR that is open/under review or had a verified merged contribution in the reporting window. Re-verify the label at each monthly update. | @@ -38,17 +38,17 @@ This dashboard is Code Orange's public source for **current PR output**. Histori --- -## Merged Pull Requests by Developer (106) +## Merged Pull Requests by Developer (131) -### Peter ([@pzafonte](https://github.com/pzafonte)) - 17 merged +### Peter ([@pzafonte](https://github.com/pzafonte)) - 30 merged | Project | PR | Date | | --- | --- | --- | | **Bitcoin Core** | [bitcoin/bitcoin #34885](https://github.com/bitcoin/bitcoin/pull/34885) | Apr 2026 | | **Bitcoin Core** | [bitcoin/bitcoin #35380](https://github.com/bitcoin/bitcoin/pull/35380) - kernel: expose witness/scriptSig (Silent Payments scanning) | Jul 2026 | | rust-bitcoin | [#5968](https://github.com/rust-bitcoin/rust-bitcoin/pull/5968) | Apr 2026 | | rust-bitcoin | [#5917](https://github.com/rust-bitcoin/rust-bitcoin/pull/5917) | Apr 2026 | -| kernel-node | [#78](https://github.com/kernel-node/kernel-node/pull/78) · [#31](https://github.com/kernel-node/kernel-node/pull/31) · [#71](https://github.com/kernel-node/kernel-node/pull/71) · [#66](https://github.com/kernel-node/kernel-node/pull/66) · [#64](https://github.com/kernel-node/kernel-node/pull/64) · [#63](https://github.com/kernel-node/kernel-node/pull/63) · [#60](https://github.com/kernel-node/kernel-node/pull/60) · [#56](https://github.com/kernel-node/kernel-node/pull/56) · [#50](https://github.com/kernel-node/kernel-node/pull/50) · [#30](https://github.com/kernel-node/kernel-node/pull/30) | Mar–Jun 2026 | -| rust-bitcoinkernel | [#177](https://github.com/sedited/rust-bitcoinkernel/pull/177) · [#164](https://github.com/sedited/rust-bitcoinkernel/pull/164) | Apr–May 2026 | +| kernel-node | [#105](https://github.com/kernel-node/kernel-node/pull/105) · [#104](https://github.com/kernel-node/kernel-node/pull/104) · [#103](https://github.com/kernel-node/kernel-node/pull/103) · [#99](https://github.com/kernel-node/kernel-node/pull/99) · [#95](https://github.com/kernel-node/kernel-node/pull/95) · [#94](https://github.com/kernel-node/kernel-node/pull/94) · [#93](https://github.com/kernel-node/kernel-node/pull/93) · [#90](https://github.com/kernel-node/kernel-node/pull/90) · [#88](https://github.com/kernel-node/kernel-node/pull/88) · [#87](https://github.com/kernel-node/kernel-node/pull/87) · [#86](https://github.com/kernel-node/kernel-node/pull/86) · [#85](https://github.com/kernel-node/kernel-node/pull/85) · [#78](https://github.com/kernel-node/kernel-node/pull/78) · [#31](https://github.com/kernel-node/kernel-node/pull/31) · [#71](https://github.com/kernel-node/kernel-node/pull/71) · [#66](https://github.com/kernel-node/kernel-node/pull/66) · [#64](https://github.com/kernel-node/kernel-node/pull/64) · [#63](https://github.com/kernel-node/kernel-node/pull/63) · [#60](https://github.com/kernel-node/kernel-node/pull/60) · [#56](https://github.com/kernel-node/kernel-node/pull/56) · [#50](https://github.com/kernel-node/kernel-node/pull/50) · [#30](https://github.com/kernel-node/kernel-node/pull/30) | Mar–Jun 2026 | +| rust-bitcoinkernel | [#213](https://github.com/sedited/rust-bitcoinkernel/pull/213) · [#177](https://github.com/sedited/rust-bitcoinkernel/pull/177) · [#164](https://github.com/sedited/rust-bitcoinkernel/pull/164) | Apr–May 2026 | | BDK (bdk-ffi) | [#1008](https://github.com/bitcoindevkit/bdk-ffi/pull/1008) | Jun 2026 | ### Vaan ([@va-an](https://github.com/va-an)) - 14 merged @@ -61,10 +61,10 @@ This dashboard is Code Orange's public source for **current PR output**. Histori | bdk_wallet | [#422](https://github.com/bitcoindevkit/bdk_wallet/pull/422) | Apr 2026 | | esplora-cli | [#3](https://github.com/yancyribbens/esplora-cli/pull/3) | Apr 2026 | -### Chaitika ([@chaitika](https://github.com/chaitika)) - 20 merged (2026) +### Chaitika ([@chaitika](https://github.com/chaitika)) - 28 merged (2026) | Project | PR | Date | | --- | --- | --- | -| shroud (Silent Payments, CypherCommons) | [#118](https://github.com/CypherCommons/shroud/pull/118) · [#124](https://github.com/CypherCommons/shroud/pull/124) · [#123](https://github.com/CypherCommons/shroud/pull/123) · [#122](https://github.com/CypherCommons/shroud/pull/122) · [#121](https://github.com/CypherCommons/shroud/pull/121) · [#120](https://github.com/CypherCommons/shroud/pull/120) · [#114](https://github.com/CypherCommons/shroud/pull/114) · [#108](https://github.com/CypherCommons/shroud/pull/108) · [#103](https://github.com/CypherCommons/shroud/pull/103) · [#102](https://github.com/CypherCommons/shroud/pull/102) · [#101](https://github.com/CypherCommons/shroud/pull/101) · [#93](https://github.com/CypherCommons/shroud/pull/93) · [#89](https://github.com/CypherCommons/shroud/pull/89) · [#86](https://github.com/CypherCommons/shroud/pull/86) · [#83](https://github.com/CypherCommons/shroud/pull/83) · [#79](https://github.com/CypherCommons/shroud/pull/79) · [#76](https://github.com/CypherCommons/shroud/pull/76) · [#73](https://github.com/CypherCommons/shroud/pull/73) · [#67](https://github.com/CypherCommons/shroud/pull/67) | Feb–Jul 2026 | +| shroud (Silent Payments, CypherCommons) | [#151](https://github.com/CypherCommons/shroud/pull/151) · [#150](https://github.com/CypherCommons/shroud/pull/150) · [#145](https://github.com/CypherCommons/shroud/pull/145) · [#144](https://github.com/CypherCommons/shroud/pull/144) · [#141](https://github.com/CypherCommons/shroud/pull/141) · [#138](https://github.com/CypherCommons/shroud/pull/138) · [#134](https://github.com/CypherCommons/shroud/pull/134) · [#130](https://github.com/CypherCommons/shroud/pull/130) · [#118](https://github.com/CypherCommons/shroud/pull/118) · [#124](https://github.com/CypherCommons/shroud/pull/124) · [#123](https://github.com/CypherCommons/shroud/pull/123) · [#122](https://github.com/CypherCommons/shroud/pull/122) · [#121](https://github.com/CypherCommons/shroud/pull/121) · [#120](https://github.com/CypherCommons/shroud/pull/120) · [#114](https://github.com/CypherCommons/shroud/pull/114) · [#108](https://github.com/CypherCommons/shroud/pull/108) · [#103](https://github.com/CypherCommons/shroud/pull/103) · [#102](https://github.com/CypherCommons/shroud/pull/102) · [#101](https://github.com/CypherCommons/shroud/pull/101) · [#93](https://github.com/CypherCommons/shroud/pull/93) · [#89](https://github.com/CypherCommons/shroud/pull/89) · [#86](https://github.com/CypherCommons/shroud/pull/86) · [#83](https://github.com/CypherCommons/shroud/pull/83) · [#79](https://github.com/CypherCommons/shroud/pull/79) · [#76](https://github.com/CypherCommons/shroud/pull/76) · [#73](https://github.com/CypherCommons/shroud/pull/73) · [#67](https://github.com/CypherCommons/shroud/pull/67) | Feb–Jul 2026 | | shroud-indexer | [#100](https://github.com/CypherCommons/shroud-indexer/pull/100) | Mar 2026 | Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](https://github.com/Bitshala-Incubator/silent-pay-wallet/pulls?q=involves%3Achaitika), [silent-pay-indexer](https://github.com/Bitshala-Incubator/silent-pay-indexer/pulls?q=involves%3Achaitika), [silent-pay](https://github.com/Bitshala-Incubator/silent-pay/pulls?q=involves%3Achaitika). @@ -114,16 +114,17 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht | corepc | [#547](https://github.com/rust-bitcoin/corepc/pull/547) | Apr 2026 | | bitcointranscripts | [#612](https://github.com/bitcointranscripts/bitcointranscripts/pull/612) | Mar 2026 | -### Arowolo ([@Arowolokehinde](https://github.com/Arowolokehinde)) - 3 merged +### Arowolo ([@Arowolokehinde](https://github.com/Arowolokehinde)) - 6 merged | Project | PR | Date | | --- | --- | --- | +| Mostro (Lightning P2P exchange) | [#848](https://github.com/MostroP2P/mostro/pull/848) · mostrix [#101](https://github.com/MostroP2P/mostrix/pull/101) · [#95](https://github.com/MostroP2P/mostrix/pull/95) | Jul–Aug 2026 | | **rust-payjoin (BIP77 Async Payjoin)** | [#1659](https://github.com/payjoin/rust-payjoin/pull/1659) | Jun 2026 | | rust-payjoin | [#1498](https://github.com/payjoin/rust-payjoin/pull/1498) · [#1457](https://github.com/payjoin/rust-payjoin/pull/1457) | 2026 | -### Gradale ([@alexgrad42](https://github.com/alexgrad42)) - 4 merged +### Gradale ([@alexgrad42](https://github.com/alexgrad42)) - 5 merged | Project | PR | Date | | --- | --- | --- | -| rust-bitcoin | [#6125](https://github.com/rust-bitcoin/rust-bitcoin/pull/6125) - constant-time Poly1305 equality | 2026 | +| rust-bitcoin | [#6387](https://github.com/rust-bitcoin/rust-bitcoin/pull/6387) · [#6125](https://github.com/rust-bitcoin/rust-bitcoin/pull/6125) - constant-time Poly1305 equality | 2026 | | hex-conservative | [#247](https://github.com/rust-bitcoin/hex-conservative/pull/247) · [#245](https://github.com/rust-bitcoin/hex-conservative/pull/245) | 2026 | | corepc | [#604](https://github.com/rust-bitcoin/corepc/pull/604) | 2026 | @@ -145,9 +146,9 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht --- -## Open / Under Review (7 linked) +## Open / Under Review (24) -Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. PRs opened since the July cutoff are not listed yet - see the verifier's "unlisted PRs" report. +Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. | Developer | Project | PR | | --- | --- | --- | @@ -156,6 +157,10 @@ Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. PRs | Chaitika | shroud-indexer | [#103](https://github.com/CypherCommons/shroud-indexer/pull/103) | | Psychemist | BDK devkit-wallet | [#53](https://github.com/bitcoindevkit/devkit-wallet/pull/53) | | Dayvvo | Btrust website | [#25](https://github.com/btrustteam/website/pull/25) | +| Peter | kernel-node | [#108](https://github.com/kernel-node/kernel-node/pull/108) · [#107](https://github.com/kernel-node/kernel-node/pull/107) | +| Chaitika | shroud | [#164](https://github.com/CypherCommons/shroud/pull/164) · [#162](https://github.com/CypherCommons/shroud/pull/162) · [#161](https://github.com/CypherCommons/shroud/pull/161) · [#160](https://github.com/CypherCommons/shroud/pull/160) · [#148](https://github.com/CypherCommons/shroud/pull/148) · [#135](https://github.com/CypherCommons/shroud/pull/135) | +| Arowolo | BDK (bdk_wallet · bdk-ffi · bdk · coin-select) · Mostro | bdk_wallet [#571](https://github.com/bitcoindevkit/bdk_wallet/pull/571) · [#537](https://github.com/bitcoindevkit/bdk_wallet/pull/537) · bdk-ffi [#1119](https://github.com/bitcoindevkit/bdk-ffi/pull/1119) · [#1114](https://github.com/bitcoindevkit/bdk-ffi/pull/1114) · [#1102](https://github.com/bitcoindevkit/bdk-ffi/pull/1102) · bdk [#2261](https://github.com/bitcoindevkit/bdk/pull/2261) · coin-select [#71](https://github.com/bitcoindevkit/coin-select/pull/71) · mostro [#896](https://github.com/MostroP2P/mostro/pull/896) | +| Muhammad | bdk_wallet | [#528](https://github.com/bitcoindevkit/bdk_wallet/pull/528) | | Diegodev | gossip_observer · b4os-bitcoin | [#12](https://github.com/jharveyb/gossip_observer/pull/12) · [#5](https://github.com/danielabrozzoni/b4os-bitcoin/pull/5) | --- @@ -178,10 +183,11 @@ Four contributors below have verified GitHub handles and are included in the sum ### September 2026 - Re-verified every linked PR with the new `tools/verify_dashboard.py` (now run weekly by CI) -- 10 PRs listed as open had merged and moved to merged: Bitcoin Core #35380 (Peter) and #35320 (Muhammad), kernel-node #78 and #31, corepc #547, bitcointranscripts #612, hex-conservative #247, shroud #118/#123/#124 (merged total 96 → 106) +- 10 PRs listed as open had merged and moved to merged: Bitcoin Core #35380 (Peter) and #35320 (Muhammad), kernel-node #78 and #31, corepc #547, bitcointranscripts #612, hex-conservative #247, shroud #118/#123/#124 (+10) - 23 PRs listed as open had been closed unmerged and were removed from the open list, per the data contract - Alex Xie's 3 merged OpenTollGate PRs now have direct links; the BlueWallet translation claim is linked as pre-Code Orange history -- PRs opened or merged since 12 July are pending the Verifier's scope review (run the tool with `--since 2026-07-12`) +- Added 25 PRs merged since the 12 July cutoff (Peter: 12 kernel-node + rust-bitcoinkernel #213; Chaitika: 8 shroud; Arowolo: 3 Mostro; Gradale: rust-bitcoin #6387) and 17 open ones, applying *How We Count*. Excluded as out of scope: Stellar, Cardano and Docker projects, plus two repos whose Bitcoin relevance couldn't be confirmed (Talent-Index/tangaza, beebozy/fiber-diagnostics) +- Merged total 96 → 131 ### July 2026 * Full verification pass via the GitHub API: every merged PR now carries a direct link