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>
25 KiB
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; directconfig.yamledits for weights are prohibiteddocs/decisions/007-web-interaction-layer.md— weight proposals section updated to describe ballot UI (sliders summing to 100%) rather than incorrect PR-based flowdocs/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 primeruns at session start and pre-compact; any Claude Code contributor gets this automatically on clone (analogous to.vscode/settings.json)
Changed
.gitignore—CLAUDE.mdadded; it is generated locally bybd setup claudeand is Claude-specific;AGENTS.mdis 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 runbd primefor 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.hooksPathnow points to.beads/hooks/instead of.githooks/README.md— Contributing setup updated:bd initreplacesgit config core.hooksPath .githooks; each contributor runsbd 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 underdocs/(e.g.docs/STYLE.md),README.mdmust also be staged; prompts contributor to verify the project structure diagram is current
Changed
README.md— project structure diagram now includesdocs/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.mdis 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 underdocs/, 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 todocs/STYLE.mdREADME.md— Contributing section now links todocs/STYLE.mdbefore 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 problemdocs/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.mdmust also be staged; prompts the collaborator to verify the project structure diagram is current.gitmessage— added checklist item:README.mdproject 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 includesdocs/sites/(withplatforms/,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 stagingCHANGELOG.md; bypass available viagit 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 aPlatform:link to the relevant platform doc docs/sites/active/github.md→ renamedgithub-osarch.mdfor naming consistency with other site filesdocs/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 atcommunity.osarch.org(Vanilla Forums); signals: posts, topics created, likes received; weightforum_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 scratchdocs/sites/CHANGE_TEMPLATE.md— template for any modification to an active site: weight adjustments, scope changes, or full retirement
Changed
config.yaml— addedgithub.reposlist to define collection scope explicitlydocs/sites/active/README.md— GitHub section notes equal weighting with link to ADR 004docs/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 todocs/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.mdREADME.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 linksdocs/ARCHITECTURE.md— bold section titles converted to###headers throughout, enabling anchor links; plain file references replaced with markdown linksdocs/decisions/001-python-and-json.md— linked to ARCHITECTURE.md "Git as the distributed database" and "Distributed database" future directiondocs/decisions/002-weighted-scoring.md— linked to "Correctability over precision" and "Community weight governance" sectionsdocs/decisions/003-public-data-only.md— linked back to "Public data only" principledocs/sites/active/github.md— vague ADR 003 reference replaced with linkdocs/sites/active/opencollective-osarch.md— vague ARCHITECTURE.md references replaced with links to specific funding open question sectionsdocs/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/bonsaiPRdocs/sites/active/opencollective-osarch.md— opencollective.com/osarchdocs/sites/active/opencollective-opensourcebim.md— opencollective.com/opensourcebimdocs/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 proposalsdocs/sites/proposed/anddocs/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 sourcedocs/sites/proposed/github.md— first site proposal: GitHub, using unauthenticated public API, scoped to OSArch-affiliated repositoriesdocs/sites/active/anddocs/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:- 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?
- 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 contextdocs/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.jsonwith five OSArch community members - CLI entry point:
python main.pyproduces a ranked agency signal table docs/ARCHITECTURE.md— living architecture overviewdocs/decisions/001-python-and-json.md— why Python and git-tracked JSONdocs/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)