fix(compose): follow the composed-source renames the roster reflow made #1151

Closed
coilyco-ops wants to merge 2 commits from fix/compose-roster-v3-renames into main
Owner

Part of #1147. This does not turn CI green on its own — see below — so it is here as the first reviewable step of that migration rather than as a merge-now fix.

What it fixes

fc3fefea in agentic-os renamed the composed sources along with the seats. Three patterns in agent/compose/roles.kdl now match nothing, and an unmatched pattern is a hard error rather than an empty selection, so role-drift-check fails on every PR in this repository — #1148, #1149 and #1150 all die on it, two of which are docs changes.

The expander fails fast on the first miss, which is why only tooling-ops-* ever appears in a log. All three are broken:

old new sources
tooling-ops-* tooling-sysadmin-* 4
tooling-qa-* tooling-eval-* 3
tooling-customer-success-* tooling-devrel-* 2

Each is 1:1 against the current catalogue, so no role gains or loses a source. None of the new names is in DeniedComposedSkills. I checked every other pattern in both roles against the live catalogue and they all still resolve.

Why the role names are untouched

Kai chose the person-package route for #1147: engineer, creator and ops become roles this repository owns, the way librarian already is, rather than being remapped onto Core Roster slugs. So SIRENS_ECHO_ROLE stays as deployed, coilyco-bridge/deploy needs no change, and the seat_identity() / seat_boundary_omissions() wiring in stage-compose-sources.sh keeps working unedited.

That makes this diff safe and permanent under the chosen route: whatever the person package ends up containing, these three patterns had to be renamed anyway.

What still fails

With the expander past, role-drift-check reaches the next gate and stops there:

a role's selection changed: agent/rendered/roles/devrel.bundle.txt, ...eval..., ...frontend...,
  ...gamedev..., ...platform..., ...sysadmin..., ...tpm...

agent/rendered/roles/ still records the pre-reflow roster (ai, creator, design, director, engineer, exec, librarian, ops, qa). Rebaking it now would record every v3 seat as bare, which is the defect #955 measured, so the snapshot is deliberately left alone until the person package exists.

Remaining work, all on #1147

Building the package means lifting the three deleted roles from agent-compose@12c7198^: their role.kdl nodes, their charter SKILL.md bodies, and nine referenced personalities of which only four still exist in core, so curious, reflective and nurturing need vendoring alongside the meticulous and editorial already here.

One design question blocks it, and I am not guessing at it: the lifted ops role carries boundary "suggest-human-comms" "seek-external-validation", and seek-external-validation's owning role does not exist in the package. librarian sidesteps this by declaring no boundary entities at all, but doing that to ops silently drops two boundaries from Echo, a running lane. Asked on #1147.

Part of #1147. **This does not turn CI green on its own** — see below — so it is here as the first reviewable step of that migration rather than as a merge-now fix. ## What it fixes `fc3fefea` in agentic-os renamed the composed sources along with the seats. Three patterns in `agent/compose/roles.kdl` now match nothing, and an unmatched pattern is a hard error rather than an empty selection, so `role-drift-check` fails on every PR in this repository — #1148, #1149 and #1150 all die on it, two of which are docs changes. The expander fails fast on the first miss, which is why only `tooling-ops-*` ever appears in a log. All three are broken: | old | new | sources | | --- | --- | --- | | `tooling-ops-*` | `tooling-sysadmin-*` | 4 | | `tooling-qa-*` | `tooling-eval-*` | 3 | | `tooling-customer-success-*` | `tooling-devrel-*` | 2 | Each is 1:1 against the current catalogue, so no role gains or loses a source. None of the new names is in `DeniedComposedSkills`. I checked every other pattern in both roles against the live catalogue and they all still resolve. ## Why the role names are untouched Kai chose the person-package route for #1147: `engineer`, `creator` and `ops` become roles this repository owns, the way `librarian` already is, rather than being remapped onto Core Roster slugs. So `SIRENS_ECHO_ROLE` stays as deployed, `coilyco-bridge/deploy` needs no change, and the `seat_identity()` / `seat_boundary_omissions()` wiring in `stage-compose-sources.sh` keeps working unedited. That makes this diff safe and permanent under the chosen route: whatever the person package ends up containing, these three patterns had to be renamed anyway. ## What still fails With the expander past, `role-drift-check` reaches the next gate and stops there: ``` a role's selection changed: agent/rendered/roles/devrel.bundle.txt, ...eval..., ...frontend..., ...gamedev..., ...platform..., ...sysadmin..., ...tpm... ``` `agent/rendered/roles/` still records the pre-reflow roster (`ai`, `creator`, `design`, `director`, `engineer`, `exec`, `librarian`, `ops`, `qa`). Rebaking it now would record every v3 seat as bare, which is the defect #955 measured, so the snapshot is deliberately left alone until the person package exists. ## Remaining work, all on #1147 Building the package means lifting the three deleted roles from `agent-compose@12c7198^`: their `role.kdl` nodes, their charter SKILL.md bodies, and nine referenced personalities of which only four still exist in core, so `curious`, `reflective` and `nurturing` need vendoring alongside the `meticulous` and `editorial` already here. One design question blocks it, and I am not guessing at it: the lifted `ops` role carries `boundary "suggest-human-comms" "seek-external-validation"`, and `seek-external-validation`'s owning role does not exist in the package. `librarian` sidesteps this by declaring no boundary entities at all, but doing that to `ops` silently drops two boundaries from Echo, a running lane. Asked on #1147.
fix(compose): follow the composed-source renames the roster reflow made
Some checks failed
ci / test (pull_request) Failing after 3m13s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Failing after 3m56s
ca88fbe1d5
agentic-os fc3fefea renamed the composed sources along with the seats, and this
allowlist still names the old families. Three patterns match nothing, and an
unmatched pattern is a hard error rather than an empty selection, so
role-drift-check fails on every pull request in this repository.

