Track C of #514, carved out of #858 during the 2026-09-26 audit. Enforcement and structure only, no behaviour change. No prerequisites: this can ship at any time, independently of every other Track C slice.
The problem
src/Cluckwork.Infrastructure/Persistence/BusinessRecordModel.cs is 153 lines holding two hand-maintained arrays:
ChronologicalListTypes (:21-34), the census of business records that are paged or read by time
MappedExclusions (:36-48), the deliberate exemptions
ValidateCensus (:84-111) walks the EF model against them. #819 requires every new mapped table to be classified through one of these, so every module must edit one shared file for every new time-paged table. The list already spans six modules, and it grew again in #912 when SalesOrderItem was added.
This is the one item in #858 that degrades with every feature regardless of whether anything ever goes behind a contract, and it is the only part of Track C with nothing in front of it.
Scope
- Each module contributes its own chronological types and its own exclusions, declared beside that module's code rather than in one shared array.
- The contributions are merged before
ValidateCensus runs. The walk and the validation stay centralized and unchanged.
- No dependency-injection changes, no contract types, no seam work, no schema change, no migration.
Done when
| Mutation |
Expected |
| add a mapped, time-paged table to a module and contribute nothing |
red, naming the table and the module that owns it |
| contribute a type that is not mapped |
red |
| contribute the same type from two modules |
red, duplicate contribution |
| delete a module's contribution while its tables remain |
red |
| move a type's contribution between modules with no other change |
green |
ValidateCensus's existing assertions pass unedited, and the EF model digest is identical before and after.
Explicitly not in this slice
No module goes behind a contract. No ICreatedRecord / IMutableRecord classification changes. AuditEvent stays excluded per #819. The other items in #858 are untouched.
Track C of #514, carved out of #858 during the 2026-09-26 audit. Enforcement and structure only, no behaviour change. No prerequisites: this can ship at any time, independently of every other Track C slice.
The problem
src/Cluckwork.Infrastructure/Persistence/BusinessRecordModel.csis 153 lines holding two hand-maintained arrays:ChronologicalListTypes(:21-34), the census of business records that are paged or read by timeMappedExclusions(:36-48), the deliberate exemptionsValidateCensus(:84-111) walks the EF model against them. #819 requires every new mapped table to be classified through one of these, so every module must edit one shared file for every new time-paged table. The list already spans six modules, and it grew again in #912 whenSalesOrderItemwas added.This is the one item in #858 that degrades with every feature regardless of whether anything ever goes behind a contract, and it is the only part of Track C with nothing in front of it.
Scope
ValidateCensusruns. The walk and the validation stay centralized and unchanged.Done when
ValidateCensus's existing assertions pass unedited, and the EF model digest is identical before and after.Explicitly not in this slice
No module goes behind a contract. No
ICreatedRecord/IMutableRecordclassification changes.AuditEventstays excluded per #819. The other items in #858 are untouched.