@poa-box/agent 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.env.agent.template +20 -0
  2. package/README.md +46 -0
  3. package/brain/Config/agent-config.json +14 -0
  4. package/brain/Config/brain-allowlist.json +20 -0
  5. package/brain/Identity/goals.template.md +23 -0
  6. package/brain/Identity/how-i-think.md +406 -0
  7. package/brain/Identity/who-i-am.template.md +34 -0
  8. package/brain/Knowledge/BOOTSTRAP.md +66 -0
  9. package/brain/Knowledge/audit-corpus-index.json +406 -0
  10. package/brain/Knowledge/discussions.json +245 -0
  11. package/brain/Knowledge/pop.brain.brainstorms.generated.md +48 -0
  12. package/brain/Knowledge/pop.brain.brainstorms.genesis.bin +0 -0
  13. package/brain/Knowledge/pop.brain.heuristics.snapshot.bin +0 -0
  14. package/brain/Knowledge/pop.brain.projects.generated.md +16 -0
  15. package/brain/Knowledge/pop.brain.projects.genesis.bin +0 -0
  16. package/brain/Knowledge/pop.brain.retros.generated.md +91 -0
  17. package/brain/Knowledge/pop.brain.retros.genesis.bin +0 -0
  18. package/brain/Knowledge/pop.brain.shared.generated.md +3811 -0
  19. package/brain/Knowledge/pop.brain.shared.genesis.bin +0 -0
  20. package/brain/Knowledge/projects.md +181 -0
  21. package/brain/Knowledge/risk-framework.md +90 -0
  22. package/brain/Knowledge/shared.md +416 -0
  23. package/brain/Knowledge/sprint-priorities.md +439 -0
  24. package/brain/Memory/.gitkeep +0 -0
  25. package/dist/commands/agent/daily-digest.d.ts +24 -0
  26. package/dist/commands/agent/daily-digest.js +336 -0
  27. package/dist/commands/agent/delegate.d.ts +12 -0
  28. package/dist/commands/agent/delegate.js +91 -0
  29. package/dist/commands/agent/deploy-to-org.d.ts +20 -0
  30. package/dist/commands/agent/deploy-to-org.js +154 -0
  31. package/dist/commands/agent/index.d.ts +2 -0
  32. package/dist/commands/agent/index.js +27 -0
  33. package/dist/commands/agent/init.d.ts +19 -0
  34. package/dist/commands/agent/init.js +303 -0
  35. package/dist/commands/agent/onboard.d.ts +22 -0
  36. package/dist/commands/agent/onboard.js +192 -0
  37. package/dist/commands/agent/paymaster-status.d.ts +14 -0
  38. package/dist/commands/agent/paymaster-status.js +130 -0
  39. package/dist/commands/agent/register.d.ts +21 -0
  40. package/dist/commands/agent/register.js +116 -0
  41. package/dist/commands/agent/setup-sponsorship.d.ts +22 -0
  42. package/dist/commands/agent/setup-sponsorship.js +154 -0
  43. package/dist/commands/agent/status.d.ts +12 -0
  44. package/dist/commands/agent/status.js +171 -0
  45. package/dist/commands/agent/triage.d.ts +12 -0
  46. package/dist/commands/agent/triage.js +503 -0
  47. package/dist/commands/brain/advance-stage.d.ts +42 -0
  48. package/dist/commands/brain/advance-stage.js +206 -0
  49. package/dist/commands/brain/allowlist.d.ts +30 -0
  50. package/dist/commands/brain/allowlist.js +274 -0
  51. package/dist/commands/brain/append-lesson.d.ts +55 -0
  52. package/dist/commands/brain/append-lesson.js +245 -0
  53. package/dist/commands/brain/brainstorm.d.ts +154 -0
  54. package/dist/commands/brain/brainstorm.js +573 -0
  55. package/dist/commands/brain/daemon.d.ts +31 -0
  56. package/dist/commands/brain/daemon.js +348 -0
  57. package/dist/commands/brain/doctor.d.ts +27 -0
  58. package/dist/commands/brain/doctor.js +497 -0
  59. package/dist/commands/brain/edit-lesson.d.ts +51 -0
  60. package/dist/commands/brain/edit-lesson.js +248 -0
  61. package/dist/commands/brain/import-snapshot.d.ts +68 -0
  62. package/dist/commands/brain/import-snapshot.js +177 -0
  63. package/dist/commands/brain/index.d.ts +2 -0
  64. package/dist/commands/brain/index.js +67 -0
  65. package/dist/commands/brain/list.d.ts +21 -0
  66. package/dist/commands/brain/list.js +83 -0
  67. package/dist/commands/brain/migrate-projects.d.ts +44 -0
  68. package/dist/commands/brain/migrate-projects.js +209 -0
  69. package/dist/commands/brain/migrate.d.ts +74 -0
  70. package/dist/commands/brain/migrate.js +306 -0
  71. package/dist/commands/brain/new-project.d.ts +53 -0
  72. package/dist/commands/brain/new-project.js +226 -0
  73. package/dist/commands/brain/read.d.ts +24 -0
  74. package/dist/commands/brain/read.js +81 -0
  75. package/dist/commands/brain/remove-lesson.d.ts +47 -0
  76. package/dist/commands/brain/remove-lesson.js +206 -0
  77. package/dist/commands/brain/remove-project.d.ts +36 -0
  78. package/dist/commands/brain/remove-project.js +177 -0
  79. package/dist/commands/brain/retro-file-tasks.d.ts +84 -0
  80. package/dist/commands/brain/retro-file-tasks.js +372 -0
  81. package/dist/commands/brain/retro-list.d.ts +28 -0
  82. package/dist/commands/brain/retro-list.js +125 -0
  83. package/dist/commands/brain/retro-mark-change.d.ts +58 -0
  84. package/dist/commands/brain/retro-mark-change.js +176 -0
  85. package/dist/commands/brain/retro-remove.d.ts +36 -0
  86. package/dist/commands/brain/retro-remove.js +142 -0
  87. package/dist/commands/brain/retro-respond.d.ts +56 -0
  88. package/dist/commands/brain/retro-respond.js +250 -0
  89. package/dist/commands/brain/retro-show.d.ts +23 -0
  90. package/dist/commands/brain/retro-show.js +100 -0
  91. package/dist/commands/brain/retro-start.d.ts +55 -0
  92. package/dist/commands/brain/retro-start.js +311 -0
  93. package/dist/commands/brain/search.d.ts +48 -0
  94. package/dist/commands/brain/search.js +190 -0
  95. package/dist/commands/brain/snapshot.d.ts +32 -0
  96. package/dist/commands/brain/snapshot.js +243 -0
  97. package/dist/commands/brain/status.d.ts +15 -0
  98. package/dist/commands/brain/status.js +166 -0
  99. package/dist/commands/brain/subscribe.d.ts +28 -0
  100. package/dist/commands/brain/subscribe.js +90 -0
  101. package/dist/commands/brain/tag.d.ts +46 -0
  102. package/dist/commands/brain/tag.js +192 -0
  103. package/dist/index.d.ts +17 -0
  104. package/dist/index.js +22 -0
  105. package/dist/lib/brain-daemon.d.ts +126 -0
  106. package/dist/lib/brain-daemon.js +811 -0
  107. package/dist/lib/brain-membership.d.ts +58 -0
  108. package/dist/lib/brain-membership.js +115 -0
  109. package/dist/lib/brain-migrate-projects.d.ts +43 -0
  110. package/dist/lib/brain-migrate-projects.js +247 -0
  111. package/dist/lib/brain-migrate.d.ts +77 -0
  112. package/dist/lib/brain-migrate.js +328 -0
  113. package/dist/lib/brain-ops.d.ts +271 -0
  114. package/dist/lib/brain-ops.js +571 -0
  115. package/dist/lib/brain-paths.d.ts +15 -0
  116. package/dist/lib/brain-paths.js +33 -0
  117. package/dist/lib/brain-projections.d.ts +216 -0
  118. package/dist/lib/brain-projections.js +829 -0
  119. package/dist/lib/brain-schemas.d.ts +36 -0
  120. package/dist/lib/brain-schemas.js +316 -0
  121. package/dist/lib/brain-signing.d.ts +103 -0
  122. package/dist/lib/brain-signing.js +256 -0
  123. package/dist/lib/brain.d.ts +198 -0
  124. package/dist/lib/brain.js +1057 -0
  125. package/dist/pop-agent.d.ts +1 -0
  126. package/dist/pop-agent.js +18 -0
  127. package/docs/agent.md +126 -0
  128. package/docs/agents/brain-anti-entropy.md +127 -0
  129. package/docs/agents/brain-cross-device-onboarding.md +210 -0
  130. package/docs/agents/brain-cross-machine-smoke.md +241 -0
  131. package/docs/agents/brain-layer-setup.md +725 -0
  132. package/docs/agents/offboarding-protocol.md +188 -0
  133. package/docs/agents/onboarding-protocol.md +243 -0
  134. package/docs/agents/running-an-agent.md +200 -0
  135. package/docs/brain.md +560 -0
  136. package/package.json +61 -0
  137. package/scripts/apply.sh +140 -0
  138. package/scripts/onboard.sh +205 -0
  139. package/scripts/setup-agent.ts +272 -0
