What is broken
ASK pauses a step until an approver answers. The approver answers to the Observed Agent. The spec does not say how that answer gets back to the Guardian.
Where
specification/v0.1.0/ask-details.json, and §6 and §9 of docs/spec/instrument/specification.md
What the specification says, and what happens instead
ask-details.json requires approver, question and timeout_seconds, and offers options. So the Guardian can say:
- who should answer
- what is being asked
- which answers are acceptable
Nothing says how the answer comes back. There is no method for it, and no field to put it in. timeout_seconds and timeout_disposition only cover the case where nobody answers.
In practice the agent can send the step again, with the chosen option somewhere in the payload. The Guardian binds it to the ASK it raised and answers allow or deny. I tested this on top of the Go port (#87) and it works.
The spec gives no name to the field that carries the chosen option. So it only works between one agent and one Guardian.
#14 is the mirror of this on DEFER. There the Guardian side decides, and the agent is the one left without a way to learn the answer.
Impact on implementers
Two implementations that both support ASK cannot work together on it. Each picks its own name for the answer. An agent built against one Guardian will not resolve an ASK raised by another.
ASK is one of the five dispositions §6 makes mandatory, so this affects every conformant pair.
Current Priority Scope
This is deferred or out of scope and I am filing it to be tracked
What is broken
ASK pauses a step until an approver answers. The approver answers to the Observed Agent. The spec does not say how that answer gets back to the Guardian.
Where
specification/v0.1.0/ask-details.json, and §6 and §9 ofdocs/spec/instrument/specification.mdWhat the specification says, and what happens instead
ask-details.jsonrequiresapprover,questionandtimeout_seconds, and offersoptions. So the Guardian can say:Nothing says how the answer comes back. There is no method for it, and no field to put it in.
timeout_secondsandtimeout_dispositiononly cover the case where nobody answers.In practice the agent can send the step again, with the chosen option somewhere in the payload. The Guardian binds it to the ASK it raised and answers allow or deny. I tested this on top of the Go port (#87) and it works.
The spec gives no name to the field that carries the chosen option. So it only works between one agent and one Guardian.
#14 is the mirror of this on DEFER. There the Guardian side decides, and the agent is the one left without a way to learn the answer.
Impact on implementers
Two implementations that both support ASK cannot work together on it. Each picks its own name for the answer. An agent built against one Guardian will not resolve an ASK raised by another.
ASK is one of the five dispositions §6 makes mandatory, so this affects every conformant pair.
Current Priority Scope
This is deferred or out of scope and I am filing it to be tracked