Guardian Contract Change
Overview
Use this skill when the server contract is the source of truth for the task. Update the server first, then move outward through every consumer that depends on the changed shape or semantics.
Read First
Read these sources before making edits:
AGENTS.mdcrates/server/proto/guardian.protocrates/server/src/api/http.rscrates/server/src/api/grpc.rspackages/guardian-client/src/server-types.tspackages/guardian-client/src/conversion.tscrates/client/src/client.rsreferences/contract-surfaces.md
If the change touches proposal payloads or account state shapes, also inspect both multisig SDKs and the example harnesses before editing.
Workflow
- Confirm the contract change.
Decide whether the change is:
- gRPC-only
- HTTP-only
- shared semantic behavior exposed through both transports
- Update the server contract source first.
- gRPC: edit
crates/server/proto/guardian.proto - HTTP JSON: edit
crates/server/src/api/http.rsand the backing service modules - shared behavior: edit service and domain modules before the transport adapters
- gRPC: edit
- Update Rust client compatibility.
Inspect and update:
- generated proto usage in
crates/client - request builders
- response mapping
- auth or signature handling if required by the new contract
- generated proto usage in
- Update TypeScript client compatibility.
Inspect and update:
packages/guardian-client/src/server-types.tspackages/guardian-client/src/conversion.tspackages/guardian-client/src/http.ts- tests for malformed or missing fields
- Propagate into multisig SDKs if the changed fields cross that boundary. Proposal metadata, state objects, ack fields, and status transitions are the common triggers.
- Update examples and docs when the change is visible to users or integrators.
Start with
examples/demo,examples/smoke-web, andexamples/web. Use the Documentation Impact Check inAGENTS.mdto pick the matchingspec/,docs/, SDK, and example docs. - Run the smallest meaningful validation set, then expand if high-risk.
Guardrails
- Do not change client adapters first and infer the new contract from them later.
- Do not add permissive parsing or silent fallback behavior unless the task explicitly requires it.
- Keep Rust and TypeScript client semantics aligned.
- Treat auth changes, proposal status changes, and JSON field optionality as high-risk.
- If the server contract changed, both
crates/clientandpackages/guardian-clientmust be considered in the same task.
Output Shape
Report:
- contract source changed
- dependent files updated
- transport surfaces affected
- client parity work completed
- upstream SDK or example fallout
- docs checked or updated
- tests and smoke checks run
- any intentionally skipped propagation with reason