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.
| ID | Section | Level | Role | Requirement | SDK symbol | Tests | Status |
|---|---|---|---|---|---|---|---|
OPS-2-01 | Ops §2 | MUST NOT | company | A Company MUST NOT return operations to a Personal Agent that doesn't list the extension. | CompanyService._api_callCompanyService._replyCompanyService._operation_route | test_company_refusals.py::test_an_agent_without_the_extension_gets_no_operationstest_conformance.py::test_python_agent_python_company_over_tlstest_fixtures.py::test_local_fixture_caseprotocol.extension-required-errorprotocol.extension-required-company | implemented |
OPS-3-01 | Ops §3 | MUST | company | Everything 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. | ProposedOperation | test_conformance.py::test_python_agent_python_company_over_tlsoperations.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-02 | Ops §3 | MUST | company | The Company MUST perform only what the confirmed revision describes. | CompanyService._confirm | test_conformance.py::test_python_agent_python_company_over_tlsoperations.confirm-succeededoperations.web-confirm-at-most-once | implemented |
OPS-3-03 | Ops §3 | MUST NOT | company | Proposing an operation doesn't perform it, and the Company MUST NOT start the action before it is confirmed. | CompanyService._propose | test_direct_and_api.py::test_signed_out_then_direct_sign_in_then_a_read_and_a_proposed_exchangetest_conformance.py::test_python_agent_python_company_over_tlsoperations.proposed-not-performed | implemented |
OPS-3.1-01 | Ops §3.1 | MUST NOT | company | Each revision is fixed once issued: the Company MUST NOT change the terms of a revision, and only the latest revision can be confirmed. | CompanyService.reviseCompanyService._confirm | test_company_refusals.py::test_a_revised_operation_is_terms_changed_and_never_performed_twicetest_conformance.py::test_python_agent_python_company_over_tlsoperations.terms-changed | implemented |
OPS-3.2-01 | Ops §3.2 | MUST | company | The Company MUST keep an operation readable at least until it is final. | CompanyService._operation_routeMemoryCompanyStore | test_company_store.py::test_a_company_restarted_over_its_store_continues_every_flowtest_company_store.py::test_the_memory_store_keeps_the_contracttest_conformance.py::test_python_agent_python_company_over_tlsoperations.readable-until-finaloperations.expiredoperations.not-found-indistinguishable | implemented |
OPS-4-01 | Ops §4 | SHOULD | company | If 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._proposeoperation_fromMcpClient.call_tool | test_mcp_and_web.py::test_a_signed_in_bearer_reads_and_proposes_through_mcp_the_same_operationtest_conformance.py::test_python_agent_python_company_over_tlsoperations.cross-channel-identityoperations.cross-channel-mcp | implemented |
OPS-4.1-01 | Ops §4.1 | SHOULD | company | The Company SHOULD say in its OpenAPI description which endpoints return operations. | ManzanitaApi.openapi | test_conformance.py::test_python_agent_python_company_over_tlsoperations.proposed-not-performed | implemented |
OPS-5.1-01 | Ops §5.1 | MUST | personal-agent | Before confirming, the Personal Agent MUST have the User's approval for the revision it confirms, in one of two ways: user or standing_permission. | approveOperationsClient._authorize | test_operations.py::test_the_user_approves_one_revision_and_it_is_confirmed_oncetest_operations.py::test_an_approval_of_another_revision_is_refused_locallytest_conformance.py::test_python_agent_python_company_over_tlsoperations.confirm-succeededoperations.terms-changed | implemented |
OPS-5.1-02 | Ops §5.1 | MUST | personal-agent | The 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. | UserApprovalterms_digest | test_operations.py::test_an_approval_of_another_revision_is_refused_locally | partial: 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-03 | Ops §5.1 | MUST | personal-agent | The 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. | approve | test_conformance.py::test_python_agent_python_company_over_tls | implemented |
OPS-5.1-04 | Ops §5.1 | MUST NOT | personal-agent | It MUST NOT treat text from the Company, such as a conversation message, as the User's approval. | approveOperationsClient.confirm | test_conformance.py::test_python_agent_python_company_over_tlsoperations.message-is-not-approval | implemented |
OPS-5.1-05 | Ops §5.1 | MUST | personal-agent | A standing permission MUST cover the Company, the account, the action, and every term of the revision, and still be in effect. | coversInMemoryStandingPermissionStore.reserve | test_operations.py::test_a_standing_permission_covers_every_term_and_spends_one_usetest_operations.py::test_a_standing_permission_that_does_not_cover_it_asks_the_usertest_conformance.py::test_python_agent_python_company_over_tlsoperations.user-approval-requiredoperations.standing-permission-within-boundsoperations.standing-permission-out-of-bounds | implemented |
OPS-6-01 | Ops §6 | SHOULD | company | While it is in_progress, the Company SHOULD include Retry-After, and the Personal Agent reads again after that time. | CompanyService._operation_responseConfirmOutcome.retry_after | test_conformance.py::test_python_agent_python_company_over_tlsoperations.in-progress-outcome-unknown | implemented |
OPS-6-02 | Ops §6 | MUST | company | The Company MUST perform each operation at most once, however many times and through whichever channels it is confirmed. | CompanyStoreCompanyService._confirm_operationCompanyService._operation_page | test_company_store.py::test_a_company_restarted_over_its_store_continues_every_flowtest_company_store.py::test_the_memory_store_keeps_the_contracttest_mcp_and_web.py::test_the_operation_confirmed_on_the_website_is_the_same_operation_oncetest_company_refusals.py::test_a_revised_operation_is_terms_changed_and_never_performed_twicetest_conformance.py::test_python_agent_python_company_over_tlsoperations.at-most-onceoperations.web-confirm-at-most-onceoperations.cancel-proposed | implemented |
OPS-6-03 | Ops §6 | MUST NOT | company | The 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. | OperationOutcomeUnknownCompanyService._confirm | test_conformance.py::test_python_agent_python_company_over_tlsoperations.in-progress-outcome-unknown | implemented |
OPS-6-04 | Ops §6 | MUST NOT | personal-agent | If 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.confirm | test_operations.py::test_a_lost_answer_is_read_back_by_the_same_id_never_assumed_failedtest_conformance.py::test_python_agent_python_company_over_tlsoperations.confirm-timeout-recovery | implemented |
OPS-6-05 | Ops §6 | MUST | company | In a final state, result.summary MUST describe every change that was made, including any made by an operation that failed or was cancelled partway. | OperationFailedCompanyService._confirm | test_conformance.py::test_python_agent_python_company_over_tlsoperations.confirm-succeededoperations.failed-partial-result | implemented |
Conformance case IDs name protocol/fixtures/conformance cases; see the conformance report for their outcome in every language pairing.