UniSchema uses semantic versioning for the repository and documents breaking changes to the ConstituentEvent master schema.
| Change type | Example | Version bump |
|---|---|---|
| New optional field | Add middleName? |
Minor (v0.x) |
New sourceSystem enum |
Add SLATE |
Minor (v0.x) |
New eventType enum |
Add VOLUNTEER_SHIFT |
Minor — coordinate downstream |
| Remove / rename core field | Rename constituentEmail |
Major (v1.0+) |
| Change field type | amount string → number only |
Major |
- Extend
EventTypeSchemainsrc/schema/master.ts - Update frontend
constituentEvent.ts - Document migration in CHANGELOG
- Notify downstream pipelines (dbt models, warehouse loaders)
Follow adding-a-vendor.md — each vendor adds a sourceSystem enum value.
From v1.0 onward: 6 months notice in CHANGELOG before removing or renaming core fields. Use normalizedMetadata for org-specific extensions instead of forking the master schema.
Planned for v1.0 if breaking changes accumulate:
{ "schemaVersion": 1, "eventId": "...", ... }Downstream loaders should ignore unknown versions and alert operators.
Open a GitHub Discussion with:
- Motivation (which vendors / pipelines need the change)
- Proposed Zod diff
- Migration notes for existing S3 batches
Maintainers label rfc/schema and decide before merge.
Status: Not implemented — awaiting pilot institution request.
Advancement teams track volunteer shifts separately from event registrations. Today these map awkwardly to EVENT_REGISTRATION.
Add VOLUNTEER_SHIFT to EventTypeSchema in src/schema/master.ts.
| Component | Action |
|---|---|
dbt mart_constituent_engagement_daily |
Add volunteer_shift_count column |
dbt mart_constituent_rfm_features |
Optional engagement feature |
philanthropy.ingest (PhilanthroPy repo) |
Add volunteer_shift_count to the feature contract |
| PhilanthroPy pipelines | Map to engagement features or separate model |
At least one pilot institution confirms the enum name and provides sample webhook payloads.