acompose embeds no roster and mounts core through the ordinary path #336

Open
opened 2026-08-25 17:08:46 +00:00 by coilyco-ops · 0 comments
Member

Parent

#329

What to build

Make acompose a generic runtime: one binary, many bundles, no privileged roster inside it.

Today internal/person/person.go:27 carries //go:embed person.kdl data, which means a roster change needs a binary rebuild. That fails the driving requirement in #329 decision 5, and it contradicts the umbra-to-mcp-beaver pairing the program is built on, where the runtime is generic and the configuration is mounted.

Three changes:

  • Delete the roster embed. The binary carries no roster at all.
  • Route core through the ordinary mount path. roster:core stops being privileged and resolves through the same person_source mechanism external packages already use. The core-versus-external distinction disappears, and there is one contract rather than two.
  • Ship the seed as a release asset. Zero-config still has to work for a first-time user and for the terminal demo, so the reference roster ships alongside the binary and brew and scoop install it into the mount location. It is upgradable and replaceable without touching the binary, and it is explicitly not Kai's roster, which lives in agentic-os-kai.

A seed the binary carries is a roster that needs a rebuild to change, so materializing an embedded seed on first run is not an acceptable substitute here. That approach was proposed and rejected on #329.

Acceptance criteria

  • No go:embed of roster data remains in the repository.
  • roster:core resolves through the same code path as an external package, with no branch that special-cases it.
  • The seed roster is built as a release artifact and installed by the brew formula and the scoop manifest into the mount location.
  • A fresh install with no configuration converges and launches successfully.
  • Replacing the seed with another roster requires no rebuild and no reinstall of the binary.
  • Upgrading the binary does not overwrite an edited roster at the mount location.

Blocked by

## Parent #329 ## What to build Make `acompose` a generic runtime: one binary, many bundles, no privileged roster inside it. Today `internal/person/person.go:27` carries `//go:embed person.kdl data`, which means a roster change needs a binary rebuild. That fails the driving requirement in #329 decision 5, and it contradicts the umbra-to-mcp-beaver pairing the program is built on, where the runtime is generic and the configuration is mounted. Three changes: * **Delete the roster embed.** The binary carries no roster at all. * **Route core through the ordinary mount path.** `roster:core` stops being privileged and resolves through the same `person_source` mechanism external packages already use. The core-versus-external distinction disappears, and there is one contract rather than two. * **Ship the seed as a release asset.** Zero-config still has to work for a first-time user and for the terminal demo, so the reference roster ships alongside the binary and brew and scoop install it into the mount location. It is upgradable and replaceable without touching the binary, and it is explicitly not Kai's roster, which lives in `agentic-os-kai`. A seed the binary carries is a roster that needs a rebuild to change, so materializing an embedded seed on first run is not an acceptable substitute here. That approach was proposed and rejected on #329. ## Acceptance criteria - [ ] No `go:embed` of roster data remains in the repository. - [ ] `roster:core` resolves through the same code path as an external package, with no branch that special-cases it. - [ ] The seed roster is built as a release artifact and installed by the brew formula and the scoop manifest into the mount location. - [ ] A fresh install with no configuration converges and launches successfully. - [ ] Replacing the seed with another roster requires no rebuild and no reinstall of the binary. - [ ] Upgrading the binary does not overwrite an edited roster at the mount location. ## Blocked by - Blocked by #334
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/agent-compose#336
No description provided.