From 2fa311d58319e6d456448de2c0e43148b7c5adf1 Mon Sep 17 00:00:00 2001 From: Code Orange Devs Date: Tue, 29 Sep 2026 12:04:14 +0800 Subject: [PATCH] Accuracy cleanup: exact counts from links, remove self-merged PRs, add self-merge check - Summary is now computed from the links (no '+' estimates); predictions, highlights and unlinked claims removed - Remove 9 PRs self-merged into the author's own orgs (How We Count already excluded these); one contributor's entries removed - verify_dashboard.py fails CI on self-merged / own-repo PRs Co-Authored-By: Claude Opus 5.5 --- README.md | 83 ++++++++++----------------------------- tools/verify_dashboard.py | 21 +++++++++- 2 files changed, 39 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index d16fc70..88233f9 100644 --- a/README.md +++ b/README.md @@ -2,22 +2,22 @@ > **Tracking every pull request by Code Orange community members to Bitcoin open-source projects.** > -> Last updated: 26 September 2026 (full re-verification with `tools/verify_dashboard.py`) | Checked weekly by CI +> Last updated: 29 September 2026 | Link states checked weekly by CI (`tools/verify_dashboard.py`) --- ## Summary +Counted from the links below on 29 September 2026. Every number here is a count of linked PRs, nothing else. + | Metric | Count | | --- | --- | -| **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** | +| **Merged PRs (each linked below)** | **94** (5 of these predate the author joining Code Orange, marked *) | +| **Open PRs (each linked below)** | **17** | +| **Distinct repositories with a merged PR** | **29** | +| **Contributors with a merged PR** | **11** | -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. +A PR listed here is the work of its author. Listing it records that the author is part of the Code Orange community; it doesn't claim Code Orange wrote, directed or caused it. --- @@ -27,18 +27,15 @@ This dashboard is Code Orange's public source for **current PR output**. Histori | Field | Rule | | --- | --- | -| **Reporting cutoff** | Full link-level verification through **26 September 2026**. | +| **Reporting cutoff** | Link-level verification through **29 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. | | **Metric owner** | The named Code Orange **PR Verifier**, recorded in the weekly operating scorecard. | | **Cadence** | Verify state changes weekly; publish this dashboard's refreshed public snapshot monthly, with the cutoff date shown. | -**Counting note:** the 96 merged total is the sum of the linked developer rows below. The table also contains one prospective contributor whose GitHub handle is pending; that person is not included in the four verified emerging contributors. - --- -## Merged Pull Requests by Developer (131) +## Merged Pull Requests by Developer (94) ### Peter ([@pzafonte](https://github.com/pzafonte)) - 30 merged | Project | PR | Date | @@ -61,19 +58,9 @@ 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)) - 28 merged (2026) +### Diegodev ([@0xlaga](https://github.com/0xlaga)) - 5 merged | Project | PR | Date | | --- | --- | --- | -| 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). - -### Diegodev ([@0xlaga](https://github.com/0xlaga)) - 14 merged -| Project | PR | Date | -| --- | --- | --- | -| LN gossip-observer visuals | [#20](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/20) · [#10](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/10) · [#9](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/9) · [#8](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/8) · [#7](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/7) · [#6](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/6) · [#5](https://github.com/bitcoin-visuals/LN_gossip_observer_visuals/pull/5) | Mar–Apr 2026 | -| BINST pilot | [#2](https://github.com/Bitcoin-Institutions/binst-pilot/pull/2) · [#1](https://github.com/Bitcoin-Institutions/binst-pilot/pull/1) | Mar 2026 | | Master Bitcoin From Command Line (Librería de Satoshi) | [#91](https://github.com/LibreriadeSatoshi/Master-Bitcoin-From-Command-Line/pull/91) · [#90](https://github.com/LibreriadeSatoshi/Master-Bitcoin-From-Command-Line/pull/90) · [#89](https://github.com/LibreriadeSatoshi/Master-Bitcoin-From-Command-Line/pull/89) · [#66](https://github.com/LibreriadeSatoshi/Master-Bitcoin-From-Command-Line/pull/66) · [#65](https://github.com/LibreriadeSatoshi/Master-Bitcoin-From-Command-Line/pull/65) | Feb–Mar 2026 | ### Dayvvo ([@dayvvo](https://github.com/dayvvo)) - 9 merged @@ -95,7 +82,6 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht | bitcointranscripts | [#615](https://github.com/bitcointranscripts/bitcointranscripts/pull/615) | Mar 2026 | | Saving Satoshi | [#19](https://github.com/saving-satoshi/saving-satoshi-script/pull/19) | Apr 2026 | - ### Muhammad ([@muhahahmad68](https://github.com/muhahahmad68)) - 8 merged | Project | PR | Date | @@ -105,7 +91,7 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht | **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 | +| SeedSigner (a maintainer's fork, kdmukai/seedsigner) | [#12](https://github.com/kdmukai/seedsigner/pull/12) | Apr 2026 | ### Razor ([@RazorBest](https://github.com/RazorBest)) - 6 merged | Project | PR | Date | @@ -138,15 +124,9 @@ Plus 2025 Silent Payments work at the Bitshala Incubator: [silent-pay-wallet](ht | --- | --- | --- | | **rust-payjoin** | [#1589](https://github.com/payjoin/rust-payjoin/pull/1589) | May 2026 | -### Claimed, not yet linked -| Developer | Project | Note | -| --- | --- | --- | -| 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 (24) +## Open / Under Review (17) Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. @@ -154,49 +134,26 @@ Link states re-verified 26 September 2026 with `tools/verify_dashboard.py`. | --- | --- | --- | | 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) | | 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) | --- -## Emerging Contributors (First PR Imminent) - -Four contributors below have verified GitHub handles and are included in the summary. The prospective entry is retained for pipeline follow-up but excluded until its handle and target are confirmed. - -| Developer | GitHub | Target Project | Expected | -| --- | --- | --- | --- | -| Captain Levi | [@SIDHARTH20K4](https://github.com/SIDHARTH20K4) | BDK | Q3 2026 | -| 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 | -| Mr Miyagi | *(handle pending)* | Rust Bitcoin OSS | Q3 2026 | - ---- - -## Monthly Tracking Log +## Change 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 (+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 -- 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 +- 29 Sep: removed one contributor's entries; removed PRs that were self-merged into the author's own orgs (which *How We Count* excludes); all totals recomputed from the remaining links (94 merged, 17 open) +- 26 Sep: re-checked every link against GitHub with `tools/verify_dashboard.py` (now run weekly by CI). PRs listed as open that had merged were moved to merged; PRs closed without merging were removed from the open list; PRs merged or opened since 12 July were added where they meet *How We Count* ### 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. -* Newly verified merges since the May report: Arowolo's first rust-payjoin PR (#1659), Mwihoti's first rust-payjoin PR (#1589), Peter's Bitcoin Core #34885 + kernel-node series, Psychemist's LDK #4293, Muhammad's rust-bitcoin/Floresta/bdk_wallet run, Razor's peer-observer #400 & #408, Chaitika's 17 shroud merges -* Attribution note added: PRs made before a developer joined Code Orange (e.g. Dayvvo's 2024 work) are marked with * and excluded from program-outcome claims +- Link-level verification: every merged PR carries a direct link. Pre-Code Orange PRs marked with * ### April 2026 -* Dashboard created with baseline data from all cohort graduates +- Dashboard created --- @@ -205,9 +162,9 @@ Four contributors below have verified GitHub handles and are included in the sum * **Merged**: PR accepted by the project maintainer - *direct PR link required, no exceptions* * **Open / Under Review**: PR submitted, not yet merged or closed * We count: Bitcoin Core, rust-bitcoin, BDK, LDK, rust-payjoin, Floresta, peer-observer, wallets, Lightning/eCash infrastructure, and Bitcoin education repos (marked as such) -* We do NOT count: PRs to a developer's own repos or forks, or non-Bitcoin projects +* We do NOT count: PRs to a developer's own repos, orgs or forks (including PRs they merged themselves), or non-Bitcoin projects * PRs made before a member joined Code Orange are listed with * and excluded from program-outcome claims --- -*Updated monthly. Code Orange Dev School | [codeorange.dev](https://codeorange.dev) | [github.com/code-orange-dev](https://github.com/code-orange-dev)* +*Code Orange Dev School | [codeorange.dev](https://codeorange.dev) | [github.com/code-orange-dev](https://github.com/code-orange-dev)* diff --git a/tools/verify_dashboard.py b/tools/verify_dashboard.py index fab3eec..fe34a56 100644 --- a/tools/verify_dashboard.py +++ b/tools/verify_dashboard.py @@ -8,7 +8,8 @@ python3 tools/verify_dashboard.py --out report.md It checks, without changing README.md: - 1. every PR in "Merged Pull Requests" is actually merged + 1. every PR in "Merged Pull Requests" is actually merged, and was not + merged by its own author or into the author's own account 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 @@ -101,19 +102,27 @@ def parse(text): return devs, merged, opened, int(header_total.group(1)) if header_total else None, handles +SELF_MERGED = set() # merged by their own author, or in the author's own account: not countable + + 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 }} }}' + f'p{j}: repository(owner: "{o}", name: "{r}") {{ owner {{ login }} pullRequest(number: {n}) {{ state mergedAt url author {{ login }} mergedBy {{ login }} }} }}' 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" + repo = data.get(f"p{j}") or {} + if node and node.get("author") and node.get("mergedBy"): + author = node["author"]["login"].lower() + if author == node["mergedBy"]["login"].lower() or author == repo["owner"]["login"].lower(): + SELF_MERGED.add(pr) return states @@ -158,6 +167,14 @@ def main(): out.append(f"- ❌ {n}: {fmt(pr)} is **{st}**, not merged") problems += len(bad) + selfm = [(n, pr) for n, pr in merged if pr in SELF_MERGED] + if selfm: + out.append("") + out.append(f"## Self-merged or own-repo PRs in the merged section: {len(selfm)} (How We Count excludes these)") + for n, pr in selfm: + out.append(f"- ❌ {n}: {fmt(pr)}") + problems += len(selfm) + out += ["", "## Per-developer counts"] recount = 0 for d in devs: