Skip to content

Commit c40a8f9

Browse files
chore(plans): close out slug-history-config and person-evaluations-contract
slug-history-config shipped in v0.6.0 (PR #199) but was never flipped; person-evaluations-contract was carried through by sheet-contracts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011Q2tgjZEUrtvVk6k8SpdXJ
1 parent 124a6c9 commit c40a8f9

2 files changed

Lines changed: 43 additions & 11 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/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)