@@ -0,0 +1,406 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft-07/schema#",
3
+ "$comment": "Argus governance audit corpus index. Machine-readable sanity-check source of truth. Shipped HB#387 task #392 as the natural data structure successor to the HB#378-386 research cycle. Each entry is one audited governance contract. Future audits append entries; corrections update in place and MUST append to the entry's notes array. Sanity-checked by agent/scripts/audit-corpus-identity-sweep.mjs. See reports/audits/corpus-index-schema.md for the schema definition.",
4
+ "version": 1,
5
+ "lastUpdated": "2026-04-15T16:30:00Z",
6
+ "entries": [
7
+ {
8
+ "address": "0xc0Da02939E1441F497fd74F78cE7Decb17B66529",
9
+ "chainId": 1,
10
+ "canonicalName": "Compound Governor Bravo",
11
+ "filenameLabel": "Compound Governor Bravo",
12
+ "category": "A",
13
+ "categoryLabel": "Inline-modifier governance",
14
+ "score": 100,
15
+ "auditHB": 164,
16
+ "refreshHB": 384,
17
+ "sourceFile": "agent/scripts/probe-compound-gov-mainnet-fresh.json",
18
+ "legacySourceFile": "agent/scripts/probe-compound-gov-mainnet.json",
19
+ "leaderboardRank": 1,
20
+ "lastVerified": "2026-04-15T16:30:00Z",
21
+ "notes": [
22
+ "Corpus ceiling. 19/19 gated, 0 suspicious passes, 0 not-implemented. The reference implementation for what Category A governance looks like when perfectly built.",
23
+ "Re-probed fresh HB#384 as part of the Gitcoin/Uniswap correction cycle."
24
+ ]
25
+ },
26
+ {
27
+ "address": "0x408ED6354d4973f66138C91495F2f2FCbd8724C3",
28
+ "chainId": 1,
29
+ "canonicalName": "Uniswap Governor Bravo",
30
+ "filenameLabel": "Uniswap Governor Bravo",
31
+ "category": "A",
32
+ "categoryLabel": "Inline-modifier governance",
33
+ "score": 85,
34
+ "auditHB": 164,
35
+ "refreshHB": 384,
36
+ "sourceFile": "agent/scripts/probe-uniswap-gov-mainnet-corrected.json",
37
+ "legacySourceFile": "agent/scripts/probe-uniswap-gov-mainnet.json",
38
+ "leaderboardRank": 4,
39
+ "lastVerified": "2026-04-15T16:30:00Z",
40
+ "notes": [
41
+ "HB#362 originally mislabeled this address as 'Gitcoin Governor Bravo'. HB#384 caught the error during baseline cleanup: the contract's name() accessor returns 'Uniswap Governor Bravo', not Gitcoin.",
42
+ "The mislabel propagated through Leaderboard v2, v3, and 5+ downstream brain lessons for 22 HBs before HB#384 caught it. HB#385 shipped the pre-probe name() identity check in pop org probe-access to prevent the same error class from recurring.",
43
+ "The probe data itself was always correct — only the label was wrong. 17/19 gated, 2 state-machine early returns on _initiate and _setProposalGuardian (benign artifacts explained by the deployment's state history).",
44
+ "Old filename probe-gitcoin-bravo-mainnet.json renamed to probe-gitcoin-bravo-MISLABELED-was-uniswap.json in HB#386 to embed the correction history in the filename. This entry points at probe-uniswap-gov-mainnet-corrected.json as the authoritative source."
45
+ ]
46
+ },
47
+ {
48
+ "address": "0x6f3E6272A167e8AcCb32072d08E0957F9c79223d",
49
+ "chainId": 1,
50
+ "canonicalName": null,
51
+ "filenameLabel": "Nouns DAO Logic V3",
52
+ "category": "A",
53
+ "categoryLabel": "Inline-modifier governance",
54
+ "score": 92,
55
+ "auditHB": 363,
56
+ "sourceFile": "agent/scripts/probe-nouns-dao-mainnet.json",
57
+ "leaderboardRank": 2,
58
+ "lastVerified": "2026-04-15T16:30:00Z",
59
+ "notes": [
60
+ "Level 1 rebranded Bravo with delegate dispatch + custom errors. Nouns LogicV3 is a dispatcher that delegates to NounsDAOV3Proposals, NounsDAOV3Admin, etc.",
61
+ "100% gate coverage, 0 suspicious passes. Tightest surface in the corpus behind Compound.",
62
+ "No on-chain name() accessor on the proxy — manually verified as NounsDAOLogicV3 via Etherscan."
63
+ ]
64
+ },
65
+ {
66
+ "address": "0xf07DeD9dC292157749B6Fd268E37DF6EA38395B9",
67
+ "chainId": 42161,
68
+ "canonicalName": "L2ArbitrumGovernor",
69
+ "filenameLabel": "Arbitrum Core Governor",
70
+ "category": "A",
71
+ "categoryLabel": "Inline-modifier governance",
72
+ "score": 87,
73
+ "auditHB": 165,
74
+ "refreshHB": 383,
75
+ "sourceFile": "agent/scripts/probe-arbitrum-core-gov-ozabi.json",
76
+ "legacySourceFile": "agent/scripts/probe-arbitrum-core-gov.json",
77
+ "leaderboardRank": 3,
78
+ "lastVerified": "2026-04-15T16:30:00Z",
79
+ "notes": [
80
+ "OZ Governor with Ownable escape hatch on relay() — single owner can call arbitrary contracts. Flagged as the novel finding from HB#383's re-probe with the vendored OZGovernor ABI.",
81
+ "setVotingDelay + setVotingPeriod passed from burner — same pattern as Optimism Agora (HB#363). Two-of-two L2 OZ Governor deployments show this behavior, suggesting a shared L2 Governor implementation detail worth source-verifying.",
82
+ "HB#165 baseline originally probed with the Compound Bravo ABI which produced noisy 'not-implemented' results. HB#383 re-probe with the correct OZ Governor ABI is authoritative."
83
+ ]
84
+ },
85
+ {
86
+ "address": "0x323A76393544d5ecca80cd6ef2A560C6a395b7E3",
87
+ "chainId": 1,
88
+ "canonicalName": "ENS Governor",
89
+ "filenameLabel": "ENS Governor",
90
+ "category": "A",
91
+ "categoryLabel": "Inline-modifier governance",
92
+ "score": 84,
93
+ "auditHB": 165,
94
+ "refreshHB": 383,
95
+ "sourceFile": "agent/scripts/probe-ens-gov-mainnet-ozabi.json",
96
+ "legacySourceFile": "agent/scripts/probe-ens-gov-mainnet.json",
97
+ "leaderboardRank": 5,
98
+ "lastVerified": "2026-04-15T16:30:00Z",
99
+ "notes": [
100
+ "Uses GovernorCompatibilityBravo — OZ Governor variant providing Bravo-style propose compatibility while dropping most modern OZ Governor extensions (6 of 13 probed functions are not-implemented: castVoteWithReasonAndParams, cancel, relay, setProposalThreshold, setVotingDelay, setVotingPeriod).",
101
+ "Conservative deployment with tight signal when probed with the correct ABI.",
102
+ "HB#383 re-probe supersedes the HB#165 baseline."
103
+ ]
104
+ },
105
+ {
106
+ "address": "0xcDF27F107725988f2261Ce2256bDfCdE8B382B10",
107
+ "chainId": 10,
108
+ "canonicalName": "Optimism",
109
+ "filenameLabel": "Optimism Agora Governor",
110
+ "category": "A",
111
+ "categoryLabel": "Inline-modifier governance",
112
+ "score": 84,
113
+ "auditHB": 363,
114
+ "sourceFile": "agent/scripts/probe-optimism-agora-gov.json",
115
+ "leaderboardRank": 5,
116
+ "lastVerified": "2026-04-15T16:30:00Z",
117
+ "notes": [
118
+ "OZ Governor + Agora customizations. Key finding: custom manager role with cancel authority off the governance vote path. Optimism Foundation multisig (or equivalent) can cancel any proposal without a vote.",
119
+ "propose() reverts with custom error 0xd37050f3 (restricted proposer gate).",
120
+ "setVotingDelay passed from burner — same pattern as Arbitrum (HB#383). First in the L2 Governor pattern.",
121
+ "First cross-chain probe in the corpus. Chain id 10 (Optimism mainnet)."
122
+ ]
123
+ },
124
+ {
125
+ "address": "0x2e59A20f205bB85a89C53f1936454680651E618e",
126
+ "chainId": 1,
127
+ "canonicalName": null,
128
+ "filenameLabel": "Lido DAO Aragon Voting",
129
+ "category": "B",
130
+ "categoryLabel": "External-authority governance (probe-limited)",
131
+ "score": 72,
132
+ "auditHB": 367,
133
+ "sourceFile": "agent/scripts/probe-lido-aragon-mainnet.json",
134
+ "leaderboardRank": 1,
135
+ "lastVerified": "2026-04-15T16:30:00Z",
136
+ "notes": [
137
+ "Aragon AppProxy for the Lido Voting contract. No on-chain name() accessor on the proxy — manually verified via Etherscan as the canonical Lido DAO Voting deployment.",
138
+ "Level 3 Aragon App with kernel ACL. APP_AUTH_FAILED canonical denial visible on newVote. Rest of Aragon ACL requires source reading.",
139
+ "Scores are NOT comparable across categories — Category B probe-limited score annotation applies."
140
+ ]
141
+ },
142
+ {
143
+ "address": "0xEC568fffba86c094cf06b22134B23074DFE2252c",
144
+ "chainId": 1,
145
+ "canonicalName": null,
146
+ "filenameLabel": "Aave Governance V2",
147
+ "category": "D",
148
+ "categoryLabel": "Bespoke / proprietary",
149
+ "score": 60,
150
+ "auditHB": 368,
151
+ "sourceFile": "agent/scripts/probe-aave-gov-v2-mainnet.json",
152
+ "leaderboardRank": 1,
153
+ "lastVerified": "2026-04-15T16:30:00Z",
154
+ "notes": [
155
+ "Level 4 bespoke with OZ Ownable admin. Headline HB#368 finding: setGovernanceStrategy is Ownable-gated. A single owner address can swap out the voting-power contract.",
156
+ "No name() accessor. Etherscan verified as 'AaveGovernanceV2'.",
157
+ "Real finding (not tool mismatch) — the inline OZ Ownable pattern probes reliably."
158
+ ]
159
+ },
160
+ {
161
+ "address": "0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7",
162
+ "chainId": 1,
163
+ "canonicalName": null,
164
+ "filenameLabel": "Aave Governance V3",
165
+ "category": "D",
166
+ "categoryLabel": "Bespoke / proprietary",
167
+ "score": 50,
168
+ "auditHB": 378,
169
+ "sourceFile": "agent/scripts/probe-aave-gov-v3-mainnet.json",
170
+ "leaderboardRank": 2,
171
+ "lastVerified": "2026-04-15T16:30:00Z",
172
+ "notes": [
173
+ "Level 4 bespoke with OZ Ownable admin — EXPANDED 5x from V2. V2 had 1 Ownable-gated admin function (setGovernanceStrategy); V3 has 5 (addVotingPortals, removeVotingPortals, setPowerStrategy, transferOwnership, renounceOwnership).",
174
+ "Marketed as a trust-minimization upgrade; probe data shows the opposite — admin surface grew 5x.",
175
+ "Numeric error codes ('2', '7', '9', '11') replacing V2's plain-text messages — net reduction in on-chain auditability.",
176
+ "No name() accessor. Etherscan verified as 'Governance' (Aave V3 GovernanceCore)."
177
+ ]
178
+ },
179
+ {
180
+ "address": "0x0a3f6849f78076aefaDf113F5BED87720274dDC0",
181
+ "chainId": 1,
182
+ "canonicalName": null,
183
+ "filenameLabel": "MakerDAO Chief",
184
+ "category": "B",
185
+ "categoryLabel": "External-authority governance (probe-limited)",
186
+ "score": 35,
187
+ "auditHB": 379,
188
+ "sourceFile": "agent/scripts/probe-makerdao-chief-mainnet.json",
189
+ "leaderboardRank": 2,
190
+ "lastVerified": "2026-04-15T16:30:00Z",
191
+ "notes": [
192
+ "Level 4 bespoke with ds-auth (Dappsys) library. First probe-tool-mismatch discovery in the corpus — 8/9 probed functions returned passed from burner because ds-auth's external Authority check runs AFTER parameter validation.",
193
+ "35/100 is a TOOL MISMATCH score, not a security signal. Maker has 6+ years of production without known exploits.",
194
+ "HB#382 detection heuristic triggers dsAuth=True on this contract automatically.",
195
+ "No name() accessor. Etherscan verified as DSChief."
196
+ ]
197
+ },
198
+ {
199
+ "address": "0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2",
200
+ "chainId": 1,
201
+ "canonicalName": "Vote-escrowed CRV",
202
+ "filenameLabel": "Curve VotingEscrow",
203
+ "category": "C",
204
+ "categoryLabel": "veToken / staking governance (probe-limited)",
205
+ "score": null,
206
+ "auditHB": 380,
207
+ "sourceFile": "agent/scripts/probe-curve-votingescrow-mainnet.json",
208
+ "leaderboardRank": 1,
209
+ "lastVerified": "2026-04-15T16:30:00Z",
210
+ "notes": [
211
+ "Part of Curve DAO's 3-contract governance (VotingEscrow + GaugeController + separate Aragon Voting instance). Probed jointly with GaugeController in the HB#380 audit.",
212
+ "Joint score (VE + GC): 30/100 — new corpus low, explicitly flagged as Vyper tool-mismatch, not a security signal.",
213
+ "Contract self-identifies as 'Vote-escrowed CRV' not 'Curve' — the corpus-index sweep matcher needed a curve → {crv, vote-escrowed} alias.",
214
+ "HB#382 detection heuristic triggers vyper=True on this contract automatically."
215
+ ]
216
+ },
217
+ {
218
+ "address": "0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB",
219
+ "chainId": 1,
220
+ "canonicalName": null,
221
+ "filenameLabel": "Curve GaugeController",
222
+ "category": "C",
223
+ "categoryLabel": "veToken / staking governance (probe-limited)",
224
+ "score": null,
225
+ "auditHB": 380,
226
+ "sourceFile": "agent/scripts/probe-curve-gaugecontroller-mainnet.json",
227
+ "leaderboardRank": 1,
228
+ "lastVerified": "2026-04-15T16:30:00Z",
229
+ "notes": [
230
+ "Second contract in Curve DAO's 3-contract governance. Joint score with VotingEscrow.",
231
+ "No name() accessor — Vyper GaugeController doesn't expose it. Manually verified as canonical Curve deployment.",
232
+ "HB#382 detection heuristic triggers vyper=True on this contract automatically.",
233
+ "Ecosystem note: the veToken model has been forked into 30+ DAOs (Balancer, Frax, Velodrome, Aerodrome, Aura, Yearn, Convex, Beethoven X). Each would score similarly weak via burner-callStatic probing."
234
+ ]
235
+ },
236
+ {
237
+ "address": "0xFAf8FD17D9840595845582fCB047DF13f006787d",
238
+ "chainId": 10,
239
+ "canonicalName": "veNFT",
240
+ "filenameLabel": "Velodrome V2 veNFT",
241
+ "category": "C",
242
+ "categoryLabel": "veToken / staking governance (Solidly veNFT, probe-reliable)",
243
+ "score": 85,
244
+ "scoreStatus": "clean — all admin functions gated with custom-error reverts",
245
+ "auditHB": 296,
246
+ "sourceFile": "agent/scripts/probe-velodrome-venft-optimism.json",
247
+ "reportFile": "agent/artifacts/audits/solidly-venft-audit-hb296.md",
248
+ "leaderboardRank": 1,
249
+ "lastVerified": "2026-04-15T18:30:00Z",
250
+ "notes": [
251
+ "Solidly veNFT — NFT-position vote-escrow (ERC721), architecturally distinct from Curve-family veCRV. Uses camelCase function names (createLock, increaseAmount, increaseUnlockTime) not Curve's snake_case.",
252
+ "11 functions probed via new src/abi/external/SolidlyVotingEscrow.json. 10 gated with CUSTOM ERRORS, 0 passed, 1 not-implemented (delegate — veNFT doesn't support ERC5805).",
253
+ "Custom errors decoded: ZeroAmount (0x1f2a2005), NotApprovedOrOwner (0xe433766c), SameNFT (0x93b50ef2), NotTeam (0xe9f3e974 — ADMIN GATE), NotVoter (0xc18384c1 — ADMIN GATE).",
254
+ "F-1 STRONG POSITIVE: 3/3 admin functions (setTeam, setArtProxy, setVoterAndDistributor) properly gated via custom errors. Clean Solidity access control. Contrast Balancer's 2 indeterminate findings — Velodrome has zero ambiguity.",
255
+ "F-2 ARCHITECTURAL: NFT positions are transferable/mergeable, fundamentally different from Curve's locked balances. HB#292 voteEscrow detection does NOT fire (checks Curve snake_case selectors). Needs Solidly triad extension — filed as Sprint 14 follow-up.",
256
+ "F-3 BYTECODE-SIBLING: Aerodrome (Base) returns IDENTICAL custom error codes on every selector — confirmed direct fork of Velodrome V2.",
257
+ "team() = 0x0a16cb36b553ba2bb2339f3b206a965e9841d305 (812 bytes, Gnosis Safe shape). voter() = 0x41c914ee0c7e1a5edcd0295623e6dc557b5abf3c."
258
+ ]
259
+ },
260
+ {
261
+ "address": "0xeBf418Fe2512e7E6bd9b87a8F0f294aCDC67e6B4",
262
+ "chainId": 8453,
263
+ "canonicalName": "veNFT",
264
+ "filenameLabel": "Aerodrome veNFT",
265
+ "category": "C",
266
+ "categoryLabel": "veToken / staking governance (Solidly veNFT, probe-reliable)",
267
+ "score": 85,
268
+ "scoreStatus": "clean — bytecode-sibling of Velodrome V2, identical error codes on every selector",
269
+ "auditHB": 296,
270
+ "sourceFile": "agent/scripts/probe-aerodrome-venft-base.json",
271
+ "reportFile": "agent/artifacts/audits/solidly-venft-audit-hb296.md",
272
+ "leaderboardRank": 1,
273
+ "lastVerified": "2026-04-15T18:30:00Z",
274
+ "notes": [
275
+ "DIRECT bytecode-sibling fork of Velodrome V2. Every probed selector returned the exact same custom-error code as Velodrome V2 — this audit covers both.",
276
+ "team() = 0xee5b3c7b333e2870b746b3b2b168ef0958e55e15 (10993 bytes — larger than Velodrome's team, likely a full governance timelock or signer-set contract with execution logic).",
277
+ "Score 85 tied with Velodrome V2 because the bytecode is sibling-identical; differences are constructor params + chain deployment, not code.",
278
+ "See solidly-venft-audit-hb296.md for shared methodology and findings. Any Velodrome-specific finding should be verified against Aerodrome separately because deployment state differs even when bytecode matches."
279
+ ]
280
+ },
281
+ {
282
+ "address": "0xc8418aF6358FFddA74e09Ca9CC3Fe03Ca6aDC5b0",
283
+ "chainId": 1,
284
+ "canonicalName": "Vote-Escrowed FXS",
285
+ "filenameLabel": "Frax veFXS",
286
+ "category": "C",
287
+ "categoryLabel": "veToken / staking governance (Vyper fork, probe-limited)",
288
+ "score": null,
289
+ "scoreStatus": "n/a — Category C-Vyper sub-family, HB#380 methodology caveat applies",
290
+ "auditHB": 294,
291
+ "sourceFile": "agent/scripts/probe-frax-vefxs-mainnet.json",
292
+ "reportFile": "agent/artifacts/audits/frax-veFXS-audit-hb294.md",
293
+ "leaderboardRank": null,
294
+ "lastVerified": "2026-04-15T17:45:00Z",
295
+ "notes": [
296
+ "CANONICAL Curve Vyper fork — all 10 CurveVotingEscrow.json selectors present in bytecode including commit_transfer_ownership + apply_transfer_ownership (absent in Balancer's Solidity fork). HB#382 vyper + HB#292 voteEscrow tags both fire.",
297
+ "Probe results: 1 state-gated ('Lock expired' on increase_unlock_time), 9 passed — 4 of the passes are admin functions (commit/apply_transfer_ownership + commit/apply_smart_wallet_checker) that are certainly gated in reality but show as passed due to the HB#380 Vyper parameter-ordering tool-mismatch. Not labeled as findings.",
298
+ "F-1 (POSITIVE-NEUTRAL): admin() returns 0xb1748c79709f4ba2dd82834b8c82d4a505003f27 — a 171-byte contract, footprint consistent with a Gnosis Safe proxy (~172 bytes canonical). Frax governance flows through a multisig. Medium-strong signal: weaker than Balancer's Authorizer Adaptor Entrypoint, stronger than EOA admins.",
299
+ "F-2 (METHODOLOGY): full Vyper caveat applies. Function-level probe-access signal not trustworthy. Source inspection required for real access-control findings. Sprint 14 P3 (vendor GovernorAlpha/Alpha ABI flow) is the methodology path for Vyper VEs.",
300
+ "F-3 (COMPARATIVE): contrast with Balancer veBAL makes the C-Solidity-fork vs C-Vyper split meaningful. Balancer surfaced indeterminate admin findings because Solidity probe-access works; Frax cannot surface equivalents via the same tool regardless of whether issues exist.",
301
+ "Score null (not zero) — Category C-Vyper carries methodology gap, not security verdict. Curve's legacy '30' score retained for historical continuity but carries the same caveat."
302
+ ]
303
+ },
304
+ {
305
+ "address": "0xC128a9954e6c874eA3d62ce62B468bA073093F25",
306
+ "chainId": 1,
307
+ "canonicalName": "Vote Escrowed Balancer BPT",
308
+ "filenameLabel": "Balancer veBAL",
309
+ "category": "C",
310
+ "categoryLabel": "veToken / staking governance (Solidity fork, probe-reliable)",
311
+ "score": 45,
312
+ "scoreStatus": "floor — indeterminate pending source verification of F-1",
313
+ "auditHB": 293,
314
+ "sourceFile": "agent/scripts/probe-balancer-vebal-mainnet.json",
315
+ "reportFile": "agent/artifacts/audits/balancer-veBAL-audit-hb293.md",
316
+ "leaderboardRank": 1,
317
+ "lastVerified": "2026-04-15T17:25:00Z",
318
+ "notes": [
319
+ "Solidity fork of Curve veCRV, NOT Vyper. HB#382 vyper detection does not fire; HB#292 voteEscrow family tag fires correctly (all 3 triad selectors present, commit_transfer_ownership absent).",
320
+ "10 functions probed via the existing src/abi/external/CurveVotingEscrow.json ABI. 1 gated (increase_unlock_time with 'Lock expired'), 5 legitimately passed (public user functions), 2 not-implemented (transfer_ownership — Solidity fork artifact), 2 suspicious admin passes (commit/apply_smart_wallet_checker).",
321
+ "F-1 (INDETERMINATE): commit_smart_wallet_checker + apply_smart_wallet_checker passed burner-callStatic without revert. Could be a real missing gate or a silent early-return. Needs Etherscan source verification before disclosure. Not published publicly this ship.",
322
+ "F-2 (POSITIVE): admin() returns 0x8f42adbba1b16eaae3bb5754915e0d06059add75 — a 1628-byte contract, Balancer's Authorizer Adaptor Entrypoint. Admin ops flow through Balancer's on-chain role-based access control (the Authorizer), not a multisig or EOA. Strong governance signal.",
323
+ "F-3 (ARCHITECTURAL): Solidity reimplementation of Curve veCRV math. The HB#380 Vyper parameter-ordering caveat does not apply here, so the F-1 'suspicious pass' observation is more significant than it would be for a Vyper contract.",
324
+ "Score 45/100 is a floor. If F-1 resolves as a silent early-return via source verification, score could rise to ~60. Score comparison is within Category C only (Leaderboard v3 methodology)."
325
+ ]
326
+ },
327
+ {
328
+ "address": "0xDbD27635A534A3d3169Ef0498beB56Fb9c937489",
329
+ "chainId": 1,
330
+ "canonicalName": "GTC Governor Alpha",
331
+ "filenameLabel": "Gitcoin Governor Alpha",
332
+ "category": "A",
333
+ "categoryLabel": "Inline-modifier governance (restored from UNRANKED in HB#297)",
334
+ "score": 90,
335
+ "scoreStatus": "clean — 6/6 gated, immutable governor, 66 proposals, 0 suspicious passes",
336
+ "auditHB": 297,
337
+ "originalAuditHB": 384,
338
+ "sourceFile": "agent/scripts/probe-gitcoin-alpha-mainnet-fresh.json",
339
+ "legacySourceFile": "agent/scripts/probe-gitcoin-alpha-mainnet.json",
340
+ "legacySourceStatus": "SUPERSEDED by HB#297 re-audit — the HB#384 probe used --skip-code-check + Bravo ABI against an Alpha contract, producing 15 phantom passes. Retained as a methodology-error archive.",
341
+ "reportFile": "agent/artifacts/audits/gitcoin-governor-alpha-audit-hb297.md",
342
+ "leaderboardRank": 3,
343
+ "lastVerified": "2026-04-15T18:50:00Z",
344
+ "notes": [
345
+ "RESTORED to Category A after HB#297 re-audit with new src/abi/external/GovernorAlpha.json. Rank 3 in Category A (Compound 100 → Nouns 92 → Gitcoin 90 → Arbitrum 87 → Uniswap 85 → ENS 84 / Optimism Agora 84).",
346
+ "Probe results: 6/6 functions gated with plain-text error strings. 0 suspicious passes. 0 not-implemented. Perfect gate rate.",
347
+ "F-1 STRONG POSITIVE: ZERO admin setter functions in bytecode. No __acceptAdmin, no __abdicate, no guardian(), no whitelist*. Verified via selector-level grep against the runtime code. Gitcoin Alpha is an IMMUTABLE governor — once deployed, parameters cannot be changed. Fewer admin knobs = fewer attack surfaces.",
348
+ "F-2 POSITIVE: proposalCount() = 66 (as of HB#297). Contract is ACTIVE, not deprecated. Parameters: quorumVotes 2.5M GTC, proposalThreshold 1M GTC, votingDelay ~2 days, votingPeriod ~5.6 days. Timelock at 0x57a8865cfb1ecef7253c27da6b4bc3daee5be518.",
349
+ "F-3 METHODOLOGY CORRECTION: the HB#384 probe artifact was tool-error, not governance signal. Used --skip-code-check against a Bravo ABI where selectors don't match Alpha. When probe-access calls a non-existent selector under --skip-code-check, the EVM routes to fallback/receive which returns success — phantom passes. 15 of the HB#384 'passed' results were phantom. Only 4 (propose, cancel, queue, execute) were real.",
350
+ "F-4 ARCHITECTURAL: Alpha uses castVote(uint256,bool) not Bravo's castVote(uint256,uint8) — older for/against model without abstention or castVoteWithReason. Simpler surface is the tradeoff for the immutability.",
351
+ "PREVENTION RULE (surfaces as brain lesson): never combine --skip-code-check with a mismatched ABI. Without a matching ABI, run without the flag and trust 'not-implemented' results.",
352
+ "HB#384 legacy note: Gitcoin's on-chain contract is GovernorAlpha (pre-Bravo Compound fork) not GovernorBravo. The HB#384 discovery of this fact stands; the subsequent probe data on it was corrupt and is now superseded."
353
+ ]
354
+ }
355
+ ],
356
+ "corrections": [
357
+ {
358
+ "discoveredHB": 384,
359
+ "originalLabel": "Gitcoin Governor Bravo",
360
+ "correctedLabel": "Uniswap Governor Bravo",
361
+ "address": "0x408ED6354d4973f66138C91495F2f2FCbd8724C3",
362
+ "description": "HB#362 audit labeled 0x408ED635... as 'Gitcoin Governor Bravo'. The contract's on-chain name() accessor returns 'Uniswap Governor Bravo'. Gitcoin governance actually uses 'GTC Governor Alpha' at 0xDbD27635A534A3d3169Ef0498beB56Fb9c937489. The error propagated through Leaderboard v2, v3, and 5+ downstream brain lessons for 22 HBs before HB#384 caught it during baseline cleanup.",
363
+ "preventionShipped": [
364
+ "HB#385 task #390: pre-probe name() identity check in pop org probe-access (--expected-name flag, always-logged contractName field)",
365
+ "HB#386 task #391: retroactive name() sweep across all 18 corpus artifacts. Clean result beyond this one correction.",
366
+ "HB#387 task #392: this machine-readable corpus index, sanity-checkable via the sweep script."
367
+ ],
368
+ "publicCorrectionNote": "reports/audits/corrections-hb384.md + IPFS QmZT2753rrakq4NysAQsqE9e8N9ERTLJwe6AK2FigMNvmi"
369
+ }
370
+ ],
371
+ "categoryLegend": {
372
+ "A": "Inline-modifier governance — OZ Ownable, OZ AccessControl, Compound Bravo, OZ Governor. Probe-reliable; scores directly comparable within category.",
373
+ "B": "External-authority governance — ds-auth, Aragon kernel ACL. Probe-limited; scores carry methodology footnote. Not comparable across to Category A.",
374
+ "C": "veToken / staking governance — Curve family, veToken forks. Probe-limited (Vyper parameter ordering). Not comparable across to other categories.",
375
+ "D": "Bespoke / proprietary — Aave V2/V3, MakerDAO spells. Case-by-case interpretation. May use inline modifiers (real signal) or bespoke patterns (limited signal)."
376
+ },
377
+ "schemaVersion": 1,
378
+ "meta": {
379
+ "totalEntries": 17,
380
+ "rankedEntries": 16,
381
+ "unrankedEntries": 1,
382
+ "categoryA": 7,
383
+ "categoryB": 2,
384
+ "categoryC": 6,
385
+ "categoryD": 2,
386
+ "corrections": 1,
387
+ "lastSweepHB": 386,
388
+ "lastSweepResult": "clean (0 mismatches beyond the documented correction)",
389
+ "lastAuditHB": 297,
390
+ "lastAuditProject": "Gitcoin GovernorAlpha re-audit (restored to Category A at rank 3, score 90)"
391
+ },
392
+ "pending": [
393
+ {
394
+ "project": "_placeholder",
395
+ "label": "Sprint 14 P1 complete — all 4 veToken targets audited",
396
+ "address": null,
397
+ "chainId": 0,
398
+ "expectedOnChainName": null,
399
+ "category": null,
400
+ "notes": [
401
+ "Sprint 14 P1 (execute pending[] veToken audits) is now complete: Balancer HB#293, Frax HB#294, Velodrome + Aerodrome HB#296. This placeholder entry is kept so downstream consumers can detect the transition (pending.length > 0 vs 0) gracefully.",
402
+ "Next candidates for the queue (NOT yet verified on-chain): Aura (AURA), Beethoven X (veBEETS on Fantom), Convex vlCVX, Yearn yCRV, Thena (veTHE on BNB Chain). Add as concrete pending[] entries after live name() verification like HB#291."
403
+ ]
404
+ }
405
+ ]
406
+ }