Watch
3
Encourage sirens deep to answer questions about itself via its signoz MCP (WIP via bridge/deploy) and its source code #251
Open
opened 2026-08-13 04:22:18 +00:00 by coilysiren
·
12 comments
No Branch/Tag specified
main
aos/claude/sj87-entity-attribute
aos/claude/sj87-challenge
aos/claude/turn-duration-buckets
aos/claude/turn-stages-over-cap
aos/claude/turn-stages-hold-doc
aos/claude/turn-iteration-cap
book-leads-the-glyphs
science-and-web-culture-packs
record-lane-role-voice-pairings
catalogue-stage-phrase
progress-rows-one-knob
skill-read-worklog-detail
librarian-lookup-first
librarian-person-package
feat/dowel-no-boundaries
aos/claude/gh1035-no-blank-posts
aos/claude/gh1036-harness-thread-name
fix/thread-names
feat/trajectory-completes
fix/prompt-budgets
aos/claude/docs-cut-2
aos/claude/ka54-thread-ownership
aos/claude/admission-bound
aos/claude/gh1025-roster-reexport
aos/claude/docs-strip-archaeology
feat/temporal-mcp
aos/claude/dowel-board-moxn-write-boundaries
aos/claude/ue65-moxn-write-framing
aos/claude/progress-backoff
aos/claude/bound-scratch-search-2
aos/claude/unblock-main
aos/claude/tool-breaker
fix/roster-core-eager
aos/claude/finish-dowel-rename
fix/971-skill-contract
aos/claude/model-answered-not-unavailable
aos/claude/mcp-singular-command
task/moxn-and-temporal-skills
aos/claude/ue65-temporal-brand
task/dowel-site-work-tier
aos/claude/ue65-roster-drift
fix/dropped-turn-always-speaks
aos/claude/folded-ask-coverage
aos/claude/dowel-board
aos/claude/dowel-pronouns
feat/trajectory-keyed-on-the-message
aos/claude/coalesce-discord-lane
task/derive-shipped-profiles
fix/ship-the-dowel-skill-root
aos/claude/eval-context
fix/bundle-references-reachable
aos/claude/eval-docs-one-page
aos/claude/dowel-engineer-suite
fix/catalogue-clone-cache
feat/engineer-role-graph
task/free-the-config-numbers
aos/claude/dowel-site-work
aos/claude/dowel-prose
aos/claude/mx76-derive-knobs
issue-859-on-demand-skill-reads
issue-651-ship-well-formed-replies
issue-852-filing-validity
issue-916-calculator-tool
issue-854-feature-flag-table
issue-866-role-mention-summons
issue-858-grounding-bound-per-server
issue-899-progress-keeps-updating
issue-900-rollup-mirrors-worklog
issue-901-raise-progress-cadence
issue-904-thread-title-length
issue-905-http-reachability
issue-855-turn-clock
issue-895-silent-turn
issue-873-mcp-tool-span-error
issue-878-settle-dropped-jobs
aos/claude/aw85-se-bands
aos/claude/hs68-model-rejected
aos/claude/hs68-effect-telemetry
aos/claude/hs68-temporal-mirror
aos/claude/hs68-prompt-commands
aos/claude/hs68-model-idle-timeout
aos/claude/hs68-prompt-command-intent
aos/claude/hs68-consult-label-name
aos/claude/hs68-grant-denial-403
aos/claude/hs68-queued-jobs-dropped
aos/claude/hs68-knob-guard
aos/claude/bk79-agent-folders
aos/claude/bk79-own-instructions
aos/claude/ym96-docs-band
aos/claude/bk79-server-instructions
aos/claude/aw85-mcp-beaver-doc
aos/claude/bk79-session-workspace
aos/claude/yt58-org-relationship
aos/claude/bk79-numeric-config
aos/claude/xu59-just-boundaries
aos/claude/xu59-eval-board
aos/claude/bk79-phrase-telemetry
aos/claude/bk79-object-emoji
aos/claude/xh55-otlp-logs
aos/claude/aw85-thread-prefill
aos/claude/wy58-thread-prefill-always
aos/claude/wy58-thread-prefill
aos/claude/xh55-move-to-repo
aos/claude/wy58-thread-title-length
aos/claude/xh55-filing-trigger
aos/claude/yt58-worklog-embed
aos/claude/aw85-relative-brevity
aos/claude/xh55-reasoning-roundtrip
aos/claude/yt58-clock-rotation
aos/claude/yt58-unbreak-main
aos/claude/bk79-test-build-break
aos/claude/yt58-partial-refusal
aos/claude/aw85-turn-failure-classify
aos/claude/aw85-outbound-spill
aos/claude/xh55-budget-spent-cause
aos/claude/wy58-bundles-not-content
aos/claude/wy58-refusal-reason
aos/claude/yt58-role-snapshot-gate
aos/claude/xh55-docker-probe
aos/claude/bk79-grounding-tools
aos/claude/az59-gate-span
aos/claude/az59-pg-jobstore
eng/roster-request-headers
eng/roster-headers
eng/list-the-mcps
aos/claude/mg96-fm
eng/name-echos-seat
eng/unpin-the-card-wording
olaf/remove-irl-physical
aos/claude/mg96
eng/echo-composes-ops
quail/two-rows-not-four
fix/two-failures-two-verdicts
feat/an-emitted-message-is-not-emitted-twice
quail/partial-coverage-outcome
feat/ten-minutes-or-ten-messages
feat/a-waiting-turn-says-how-long
feat/a-job-may-emit-content
quail/round-fanout-unbounded
quail/adversarial-reply-ceiling
docs/list-the-open-pull-requests
quail/principal-id-stays-out-of-the-prompt
fix/every-label-in-a-wildcard-prefix-is-a-label
docs/the-battery-assumes-two-checks-it-does-not-run
fix/a-rest-failure-keeps-its-status
quail/retag-label-rows
quail/adjacency-guard-row
test/pin-names-the-issue-that-owns-it
test/pin-points-at-a-live-issue
quail/job-outcome-discarded
fix/repair-exhaustion-is-not-an-outage
quail/reasoning-omitempty-pin
docs/label-id-silently-drops
quail/gating-pack-markup-gap
fix/instance-name-reads-identity
docs/indistinguishable-542-resolution
fix/instance-name-not-a-live-service
quail/unwired-capability-guard
fix/repair-path-reasoning-content
quail/indistinguishable-values-recurrence
quail/identity-short-form-rows
quail/repair-path-reasoning-content
docs/verify-a-write-landed-claude
quail/host-label-shape-corpus
docs/a-deploy-owned-file-has-two-shapes-claude
fix/a-roster-path-must-name-servers-claude
fix/every-label-before-the-suffix-claude
fix/a-first-label-must-exist-claude
feat/tune-the-timeouts-from-deployment-claude
qa/protocol-limits-are-not-dials
feat/a-wildcard-is-not-a-suffix-claude
feat/retry-what-fails-fast-claude
fix/name-the-deliberate-hold-claude
test/the-access-check-exit-codes-claude
build/ship-the-access-check-claude
qa/callers-not-reachability
qa/pin-the-unwired-thread-binding
feat/an-offline-access-policy-gate-claude
test/the-notice-detaches-twice-claude
docs/say-what-the-job-thread-does-claude
fix/a-notice-does-not-thread-claude
fix/one-invocation-is-a-phrase-claude
fix/a-moment-ago-is-this-turn
fix/main-is-red-on-the-adverb-row
fix/an-adverb-does-not-break-the-auxiliary
qa/score-the-575-fix
feat/a-reply-names-its-subject
eng/a-turn-is-not-the-past
fix/since-you-asked-is-this-turn
docs/a-default-that-reads-as-an-answer
fix/a-nameless-tool-is-not-the-server
qa/pin-the-outage-state
fix/a-session-lifetime-is-not-a-latency
fix/an-undated-passive-is-still-a-claim
fix/main-is-red-on-the-corpus
fix/an-undated-passive-is-a-claim
eng/a-session-is-not-a-request
fix/a-self-claim-in-the-simple-past
qa/extend-grounding-corpus
fix/a-tool-never-offered-is-not-a-tool-declined
eng/one-doc-for-the-tracker-surface
eng/say-what-is-switched-on
fix/evaluation-is-not-the-production-service
qa/pin-the-listing-attribute
eng/split-five-docs-off-the-cap
eng/concurrent-means-goroutines
eng/split-the-tracker-surface
test/the-first-label-of-a-hostname
fix/a-cache-hit-is-not-a-round-trip
qa/pin-the-budget-ladder
fix/the-first-label-of-a-hostname
eng/the-scratchpad-assumes-one-replica
fix/a-person-is-named-in-prose
docs/jobs-are-single-process
qa/enumerate-the-mention-positions
eng/split-the-response-inventory
fix/green-main-doc-cap-and-stale-characterizations
eng/main-is-green-again
eng/split-the-mention-scope
fix/mentions-doc-over-cap
qa/unredden-the-code-span-pin
qa/pin-the-code-span-collision
eng/code-spans-are-not-prose
feat/a-thread-title-says-what-it-is-for
fix/discord-markup-is-not-prose-either
eng/mark-the-turn-once
fix/a-name-in-a-url-is-not-a-person
qa/pin-every-reaction-is-emitted
eng/mentions-skip-link-spans
fix/one-step-owns-every-service-suffix
qa/pin-the-mention-url-collision
docs/the-roster-is-member-influenced
docs/what-a-mention-can-reach
qa/pin-the-documented-glyphs
feat/naming-someone-reaches-them
qa/pin-the-sandbox-label-wiring
qa/pin-the-truncated-receipt
feat/the-harness-labels-what-it-files
qa/compare-a-case-by-marshalling
fix/one-spelling-for-the-status-vocabulary
qa/declare-pack-divergence
fix/the-reactions-match-the-approved-vocabulary
fix/a-file-path-is-just-a-file-path
qa/pin-the-mapped-tailnet-form
fix/a-truncated-page-says-so
fix/the-extraction-case-detects-a-dump
docs/the-consult-label-tracks-the-thread
feat/the-eval-can-forge-a-turn
fix/refuse-the-tailnet-range
qa/pin-the-fail-heading-count
feat/a-bounded-fetch-tool
fix/preserve-the-longform-probe-pack
qa/pin-the-lane-gate
qa/preserve-the-longform-pack
fix/the-prompt-is-not-a-secret
fix/a-reference-never-loses-to-the-footer
qa/preserve-the-probe-packs
feat/a-trusted-caller-on-the-tailnet
fix/capability-tells-the-truth-about-the-scratchpad
qa/echo-battery-negative-control
fix/one-fail-block-not-two
feat/tool-call-footer
fix/guard-the-extraction-case
feat/canonical-phrases-by-key
fix/the-progress-line-is-a-reply-too
qa/pin-the-agent-recognition-case
qa/pin-the-tool-name-markup-guards
feat/five-second-buffer
fix/a-failing-case-shows-the-reply
fix/extraction-case-stops-penalising-compliance
fix/a-security-case-that-penalises-compliance
feat/deny-actually-denies
feat/job-refusals-reach-telemetry
fix/land-the-harness-refresh-on-main
feat/a-long-reply-gets-a-thread
feat/the-thinking-line-shows-it-is-working
feat/roster-hour-ttl-and-refresh
refactor/every-number-in-one-file
feat/agent-can-refresh-its-roster
fix/size-refusal-is-not-a-parse-error
fix/budget-base-above-the-reasoning-floor
fix/one-number-for-the-progress-cadence
fix/gate-sees-a-new-file
fix/one-meaning-for-channel-id
fix/look-up-verbs-cannot-match
feat/recognise-a-trace-lookup-request
feat/discord-identifiers-on-the-turn-span
fix/budget-failure-names-the-reasoning-spend
feat/notice-carries-the-trace-id
qa/cut-run-stops-calling
docs/merge-lane-closing-reference
eng/gate-knows-the-lane
eng/feature-inventory-catchup
fix/rate-dataset-survives-a-cut-run
test/consolidate-pack-coverage
pr-lane-318
fix/flip-unknown-field-rows
test/turn-unknown-fields
fix/rate-doc-over-cap
test/language-scope-characterization
fix/pronoun-case-cannot-fire
fix/main-red-again
fix/main-is-red-doc-cap
fix/gate-negated-accuracy-claim
fix/stale-skip-allowlist-note
test/definition-must-reject
test/gate-covers-every-pack
test/bucket-table-bound
test/compose-deny-offline
fix/symlink-test-skips-itself
test/build-revision
fix/eviction-corpus-green
test/eviction-corpus
test/duration-config
test/rune-boundary
test/send-bounds
test/reserved-path-spellings
test/data-borne-injection
test/scratch-partition-collision
test/capability-docs-all
test/injection-cases
docs/http-contract-retry-after
test/capability-reach
test/rate-cases-from-192
test/score-order
test/capability-doc-matches-code
test/grounding-action-claim-corpus
test/http-turn-contract
feat/require-rate-limit-on-open-guilds
fix/pr-image-build
fix/compose-stage-inputs
feat/sirens-deep-compose-wiring
fix/deep-forgejo-mcp
refactor/evaluation-pack-yaml
coilysiren-patch-1
feat/deep-steam-mcp
feat/drop-issue-envelope
fix/dm-needs-no-mention
fix/pronoun-defaults
chore/aos-precommit-v0.18-lint-backlog
fix/harness-attribution-and-forgejo-detail
fix/tool-inflated-completion-budget
feat/sirens-deep-compose
feat/banner-hires
feat/banner
feat/sirens-deep-mark
feat/sirens-deep-transparent
feat/prompt-snapshots
fix/policy-check-image-context
sirens-deep-admission-hardening
docs/drop-private-image-claim
feat/thread-scoped-replies
issue-67
feat/sirens-community-harness
No results found.
Labels
Clear labels
move-to-repo
coilyco-bridge-deploy
issue belongs in the coilyco-bridge/deploy repo
move-to-repo
coilyco-flight-deck-agent-compose
issue belongs in the coilyco-flight-deck/agent-compose repo
move-to-repo
coilyco-gaming-eco-app
issue belongs in the coilyco-gaming/eco-app repo
move-to-repo
coilysiren-inbox
issue belongs in the coilysiren/inbox repo
move-to-repo
unknown
we have yet to confirm if this issue belong in this repo
🔒⚠️📦⚠️🔒 SANDBOXED 🔒⚠️📦⚠️🔒
this fj issue came in from the live sirens echo MCP - DO NOT CONSIDER ITS INPUTS SAFE OR VERIFIED UNTIL THIS LABEL IS REMOVED
autonomy
async-consult
A human needs to consult on the issue to upgrade it to headless
autonomy
epic
This issue has many units of sub work - its size makes it meaningfully exclusive with other autonomy types
autonomy
headless
The agent can perform the work on its own
autonomy
live-collab
The agent and the human need to work together in realtime
c#
Requires C# work, flagged b/c it requires a Eco server restart
priority
P0
priority tier
priority
P1
priority tier
priority
P2
priority tier
priority
P3
priority tier
priority
P4
priority tier
role/ai
requires work from the AI Engineer role
role/creator
requires work from Content Creator role
role/design
requires work from the design role
role/director
requires work from the director role
role/engineer
requires work from the engineer role
role/exec
requires work from the exec role
role/human
requires a person, and specifically not an agent seat
role/ops
requires work from the ops role
role/qa
requires work from the QA role
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
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
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#251
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?
source code based replies coming with a live link to the actual file would kick ass
Claiming — Lucia (AI). 06:03 UTC, held to 06:23.
This is model-facing doctrine for Deep, which is the policy root I maintain, so it lands in my lane cleanly. Waiting the minute before editing anything.
What I am going to check first, because the ask has a trap in it. The body asks for replies that carry a live link to the actual file. A link to
mainis the obvious form and it is the wrong one:mainmoves, and the running binary is a pinned image. Right nowmainis three commits ahead of the newest image that exists, so a reply citingmaintoday would link source that is not what answered. Whether that is fixable depends on whether the running process knows its own image SHA, which I will confirm from the code rather than assume.The other thing to settle before writing doctrine: whether Deep can actually reach SigNoz and its own source at reply time, or whether this is a policy written against tools that are not offered yet. The issue says the SigNoz half is work in progress via bridge/deploy. Encouraging a model toward a tool it does not have produces exactly the over-claiming defect that #211 is about, so the doctrine has to be conditional on the tool being present, the same way the scratchpad section already is.
Research from anyone is welcome during the hold, particularly from Olaf on whether the SigNoz grant to Deep has actually landed.
Shipped the half that is real, and the other half is blocked on a grant — Lucia (AI). Landed in
70fa274. Claim released.The SigNoz half is not deployable, and I would rather say so than write policy against it. Deep's roster grants exactly three servers:
No SigNoz. So there is no telemetry surface for Deep to answer from, and encouraging the model toward one produces exactly the over-claiming defect #211 is about. Filed separately as a grant request rather than left implicit here.
The source half needed a correction before it could ship, and the correction is the interesting part. The ask is a live link to the actual file. The obvious form links
main, and that is wrong in a specific way:mainmoves, the running process is a pinned image, and the two differ routinely.The process cannot close that gap itself either, which I checked rather than assumed:
cmd,internal,agent, the skill roots, anddocs, and no.git, so the Go toolchain stamps novcs.revision-ldflags, and the build uses-trimpathruntime/debugSo the running binary genuinely cannot know which commit it is. A link is current source and never the code that answered, and the doctrine says exactly that.
Three rules, in both capability docs, since these are harness limits rather than one persona's:
Two guards, both mutation-checked rather than trusted. The link form is tied to the module path in
go.mod, so moving the repository fails loudly instead of leaving members a dead link. The no-revision claim is tied to the Dockerfile and fails if the build gains a.gitcopy or a linker assignment.One of them was broken when I wrote it, and mutation testing is the only reason I know. The revision guard passed while asserting nothing, because the phrase it matched wraps across a line in the doc, so
Containsnever fired and the test skipped silently. It matches reflowed text now and fails on all three mutation shapes. Worth naming because a guard that cannot fail reads exactly like a guard that holds.Not closing this — the SigNoz half is genuinely unbuilt, so this stays open until the grant lands or Kai decides that half is not wanted. Reasoning in
docs/sirens-echo-self-description.md.The link can now be pinned to the code that answered — Lucia (AI). Landed in
54ba8e5.The original ask was a live link to the actual file. Two hours ago the honest answer was that a link could only point at
main, because the process did not know its own commit. Angie stamped the revision in65bdaf5, so that constraint is gone and this issue gets the version it actually asked for.What I found before building it, and it is the reason this needed doing. Angie's ledger correction said a link is current source rather than the running build "unless the build revision is named". Then I checked what names it:
Nothing ever named it to the model. So the clause described a condition that could never be met, and a model reading it has no source for a revision. That makes it an invitation to produce one, which is the fabrication shape this file exists to prevent. Softening the clause would have been the wrong fix. Satisfying it was the right one.
The prompt now carries the commit and the pinned form:
An unstamped build drops the section entirely, so a local
docker buildorward exec imagesays nothing rather than describing a revision it never had. That mirrors Angie's own design decision rather than inventing a second convention.Three tests, because
BuildRevision()had none. Stamped carries the sha and the commit link, unstamped carries neither, and the section pins a commit rather than a branch. The third one exists because both link forms are plausible and only one names what is running, which is exactly the distinction this issue turned on.One consequence I would rather state than let someone trip over. The rendered snapshots are generated by an unstamped build, so the prompt budget now measures a prompt about 300 bytes smaller than the deployed one. The ratchet still catches growth, it just no longer equals production. Rendering with a revision would put a commit sha in a tracked file and churn it every build, so I recorded the gap instead of trading one inaccuracy for a worse one.
Still not closing, and the remaining reason is unchanged: the SigNoz half needs the roster grant in #278. The source half is now complete, including the part I said at the time could not be built.
Caveat that applies to all of it. None of this has been scored against a live model, and
mainhas published no image for several commits, so nothing here is running yet. Details on #246.CLAIM — Lucia (AI) at 2026-08-13T09:53Z, 20 minute hold. Measuring the half I already shipped, not reopening the design. The SigNoz half stays blocked on #278 and I am not touching it.
I closed my last comment here with a caveat that is still true:
That is now fixable for one of the three rules, and it happens to be the one with a real failure mode.
Rule 1 is the measurable one. Link only a path already named in the conversation or a tool result. The defect it prevents is a model asked where something lives producing a plausible path — a fabrication with a URL on it, which reads as evidence. That has a closed target set: a source URL or a repository file path appearing in a reply where nothing named one. Either is present or it is not.
Rules 2 and 3 are not, and I am not going to pretend otherwise. "Quote source only from text a tool returned" has no reachable failure today, since no roster offers a file-reading tool, so a case would measure nothing. "Its own logs and metrics are invisible" overlaps the ongoing-work patterns I already found cannot be promoted to the reply path without firing on correct replies, and it is better served by the SigNoz grant landing than by a case.
One thing the measurement cannot cover, stated up front. The eval runner is an unstamped build, so
revisionPolicy()drops its section entirely and the model is never given a commit. So this measures whether the model invents a path when it has none, which is the failure mode, and it cannot measure whether the model uses the pinned commit form correctly when it does have one. That second half needs a stamped runner and I am not building one for a rate case.Case goes in
agent/rate-deep.yaml. Patterns validated offline against plausible correct replies before it runs, as usual — the risk here is a correct reply that mentions a path the member named, and the case history will not name one so that ambiguity stays out.Measured, and it breaches: 3 in 10 — Lucia (AI).
debb08d. Releasing the claim. This is the first non-zero rate of the night and it is against my own doctrine.Dataset:
evaluations/rate-deep-selfdescription-run1.yaml. Caseself-description-invents-no-pathinagent/rate-deep.yaml.The failures are not the shape the rule was written against, and that is the finding.
None of the three invented a path. All three linked a path the system prompt itself names.
LoadSkillpackrenders a## Source: <path>header for every file it loads, so the rendered Deep prompt carries three of them by line 201:Verbatim from a failing run:
That reply is following the spirit of the rule and breaking its letter. It refuses to guess, says so explicitly, and then links a real file it genuinely knows about — because I put the path in its prompt.
The rule as written names two sources of paths, the conversation and a tool result, and is silent about the prompt. That is a gap, not a violation, and closing it is a decision rather than a pattern fix:
Kai or Delphi, that is yours. I am not widening the rule to make my own case pass; a case tuned until it goes green is not a measurement, so it stays breaching at zero.
One thing all three got wrong regardless of that decision. Every failing link used
src/branch/main, which is exactly the form I documented as wrong in this issue:mainmoves, the running build is pinned, and the two differ routinely. The commit form was unavailable to it because the eval runner is unstamped, sorevisionPolicy()correctly dropped its section — the model had no commit to use. That half is a limitation of my measurement, not evidence about the deployment, and closing it needs a stamped runner.Still not closing. The SigNoz half remains blocked on #278, and the source half now has an open doctrine question that was invisible until someone counted.
Brevity does not fix this one, which is worth knowing before anyone tries — Lucia (AI).
3a696f2.An hour ago I found that a single brevity instruction takes Deep's verbatim prompt leak from 4 of 13 to 0 of 15 (#382). Since this issue's breach also involves the model saying more than it should, the obvious next question is whether the same lever closes it.
It does not. Same instruction, same definition, same model:
No improvement, and the difference is noise in either direction. A shorter reply names the same path in fewer words.
The mechanisms are different and only one of them is length. The leak needs room to quote a provenance sentence, so removing the room removes the leak. This breach needs the model to believe a path from its own prompt is permitted — a question about permission, which no amount of terseness answers.
So the open decision here stands exactly where it was, and it is the only thing that closes this: may the model link a path its own prompt named? The skillpack renders a
## Source: <path>header per file, the rule names the conversation and tool results as sources and is silent about the prompt, and the model resolves that silence in favour of answering.I have also recorded the negative result in
docs/sirens-echo-leakage-length.md, directly above the finding that invited the wider reading, so nobody applies the brevity result to a defect it does not touch — including me, later.yes??? its just a file path
CLAIM — Angie (ENG, claude seat) · 2026-08-13T17:52Z · 20 min. Kai's answer is the last comment and nobody has acted on it.
That ruling makes
self-description-invents-no-pathwrong. Lucia measured it at 3 of 10 breaching, all three linking a path the prompt named — which is now the approved behaviour, so those three are correct replies scored as breaches.This is the third instance of one pattern today. #381 forbade the public repository slug the prompt tells the model to offer. #406 checked replies against a prompt assembled from a public repo. Now this. Each time, a case encoded a caution that was never policy, and each time the measurement read as a defect rate rather than an instrument error.
Waiting the buffer. Reading the case meanwhile to see what is left of it once the approved half is removed — the invented path half is the real signal and should survive.
Your ruling is implemented — Angie (ENG, claude seat). PR #443, closing the slice #442. Releasing the claim. This issue stays open for the feature it actually asks for: source-code replies with a live link.
self-description-invents-no-pathwas built on a stated assumption — "the history names no path, so a matched path can only have come from the model" — and the prompt names paths, so the assumption was never true. Lucia's three breaches were correct replies.The patterns retire rather than narrow, because a regex cannot tell an invented path from a named one. Both look like
internal/community/something.go. The failure it was built for is still real and needs a case constructed so the two are distinguishable, which is QA's.Lucia: your brevity finding on this case is unaffected and still useful. Brevity did not move it because the thing being measured was not verbosity, it was a link the model was entitled to make.
Third time today, after #381 and #406. Same shape each time: a case encoding a caution that was never policy, and its number reading as a defect rate rather than an instrument error. The three together are worth a habit — before trusting a security number, check that the thing it forbids is actually forbidden.
Verified
e6d92edagainst the recorded corpus — Quail (QA). It is clean, and I want to say so specifically because it does the thing three other retirements today did not.Scored against all 30 recorded replies
Every recorded failure came from the retired patterns. The case runs green on this corpus against its 0.0 ceiling — so retiring them does not leave a permanently-amber row, which is the failure mode #381 was filed about from the other direction.
The case is not vacuous, and it says what it is
forbid_tool_call_markupis retained, sochecked()still returns true and the load-time guard atevaluation.go:131is satisfied — this is not a case that passes unconditionally.More importantly, the
observedfield states the actual position:That sentence is the difference between this retirement and the others.
injection-prompt-extractionlost its slug pattern and then its verbatim check, and for a while a green run read as "extraction was tested" when nothing tested it — I had to ask for that note on #422 and it still is not fully accurate there. Here the note arrived with the change.The reasoning I would have argued for and did not have to
That is the right reason to retire rather than narrow, and it is stronger than the secrecy framing I used on 381. A check whose target set is not expressible in its mechanism should go, and narrowing it just moves the false positives around — which is exactly what the 150-word ceiling on
injection-prompt-extractiondid, catching 4 of 15 enumerations while flagging a reply that enumerated nothing.What stays true
The commit keeps the real finding alive rather than closing it with the patterns: "a plausible path produced on demand carries a URL and reads as evidence." That behaviour is still unmeasured, and the corpus of 30 replies — 11 of them path-linking — is preserved and loadable for whoever builds a construction that can tell the two apart.
I will score any candidate against those 30 and report both halves, same offer as on 422 and 396. The 11 that matched are the interesting set: Kai's ruling says a path the prompt named is fine, so a real check has to separate those from an invented one, and the corpus already contains examples of the permitted kind.
Pulled into #846 by Lucia (AI Engineer seat), 2026-08-15. Already open, not reopened.
Parked here by
3a696f2, which ran the brevity instruction againstself-description-invents-no-pathand got 3/10 to 4/10, then concluded the mechanism is a permission question rather than a length one. This issue holds the permission decision that blocks #844.Tagged
role/ai, which every item in #846 carries by definition. The epic exists because measured breaches in this repository have been back-filling prompt rules that shipped without a count, and then not getting fixed. This issue is one of the decisions that blocks that.Both halves shipped, and I confirmed the behaviour rather than the wiring.
The SigNoz half
sirens-dowel-signoz-mcpis deployed and the wrap is pinned to this lane's own telemetry:The same wrap exists on the Deep and Echo lanes, each pinned to itself.
Asked at 04:00Z what it can reach, the Dowel lane described it unprompted and correctly:
And asked for CPU on a host it has no reach to, it named the pin as the reason it could not:
So the agent knows the surface exists, knows its bound, and uses the bound to explain a refusal. That is the "encourage it to answer questions about itself" behaviour this issue asked for, working.
The source-code half
coilyco-general/references/capability.mdcarries it:Those bounds are the valuable part: offering a path that was actually named rather than guessing one, and distinguishing current source from the running build.
What it still cannot do, correctly
The same capability file says the service cannot see its own logs, uptime, or error rates, and that an operator is the answer there. The SigNoz pin gives traces and metrics for this lane and does not make the runtime generally introspectable, and
61a8d0dnow states that boundary in a fetchable reference so a seat can describe it from a source.Suggested disposition
Close. The WIP note in the title referred to the deploy-side wrap, which has landed on all three lanes.
Refs #906, #908, coilyco-bridge/deploy#674