test(prompt): derive the shipped profile set from disk #974
No reviewers
Labels
No labels
move-to-repo
coilyco-bridge-deploy
move-to-repo
coilyco-flight-deck-agent-compose
move-to-repo
coilyco-gaming-eco-app
move-to-repo
coilysiren-inbox
move-to-repo
unknown
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/sirens-echo!974
Loading…
Reference in a new issue
No description provided.
Delete branch "task/derive-shipped-profiles"
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?
Same shape as #972 and coilyco-bridge/deploy#673, one layer in: two inventories
in
prompt_test.gonamedagents/echoandagents/deepby hand, and both failsilently when a third profile arrives.
What was hand-listed
TestThePrincipalUserIDNeverReachesThePromptiterated a literal pair. Thatcheck exists because the user ID was rendered into every prompt, inside a
paragraph telling the model not to rely on it, and Deep recited it (issue 166).
A profile added later would simply not have been checked.
promptBudgetsis the other. Its numbers are ratchets and stayhand-set — a raise is a decision someone writes down in
docs/sirens-echo-prompt.md. But the set is not a decision, and a renderedprompt with no entry grows unwatched forever. That is the silent half of a
ratchet.
What changed
shippedProfilesglobsagents/*/<leaf>and fails when it matches nothing,so an empty glob cannot quietly turn either check into a no-op. The principal
check iterates it.
TestEveryRenderedPromptHasABudgetis new and asserts completeness ratherthan a number, so the two halves stay separate: the set is derived, the
numbers stay written down.
Verified by making it fail
Not trusted, run. A synthetic
agents/probe-lane/rendered/prompt.txt:and green again once removed. Full
go test ./...passes,pre-commitclean.Not done here, deliberately
agent/rendered/roles/*.bundle.txthas no budget of any kind, andcmd/sirens-echo-prompt/main.gosays the role bundle size is "reported andnever gated", verbatim. That is the same silent shape one surface over, and it
is the surface that actually moved: the engineer bundle is ~160KB against Echo's
19,042-byte ratchet.
I did not add it, because picking the first number is a call about what a
composed lane may cost rather than a derivation. It wants its own change and an
owner. Related context in coilysiren/inbox#380.
Two inventories in prompt_test.go named agents/echo and agents/deep by hand, and both fail silently when a third profile arrives. TestThePrincipalUserIDNeverReachesThePrompt iterated a literal pair. That check exists because the user ID was rendered into every prompt inside a paragraph telling the model not to rely on it, and Deep recited it (issue 166). A profile added later would not have been checked, and nothing would have said so. promptBudgets is the other. The numbers there are ratchets and stay hand-set: a raise is a decision someone writes down in docs/sirens-echo-prompt.md. The SET is not a decision, and a rendered prompt with no entry grows unwatched forever, which is the silent half of a ratchet. shippedProfiles globs agents/*/<leaf> and fails when it matches nothing, so an empty glob cannot quietly turn either check into a no-op. The principal check iterates it. TestEveryRenderedPromptHasABudget is new and asserts completeness rather than a number, so the two halves stay separate. Verified by making it fail rather than trusting it: a synthetic agents/probe-lane/rendered/prompt.txt produces agents/probe-lane/rendered/prompt.txt has no promptBudgets entry, so nothing watches it grow and the suite goes green again once it is removed. NOT DONE HERE. agent/rendered/roles/*.bundle.txt has no budget of any kind, and cmd/sirens-echo-prompt says the role bundle size is "reported and never gated". That is the same silent shape one surface over, but picking the first number is a call about what a composed lane may cost rather than a derivation, so it wants its own change and an owner. 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>