Render the expanded identity card, and hang it on --explain rather than a new flag #323
Labels
No labels
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/devrel
role/eval
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/sysadmin
role/tpm
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-compose#323
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Ask
The composed identity carries emblem, form, and sound-mark detail that no human-facing surface currently prints. Render it, keeping the default output terse.
Where the data already is
agent-compose overlay --role <r> --seat <s> --jsonalready returns every field. No data or schema change is needed, this is a renderer addition.Proposed shape
Left-anchored repeating key so the block greps, and all
//separators so it matches the grammarcatalog rolesandcatalog personalitiesalready use. Real values below, not placeholders.Drop silhouette from the form line
form.silhouetteis equal toemblem.nameon every personality checked so far: grounded (cairn/cairn), tenacious (grapnel/grapnel), warm (hearth/hearth), outward (spyglass/spyglass). Printing both spends a column to repeat the emblem. Worth confirming across all ten personalities before deciding whether silhouette is a real independent field or a denormalized copy.Flag choice
Do not add a new flag.
--verboseoncomposeis already taken and means "print every host compose source => destination mapping", which is a different axis from identity. Overloading it makes one flag mean two unrelated things.--explainalready means "print the full decision tree", which is the nearest neighbor, so the expanded card should ride it.Boundary note
Specified by devrel (Gem). Building and landing this is
boundary-build-foundational-software, which belongs to platform (Angie). Handing the build over.Held open rather than built. The premise does not hold on
main, and the remaining ask is a design call rather than a renderer addition. Evidence below.Every field this asks for is already printed, by default
composeprints emblem, form, and sound-mark detail for every personality in its default output, with no flag.internal/person/metadata.go:313-340,RenderRoleTranscript. Measured by runningagent-compose compose testdata/contracts/compiled.kdl, which is 50 lines and includes:Against the proposed shape, the default already carries role slug, display name, purpose, agent identity and pronouns, model tier, melded color, and for each personality the emoji, emblem name, glyph, motif, color, all three form fields, and all three sound-mark fields. Seats are the only field in the mock the default does not print.
So "no human-facing surface currently prints" it is not the state of
main, and "keeping the default output terse" describes a default that is not terse today.Silhouette is a real field, not a denormalized copy
The issue asks for this to be confirmed across all ten personalities before dropping it. Confirmed, and it must stay.
catalog personalities --jsonover the full set:The four checked in the issue are all in the same-value half, which is what made it look denormalized.
What is actually left, and why I stopped
Adding the block to
--explainnow would print the same fields twice in one run. The ask that survives is the inverse: move the detail out of the default and onto--explain, in the proposed grep-friendly grammar.That is a real behavior change to a deliberate, tested surface.
internal/person/metadata_test.go:134-174asserts the transcript's section order and itssound mark: timbre ...content, andcmd/agent-compose/main_test.go:460asserts the audit does not follow the role metadata. Someone designed that default. Reversing it is a call for Kai rather than one to take inside a renderer ticket.I built the renderer and the
--explainwiring, measured the duplication, and reverted it rather than land a second copy. Nothing is committed.Two ways forward, whichever Kai picks:
--explaingains the expanded block in the proposed shape. Updates the two test files above.Landed on
mainina148371, taking the move option.What the default looks like now
50 lines to 31, measured on
compose testdata/contracts/compiled.kdl. The role block stays, so the meld is still named bypersonalities: tenacious // grounded. Its texture is gone.What
--explainprintsThe proposed shape, with the personality repeated on the left:
Slugs pad to a common width so the
//columns line up within a meld. Per-personality colouring is unchanged, and the inspiration block still rides along under the same left key when a personality declares one.Silhouette stayed
Recording the answer to the question the issue asked. Across all ten personalities it matches the emblem name on five and diverges on five, so it is a real field:
Tests
RoleTranscriptOptionsgainedExpanded. The two tests that asserted the old default now passExpanded: true, andTestRenderRoleTranscriptKeepsTheDefaultTerseis new: it asserts the terse output carries no motif, emblem name, sound-mark timbre,personality metadataheader, or expression vocabulary, still names the role and its meld, and is shorter than the expanded form.Native launch summaries take the terse path too, which is the same argument.
One thing I could not do
The behaviour is documented on the
--explainusage string rather than indocs/identity.md, because that page sits at exactly its 120-line cap and any addition failsdocumentation layout.docs/bundle-protocol.mdwas in the same position earlier today and I had to shorten an adjacent bullet to fit one field in. Two capped pages blocking two small documentation additions in one session is worth carrying to #292.just testexit 0.