Rename the two machine labels that nothing stores or publishes

ddfdccb42c61 · AtlantisPleb · · parent ed42e008ca13

Rename the two machine labels that nothing stores or publishes

Two names sat on the movable side of the line and had not moved.

`OpenAgentsWeb.RouteAuthority` declared the scope `machine:status` for
`GET /controller/status` while its immediate siblings, the two
`/controller/pairings` routes, declared `computer:pairing:create` and
`computer:pairing:claim`. It is now `computer:status`, and the principal reads
"active paired computer bearer". No token carries the string and no pipeline
authorizes against it: the only consumer is
`OpenAgentsWeb.ContributionContract.site_access/2`, which publishes a scope
only for paths the contribution contract lists, and `/controller/status` is
not one. Rendering that document yields two `machine` matches, both the
machine-readable representation URL and the phrase "on the same machine", and
no scope. `ApiRouteAuthority`, which feeds `GET /api/v3`, has no `machine`
string at all.

The four computer tools declared the `policy_facets` consent
`machine_pairing`. It is now `computer_pairing`. Unlike the neighbouring
`residency`, which reaches `artifact.facets` and so the `artifact_digest` and
`registry_digest` a `module_route_receipts` row stores, `policy_facets` is
only shape-checked — `OpenAgents.Tools.Registry` bounds its size and nothing
else reads it. It is not persisted, not digested, and not published, so the
name was free.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DTmy4SEXrHXouw5sZbs3f4
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified lib/openagents_web/route_authority.ex
  • modified test/openagents_web/route_authority_test.exs

Diff

2 files changed, +7 -2

lib/openagents_web/route_authority.ex modified +6 -1

@@ -256,8 +256,13 @@ defmodule OpenAgentsWeb.RouteAuthority do

256 256
  defp policy(%{path: "/controller/pairings/:id"}),
257 257
    do: declaration(:computer, "expiring one-time poll secret", "computer:pairing:claim", true)
258 258
259
  # `computer:status`, not `machine:status`. This label is an in-repository
260
  # inventory string: no token carries it, no pipeline authorizes against it,
261
  # and `/controller/status` appears in no published contract, so it is on the
262
  # movable side of the line CANON-002 draws. Its siblings above already say
263
  # computer.
259 264
  defp policy(%{path: "/controller/status", verb: :get}),
260
    do: declaration(:computer, "active paired-machine bearer", "machine:status", false)
265
    do: declaration(:computer, "active paired computer bearer", "computer:status", false)
261 266
262 267
  defp policy(%{path: "/api/inference/proxy"}),
263 268
    do: declaration(:internal_service, "scoped inference grant", "inference:invoke", true)
test/openagents_web/route_authority_test.exs modified +1 -1

@@ -234,7 +234,7 @@ defmodule OpenAgentsWeb.RouteAuthorityTest do

234 234
    assert route!(:get, "/admin/scv/accounts").scope == "scv:account:connect"
235 235
    assert route!(:post, "/controller/pairings").class == :computer
236 236
    assert route!(:get, "/controller/pairings/:id").scope == "computer:pairing:claim"
237
    assert route!(:get, "/controller/status").scope == "machine:status"
237
    assert route!(:get, "/controller/status").scope == "computer:status"
238 238
    assert route!(:post, "/api/inference/proxy").class == :internal_service
239 239
    assert Enum.find(RouteAuthority.socket_inventory(), &(&1.path == "/controller/socket"))
240 240

This page updates live while a promote is in flight · changelog