aterm: contract-test against the live roster, and assert no shipped overlay field is discarded #1259

Closed
opened 2026-08-26 02:50:23 +00:00 by coilyco-ops · 0 comments
Member

Part of #1245. Best done after #1251.

aos-release-check exercises aterm --dry-run against roster and overlay fixtures in aterm/testdata/. That proves aterm still works on the roster it was written for, which is not the failure mode that happens. The failure that happens is upstream drift: a role added, a seat retired, a field introduced.

What the test should assert, walking the live roster

  • every role with a launchable native seat resolves to a plan
  • every native seat in every role resolves, and every catalogue seat outside nativeHarnesses refuses with the right reason
  • every derived background clears the pairwise separation floor against every other role
  • every title carries its workspace segment
  • the default seat from harness-launch-profiles.yaml exists in the role it is pinned to

The one that would have caught this whole backlog

Assert that no field the overlay ships is silently discarded. Decode the live overlay into a generic map, decode it into the typed struct, re-encode, and diff. Anything present upstream and absent downstream is either used or explicitly waived in a list with a reason.

That check is what turns sound_mark and form sitting unread for however long into a test failure on the day they were added.

aterm/aterm_test.go, docs/aos-cli.md.

Part of #1245. Best done after #1251. `aos-release-check` exercises `aterm --dry-run` against roster and overlay fixtures in `aterm/testdata/`. That proves aterm still works on the roster it was written for, which is not the failure mode that happens. The failure that happens is upstream drift: a role added, a seat retired, a field introduced. ## What the test should assert, walking the live roster - every role with a launchable native seat resolves to a plan - every native seat in every role resolves, and every catalogue seat outside `nativeHarnesses` refuses with the right reason - every derived background clears the pairwise separation floor against every other role - every title carries its workspace segment - the default seat from `harness-launch-profiles.yaml` exists in the role it is pinned to ## The one that would have caught this whole backlog Assert that no field the overlay ships is silently discarded. Decode the live overlay into a generic map, decode it into the typed struct, re-encode, and diff. Anything present upstream and absent downstream is either used or explicitly waived in a list with a reason. That check is what turns `sound_mark` and `form` sitting unread for however long into a test failure on the day they were added. `aterm/aterm_test.go`, `docs/aos-cli.md`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agentic-os#1259
No description provided.