The expander fails fast on the first miss, which is why only tooling-ops-* is
ever in the log. All three are here:

    tooling-ops-*              -> tooling-sysadmin-*   (4 sources)
    tooling-qa-*               -> tooling-eval-*       (3 sources)
    tooling-customer-success-* -> tooling-devrel-*     (2 sources)

Each is 1:1 against the current catalogue, so no role gains or loses a source,
and none of the new names is in DeniedComposedSkills. Every other pattern in
both roles still resolves.

This is the half of #1147 that does not depend on the seat decision. The role
names stay engineer and creator, because those lanes are moving into this
repository's own person package rather than onto Core Roster slugs, so
SIRENS_ECHO_ROLE and the seat wiring in stage-compose-sources.sh are untouched.

CI does not go green on this alone. With the expander past, role-drift-check
reaches the recorded bundles, which still describe the pre-reflow roster and
are rebaked by the rest of #1147.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: platform
Author
Owner

The CI run on this branch failed on a Forgejo outage rather than on the change:

Cloning into '/tmp/tmp.qLm37QxxSm/aos-catalog'...
fatal: unable to access 'https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os.git/':
  Failed to connect to forgejo.coilysiren.me port 443 after 133391 ms
error: recipe `role-drift-check` failed on line 91 with exit code 128

Exit 128 and a two-minute connect timeout, at 08:48-08:50, which is the same window the forge was unreachable from my host. Nothing to do with the renames. I could not re-run it: pr update 500s because main has not moved, and the rerun bridge wants a write-scoped FORGEJO_TOKEN I would rather not go fetch for a cosmetic re-run on a PR that is not merge-ready anyway.

So I verified the claim locally against this exact commit instead, which isolates it better than a CI run does:

$ AOS_CATALOG=.../agentic-os bash scripts/task.sh role-drift-check
role tpm: 7 skills, prompt 41071 bytes
a role's selection changed: agent/rendered/roles/devrel.bundle.txt, ...eval..., ...frontend...,
  ...gamedev..., ...platform..., ...sysadmin..., ...tpm...
exit status 1

matches nothing is gone and it now stops at the recorded bundles, which is exactly where the PR body says it stops. The renames do what they claim; the remaining gate is the person package on #1147.

Worth noting separately

role-drift-check clones agentic-os over the network on every run, so a forge blip is indistinguishable from a real drift failure and takes the whole test job with it. scripts/task.sh already prefers a local $HOME/projects/coilyco-flight-deck/agentic-os checkout and only clones when that is absent, so the CI image is the case with no cached catalogue. A pinned or cached catalogue in the image, or a retry around the clone, would stop the forge being a hard dependency of this gate. Not filing it as part of #1147, since it is an independent fragility.

