Agency/CHANGELOG.md
Ryan Schultz 37b5eb4609 docs: ADR 008 — platform weight governance
Defines how platform weights are set and changed: founding vote
(initiator defines eligible members, averaged proposals), annual
community vote (all platforms simultaneously, median of submitted
distributions), and structural change tier.

Updates ADR 002 and ADR 007 to reflect the new mechanism, and
ARCHITECTURE.md to mark weight governance as resolved rather than
a future direction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 20:31:32 -05:00

521 lines
25 KiB
Markdown

# Changelog
Each entry records what changed, why, and what it means for the system going forward.
This log is for humans and AI alike — assume the reader has not seen prior commits.
---
## [0.1.25] — 2026-05-14 — ADR 008: platform weight governance
### Added
- `docs/decisions/008-platform-weight-governance.md` — defines how platform weights are
set and changed: founding vote (initiator defines eligible members, averaged proposals),
annual community vote (all platforms simultaneously, median of submitted distributions
summing to 100%), and structural change tier (adding/removing platforms, changing the
mechanism)
### Changed
- `docs/decisions/002-weighted-scoring.md` — starting weights now reference ADR 008 as
the formal governance mechanism; direct `config.yaml` edits for weights are prohibited
- `docs/decisions/007-web-interaction-layer.md` — weight proposals section updated to
describe ballot UI (sliders summing to 100%) rather than incorrect PR-based flow
- `docs/ARCHITECTURE.md` — community weight governance section updated from
"future direction" to current design, with link to ADR 008
### Why
Weight governance was an open question — weights were effectively maintainer-set with no
formal community process. ADR 008 closes that gap by making weights a community decision
from day one, consistent with the project's core premise that legitimacy comes from
participation, not structure.
---
## [0.1.24] — 2026-05-12 — Wire bd (beads) Claude Code hook; ignore CLAUDE.md
### Added
- `.claude/settings.json` — project-level Claude Code hooks: `bd prime` runs at
session start and pre-compact; any Claude Code contributor gets this automatically
on clone (analogous to `.vscode/settings.json`)
### Changed
- `.gitignore``CLAUDE.md` added; it is generated locally by `bd setup claude`
and is Claude-specific; `AGENTS.md` is the committed tool-agnostic equivalent
### Why
`bd setup claude` generates a `CLAUDE.md` containing beads workflow instructions
for Claude Code agents. Committing it would introduce a Claude-specific file into
a repo designed to be tool-agnostic. The `SessionStart` hook in `.claude/settings.json`
is the functional part — it injects `bd prime` context at the start of every session
without encoding any agent-specific instructions in the repo itself.
---
## [0.1.23] — 2026-05-12 — Add bd (beads) for agent issue tracking
### Added
- `AGENTS.md` — minimal beads pointer; agents run `bd prime` for full workflow context
- `.beads/` — beads configuration, hooks, and embedded Dolt database (committed config;
database itself is gitignored)
### Changed
- `.beads/hooks/pre-commit` — beads merged its integration block into our existing
pre-commit hook; all three existing checks are preserved; `core.hooksPath` now points
to `.beads/hooks/` instead of `.githooks/`
- `README.md` — Contributing setup updated: `bd init` replaces `git config core.hooksPath
.githooks`; each contributor runs `bd setup <their-agent>` locally — no agent-specific
files committed to the repo
### Why
Beads provides a dependency-aware issue graph for AI agents working in this repo —
replacing ad-hoc markdown task lists with a structured, persistent store. Using `AGENTS.md`
(not `CLAUDE.md`) keeps the setup tool-agnostic: any agent that reads `AGENTS.md` gets
the same workflow pointer. The hooks integration is additive — existing pre-commit checks
are unchanged.
---
## [0.1.22] — 2026-05-12 — ADR 007: web interaction layer over git backend
### Added
- `docs/decisions/007-web-interaction-layer.md` — records the decision to keep git as
the canonical backend while building a web layer on top; covers what the web layer
handles (proposals, voting, scores, config), the thin centralization tradeoff, the
progressive enhancement principle, and why a database-backed app was rejected
### Changed
- `README.md` — "Web-based dashboard" roadmap item expanded to reflect the broader scope:
score dashboard, proposal submission, and voting UI, with a link to ADR 007
### Why
The system is git-native by design, but git is a poor interaction layer for non-technical
communities. Keeping git as the storage and audit layer while abstracting it behind a web
UI preserves tamper-evidence, fork-ability, and auditability — the web server holds no
data of its own. Documenting this before the web layer is built ensures the decision is
made explicitly rather than discovered later when a database-backed implementation would
be harder to undo.
---
## [0.1.21] — 2026-05-11 — Drop commit hashes from changelog entries
### Changed
- `CHANGELOG.md` — commit hashes removed from all version headers; format is now
`## [version] — date — description`
### Why
Including the hash required a follow-up commit after every entry to backfill the hash
once the commit existed — because the hash depends on the file contents, which would
need to include the hash (circular). The hash is also redundant: `git log --oneline`
finds any commit in seconds. Version number + date + description is sufficient.
---
## [0.1.20] — 2026-05-11 — Guard new top-level doc files; fix README after STYLE.md
### Added
- `.githooks/pre-commit` — third check: if a new file is staged directly under `docs/`
(e.g. `docs/STYLE.md`), `README.md` must also be staged; prompts contributor to verify
the project structure diagram is current
### Changed
- `README.md` — project structure diagram now includes `docs/STYLE.md`; it was committed
in 0.1.19 but the diagram was not updated at that time (the gap this commit closes)
- `README.md` — Documentation system section updated: `docs/STYLE.md` is now listed as a
fourth standing reference document; the paragraph previously said "read those three things"
- `README.md` — AI agent note now includes an explicit "Project structure diagram" reminder:
when adding any file directly under `docs/`, check the diagram proactively before staging
- `.gitmessage` — checklist item for the structure diagram now explicitly names the
"new file directly under docs/" case alongside new directories
### Why
`docs/STYLE.md` was committed in 0.1.19 without updating the README structure diagram or
documentation overview — caught only after the fact. The hook check for new directories
(added in 0.1.17) did not fire because `docs/` already existed. This commit closes that
gap: the hook now checks depth-1 files under `docs/` as a distinct case, and the AI agent
note makes the rule explicit so the hook is a backstop, not the first line of defence.
---
## [0.1.19] — 2026-05-11 — Documentation style guide; community-agnostic principle
### Added
- `docs/STYLE.md` — documentation conventions for all contributors (human and AI):
community-agnostic writing, changelog entry format, ADR conventions, and the test for
whether a document is written for any community vs. OSArch specifically
### Changed
- `docs/ARCHITECTURE.md` — added "OSArch is the reference implementation, not the
intended audience" as a named design principle, linking to `docs/STYLE.md`
- `README.md` — Contributing section now links to `docs/STYLE.md` before listing
contribution paths
### Why
Documentation kept drifting toward OSArch-specific framing — specific contributor names,
hardcoded platform lists, examples that only make sense with OSArch context. Rather than
catching this case-by-case, the convention is now written down in one place and surfaced
at every contributor entry point. The test is simple: does this document make sense to
someone from a community that has never heard of OSArch?
---
## [0.1.18] — 2026-05-11 — ADR 005 + 006: git-native voting and identity attestation
### Added
- `docs/decisions/005-git-native-voting-system.md` — records the decision to use
linkable ring signatures for anonymous, verifiable voting; covers the full vote
lifecycle (proposal → snapshot → create → submit → tally → result), the returning
officer submission norm, eligibility model, trust surface, and bootstrap problem
- `docs/decisions/006-cross-platform-identity-attestation.md` — records the decision
to use human attestation for cross-platform identity linking; covers contributor
profile files, attestation tiers, revocation, sybil resistance, and the relationship
to the voting key
### Why
The governance design emerged from an extended discussion about how communities should
make binding decisions about what the system collects and how it weights contributions.
The two ADRs capture that reasoning before implementation begins — so future contributors
understand why the system looks the way it does, not just what it does. Both are marked
Proposed; implementation is future work.
---
## [0.1.17] — 2026-05-11 — Extend hook and checklist to guard README structure
### Changed
- `.githooks/pre-commit` — added a second check: if a staged commit introduces a new
directory (not present in HEAD), `README.md` must also be staged; prompts the
collaborator to verify the project structure diagram is current
- `.gitmessage` — added checklist item: `README.md` project structure diagram current?
### Why
The README structure diagram fell behind when `docs/sites/platforms/` and `.githooks/`
were added — caught only after the fact. The new hook check catches this mechanically
at commit time whenever a new directory is introduced.
---
## [0.1.16] — 2026-05-11 — Update README project structure diagram
### Changed
- `README.md` — project structure diagram now includes `docs/sites/` (with `platforms/`,
`active/`, `proposed/`, `retired/`, templates) and `.githooks/`; both were missing
after recent additions
---
## [0.1.15] — 2026-05-11 — Pre-commit hook: enforce CHANGELOG.md on substantive commits
### Added
- `.githooks/pre-commit` — blocks commits that stage substantive files (`docs/`, `src/`,
`data/`, `config.yaml`, `main.py`, `requirements.txt`, `README.md`, `.gitmessage`)
without also staging `CHANGELOG.md`; bypass available via `git commit --no-verify`
### Changed
- `README.md` — Contributing section now includes one-time setup step:
`git config core.hooksPath .githooks`
### Why
Two recent commits (README table consolidation, community forum addition) were pushed
without a changelog entry — caught only after the fact. The `.gitmessage` checklist
already included a CHANGELOG reminder but is easy to bypass when committing with `-m`.
A pre-commit hook enforces the rule mechanically for all collaborators regardless of
tool or workflow. Hooks live in `.githooks/` (tracked) rather than `.git/hooks/`
(untracked) so all collaborators get them.
---
## [0.1.14] — 2026-05-11 — Split site docs into platform docs + site docs
### Added
- `docs/sites/platforms/` — new directory; one file per platform (GitHub, MediaWiki,
Vanilla Forums, Matrix, Open Collective) covering API mechanics, available signals,
rate limits, and general concerns; reusable by any community without OSArch-specific context
### Changed
- All `docs/sites/active/*.md` — stripped of platform mechanics; now cover only:
inclusion rationale, OSArch-specific weight justification, and a `Platform:` link to
the relevant platform doc
- `docs/sites/active/github.md` → renamed `github-osarch.md` for naming consistency
with other site files
- `docs/sites/active/README.md` — GitHub links updated; platforms directory linked
at the foot of the page
### Why
Platform mechanics (API endpoints, auth, rate limits) have a different lifecycle than
site inclusion decisions. Separating them makes the platform docs reusable by other
communities adopting this system, and keeps site docs focused on the governance question:
*why is this specific instance included?*
---
## [0.1.13] — 2026-05-11 — Add OSArch Community Forum as active data source
### Added
- `docs/sites/active/community-osarch.md` — OSArch Community Forum at
`community.osarch.org` (Vanilla Forums); signals: posts, topics created, likes received;
weight `forum_posts: 0.2`; documents decision not to use Vanilla's built-in gamification
### Changed
- `docs/sites/active/README.md` — Community Forum row added to active sources table
### Why
The forum is the primary discussion venue for the OSArch community and was missing from
the active sources list. Likes received added as a quality signal alongside raw post count.
Vanilla's opaque built-in gamification system explicitly excluded — the community should
own the weighting, not inherit it from the platform.
---
## [0.1.12] — 2026-05-11 — Consolidate active sources into a single table
### Changed
- `docs/sites/active/README.md` — two separate tables (GitHub repos; other platforms)
merged into one unified table with Source, URL, Signal, Weight, and Details columns;
GitHub repos now show signal type and weight inline
### Why
Two tables with different columns made it harder to compare sources at a glance.
A single table with consistent columns makes the full picture immediately readable.
---
## [0.1.11] — 2026-05-11 — AI agent guard: no exploratory artifacts in commits
### Changed
- `README.md` — added "Exploratory work must not leak into commits" rule to the AI agent
note: before staging, grep for any concept explored but rejected this session; nothing
from a rejected approach should appear outside the ADR that records it
- `.gitmessage` — added pre-commit checklist item to verify exploratory artifacts have
been cleared before staging
### Why
During this session, a tier-weighting system was prototyped and rejected. The working
directory accumulated artifacts (column headers, config keys, doc sections) that had
to be manually hunted down before the commit was clean. This guard ensures future
agents — and humans — run that check explicitly rather than catching it after the fact.
---
## [0.1.10] — 2026-05-11 — ADR 004; CHANGE_TEMPLATE; GitHub repo scope in config
### Added
- `docs/decisions/004-no-per-repo-tier-weighting.md` — all GitHub repos weighted
equally; records the reasoning so the question is not re-litigated from scratch
- `docs/sites/CHANGE_TEMPLATE.md` — template for any modification to an active site:
weight adjustments, scope changes, or full retirement
### Changed
- `config.yaml` — added `github.repos` list to define collection scope explicitly
- `docs/sites/active/README.md` — GitHub section notes equal weighting with link to ADR 004
- `docs/ARCHITECTURE.md` — CHANGE_TEMPLATE linked from site governance section
---
## [0.1.9] — 2026-05-11 — Add README to active sites directory
### Added
- `docs/sites/active/README.md` — table of all active data sources with URL,
signal type, weight, and link to detail file; links to proposal and retirement templates
---
## [0.1.8] — 2026-05-11 — Rename TEMPLATE.md; link templates from docs
### Changed
- `docs/sites/TEMPLATE.md` → renamed to `docs/sites/PROPOSAL_TEMPLATE.md`
(names the process step, not just the outcome; pairs with CHANGE_TEMPLATE.md)
- `docs/ARCHITECTURE.md` — site governance section now links directly to both
PROPOSAL_TEMPLATE.md and CHANGE_TEMPLATE.md
- `README.md` — Contributing section now links to both templates
---
## [0.1.7] — 2026-05-11 — Cross-link docs using section anchors + AI agent guidance
### Changed
- `README.md` — expanded "Note for AI agents" with guidance on cross-linking:
when to add anchor links, how anchors are formatted, and that loose "see X" references
should be treated as technical debt to be replaced with direct section links
- `docs/ARCHITECTURE.md` — bold section titles converted to `###` headers throughout,
enabling anchor links; plain file references replaced with markdown links
- `docs/decisions/001-python-and-json.md` — linked to ARCHITECTURE.md "Git as the
distributed database" and "Distributed database" future direction
- `docs/decisions/002-weighted-scoring.md` — linked to "Correctability over precision"
and "Community weight governance" sections
- `docs/decisions/003-public-data-only.md` — linked back to "Public data only" principle
- `docs/sites/active/github.md` — vague ADR 003 reference replaced with link
- `docs/sites/active/opencollective-osarch.md` — vague ARCHITECTURE.md references
replaced with links to specific funding open question sections
- `docs/sites/active/opencollective-opensourcebim.md` — same as above
---
## [0.1.6] — 2026-05-11 — Add site retirement template
### Added
- `docs/sites/CHANGE_TEMPLATE.md` — standard format for retiring a data source;
captures reason category, evidence, dissenting views, handling of historical data,
and whether the site should ever be reconsidered
### Why
A site retired due to gaming is very different from one retired because the community
moved platforms. The retirement record is permanent and future contributors need the
full context, not just the outcome.
---
## [0.1.5] — 2026-05-11 — Seed active sites at genesis
### Added
- `docs/sites/active/github.md` — GitHub, with full repo list: IfcOpenShell/IfcOpenShell,
brunopostle/ifcurl, brunopostle/ifcmerge, brunopostle/homemaker-addon, falken10vdl/bonsaiPR
- `docs/sites/active/opencollective-osarch.md` — opencollective.com/osarch
- `docs/sites/active/opencollective-opensourcebim.md` — opencollective.com/opensourcebim
- `docs/sites/active/matrix-osarch.md` — #OSArch:matrix.org (via Element)
- `docs/sites/active/wiki-osarch.md` — wiki.osarch.org (MediaWiki public API)
- `docs/sites/PROPOSAL_TEMPLATE.md` — standard format for future site proposals
- `docs/sites/proposed/` and `docs/sites/retired/` — empty, ready for use
### Why seeded directly as active
These sites represent the obvious starting set. Rather than run a formal proposal process
before any collector exists, they are bootstrapped at genesis. All are marked
"bootstrapped at genesis — community may remove or amend." The community can retire any
of these through the normal process once it is established.
### Notes
Individual contributor repos included alongside org repos — meaningful OSArch technical
work happens across accounts, not just within a single org. Matrix flagged as needing
public accessibility verification before a collector is built.
---
## [0.1.4] — 2026-05-11 — Open question: site inclusion governance + sites scaffold
### Added
- `docs/sites/PROPOSAL_TEMPLATE.md` — standard format for proposing a new data source
- `docs/sites/proposed/github.md` — first site proposal: GitHub, using unauthenticated
public API, scoped to OSArch-affiliated repositories
- `docs/sites/active/` and `docs/sites/retired/` — empty directories ready for use
as proposals are approved or retired
### Changed
- `docs/ARCHITECTURE.md` — added open question on how the community should govern
which platforms are collected from, with one possible approach outlined:
criteria-first (public data, active use, genuine signal, stability, relevance),
then a proposal + discussion + vote process; voting requires a minimum agency
score threshold (active participant gate), equal vote above that threshold;
permanent record of retired sites and reasons for removal
### Why
The list of platforms the system collects from defines what "participation" means.
That is a form of power — it should be community-governed, not owner-governed.
Seeding the structure now makes the process real and ready to use, not merely theoretical.
GitHub is the natural first proposal given it hosts the community's primary technical work.
### Changed
- `docs/ARCHITECTURE.md` — added open question on how the community should govern
which platforms are collected from, with one possible approach outlined:
criteria-first (public data, active use, genuine signal, stability, relevance),
then a proposal + discussion + vote process; voting requires a minimum agency
score threshold (active participant gate), equal vote above that threshold;
permanent record of retired sites and reasons for removal
### Why
The list of platforms the system collects from defines what "participation" means.
That is a form of power — it should be community-governed, not owner-governed.
Documenting this as an open question before any real collector is built ensures
the community decides the process before it becomes consequential.
---
## [0.1.3] — 2026-05-11 — ADR: public data only
### Added
- `docs/decisions/003-public-data-only.md` — collectors may only use publicly accessible
data; no API keys, authentication, or platform permission required
### Changed
- `docs/ARCHITECTURE.md` — added "Public data only" as a core design principle
### Why
As collector design began, a choice emerged between authenticated APIs and public data.
Restricting to public data only keeps the system independent of platform gatekeepers,
immediately forkable without setup, auditable by anyone, and aligned with open source
values. A less complete signal that anyone can verify is more valuable than a more
complete signal that depends on platform permission. See ADR 003 for the full argument.
---
## [0.1.2] — 2026-05-10 — README, open questions, framing refinements
### Added
- `README.md` — introduces the project to first-time visitors: what it is, the core idea,
quickstart, how scores work, how to fork it for another community, and the doc system
- Note in README directing AI agents to keep the file at a high overview level
- Funding collectors (Open Collective, Funders) added to roadmap
- Hint in README that weight changes may eventually have a community governance process
### Changed
- `docs/ARCHITECTURE.md` — two new open questions added to Future Directions:
1. Should funding signals be merged across platforms or kept separate, given that
transparency of the funding act may matter as much as the funding itself?
2. Should funding have representation beyond a score weight, or is the existing
low-weighted score sufficient? Left genuinely unresolved for community debate.
- `docs/ARCHITECTURE.md` — added weight governance as a future direction: lightweight
proposal process, open to active participants, equal say regardless of agency rank
### Framing decisions
The README was revised several times to sharpen the language:
- Agency does confer authority over time — this was initially disclaimed, then corrected;
the language was tightened to match reality
- "People hesitate to act because participation is real but untracked — and what isn't
tracked can always be contested" replaces an earlier framing that implied people already
had the right but lacked confidence; the stronger point is that the system makes the
right explicit
- Example output clearly labeled as sample data, not real community figures
---
## [0.1.1] — 2026-05-10 — Multi-community framing + future database directions
### Changed
- `docs/ARCHITECTURE.md` — clarified that OSArch is the reference implementation, not the
only intended user; any community can fork, adjust weights, and run this for their context
- `docs/ARCHITECTURE.md` — added "Future directions" section covering the path toward
a distributed, tamper-evident data layer
### Why (multi-community framing)
The system was always meant to be generalizable, but the early docs wrote as if OSArch was
the only audience. That framing was corrected early — before any real integrations exist —
so the architecture doesn't accidentally bake in OSArch-specific assumptions.
The fork-to-adopt model (replace data, adjust weights) is now explicit.
### Why (future database)
The current git-tracked JSON approach is a deliberate starting point, not the end goal.
Blockchain was raised as a candidate for the eventual data layer. Rather than build it now
(too complex, gas costs, wallet friction), the reasoning and alternatives are documented so
the decision can be revisited with full context later.
Alternatives noted: IPFS, Hypercore/Dat, signed append-only logs, private consortium chains.
---
## [0.1.0] — 2026-05-10 — Genesis
### Added
- Initial project scaffold: `main.py`, `src/scoring/`, `src/outputs/`, `data/`, `config.yaml`
- Weighted scoring system with configurable weights in `config.yaml`
- Sample participation data in `data/sample.json` with five OSArch community members
- CLI entry point: `python main.py` produces a ranked agency signal table
- `docs/ARCHITECTURE.md` — living architecture overview
- `docs/decisions/001-python-and-json.md` — why Python and git-tracked JSON
- `docs/decisions/002-weighted-scoring.md` — why simple weighted scoring
### Why this structure
The system starts minimal and observable. No real API integrations yet — only mock data.
The goal of this commit is to establish the scoring model and make it immediately runnable
and arguable. Every subsequent commit builds on this foundation.
### What's next
- First real data collector (OSArch forum API is the likely candidate)
- Community review of weights in `config.yaml`
- Normalization of scores (deferred until the signal is socially validated)