mirror of
https://scm.tikali.ai/tikali/applications/monky/monky-deployd.git
synced 2026-09-18 05:36:15 +00:00
docs(protocol): the AppRole divergence is resolved history; the lease example and fake follow tenancy's AgentLeaseOut
DD-0524 — PROTOCOL.md §Divergences bullets 1-2 said monky-tenancy `main` "still implements the AppRole lease and install kit" and that "the kit's generated config uses tenancy.base_url". Both were false when the page was published: tenancy !17 (288df791, merged 07:48Z) shipped AgentLeaseOut{env_id, login_jwt, ttl_s, mount, role, addr}, the ES256 grant signer and the JWKS sixteen minutes before v0.1.0 was tagged, and !22 (61bd0281) made the kit run install.sh with flags instead of writing a config. The two bullets are now dated "Resolved" notes; bullets 3-4 (report `detail`, X-Bundle-Sha) stand. DD-0526 — the lease example sent `reason` and received a nested `vault{}`; tenancy's AgentLease is `{env_id}` and AgentLeaseOut carries `addr` at the top level (no vault object). The example now shows tenancy's shapes (with a note that the agent still sends `reason` and tenancy ignores unknown fields), the checkin example gains `auth_mount`/`auth_role` so it is the full AgentVaultOut, tests/fakes.py emits `addr` the way tenancy does, and tenancy.py's docstring and lease() read `addr` first (the `vault{}` fallback is kept so an older fake or tenancy still leases). Verified against monky-tenancy app/schemas_backends.py at 1fd51454 (AgentLease 296-297, AgentLeaseOut 300-309, AgentVaultOut 278-283). Gates (local, py3.12): ruff format --check, ruff check, pytest 50 passed, bash -n packaging/install.sh. Doc-Drift: DD-0524 fixed Doc-Drift: DD-0526 fixed Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AW3QqEpwLV69KHn24Re45Q
This commit is contained in:
@@ -4,7 +4,7 @@ Bearer = the agent's OpenBao token (from the `jwt-tenancy` login). Tenancy pins
|
||||
the token's `meta.env_id` (403 AGENT_ENV_MISMATCH -> exit 78, never retried) and refuses a token
|
||||
whose deploy grant was superseded (401 AGENT_UNAUTHENTICATED -> re-bootstrap or re-run the kit).
|
||||
|
||||
Lease shape of record (Gate 1 v2, 2026-09-05): `{login_jwt, ttl_s, mount, role, vault}`. An
|
||||
Lease shape of record (Gate 1 v2, 2026-09-05): `{env_id, login_jwt, ttl_s, mount, role, addr}`. An
|
||||
AppRole-era body (`wrapping_token`, `role_id`) is refused loudly — there is nothing to unwrap."""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -158,13 +158,15 @@ class TenancyClient:
|
||||
"(ADR-0028 amendment 2026-09-05)",
|
||||
)
|
||||
raise TenancyError(200, "LEASE_SHAPE", "lease response carries no login_jwt")
|
||||
# shape of record (tenancy AgentLeaseOut): `addr` is top-level; a pre-0.1.x `vault{}` object
|
||||
# is still read as a fallback so an older fake or tenancy does not break the lease
|
||||
v = js.get("vault") or {}
|
||||
return Lease(
|
||||
login_jwt=str(js["login_jwt"]),
|
||||
ttl_s=int(js.get("ttl_s") or 3600),
|
||||
mount=str(js.get("mount") or "jwt-tenancy"),
|
||||
role=str(js.get("role") or "see-env"),
|
||||
vault=Vault(addr=v.get("addr"), mount=v.get("mount"), prefix=v.get("prefix")),
|
||||
vault=Vault(addr=js.get("addr") or v.get("addr"), mount=v.get("mount"), prefix=v.get("prefix")),
|
||||
)
|
||||
|
||||
def report(
|
||||
|
||||
Reference in New Issue
Block a user