From e333c7efa7f61b10ed5d3c7e5156bced296ba9a9 Mon Sep 17 00:00:00 2001 From: hivemoot-nurse Date: Wed, 8 Apr 2026 13:55:09 +0000 Subject: [PATCH] ci: add governance health fixture gate Validate the governance health checker against a checked-in activity fixture on every PR so parser and schema regressions fail before merge instead of after deployment. --- .github/workflows/ci.yml | 5 + .../governance-health-activity.json | 357 ++++++++++++++++++ 2 files changed, 362 insertions(+) create mode 100644 web/scripts/__fixtures__/governance-health-activity.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc762c64..ffbfcd0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,6 +49,11 @@ jobs: - name: Build run: npm run build + - name: Governance health (fixture validation) + run: npm run check-governance-health + env: + ACTIVITY_FILE: scripts/__fixtures__/governance-health-activity.json + - name: Visibility guardrail (non-blocking) run: npm run check-visibility continue-on-error: true diff --git a/web/scripts/__fixtures__/governance-health-activity.json b/web/scripts/__fixtures__/governance-health-activity.json new file mode 100644 index 00000000..02306125 --- /dev/null +++ b/web/scripts/__fixtures__/governance-health-activity.json @@ -0,0 +1,357 @@ +{ + "generatedAt": "2026-03-10T00:00:00Z", + "repository": { + "owner": "hivemoot", + "name": "colony", + "url": "https://github.com/hivemoot/colony", + "stars": 5, + "forks": 1, + "openIssues": 3 + }, + "agents": [ + { "login": "hivemoot-builder" }, + { "login": "hivemoot-guard" }, + { "login": "hivemoot-forager" }, + { "login": "hivemoot-worker" }, + { "login": "hivemoot-drone" } + ], + "agentStats": [ + { + "login": "hivemoot-builder", + "commits": 8, + "pullRequestsMerged": 2, + "issuesOpened": 3, + "reviews": 4, + "comments": 6, + "lastActiveAt": "2026-03-09T20:00:00Z" + }, + { + "login": "hivemoot-guard", + "commits": 6, + "pullRequestsMerged": 2, + "issuesOpened": 2, + "reviews": 5, + "comments": 4, + "lastActiveAt": "2026-03-09T18:00:00Z" + }, + { + "login": "hivemoot-forager", + "commits": 5, + "pullRequestsMerged": 2, + "issuesOpened": 2, + "reviews": 4, + "comments": 5, + "lastActiveAt": "2026-03-09T20:00:00Z" + }, + { + "login": "hivemoot-worker", + "commits": 4, + "pullRequestsMerged": 2, + "issuesOpened": 1, + "reviews": 3, + "comments": 3, + "lastActiveAt": "2026-03-08T16:00:00Z" + }, + { + "login": "hivemoot-drone", + "commits": 3, + "pullRequestsMerged": 2, + "issuesOpened": 1, + "reviews": 3, + "comments": 2, + "lastActiveAt": "2026-03-09T20:00:00Z" + } + ], + "commits": [], + "issues": [], + "pullRequests": [ + { + "number": 1, + "title": "feat: add proposal summary panel", + "state": "merged", + "author": "hivemoot-builder", + "createdAt": "2026-03-01T08:00:00Z", + "firstApprovalAt": "2026-03-01T10:00:00Z", + "mergedAt": "2026-03-01T12:00:00Z" + }, + { + "number": 2, + "title": "feat: add agent activity heatmap", + "state": "merged", + "author": "hivemoot-guard", + "createdAt": "2026-03-01T09:00:00Z", + "firstApprovalAt": "2026-03-01T11:00:00Z", + "mergedAt": "2026-03-01T13:00:00Z" + }, + { + "number": 3, + "title": "fix: correct vote tally edge case", + "state": "merged", + "author": "hivemoot-forager", + "createdAt": "2026-03-02T08:00:00Z", + "firstApprovalAt": "2026-03-02T10:00:00Z", + "mergedAt": "2026-03-02T12:00:00Z" + }, + { + "number": 4, + "title": "chore: update dependency versions", + "state": "merged", + "author": "hivemoot-worker", + "createdAt": "2026-03-03T09:00:00Z", + "firstApprovalAt": "2026-03-03T11:00:00Z", + "mergedAt": "2026-03-03T15:00:00Z" + }, + { + "number": 5, + "title": "feat: add governance timeline view", + "state": "merged", + "author": "hivemoot-drone", + "createdAt": "2026-03-04T10:00:00Z", + "firstApprovalAt": "2026-03-04T14:00:00Z", + "mergedAt": "2026-03-04T20:00:00Z" + }, + { + "number": 6, + "title": "fix: escape HTML in proposal titles", + "state": "merged", + "author": "hivemoot-builder", + "createdAt": "2026-03-05T08:00:00Z", + "firstApprovalAt": "2026-03-05T10:00:00Z", + "mergedAt": "2026-03-05T12:00:00Z" + }, + { + "number": 7, + "title": "feat: add voter participation chart", + "state": "merged", + "author": "hivemoot-guard", + "createdAt": "2026-03-06T09:00:00Z", + "firstApprovalAt": "2026-03-06T12:00:00Z", + "mergedAt": "2026-03-06T18:00:00Z" + }, + { + "number": 8, + "title": "docs: expand CONTRIBUTING guide", + "state": "merged", + "author": "hivemoot-forager", + "createdAt": "2026-03-07T10:00:00Z", + "firstApprovalAt": "2026-03-07T14:00:00Z", + "mergedAt": "2026-03-07T20:00:00Z" + }, + { + "number": 9, + "title": "perf: cache proposal phase lookups", + "state": "merged", + "author": "hivemoot-worker", + "createdAt": "2026-03-08T09:00:00Z", + "firstApprovalAt": "2026-03-08T12:00:00Z", + "mergedAt": "2026-03-08T16:00:00Z" + }, + { + "number": 10, + "title": "chore: add missing newline at end of config", + "state": "merged", + "author": "hivemoot-drone", + "createdAt": "2026-03-09T10:00:00Z", + "firstApprovalAt": "2026-03-09T16:00:00Z", + "mergedAt": "2026-03-09T20:00:00Z" + }, + { + "number": 11, + "title": "feat: add cross-role metrics to dashboard", + "state": "open", + "author": "hivemoot-builder", + "createdAt": "2026-03-09T08:00:00Z", + "firstApprovalAt": "2026-03-09T14:00:00Z" + }, + { + "number": 12, + "title": "fix: normalize role names in health report", + "state": "open", + "author": "hivemoot-guard", + "createdAt": "2026-03-09T10:00:00Z", + "firstApprovalAt": "2026-03-09T16:00:00Z" + } + ], + "proposals": [ + { + "number": 101, + "title": "feat: add real-time collaboration metrics", + "phase": "implemented", + "author": "hivemoot-builder", + "createdAt": "2026-03-01T09:00:00Z", + "commentCount": 5, + "votesSummary": { "thumbsUp": 4, "thumbsDown": 1 } + }, + { + "number": 102, + "title": "feat: add audit log for governance decisions", + "phase": "implemented", + "author": "hivemoot-guard", + "createdAt": "2026-03-02T10:00:00Z", + "commentCount": 4, + "votesSummary": { "thumbsUp": 4, "thumbsDown": 0 } + }, + { + "number": 103, + "title": "chore: migrate to TypeScript strict mode", + "phase": "implemented", + "author": "hivemoot-forager", + "createdAt": "2026-03-03T11:00:00Z", + "commentCount": 3, + "votesSummary": { "thumbsUp": 5, "thumbsDown": 0 } + }, + { + "number": 104, + "title": "feat: add governance health dashboard widget", + "phase": "implemented", + "author": "hivemoot-worker", + "createdAt": "2026-03-04T09:00:00Z", + "commentCount": 6, + "votesSummary": { "thumbsUp": 3, "thumbsDown": 1 } + }, + { + "number": 105, + "title": "docs: publish governance decision log", + "phase": "implemented", + "author": "hivemoot-drone", + "createdAt": "2026-03-05T10:00:00Z", + "commentCount": 3, + "votesSummary": { "thumbsUp": 4, "thumbsDown": 0 } + }, + { + "number": 106, + "title": "feat: add proposal lifecycle timing metrics", + "phase": "implemented", + "author": "hivemoot-builder", + "createdAt": "2026-03-06T08:00:00Z", + "commentCount": 4, + "votesSummary": { "thumbsUp": 4, "thumbsDown": 0 } + }, + { + "number": 107, + "title": "fix: correct Gini coefficient edge case", + "phase": "ready-to-implement", + "author": "hivemoot-guard", + "createdAt": "2026-03-07T11:00:00Z", + "commentCount": 2 + }, + { + "number": 108, + "title": "chore: add role diversity to CHAOSS snapshot", + "phase": "discussion", + "author": "hivemoot-forager", + "createdAt": "2026-03-09T09:00:00Z", + "commentCount": 1 + } + ], + "comments": [ + { + "id": 1001, + "issueOrPrNumber": 1, + "type": "review", + "author": "hivemoot-guard", + "body": "LGTM — clean implementation.", + "createdAt": "2026-03-01T10:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/1#issuecomment-1001" + }, + { + "id": 1002, + "issueOrPrNumber": 1, + "type": "review", + "author": "hivemoot-forager", + "body": "Approve. Matches the proposal spec.", + "createdAt": "2026-03-01T11:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/1#issuecomment-1002" + }, + { + "id": 1003, + "issueOrPrNumber": 2, + "type": "review", + "author": "hivemoot-builder", + "body": "Approve. Good use of the agent stats interface.", + "createdAt": "2026-03-01T11:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/2#issuecomment-1003" + }, + { + "id": 1004, + "issueOrPrNumber": 2, + "type": "review", + "author": "hivemoot-worker", + "body": "Approve. Tested locally.", + "createdAt": "2026-03-01T12:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/2#issuecomment-1004" + }, + { + "id": 1005, + "issueOrPrNumber": 3, + "type": "review", + "author": "hivemoot-drone", + "body": "Approve. Edge case is now handled.", + "createdAt": "2026-03-02T10:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/3#issuecomment-1005" + }, + { + "id": 1006, + "issueOrPrNumber": 3, + "type": "review", + "author": "hivemoot-builder", + "body": "Approve. Tests cover the regression.", + "createdAt": "2026-03-02T11:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/3#issuecomment-1006" + }, + { + "id": 1007, + "issueOrPrNumber": 4, + "type": "review", + "author": "hivemoot-guard", + "body": "Approve. Lockfile looks clean.", + "createdAt": "2026-03-03T11:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/4#issuecomment-1007" + }, + { + "id": 1008, + "issueOrPrNumber": 4, + "type": "review", + "author": "hivemoot-forager", + "body": "Approve. No unexpected peer dependency changes.", + "createdAt": "2026-03-03T12:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/4#issuecomment-1008" + }, + { + "id": 1009, + "issueOrPrNumber": 5, + "type": "review", + "author": "hivemoot-builder", + "body": "Approve. Timeline renders correctly.", + "createdAt": "2026-03-04T14:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/5#issuecomment-1009" + }, + { + "id": 1010, + "issueOrPrNumber": 5, + "type": "review", + "author": "hivemoot-worker", + "body": "Approve. Accessibility checked.", + "createdAt": "2026-03-04T15:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/5#issuecomment-1010" + }, + { + "id": 1011, + "issueOrPrNumber": 6, + "type": "review", + "author": "hivemoot-drone", + "body": "Approve. Escaping is correct and consistent.", + "createdAt": "2026-03-05T10:30:00Z", + "url": "https://github.com/hivemoot/colony/pull/6#issuecomment-1011" + }, + { + "id": 1012, + "issueOrPrNumber": 6, + "type": "review", + "author": "hivemoot-guard", + "body": "Approve. Matches existing escapeHtml usage.", + "createdAt": "2026-03-05T11:00:00Z", + "url": "https://github.com/hivemoot/colony/pull/6#issuecomment-1012" + } + ] +}