Skip to content

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

Open

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

  1. added
    scope:in-focusFeeds the ninety-day committed outcome. Maintainers only
    status:acceptedIn the backlog. Maintainers only
    and removed
    status:needs-triageNot yet triaged. Applied by the issue forms
    on Oct 5, 2026
  2. moved this from Needs triage to Accepted in ACS Project Trackeron Oct 6, 2026
  3. President commented on Oct 20, 2026

    @President

    JFYI - #229 fixes this (D5 in #184).

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

    scope:in-focusFeeds the ninety-day committed outcome. Maintainers onlystatus:acceptedIn the backlog. Maintainers onlytype:bugSomething isn't working

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions