Merge sprint-3 (HB#500-708 session arc): 664 commits — Top-5 Hermes borrows + #441 HybridVoting design + #506 adoption + RULE #21/#22/#23 + 38 ships#27
Open
ClawDAOBot wants to merge 796 commits into
Open
Conversation
Prevents the cross-agent race condition where 2+ agents running
pop brain retro file-tasks concurrently both see change.status='agreed'
and both fire pop task create before their updateChangeStatus to 'filed'
propagates via CRDT. Retro-839 hit this: sentinel + argus + vigil ran
file-tasks in parallel, producing duplicate tasks #483+#484 (change-2)
and #485+#486 (change-3). Sentinel HB#849 Task #488 reconciled the
resulting taxonomy fork.
Fix: pre-flight subgraph query before each task create to detect whether
another agent has already filed a task for the (retroId, changeId) pair.
The task description template in buildTaskDescription() already embeds
"- Retro id: {retroId}" and "- Change id: {changeId}" on separate lines;
searching for both markers is a deterministic dedup key.
New function: findExistingFiledTask(orgId, chainId, retroId, changeId)
- Queries subgraph for all tasks in org's projects (first: 100 projects,
first: 1000 tasks each)
- Filters for descriptions containing BOTH retro + change markers
- Returns task ID on match, null otherwise
- Fails open (null) on subgraph error — single-agent status='filed'
check remains primary idempotency
Wired into main loop: if findExistingFiledTask returns a taskId, skip
creation, flip local change to 'filed' pointing at discovered taskId,
log "↻ change-N → task #X (already filed by another agent; dedup-skipped)"
in non-JSON mode.
Output schema updated: filed[] entries now carry optional dedup: true flag.
Typecheck clean. No new unit tests (function requires live subgraph
fixture infrastructure which doesn't exist; tested against real race
via concurrent file-tasks invocation — impractical as unit test).
…on helper
Adds iterateSnapshotAudits<T>(spaces, auditFn, options) to the shared
lib. Sequential iteration with per-space error isolation, optional
onProgress callback, Error-wrapping for non-Error throws. Builds on the
HB#509 shared lib infrastructure; codifies the iteration scaffolding
that sair-aggregate.js (HB#501) prototyped.
New API:
export async function iterateSnapshotAudits<T>(
spaces: string[],
auditFn: (space: string) => Promise<T>,
options?: { onProgress?, verbose? },
): Promise<SnapshotAuditResult<T>[]>;
Unit tests (test/lib/snapshot.test.ts, 5 tests):
- iterates all spaces sequentially
- isolates per-space errors (one failure doesn't abort batch)
- onProgress callback fires for each space with result or error
- handles empty input
- wraps non-Error throws into Error objects
5/5 tests pass. Build green (88s).
sair-aggregate.js keeps its bespoke subprocess-call pattern (zero-dep
constraint vs cjs/esm boundary) but adds a pointer comment directing
future in-process aggregators to the lib helper.
Closes retro-509 change-5 → 5/5 of my retro-509 proposed changes are
now shipped (#492 sentinel, #493/#512 vigil, #494 open, #495 argus,
#496 this HB). Retro-509 ready for closure when change-3 (#494)
lands.
Annotates fetchProposals() to emit a stderr stat counting
gauge-allocation candidates (choices.length > 3 AND
type in {weighted, ranked-choice, quadratic}). Codifies the
Sprint 21 candidate per Synthesis #7 §8 Limitation 5
(multi-choice voting coverage gap).
Validated on balancer.eth: 2 gauge-allocation proposals
detected + flagged; 272 binary proposals continue to
analyze cleanly. No behavior change to existing binary or
3-choice For/Against/Abstain handling (HB#507).
Aerodrome / Velodrome / Pendle / Beethoven X have 0
Snapshot proposals (use on-chain gauge contracts), so the
stat fires mainly on hybrid DAOs like Balancer that mix
binary + weighted votes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Snapshot rate-limit responses arrive as
{error:"unauthorized", error_description:"too many requests..."}
with no `data` field. Previously gql() resolved to undefined,
which crashed downstream `d.proposals` access with cryptic
"Cannot read properties of undefined (reading 'proposals')".
HB#531 audit run hit this on frax.eth + morpho.eth.
Pre-existing bug; not introduced by HB#530 gauge-allocation
detection (visible there because gauge-allocation stat ran
before the proposals filter that previously hid the issue).
Now rejects with one of:
- "Snapshot unauthorized: too many requests, refer to..."
- "Snapshot GraphQL error: <msg>"
- "Snapshot non-JSON response: <body>"
- "Snapshot empty response: <body>"
Empirical finding HB#531: olympusdao.eth = 9th COORDINATED
DUAL-WHALE (ratio 1.30x ι-moderate band + top-2 pairwise
100% n=11). Pattern ι corpus COORDINATED-DUAL-WHALE n=8 → n=9.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…10 prototype) Ran audit-proxy-factory v1.5.2 against 5 L2-specific Snapshot spaces: opcollective.eth + basenamedao.eth + velodromefi.eth + aerodromefi.eth + stargatedao.eth. Results (n=2 data-returning, 3 empty): opcollective.eth: 5/5 EOA, not-E-proxy basenamedao.eth: 5/5 EOA, not-E-proxy velodromefi.eth: empty (gauge-allocation multi-choice) aerodromefi.eth: empty (gauge-allocation multi-choice) stargatedao.eth: empty (nonexistent; confirmed HB#852) Findings (directional at n=2): - L2 governance top-5 voter composition resembles Ethereum-mainnet (retail-EOA-dominant) — consistent with Pattern ε cross-L2 generalization prediction but not statistically meaningful at n=2 - L2 DeFi governance (Velodrome/Aerodrome) is BLOCKED by multi-choice gauge-allocation voting — waiting on Sprint 21 Idea 15 argus HB#507-508 multi-choice lockstep extension before corpus expansion is viable - E-proxy-identity-obfuscating n=0/2 on L2s (consistent with Maker-only mainnet rarity) Sprint 21 candidate refinement: ship multi-choice extension FIRST, then re-run L2 sweep to hit Aave-on-OP / Compound-on-Base / etc. for Pattern ε cross-L2 statistical base. Partial prototype of my HB#857 Idea 10; unblocks after Sprint 21 Idea 15.
… heuristic) Implements the disambiguation heuristic proposed in vigil HB#518 brain lesson. Adds individual-activity counters for top-1 and top-2 alongside existing pairwise-coincidence counters. New logic: - top1Active = count of proposals where top-1 voted - top2Active = count of proposals where top-2 voted - DISJOINT_ACTIVITY_THRESHOLD = 10 Classification rule for top-2 co-voted=0 case: - BOTH individual-activity ≥10 → DISJOINT DUAL-WHALE (structural avoidance) - Either individual-activity <10 → INSUFFICIENT-DATA (sparse-overlap artifact) Previously the script output "INSUFFICIENT-DATA (top-2 co-voted <3)" for all low-coincidence cases without distinguishing structural absence from sparse-overlap. This patch separates the 2 failure modes. Empirical validation on starknet.eth (the case argus HB#533 flagged as "INDEPENDENT-PENDING"): the corrected classifier reports top-1 active=0 + top-2 active=1, verdict SPARSE (not DISJOINT). argus's speculation that starknet might be a "genuine INDEPENDENT structural pattern" correctly rejected — starknet's top-2 voters are not active enough in binary proposals for 0-coincidence to signal structural avoidance. Likely gauge-allocation-only substrate (consistent with argus HB#530 hybrid-DAO framework). JSON output now includes top1Active + top2Active fields for corpus tracking. Variant string reports DISJOINT when threshold met.
Final-state consolidation of Sprint 20 + ranked Sprint 21 priorities. Complements argus HB#493 mid-retrospective with end-of-sprint state. Sprint 20 state: - 5/6 voted priorities DELIVERED or EXCEEDED (Proposal #65) - 2 blocked (external distribution Hudson-gated; non-EVM API-key-blocked) - Framework: v2.0 → v2.2 TRANSITION PROPOSAL in ~68 HBs - 2 retro cycles fully shipped (retro-839 + retro-509 = 10 improvements) - Pattern ι n=13 robust; COORDINATED DUAL-WHALE n=11 + first INDEPENDENT candidate (starknet argus HB#533) - SAIR: 2 impls identified (MetaMask + Coinbase), 83% concentration - External distribution: 2 assets ready (argus HB#497 + vigil HB#503/507) Sprint 21 ranked priorities (18 candidates from 3-agent brainstorm + retro-509 continuations + Sprint 20 blockers): TOP: multi-choice lockstep extension, Synthesis #7 FINALIZED promotion, A-dual sub-variant formalization MID: SAIR v1.0 promotion, Variant-check batch integration, boundary-score v0.2 LOWER: non-EVM, HybridVoting upgrade, predecessor-task tooling, brain-lesson propagation test, Maker slot-read, L2 extension, cross-domain, theta+boundary integration ALWAYS-ON: periodic SAIR re-scans, retro cadence, lesson propagation Open questions for Hudson: 1. Task #480 external distribution approval 2. Non-EVM path (Subscan key vs Polkadot.js dep) 3. Synthesis #7 TRANSITION → FINALIZED promotion timing Retries HB#877 intended action which was blocked on ENOSPC (tmp dir full). Disk recovered HB#878.
…ter finding Ran audit-proxy-factory v1.5.2 against starknet.eth as independent corroboration of argus HB#533 INDEPENDENT-PENDING finding. Discovered: 1. Classifier scope limitation: 4/5 top voters are Starknet-native 32-byte addresses (66-char), classifier-incompatible. Pipeline flags them 'unknown' via ethers address-checksum throw. computeProxyShare excludes unknown → false-positive proxyShare=1.0 + false E-proxy-identity-obfuscating classification. 2. Cross-chain governance delegation surfaced: 1/5 voter is a mainnet Ethereum Safe with 20 owners voting on Starknet governance via Snapshot. Novel data point — Snapshot doesn't enforce chain-matching. 3. Argus HB#533 starknet INDEPENDENT-PENDING finding is NOT affected; lockstep-analyzer works on vote records (chain-agnostic), not bytecode. audit-proxy-factory classification just doesn't apply to this DAO due to scope boundary. Captures framework limitation for Synthesis #7 §8 inclusion: audit-proxy-factory + SAIR are Ethereum-bytecode-scoped; non-Ethereum address formats (Starknet, Cosmos bech32, Solana base58) fall into 'unknown' class. Sprint 21 candidate #17 (opportunistic): 3-5 LoC fix in computeProxyShare + classifyDao to set share=null + classification='inconclusive' when unknown > (eoa + proxy-candidate). Avoids false-positive E-proxy classification on cross-chain governance Snapshot spaces.
Prevents false-positive E-proxy-identity-obfuscating classification on cross-chain governance Snapshot spaces like starknet.eth where voters use non-Ethereum address formats (32-byte Starknet addresses, Cosmos bech32, Solana base58). Pipeline context (HB#879 finding): 1. getCode() on non-Ethereum address → ethers throws (bad-checksum) 2. catch block flags voter class='unknown' 3. computeProxyShare excludes 'unknown' from denominator 4. share = 1/(0+1) = 1.0 on starknet.eth (1 Safe + 4 Starknet addrs) 5. classifyDao(1.0, 5) → 'E-proxy-identity-obfuscating' FALSE POSITIVE Fix: classifyDao accepts optional unknownCount parameter. When classifiable = totalVoters - unknownCount < ceil(totalVoters/2), returns 'inconclusive' instead of interpreting the misleading share. Backward-compatible: unknownCount is optional; existing callers without the param get original behavior. New call site passes summary.unknown from computeProxyShare output. Tests: 40/40 pass (was 35, +5 new HB#879 fix tests covering: unknowns-dominate-starknet-case, unknowns-minority-preserves-behavior, threshold-edge, classifier-incompatible-majority, backward-compat). Addresses Sprint 21 opportunistic candidate #17 (HB#879). Small 5-LoC core change, high-leverage (eliminates false-positive E-proxy on cross-chain governance surfaces).
…-cluster interpretation Formalizes the taxonomy emerging from the HB#517→#540 peer-engagement loop between vigil_01 and argus_prime. Consolidates 10 HBs of empirical discovery into a canonical-candidate section. 4 sub-variants proposed for Pattern A-dual-whale: - COORDINATED (11 robust empirical) - INDEPENDENT (1 empirical — opcollective, via vigil HB#518 heuristic + argus HB#535 validation) - DISJOINT (0 empirical; classifier validated via starknet rule-out) - SELECTION-SENSITIVE (2 empirical — 1inch + gitcoindao) Proposes dual-cluster-participation as structural interpretation of SELECTION-SENSITIVE: frequent-coordinators (cum-vp) + occasional- dominants (active-share) as distinct functional roles coexisting in same DAO. The cum-vp-vs-active-share method-disagreement is the DIAGNOSTIC, not a methodology bug. Inherits robustness hierarchy from Pattern ι: SUB-TIER-ROBUST > SIGNATURE-ROBUST > SELECTION-SENSITIVE. SELECTION-SENSITIVE labels should specify method or use dual-cluster-participation name. Provenance table documents 10-HB loop (vigil + argus, April 20 2026). Sprint 21 promotion path: trilateral endorsement → v2.1.11 canonical. Research-ship pairing: argus ran empirical sweeps; I proposed + implemented the disambiguation heuristic (lockstep-analyzer.js commit 1ea2007) + now the canonical ship. Classic dispersed-synthesis output.
…osal Consolidates the SELECTION-SENSITIVE shape finding (HB#536 1inch + HB#540 gitcoindao) with vigil HB#522 dual-cluster structural interpretation into a Sprint 21 v2.1.11 promotion candidate. n=2 preliminary; needs n≥3 for canonical promotion. Empirical extension + lockstep-analyzer --pattern-kappa flag are 1-HB Sprint 21 candidates. Reframes method-disagreement as a structural signal (two coexisting voter clusters: frequent-coordinators + occasional-dominants) rather than as classification noise. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…scope Added §8.10 to Known Limitations documenting the HB#879-880 empirical finding + fix: - audit-proxy-factory + SAIR are Ethereum-bytecode-scoped - Non-Ethereum address formats (Starknet 32-byte, Cosmos bech32, Solana base58) fall outside classifier scope → 'unknown' class - Original bug: false-positive E-proxy classification on cross-chain governance spaces where unknowns dominate (demonstrated starknet.eth) - HB#880 fix shipped (commit 93f6923): classifyDao returns 'inconclusive' when classifiable < ceil(totalVoters/2) - Verified end-to-end: starknet.eth now returns inconclusive - Novel byproduct: cross-chain governance delegation surfaced (0x5C04Aa0E mainnet Safe with 20 owners voting on Starknet) - Sprint 21 candidate: chain-aware address-format detection with dedicated cross-chain-delegation pattern tracking Keeps v2.2 TRANSITION PROPOSAL accurate + complete before FINALIZED promotion. Peer-review on Synthesis #7 still pending from argus/vigil.
Previously fetchVotes fired 1 gql() call per proposal. For high-volume
DAOs (sushigov 140 binary props × HB#538/#541/#543 attempts) this
consistently hit Snapshot 401 'too many requests' at the votes-fetch
phase, leaving DAOs unclassified.
Switched to Snapshot's `proposal_in: [...]` filter with 50 proposals
per batch (5 voters per call × 50 props = 250 max votes, well under
Snapshot's first:1000 limit). 140 sequential calls → 3 batched calls.
Validated: sushigov.eth completed end-to-end post-fix
(ratio 1.24× ι-moderate, top1Active=9 top2Active=4, top-2 co-voted=0
= INSUFFICIENT-DATA sparse pattern — sushigov NOT a dual-whale
candidate; joins starknet+ENS sparse list).
Logic correctness: new fetchVotes returns same vote shape
[{proposal:{id}, voter, choice, vp}, ...] as before; downstream
byProposal Map processes each vote independently, so input
batching/ordering cannot affect output.
Bottleneck now shifts to fetchTopVoters (4-page sequential sweep).
Sprint 21 follow-up candidate per HB#538.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…conciliation Fork-ship with argus HB#542 resolved. Argus shipped a standalone artifact (dual-cluster-participation-v2-1-11-candidate-hb542.md) naming the pattern Pattern κ (kappa) — systematic naming per Pattern ε/ζ/η/θ/ι convention. My HB#523 section used "dual-cluster participation" descriptively. Reconciliation: adopted Pattern κ as the formal name in my section. "Dual-cluster participation" remains the descriptive shorthand. argus's diagnostic thresholds (address-overlap=0 + active-share top1/top2 activity<5) added to the classifier row. No content loss: argus's standalone artifact preserved, my section incorporates their naming + thresholds, provenance updated. Mirrors retro-839 Task #488 pattern (v2.1.9 reconciliation of vigil+argus parallel canonical ships). Same pattern, same fix: single canonical doc location (this file), other artifacts preserved-but-superseded. Meta: 2nd fork-ship event this session. Sprint 21 candidate (I proposed in HB#524 brain lesson): canonical-ship idempotency via brain-layer heads check before ship. Broader than retro-839 change-3 (on-chain task idemp).
…κ-C variant
Per vigil HB#524 fork-ship acknowledgment + reconciliation handoff.
Vigil's v2.1.11 section in canonical doc already adopted my Pattern κ
naming + HB#542 diagnostic thresholds. This commit adds:
(1) DOUBLE-COORDINATED row to sub-variants table (5th variant beyond
COORDINATED/INDEPENDENT/DISJOINT/Pattern κ): citizens-house HB#544
cross-validated active-share showed BOTH voter cohorts coordinate
with different addresses — distinct from Pattern κ where
active-share is SPARSE. Proposed as Pattern κ-C variant.
(2) COORDINATED count update: 11 → 12 SUB-TIER-ROBUST (citizens-house
upgraded HB#544 via cross-method validation).
(3) Provenance table: added argus HB#542 + HB#544 + HB#545 entries
(also vigil HB#523/#524 fork-handoff).
Empirical state: COORDINATED 12 SUB-TIER-ROBUST + INDEPENDENT 1 +
DISJOINT 0 + Pattern κ 2 (need n≥3 for promotion) + Pattern κ-C 1
+ INSUFFICIENT 3 (starknet/ENS/sushigov sparse).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…B#522) Added §3.4 to Sub-pattern taxonomy section documenting Pattern κ (dual-cluster participation) as v2.1.11 canonical candidate. Pattern κ emerged from SELECTION-SENSITIVE Pattern ι cases that should NOT have been disqualified. Reframes method disagreement from "noise" to "structural signal": - Frequent-coordinators (cum-vp picks): steady-state governance operators - Occasional-dominants (active-share picks): crisis voters or issue whales Preliminary empirical base n=2 (1inch.eth + gitcoindao.eth). Needs n≥3 for v2.1.11 canonical promotion (Sprint 21 empirical-extension target). v2.2 TRANSITION PROPOSAL acknowledges but does NOT ship with Pattern κ baked in — waits for trilateral peer-endorsement + empirical floor before canonical inclusion. Consistent with §2 methodology Layer 5 (empirical-check-before-claim). Prevents premature formalization of a pattern still at preliminary empirical evidence. Sprint 21 candidate: extend Pattern κ empirical base; test dual-cluster framing beyond Pattern ι (potential extension to Rule A-dual sub- variants); test broad-stakeholder-substrate prevalence hypothesis.
Updates v2.1.11 section in governance-capture-cluster-v2.1.md:
(1) DISJOINT row: 0 → 1 (frax.eth HB#547, 1st empirical case;
SIGNATURE-ROBUST cum-vp method; closes HB#518 n=0 gap that
has been outstanding since Sprint 19).
(2) Pattern κ-D variant added (PARTIAL-OVERLAP per HB#546):
1 shared voter between methods + different partner per method.
n=1 lido-snapshot (0xe017a4e9 dual-role voter).
(3) Pattern κ-F variant added (DISJOINT-METHOD-DIVERGENT per HB#547):
cum-vp produces DISJOINT, active-share produces SPARSE-asymmetric.
n=1 frax.eth.
(4) Provenance updated: HB#525/#546/#547 entries.
Empirical state: COORDINATED 13 + INDEPENDENT 1 + DISJOINT 1 +
Pattern κ-B 2 + κ-C 1 + κ-D 1 + κ-F 1 + INSUFFICIENT 3.
Sprint 21 §7 candidate-1: COORDINATED 13 ✓✓; DISJOINT 1/0 ✓
(CLOSED); INDEPENDENT 1/3 (need 2 more).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…E signature Attempted Pattern κ (argus HB#542) canonical-promotion extension by running lockstep-analyzer cum-vp on 4 delegate-based candidate DAOs (ens.eth, uniswapgovernance.eth, aave.eth, aavedao.eth). 0/4 cases satisfy Pattern κ condition (a) — κ remains at n=2 preliminary (1inch.eth + gitcoindao.eth). Empirical rarity confirmed: ~7% of tested corpus. Sprint 21 canonical promotion timeline revised to require broader corpus sweep (15-20+ DAOs) leveraging argus HB#543 fetchVotes batch optimization. Novel signature observed: DOMINANT-INACTIVE-WHALES at aavedao.eth. ι-strong 1.68× cum-vp ratio BUT top-1 and top-2 each voted on 0 binary proposals. Distinct from COORDINATED, DISJOINT, and plain INSUFFICIENT-DATA classifications. Retrospective relevance: my HB#816-818 Aave SELECTION-SENSITIVE work may have been an early DOMINANT-INACTIVE observation under a different framing. Aave could be κ-adjacent via DOMINANT-INACTIVE cum-vp cluster, but strict κ condition (a) excludes it. 3 Sprint 21 recommendations: 1. Don't relax κ condition (a) prematurely (preserves precision) 2. Broaden κ empirical sweep (50-100+ DAOs via argus HB#543 batch) 3. Capture DOMINANT-INACTIVE as separate Sprint 21 observation; aavedao.eth is first documented case
…κ taxonomy Argus HB#548 landed major Pattern κ expansion while my HB#884 was still in peer-propagation: - κ-D (PARTIAL-OVERLAP) at lido-snapshot - κ-F (DISJOINT-METHOD-DIVERGENT) at frax.eth - DISJOINT Pattern-ι-adjacent at frax.eth (1st SIGNATURE-ROBUST case, closes HB#518 n=0 gap) Reconciling HB#884 DOMINANT-INACTIVE signature against richer taxonomy: DOMINANT-INACTIVE (aavedao.eth) REMAINS DISTINCT from all κ-variants AND from DISJOINT. Key distinction: DOMINANT-INACTIVE has top-1 + top-2 BOTH at activity=0 on binary proposals despite ι-strong cumulative VP. DISJOINT requires activity ≥10 on both; κ-A/C/D/F require coordinated or partial-overlap activity. DOMINANT-INACTIVE is the opposite — passive whales with massive VP but no binary-proposal participation. Sprint 21 recommendation updated: DOMINANT-INACTIVE deserves its own sub-classification parallel to Pattern κ (candidate name Pattern λ or Pattern ι qualifier ι-strong-INACTIVE). aavedao.eth = first documented case; n≥2 required before promotion. Cross-reference timing: HB#884 shipped before HB#548 landed on shared state; this HB#885 addendum reconciles.
Updates v2.1.11 section in governance-capture-cluster-v2.1.md:
(1) Pattern κ-D row: 1 → 2 (lido + pleasrdao). pleasrdao.eth HB#552
confirmed via address-overlap=1 (0xc85170886a as TOP-1 in BOTH
methods). Cross-domain finding — NFT collective shares same
dual-role-voter shape as DeFi DAO. Vigil HB#525 prediction
('κ-D more common than κ-B in heavy DAOs') CONFIRMED.
(2) Provenance: HB#551-552 cross-domain validation entries +
HB#528 vigil endorsement + HB#553 RULE shipped.
Empirical state HB#554: COORD 15 + INDEPENDENT 1 + DISJOINT 1 +
Pattern κ-B 2 + κ-C 1 + κ-D 2 + κ-F 1 + INSUFFICIENT 5.
Cross-domain coverage observation: gaming/social DAOs
(merit-circle, illuvium, fwb, compound-governance) heavily use
multi-choice voting (0 binary props). Structural gap — Sprint 21
candidate to extend to multi-choice classifier path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… validation Per argus HB#554 shipped canonical update (27ab74e): - Pattern κ-D extended to n=2 via pleasrdao.eth (HB#552) - pleasrdao is an NFT COLLECTIVE — first cross-substrate κ-D - Also 15th COORDINATED DUAL-WHALE (previously n=13) - Confirms vigil HB#525 prediction 'κ-D > κ-B in heavy DAOs' - Validates framework cross-substrate applicability Also mentions: - κ-F DISJOINT-METHOD-DIVERGENT at frax.eth HB#547 - DISJOINT (Pattern-ι-adjacent) 1st SIGNATURE-ROBUST case at frax HB#547 §3.4 now captures 5 κ-family variants (A/C/D/F + adjacent DISJOINT) with per-variant n counts. v2.2 TRANSITION PROPOSAL tracks state accurately without premature canonical promotion (κ-D at n=2 still short of v2.1.11 SUB-TIER-ROBUST n≥3 gate).
…ingle-choice >3) Ships the CATEGORICAL mode (simplest of 3 deliverable modes). Supports single-choice >3-choice proposals (budget allocation, multi-candidate elections, categorical polls). Agreement = exact choice-index match — same pairwise-agreement logic as binary, just relaxes the length filter. New flag: --pattern-mode binary|categorical (default: binary) Excludes type='weighted'/'ranked-choice'/'quadratic' — those require cosine-similarity + Kendall-tau helpers + object/array vote.choice parsing, deferred to follow-on implementation. Empirical validation on index-coop.eth: - Previous (binary only): INSUFFICIENT-DATA per HB#540 sparse top-2 - After --pattern-mode categorical: 584 classifiable props found, top-1 active=58, top-2 active=42, top-2 pairwise 92.3% on 13 co-voted - Likely 16th COORDINATED DUAL-WHALE candidate (category unblocks the sparse-binary-artifact previously blocking classification) BLOCKED-multi-choice DAOs expected to unblock (categorical mode): indexcoop, merit-circle, illuvium, fwb (single-choice polls). Weighted + ranked still blocked pending follow-on (aerodrome, velodrome, pendle, beethoven — gauge-allocation requires cosine). Scope: categorical MVP only (~30 LoC). WEIGHTED + RANKED modes are separate follow-on work; task description explicitly allowed MVP partial ship per argus HB#557 filing context. Tests: no new unit tests this pass (existing test/scripts/brain-* coverage doesn't include lockstep-analyzer; filing as follow-on). Empirical validation via index-coop smoke test (above). Does NOT break existing binary path (--pattern-mode defaults to binary; HB#507 3-choice Abstain handling unchanged).
Adds auto-fetch mode to pop org boundary-score. Removes operator
friction of manual --gini/--top5pct/--pass-rate args when --space is
supplied.
Implementation:
- New exported autoFetchMetricsFromSnapshot(space, proposalSampleSize)
fetches closed proposals + votes via lib/snapshot.ts snapshotGraphQL,
aggregates per-voter VP, computes Gini (mean-abs-diff), top-5 cumulative
share, pass rate (first-choice-wins heuristic). Mirrors audit-snapshot
metric formulas.
- Handler auto-fetch path: if --space is supplied AND any of gini/top5/
passRate missing, fetch + fill. Manual args still override fetched
values (partial-override supported).
- autoFetched flag + "Auto-derived from Snapshot: ..." note in output.
Snapshot API quirks handled:
- proposal_in limit: 100 items max (hard-capped proposalSampleSize)
- votes query first: 1000 max (limit respected)
- snapshotGraphQL already unwraps .data wrapper
Tests: 6/6 new (test/commands/boundary-score-auto.test.ts) covering
real-shape response, empty proposals, empty votes, equal-VP 0 Gini,
most-recent ordering, zero-vp division guard. 33/33 existing tests
still pass.
Empirical validation (3-DAO per acceptance criteria):
curve.eth: class=HIGH ✓ (gini=0.981, top5=90.4%, N=291 — matches
expected HIGH + Pattern ι corpus characterization)
opcollective.eth: class=HIGH (expected LOW per INDEPENDENT HB#534
— framework calibration flag, NOT auto-fetch code issue;
snapshot-signaling centroid may need review for OP-specific
substrate)
citizenshouse.eth: class=HIGH ✓ (gini=0.402, N=79 — matches expected
HIGH given COORDINATED HB#544)
2/3 match expected classification. opcollective mismatch noted as
separate calibration concern; auto-fetch itself works correctly.
Sprint 21 Idea 6 DELIVERED.
Leverages my Task #498 v0.2 auto-fetch (HB#892) for 6-DAO corpus sweep. All 6 Pattern ι corpus DAOs (curve/frax/lido/uniswap/balancer/gitcoin) score class=HIGH on boundary-score (BS_total 0.487-0.631). Validates Synthesis #7 §3.2 prediction that Pattern ι identifies capture-adjacent DAOs. Tool performance: 6 runs complete in ~2 min (vs ~30 min with manual args). Snapshot rate-limits (proposal_in ≤ 100, votes first ≤ 1000) handled correctly. Empirical findings: - Pure-token Gini outliers: Frax (0.991), Curve (0.981), Balancer (0.945) - Snapshot-signaling BS_total tops: Uniswap + Gitcoin at 0.620-0.631 (paradoxically higher than pure-token, driven by centroid-distance) - BS_total dispersion narrow (0.487-0.631) → v0.5 calibration working - Gitcoin (argus HB#542 Pattern κ-A case) scores highest at 0.631 — hypothesis: κ-family cases may cluster at band HIGH-end Sprint 21 implications: 1. boundary-score + audit-snapshot integration (Idea 7) now feasible 2. Corpus baseline n=6 established for future comparison 3. opcollective.eth mismatch (HB#892) + snapshot-signaling centroid calibration concern → Task #498 v0.3 candidate
…GH-end Tested HB#893 hypothesis 'Pattern κ cases cluster at BS_total HIGH-end within substrate band' by extending n=6 → n=8 with other κ-family cases: 1inch.eth (κ-A): BS_total=0.500 — middle of 0.487-0.631 range pleasrdao.eth (κ-D NFT cross-substrate): BS_total=0.460 — lower end Extended range: 0.460-0.631. No systematic κ-family HIGH-end clustering. Gitcoin (0.631) was outlier on high side; 1inch and pleasrdao are middle/ lower. HYPOTHESIS FALSIFIED at n=2 extension. Applied §2 Layer 5 (empirical-check-before-claim): tested the hypothesis with the cheapest available data immediately after proposing it, caught the error in 1 HB vs letting it propagate into Synthesis #7 canonical framing. Memory rule 'empirical-check-before-counter-proposal' applied proactively to a self-proposed hypothesis, not just peer counter-proposals. HB#893 artifact updated with refutation section.
…ormalization
Updates v2.1.11 section in governance-capture-cluster-v2.1.md:
(1) Pattern κ-B (SELECTION-SENSITIVE) row: 2 → 3 ✓ PROMOTION ELIGIBLE.
1inch HB#536 + gitcoindao HB#540 + index-coop.eth HB#564.
index-coop is extreme κ-B (active-share top-2 BOTH avg-share=100%).
Per HB#542 v2.1.12 per-variant promotion threshold n≥3 MET.
(2) NEW SECTION '2D framework: distribution × coordination orthogonality'
(vigil HB#534 + argus HB#564 co-formalization). Boundary-score
measures distributional concentration (Rule A) ORTHOGONAL to Pattern
A-dual-whale taxonomy (κ variants of coordination structure).
opcollective example: [HIGH-boundary-score, INDEPENDENT-Pattern]
joint point. Sentinel HB#892 'expected LOW' flag was multi-dimensional-
framework feature not bug.
(3) Provenance: HB#553/#558/#560-564/#534 entries added.
Empirical state HB#566:
- COORD 16 SUB-TIER-ROBUST (12) + SIGNATURE-ROBUST (1 lido) + ybaby + pleasrdao + index-coop
- INDEPENDENT 1 (opcollective)
- DISJOINT 1 (frax)
- Pattern κ: κ-B 3 ✓ + κ-C 1 + κ-D 2 + κ-F 1 = 7 cases across 4 variants
Sprint 21 §7 candidate-1 essentially complete: COORDINATED 16 ✓✓✓,
DISJOINT 1 ✓ (closed), INDEPENDENT 1/3 (rarity-bounded), κ-B
PROMOTION ELIGIBLE.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…location)
Adds WEIGHTED mode handling to follow vigil HB#558 categorical MVP.
Changes:
- New cosineSimilarity(weightsA, weightsB) helper handles object-shaped
vote.choice ({choice_idx: weight} per Snapshot weighted format)
- New argmaxKey(weights) helper for fallback dominant-choice match
- New agreeOn(choiceA, choiceB, patternMode) abstraction:
- binary/categorical: integer equality (== current behavior)
- weighted: cosineSimilarity > 0.7 OR argmaxKey match
- fetchProposals: accept type='weighted' when patternMode='weighted'
- main(): allow 'weighted' in --pattern-mode validator
- Pairwise pairwise-with-top-1 + ALL-AGREE both use agreeOn() abstraction
(backward-compat: binary/categorical paths unchanged)
Empirical validation on balancer.eth (--selection cum-vp --pattern-mode
weighted):
- 651/631 top-1/top-2 individual activity (massive corpus)
- 447 co-voted weighted proposals (largest sample in corpus)
- 91.3% pairwise (408/447) → COORDINATED DUAL-WHALE
- ratio 13.28x ι-EXTREME band
- Adds 17th COORDINATED case to corpus + first WEIGHTED-mode classification
Doesn't break binary/categorical paths (default mode unchanged; both
existing modes use === fast-path via agreeOn helper).
RANKED-CHOICE mode still deferred (separate follow-on; needs Kendall-tau
helper + array vote.choice parsing).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… framework + HB#893-894 BS_total corpus sweep findings Argus HB#564-566 shipped κ-B promotion eligibility with n=3: 1inch.eth (HB#536) + gitcoindao.eth (HB#540) + index-coop.eth (HB#564) v2.1.12 per-variant promotion threshold MET per argus HB#542 + vigil HB#534 endorsement. Index-coop.eth is an extreme κ-B case: active-share top-2 BOTH at avg-share=100%. Distinct structural signature. 2D framework formalization (argus HB#564 + vigil HB#534): distribution × coordination orthogonality. SELECTION-SENSITIVE κ-B cases share TWO DISTINCT VOTER CLUSTERS coexisting in same DAO. Also folded in HB#893-894 sentinel BS_total corpus sweep findings: - 8 DAOs all class=HIGH, range 0.460-0.631 - κ-family cases DON'T cluster at HIGH-end (self-hypothesis refuted) - κ diagnostic primitives are method-disagreement + top-2 non-overlap, NOT BS_total magnitude v2.2 TRANSITION PROPOSAL stance reconfirmed: doesn't bake κ-B into v2.2 canonical yet; waits for trilateral promotion to v2.1.12 first. Applies §2 Layer 5 empirical-check-before-claim methodology consistently.
HB#490 brainstorm 'per-hb-ambition-increase-take-on-harder-work-per-
heartbeat-...' was closed in the brain doc with 2 ideas + 0 responses
but lacked a retrospective outcome doc per HB#510 §7-13 candidate.
This retrospective documents what actually happened: Hudson's HB#489
directive ('take on more, harder stuff per HB') was operationally met
via 4 successive brain-rule promotions to pop.brain.heuristics rather
than via brainstorm-mode promotion:
1. parallel-chain heuristic (HB#518)
2. periodic self-audit cadence 10-HB (HB#518)
3. 10-DAO batched sweep standard (HB#518)
4. peer-engagement-loop-leverage with CEILING refinement (HB#553 +
vigil HB#528 endorsement)
Empirical outcome: HB wall-time went from 2-3 min baseline to 5-13 min
sustained across ~80 substantive HBs (HB#489 → HB#570). Major outputs
include Pattern κ taxonomy promoted κ-B canonical, 17 COORDINATED
corpus, Sprint 21 §7-10 multi-agent task-flow complete, 2D framework
canonical, lockstep-analyzer multi-mode toolchain.
Methodology insight: direct-rule-promotion may produce faster + more
durable outcomes than brainstorm-mode when (a) rule is self-evidently
grounded, (b) peer endorsement achievable without full 3-vote, (c) CRDT
propagation gives objection window. Sprint 21 candidate for further
codification.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…l max-clamped) Ran boundary-score v0.2 on 5 snapshot-signaling DAOs (ens, opcollective, arbitrumfoundation, gitcoindao, safe). ALL 5 produced bsSubstrate=1.0 (max-clamped). The v0.5 centroid [0.74, 0.80, 0.95] is too far from the empirical cluster at [0.65, 0.51, 0.81] mean. Root cause: - Centroid distance 0.34-0.48 for all 5 DAOs - MAX_DIST_IN_BAND=0.20 clamps all to 1.0 - Centroid miscalibrated + max-dist tight Recommended Sprint 21 fix (Option C — both): - Refined snapshot-signaling centroid: [0.65, 0.51, 0.81] (empirical mean) - Per-substrate MAX_DIST: pure-token=0.20 / snapshot-signaling=0.50 / nft-participation=0.30 (preserves pure-token tightness while allowing snapshot-signaling dispersion) Impact on HB#893 corpus sweep: - snapshot-signaling DAOs (lido/uniswap/gitcoin) bsSubstrate drops from 1.0 to moderate (0.3-0.6) - pure-token DAOs unchanged - Net BS_total drops 0.1-0.2 for snapshot-signaling cases - Some HIGH → MEDIUM shifts expected; more empirically discriminating Surfaced from HB#892 opcollective-HIGH-mismatch flag and confirmed via HB#893 narrow 0.487-0.631 BS_total range. Sprint 21 candidate #20.
…ULE #31 Cycle Hardening v2) Adds Phase 2.25 'pop project propose' artifact to /plan-project skill output (was 2 artifacts; now 3). Per Hudson HB#707 cycle-gap critique: agents filed tasks into existing projects but skipped the project-first proposal step. New Artifact B template: project-propose command with --duration discipline (60-min for fleet-aligned, 1440 for high-stakes). Documents the empirical mistake (vigil HB#707/#724 used 1440 default on routine proposals; 24h vote-period delayed project execution unnecessarily). Pre-staged for delivery once Proposal #70 (RULE #31 Cycle Hardening v2) executes — the formal task #70 will reference this skill update + RULE #31 codification + Step 1.7 enforcer update. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fleet-wide audit of poa-cli surface (164 commands across 15 domains). 29.9% (49) unused across both sentinel heartbeat-log + fleet brain.shared. Documents trigger-conditions for the top forgotten high-value commands: - pop config validate (0 uses, CLAUDE.md says use it as health check) - pop task stats (0 uses, answers Hudson HB#684 review-load critique) - entire retro-* family (7 cmds, 0 uses — sprint retros bypassed) - entire education domain (3 cmds, 0 uses) - pop vote analyze (closes HB#1033 0-vs-1-indexed trap) - pop brain repair (would close HB#1043 brain-sync incident faster) - pop org boundary-score (argus's own framework, low use) - pop org publications + share (publication discovery gap) - pop org gaas-status (revealed REVENUE we had no visibility into) Commits to agent/brain/Knowledge/ for git-pull propagation to argus + vigil. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5 tasks, 45 PT (fits 50 PT #72 cap): 1. audit-vetoken --nft-mode v0.2 (Transfer-event scan, 12 PT) 2. probe-proxy v0.3 (Beacon + EIP-7201, 10 PT) 3. RULE #31 + Step 1.7 enforcer extension (project-membership + review-load, 12 PT) 4. /plan-project Phase 2.25 codification (6 PT, references pre-staged HB#727) 5. RULE candidate: project-proposal duration discipline (5 PT) Ready for pop task create-batch --project <#72-id> once #72 executes (~5 min from now per endTimestamp). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Discovered HB#729: agent-proposed projects (#71+#72) execute on-chain but task-create reverts because new projects have empty rolePermissions. The propose command already supported --create-hats/--claim-hats/etc, but agent flows never passed them. Fix: --auto-hats (default true) queries subgraph for the org's existing project rolePermissions (intersection of canCreate+canClaim across all same-org projects) and applies those hats to all 4 permission lists in the BootstrapProjectConfig struct. Result: agent-proposed projects now ship with usable permissions on execution. Verification: dry-run returns rolePermissionHats matching CLI Infra known-good config (302221006252582836418586211320...961036288). autoHatsApplied flag added to success output for visibility. Also updates /plan-project SKILL.md Artifact B section to document the new default behavior + bypass via --no-auto-hats for intentionally isolated projects. Closes Hudson HB#707 cycle-gap end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes Velodrome veNFT power-misranking gap.
v0.1 (HB#716) fell back to NFT-count ranking when ERC721Enumerable
not supported (Velodrome case). NFT count understates ve-power for
owners with old high-value locks.
v0.2 adds --nft-scan-transfers flag: scans the veNFT contract's own
Transfer(from,to,tokenId) events to build tokenId→current-owner map
(latest Transfer per tokenId wins), then sums balanceOfNFT(tokenId)
per candidate owner for true ve-power.
New helper scanNftTokenOwnersViaTransfers paginates getLogs in
fromBlock/toBlock/chunk windows, dedupes burns (to=0x0), and inverts
to owner→tokenIds[] for O(N+M) per-address lookup.
JSON output includes nftScan: {tokensSeen, chunksScanned, windowFrom,
windowTo} for transparency.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…e detection Beacon resolution: when EIP-1967 beacon slot is non-empty, call implementation() on the beacon address to resolve the actual impl. Previous v0.2 surfaced only the beacon (one level of indirection short for UpgradeableBeacon / BeaconProxy patterns). EIP-7201 namespace detection: derives canonical slots for 6 well-known OZ v5 namespaces (Initializable, AccessControl, Ownable, Pausable, ReentrancyGuard, ERC20) via keccak256(abi.encode(keccak256(namespace) - 1)) & ~0xff and reads each slot. Non-empty slots indicate the contract uses namespaced storage (OZ v5+ Initializable family). Surfaces in JSON + human output. Smoke: USDC FiatTokenProxy probe now returns all 6 EIP-7201 slots correctly computed (all empty for USDC since it predates OZ v5, as expected). No crash; OZ-zeppelinos detection still works. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…nment + review-load) Two amendments to RULE #31 (task-first discipline, vigil HB#680): 1. Project-assignment discipline (closes Hudson HB#707): when creating tasks under RULE #31, prefer AGENT-PROPOSED Projects over default existing ones. Falling back to legacy CLI Infrastructure is OK in emergencies but flag as Phase 2.25 deferment. Three in a row = bundle into a new Project proposal. 2. Review-load rebalance: when `review` action surfaces in triage, check 7-day approval distribution. If one agent has >60% of approvals, defer to peers below threshold. Argus historically 58% Sprint 21-23 (per Portfolio v5 Part XI); rebalance toward vigil/sentinel when feasible. Both are WARNING-only (non-blocking). Step 1.7 SKILL.md gets concrete subgraph-query scripts + project-membership check for Hudson-project HB#671 trap. how-i-think.md gets "RULE #31 v2" subsection at the end of the Task-First Discipline section. Brain.heuristics RULE #31 v2 amendment lesson published in same HB. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per RULE #32 (pop.brain.heuristics rule-32-proposal-duration-discipline, HB#733 codification): fleet-aligned proposals use 60-min vote duration; 1440-min (24h) reserved for high-stakes irreversible changes. Empirical HB#724-#728: all 60-min proposals (#71, #72, #73, #74) reached 3-of-3 unanimous within 30 min of triage-MEDIUM surfacing + auto-executed at the hour mark. 1440-min proposals (#69, #70) delayed unnecessarily. Help text now references RULE #32 + clarifies which proposal classes warrant 1440-min override. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…w deps) Closes HB#854 brain-search asymmetry meta-finding. Both empirical miss cases pass acceptance in first run (top-K=5): - "CLever Safe" → sentinel HB#1065 at rank #1 (score 0.421) Was: argus HB#852 rediscovered same Safe 50 HB-arcs later via title-regex miss Now: surfaces HB#1065 as top hit + 4 other AGGREGATOR-ANONYMITY thread lessons - "Part XI joint section" → sentinel HB#1070 rank #1 + vigil HB#721 rank #2 Was: HB#1074 parallel-draft (vigil HB#721 + sentinel HB#1070 mutual non-discovery under different filenames) Now: BOTH surface in top-2 via TF-IDF over title+body+tags v0.1 uses TF-IDF + cosine similarity. Title weight 3x, tags 2x, body 1x. ~215 LoC. Zero new dependencies. Validates the use case + clears acceptance. v0.2 (separate future task): Transformers.js all-MiniLM-L6-v2 embedding-based upgrade for true paraphrase robustness. Not required for the two empirical miss cases (both keyword-recoverable from body text). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes Sprint 24 #74 batch task #568 (8 PT). Three artifacts: 1. src/commands/brain/index.ts — `pop brain search` command description now references the semantic-search script as the next step when regex returns empty, with cross-ref to the docs file. 2. agent/brain/Knowledge/brain-search-semantic.md (NEW) — full docs: when-to-use guidance, two empirical miss cases (CLever Safe + Part XI parallel-draft), invocation example, v0.1 vs v0.2 tradeoff, heartbeat-skill recommendation, provenance. 3. .claude/skills/poa-agent-heartbeat/SKILL.md "Dogfood the brain layer" section — new "Semantic brain-search" subsection recommending the script when regex returns empty AND topic is conceptually familiar (anti-rediscovery discipline). Smoke: `node agent/scripts/brain-search-semantic.mjs --query "auto-hats cycle-gap" --doc pop.brain.shared --top-k 3` returns 3 relevant lessons (vigil HB#730 cycle-fix + argus HB#861 batch + sentinel HB#1083 workaround). Closes HB#854 brain-search asymmetry meta-finding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes #567 (8 PT medium 1.5h, argus-claimed HB#864). Validates v0.1
prototype (#566) against the 2 empirical miss cases that motivated #74:
Case A — HB#1074 parallel-draft (vigil HB#721 + sentinel HB#1070 mutual
non-discovery under different filenames)
Case B — HB#852 prior-finding miss (argus rediscovered CLever Safe 50
HB-arcs after sentinel HB#1065 due to title-regex miss)
Tier refinement (transparent scope discipline per RULE #24):
- PRIMARY (top-5): the actual miss-case-closure target. For Case A:
both HB#1070 + HB#721. For Case B: HB#1065 alone (the prior lesson
argus failed to find; HB#852 itself is the discovery lesson).
- SECONDARY (top-10): bonus context that co-surfacing improves
deliberation but isn't required for closing the original miss case.
Result against current pop.brain.shared (953 lessons):
- Case A PRIMARY: HB#1070 rank #1, HB#721 rank #2 (both in top-5) ✓
- Case B PRIMARY: HB#1065 rank #1 (top-5) ✓
- Case B SECONDARY: HB#852 rank #6 (within top-10) ✓
Exit 0 (all primary requirements met).
Usage: node test/scripts/brain-search-semantic-validation.js [--top-k 5]
[--verbose]
Per #567 acceptance: vigil OR sentinel runs this + reports both queries pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bundles 4 sentinel-arc Sprint 24 empirical findings + cross-fleet AGGREGATOR-ANONYMITY thread refinements. Closes Hudson HB#1056 ask. 4 substantive findings: 1. Multi-DAO sybil farm REAL but 0 outcome flips (Task B counterfactual) 2. AGGREGATOR-ANONYMITY META-PATTERN n=2 unique anonymous L3 Safes 3. 5-protocol diversified whale 0x29c7b44e characterized (Task C) 4. Protocol-admin + top-holder role collapse vs separation in Solidly forks 12 CLI tools shipped this arc enumerated. 5 RULE updates codified. 5 open threads documented for Sprint 25+. v6 supersedes v1-v5. Sets up extended (c') META-PATTERN n=3 promotion path via Chronos/Pearl/Equalizer/Thena probes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…layer META-PATTERN Incorporates 4-author research thread: - argus HB#850: AGGREGATOR-ANONYMITY META-PATTERN candidate - sentinel HB#1072: anonymity-at-signer-layer extension (n=1) - vigil HB#735-#736: cross-chain Safe identity test (Velo+Aero share same Safe) - vigil HB#737: n=3 chain coverage via Ramses Arbitrum probe (cross-chain hypothesis REFUTED but signer-anonymity HOLDS) - sentinel HB#1089: role-collapse refinement (Ramses team-admin = top-holder; Velo+Aero use distinct chains) Three findings now in Part XII: - (5a) Cross-chain joint-control is fork-lineage-specific (Coinbase OP+Base only) - (5b) Extended-anonymity META-PATTERN holds at n=2 entities (11 signers, 0 ENS-named, vs L1 LOCK-aggregator Safes with ~22-28% ENS-named) - (5c) Two operational patterns in L2 Solidly-family: distinct-proxy-chain (Velo+Aero) vs single-Safe (Ramses) Promotion-eligible per RULE #21 peer-poll (4 authors, n>=2). Also adds Sprint 24 tool ships: --nft-scan-transfers v0.2 (#557), probe-proxy v0.3 (#558), actor-footprint --include-locked. Tool chain now 8-deep. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…IPFS + committed Closes argus-side blocker on vigil v5 consolidator. Each section fetched from prior IPFS pin (HB#787 area) via ipfs.io gateway: - Part I capture-cluster framework: QmbBZhPFdyb (5152 bytes / ~590 words) - Part II governance health leaderboard: QmZq5PEjKXHV (4860 bytes / ~638 words) - Part III voting architecture families: QmTwMnwMWuMP (5661 bytes / ~746 words) - Part IV GaaS economic model: Qma73QU1PbSr (5470 bytes / ~740 words) - Part V corpus expansion / Convex meta-aggregator: Qma5Cu6WgHa (5898 bytes / ~791 words) Total ~27 KB / ~3500 words across 5 sections. Vigil's portfolio-v5-consolidated.md PLACEHOLDER blocks for argus Parts I-V can now be populated by the stitcher per task #552 spec — the per-section MD files exist locally and on remote (sprint-3 branch). Per HB#867 forward plan + vigil HB#738 v5 stitching coordination. Cycle-gap closure side: the argus sections were IPFS-pinned but never committed to the repo's agent/brain/Knowledge/ directory — meaning vigil's consolidator (which reads from local MD files) saw PLACEHOLDER, not the actual content. This HB bridges that gap. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…, add follow-ups Removed: - audit-vetoken --nft-mode v0.2 (shipped HB#731 #557) - probe-proxy v0.3 EIP-2535/EIP-7201 (shipped HB#732 #558) Kept: - audit-governance-stack --multi-chain (15 PT) - veVELO #1 deployer-trace identification (8 PT, reframed since HB#735-#737 closed owner chain) - LENDING vs LOCK governance signature analysis (18 PT) Added: - Chronos/Pearl/Equalizer n=4+ META-PATTERN coverage (12 PT) - Portfolio v5 Part XII Finding 5 IPFS pin + link-swap (10 PT) Total: 63 PT (fits #69 cap 80 PT, 17 PT buffer). Ready-to-fire when #69 executes (~40min). Falls back to CLI Infrastructure since #69 was filed BEFORE --auto-hats default (HB#730 fix); will demonstrate the pre-fix workaround pattern one last time. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds 'Updates HB#1080→#1091' section documenting: - 5 newly-shipped tools with explicit usage triggers - 4 audit findings discovered while dogfooding - 5 discipline adoptions (Step 0.6, Phase-2 pre-stage, etc.) - Daemon IPC EPIPE diagnostic validated 3x - 10-HB compound-value audit pipeline (HB#1074→#1087) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Captures the methodology executed manually 3+ times this Sprint 24: - sentinel HB#1072 Velodrome veVELO #1 admin chain walk - sentinel HB#1089 Ramses veRAM #1 cross-chain test - vigil HB#735/#736 cross-chain Safe verification Inputs: --escrow + --chain + --rpc (any EVM with ethers v5 + Safe ABI). Outputs: top-3 holders + admin-chain walk + Safe characterization + ENS reverse + META-PATTERN extended (c') conclusion. Smoke-tested on Ramses (chain 42161) — reproduces HB#1089 finding (0x20D630cF Safe 2-of-4, 0 named signers, ALL ANONYMOUS). Enables fast n=5+ Solidly-fork probes when canonical escrow address is available (Pearl/Equalizer/Chronos/Thena need upstream protocol-docs lookup; Polygon supported chain so Pearl is highest-leverage target once address found). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…CEHOLDER blocks → abstracts) Replaced 7 PLACEHOLDER blocks with section abstracts citing per-agent files committed by argus HB#868 + sentinel HB#1090: - Part I-V: argus_prime sections (HB#868 fetched from IPFS) - Part VI-VIII: vigil_01 sections (HB#709-#711) - Part IX-X: sentinel_01 sections (HB#1090) - Part XI: joint (vigil HB#721) - Part XII: cross-chain L2 ve-protocol + Finding 5 META-PATTERN (vigil HB#715-#738, 4-author thread) Each abstract cites the per-agent file for full content. consolidated.md now serves as the SHIP-READY index; per-agent files hold deep content. Status: ALL 12 sections present. Ready for IPFS-pin + F D3.3 link-swap NACK-window cycle (next sprint task #5 in pre-staged JSONL). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ch-note Closes #572 (18 PT hard, argus-claimed HB#871). Honest-scoped per RULE #24 following sentinel #563 + #573 precedent (methodology delivered, data-blocker documented). Empirical results (4-aggregator lockstep-analyzer probe): - Convex cvx.eth (LOCK L1): 73.6% top-2 pairwise = COORDINATED DUAL-WHALE (174 co-voted / 128 agreed) - Aura aurafinance.eth (LOCK L1): INSUFFICIENT-DATA (top-2 0 co-votes across both --selection cum-vp + active-share) - Velodrome velodromefi.eth (YIELD-LENDING L2 OP): NO VOTERS FOUND - Aerodrome aerodrome.eth (LENDING L2 Base): NO VOTERS FOUND Substantive findings: 1. LENDING substrate-mismatch CONFIRMED empirically: L2 LENDING-aggregators use on-chain Voter.sol veNFT.vote() not Snapshot; LOCK uses Snapshot off-chain. Hypothesis not testable in same substrate; substrate-distinction IS the finding. 2. LOCK-aggregator heterogeneity within subspecies (NEW): Convex shows predicted lockstep (73.6%); Aura top voters don't overlap on proposals in the corpus. LOCK is not uniform. 3. Composes with AGGREGATOR-ANONYMITY META-PATTERN (HB#850→#867 4-author thread): governance-substrate distinction (LOCK Snapshot vs LENDING on-chain) correlates with anonymity layering. Recommendations for Sprint 25+: - L2 on-chain Voter.sol scanner (enables LENDING-side analysis) - LOCK-aggregator heterogeneity probe n≥4 - Cross-substrate normalization framework (research) Acceptance verification: node agent/scripts/lockstep-analyzer.js cvx.eth 8 --selection cum-vp --pattern-mode binary → expect COORDINATED DUAL-WHALE 73.6% Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…registry Closes Sprint 24 task #570 (audit-governance-stack --multi-chain). Per HB#739 dogfood discovery, 4 of 5 probes (governor/snapshot/safe/vetoken) were ALREADY chain-aware; only actor-footprint was mainnet-only. v0.5 changes: - Replace single GOVERNANCE_TOKENS_MAINNET constant with GOVERNANCE_TOKENS_BY_CHAIN Record<chainId, tokens[]> - Add per-chain registries: - Ethereum (1): existing 7 tokens (CRV/CVX/BAL/AURA/FXS/ENS/UNI) - Optimism (10): VELO/OP/USDC - Base (8453): AERO/USDC - Arbitrum (42161): RAM/ARB/USDC - Polygon (137): USDC/AAVE - Gnosis (100): sDAI/WXDAI - probeActorFootprint: chain-specific lookup, graceful skip with supported-chains list when registry empty - JSON output adds chainId field for transparency - Tooling version: v0.4 → v0.5-actor-footprint-multichain-hb745 Backwards-compat: GOVERNANCE_TOKENS_MAINNET alias retained. Smoke verified: probe on Optimism (veVELO #1 holder) now returns chainId 10, governanceTokensScanned=3, instead of skipping. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…te CRITICAL → MEDIUM when EIP-7702 delegation present Per Sprint 24 retro retro-1098 vigil HB#747 proposed change 'triage-gas-sponsored-aware' (sentinel HB#1100 voted AGREE): The gas check at src/commands/agent/triage.ts:243 was firing CRITICAL every HB because vigil's xDAI balance hovers ~0.007. But sponsored UserOps via the org PaymasterHub cover all Argus chain ops, so direct gas exhaustion does NOT actually block agent work. The CRITICAL flag was misleading. Fix: when gas < 0.01, check isDelegated(myAddr) from src/lib/sponsored. If true → demote to MEDIUM with note "EIP-7702 sponsored path available. Direct ops still possible after refuel; sponsored ops unaffected." If delegation absent → keep CRITICAL with explicit "run pop agent setup-sponsorship" guidance. Smoke verified: vigil triage now reports gas at MEDIUM (was CRITICAL since HB#741+), other priorities unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ingle-link patch (preserves existing) Per Sprint 24 retro retro-1098 vigil HB#747 proposed change 'update-metadata-merge-flag' (sentinel HB#1100 voted AGREE, Quick-ship Sprint 25). Issue surfaced HB#743 F D3.3 swap: --links REPLACES the full link list, requiring all 6 existing links re-passed every time. Risk: silent data-loss if any link forgotten. Fix: new --update-link <name>:<url> flag (array, repeatable). Behavior: - Fetches current metadata's link list as baseline - For each --update-link patch, upserts: case-insensitive name match replaces URL; new name appends - All other existing links preserved unchanged - Mutually exclusive with --links (clear error if both passed) Smoke verified: `--update-link Research:<v5-url>` produces metadataCid Qmbdz2SpfXYchMXjADn8xRErwE8GEhMh5bUAzgM7WL2Czo — IDENTICAL to HB#743 full --links call (current Research link is already v5). Deterministic-CID invariant holds across feature. Usage: # Update just the Research link pop org update-metadata --org <id> --update-link Research:https://ipfs.io/ipfs/<cid> # Update multiple links in one tx pop org update-metadata --org <id> \ --update-link Research:<url1> --update-link "What we built":<url2> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ubcommand Per Sprint 24 retro retro-1098 sentinel-proposed change task-probe-wire-up (vigil HB#747 voted AGREE). src/commands/task/probe.ts already exported probeTaskOnChain helper for internal use by `pop task view` fallback, but it was never exposed as a CLI command. Operators couldn't use it directly for subgraph-lag debugging. New `pop task probe <taskId>` subcommand wraps the helper: - Positional taskId argument - --lookback-blocks override (default 10000 ≈ 12h on Gnosis) - Resolves org TaskManager via standard org module path - Returns full ProbedTask state (status, lifecycle events, IPFS hash, payout, project, claimer, completer) as JSON or human output Smoke verified: `pop task probe 574 --json` returns: - status: Completed - title: Portfolio v5 Part XII Finding 5 IPFS pin + on-chain link-swap NACK-window - claimer: 0x7150 (vigil); completer: 0xC04C (sentinel) - Lifecycle reconstructed from 14+ on-chain events between blocks 46158984 and 46159372. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ple invocation Per Sprint 24 retro retro-1098 sentinel-proposed change boundary-score-help-docs (vigil HB#747 voted AGREE). HB#1081 finding: `pop org boundary-score` with no flags returned BS_total=0 silently — misleading because callers didn't see they needed composition flags. The PARTIAL classification was emitted but easy to miss in JSON output. Two fixes: - src/commands/org/index.ts: command-level description now lists required composition flags + provides concrete invocation example - src/commands/org/boundary-score.ts handlerImpl: explicit warning when no composition flags AND no --space provided. Lists all required flags + example. Still returns the BS_total=0 result (backwards-compat) but operator sees CLEAR guidance. Smoke verified: - Empty invocation → "⚠ No composition flags or --space provided..." + example shown + BS_total=0 PARTIAL classification - With --substrate-band pure-token --cohort-n 1500 --gini 0.85 --top5pct 0.72 --pass-rate 0.81 → BS_total=0.500 HIGH (no warning) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…tinel-proposed)
Closes the 'codifies retro discipline that's been ad-hoc' change from
retro-1098. Adds two subsections to poa-agent-heartbeat SKILL.md §2f:
1. Retro RESPONSE discipline (RULE #29 retro-participation):
- When pop agent triage surfaces retro-respond HIGH, engage within 1 HB
- CLI: pop brain retro show / respond --to / --vote / --message-file
- CLI footgun documented (HB#878): --vote validates against retro author's
change-list only; peer additions need message-body endorsement
2. Retro CLOSE discipline (3-of-3 fleet AGREE triggers file-tasks):
- pop brain retro file-tasks <retro-id> --project <name-or-hex>
- Sentinel HB#1100 RULE #33 candidate: file-tasks within 1-2 HBs of
consensus to prevent retro state drift
Composes with sentinel HB#1099 retro-1098 cycle (first-fleet-dogfood) +
vigil HB#747 12/12+2 response + argus HB#878 12/12+4 response + sentinel
HB#1100 ACK of additions.
5th retro-1098 change shipped (after vigil HB#748/#749x2/#750). Retro
queue 5 of 14 (36%) shipped in 3 HBs. Per HB#878 fleet-shared-velocity
discipline.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…m daemon-down Per Sprint 24 retro retro-1098 sentinel-proposed change fleet-health-ipc-aware (vigil HB#747 voted AGREE, argus HB#878 AGREE — 3-author). Recurrent HB#1078/#1080/#1085 pattern: Automerge disjoint-history rejection holds IPC write briefly past CLI timeout. The daemon recovers within ~1-2s but the CLI saw "ipc-error". Before this change: any IPC error triggered the same "stop+start" remediation as a true daemon-down, causing unnecessary daemon restarts. Fix: probe daemon status, classify into: - "running" → operational - "ipc-error" + retry after 1.5s settle → if recovers, recommend bare retry - "ipc-error" persists across retry → recommend stop+start (per HB#1078) - "down" / unparseable → recommend start Verdict added: DAEMON-DOWN / DAEMON-IPC-ERROR / STALE / HEALTHY (was just STALE / HEALTHY). Remediation tuned per verdict: - DAEMON-DOWN → "pop brain daemon start" (no stop+start needed if already down) - DAEMON-IPC-ERROR (post-retry) → "retry the command" OR (if persisted) full stop+start - STALE + daemon running → existing stop+start+repair - HEALTHY → null Smoke verified: fleet-health on a healthy daemon returns: - daemon.status: "running" - daemon.ipcRetried: false - verdict: HEALTHY - remediation: null Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…hain-popup fix) Hudson surfaced "Keychain Not Found" popup. Root cause: `gh auth git-credential store` (called by git after every push) writes credentials to gh's default OS-keyring backend = macOS login keychain. Agent shell can't unlock the user's login keychain → popup. Fix applied to all 3 agents' bot-identity.sh + $HOME/.gitconfig (per-agent files outside this repo). CLAUDE.md updated to document GH_NO_KEYRING=1 in the env-var list so future fleet onboarding includes the fix by default. Initial misdiagnosis: thought git's osxkeychain helper was the culprit (Xcode system gitconfig sets credential.helper = osxkeychain). The empty- list reset in agent .gitconfig fixed that vector, but the actual popup was from gh-itself; the env-var fix is the load-bearing one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ntent> CLI wrapper Per Sprint 24 retro retro-1098 sentinel-proposed change ipfs-pin-cli-or-pop-org-pin (vigil HB#747 voted AGREE, argus HB#878 AGREE). Prior workflow gap (HB#1085 + HB#742 vigil empirical): `pop org publish` requires a PRE-EXISTING CID — it converts already-pinned content to HTML with Open Graph tags. The fleet had to fall back to: - `task submit` (auto-pins submission text via metadata) - ad-hoc node scripts importing pinFile from src/lib/ipfs.ts (vigil HB#742 Portfolio v5 pin path) New `pop org pin` subcommand wraps the existing helpers: - --file <path>: read binary, call pinFile, return CID - --content <inline>: call pinJson, return CID - Returns gateway URL + size bytes Smoke verified: - pin --content "HB#754 smoke test" → CID Qmdm9Z... (38 bytes) - pin --file portfolio-v5-consolidated.md → CID QmbtJjLZCRhfUYjFfbrHMujzLWCufajpiTcG8XMqCMqYdF IDENTICAL to HB#742 ad-hoc node-script pin. Deterministic-CID invariant holds across the new CLI. Composes with: `pop org publish --cid <pinned-cid>` (HTML wrapper), `pop org update-metadata --update-link Name:url` (HB#749 single-link patch), F D3.x NACK-window pattern (RULE #30). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…closes HB#1083 review-perm-asymmetry trap) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
664-commit sprint arc spanning HB#500–HB#708 across argus_prime + sentinel_01 + vigil_01 fleet. Closes Hudson HB#592 hermes-research bundle end-to-end + ships full Sprint 22 keystone (Top-5 borrows) + adds 3 canonical fleet heuristics (RULE #21/#22/#23). Includes Hudson HB#695 directives (skill-edit perms + 60-min operational-proposal default) + Hudson HB#972 directive (RULE #22 codified).
Major artifacts shipped
Hudson HB#592 hermes-research bundle (Tasks #504/#505/#506) — END-TO-END
agent/artifacts/research/hermes-survey/— n=10 framework deep-reads + 7-axis matrix + 🟢🟢🟢 alliance finding (eliza + Hermes-3 + Argus) + Top-5 borrow + perf appendix. FINAL.md v1.1 IPFSQmNYC5UpnDFnWYEd4bgSTNpbv6wozvMmcii12Y9SVjM6RZ. Approved tx 0xd3e7ca4e.hermes-deliberation-505-1778222169brainstorm closed under 2-of-3 fallback; synthesis IPFSQmP8gCH1Vws9MUGkvf9tzr1iJ1FjyCMr2X5qeMcSBvwk3n. Approved tx 0xc25ab7d6.QmUpmqgRG1uSD7HhVbwcxzjrtewjv2t1kNeRRUA5togY1q. Approved tx 0x82af9354.Top-5 Hermes borrows (Sprint 22 keystone) — ALL SHIPPED + APPROVED
pop brain threadCLI (commits 0ef5650 → b124d84 → 6f3e247)pop brain delegationsCLI (commit 6b8a0ff)pop agent triage --watch(commits 69133f3 → 8226657 → f102274 → 6a121c0 → c72b902)Hudson directives integrated
.claude/settings.local.jsonskill-edit-perms expanded; how-i-think.md operational-proposal--duration 60default codified (commit 2fc7930)#441 HybridVoting upgrade (DESIGN PHASE complete)
#508/#514 createTasksBatch CLI integration
Rules promoted to pop.brain.heuristics
Fleet operational fixes
pop vote simulatewired into CLI command tree (HB#670 commit 2a56fc9)Stats
Test plan
agent/scripts/compress-log.mjs--caused-byfor brain-lesson threading--delegateToflag (HB#597)Hudson review priorities
If you only have time to spot-check:
agent/brain/Knowledge/— added several rules + heuristics; verify no surprisesagent/artifacts/research/hermes-survey/— full #504 hermes catalog deliverable.claude/skills/— added compress-log + (sentinel) should-i-claim skills.claude/settings.local.json— Hudson HB#695 directive expanded permissions; verify expansions match intentagent/brain/Identity/how-i-think.md— Hudson HB#695 directive added operational-proposal--duration 60defaultPer RULE #22
Opening this PR is reversible (close it; force-revert via
git revertis cheap). Hudson reviews when convenient; merge unblocks #480 v2.1 distribution stable canonical URL. No deploy-step in this PR — purely repo-state.🤖 Generated with Claude Code