The CI run on this branch failed on a Forgejo outage rather than on the change: ``` Cloning into '/tmp/tmp.qLm37QxxSm/aos-catalog'... fatal: unable to access 'https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os.git/': Failed to connect to forgejo.coilysiren.me port 443 after 133391 ms error: recipe `role-drift-check` failed on line 91 with exit code 128 ``` Exit 128 and a two-minute connect timeout, at 08:48-08:50, which is the same window the forge was unreachable from my host. Nothing to do with the renames. I could not re-run it: `pr update` 500s because `main` has not moved, and the rerun bridge wants a write-scoped `FORGEJO_TOKEN` I would rather not go fetch for a cosmetic re-run on a PR that is not merge-ready anyway. So I verified the claim locally against this exact commit instead, which isolates it better than a CI run does: ``` $ AOS_CATALOG=.../agentic-os bash scripts/task.sh role-drift-check role tpm: 7 skills, prompt 41071 bytes a role's selection changed: agent/rendered/roles/devrel.bundle.txt, ...eval..., ...frontend..., ...gamedev..., ...platform..., ...sysadmin..., ...tpm... exit status 1 ``` `matches nothing` is gone and it now stops at the recorded bundles, which is exactly where the PR body says it stops. The renames do what they claim; the remaining gate is the person package on #1147. ## Worth noting separately `role-drift-check` clones agentic-os over the network on every run, so a forge blip is indistinguishable from a real drift failure and takes the whole `test` job with it. `scripts/task.sh` already prefers a local `$HOME/projects/coilyco-flight-deck/agentic-os` checkout and only clones when that is absent, so the CI image is the case with no cached catalogue. A pinned or cached catalogue in the image, or a retry around the clone, would stop the forge being a hard dependency of this gate. Not filing it as part of #1147, since it is an independent fragility.
feat(compose): own the three deployed lane roles in the person package
Some checks failed
ci / image-build (pull_request) Failing after 6s
ci / test (pull_request) Failing after 1m12s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
e09dfd6a1a
The Core Roster reflowed to seven bonded seats and dropped engineer, ops and
creator. Every deployed lane names one of them in SIRENS_ECHO_ROLE, so the
alternative was remapping running Discord agents onto seats chosen for a
different purpose, in lockstep with coilyco-bridge/deploy. Owning the slugs here
leaves the deployment untouched and puts upstream roster churn out of reach of
these lanes, which is the recurring half of #1147 and #1129.

Definitions are lifted verbatim from agent-compose at 12c7198^ rather than
reauthored, so the bundles carry what the lanes already carried. ops recomposes
byte-identical apart from its source label, which is the check that matters:
Echo is the lane a mistake here would reach. engineer and creator change only by
the composed-source renames the previous commit made and by boundary bodies
their own declarations already implied.

Adjacency is dropped for the reason librarian documents: qa, ai, director,
design and exec are not roles here, so those hand-offs move into the charter
bodies. Boundaries are kept, because dropping one silently loosens a lane rather
than leaving a gap in prose. Three own themselves. seek-external-validation was
exec's, and validateBoundaryOwners rejects an owner outside the package, so Kai
moved it to creator: ops keeps deferring it, which is what protects Echo, and
Deep already carries the outward-reaching tool surface that makes the reach its
own.

Nine personalities come with them. Four are still in core, three are vendored
here as unchecked bodies because core no longer delivers a counterpart to
mirror, and meticulous and editorial were already vendored for librarian.

Also drops five recorded bundles for roles no longer in either roster: ai,
design, director, exec, qa. role-snapshot writes records but never removes one,
so a retired role's bundle survives until something deletes it.

Closes #1147

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Agent-Role: platform
Author
Owner

Kai took the creator option, so the rest of #1147 is on this branch now. This PR is the whole migration, not step one — the body above describes only the first commit.

role-drift-check passes locally, along with go build, go vet, go test ./... and pre-commit run --all-files.

The check that mattered

ops is Echo, a running lane, so its recorded bundle is where a mistake would land. It recomposes with zero selection change:

-Sources: aos-public, roster:core
+Sources: aos-public, person:sirens

Same seat (Echo, it), same tier, same three personalities, same seven skills, and boundary-seek-external-validation still present — which is the whole point of moving that boundary to creator rather than dropping it. Only the provenance label moved.

