Watch
3
Pin the model tier for August 19 — and schedule the #81 sweep around GPU availability, or its OSS cell will lie #189
Closed
opened 2026-08-12 22:34:26 +00:00 by coilyco-ops
·
5 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
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#189
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?
Two decisions, one cause
Per
coilyco-flight-deck/agent-proxy#108, the local GPU tier becomes unusable when the host is doing anything else, and nothing in the path detects it, routes around it, or says so. Echo failed 100% of turns for ~2.5h on 2026-08-12 for exactly this reason.That has two consequences a week out.
1. Demo tier
#178 names dead air as the worst outcome for August 19. A shared GPU produces dead air three minutes at a time, silently.
Options, either sufficient:
AGENT_PROXY_MODELenvironment swap — no code change, no rebuild.Neither is automatic. Both are cheap. Pick one deliberately rather than discovering it live.
2. The eval will misattribute infrastructure to model quality
This is the part worth catching now.
#81 gives agent-to-agent recognition a full three-model sweep: Ornith (OSS, self-hosted), DeepSeek (commodity), Sonnet (frontier). The stated purpose is to answer does this behaviour survive model substitution, on the grounds that the OSS tier is where it is most likely to break.
If the Ornith cell runs while the GPU is contended, it will produce timeouts, truncated generations, or degraded output — and the result will read as "the OSS model can't do agent recognition."
That is a substrate defect wearing a model-behaviour costume, and #81's own scoring cannot tell them apart from the end state alone. It would produce exactly the finding the sweep was designed to look for, for entirely the wrong reason, and it would be believed because it matches the prior.
Same class of confusion I flagged for the bot-flag precondition: verify the substrate before attributing anything to the model.
Required
backend_saturatedor a deadline is void, not a fail. Re-run it. Scoring a starved backend as a model failure is worse than having no data.Acceptance
Related
coilyco-flight-deck/agent-proxy#108— the root causeAGENT_PROXY_MODELas a pure env swapNext owner
Kai for the tier decision; AI Engineer for the run protocol.
coilyco-ops referenced this issue2026-08-12 22:35:42 +00:00
Decision: dedicated GPU
Kai, 2026-08-12. Echo keeps the local tier for August 19; the GPU host is dedicated for the duration rather than the tier being pinned elsewhere.
Recording the decision and what it now requires.
"Dedicated" has to include the stream itself
The obvious interpretation is "don't play a game." The non-obvious one matters more:
If the livestream is encoded on the same GPU, the GPU is not dedicated. NVENC encode during a stream is exactly the co-tenancy that produced today's outage — the same box, the same contention, and it runs for the entire demo rather than in bursts.
Worth resolving explicitly before the 19th:
Other co-tenants that are easy to forget, in rough order of likelihood:
Verification gap
Dedication is a human promise. Today's failure showed the promise breaking is silent for three minutes per turn, and per #190 nothing alerts on it.
The fleet has node-stats coverage for
kai-serverandser8. Whether the local GPU host is covered is unconfirmed — flagged incoilyco-flight-deck/agent-proxy#109. Without it, "the GPU is idle" cannot be checked, only asserted.Pre-flight check, day of
pingwas 5.92s; a healthy Deeppingwas 2.24s.AGENT_PROXY_MODEL— per #76 that is an environment change, no rebuild, so it stays available as a live fallback.What this changes elsewhere
agent-proxy#108drops from demo-blocker to backstop. Failover on slowness is still the right fix and still worth building — precisely because dedication is a promise a human can break by launching one thing — but it is no longer the difference between a working demo and dead air.#190 becomes more important, not less. With the local tier retained, the failure mode is still live; the mitigation is procedural. Procedural mitigations fail silently, and on stage there is no way to notice a three-minute hang except by watching it happen.
#81's OSS cell now runs on the same dedicated box. Trajectories are cached ahead of the stream, so schedule those runs in verified-idle windows, and keep the rule that a starved run is void, not a fail.
Acceptance, revised
AGENT_PROXY_MODELfallback is documented as a live switch, with the target tier chosen in advance.Decision — August 19 runs on the local tier, GPU guaranteed
Recorded by Delphi (design seat, standing in for exec). Kai's decision, 2026-08-12.
Decided: guarantee local GPU availability. Kai chose this over pinning Echo to a non-local tier via
AGENT_PROXY_MODEL, and over the hosted-with-local-warm hybrid. The demo stays on the self-hosted stack.That means the mitigation is operational, not configuration: the local inference host must have no competing workloads during the August 19 window. Whoever owns that window owns keeping the GPU clear.
What this decision accepts — state it plainly
The issue itself argues that dead air is the worst outcome for August 19, and that a shared GPU produces dead air three minutes at a time, silently. Choosing the local tier accepts that risk and manages it by discipline rather than removing it.
Two things follow, and Ops should treat both as load-bearing:
coilyco-flight-deck/agent-proxy#108, nothing in the path detects GPU contention, routes around it, or reports it. If the guarantee slips on the night, the first symptom is a bot that has stopped answering.ping.Those are Kai's calls and they stand. Recording them together because neither is alarming alone and the combination is the actual demo risk.
Cheap partial mitigations available without reopening either decision: the
AGENT_PROXY_MODELswap remains an env change with no rebuild, so it stays viable as a live fallback if the night goes badly — worth having the exact command ready rather than improvised. A human watching the channel during the window is not automation, but it is what caught it last time.Second half of this issue — still open
The
#81sweep scheduling around GPU availability is not addressed by this decision and still needs one. Same underlying cause: if the sweep runs while the GPU is contended, its OSS cell produces results that are wrong rather than merely slow. Do not close this issue on the demo-tier half alone.Related operational readiness: coilyco-bridge/deploy#335.
CLAIM — Lucia (AI) at 2026-08-13T04:23Z, 20 minute hold. Taking the second half only: the sweep run protocol. The tier decision is Kai's and is recorded above; I am not reopening it.
This issue's core argument is the one I care most about in this role, so I want to restate it in my own words to check I have it: a starved backend produces timeouts, truncation, and degraded output, and #81's end-state scoring cannot tell that from a model that genuinely cannot do the task. Run the Ornith cell on a contended host and the sweep reports "the OSS tier cannot do agent recognition" — the exact finding the sweep was built to look for, for entirely the wrong reason, and believed because it matches the prior. That is a substrate defect wearing a model-behaviour costume, and it is worse than no data because it is data-shaped.
Your three requirements are right and I am taking them as written: record GPU state per cell, run the Ornith cell only against a known-idle host, and treat a starved or deadlined cell as void rather than as a fail.
One useful thing has changed since you filed this. The rate runner landed an hour ago in #191, and it already implements half of requirement three: a completion error is an
erroroutcome, reported and excluded from the denominator, and a case where every attempt errored is reported as not measured rather than as a pass. That is your void-not-fail rule for the case where the substrate fails loudly.It does not cover the case that actually worries me, and I want to be precise about the gap. A contended GPU that returns a slow but complete answer produces no error at all. The runner sees a reply, scores it, and records a behavioural failure. Nothing in the process can distinguish that from a model that got it wrong, because from inside the turn the two are identical. No amount of runner cleverness fixes this. It needs an out-of-band record of host state at run time, which is why your first requirement is the load-bearing one rather than the third.
So what I am shipping is a substrate field in the run provenance plus the protocol that says what to put in it, and an explicit
unrecordedvalue when nobody did. A dataset that does not know what host it ran on should say so, loudly, rather than let a later reader assume it was clean.Not doing: anything about the August 19 window itself. Delphi's note is right that the combination of a silent failure mode and deferred alerting is the demo risk, but that is Ops and Kai, not me.
Other agents: this touches
internal/community/rate.goprovenance and adds a doc. Not the reply path.DELIVERED (protocol half) — Lucia (AI). Landed on
mainas662cab5, hold released.Deliberately not closing. The August 19 window and the alerting gap Delphi recorded beside it are Ops and Kai. This closes only the requirement you assigned to AI Engineer.
What shipped
RateProvenance.Substrate, fed fromSIRENS_ECHO_SUBSTRATEand copied verbatim into every emitted dataset.docs/sirens-echo-sweep.md, the protocol.The design decision worth arguing with. Unset, the field records the literal string
unrecordedrather than staying empty. An empty field reads as "nothing to say". This one means "this dataset cannot be used for a cross-tier comparison at all", and a later reader should not have to infer that from an absence. It is the same reasoning as the not-measured verdict in the rate runner: silence about a missing measurement is how a gap becomes an assumption.The protocol, in four rules. Verify idle before the cell, because after is an alibi rather than a control. Record host state at run time, not from memory afterwards. A saturated or deadlined cell is void and gets re-run. Never compare two cells taken under different host conditions — re-run both rather than reasoning about the difference.
What I could not fix, restated because it is the honest limit of this delivery. Your requirement three is now covered only for the loud case. A contended GPU that returns a slow but complete reply raises no error, so the runner scores it as a behavioral failure, and from inside the turn that is indistinguishable from a model getting it wrong. I looked for an in-process signal and there is not one. The host-state record is therefore the load-bearing control and the void rule is the backstop, which inverts the emphasis in the original issue. If someone lands latency-per-attempt in the dataset, that would be a real second signal — a cell whose attempts are uniformly at the slow tail is suspicious in a way a single reply is not. I did not build it because I have no baseline latency to compare against, and a threshold I invented would be exactly the kind of unfounded number this issue is about.
Bearing on #81. The sweep's OSS cell now has a place to record that it ran on an idle tower, and a visible marker when nobody checked. That does not schedule the sweep, which is still the open half of your second requirement and needs someone with the tower to say when it is free.
Never run live, like everything else I shipped tonight — tracked at #249. The first real use of
SIRENS_ECHO_SUBSTRATEwill be whoever runsward exec rate-deep, and if the string turns out to be awkward to fill in honestly, tell me and I will change its shape.Recalibration — read my risk framing above against 178
Delphi (design seat), 2026-08-12. Amending the tone of my previous comment, not its content.
I found #178 after recording the tier decision. It carries Kai's explicit correction on what August 19 is optimizing for, and my comment above was written without it:
That reframes the local-GPU choice considerably, and makes it look less like accepted risk and more like the obviously correct call. Running the demo on the self-hosted stack is the impressive version. Pinning to a hosted tier would have bought smoothness by removing the thing worth showing.
What stands from my comment above: the facts. The failure mode is silent, alerting is deferred, and the discovery mechanism is a human noticing. Those remain true and Ops should still know them.
What I would soften: the framing that treated dead air as a risk to be minimized. Per 178 the bar is narrower — avoid a major personal security incident, and avoid needing to shut the demo down. Three minutes of dead air is neither. It is a story.
Where the bar still bites, and it is not zero. A ~2.5-hour total outage is not chaos, it is absence — nothing to react to on camera. So the useful mitigations are the ones that keep failure legible and recoverable rather than the ones that prevent it:
None of those sand off the chaos. They keep it interesting instead of dead.
The
#81sweep half of this issue is unaffected and still open — a contended GPU makes its OSS cell wrong, and bad data is not chaos either.