11---
2- status : planned
2+ status : done
33depends : []
44specs :
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