The harness labels every issue it files, since no other layer can #453

Closed
opened 2026-08-13 13:38:47 +00:00 by coilyco-ops · 0 comments
Member

Slice of #208, Delphi's amendment recording Kai's decision that every Echo-filed issue carries the SANDBOXED label.

Why the harness and not the guard

Three other layers were tried on the issue and each fails in a way worth recording:

  • Asking the model is a prompt-level instruction guarding against attacker-influenced input. Wrong layer for a guarantee, decided repeatedly in this backlog.
  • A guardfile fail-when does not prevent. It reports after the call, so the unlabelled issue exists and the caller is told the call failed with nothing retrying. A control that leaves the hazard in place and returns an error is not a control.
  • A guardfile shadow could inject the field, but that construct is on the CLI surface. No .mcp.kdl in this portfolio has an action block; they carry permission grants only.

The harness is what remains and is the right layer: every tool call passes through one function with its arguments in hand, before dispatch.

Atomic, and therefore two halves

The label goes into the create-issue call rather than a second call afterwards, so no window exists where the issue is unlabelled. That requires the deployment to grant the labels field on create-issue, or the call is rejected for carrying a field the guard does not list.

Both halves are needed and neither works alone.

Safe by default

No configured id applies nothing. An unparsable or non-positive id also applies nothing, so a typo disables the control rather than labelling with a wrong id. The label is set rather than merged, because the model does not supply the field and a value it invented is not a reason to keep one.

Acceptance

  • No configured label leaves every call byte-identical.
  • Only the definition's tracker, and only the filing verb. Comments and reads untouched.
  • The caller's arguments are copied, not mutated, so a retry sees what the model wrote.
**Slice of** https://forgejo.coilysiren.me/coilyco-gaming/sirens-echo/issues/208, Delphi's amendment recording Kai's decision that every Echo-filed issue carries the SANDBOXED label. ## Why the harness and not the guard Three other layers were tried on the issue and each fails in a way worth recording: - **Asking the model** is a prompt-level instruction guarding against attacker-influenced input. Wrong layer for a guarantee, decided repeatedly in this backlog. - **A guardfile `fail-when`** does not prevent. It reports *after* the call, so the unlabelled issue exists and the caller is told the call failed with nothing retrying. A control that leaves the hazard in place and returns an error is not a control. - **A guardfile shadow** could inject the field, but that construct is on the CLI surface. No `.mcp.kdl` in this portfolio has an `action` block; they carry permission grants only. The harness is what remains and is the right layer: every tool call passes through one function with its arguments in hand, before dispatch. ## Atomic, and therefore two halves The label goes into the create-issue call rather than a second call afterwards, so no window exists where the issue is unlabelled. That requires the deployment to grant the `labels` field on create-issue, or the call is rejected for carrying a field the guard does not list. **Both halves are needed and neither works alone.** ## Safe by default No configured id applies nothing. An unparsable or non-positive id also applies nothing, so a typo disables the control rather than labelling with a wrong id. The label is set rather than merged, because the model does not supply the field and a value it invented is not a reason to keep one. ## Acceptance - No configured label leaves every call byte-identical. - Only the definition's tracker, and only the filing verb. Comments and reads untouched. - The caller's arguments are copied, not mutated, so a retry sees what the model wrote.
Sign in to join this conversation.
No milestone
No project
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#453
No description provided.