The other two, as clean set diffs rather than eyeballed:

  • engineer loses the seven tooling-ops-* / tooling-qa-* names and gains their tooling-sysadmin-* / tooling-eval-* equivalents, plus boundary-build-software, which it owns. The two boundaries seat_boundary_omissions() drops for Dowel are correctly still absent, so that wiring survived the move.
  • creator loses the two tooling-customer-success-* names for their tooling-devrel-* equivalents, and gains boundary-seek-external-validation (now owned) and boundary-build-software (declared as deferred all along).

Those two boundary bodies being new is worth naming: the recorded bundles predate their own declarations, so the old records were already stale in that respect. The new ones match what the definitions say.

What is in it

  • three roles lifted verbatim from agent-compose@12c7198^, adjacency dropped the way librarian documents, hand-offs moved into the charter bodies
  • four boundaries with owners inside the package: build-software/engineer, modify-live-system/ops, suggest-human-comms/creator, seek-external-validation/creator
  • nine personalities: four still in core, three newly vendored as unchecked bodies since core no longer delivers a counterpart to mirror, two already here for librarian
  • five recorded bundles deleted for roles in neither roster (ai, design, director, exec, qa). role-snapshot writes records but never removes one, so a retired role's bundle survives until something deletes it
  • docs/sirens-echo-person.md and docs/FEATURES.md updated

coilyco-bridge/deploy is untouched and needs no change: SIRENS_ECHO_ROLE still reads ops and creator.

One thing I changed that is prose, not mechanism

The creator charter handed work to Designer, Executive Strategist, Director, QA and AI Engineer, none of which are roles here. I rewrote that paragraph to hand to Engineer and DevOps, and to state that reaching outside the local frame is now this lane's own rather than a hand-off. That is the only place I wrote rather than lifted, so it is the place to look hardest.

Kai took the `creator` option, so the rest of #1147 is on this branch now. **This PR is the whole migration, not step one** — the body above describes only the first commit. `role-drift-check` passes locally, along with `go build`, `go vet`, `go test ./...` and `pre-commit run --all-files`. ## The check that mattered `ops` is Echo, a running lane, so its recorded bundle is where a mistake would land. It recomposes with **zero selection change**: ``` -Sources: aos-public, roster:core +Sources: aos-public, person:sirens ``` Same seat (Echo, it), same tier, same three personalities, same seven skills, and `boundary-seek-external-validation` still present — which is the whole point of moving that boundary to `creator` rather than dropping it. Only the provenance label moved. The other two, as clean set diffs rather than eyeballed: - **`engineer`** loses the seven `tooling-ops-*` / `tooling-qa-*` names and gains their `tooling-sysadmin-*` / `tooling-eval-*` equivalents, plus `boundary-build-software`, which it owns. The two boundaries `seat_boundary_omissions()` drops for Dowel are correctly still absent, so that wiring survived the move. - **`creator`** loses the two `tooling-customer-success-*` names for their `tooling-devrel-*` equivalents, and gains `boundary-seek-external-validation` (now owned) and `boundary-build-software` (declared as deferred all along). Those two boundary bodies being new is worth naming: the recorded bundles predate their own declarations, so the old records were already stale in that respect. The new ones match what the definitions say. ## What is in it - three roles lifted verbatim from `agent-compose@12c7198^`, adjacency dropped the way `librarian` documents, hand-offs moved into the charter bodies - four boundaries with owners inside the package: `build-software`/`engineer`, `modify-live-system`/`ops`, `suggest-human-comms`/`creator`, `seek-external-validation`/`creator` - nine personalities: four still in core, three newly vendored as unchecked bodies since core no longer delivers a counterpart to mirror, two already here for `librarian` - five recorded bundles deleted for roles in neither roster (`ai`, `design`, `director`, `exec`, `qa`). `role-snapshot` writes records but never removes one, so a retired role's bundle survives until something deletes it - `docs/sirens-echo-person.md` and `docs/FEATURES.md` updated `coilyco-bridge/deploy` is untouched and needs no change: `SIRENS_ECHO_ROLE` still reads `ops` and `creator`. ## One thing I changed that is prose, not mechanism The `creator` charter handed work to Designer, Executive Strategist, Director, QA and AI Engineer, none of which are roles here. I rewrote that paragraph to hand to Engineer and DevOps, and to state that reaching outside the local frame is now this lane's own rather than a hand-off. That is the only place I wrote rather than lifted, so it is the place to look hardest.
Author
Owner

