feat(aterm)!: give every role bundle its own icon (#1282) #1342
No reviewers
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1342
Loading…
Reference in a new issue
No description provided.
Delete branch "aos/claude/hj55-role-icons"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Seven
.icnsland inaterm/iconsand embed into the binary, so every.appaterm bundleswrites carries its own art instead of the generic macOS icon. Seven tiles distinguishable only by name was most of the reason not to have separate apps at all.Shape
Mirrors
aterm/sounds, which ships pre-rendered samples so a launch needs no synth. A bundle write needs no renderer, no art pipeline, and no network.--iconstill overrides every bundle with one shared file, and a role with no committed art keeps the system icon rather than a broken reference, so a roster that turns over cannot write a half-iconed set.Delivery, which #1282 left open
The art is drawn as the seat creatures in
agentic-os-xxxand imported by a script committed there, whose docstring carries the full derivation. #1282 flagged this as a disclosure decision rather than a mechanical one, since this repository is public and the one producing the art is not. Kai made that call.The 32px question from agent-compose#363
#363 warned that the roster measures 18 of 21 role pairs below the side-by-side JND, and that icons are the worst case because seven tiles sit in one Dock at a fraction of a window size. Verified rather than assumed: all seven separate at 32px by silhouette as well as by hue, which a colour swatch could not. The cost #363 also named still stands, that a committed icon is durable where every other renderer recomputes.
Verification
go test ./...green, with new coverage for per-role resolution, the--iconoverride winning, and a role with no art still generating.aterm bundlesrun into a temp dir: all seven.apps carryCFBundleIconFile, each icon sha-matches its own role file, andiconutilreads one back as a valid icns.Not included
No docs page.
docs/is at the 40-doc cap andaterm.mdsits 27 characters under its size cap, so there is nowhere for the reasoning to land. Filed separately.Closes #1282
Blocked on #1343, not on anything in this diff.
ci / ward-doctoris red here and on #1340, and green on main in 6s. Neither PR touches.ward, the workflow, or the install script. Every other context passes on both:gate,aos-cli-tests,aos-eval-tests.Holding rather than merging, because the lane merges on green. Ready the moment #1343 clears, with no rebase needed unless main moves.
Correcting my comment above: "every other context passes on both" was wrong for #1340, where
gatealso failed. Verified per job on the API rather than the status rollup.This PR's run 28559 is accurate as stated:
aos-cli-testssuccess,aos-eval-testssuccess,gatesuccess,ward-doctorfailure.Root cause is now known and is not either diff. The runner cannot reliably reach
forgejo.coilysiren.me: job 45917 shows a failed image pull, two git checkout connect timeouts at ~134s each, then six fast 404s once connectivity returned. Details on #1343, fix split between #1344 and the runner repair.Still holding this PR rather than merging.
Slugs corrected, and three moved rather than two
Pushed as
73a946ca, on top of main merged in.Unchanged:
platform,sysadmin,frontend,gamedev.devrelbecomingadvocateis not in #1354, which names only the first two..agents/roles.kdlon main is what says so, and checking the source rather than the handover note is the only reason it was caught. Left as it was, three seats would have silently fallen back to the system icon, which is exactly the failure mode this feature's fallback is designed to be quiet about.The installed
agent-composeis no help here either: it still resolveseval,tpmanddevreland knows nothing of the new slugs, because the rename has landed in source and not yet in a release.The test that should have caught it is replaced, not corrected
The old one listed the seven slugs by hand. That list travelled with the icons, so it agreed with them whatever either of them said, which is worth nothing. It now parses
roles.kdland asserts both directions:Both would have failed loudly on this rename. Verified against the current tree: seven declared, seven shipped, no missing and no orphans.
roles.kdlrather than the live roster on purpose. The roster is authoritative at runtime, but the installed release lags, so a roster-derived assertion would be red until that catches up.roles.kdlis the policy input, it lives in this repository, and it is current.Two pre-existing failures, so they are not read as fallout
Neither is caused by this branch and neither is fixed here.
TestLiveDefaultSeatBelongsToItsRolefails onorigin/maintoo, with "AOS has no default agent for role eval", because the installed release predates the rename. Checked by running it againstorigin/mainrather than assuming.aterm/overlay_test.gois unformatted onmain. Byte-identical here, so fixing it would widen this diff into someone else's file.Still blocked on #1343 for CI, unchanged by any of this.