feat: T4b wave 7 - schema for phenology, honey movement ledger, shelf life

- Phenology reports, apiary phenology state and weather days with
  permissions for system roles
- Honey movement ledger: BOTTLING movements and initialAmount backfilled
  from existing bottlings with the same gram rounding; the migration
  reports counts and aborts if the ledger invariant fails
- Shelf life and event catalog columns; backup export/import of the new
  tables, old bundles keep importing, invariant check after imports
- e2e: test timeout 20 s (app start in hooks exceeded 5 s under load)

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-10-14 19:19:32 +02:00
1 parent 326b3d9cdd
commit 22382d53a2
17 files changed
+1213 -39

No files matched your search

@@ -0,0 +1,18 @@
import {
PhaseSource,
PhenologyPhase,
SeasonSegment,
} from '../../generated/prisma';
import {
PHASE_SOURCES,
PHENOLOGY_PHASES,
SEASON_SEGMENTS,
} from './season-types';
describe('season enums', () => {
it('Prisma phenology enums equal the TS constants of T4a', () => {
expect(Object.values(PhenologyPhase)).toEqual([...PHENOLOGY_PHASES]);
expect(Object.values(SeasonSegment)).toEqual([...SEASON_SEGMENTS]);
expect(Object.values(PhaseSource)).toEqual([...PHASE_SOURCES]);
});
});