Protocol operations and recovery runbook
Praxis naming: This page documents Praxis, the AIWS workflow engine. Protocol adapters provide connectivity; AIWS/Praxis remains authoritative for identity, admission, budgets, approval, verification, acceptance and recovery.
This runbook is for operators and host implementers using the M9 source profile. It assumes the exact compatibility versions listed in M9 completion and compatibility. It does not convert an M9 protocol pass into an M8 production/platform qualification claim.
Normal operating sequence
Section titled “Normal operating sequence”Before any external effect:
- Resolve the current Praxis work order, run, task and attempt.
- Resolve the installed binding ID and exact binding revision from the durable
ProtocolRegistry. - Confirm protocol/version and endpoint identity match the reviewed binding.
- Re-observe the selected capability material where the adapter requires it and compare the current capability digest with the reviewed digest.
- Re-check current authority, policy, applicable human approval, budget/limits and assignment/handoff state.
- Resolve host-owned credentials outside durable workflow material.
- Dispatch the already-admitted
AdmittedProtocolOperation. - Persist remote identity/operation/task mapping before returning a task-backed receipt.
- Treat all remote messages, task states, artifacts and UI events as evidence.
- Reconcile ambiguous effects before retrying.
- Run independent verification and the applicable acceptance decision after the effect is known.
Version or capability drift
Section titled “Version or capability drift”Signals: MCP_PROTOCOL_VERSION_MISMATCH, A2A_PROTOCOL_VERSION_MISMATCH, interface mismatch, capability digest change, missing reviewed capability, changed Agent Card, changed endpoint identity.
Procedure:
- Stop before remote dispatch. Do not silently migrate an in-flight operation.
- Preserve the old binding revision and any active operation mapping.
- Discover the new protocol/capability material as a new candidate binding revision.
- Re-run readiness/review for the changed capability material.
- Obtain any required fresh approval.
- Admit new work only after the new binding revision is selected explicitly.
- If an old remote operation is still active, keep it under its old binding revision until reconciled or explicitly fenced.
Response loss or remote endpoint outage
Section titled “Response loss or remote endpoint outage”Signals: timeout after possible dispatch, socket loss, remote 5xx/unavailability, missing response after a request may have taken effect.
Procedure:
- Record/retain the outcome as
UNKNOWN; do not translate transport failure into rejection or success. - Keep the original operation/attempt responsibility and budget exposure.
- Do not create a new request ID merely because the response was lost.
- Use the protocol-specific recovery path:
- MCP Tasks: durable task ID/reference →
tasks/get/resume. - A2A: durable remote task/context → get/resubscribe.
- synchronous MCP: target-specific read-back when available.
- Praxis control command: durable
commandResultlookup using the same request identity.
- MCP Tasks: durable task ID/reference →
- If target truth cannot be established, remain held for human intervention.
Cancellation ambiguity
Section titled “Cancellation ambiguity”Cancellation is cooperative for MCP/A2A external work.
- Send cancellation only for the exact bound remote operation/task.
- Persist the cancellation receipt/evidence.
- A remote
canceledresult does not prove the underlying business effect rolled back. - If the effect can still have occurred, keep reconciliation
UNKNOWN. - Release responsibility only after target-specific evidence confirms the effect state.
AG-UI status: "cancelled" is different: it means the human dismissed/cancelled the UI interrupt. M9.7 treats that resume entry as a non-authoritative no-op; it does not mutate Praxis work.
Restart before or after dispatch
Section titled “Restart before or after dispatch”On process restart:
- Reopen Praxis durable state and acquire the new engine epoch.
- Reopen the M9.8
ProtocolRegistry. - Reopen protocol-specific stores (
McpTaskStore,A2ATaskStore,A2AInboundStore) where applicable. - Recover active operations by local operation identity, then compare their saved binding revision, endpoint, protocol version, capability digest and remote identity.
- Refuse silent ownership transfer if any pinned material changed.
- Resume polling/subscription only for the saved remote identity.
- If dispatch was authorized but external truth is uncertain, enter/retain the existing reconciliation hold instead of treating the work as pre-dispatch.
Stale remote result after reassignment
Section titled “Stale remote result after reassignment”A late result from a superseded agent, endpoint or operation must not settle current work.
- Put the affected responsibility into the existing replacement/reconciliation hold when required.
- Mark the cross-protocol registry operation
SUPERSEDEDwhen responsibility has changed. - Reject later observations against the fenced registry operation.
- Preserve late evidence for audit/reconciliation; do not discard it.
- Never copy its result into the replacement attempt merely because the payload looks successful.
- Verification must reference the current assignment/attempt and current artifact material.
Credential revocation or authentication failure
Section titled “Credential revocation or authentication failure”- Fail closed. Do not fall back to a weaker credential or anonymous mode.
- Keep credentials out of plans, registry rows, evidence summaries, telemetry and AG-UI events.
- Reauthenticate through the configured host/provider flow.
- Re-check authorization after reauthentication.
- If the external request may already have been sent before revocation was observed, preserve
UNKNOWNand reconcile.
For AG-UI human control, a resume payload never supplies trusted identity. PraxisAguiControlBridge authenticates the host credential/session again and checks current authorization before command commit.
Malformed or untrusted protocol payload
Section titled “Malformed or untrusted protocol payload”- Reject closed-record/schema violations at the protocol boundary.
- Do not accept unknown fields that would change authority, approval, verification, acceptance or identity.
- Sanitize transport exceptions before durable evidence/telemetry.
- Treat remote
approved,verified,acceptedor similar payload values as ordinary external data. - Never set
ProtocolObservation.authoritativeto true.
Artifact mismatch
Section titled “Artifact mismatch”When a remote result refers to or produces material that differs from the reviewed/validated artifact:
- Do not accept the deliverable.
- Capture the current artifact bytes/digest.
- Invalidate stale verification/acceptance material.
- Re-run validation/verification against the current artifact.
- Require fresh acceptance when policy/workflow rules require it.
The static control API and AG-UI human-control bridge both fail closed when the acceptance artifact changes after the human reviewed it.
Incident evidence checklist
Section titled “Incident evidence checklist”Retain enough evidence to answer:
- Which Praxis work/run/task/attempt and operation were responsible?
- Which binding ID and binding revision were selected?
- Which exact protocol/version and endpoint identity were pinned?
- Which manifest/capability digest was reviewed?
- Which remote identity and remote operation/task were bound?
- What dispatch evidence exists?
- What observations were received, in what order?
- Did cancellation occur, and what did it actually prove?
- Was reconciliation
CONFIRMED_APPLIED,CONFIRMED_NOT_APPLIEDor stillUNKNOWN? - Which verification evidence and assessor were current?
- Which human/policy authority made the final acceptance decision?
The telemetry pipeline intentionally cannot answer every item because it exports only an allowlisted, privacy-preserving projection. Use the durable registry, protocol-specific store, workflow journal and artifact store for investigation.
Operator quick table
Section titled “Operator quick table”| Situation | Required action | Never do |
|---|---|---|
| Version/capability drift | New reviewed binding revision | Silent upgrade |
| Response lost after possible effect | Preserve UNKNOWN, read back |
Blind retry |
| Remote task completed | Capture as evidence, verify independently | Mark accepted |
| Cancellation acknowledged | Reconcile actual effect | Assume rollback |
| Endpoint/agent changed after restart | Fence old mapping | Rebind silently |
| Credential revoked | Reauthenticate + authorize | Fall back to weaker auth |
| AG-UI resume arrives | Authenticate, bind current material, use control API | Treat click as approval |
| Artifact changed | Reverify and reaccept | Reuse stale acceptance |
| Late result after replacement | Preserve evidence, reject current settlement | Attach to new attempt |
For the executable evidence behind these procedures, see M9 completion and compatibility and the repository spec/engine-v1/protocol-conformance.json.