fix: attribute the harness to the real ingress and make Forgejo failures diagnosable #101
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!101
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/harness-attribution-and-forgejo-detail"
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 reported defects, both cases of the runtime asserting something it does not know.
Harness attribution
X-Ward-Harnesswas the literal stringdiscordon every Agent Proxy request, so an HTTP-only deployment reported a Discord surface it does not have.That is half of #88, where Deep also described reading a channel it cannot see. The prompt half was already fixed; this is the span and audit half.
The header now follows the deployment's configured ingress. Per-turn transport was already accurate on the turn span as
sirens_echo.transport, so this is deployment-level audit attribution rather than a per-call value.Forgejo failure detail
forgejo.issue.failedlogged only a restatement of its own name. Fourteen consecutive failures gave an operator no status, no tool, and no cause, per #89.The MCP client now returns a typed
ForgejoCallErrorcarrying the tool, the HTTP status, and whether the tool itself reported the error rather than the transport. The log emits all three.The remote response body was already discarded before the error was built, and still is. A test asserts that specifically, because the useful version of this fix and the leaky version look very similar, and the difference is what keeps the telemetry body-safety contract intact.
A test that encoded the bug
TestProxyClientSendsBoundedCommunityRequestasserted the hard-codeddiscordheader. That assertion described the defect rather than the contract, so it now declares its harness explicitly, and the real contract is covered by a separate test over both ingress modes.Not addressed
#89 raises a second question worth deciding on its own: whether an HTTP-only lane should be able to file issues at all, given
issueis populated by the model's own judgement from untrusted conversational input. This PR makes that path diagnosable; it does not narrow it.#90, the per-turn 400s against both MCP endpoints, is untouched and still open.
Verification
pre-commit run --all-filesexit 0,go vet, andgo test -count=1 -race ./...all pass.