patchr 0.1.1__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. {patchr-0.1.1/patchr.egg-info → patchr-0.1.2}/PKG-INFO +5 -2
  2. {patchr-0.1.1 → patchr-0.1.2}/README.md +3 -0
  3. {patchr-0.1.1 → patchr-0.1.2/patchr.egg-info}/PKG-INFO +5 -2
  4. {patchr-0.1.1 → patchr-0.1.2}/pyproject.toml +2 -2
  5. {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_publish_artifacts.py +5 -1
  6. {patchr-0.1.1 → patchr-0.1.2}/tests/test_web_homepage.py +13 -0
  7. {patchr-0.1.1 → patchr-0.1.2}/LICENSE +0 -0
  8. {patchr-0.1.1 → patchr-0.1.2}/apps/__init__.py +0 -0
  9. {patchr-0.1.1 → patchr-0.1.2}/apps/api/__init__.py +0 -0
  10. {patchr-0.1.1 → patchr-0.1.2}/apps/api/main.py +0 -0
  11. {patchr-0.1.1 → patchr-0.1.2}/apps/benchmarks/__init__.py +0 -0
  12. {patchr-0.1.1 → patchr-0.1.2}/apps/benchmarks/main.py +0 -0
  13. {patchr-0.1.1 → patchr-0.1.2}/apps/sandbox/__init__.py +0 -0
  14. {patchr-0.1.1 → patchr-0.1.2}/apps/sandbox/main.py +0 -0
  15. {patchr-0.1.1 → patchr-0.1.2}/apps/worker/__init__.py +0 -0
  16. {patchr-0.1.1 → patchr-0.1.2}/apps/worker/main.py +0 -0
  17. {patchr-0.1.1 → patchr-0.1.2}/apps/worker/verify.py +0 -0
  18. {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/SOURCES.txt +0 -0
  19. {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/dependency_links.txt +0 -0
  20. {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/entry_points.txt +0 -0
  21. {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/requires.txt +0 -0
  22. {patchr-0.1.1 → patchr-0.1.2}/patchr.egg-info/top_level.txt +0 -0
  23. {patchr-0.1.1 → patchr-0.1.2}/setup.cfg +0 -0
  24. {patchr-0.1.1 → patchr-0.1.2}/src/patchr/__init__.py +0 -0
  25. {patchr-0.1.1 → patchr-0.1.2}/src/patchr/sdk/__init__.py +0 -0
  26. {patchr-0.1.1 → patchr-0.1.2}/src/patchr/sdk/client.py +0 -0
  27. {patchr-0.1.1 → patchr-0.1.2}/src/picux/__init__.py +0 -0
  28. {patchr-0.1.1 → patchr-0.1.2}/src/picux/agents/__init__.py +0 -0
  29. {patchr-0.1.1 → patchr-0.1.2}/src/picux/agents/registry.py +0 -0
  30. {patchr-0.1.1 → patchr-0.1.2}/src/picux/api/__init__.py +0 -0
  31. {patchr-0.1.1 → patchr-0.1.2}/src/picux/api/service.py +0 -0
  32. {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/__init__.py +0 -0
  33. {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/activity.py +0 -0
  34. {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/observability.py +0 -0
  35. {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/verification/__init__.py +0 -0
  36. {patchr-0.1.1 → patchr-0.1.2}/src/picux/audit/verification/ledger.py +0 -0
  37. {patchr-0.1.1 → patchr-0.1.2}/src/picux/benchmarks/__init__.py +0 -0
  38. {patchr-0.1.1 → patchr-0.1.2}/src/picux/benchmarks/local.py +0 -0
  39. {patchr-0.1.1 → patchr-0.1.2}/src/picux/config.py +0 -0
  40. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/__init__.py +0 -0
  41. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/handshake.py +0 -0
  42. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/integration.py +0 -0
  43. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/openapi.py +0 -0
  44. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/protocol_map.py +0 -0
  45. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/routes.py +0 -0
  46. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/schema_catalog.py +0 -0
  47. {patchr-0.1.1 → patchr-0.1.2}/src/picux/contracts/schemas.py +0 -0
  48. {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/__init__.py +0 -0
  49. {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/models.py +0 -0
  50. {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/router.py +0 -0
  51. {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/runtime.py +0 -0
  52. {patchr-0.1.1 → patchr-0.1.2}/src/picux/core/state_machine.py +0 -0
  53. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/__init__.py +0 -0
  54. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/HostRun.py +0 -0
  55. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/__init__.py +0 -0
  56. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/bridge/engine.py +0 -0
  57. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/__init__.py +0 -0
  58. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/engine.py +0 -0
  59. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/hunt/models.py +0 -0
  60. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/__init__.py +0 -0
  61. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/adapters.py +0 -0
  62. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/engine.py +0 -0
  63. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/pay/models.py +0 -0
  64. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/proxy/__init__.py +0 -0
  65. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/proxy/engine.py +0 -0
  66. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/resolve/__init__.py +0 -0
  67. {patchr-0.1.1 → patchr-0.1.2}/src/picux/domains/resolve/engine.py +0 -0
  68. {patchr-0.1.1 → patchr-0.1.2}/src/picux/orchestrator/__init__.py +0 -0
  69. {patchr-0.1.1 → patchr-0.1.2}/src/picux/orchestrator/engine.py +0 -0
  70. {patchr-0.1.1 → patchr-0.1.2}/src/picux/portals/__init__.py +0 -0
  71. {patchr-0.1.1 → patchr-0.1.2}/src/picux/portals/templates.py +0 -0
  72. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/__init__.py +0 -0
  73. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/__init__.py +0 -0
  74. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/client.py +0 -0
  75. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/a2a/envelope.py +0 -0
  76. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/__init__.py +0 -0
  77. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/client.py +0 -0
  78. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/contract.py +0 -0
  79. {patchr-0.1.1 → patchr-0.1.2}/src/picux/protocols/mcp/server.py +0 -0
  80. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/__init__.py +0 -0
  81. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/midnight_arbitrage.py +0 -0
  82. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sandbox/models.py +0 -0
  83. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/__init__.py +0 -0
  84. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/client.py +0 -0
  85. {patchr-0.1.1 → patchr-0.1.2}/src/picux/sdk/external.py +0 -0
  86. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/__init__.py +0 -0
  87. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/auth.py +0 -0
  88. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/config_validator.py +0 -0
  89. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/policy.py +0 -0
  90. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/ratelimit.py +0 -0
  91. {patchr-0.1.1 → patchr-0.1.2}/src/picux/security/secrets.py +0 -0
  92. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/__init__.py +0 -0
  93. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/__init__.py +0 -0
  94. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/__init__.py +0 -0
  95. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/reddit.py +0 -0
  96. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/shopify.py +0 -0
  97. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/adapters/web.py +0 -0
  98. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/disambiguation.py +0 -0
  99. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/intake.py +0 -0
  100. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/models.py +0 -0
  101. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/rules.py +0 -0
  102. {patchr-0.1.1 → patchr-0.1.2}/src/picux/signals/community/scoring.py +0 -0
  103. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/__init__.py +0 -0
  104. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/agents.py +0 -0
  105. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/cases.py +0 -0
  106. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/channels.py +0 -0
  107. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/connectors.py +0 -0
  108. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/envelopes.py +0 -0
  109. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/escrows.py +0 -0
  110. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/events.py +0 -0
  111. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/keyspace.py +0 -0
  112. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/mandates.py +0 -0
  113. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/portals.py +0 -0
  114. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/postgres.py +0 -0
  115. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/providers.py +0 -0
  116. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/proxy.py +0 -0
  117. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/receipts.py +0 -0
  118. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/signals.py +0 -0
  119. {patchr-0.1.1 → patchr-0.1.2}/src/picux/storage/tasks.py +0 -0
  120. {patchr-0.1.1 → patchr-0.1.2}/src/picux/tools/__init__.py +0 -0
  121. {patchr-0.1.1 → patchr-0.1.2}/src/picux/tools/shared.py +0 -0
  122. {patchr-0.1.1 → patchr-0.1.2}/src/picux/verification/__init__.py +0 -0
  123. {patchr-0.1.1 → patchr-0.1.2}/src/picux/verification/rollout.py +0 -0
  124. {patchr-0.1.1 → patchr-0.1.2}/src/picux/workflows/__init__.py +0 -0
  125. {patchr-0.1.1 → patchr-0.1.2}/src/picux/workflows/templates.py +0 -0
  126. {patchr-0.1.1 → patchr-0.1.2}/tests/test_a2a_envelope_durability.py +0 -0
  127. {patchr-0.1.1 → patchr-0.1.2}/tests/test_a2a_protocol.py +0 -0
  128. {patchr-0.1.1 → patchr-0.1.2}/tests/test_agent_registry.py +0 -0
  129. {patchr-0.1.1 → patchr-0.1.2}/tests/test_audit_verification.py +0 -0
  130. {patchr-0.1.1 → patchr-0.1.2}/tests/test_benchmarks.py +0 -0
  131. {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_connectors.py +0 -0
  132. {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_preflight.py +0 -0
  133. {patchr-0.1.1 → patchr-0.1.2}/tests/test_bridge_ready_connectors.py +0 -0
  134. {patchr-0.1.1 → patchr-0.1.2}/tests/test_brief_contract_parity.py +0 -0
  135. {patchr-0.1.1 → patchr-0.1.2}/tests/test_case_channel_portal_workflows.py +0 -0
  136. {patchr-0.1.1 → patchr-0.1.2}/tests/test_community_signal_harness.py +0 -0
  137. {patchr-0.1.1 → patchr-0.1.2}/tests/test_escrow_durability.py +0 -0
  138. {patchr-0.1.1 → patchr-0.1.2}/tests/test_fastapi_contract_parity.py +0 -0
  139. {patchr-0.1.1 → patchr-0.1.2}/tests/test_hosted_adapters.py +0 -0
  140. {patchr-0.1.1 → patchr-0.1.2}/tests/test_hunt_domain.py +0 -0
  141. {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_events.py +0 -0
  142. {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_handshake.py +0 -0
  143. {patchr-0.1.1 → patchr-0.1.2}/tests/test_integration_manifest.py +0 -0
  144. {patchr-0.1.1 → patchr-0.1.2}/tests/test_mandate_durability.py +0 -0
  145. {patchr-0.1.1 → patchr-0.1.2}/tests/test_mcp_endpoint.py +0 -0
  146. {patchr-0.1.1 → patchr-0.1.2}/tests/test_midnight_arbitrage_sandbox.py +0 -0
  147. {patchr-0.1.1 → patchr-0.1.2}/tests/test_orchestrator_run.py +0 -0
  148. {patchr-0.1.1 → patchr-0.1.2}/tests/test_orchestrator_stream_progress.py +0 -0
  149. {patchr-0.1.1 → patchr-0.1.2}/tests/test_pay_domain.py +0 -0
  150. {patchr-0.1.1 → patchr-0.1.2}/tests/test_pay_machine_contracts.py +0 -0
  151. {patchr-0.1.1 → patchr-0.1.2}/tests/test_phase8_verification.py +0 -0
  152. {patchr-0.1.1 → patchr-0.1.2}/tests/test_policy_enforcement_runtime.py +0 -0
  153. {patchr-0.1.1 → patchr-0.1.2}/tests/test_protocol_contracts.py +0 -0
  154. {patchr-0.1.1 → patchr-0.1.2}/tests/test_proxy_contract.py +0 -0
  155. {patchr-0.1.1 → patchr-0.1.2}/tests/test_receipt_export.py +0 -0
  156. {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_attachment_contact_journey.py +0 -0
  157. {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_bridge_domains.py +0 -0
  158. {patchr-0.1.1 → patchr-0.1.2}/tests/test_resolve_tv_journey.py +0 -0
  159. {patchr-0.1.1 → patchr-0.1.2}/tests/test_scaffold.py +0 -0
  160. {patchr-0.1.1 → patchr-0.1.2}/tests/test_schema_catalog.py +0 -0
  161. {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_client_scenarios.py +0 -0
  162. {patchr-0.1.1 → patchr-0.1.2}/tests/test_sdk_external_client.py +0 -0
  163. {patchr-0.1.1 → patchr-0.1.2}/tests/test_secret_references.py +0 -0
  164. {patchr-0.1.1 → patchr-0.1.2}/tests/test_security_policy.py +0 -0
  165. {patchr-0.1.1 → patchr-0.1.2}/tests/test_shared_tools.py +0 -0
  166. {patchr-0.1.1 → patchr-0.1.2}/tests/test_solana_escrow_ci.py +0 -0
  167. {patchr-0.1.1 → patchr-0.1.2}/tests/test_status_security.py +0 -0
  168. {patchr-0.1.1 → patchr-0.1.2}/tests/test_storage_audit.py +0 -0
  169. {patchr-0.1.1 → patchr-0.1.2}/tests/test_task_lifecycle.py +0 -0
  170. {patchr-0.1.1 → patchr-0.1.2}/tests/test_transport_auth.py +0 -0
  171. {patchr-0.1.1 → patchr-0.1.2}/tests/test_workflow_templates.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchr
3
- Version: 0.1.1
4
- Summary: Patchr Protocol infrastructure for agentic orchestration and settlement.
3
+ Version: 0.1.2
4
+ Summary: Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
5
5
  Author: Patchr Core Team
6
6
  License-Expression: Apache-2.0
7
7
  Project-URL: Homepage, https://patchr.co
@@ -34,6 +34,8 @@ Dynamic: license-file
34
34
 
35
35
  # Patchr
36
36
 
37
+ Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
38
+
37
39
  Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
38
40
 
39
41
  Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
@@ -194,6 +196,7 @@ patchr.nlpTool(payload)
194
196
  ## More
195
197
 
196
198
  - Hosted API reference: https://patchr.co/api-reference
199
+ - Control plane: https://patchr.co/control-plane
197
200
  - Developer sandbox: https://patchr.co/sandbox
198
201
  - Python package: https://pypi.org/project/patchr/
199
202
  - Node package: https://www.npmjs.com/package/@patchr-core/sdk
@@ -1,5 +1,7 @@
1
1
  # Patchr
2
2
 
3
+ Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
4
+
3
5
  Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
4
6
 
5
7
  Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
@@ -160,6 +162,7 @@ patchr.nlpTool(payload)
160
162
  ## More
161
163
 
162
164
  - Hosted API reference: https://patchr.co/api-reference
165
+ - Control plane: https://patchr.co/control-plane
163
166
  - Developer sandbox: https://patchr.co/sandbox
164
167
  - Python package: https://pypi.org/project/patchr/
165
168
  - Node package: https://www.npmjs.com/package/@patchr-core/sdk
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchr
3
- Version: 0.1.1
4
- Summary: Patchr Protocol infrastructure for agentic orchestration and settlement.
3
+ Version: 0.1.2
4
+ Summary: Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
5
5
  Author: Patchr Core Team
6
6
  License-Expression: Apache-2.0
7
7
  Project-URL: Homepage, https://patchr.co
@@ -34,6 +34,8 @@ Dynamic: license-file
34
34
 
35
35
  # Patchr
36
36
 
37
+ Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.
38
+
37
39
  Patchr is an SDK and hosted API for running agent workflows that need source-bound search, claim preparation, customer-service handoff, human calls, and settlement coordination.
38
40
 
39
41
  Use it when your app needs to turn a user request such as "find a mechanic in Lekki", "prepare a damage claim", or "dispute this ticket" into a routed workflow with auditable JSON results and streaming status messages.
@@ -194,6 +196,7 @@ patchr.nlpTool(payload)
194
196
  ## More
195
197
 
196
198
  - Hosted API reference: https://patchr.co/api-reference
199
+ - Control plane: https://patchr.co/control-plane
197
200
  - Developer sandbox: https://patchr.co/sandbox
198
201
  - Python package: https://pypi.org/project/patchr/
199
202
  - Node package: https://www.npmjs.com/package/@patchr-core/sdk
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "patchr"
7
- version = "0.1.1"
8
- description = "Patchr Protocol infrastructure for agentic orchestration and settlement."
7
+ version = "0.1.2"
8
+ description = "Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
11
11
  authors = [
@@ -16,7 +16,7 @@ class SdkPublishArtifactsTest(unittest.TestCase):
16
16
  self.assertIn("https://api.patchr.co", init)
17
17
  self.assertIn("PatchrApiError", init)
18
18
  self.assertIn('name = "patchr"', pyproject)
19
- self.assertIn('version = "0.1.1"', pyproject)
19
+ self.assertIn('version = "0.1.2"', pyproject)
20
20
  self.assertIn('"patchr*"', pyproject)
21
21
 
22
22
  def test_node_sdk_package_is_publishable(self) -> None:
@@ -43,6 +43,10 @@ class SdkPublishArtifactsTest(unittest.TestCase):
43
43
  java = (ROOT / "packages/java-sdk/README.md").read_text()
44
44
 
45
45
  for readme in (root, node, java):
46
+ self.assertIn(
47
+ "Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.",
48
+ readme,
49
+ )
46
50
  self.assertIn("Quick Start", readme)
47
51
  self.assertIn("PATCHR_API_TOKEN", readme)
48
52
  self.assertNotIn("docs/developers/sdk-scenarios.md", readme)
@@ -29,6 +29,7 @@ class WebHomepageTest(unittest.TestCase):
29
29
  self.assertIn("/v1/protocol-map", page)
30
30
  self.assertIn("/v1/manifest", page)
31
31
  self.assertIn("/security", nav)
32
+ self.assertIn("/control-plane", nav)
32
33
  self.assertIn("findBestFit", page)
33
34
  self.assertIn("auditDisputedClaim", page)
34
35
  self.assertIn("coordinateHumanProcess", page)
@@ -49,6 +50,18 @@ class WebHomepageTest(unittest.TestCase):
49
50
  self.assertIn("top-full z-50 w-[34rem] pt-3", nav)
50
51
  self.assertNotIn("top-full z-50 mt-3", nav)
51
52
 
53
+ def test_control_plane_page_is_patchr_branded(self) -> None:
54
+ page = (ROOT / "apps/web/app/control-plane/page.tsx").read_text()
55
+ self.assertIn("Patchr Control Plane", page)
56
+ self.assertIn(
57
+ "Patchr - the infrastructure for autonomous agents that need contracts, evidence trails, and human-safe handoffs.",
58
+ page,
59
+ )
60
+ self.assertIn("ProtocolCanvas", page)
61
+ self.assertIn("/dashboard", page)
62
+ self.assertIn("/api-reference", page)
63
+ self.assertIn("Streaming handoff events", page)
64
+
52
65
  def test_signup_page_supports_compact_auth_options(self) -> None:
53
66
  page = (ROOT / "apps/web/app/signup/page.tsx").read_text()
54
67
  form = (ROOT / "apps/web/app/signup/signup-form.tsx").read_text()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes