Repository navigation
v0.1.5
0.1.5 (2026-10-07)
Features
- arch: add CW1004 at Info with shared contract and adapter-root definitions (#1117) (baa5c4d)
- arch: make CW1004 a build error (#1123) (8cb14e6)
- ci: publish amd64 and arm64 images (#996) (ce4a4ab)
Bug fixes
- auth: refuse a stored credential epoch below 1 (#1036) (02e8a63)
- e2e: select a farm-local expense range across month boundaries (#1011) (944acb0)
- inventory: see a flock archived while feed usage waits on the item lock (#1026) (582f8c8)
- seed: let the demo seed retry after a late failure (#1076) (5897e34)
- seed: never let the demo seed cleanup delete the Owner's data (#1083) (d525a0e)
- test: repair demo seed false pass and measure collection floor (#1000) (af3eb47)
Performance
- seed: release tracked entities between days in DemoDataSeeder (#1044) (5d0a565)
- seed: release tracked entities between days in SimulationDataSeeder (#1049) (9194b21)
- test: reuse one Postgres server for integration databases (#1002) (1953cde)
- test: serialize the five full-seed integration classes (#1003) (ad258d8)
Refactoring
- access: centralize live reads and isolate lifecycle (#857 E1) (#1055) (d908f2f)
- access: declare fixture contracts and preserve actors (#857 E2) (#1060) (cd1de3a)
- access: name flock assignments through IFlockLookup, removing the last compatibility exception (#1070) (4e9bd1c)
- access: put the operator verbs behind IAccessOperations and the purge behind IRefreshTokenPurge (#1047) (7014566)
- accounts: move the cross-farm account reads behind IFarmDirectory (#1043) (b998b07)
- api: register each module from its own file (#1065) (36a87a7)
- arch: close the Platform composition slice (#1066) (e63ad81)
- arch: finish package-by-module — contracts by folder, no marks or claim lists (#1099) (23bb192)
- arch: give adapters Farm's farm-code rule and image-size errors through its contract (#1121) (cce672b)
- arch: move Access into Modules/Access (#1095) (ccb5558)
- arch: move Commerce into Modules/Commerce (#1094) (deae524)
- arch: move Egg Operations into Modules/EggOperations (#1093) (51e9cbb)
- arch: move Farm into Modules/Farm (#1096) (57cdbc6)
- arch: move Finance into Modules/Finance (#1090) (5422898)
- arch: move Flock Management into Modules/FlockManagement (#1091) (acc8f73)
- arch: move General Inventory into Modules/GeneralInventory (#1092) (541eca9)
- arch: move Insights into Modules/Insights (#1089) (d4175b5)
- arch: move repositories and EF configurations into their modules (#1097) (fb3a9cd)
- arch: move the 7 login records into Access's public contract (#1104) (91263f4)
- arch: name flocks through Flock Management's contract and publish Access's credential rules (#1119) (0a11748)
- arch: publish DiscountCeiling in Commerce's contract (#1118) (2cf8deb)
- arch: publish Farm's shared value types in its contract (#1120) (9eb2ba8)
- arch: put module rules beside the code they describe (#1086) (02c299a)
- arch: remove slop from the package-by-module and CW1004 work (#1128) (30b0e11)
- arch: stage a new farm's defaults through Egg Operations' and Commerce's provisioning ports (#1122) (c74cd01)
- auth: move the credential-epoch check behind ICredentialEpochVerifier (#1032) (3b89567)
- auth: route the auth endpoints through IAccessModule (#1041) (a78729d)
- eggs: put egg operations behind an IEggOperationsModule contract (#1028) (d6dbd47)
- farm: put farm settings behind an IFarmModule contract (#1015) (4c429f0)
- finance: put Finance behind an IFinanceModule contract (#1010) (b9f7f76)
- flocks: put flock lifecycle behind an IFlockModule contract (#1021) (08cf44c)
- insights: read reports, exports and audit provenance through an Insights facade (#1012) (7ce95cf)
- inventory: put general inventory behind an IInventoryModule contract (#1027) (54a5f29)
- persistence: split business record census by module (#970) (f28bb47)
- repositories: delete the generic repository base and its unused members (#1042) (ed0c1bb)
- sales: put Commerce behind a contract and reach egg stock through IEggStock (#1030) (7bb45cc)
- seed: read and purge demo fixtures through module ports (#1064) (5c239ee)
- seed: read and write simulation fixtures through module ports (#1063) (d4dda8e)
- seed: read Finance and General Inventory fixtures through module ports (#1062) (a4783c9)
- test: give the architecture and tenant guards a loader seam (#1067) (9477029)
- test: move the module ledger rows into typed C# (#1069) (f6e2d04)
- test: move the tenant-bypass registries into C# (#1068) (bfe8211)
- users: put user administration behind IAccessModule and peer reads behind IAccessLookup (#1037) (75e2b1b)
Documentation
- arch: describe Domain contracts and CW1004 in the code-layers table (#1124) (8ab37fe)
- arch: draw the deployment, code layers and feature modules (#1098) (7e9e440)
- arch: tighten the architecture diagram prose and guard (#1126) (53b3e3b)
- ci: measure the integration collection split (no CI win; reverted) (#1004) (6166890)
- deslop the README and remove its em-dashes (#994) (d32638e)
- show the egg loop as a GIF in the README (#992) (c8b382a)
- split AGENTS.md into directory-scoped rule files (#1035) (07fc42c)
Container image
Deploy by digest — a tag can be moved, a digest cannot:
ghcr.io/mforce/cluckwork@sha256:df7dd642dbe517fbed079a1038c81517d6ac9bf8c9755cabc053ec796a0f913b
Machine-readable: the image.json asset on this release.
Verify the bytes came from this repo's CI before deploying:
# requires a prior `docker login ghcr.io` — an oci:// subject
# needs registry credentials. Full recipe: README, "Deploying".
gh attestation verify oci://ghcr.io/mforce/cluckwork@sha256:df7dd642dbe517fbed079a1038c81517d6ac9bf8c9755cabc053ec796a0f913b \
--repo mforce/cluckwork \
--signer-workflow mforce/cluckwork/.github/workflows/ci.yml \
--source-ref refs/heads/main \
--bundle-from-oci