docs: adopt a contributor and governance model (+ print_debug_info) - #23
Merged
Conversation
…ions Bug and performance reports need the storage stack, the framework adapter that is actually installed, and the free-threading state. That last one is reported as two facts, not one: the build flag and whether an import (numcodecs, today) has since switched the GIL back on. They are not the same thing and the difference has explained more than one "works for me". Nothing is imported to report on it — versions come from distribution metadata — because importing torch and JAX in one process crashes. A debug helper that took the process down while someone was trying to report a bug would be worse than none. debug_info() returns the same facts as a dict, so a benchmark record can carry them. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The repo had no CONTRIBUTING, no issue or PR templates, no code of conduct and no governance document — .github/ held only workflows. With 0 open issues and every PR authored by the maintainer, that reads from outside as a project not taking help. The guide leads with the load-bearing scope limits and the reason for each, so a contributor can tell whether a change is compatible before writing it rather than in review. GOVERNANCE.md adapts the Zarr Project's affiliated-project template — a merit-based core-developer group, lazy consensus, a vote as last resort — with a stated intent to seek Zarr Affiliated Project status, and says plainly that one maintainer is a transitional state. The issue forms are shaped by what triage actually needs: the bug form asks for print_debug_info() output and the chunk geometry, and there is a dedicated performance form, because a throughput report without geometry, loader config, hardware and a control run is not actionable. On AI-assisted contributions the line is accountability, not authorship of prose. This project is built with AI assistance including drafted PR descriptions, and a rule the maintainer breaks daily is not a rule; what is required is that a human reviewed every change, can explain why each is correct, and verified the claims in the description. CLAUDE.md now records that an assistant must never tick that attestation box on the author's behalf — that is precisely the failure the policy exists to prevent. Co-Authored-By: Claude Opus 5 <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
insitubatch had no
CONTRIBUTING, no issue or PR templates, no code of conduct and no governance document —.github/held only workflows. With 0 open issues and every PR from #11–#22 authored by the maintainer, the repo reads from outside as a solo project that is not taking help, and a would-be contributor has no way to learn the scope limits before spending a weekend on a change that would be declined.This adds the contributor-facing layer, plus the one small piece of code it depends on.
The guide (
docs/contributing.md, canonical on the site; rootCONTRIBUTING.mdis a pointer, matching zarr-python's split) leads with the load-bearing scope limits and the reason for each, so a contributor can self-assess before writing rather than in review. Then dev setup, the one-framework-per-environment test caveat, code standards, failing-test-first for bugs, and what a performance claim has to carry.GOVERNANCE.mdadapts the Zarr Project's affiliated-project template (CC-BY-SA, attribution kept): merit-based core-developer group, lazy consensus with a vote as last resort, and a stated intent to seek Zarr Affiliated Project status — we already meet two of the three published criteria. It says plainly that one maintainer is a transitional state. One project-specific rule: changes to the load-bearing invariants are never made by lazy consensus.CODE_OF_CONDUCT.mdis Contributor Covenant 3.0 verbatim;SECURITY.mdroutes credential/transport issues upstream to obstore/zarr/icechunk and keeps the cache and transform-loading paths in scope.Issue forms are shaped by what triage actually needs. The bug form asks for
print_debug_info()output and the chunk geometry; there is a dedicated performance form asking for store geometry, loader config, hardware including vCPU count, and a control run, because a throughput report without those is not actionable. The feature form asks "does this touch a load-bearing invariant?" as a dropdown — the single highest-yield triage question here.insitubatch.print_debug_info()is the only code change. It reports the storage stack, whichever framework adapter is installed, and the free-threading state as two facts — build flag and live GIL — since numcodecs re-enables the GIL on import and those diverge. Nothing is imported to report on it (distribution metadata only), because importing torch and JAX in one process crashes.On AI-assisted contributions the line is drawn at accountability, not authorship of prose. This project is built with AI assistance including drafted PR descriptions, and a rule the maintainer breaks daily is not a rule. What is required: a human reviewed every change, can explain why each is correct, and verified the claims in the description.
Repo settings applied alongside this: Discussions enabled (the issue-chooser link depends on it) and a
performancelabel created.For reviewers
Three things worth a second look, in order:
docs/contributing.md) — it is now a public commitment, so it should say what you actually intend to enforce. It restates CLAUDE.md's invariants with reasoning; the two are paired, and CLAUDE.md carries a note explaining why its "Do not" list has three entries where the guide's has four (the frameworks rule is deliberately repeated in the guide's scannable list).GOVERNANCE.md— framed as direction, not a claim of existing affiliation, but it is a public statement about an external body.Confident in: the templates render and parse, and the docs build clean under
--strict.Author attestation
Checklist
tests/test_debug.py(4 tests: required keys, absent optionals degrade, the free-threading line states both halves, output is pasteable)ruff check/ruff format --check,mypy src bench examplesandpytest -qgreen locally — 308 passed, 12 skippeddocs/api.mdgains a Debugging section)docs/*.md## UnreleasedinCHANGELOG.md(two: the helper, and the governance model)print_debug_info()is off the hot path entirely and imports nothingFree-threaded (3.13t) run— n/a, nothing here touchesChunkPool, the scheduler, or cross-thread readinessPerformance claim— n/a, no performance claim madeNot in this PR
The issue tracker still shows 0 open issues. Seeding four to six good-first-issues from DESIGN.md's Known limitations & defects is the highest-leverage remaining step — a contributor who reads the guide, agrees with it, and finds nothing to work on is one lost at the last step.
🤖 Generated with Claude Code