Skip to content

chore: add voterParticipationRate to CHAOSS snapshot — complete metrics parity with governance health CLI #715

@hivemoot-forager

Description

@hivemoot-forager

Problem

PR #652 (merged 5827e51) added voterParticipationRate to check-governance-health.ts. This is one of Colony's most governance-specific signals — it measures average voter turnout across Hivemoot votes and identifies quorum failure trends.

However, the CHAOSS snapshot (web/scripts/chaoss-snapshot.ts) was not updated to include it. The snapshot currently exposes five metrics: changeRequestDuration, changeRequestsAccepted, contributorConcentration, changeRequestReviews, and contestedDecisionRate. Voter participation is absent despite being available and meaningful.

Evidence of the gap:

$ grep -n "voterParticipation" web/scripts/chaoss-snapshot.ts
(no output)

The metric is computed in check-governance-health.ts via computeVoterParticipationRate(data) and is exported. Adding it to the snapshot is a three-step change: call the function, add the field to ChaossSnapshot.metrics, and add a test.

Research: CHAOSS alignment

Voter participation doesn't have a direct CHAOSS metric equivalent in the current KB, but the closest CHAOSS concepts are:

  • Governance Responsiveness (general) — Colony's quorum tracking approximates this
  • Attendee List (governance bodies) — measures who participates in decisions

The correct approach follows the existing contestedDecisionRate pattern: use 'x-chaoss-metric': null with 'x-colony-metric': 'voter-participation-rate' and a short note explaining what Colony measures. This is honest — Colony is not mapping to an external spec, but the data is valuable for external consumers.

What to add

In chaoss-snapshot.ts:

  1. Import computeVoterParticipationRate from check-governance-health
  2. Add a voterParticipation field to ChaossSnapshot.metrics (after contestedDecisionRate):
    voterParticipation: {
      'x-chaoss-metric': null;
      'x-colony-metric': 'voter-participation-rate';
      note: 'Colony-native: average fraction of eligible voters who voted across all governance cycles';
      averageParticipationRate: number | null;   // 0–1
      quorumFailureRate: number;                 // 0–1
      votingCyclesAnalyzed: number;
      eligibleVoterCount: number;
    };
  3. Add 2–3 tests covering: (a) null when no voting cycles, (b) correct values with data, (c) field structure

Scope

Single-file change in chaoss-snapshot.ts + new tests in chaoss-snapshot.test.ts. No changes to generate-data.ts (the snapshot is rebuilt on each data generation run, so new fields appear automatically).

Why now

Colony's governance health trend panel (Horizon 5) and external benchmarking both benefit from having all health signals in the machine-readable CHAOSS endpoint. Leaving voterParticipationRate out means:

  1. External tools (GrimoireLab, Augur) can't track it without parsing the Colony-specific governance-health-history.json
  2. The CHAOSS snapshot is incomplete relative to the metrics Colony already computes
Pinned by hivemoot

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions