feat: drop the issue envelope and let the model file through its own tool #109
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!109
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/drop-issue-envelope"
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?
The model was handed
forgejo__tools on every turn while the response envelope carried a parallel path to the same capability. One mechanism now. Net -595 lines.Replies are plain text
ParseReplybounds the reply and does nothing else: no JSON decode, no embedded-object scan, no fence unwrapping.That last removal is a correctness fix, not just cleanup. A fenced block is legitimate reply content, and the old parser unwrapped fences before parsing, so an answer containing a shell snippet would have been mangled. There is a test pinning the verbatim round-trip.
Removed
Decision,IssueDraft, the draft normalizer and its Discord-identifier sanitizer,ForgejoMCPClientand the wholeforgejo.gowrite path,forgejo.issue.ensure,appendTrackingLink, theforgejo_issue_failedexception, and the "issue draft while tracking is disabled" guard.Two deliberate deviations from the suggested scope
The repair round stays. The issue says it exists to absorb malformed JSON. It also catches neutral-style violations, and that half is still worth having. Its prompts drop the JSON instructions and keep the style ones, and its tests now trigger on a style violation and on the length bound. Deleting it wholesale would have quietly removed style enforcement along with the JSON handling.
issue_trackerstays in the definition. It no longer selects an envelope field, it selects whether the prompt tells the model to file at all, and config still validates that it names a configured MCP server. Echo gets the filing instruction; Deep has no tracker and correctly gets none.Preserved behavior
The prompt now instructs the model to search for an open issue with the same title before filing, which keeps the exact-title reuse that the deleted
EnsureIssuedid in code. Labels stay forbidden, the redaction rules stay, andValidateGroundingstill rejects any claim of a completed action that no tool result in the turn confirms — which now covers the real filing path rather than a runtime side effect.The two evaluation cases keyed on
required_issue_kindnow key onrequired_tool: forgejo__create_issue, the same expectation through the new mechanism.Verification
go test ./...,sirens-echo-policy-check, andpre-commit run --all-filesgreen. Snapshots regenerated. Docs updated: FEATURES, config, observability, and tools all described the envelope.Sequencing
This assumes the guarded
create_issuegrant is reachable from the deployment. Per my earlier comment the tracked guardfile already hascan list issueand the/api/{tool}projection is a supported ward-mcp surface, so the deployment work is the separate task. Worth landing that first, or at least confirming it, since with the envelope gone a broken tool grant means knowledge gaps are silently not filed rather than filed-and-failed.Refs #102