Skip to main content

Operations coverage

The Operations extension, version 1. Upstream: personalagentprotocol.org/docs/extensions/operations.

18 entries: 16 implemented, 2 partial. Each row is one atomic statement of the upstream text, with the SDK symbols that implement it (Python; TypeScript mirrors them), the tests and shared conformance cases that show it, and its status.

IDSectionLevelRoleRequirementSDK symbolTestsStatus
OPS-2-01Ops §2MUST NOTcompanyA Company MUST NOT return operations to a Personal Agent that doesn't list the extension.CompanyService._api_call
CompanyService._reply
CompanyService._operation_route
test_company_refusals.py::test_an_agent_without_the_extension_gets_no_operations
test_conformance.py::test_python_agent_python_company_over_tls
test_fixtures.py::test_local_fixture_case
protocol.extension-required-error
protocol.extension-required-company
implemented
OPS-3-01Ops §3MUSTcompanyEverything that affects the action, such as the item, quantity, price, recipient, date, or a condition for cancelling, MUST be in the revision's summary, and in terms if present.ProposedOperationtest_conformance.py::test_python_agent_python_company_over_tls
operations.proposed-not-performed
partial: The service requires a summary and carries terms unchanged; whether the summary names every term is the proposing contribution's job.
OPS-3-02Ops §3MUSTcompanyThe Company MUST perform only what the confirmed revision describes.CompanyService._confirmtest_conformance.py::test_python_agent_python_company_over_tls
operations.confirm-succeeded
operations.web-confirm-at-most-once
implemented
OPS-3-03Ops §3MUST NOTcompanyProposing an operation doesn't perform it, and the Company MUST NOT start the action before it is confirmed.CompanyService._proposetest_direct_and_api.py::test_signed_out_then_direct_sign_in_then_a_read_and_a_proposed_exchange
test_conformance.py::test_python_agent_python_company_over_tls
operations.proposed-not-performed
implemented
OPS-3.1-01Ops §3.1MUST NOTcompanyEach revision is fixed once issued: the Company MUST NOT change the terms of a revision, and only the latest revision can be confirmed.CompanyService.revise
CompanyService._confirm
test_company_refusals.py::test_a_revised_operation_is_terms_changed_and_never_performed_twice
test_conformance.py::test_python_agent_python_company_over_tls
operations.terms-changed
implemented
OPS-3.2-01Ops §3.2MUSTcompanyThe Company MUST keep an operation readable at least until it is final.CompanyService._operation_route
MemoryCompanyStore
test_company_store.py::test_a_company_restarted_over_its_store_continues_every_flow
test_company_store.py::test_the_memory_store_keeps_the_contract
test_conformance.py::test_python_agent_python_company_over_tls
operations.readable-until-final
operations.expired
operations.not-found-indistinguishable
implemented
OPS-4-01Ops §4SHOULDcompanyIf the same action comes up again through another channel, for example in an API call after a conversation proposed it, the Company SHOULD return the existing operation instead of proposing a new one.CompanyService._propose
operation_from
McpClient.call_tool
test_mcp_and_web.py::test_a_signed_in_bearer_reads_and_proposes_through_mcp_the_same_operation
test_conformance.py::test_python_agent_python_company_over_tls
operations.cross-channel-identity
operations.cross-channel-mcp
implemented
OPS-4.1-01Ops §4.1SHOULDcompanyThe Company SHOULD say in its OpenAPI description which endpoints return operations.ManzanitaApi.openapitest_conformance.py::test_python_agent_python_company_over_tls
operations.proposed-not-performed
implemented
OPS-5.1-01Ops §5.1MUSTpersonal-agentBefore confirming, the Personal Agent MUST have the User's approval for the revision it confirms, in one of two ways: user or standing_permission.approve
OperationsClient._authorize
test_operations.py::test_the_user_approves_one_revision_and_it_is_confirmed_once
test_operations.py::test_an_approval_of_another_revision_is_refused_locally
test_conformance.py::test_python_agent_python_company_over_tls
operations.confirm-succeeded
operations.terms-changed
implemented
OPS-5.1-02Ops §5.1MUSTpersonal-agentThe Personal Agent MUST show the User the Company's name and the revision's summary, and MUST take the User's answer through its own interface.UserApproval
terms_digest
test_operations.py::test_an_approval_of_another_revision_is_refused_locallypartial: An approval is bound to the digest of the summary and terms the host showed; the company's name is not part of it, and showing is the host's.
OPS-5.1-03Ops §5.1MUSTpersonal-agentThe Personal Agent MUST show the User the Company's name and the revision's summary, and MUST take the User's answer through its own interface.approvetest_conformance.py::test_python_agent_python_company_over_tlsimplemented
OPS-5.1-04Ops §5.1MUST NOTpersonal-agentIt MUST NOT treat text from the Company, such as a conversation message, as the User's approval.approve
OperationsClient.confirm
test_conformance.py::test_python_agent_python_company_over_tls
operations.message-is-not-approval
implemented
OPS-5.1-05Ops §5.1MUSTpersonal-agentA standing permission MUST cover the Company, the account, the action, and every term of the revision, and still be in effect.covers
InMemoryStandingPermissionStore.reserve
test_operations.py::test_a_standing_permission_covers_every_term_and_spends_one_use
test_operations.py::test_a_standing_permission_that_does_not_cover_it_asks_the_user
test_conformance.py::test_python_agent_python_company_over_tls
operations.user-approval-required
operations.standing-permission-within-bounds
operations.standing-permission-out-of-bounds
implemented
OPS-6-01Ops §6SHOULDcompanyWhile it is in_progress, the Company SHOULD include Retry-After, and the Personal Agent reads again after that time.CompanyService._operation_response
ConfirmOutcome.retry_after
test_conformance.py::test_python_agent_python_company_over_tls
operations.in-progress-outcome-unknown
implemented
OPS-6-02Ops §6MUSTcompanyThe Company MUST perform each operation at most once, however many times and through whichever channels it is confirmed.CompanyStore
CompanyService._confirm_operation
CompanyService._operation_page
test_company_store.py::test_a_company_restarted_over_its_store_continues_every_flow
test_company_store.py::test_the_memory_store_keeps_the_contract
test_mcp_and_web.py::test_the_operation_confirmed_on_the_website_is_the_same_operation_once
test_company_refusals.py::test_a_revised_operation_is_terms_changed_and_never_performed_twice
test_conformance.py::test_python_agent_python_company_over_tls
operations.at-most-once
operations.web-confirm-at-most-once
operations.cancel-proposed
implemented
OPS-6-03Ops §6MUST NOTcompanyThe Company MUST NOT report failed while it doesn't know whether the action took effect, for example after a timeout in one of its own systems.OperationOutcomeUnknown
CompanyService._confirm
test_conformance.py::test_python_agent_python_company_over_tls
operations.in-progress-outcome-unknown
implemented
OPS-6-04Ops §6MUST NOTpersonal-agentIf a confirm request fails or times out, the Personal Agent retries it or reads the operation, with the same operation ID. It MUST NOT ask for a new proposal of the same action until the operation is final.OperationsClient.confirmtest_operations.py::test_a_lost_answer_is_read_back_by_the_same_id_never_assumed_failed
test_conformance.py::test_python_agent_python_company_over_tls
operations.confirm-timeout-recovery
implemented
OPS-6-05Ops §6MUSTcompanyIn a final state, result.summary MUST describe every change that was made, including any made by an operation that failed or was cancelled partway.OperationFailed
CompanyService._confirm
test_conformance.py::test_python_agent_python_company_over_tls
operations.confirm-succeeded
operations.failed-partial-result
implemented

Conformance case IDs name protocol/fixtures/conformance cases; see the conformance report for their outcome in every language pairing.