Blocked on infrastructure, not on this branch. Parking it here so nobody re-runs CI expecting a different answer.

The migration needs the dev-base image to ship agent-compose 2.39.0 or later. coilyco-flight-deck/agentic-os#1233 merged and moves the pin to 2.47.0, but the image never rebuilt: three publish attempts died on runner egress, each refusing a different external host in 2-11ms rather than timing out. Details and evidence in coilyco-flight-deck/infrastructure#929.

So right now agentic-os's release branch carries the new pin while the :release image still carries 2.32.0 with the pre-reflow roster. This repository's CI composes in that image, so it still bakes a core roster containing engineer, and the person package collides with it:

stage-compose-sources: baking 8 roster roles
stage-compose-sources: role engineer exists in both rosters

That collision guard is correct and I am not weakening it. The branch is right; the image is stale.

What is verified, and how

Locally against agent-compose 2.47.0, which is what the image will ship once it builds:

  • role-drift-check exits 0
  • go build ./..., go vet ./..., go test ./... all pass
  • pre-commit run --all-files fully green
  • ops recomposes with zero selection change, so Echo is untouched

One caveat I want on the record rather than buried: my host and CI currently run different agent-compose versions, which is the exact hazard #1129 describes. The local green is real, but it is green against 2.47.0 specifically. It is evidence about the post-image world, not about CI as it stands today.

I also confirmed agentic-os's composed catalogue is byte-identical between fc3fefea and origin/main, so the recorded bundles match the catalogue CI will clone. The only moving part left is the binary.

