Skip to content

[Bug] Reference Guardian does not implement system/ping #129

Description

@shivang-sec

What is broken

The reference Guardian does not implement the mandatory system/ping liveness method defined by ACS v0.1.0 §13. A valid system/ping request is currently treated as an undispatched method and returns -32011 instead of the required decision: "allow" response.

Where

reference-implementations/agt/packages/guardian/src/server.ts

What the specification says, and what happens instead

Specification requirement

ACS v0.1.0 §13 defines system/ping as the system liveness method.

The specification requires a Guardian to:

  • Always return decision: "allow" for system/ping.
  • Do so regardless of policy, signature, or session state.
  • Not require a signature for system/ping.
  • Not write the ping into SessionContext.
  • Treat ping timeout/connection failure as a transport-level signal rather than an ACS enforcement event.

The specification also states that system/ping MUST NOT return an ACS-specific error.

Actual behavior

I reproduced this against the running reference Guardian using a valid system/ping envelope:

curl -sS http://localhost:8787/acs \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"system/ping",
    "params":{
      "acs_version":"0.1.0",
      "request_id":"11111111-1111-4111-8111-111111111111",
      "timestamp":"2026-09-15T12:00:00.000Z",
      "metadata":{
        "agent_id":"test-agent",
        "session_id":"22222222-2222-4222-8222-222222222222"
      },
      "payload":{}
    }
  }'

The Guardian returned:

{
  "jsonrpc":"2.0",
  "id":1,
  "error":{
    "code":-32011,
    "message":"method not dispatched by this Guardian: system/ping",
    "data":{
      "method":"system/ping"
    }
  }
}

Expected behavior

The Guardian should recognize system/ping and return a successful response containing an ACS final result with:

{
  "decision": "allow"
}

It should not return the Guardian's METHOD_NOT_DISPATCHED_CODE (-32011).

Cross-check

The Python Guardian implementation in PR #22 implements system/ping according to the specification and returns the required allow response.

Impact on implementers

A client using system/ping for Guardian liveness detection cannot use the reference Guardian's implementation as specified.

This affects interoperability and liveness detection rather than a policy decision itself. A conformant client may send system/ping to determine whether the Guardian is available, but the reference implementation currently reports the method as unsupported.

Because §13 defines system/ping as the mandatory liveness method and explicitly requires it to always return allow, clients cannot use the reference Guardian for the specified liveness behavior.

The impact is primarily on ACS conformance and interoperability of the reference implementation.

Current Priority Scope

Feeds the runnable Guardian reference implementation

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:needs-triageNot yet triaged. Applied by the issue formstype:bugSomething isn't working

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions