Skip to content

Commit 9ff6e98

Browse files
Merge pull request #226 from CodeForPhilly/chore/close-sheet-contracts
chore(plans): close out the gitsheets adoption plans
2 parents acfb57c + c40a8f9 commit 9ff6e98

3 files changed

Lines changed: 62 additions & 18 deletions

File tree

‎plans/person-evaluations-contract.md‎

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
status: in-progress
2+
status: done
33
depends: [gitsheets-freshness]
44
specs:
55
- specs/behaviors/spam-exclusion.md
@@ -43,11 +43,11 @@ path templates, so they would not have caught the slug-history bug.
4343

4444
## Validation
4545

46-
- [ ] Contract present on all data-repo branches; `git sheet contracts
46+
- [x] Contract present on all data-repo branches; `git sheet contracts
4747
verify` clean
4848
- [x] cfp boot fails with a clear error against a deliberately drifted
4949
config (test)
50-
- [ ] Spam pipeline opens against the contract
50+
- [x] Spam pipeline opens against the contract
5151
- [x] `type-check` + `lint` + full api suite green
5252

5353
## Risks / unknowns
@@ -70,4 +70,15 @@ path templates, so they would not have caught the slug-history bug.
7070
- The contract keeps the old sheet-local schema's exact constraints, adding
7171
only `$id`, `title` and `description` annotations.
7272

73+
- Superseded in scope by [`sheet-contracts`](sheet-contracts.md), which
74+
generalized this to every sheet with this repo as the publisher. The
75+
hand-authored `v1` was published as `contracts/…/person-evaluations/v1.json`
76+
and retired in favor of the generated `v2`, which every data-repo branch
77+
and the spam pipeline now declare. The pipeline declares it on its own
78+
sheet; the consumer-side open against the data repo's human votes lives
79+
in prune-spam (see Follow-ups).
80+
7381
## Follow-ups
82+
83+
- Tracked as: open the evaluations sheets in `prune-spam` against the
84+
`person-evaluations` contract (noted in PR #204).

‎plans/sheet-contracts.md‎

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
status: in-progress
2+
status: done
33
depends: [person-evaluations-contract]
44
specs:
55
- specs/behaviors/storage.md
@@ -72,10 +72,10 @@ each).
7272
`contracts verify` in a test repo) and every fixture record conforms
7373
- [x] Boot verifies every sheet; a drifted contract plus an invalid record
7474
fails the boot (test)
75-
- [ ] `published` adopts every contract: `gitsheets contracts verify` passes
75+
- [x] `published` adopts every contract: `gitsheets contracts verify` passes
7676
over all records, and `sources.toml` records the pinned URLs
77-
- [ ] Spam pipeline re-adopted from the published URL
78-
- [ ] `type-check` + `lint` + full suite green; sandbox, then live, boot
77+
- [x] Spam pipeline re-adopted from the published URL
78+
- [x] `type-check` + `lint` + full suite green; sandbox, then live, boot
7979
after adoption
8080

8181
## Risks / unknowns
@@ -104,8 +104,20 @@ each).
104104
- No structural fallback (`declared` mode), per Chris: the data repo moves
105105
in lockstep with the app.
106106
- Contracts caught three invalid test fixtures on their first run.
107-
- Remaining before `done`: adopt on `published` together with the release
108-
carrying #212, boot sandbox and live, and re-adopt v2 in the spam
109-
pipeline (CodeForPhilly/codeforphilly-spam-detection#1).
107+
- `published` adopted every contract (`21966b8`, `.gitsheets/` identical to
108+
`empty`, `contracts verify` over every record) in lockstep with v0.7.0,
109+
then sandbox and production deployed back to back. Both booted in
110+
declared mode with all 16 sheets verified and 0 restarts.
111+
- The events backfill (codeforphilly-data #20) merged afterwards as records
112+
only. Both environments took the incremental hot-reload path.
113+
- The spam pipeline adopted the published `person-evaluations` v2
114+
(CodeForPhilly/codeforphilly-spam-detection#1).
110115

111116
## Follow-ups
117+
118+
- Tracked as: JarvusInnovations/gitsheets#304 (flag template fields the
119+
schema doesn't require) would move part of `sheet-configs.test.ts`'s guard
120+
into gitsheets itself.
121+
- Tracked as: a gitsheets change to contract canonicalization would break
122+
declared-mode identity on the next bump. Re-adopt every contract in
123+
lockstep if one ships.

‎plans/slug-history-config.md‎

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
---
2-
status: planned
2+
status: done
33
depends: []
44
specs:
55
- specs/behaviors/slug-handles.md
66
- specs/behaviors/storage.md
7+
pr: 199
78
---
89

910
# Plan: fix the slug-history sheet config and single-source sheet configs
@@ -69,20 +70,20 @@ Out: the attachment loss on rename — see
6970

7071
## Validation
7172

72-
- [ ] `slug-history.toml` uses `oldSlug` on all four data-repo branches
73-
- [ ] `help-wanted-roles.toml` and `help-wanted-interest.toml` match
73+
- [x] `slug-history.toml` uses `oldSlug` on all four data-repo branches
74+
- [x] `help-wanted-roles.toml` and `help-wanted-interest.toml` match
7475
`storage.md` on all four branches; a role can be created in production
75-
- [ ] A test fails when any vendored config's template names a field that
76+
- [x] A test fails when any vendored config's template names a field that
7677
isn't a required schema field or a declared write-injected path field
7778
- [ ] Production: a person slug rename succeeds and writes a slug-history
7879
record; the old slug redirects
79-
- [ ] No inline `.gitsheets` config copies remain in `apps/api/tests`
80+
- [x] No inline `.gitsheets` config copies remain in `apps/api/tests`
8081
(grep `\[gitsheet\]`)
8182
- [ ] New every-sheet upsert test passes against the canonical configs
82-
- [ ] `setup-dev-data.ts` gone; docs don't reference it
83-
- [ ] `published` has no integer-underscore literals
83+
- [x] `setup-dev-data.ts` gone; docs don't reference it
84+
- [x] `published` has no integer-underscore literals
8485
(`git grep -E '= [0-9]+_[0-9]'` empty)
85-
- [ ] `type-check` + `lint` + full api suite green
86+
- [x] `type-check` + `lint` + full api suite green
8687

8788
## Risks / unknowns
8889

@@ -93,4 +94,24 @@ Out: the attachment loss on rename — see
9394

9495
## Notes
9596

97+
- Shipped in v0.6.0. The data-repo configs were pushed in lockstep, and the
98+
`published` push hot-reloaded production (fast-forwarded, rebuilt), so the
99+
500s stopped before the release.
100+
- **Unchecked: a production slug rename.** No one has renamed a person or
101+
project since the fix (`published` has 0 slug-history records as of
102+
2026-10-14). The rename path runs against the real configs in the test
103+
suite, and every test repo now seeds from the vendored production configs.
104+
- **Unchecked: the every-sheet upsert test.** Replaced by two stronger
105+
guards. `sheet-configs.test.ts` fails when any template field isn't a
106+
required schema field or a declared write-injected one; it caught the
107+
broken `help-wanted-roles` template. And later (`sheet-contracts`),
108+
gitsheets enforces each sheet's contract on every write.
109+
- `tag-assignments` was documented in its production layout rather than
110+
migrated (7.7k records).
111+
- The CI drift check needed a read-only deploy key: codeforphilly-data is
112+
private (`CFP_DATA_DEPLOY_KEY`).
113+
96114
## Follow-ups
115+
116+
- Tracked as: the first production slug rename. Confirm it writes a
117+
slug-history record and the old slug redirects.

0 commit comments

Comments
 (0)