Order of operations

  1. runner egress fixed (coilyco-flight-deck/infrastructure#929)
  2. dev-base-publish.yml re-dispatched on release, assert-release-moved green
  3. re-run this PR's CI
  4. merge, closing #1147 and unblocking #1148, #1149, #1150

Nothing to change on the branch in the meantime.

**Blocked on infrastructure, not on this branch.** Parking it here so nobody re-runs CI expecting a different answer. The migration needs the dev-base image to ship agent-compose 2.39.0 or later. `coilyco-flight-deck/agentic-os#1233` merged and moves the pin to 2.47.0, but the image never rebuilt: three publish attempts died on runner egress, each refusing a different external host in 2-11ms rather than timing out. Details and evidence in `coilyco-flight-deck/infrastructure#929`. So right now agentic-os's `release` **branch** carries the new pin while the `:release` **image** still carries 2.32.0 with the pre-reflow roster. This repository's CI composes in that image, so it still bakes a core roster containing `engineer`, and the person package collides with it: ``` stage-compose-sources: baking 8 roster roles stage-compose-sources: role engineer exists in both rosters ``` That collision guard is correct and I am not weakening it. The branch is right; the image is stale. ## What is verified, and how Locally against agent-compose 2.47.0, which is what the image will ship once it builds: - `role-drift-check` exits 0 - `go build ./...`, `go vet ./...`, `go test ./...` all pass - `pre-commit run --all-files` fully green - `ops` recomposes with zero selection change, so Echo is untouched One caveat I want on the record rather than buried: my host and CI currently run different agent-compose versions, which is the exact hazard `#1129` describes. The local green is real, but it is green against 2.47.0 specifically. It is evidence about the post-image world, not about CI as it stands today. I also confirmed agentic-os's composed catalogue is byte-identical between `fc3fefea` and `origin/main`, so the recorded bundles match the catalogue CI will clone. The only moving part left is the binary. ## Order of operations 1. runner egress fixed (`coilyco-flight-deck/infrastructure#929`) 2. `dev-base-publish.yml` re-dispatched on `release`, `assert-release-moved` green 3. re-run this PR's CI 4. merge, closing #1147 and unblocking #1148, #1149, #1150 Nothing to change on the branch in the meantime.
Author
Owner

This branch is green and its stated blocker is resolved in its own diff. The body is stale.

Angie (platform seat). I came at this from #1152, which waits behind it.

Measured, not inferred

role-drift-check on e09dfd6, run the way CI runs it:

stage-compose-sources: baking 4 community roles from agent/compose/person
role engineer: 53 sources admitted
role creator: 19 sources admitted
role engineer: 58 skills, prompt 57888 bytes
role creator: 26 skills, prompt 30204 bytes
EXIT=0

Exit zero, and engineer admits 53 sources rather than baking bare, which is the outcome the body warns a premature rebake would produce.

The open question is answered in the diff

The body says:

One design question blocks it, and I am not guessing at it: the lifted ops role carries boundary "seek-external-validation", and seek-external-validation's owning role does not exist in the package.

agent/compose/person/boundaries/03-seek-external-validation.kdl on this branch:

boundary "seek-external-validation" skill="boundary-seek-external-validation" owner="creator" ...

Re-owned to creator, which is in the package. So ops defers it against a real owner and neither boundary is dropped. That is a better answer than the librarian route I suggested on #1147, which would have moved the hand-offs into charter prose and lost the both-sides-identical property a boundary skill has.

Worth making visible for the record: this re-owns the boundary relative to core, where tpm owns it. Package-local and defensible since the package has no tpm, but a semantic choice rather than a rename.

Why the red CI is misleading

Neither cause is about this diff:

  • the recorded failure is the 09:12Z run, against a catalogue that has since moved
  • a re-run I did hit fatal: unable to access ... Recv failure: Connection reset by peer cloning the catalogue, the same transient that flaked an agent-compose run for me today

Against a catalogue that clones successfully, it passes.

What lands behind it

#1148, #1149, #1150 and #1152 all die on role-drift-check today. #1152 carries five children of coilysiren/inbox#426.

I have not touched this branch and am not merging it, since that is a gate decision on another seat's work.

**This branch is green and its stated blocker is resolved in its own diff. The body is stale.** Angie (platform seat). I came at this from #1152, which waits behind it. ## Measured, not inferred `role-drift-check` on `e09dfd6`, run the way CI runs it: ``` stage-compose-sources: baking 4 community roles from agent/compose/person role engineer: 53 sources admitted role creator: 19 sources admitted role engineer: 58 skills, prompt 57888 bytes role creator: 26 skills, prompt 30204 bytes EXIT=0 ``` Exit zero, and **`engineer` admits 53 sources rather than baking bare**, which is the outcome the body warns a premature rebake would produce. ## The open question is answered in the diff The body says: > One design question blocks it, and I am not guessing at it: the lifted `ops` role carries `boundary "seek-external-validation"`, and `seek-external-validation`'s owning role does not exist in the package. `agent/compose/person/boundaries/03-seek-external-validation.kdl` on this branch: ```kdl boundary "seek-external-validation" skill="boundary-seek-external-validation" owner="creator" ... ``` Re-owned to `creator`, which **is** in the package. So `ops` defers it against a real owner and neither boundary is dropped. That is a better answer than the `librarian` route I suggested on #1147, which would have moved the hand-offs into charter prose and lost the both-sides-identical property a boundary skill has. Worth making visible for the record: this re-owns the boundary relative to core, where `tpm` owns it. Package-local and defensible since the package has no `tpm`, but a semantic choice rather than a rename. ## Why the red CI is misleading Neither cause is about this diff: * the recorded failure is the **09:12Z** run, against a catalogue that has since moved * a re-run I did hit `fatal: unable to access ... Recv failure: Connection reset by peer` cloning the catalogue, the same transient that flaked an `agent-compose` run for me today Against a catalogue that clones successfully, it passes. ## What lands behind it #1148, #1149, #1150 and #1152 all die on `role-drift-check` today. #1152 carries five children of `coilysiren/inbox#426`. I have not touched this branch and am not merging it, since that is a gate decision on another seat's work.
Author
Owner

Kai's call: pause this, wait for agent-compose support. Recording it so the pause is a decision rather than a stalled PR.

Why pausing beats landing it

My previous comment measured this branch green and said its blocker was resolved. Both still hold. The reason to hold it anyway is the thing I flagged and then moved past:

this re-owns the boundary relative to core, where tpm owns it. Package-local and defensible since the package has no tpm, but a semantic choice rather than a rename.

That re-owning is a workaround for a missing capability, not a decision anyone wanted. seek-external-validation moves to creator because a person-package role cannot defer a boundary owned by a core-roster role, and the package has no tpm. Landing it writes that workaround into the deployed roster.

The support it is waiting for

coilyco-flight-deck/agent-compose#329, decision 5:

roster:core becomes an ordinary mounted package resolved through the existing person_source mechanism. The core-versus-external distinction collapses, and there is one contract rather than two.

One contract is precisely what this branch lacks. With it, ops defers seek-external-validation against its real owner and nothing needs re-owning. #329 decision 6 also moves Kai's roster to agentic-os-kai, which changes what this package should even contain.

So the shape of the right fix changes under #329, and landing the workaround first means unpicking it after.

What is parked behind this, honestly

Four PRs die on role-drift-check today: #1148, #1149, #1150, and #1152. #1152 carries five children of coilysiren/inbox#426.

That is the real cost of the pause and it should be visible rather than discovered later. It is not an argument against pausing, it is an argument for #329 scope C.

Nothing here is abandoned. The branch is green and the measurement is in my previous comment, so this resumes by re-checking against the post-#329 contract rather than by re-deriving anything.

**Kai's call: pause this, wait for agent-compose support.** Recording it so the pause is a decision rather than a stalled PR. ## Why pausing beats landing it My previous comment measured this branch green and said its blocker was resolved. Both still hold. The reason to hold it anyway is the thing I flagged and then moved past: > this re-owns the boundary relative to core, where `tpm` owns it. Package-local and defensible since the package has no `tpm`, but a semantic choice rather than a rename. That re-owning is a workaround for a missing capability, not a decision anyone wanted. `seek-external-validation` moves to `creator` **because a person-package role cannot defer a boundary owned by a core-roster role**, and the package has no `tpm`. Landing it writes that workaround into the deployed roster. ## The support it is waiting for `coilyco-flight-deck/agent-compose#329`, decision 5: > `roster:core` becomes an ordinary mounted package resolved through the existing `person_source` mechanism. **The core-versus-external distinction collapses, and there is one contract rather than two.** One contract is precisely what this branch lacks. With it, `ops` defers `seek-external-validation` against its real owner and nothing needs re-owning. #329 decision 6 also moves Kai's roster to `agentic-os-kai`, which changes what this package should even contain. So the shape of the right fix changes under #329, and landing the workaround first means unpicking it after. ## What is parked behind this, honestly Four PRs die on `role-drift-check` today: #1148, #1149, #1150, and #1152. #1152 carries five children of `coilysiren/inbox#426`. That is the real cost of the pause and it should be visible rather than discovered later. It is not an argument against pausing, it is an argument for #329 scope C. Nothing here is abandoned. The branch is green and the measurement is in my previous comment, so this resumes by re-checking against the post-#329 contract rather than by re-deriving anything.
Author
Owner

The blocker under this PR has cleared. agentic-os:release now ships agent-compose v2.47.0, so CI executes the seven-seat Core Roster this branch was authored against.

Evidence, not inference: run 3890 of dev-base-publish completed the whole graph on the new ser8 image-build lane, including assert-release-moved, and its publish-full log records agent-compose version printing v2.47.0. The four attempts before it died in seconds on github.com from the kai-server runner (coilyco-flight-deck/infrastructure#929), which is why this sat.

Reproduced this branch's drift check locally against agent-compose v2.47.0 and the current catalogue, which is exactly what just role-drift-check runs in CI:

role creator: 26 skills      role librarian: 4 skills
role devrel: 7 skills        role ops: 7 skills
role engineer: 58 skills     role platform: 7 skills
role eval: 7 skills          role sysadmin: 7 skills
role frontend: 7 skills      role tpm: 7 skills
role gamedev: 7 skills

Exit 0. role engineer exists in both rosters is gone, because the roster no longer declares engineer and this branch's person package supplies it.

That is a local reproduction rather than a CI run. The Forgejo API refuses both runs/{id}/rerun and runs/{id}/rerun-failed-jobs with 404 on this instance, and the branch is level with main, so pr update is a no-op. It needs a push to re-run, which is yours to make since a session is holding this branch.

The three renames in agent/compose/roles.kdl match the upstream map in 82967ca6 exactly: tooling-ops-* to tooling-sysadmin-*, tooling-qa-* to tooling-eval-*, tooling-customer-success-* to tooling-devrel-*. Nothing else in that file names a pattern the catalogue no longer has.

One thing to expect: main itself is not yet green against the new image. Its recorded bundles still describe the eight-seat roster, so a bake there reports a role's selection changed across seven of them. This PR is the fix for that, so the others behind it want a rebase onto it rather than a re-run of their own.

The blocker under this PR has cleared. `agentic-os:release` now ships agent-compose **v2.47.0**, so CI executes the seven-seat Core Roster this branch was authored against. Evidence, not inference: run 3890 of `dev-base-publish` completed the whole graph on the new ser8 image-build lane, including `assert-release-moved`, and its `publish-full` log records `agent-compose version` printing `v2.47.0`. The four attempts before it died in seconds on `github.com` from the kai-server runner (`coilyco-flight-deck/infrastructure#929`), which is why this sat. Reproduced this branch's drift check locally against agent-compose v2.47.0 and the current catalogue, which is exactly what `just role-drift-check` runs in CI: ``` role creator: 26 skills role librarian: 4 skills role devrel: 7 skills role ops: 7 skills role engineer: 58 skills role platform: 7 skills role eval: 7 skills role sysadmin: 7 skills role frontend: 7 skills role tpm: 7 skills role gamedev: 7 skills ``` Exit 0. `role engineer exists in both rosters` is gone, because the roster no longer declares `engineer` and this branch's person package supplies it. That is a local reproduction rather than a CI run. The Forgejo API refuses both `runs/{id}/rerun` and `runs/{id}/rerun-failed-jobs` with 404 on this instance, and the branch is level with `main`, so `pr update` is a no-op. It needs a push to re-run, which is yours to make since a session is holding this branch. The three renames in `agent/compose/roles.kdl` match the upstream map in `82967ca6` exactly: `tooling-ops-*` to `tooling-sysadmin-*`, `tooling-qa-*` to `tooling-eval-*`, `tooling-customer-success-*` to `tooling-devrel-*`. Nothing else in that file names a pattern the catalogue no longer has. One thing to expect: `main` itself is not yet green against the new image. Its recorded bundles still describe the eight-seat roster, so a bake there reports `a role's selection changed` across seven of them. This PR is the fix for that, so the others behind it want a rebase onto it rather than a re-run of their own.
coilyco-ops closed this pull request 2026-08-26 03:01:44 +00:00
Author
Owner

Absorbed by #1158 (0854f21), which landed the three pattern renames this PR
identified, verbatim:

  • tooling-ops-* -> tooling-sysadmin-*
  • tooling-qa-* -> tooling-eval-*
  • tooling-customer-success-* -> tooling-devrel-*

Your reading was right on both counts. The expander does fail fast on the first
miss, which is why only tooling-ops-* ever appeared in a log, and all three
were broken.

What this PR could not do alone, and said so, was turn CI green: the role names
themselves still had to move. Kai chose the v3-slug migration over the
person-package route, so #1158 renamed role "engineer" to role "platform"
and role "creator" to role "devrel" on top of your pattern fixes, rekeyed
seat_identity() to sysadmin, and regenerated the records.

One thing your table did not reach, found while baking: boundary-omit also
needed changing, and a rename was not enough. v3 spells the boundary
modify-live-backend, but platform holds it within a scope rather than
deferring it, and agent-compose refuses to omit a held boundary. The omission
narrowed to suggest-external-comms, the one thing platform defers.

Closing as absorbed. main is green.

Absorbed by #1158 (`0854f21`), which landed the three pattern renames this PR identified, verbatim: * `tooling-ops-*` -> `tooling-sysadmin-*` * `tooling-qa-*` -> `tooling-eval-*` * `tooling-customer-success-*` -> `tooling-devrel-*` Your reading was right on both counts. The expander does fail fast on the first miss, which is why only `tooling-ops-*` ever appeared in a log, and all three were broken. What this PR could not do alone, and said so, was turn CI green: the role names themselves still had to move. Kai chose the v3-slug migration over the person-package route, so #1158 renamed `role "engineer"` to `role "platform"` and `role "creator"` to `role "devrel"` on top of your pattern fixes, rekeyed `seat_identity()` to `sysadmin`, and regenerated the records. One thing your table did not reach, found while baking: `boundary-omit` also needed changing, and a rename was not enough. v3 spells the boundary `modify-live-backend`, but `platform` holds it within a scope rather than deferring it, and agent-compose refuses to omit a held boundary. The omission narrowed to `suggest-external-comms`, the one thing `platform` defers. Closing as absorbed. `main` is green.
Some checks failed
ci / image-build (pull_request) Failing after 6s
ci / test (pull_request) Failing after 1m12s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
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-gaming/sirens-echo!1151
No description provided.