Repository navigation
feat: person-evaluations as a versioned gitsheets schema contract - #203
Merged
Merged
Conversation
themightychris
added a commit
that referenced
this pull request
Oct 14, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 14, 2026
themightychris
force-pushed
the
feat/incremental-reload
branch
from
October 14, 2026 02:26
bdd9621 to
044fe1f
Compare
themightychris
added a commit
that referenced
this pull request
Oct 14, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
themightychris
force-pushed
the
feat/person-evaluations-contract
branch
from
October 14, 2026 02:26
8b45448 to
4e33a23
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The record shape shared by the site and the private spam pipeline, as a gitsheets schema contract (codeforphilly.org/person-evaluations/v1). Same constraints as the data repo's sheet-local schema it replaces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The data repo's person-evaluations sheet now declares the v1 contract; the API verifies it at boot (identity first, else every record) and refuses to start on a mismatch. Vendors the contract next to the sheet configs, seeds test repos with it, and extends the CI drift check to everything under .gitsheets/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gitsheets#301 (repo.sync) and #302 (rename moves attachments). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new sheet lands in the data repo's empty branch before the app opens it, so failing on upstream-only configs broke CI for everyone the moment the events sheets landed. Vendored files must still match exactly; upstream-only ones warn. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013PxDwrzedwQoijkwbqSGKj
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013PxDwrzedwQoijkwbqSGKj
The config root commit carried only top-level sheet configs, so a sheet declaring `implements` failed every write with contract_missing. Copy everything under .gitsheets/, nested contracts included. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013PxDwrzedwQoijkwbqSGKj
themightychris
force-pushed
the
feat/person-evaluations-contract
branch
from
October 14, 2026 02:58
4e33a23 to
7c34ea8
Compare
This was referenced Oct 14, 2026
Merged
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.
Implements
plans/person-evaluations-contract.md. Stacked on #202.The
person-evaluationsrecord shape was defined three times: a Zod schema here, a JSON Schema in the data repo's sheet config, and another in the private spam pipeline's config. Nothing checked that the three agreed. Now there's one versioned gitsheets schema contract,codeforphilly.org/person-evaluations/v1:@cfp/sharedexports the contract document. The API opens the data repo's sheet against it at boot. gitsheets checks the declared contract's identity first; if that misses, it validates every record. On a mismatch, the boot fails.person-evaluations.tomldeclaresimplements = [...], and the canonical contract is vendored at.gitsheets/contracts/…/v1.toml. These commits are prepared and waiting for approval to push. All 27 existing human votes passgitsheets contracts verify.contracts verify..gitsheets/.Spec:
spam-exclusion.mdsays the record shape is this contract, both consumers verify it, and changes mean a new version, never an edit tov1.Tests: the shared constant and the vendored TOML hash identically; boot refuses a data repo with a drifted contract and an invalid record; boot accepts the canonical one. Type-check, lint and the full suite pass (504 API tests).
🤖 Generated with Claude Code