procesio-cli 0.1.1__py3-none-any.whl

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 (647) hide show
  1. procesio_cli/__init__.py +18 -0
  2. procesio_cli/_cli.py +71 -0
  3. procesio_cli/agents/__init__.py +0 -0
  4. procesio_cli/agents/_lib/__init__.py +0 -0
  5. procesio_cli/agents/_lib/actiondef.py +24 -0
  6. procesio_cli/agents/_lib/errors.py +40 -0
  7. procesio_cli/agents/_lib/reversibility.py +236 -0
  8. procesio_cli/agents/_lib/toolrunner.py +141 -0
  9. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
  10. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
  11. procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
  12. procesio_cli/agents/connector-builder/README.md +51 -0
  13. procesio_cli/agents/connector-builder/agent.yaml +61 -0
  14. procesio_cli/agents/connector-builder/context.py +19 -0
  15. procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
  16. procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
  17. procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
  18. procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
  19. procesio_cli/agents/connector-builder/handlers/status.py +35 -0
  20. procesio_cli/agents/connector-builder/knowledge.py +47 -0
  21. procesio_cli/agents/connector-builder/main.py +93 -0
  22. procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
  23. procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
  24. procesio_cli/agents/orchestrator/__init__.py +0 -0
  25. procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
  26. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
  27. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
  28. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
  29. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
  30. procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
  31. procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
  32. procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
  33. procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
  34. procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
  35. procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
  36. procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
  37. procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
  38. procesio_cli/agents/procesio/README.md +97 -0
  39. procesio_cli/agents/procesio/__init__.py +0 -0
  40. procesio_cli/agents/procesio/agent.yaml +73 -0
  41. procesio_cli/agents/procesio/audit.py +226 -0
  42. procesio_cli/agents/procesio/checklist.py +135 -0
  43. procesio_cli/agents/procesio/context.py +19 -0
  44. procesio_cli/agents/procesio/handlers/__init__.py +0 -0
  45. procesio_cli/agents/procesio/handlers/audit.py +39 -0
  46. procesio_cli/agents/procesio/handlers/checklist.py +34 -0
  47. procesio_cli/agents/procesio/handlers/guidance.py +36 -0
  48. procesio_cli/agents/procesio/handlers/status.py +33 -0
  49. procesio_cli/agents/procesio/handlers/verify.py +39 -0
  50. procesio_cli/agents/procesio/knowledge.py +115 -0
  51. procesio_cli/agents/procesio/main.py +89 -0
  52. procesio_cli/agents/procesio/tests/__init__.py +0 -0
  53. procesio_cli/agents/procesio/tests/conftest.py +62 -0
  54. procesio_cli/agents/procesio/tests/test_audit.py +91 -0
  55. procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
  56. procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
  57. procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
  58. procesio_cli/agents/procesio/tests/test_verify.py +134 -0
  59. procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
  60. procesio_cli/agents/procesio/verifylib.py +222 -0
  61. procesio_cli/dashboard/README.md +117 -0
  62. procesio_cli/dashboard/__init__.py +18 -0
  63. procesio_cli/dashboard/serve.py +98 -0
  64. procesio_cli/dashboard/server/__init__.py +1 -0
  65. procesio_cli/dashboard/server/config_schemas.py +92 -0
  66. procesio_cli/dashboard/server/google.py +103 -0
  67. procesio_cli/dashboard/server/handler.py +160 -0
  68. procesio_cli/dashboard/server/inventory.py +213 -0
  69. procesio_cli/dashboard/server/jobs.py +118 -0
  70. procesio_cli/dashboard/server/llmtest.py +181 -0
  71. procesio_cli/dashboard/server/procesio_env.py +94 -0
  72. procesio_cli/dashboard/server/routes.py +74 -0
  73. procesio_cli/dashboard/server/runner.py +150 -0
  74. procesio_cli/dashboard/server/security.py +29 -0
  75. procesio_cli/dashboard/server/setup.py +211 -0
  76. procesio_cli/dashboard/server/validate.py +152 -0
  77. procesio_cli/dashboard/tests/conftest.py +16 -0
  78. procesio_cli/dashboard/tests/test_dashboard.py +225 -0
  79. procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
  80. procesio_cli/dashboard/web/actions.js +274 -0
  81. procesio_cli/dashboard/web/api.js +79 -0
  82. procesio_cli/dashboard/web/app.js +385 -0
  83. procesio_cli/dashboard/web/copilot.js +72 -0
  84. procesio_cli/dashboard/web/google.js +121 -0
  85. procesio_cli/dashboard/web/index.html +67 -0
  86. procesio_cli/dashboard/web/procesio_env.js +187 -0
  87. procesio_cli/dashboard/web/styles.css +207 -0
  88. procesio_cli/registry.py +370 -0
  89. procesio_cli/scripts/build-router.py +249 -0
  90. procesio_cli/scripts/build-tool-skill.py +202 -0
  91. procesio_cli/scripts/check-requirements.py +131 -0
  92. procesio_cli/scripts/check-skill-governance.py +174 -0
  93. procesio_cli/scripts/evaluate-skill-routing.py +217 -0
  94. procesio_cli/scripts/evaluate-skills.py +316 -0
  95. procesio_cli/scripts/get-skill.py +122 -0
  96. procesio_cli/scripts/list-skills.py +68 -0
  97. procesio_cli/scripts/list-tools.py +73 -0
  98. procesio_cli/scripts/run-agent.py +59 -0
  99. procesio_cli/scripts/run-tool.py +123 -0
  100. procesio_cli/scripts/secret_scan.py +584 -0
  101. procesio_cli/scripts/set-credential.py +126 -0
  102. procesio_cli/scripts/validate-skills.py +530 -0
  103. procesio_cli/skills/PORTFOLIO.md +134 -0
  104. procesio_cli/skills/__init__.py +6 -0
  105. procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
  106. procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
  107. procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
  108. procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
  109. procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
  110. procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
  111. procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
  112. procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
  113. procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
  114. procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
  115. procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
  116. procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
  117. procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
  118. procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
  119. procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
  120. procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
  121. procesio_cli/skills/evals/baseline-catalog.json +14 -0
  122. procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
  123. procesio_cli/skills/evals/baseline.json +37 -0
  124. procesio_cli/skills/evals/behavioral.json +367 -0
  125. procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
  126. procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
  127. procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
  128. procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
  129. procesio_cli/skills/evals/routing.json +363 -0
  130. procesio_cli/skills/evals/validation-baseline.json +4 -0
  131. procesio_cli/skills/procesio-cli/SKILL.md +134 -0
  132. procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
  133. procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
  134. procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
  135. procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
  136. procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
  137. procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
  138. procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
  139. procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
  140. procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
  141. procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
  142. procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
  143. procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
  144. procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
  145. procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
  146. procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
  147. procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
  148. procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
  149. procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
  150. procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
  151. procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
  152. procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
  153. procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
  154. procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
  155. procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
  156. procesio_cli/skills/procesio-setup/SKILL.md +180 -0
  157. procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
  158. procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
  159. procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
  160. procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
  161. procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
  162. procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
  163. procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
  164. procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
  165. procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
  166. procesio_cli/skills/tests/__init__.py +0 -0
  167. procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
  168. procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
  169. procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
  170. procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
  171. procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
  172. procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
  173. procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
  174. procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
  175. procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
  176. procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
  177. procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
  178. procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
  179. procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
  180. procesio_cli/skills/tests/test_skill_routing.py +74 -0
  181. procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
  182. procesio_cli/skills/tests/test_validate_skills.py +115 -0
  183. procesio_cli/tools/__init__.py +0 -0
  184. procesio_cli/tools/_lib/README.md +119 -0
  185. procesio_cli/tools/_lib/__init__.py +0 -0
  186. procesio_cli/tools/_lib/accounting.py +120 -0
  187. procesio_cli/tools/_lib/contacts.py +544 -0
  188. procesio_cli/tools/_lib/creds.py +83 -0
  189. procesio_cli/tools/_lib/creds_backends.py +578 -0
  190. procesio_cli/tools/_lib/dbprofiles.py +147 -0
  191. procesio_cli/tools/_lib/dbquery.py +286 -0
  192. procesio_cli/tools/_lib/dbschema.py +225 -0
  193. procesio_cli/tools/_lib/io.py +54 -0
  194. procesio_cli/tools/_lib/manifest.py +297 -0
  195. procesio_cli/tools/_lib/skill_release.py +127 -0
  196. procesio_cli/tools/_lib/skill_resources.py +118 -0
  197. procesio_cli/tools/_lib/userdata.py +228 -0
  198. procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
  199. procesio_cli/tools/_lib/webserialize/admin.py +61 -0
  200. procesio_cli/tools/_lib/webserialize/client.py +264 -0
  201. procesio_cli/tools/_lib/webserialize/config.py +96 -0
  202. procesio_cli/tools/_lib/webserialize/errors.py +27 -0
  203. procesio_cli/tools/_lib/webserialize/framing.py +45 -0
  204. procesio_cli/tools/_lib/webserialize/registry.py +47 -0
  205. procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
  206. procesio_cli/tools/_lib/webserialize/server.py +510 -0
  207. procesio_cli/tools/_lib/websession.py +194 -0
  208. procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
  209. procesio_cli/tools/connector-builder/README.md +101 -0
  210. procesio_cli/tools/connector-builder/SKILL.md +248 -0
  211. procesio_cli/tools/connector-builder/__init__.py +7 -0
  212. procesio_cli/tools/connector-builder/actiondef.py +24 -0
  213. procesio_cli/tools/connector-builder/client.py +251 -0
  214. procesio_cli/tools/connector-builder/errors.py +44 -0
  215. procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
  216. procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
  217. procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
  218. procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
  219. procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
  220. procesio_cli/tools/connector-builder/handlers/common.py +104 -0
  221. procesio_cli/tools/connector-builder/handlers/files.py +111 -0
  222. procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
  223. procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
  224. procesio_cli/tools/connector-builder/main.py +94 -0
  225. procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
  226. procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
  227. procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
  228. procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
  229. procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
  230. procesio_cli/tools/connector-builder/tool.yaml +671 -0
  231. procesio_cli/tools/framework-map/.gitattributes +2 -0
  232. procesio_cli/tools/framework-map/README.md +98 -0
  233. procesio_cli/tools/framework-map/SKILL.md +30 -0
  234. procesio_cli/tools/framework-map/app.js +188 -0
  235. procesio_cli/tools/framework-map/fm_builder.py +476 -0
  236. procesio_cli/tools/framework-map/fm_catalog.py +19 -0
  237. procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
  238. procesio_cli/tools/framework-map/fm_strings.py +101 -0
  239. procesio_cli/tools/framework-map/main.py +95 -0
  240. procesio_cli/tools/framework-map/styles.css +214 -0
  241. procesio_cli/tools/framework-map/tests/conftest.py +33 -0
  242. procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
  243. procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
  244. procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
  245. procesio_cli/tools/framework-map/tool.yaml +61 -0
  246. procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
  247. procesio_cli/tools/mysql/README.md +196 -0
  248. procesio_cli/tools/mysql/SKILL.md +37 -0
  249. procesio_cli/tools/mysql/__init__.py +0 -0
  250. procesio_cli/tools/mysql/connection.py +191 -0
  251. procesio_cli/tools/mysql/main.py +487 -0
  252. procesio_cli/tools/mysql/profiles.template.json +1 -0
  253. procesio_cli/tools/mysql/schema.py +434 -0
  254. procesio_cli/tools/mysql/tests/__init__.py +0 -0
  255. procesio_cli/tools/mysql/tests/conftest.py +21 -0
  256. procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
  257. procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
  258. procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
  259. procesio_cli/tools/mysql/tool.yaml +112 -0
  260. procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
  261. procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
  262. procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
  263. procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
  264. procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
  265. procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
  266. procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
  267. procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
  268. procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
  269. procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
  270. procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
  271. procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
  272. procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
  273. procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
  274. procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
  275. procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
  276. procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
  277. procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
  278. procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
  279. procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
  280. procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
  281. procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
  282. procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
  283. procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
  284. procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
  285. procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
  286. procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
  287. procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
  288. procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
  289. procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
  290. procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
  291. procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
  292. procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
  293. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
  294. procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
  295. procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
  296. procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
  297. procesio_cli/tools/procesio/README.md +341 -0
  298. procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
  299. procesio_cli/tools/procesio/SKILL.md +694 -0
  300. procesio_cli/tools/procesio/__init__.py +1 -0
  301. procesio_cli/tools/procesio/actiondef.py +27 -0
  302. procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
  303. procesio_cli/tools/procesio/auth.py +354 -0
  304. procesio_cli/tools/procesio/autogen.py +121 -0
  305. procesio_cli/tools/procesio/client.py +355 -0
  306. procesio_cli/tools/procesio/config.py +96 -0
  307. procesio_cli/tools/procesio/data/endpoints.json +2901 -0
  308. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
  309. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
  310. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
  311. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
  312. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
  313. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
  314. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
  315. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
  316. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
  317. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
  318. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
  319. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
  320. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
  321. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
  322. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
  323. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
  324. procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
  325. procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
  326. procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
  327. procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
  328. procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
  329. procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
  330. procesio_cli/tools/procesio/dto/__init__.py +13 -0
  331. procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
  332. procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
  333. procesio_cli/tools/procesio/dto/credential/description.md +193 -0
  334. procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
  335. procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
  336. procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
  337. procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
  338. procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
  339. procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
  340. procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
  341. procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
  342. procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
  343. procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
  344. procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
  345. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
  346. procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
  347. procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
  348. procesio_cli/tools/procesio/dto/document/builder.py +193 -0
  349. procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
  350. procesio_cli/tools/procesio/dto/document/description.md +124 -0
  351. procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
  352. procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
  353. procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
  354. procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
  355. procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
  356. procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
  357. procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
  358. procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
  359. procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
  360. procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
  361. procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
  362. procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
  363. procesio_cli/tools/procesio/dto/form/description.md +346 -0
  364. procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
  365. procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
  366. procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
  367. procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
  368. procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
  369. procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
  370. procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
  371. procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
  372. procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
  373. procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
  374. procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
  375. procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
  376. procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
  377. procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
  378. procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
  379. procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
  380. procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
  381. procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
  382. procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
  383. procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
  384. procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
  385. procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
  386. procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
  387. procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
  388. procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
  389. procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
  390. procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
  391. procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
  392. procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
  393. procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
  394. procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
  395. procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
  396. procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
  397. procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
  398. procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
  399. procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
  400. procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
  401. procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
  402. procesio_cli/tools/procesio/dto/framework.py +125 -0
  403. procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
  404. procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
  405. procesio_cli/tools/procesio/dto/process/description.md +218 -0
  406. procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
  407. procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
  408. procesio_cli/tools/procesio/dto/process/naming.py +305 -0
  409. procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
  410. procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
  411. procesio_cli/tools/procesio/dto/refdata.py +87 -0
  412. procesio_cli/tools/procesio/dto/registry.py +27 -0
  413. procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
  414. procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
  415. procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
  416. procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
  417. procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
  418. procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
  419. procesio_cli/tools/procesio/environments.py +264 -0
  420. procesio_cli/tools/procesio/errors.py +166 -0
  421. procesio_cli/tools/procesio/flowmodel/README.md +37 -0
  422. procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
  423. procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
  424. procesio_cli/tools/procesio/flowmodel/families.py +34 -0
  425. procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
  426. procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
  427. procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
  428. procesio_cli/tools/procesio/flowmodel/model.py +82 -0
  429. procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
  430. procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
  431. procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
  432. procesio_cli/tools/procesio/form_code_keys.py +50 -0
  433. procesio_cli/tools/procesio/formlint.py +292 -0
  434. procesio_cli/tools/procesio/gen_manifest.py +118 -0
  435. procesio_cli/tools/procesio/handlers/__init__.py +1 -0
  436. procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
  437. procesio_cli/tools/procesio/handlers/catalog.py +147 -0
  438. procesio_cli/tools/procesio/handlers/common.py +90 -0
  439. procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
  440. procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
  441. procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
  442. procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
  443. procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
  444. procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
  445. procesio_cli/tools/procesio/handlers/files.py +141 -0
  446. procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
  447. procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
  448. procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
  449. procesio_cli/tools/procesio/handlers/form_code.py +277 -0
  450. procesio_cli/tools/procesio/handlers/form_element.py +199 -0
  451. procesio_cli/tools/procesio/handlers/form_events.py +441 -0
  452. procesio_cli/tools/procesio/handlers/form_update.py +270 -0
  453. procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
  454. procesio_cli/tools/procesio/handlers/generic.py +135 -0
  455. procesio_cli/tools/procesio/handlers/layout.py +137 -0
  456. procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
  457. procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
  458. procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
  459. procesio_cli/tools/procesio/handlers/processes.py +416 -0
  460. procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
  461. procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
  462. procesio_cli/tools/procesio/handlers/schedules.py +320 -0
  463. procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
  464. procesio_cli/tools/procesio/handlers/transport.py +463 -0
  465. procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
  466. procesio_cli/tools/procesio/layout/README.md +196 -0
  467. procesio_cli/tools/procesio/layout/__init__.py +11 -0
  468. procesio_cli/tools/procesio/layout/adapter.py +736 -0
  469. procesio_cli/tools/procesio/layout/cycles.py +186 -0
  470. procesio_cli/tools/procesio/layout/dispatch.py +39 -0
  471. procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
  472. procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
  473. procesio_cli/tools/procesio/layout/elk/package.json +11 -0
  474. procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
  475. procesio_cli/tools/procesio/layout/engine.py +1311 -0
  476. procesio_cli/tools/procesio/layout/report.py +187 -0
  477. procesio_cli/tools/procesio/main.py +179 -0
  478. procesio_cli/tools/procesio/profiles.py +193 -0
  479. procesio_cli/tools/procesio/reliability.py +193 -0
  480. procesio_cli/tools/procesio/sqlformat.py +167 -0
  481. procesio_cli/tools/procesio/swagger.py +51 -0
  482. procesio_cli/tools/procesio/tests/__init__.py +0 -0
  483. procesio_cli/tools/procesio/tests/conftest.py +129 -0
  484. procesio_cli/tools/procesio/tests/test_auth.py +200 -0
  485. procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
  486. procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
  487. procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
  488. procesio_cli/tools/procesio/tests/test_client.py +114 -0
  489. procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
  490. procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
  491. procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
  492. procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
  493. procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
  494. procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
  495. procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
  496. procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
  497. procesio_cli/tools/procesio/tests/test_dto.py +734 -0
  498. procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
  499. procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
  500. procesio_cli/tools/procesio/tests/test_environments.py +214 -0
  501. procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
  502. procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
  503. procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
  504. procesio_cli/tools/procesio/tests/test_files.py +72 -0
  505. procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
  506. procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
  507. procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
  508. procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
  509. procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
  510. procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
  511. procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
  512. procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
  513. procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
  514. procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
  515. procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
  516. procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
  517. procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
  518. procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
  519. procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
  520. procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
  521. procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
  522. procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
  523. procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
  524. procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
  525. procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
  526. procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
  527. procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
  528. procesio_cli/tools/procesio/tests/test_guards.py +110 -0
  529. procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
  530. procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
  531. procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
  532. procesio_cli/tools/procesio/tests/test_layout.py +574 -0
  533. procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
  534. procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
  535. procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
  536. procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
  537. procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
  538. procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
  539. procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
  540. procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
  541. procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
  542. procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
  543. procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
  544. procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
  545. procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
  546. procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
  547. procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
  548. procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
  549. procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
  550. procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
  551. procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
  552. procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
  553. procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
  554. procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
  555. procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
  556. procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
  557. procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
  558. procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
  559. procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
  560. procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
  561. procesio_cli/tools/procesio/tests/test_transport.py +147 -0
  562. procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
  563. procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
  564. procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
  565. procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
  566. procesio_cli/tools/procesio/tool.yaml +12486 -0
  567. procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
  568. procesio_cli/tools/sqlserver/README.md +192 -0
  569. procesio_cli/tools/sqlserver/SKILL.md +37 -0
  570. procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
  571. procesio_cli/tools/sqlserver/__init__.py +0 -0
  572. procesio_cli/tools/sqlserver/connection.py +242 -0
  573. procesio_cli/tools/sqlserver/main.py +521 -0
  574. procesio_cli/tools/sqlserver/profiles.template.json +1 -0
  575. procesio_cli/tools/sqlserver/schema.py +600 -0
  576. procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
  577. procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
  578. procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
  579. procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
  580. procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
  581. procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
  582. procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
  583. procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
  584. procesio_cli/tools/sqlserver/tool.yaml +123 -0
  585. procesio_cli/tools/web/README.md +381 -0
  586. procesio_cli/tools/web/SKILL.md +37 -0
  587. procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
  588. procesio_cli/tools/web/__init__.py +21 -0
  589. procesio_cli/tools/web/actiondef.py +24 -0
  590. procesio_cli/tools/web/api.py +444 -0
  591. procesio_cli/tools/web/brokered.py +107 -0
  592. procesio_cli/tools/web/driver.py +839 -0
  593. procesio_cli/tools/web/drivercontract.py +44 -0
  594. procesio_cli/tools/web/errors.py +54 -0
  595. procesio_cli/tools/web/handlers/__init__.py +1 -0
  596. procesio_cli/tools/web/handlers/archive.py +367 -0
  597. procesio_cli/tools/web/handlers/browse.py +182 -0
  598. procesio_cli/tools/web/handlers/contacts.py +74 -0
  599. procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
  600. procesio_cli/tools/web/main.py +128 -0
  601. procesio_cli/tools/web/sessions.py +253 -0
  602. procesio_cli/tools/web/steps.py +162 -0
  603. procesio_cli/tools/web/tests/__init__.py +0 -0
  604. procesio_cli/tools/web/tests/conftest.py +197 -0
  605. procesio_cli/tools/web/tests/test_api.py +330 -0
  606. procesio_cli/tools/web/tests/test_archive.py +190 -0
  607. procesio_cli/tools/web/tests/test_brokered.py +138 -0
  608. procesio_cli/tools/web/tests/test_dispatch.py +132 -0
  609. procesio_cli/tools/web/tests/test_errors.py +60 -0
  610. procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
  611. procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
  612. procesio_cli/tools/web/tests/test_sessions.py +145 -0
  613. procesio_cli/tools/web/tests/test_steps.py +210 -0
  614. procesio_cli/tools/web/tool.yaml +184 -0
  615. procesio_cli/tools/xlsx/README.md +34 -0
  616. procesio_cli/tools/xlsx/SKILL.md +28 -0
  617. procesio_cli/tools/xlsx/__init__.py +0 -0
  618. procesio_cli/tools/xlsx/main.py +129 -0
  619. procesio_cli/tools/xlsx/reader.py +91 -0
  620. procesio_cli/tools/xlsx/tests/__init__.py +0 -0
  621. procesio_cli/tools/xlsx/tests/conftest.py +39 -0
  622. procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
  623. procesio_cli/tools/xlsx/tool.yaml +30 -0
  624. procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
  625. procesio_cli/webplatform/aat_mcp/README.md +78 -0
  626. procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
  627. procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
  628. procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
  629. procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
  630. procesio_cli/webplatform/aat_mcp/gate.py +68 -0
  631. procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
  632. procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
  633. procesio_cli/webplatform/aat_mcp/server.py +306 -0
  634. procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
  635. procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
  636. procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
  637. procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
  638. procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
  639. procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
  640. procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
  641. procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
  642. procesio_cli-0.1.1.dist-info/METADATA +467 -0
  643. procesio_cli-0.1.1.dist-info/RECORD +647 -0
  644. procesio_cli-0.1.1.dist-info/WHEEL +4 -0
  645. procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
  646. procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
  647. procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
@@ -0,0 +1,240 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import importlib.util
5
+ import json
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+ import yaml
11
+
12
+ ROOT = Path(__file__).resolve().parents[2]
13
+ SKILL_ROOT = ROOT / "skills" / "agent-skill-engineer"
14
+
15
+
16
+ def _load(name: str, path: Path):
17
+ spec = importlib.util.spec_from_file_location(name, path)
18
+ assert spec and spec.loader
19
+ module = importlib.util.module_from_spec(spec)
20
+ sys.modules[name] = module
21
+ spec.loader.exec_module(module)
22
+ return module
23
+
24
+
25
+ SCAFFOLD = _load(
26
+ "agent_skill_scaffold",
27
+ SKILL_ROOT / "scripts" / "scaffold_skill.py",
28
+ )
29
+ AUDIT = _load(
30
+ "agent_skill_audit",
31
+ SKILL_ROOT / "scripts" / "audit_skill.py",
32
+ )
33
+
34
+
35
+ def _frontmatter(path: Path) -> dict:
36
+ lines = path.read_text(encoding="utf-8").splitlines()
37
+ end = lines[1:].index("---") + 1
38
+ value = yaml.safe_load("\n".join(lines[1:end]))
39
+ assert isinstance(value, dict)
40
+ return value
41
+
42
+
43
+ def _governed_skill_mds() -> list[Path]:
44
+ """Skill manuals that opt into the governance/eval discipline (the
45
+ `source_policy` marker). The strict audit and the fixed-rubric contract apply
46
+ to the governed portfolio; a fuller tree (AAT) also hosts imported/portable
47
+ skills that never signed up for them. In procesio-cli, whose skills/ IS the
48
+ portfolio, this is every skill."""
49
+ out: list[Path] = []
50
+ for skill_md in sorted((ROOT / "skills").glob("*/SKILL.md")):
51
+ if skill_md.parent.name.startswith("_") or skill_md.parent.name == "tests":
52
+ continue
53
+ try:
54
+ frontmatter = _frontmatter(skill_md)
55
+ except Exception: # noqa: BLE001 - a broken skill is validate-skills' job
56
+ continue
57
+ if frontmatter.get("source_policy"):
58
+ out.append(skill_md)
59
+ return out
60
+
61
+
62
+ def test_meta_skill_passes_its_deterministic_audit():
63
+ report = AUDIT.audit_skill(SKILL_ROOT)
64
+
65
+ assert report["passed"] is True
66
+ assert report["errors"] == 0
67
+ assert report["warnings"] == 0
68
+ assert report["quality_score"] == 100
69
+
70
+
71
+ @pytest.mark.parametrize("skill_md", _governed_skill_mds(),
72
+ ids=lambda path: path.parent.name)
73
+ def test_every_published_skill_passes_strict_audit(skill_md):
74
+ report = AUDIT.audit_skill(skill_md.parent)
75
+ assert report["errors"] == 0, report["findings"]
76
+ assert report["warnings"] == 0, report["findings"]
77
+
78
+
79
+ @pytest.mark.parametrize("category", ["references", "scripts", "assets"])
80
+ def test_audit_resolves_category_paths_from_skill_root(tmp_path, category):
81
+ root = tmp_path / "demo"
82
+ source = root / "references" / "context.md"
83
+ target = root / category / "example.txt"
84
+ source.parent.mkdir(parents=True)
85
+ target.parent.mkdir(parents=True, exist_ok=True)
86
+ target.write_text("example", encoding="utf-8")
87
+ source.write_text(f"Read `{category}/example.txt`.\n", encoding="utf-8")
88
+
89
+ assert AUDIT._candidate_reference(f"{category}/example.txt", source, root) == target.resolve()
90
+ findings = AUDIT._scan_links(root, [source])
91
+ assert not [item for item in findings if item.code == "missing-reference"]
92
+ assert not [item for item in findings if item.path == f"{category}/example.txt"]
93
+
94
+
95
+ @pytest.mark.parametrize("raw,code", [
96
+ ("scripts/missing.sql", "missing-reference"),
97
+ ("../outside.md", "unsafe-reference"),
98
+ ("scripts/../../outside.md", "unsafe-reference"),
99
+ ])
100
+ def test_audit_resource_resolution_still_rejects_invalid_paths(tmp_path, raw, code):
101
+ root = tmp_path / "demo"
102
+ source = root / "references" / "context.md"
103
+ source.parent.mkdir(parents=True)
104
+ source.write_text(f"[resource]({raw})\n", encoding="utf-8")
105
+ assert code in {item.code for item in AUDIT._scan_links(root, [source])}
106
+
107
+
108
+ def test_audit_resource_resolution_rejects_symlink_escape(tmp_path):
109
+ root = tmp_path / "demo"
110
+ source = root / "references" / "context.md"
111
+ source.parent.mkdir(parents=True)
112
+ (root / "scripts").mkdir()
113
+ outside = tmp_path / "outside.sql"
114
+ outside.write_text("SELECT 1;", encoding="utf-8")
115
+ try:
116
+ (root / "scripts" / "export.sql").symlink_to(outside)
117
+ except OSError:
118
+ pytest.skip("symlink creation unavailable on this platform")
119
+ source.write_text("Read `scripts/export.sql`.\n", encoding="utf-8")
120
+ assert "unsafe-reference" in {item.code for item in AUDIT._scan_links(root, [source])}
121
+
122
+
123
+ def test_scaffold_is_path_confined_governed_and_no_overwrite(tmp_path):
124
+ parser = SCAFFOLD._parser()
125
+ args = parser.parse_args(
126
+ [
127
+ "incident-triage",
128
+ "--root",
129
+ str(tmp_path),
130
+ "--description",
131
+ "Triage recurring incidents. Use when an incident report needs a bounded diagnostic workflow.",
132
+ "--profile",
133
+ "governed",
134
+ "--owner",
135
+ "platform team",
136
+ "--baseline-version",
137
+ "abc123",
138
+ "--trigger",
139
+ "triage a recurring production incident",
140
+ ]
141
+ )
142
+
143
+ result = SCAFFOLD.scaffold(args)
144
+ target = tmp_path / "incident-triage"
145
+
146
+ assert result["created"] is True
147
+ assert (target / "SKILL.md").is_file()
148
+ assert (target / "evals" / "evals.json").is_file()
149
+ frontmatter = _frontmatter(target / "SKILL.md")
150
+ assert frontmatter["name"] == "incident-triage"
151
+ assert frontmatter["owner"] == "platform team"
152
+ assert frontmatter["eval_suite"] == "evals/evals.json"
153
+ suite = json.loads((target / "evals" / "evals.json").read_text(encoding="utf-8"))
154
+ assert {case["kind"] for case in suite["cases"]} == {
155
+ "positive",
156
+ "negative",
157
+ "overlap",
158
+ "pressure",
159
+ }
160
+ assert suite["rubric_contract"] == "fixed-jury-rubric-v2"
161
+
162
+ with pytest.raises(FileExistsError, match="refusing to overwrite"):
163
+ SCAFFOLD.scaffold(args)
164
+
165
+ with pytest.raises(ValueError, match="lowercase"):
166
+ bad = argparse.Namespace(**{**vars(args), "name": "../escape"})
167
+ SCAFFOLD.scaffold(bad)
168
+
169
+
170
+ def test_audit_rejects_dynamic_jury_and_unsafe_reference(tmp_path):
171
+ root = tmp_path / "broken-skill"
172
+ (root / "evals").mkdir(parents=True)
173
+ (root / "SKILL.md").write_text(
174
+ "---\n"
175
+ "name: broken-skill\n"
176
+ "description: Use when auditing a broken example.\n"
177
+ "version: 1.0.0\n"
178
+ "owner: test\n"
179
+ "last_verified: 2026-09-04\n"
180
+ "baseline_version: abc\n"
181
+ "eval_suite: evals/evals.json\n"
182
+ "source_policy: stable\n"
183
+ "routing:\n triggers: [audit a broken example]\n"
184
+ "---\n\n"
185
+ "# Broken\n\n"
186
+ "## Boundary\nBounded.\n\n"
187
+ "## Workflow\nRead [outside](../outside.md).\n\n"
188
+ "## Verification\nInspect the report.\n",
189
+ encoding="utf-8",
190
+ )
191
+ (root / "evals" / "evals.json").write_text(
192
+ json.dumps(
193
+ {
194
+ "skill_name": "broken-skill",
195
+ "evals": [
196
+ {
197
+ "id": "one",
198
+ "kind": "positive",
199
+ "prompt": "Do it",
200
+ "expected_output": "Be good and safe.",
201
+ }
202
+ ],
203
+ }
204
+ ),
205
+ encoding="utf-8",
206
+ )
207
+
208
+ report = AUDIT.audit_skill(root)
209
+ codes = {item["code"] for item in report["findings"]}
210
+
211
+ assert report["passed"] is False
212
+ assert "unsafe-reference" in codes
213
+ assert "dynamic-jury-rubric" in codes
214
+
215
+
216
+ def test_every_published_skill_uses_fixed_atomic_eval_rubrics():
217
+ criterion_id = AUDIT.CRITERION_RE
218
+ case_kinds = AUDIT.CASE_KINDS
219
+
220
+ for skill_md in _governed_skill_mds():
221
+ frontmatter = _frontmatter(skill_md)
222
+ suite_path = skill_md.parent / frontmatter["eval_suite"]
223
+ suite = json.loads(suite_path.read_text(encoding="utf-8"))
224
+ cases = suite["cases"]
225
+
226
+ assert suite["schema_version"] >= 2, skill_md.parent.name
227
+ assert suite["skill_name"] == frontmatter["name"]
228
+ assert suite["rubric_contract"] == "fixed-jury-rubric-v2"
229
+ assert {case["kind"] for case in cases} == case_kinds
230
+
231
+ for case in cases:
232
+ expected = case["expected_output"]
233
+ criteria = expected["criteria"]
234
+ ids = [entry["id"] for entry in criteria]
235
+ assert expected["rubric_version"] >= 1
236
+ assert 2 <= len(criteria) <= 8
237
+ assert len(ids) == len(set(ids))
238
+ assert all(criterion_id.fullmatch(item) for item in ids)
239
+ assert all(entry["description"].startswith("Pass only when") for entry in criteria)
240
+ assert all(isinstance(entry["required"], bool) for entry in criteria)
@@ -0,0 +1,25 @@
1
+ """The operational skill must not encourage endpoint exploration after auth fails."""
2
+ from __future__ import annotations
3
+
4
+ from pathlib import Path
5
+
6
+ ROOT = Path(__file__).resolve().parents[2]
7
+ SKILL = ROOT / "skills" / "procesio-cli"
8
+
9
+
10
+ def test_credentials_playbook_stops_after_failed_check_auth():
11
+ text = (SKILL / "references" / "credentials-admin.md").read_text(encoding="utf-8")
12
+ lowered = text.lower()
13
+ assert "authentication hard stop" in lowered
14
+ assert "authenticated: false" in lowered
15
+ assert "stop all remote procesio calls" in lowered
16
+ assert "show-credential" in lowered
17
+ assert "key handle" in lowered and "api key value" in lowered
18
+ assert "configured but not confirmed" in lowered
19
+
20
+
21
+ def test_main_skill_treats_failed_readiness_as_a_stop_condition():
22
+ text = (SKILL / "SKILL.md").read_text(encoding="utf-8").lower()
23
+ assert "authenticated: false" in text
24
+ assert "mode" in text
25
+ assert "stop" in text
@@ -0,0 +1,85 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib.util
4
+ import json
5
+ import subprocess
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ import pytest
10
+
11
+ SCRIPT = Path(__file__).resolve().parents[2] / "skills/procesio-platform-advisor/scripts/estimate_capacity.py"
12
+
13
+
14
+ def module():
15
+ spec = importlib.util.spec_from_file_location("capacity_estimator", SCRIPT)
16
+ value = importlib.util.module_from_spec(spec)
17
+ spec.loader.exec_module(value)
18
+ return value
19
+
20
+
21
+ def payload():
22
+ return {"executions": 10000, "available_seconds": 3600,
23
+ "mean_active_compute_seconds": 2, "mean_occupied_seconds": 20,
24
+ "busy_interval_arrival_rate": 5, "safety_factor": 1.25}
25
+
26
+
27
+ def test_documented_example_requires_capacity_source_before_ee_conversion():
28
+ data = payload()
29
+ estimate = module().estimate(data)
30
+ assert estimate["compute_work_seconds"] == 20000
31
+ assert estimate["occupied_slot_seconds"] == 200000
32
+ assert estimate["average_occupied_slots"] == pytest.approx(55.55555556)
33
+ assert estimate["planned_slots"] == 125
34
+ assert estimate["slot_based_ee_lower_bound"] is None
35
+ data.update(verified_slots_per_ee=10, capacity_source="hypothetical example, not a product limit")
36
+ assert module().estimate(data)["slot_based_ee_lower_bound"] == 13
37
+
38
+
39
+ @pytest.mark.parametrize("key,value", [
40
+ ("executions", True), ("executions", 1.5), ("available_seconds", 0),
41
+ ("mean_occupied_seconds", None), ("safety_factor", 0.5),
42
+ ("mean_active_compute_seconds", float("nan")),
43
+ ("busy_interval_arrival_rate", float("inf")), ("executions", -1),
44
+ ])
45
+ def test_invalid_units_and_nonfinite_inputs_fail(key, value):
46
+ data = payload()
47
+ data[key] = value
48
+ with pytest.raises(ValueError):
49
+ module().estimate(data)
50
+
51
+
52
+ def test_unattributed_capacity_and_unknown_fields_fail():
53
+ with pytest.raises(ValueError):
54
+ module().estimate(dict(payload(), verified_slots_per_ee=10))
55
+ with pytest.raises(ValueError):
56
+ module().estimate(dict(payload(), slots_per_ee=10))
57
+
58
+
59
+ def test_zero_workload_and_occupied_wait_are_distinct():
60
+ assert module().estimate(dict(payload(), executions=0, busy_interval_arrival_rate=0))["planned_slots"] == 0
61
+ estimate = module().estimate(dict(payload(), mean_active_compute_seconds=0))
62
+ assert estimate["compute_work_seconds"] == 0
63
+ assert estimate["planned_slots"] == 125
64
+
65
+
66
+ def test_overflow_is_a_validation_error():
67
+ with pytest.raises(ValueError):
68
+ module().estimate(dict(payload(), executions=10 ** 308, mean_occupied_seconds=10 ** 308))
69
+
70
+
71
+ # Explicit short ids: without them pytest derives the id from the param value, so
72
+ # the 65537-space case puts a 64 KB string into the PYTEST_CURRENT_TEST env var and
73
+ # Windows rejects it (env vars cap at 32767 chars). The content still reaches the CLI
74
+ # via a file, so the test behavior is unchanged.
75
+ @pytest.mark.parametrize("content,code", [("not json", 1), ("[]", 1), (" " * 65537, 1), (None, 0)],
76
+ ids=["not-json", "empty-array", "overlong-input", "valid"])
77
+ def test_real_cli_has_one_json_result_and_no_traceback(tmp_path, content, code):
78
+ source = tmp_path / "input.json"
79
+ source.write_text(json.dumps(payload()) if content is None else content)
80
+ result = subprocess.run([sys.executable, str(SCRIPT), "--input", str(source)],
81
+ capture_output=True, text=True)
82
+ assert result.returncode == code
83
+ response = json.loads(result.stdout)
84
+ assert ("error" in response) == bool(code)
85
+ assert not result.stderr
@@ -0,0 +1,100 @@
1
+ """Structural retention checks + frozen development cases, NOT behavioral uplift proof."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+ import re
6
+
7
+ ROOT = Path(__file__).resolve().parents[2]
8
+ REFS = ROOT / 'skills/procesio-cli/references'
9
+ CORPUS = ROOT / 'skills/evals/field-boundary-development-v1.json'
10
+
11
+
12
+ def text(name):
13
+ return ' '.join((REFS / name).read_text(encoding='utf-8').split())
14
+
15
+
16
+ def test_development_cases_remain_frozen_and_separate():
17
+ assert hashlib.sha256(CORPUS.read_bytes()).hexdigest() == (
18
+ 'bb0e22e34bdf262a72973958eed528aa470dc37c758c6197126fbbdd5ad72596'
19
+ )
20
+ suite = json.loads(CORPUS.read_text(encoding="utf-8"))
21
+ assert suite['evidence_role'] == 'development_only_not_holdout'
22
+ assert suite['rubric_contract'] == 'fixed-jury-rubric-v2'
23
+ cases = suite['cases']
24
+ ids = {c['id'] for c in cases}
25
+ assert len(cases) == len(ids) == 10
26
+ historical = json.loads((ROOT / 'skills/evals/behavioral.json').read_text(encoding="utf-8"))
27
+ assert not ids & {c['id'] for c in historical['cases']}
28
+ assert {'positive', 'pressure', 'negative', 'missing-context'} <= {c['kind'] for c in cases}
29
+ assert not re.search(r'[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}', CORPUS.read_text(encoding="utf-8"))
30
+ for case in cases:
31
+ assert (ROOT / 'skills' / case['expected_skill'] / 'SKILL.md').is_file()
32
+ rubric = case['expected_output']
33
+ assert rubric['rubric_version'] == 1
34
+ criteria = rubric['criteria']
35
+ assert 2 <= len(criteria) <= 8
36
+ assert len({c['id'] for c in criteria}) == len(criteria)
37
+ for c in criteria:
38
+ assert re.fullmatch(r'[a-z][a-z0-9]*(?:_[a-z0-9]+)+', c['id'])
39
+ assert c['required'] is True
40
+ assert c['description'].startswith('Pass only when')
41
+
42
+
43
+ def test_credentials_preserve_existing_access_and_typed_identity():
44
+ body = text('credentials-admin.md')
45
+ for term in ['two authentication planes', 'workspace GUID', 'connection GUID',
46
+ '`gid`', 'not evidence of absence', 'does not prove read-only',
47
+ 'generated', 'not invent', 'owner', 'emails or user IDs']:
48
+ assert term in body
49
+
50
+
51
+ def test_native_proof_is_independent_and_transition_sensitive():
52
+ body = text('data-verification.md')
53
+ for term in ['original request', 'same intermediate', 'explicit null',
54
+ 'concrete → null', 'null → concrete', 'false', 'zero',
55
+ 'already null', 'typed object', 'not a universal', 'protected']:
56
+ assert term in body
57
+
58
+
59
+ def test_debugging_does_not_repeat_shared_state_corruption():
60
+ body = text('process-debugging.md')
61
+ assert 'original item → intermediate variable → native mapping → persisted row' in body
62
+ assert 'last loop iteration' in body
63
+ assert 'same intermediate' in body
64
+
65
+
66
+ def test_graph_and_confidentiality_precede_execution():
67
+ body = text('process-lifecycle.md')
68
+ assert 'before freezing' in body
69
+ assert 'input-port' in body
70
+ assert 'Join' in body
71
+ assert 'first persistence boundary' in body
72
+ assert 'synthetic canary' in body
73
+ assert 'inactive creation' in body
74
+ assert 'downstream hashing' in body
75
+
76
+
77
+ def test_resume_and_inventory_rules_are_not_delete_and_retry():
78
+ body = text('operation-contract.md')
79
+ for term in ['returned page', 'unique stable IDs', 'not not-found',
80
+ 'Approval recording', 'checkpoint eligibility', 'actual execution',
81
+ 'one bounded next step', 'selected-phase', 'aggregate']:
82
+ assert term in body
83
+
84
+
85
+ def test_meta_gate_compares_independent_evidence_and_separate_layers():
86
+ body = ' '.join((ROOT / 'skills/agent-skill-engineer/references/field-gate-standard.md').read_text(encoding="utf-8").split())
87
+ for term in ['same erroneous intermediate', 'first persistence boundary',
88
+ 'offline assertions', 'causal skill improvement',
89
+ 'typed-null', 'checkpoint eligibility']:
90
+ assert term in body
91
+
92
+
93
+ def test_confidentiality_gate_is_reachable_for_exports_before_execute():
94
+ common = text('operation-contract.md')
95
+ assert 'Before a read, export or diagnostic fetch' in common
96
+ assert 'references/process-lifecycle.md' in common
97
+ transport = text('transport-environments.md')
98
+ assert transport.index('pre-acquisition confidentiality gate') < transport.index('## Execute')
99
+ assert 'inline secrets' in transport
100
+ assert 'references/process-lifecycle.md' in transport
@@ -0,0 +1,123 @@
1
+ """Development-corpus and instruction retention checks, not behavior/runtime proof."""
2
+ import hashlib
3
+ import json
4
+ from pathlib import Path
5
+ import re
6
+
7
+ ROOT = Path(__file__).resolve().parents[2]
8
+ SKILLS = ROOT / 'skills'
9
+ CORPUS = SKILLS / 'evals/field-closeout-development-v1.json'
10
+
11
+
12
+ def test_review_addendum_is_separate_and_fixed():
13
+ path = SKILLS / 'evals/field-closeout-correction-development-v1.json'
14
+ assert hashlib.sha256(path.read_bytes()).hexdigest() == (
15
+ 'b155396ca27300bd535e8da33bf32eb4ab4a4d73d6c30a30682c8b7130ff4dc8'
16
+ )
17
+ suite = json.loads(path.read_text(encoding='utf-8'))
18
+ assert suite['evidence_role'] == 'development_only_not_holdout'
19
+ assert suite['rubric_contract'] == 'fixed-jury-rubric-v2'
20
+ assert len(suite['cases']) == 1
21
+ case = suite['cases'][0]
22
+ for name in ('behavioral.json', 'field-boundary-development-v1.json',
23
+ 'field-closeout-development-v1.json'):
24
+ other = json.loads((SKILLS / 'evals' / name).read_text(encoding='utf-8'))
25
+ assert case['id'] not in {item['id'] for item in other['cases']}
26
+ assert case['expected_skill'] == 'procesio-cli'
27
+ rubric = case['expected_output']
28
+ assert rubric['rubric_version'] == 1
29
+ assert len(rubric['criteria']) == 4
30
+ assert len({c['id'] for c in rubric['criteria']}) == 4
31
+ for criterion in rubric['criteria']:
32
+ assert criterion['required'] is True
33
+ assert criterion['description'].startswith('Pass only when')
34
+
35
+
36
+ def body(relative):
37
+ return ' '.join((SKILLS / relative).read_text(encoding='utf-8').split())
38
+
39
+
40
+ def test_closeout_development_contract_is_frozen_and_separate():
41
+ assert hashlib.sha256(CORPUS.read_bytes()).hexdigest() == (
42
+ '566e18324c29eade65bf4a81044da1ae23306721d98a501ea29d585b7c49ac92'
43
+ )
44
+ suite = json.loads(CORPUS.read_text(encoding='utf-8'))
45
+ assert suite['evidence_role'] == 'development_only_not_holdout'
46
+ assert suite['rubric_contract'] == 'fixed-jury-rubric-v2'
47
+ cases = suite['cases']
48
+ ids = {case['id'] for case in cases}
49
+ assert len(ids) == len(cases) == 7
50
+ assert {'positive', 'pressure', 'negative', 'missing-context'} <= {
51
+ case['kind'] for case in cases
52
+ }
53
+ for name in ('behavioral.json', 'field-boundary-development-v1.json'):
54
+ other = json.loads((SKILLS / 'evals' / name).read_text(encoding='utf-8'))
55
+ assert not ids & {case['id'] for case in other['cases']}
56
+ assert not re.search(
57
+ r'[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}|Sentinel|scratchpad/',
58
+ CORPUS.read_text(encoding='utf-8'),
59
+ )
60
+ for case in cases:
61
+ assert (SKILLS / case['expected_skill'] / 'SKILL.md').is_file()
62
+ rubric = case['expected_output']
63
+ assert rubric['rubric_version'] == 1
64
+ criteria = rubric['criteria']
65
+ assert 2 <= len(criteria) <= 8
66
+ assert len({criterion['id'] for criterion in criteria}) == len(criteria)
67
+ for criterion in criteria:
68
+ assert re.fullmatch(r'[a-z][a-z0-9]*(?:_[a-z0-9]+)+', criterion['id'])
69
+ assert criterion['required'] is True
70
+ assert criterion['description'].startswith('Pass only when')
71
+
72
+
73
+ def test_safety_obligation_is_not_success_dependent():
74
+ field = body('agent-skill-engineer/references/field-gate-standard.md')
75
+ for term in ('safety containment', 'evidence-destroying cleanup',
76
+ 'independently of business-output decoding', 'existing approval',
77
+ 'does not pass the business gate'):
78
+ assert term in field
79
+ for path in ('agent-skill-engineer/SKILL.md',
80
+ 'agent-skill-engineer/references/evaluation-standard.md'):
81
+ text = body(path)
82
+ assert 'clean up only after' not in text
83
+ assert 'approved safety containment' in text
84
+ lifecycle = body('procesio-cli/references/process-lifecycle.md')
85
+ assert 'does not depend on successful output decoding' in lifecycle
86
+ assert 'separate approval' in lifecycle
87
+ assert 'evidence-destroying cleanup' in lifecycle
88
+ for name in ('form-e2e.md', 'schedules-webhooks.md'):
89
+ adjacent = body('procesio-cli/references/' + name)
90
+ assert 'separate approval' in adjacent
91
+ assert 'must not wait for successful output decoding' in adjacent
92
+ assert 'references/process-lifecycle.md' in adjacent
93
+
94
+
95
+ def test_comparison_rule_preserves_semantics_and_original_evidence():
96
+ text = body('procesio-cli/references/operation-contract.md')
97
+ for term in ('identity, authored semantics and representation',
98
+ 'versioned source contract', 'untouched original',
99
+ 'exact field paths', 'error bindings', 'Boolean/integer',
100
+ 'new attributable result'):
101
+ assert term in text
102
+
103
+
104
+ def test_observation_repair_does_not_require_reexecution():
105
+ text = body('agent-skill-engineer/references/field-gate-standard.md')
106
+ for term in ('existing attributable evidence', 'does not by itself establish',
107
+ 'valid observation of a missing required effect',
108
+ 'missing observation boundary', 'null is not zero'):
109
+ assert term in text
110
+
111
+
112
+ def test_diagnostic_stop_delivers_without_promoting_acceptance():
113
+ text = body('procesio-cli/references/operation-contract.md')
114
+ for term in ('smallest observation', 'stop condition', 'responsible owner',
115
+ 'clearly scoped artifact', 'not retroactive acceptance'):
116
+ assert term in text
117
+
118
+
119
+ def test_generalization_requires_transfer_and_boundary_control():
120
+ text = body('agent-skill-engineer/references/field-gate-standard.md')
121
+ for term in ('different domain', 'counterexample', 'must not apply',
122
+ 'development cases', 'not transfer-performance evidence'):
123
+ assert term in text
@@ -0,0 +1,76 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ import re
5
+
6
+ import yaml
7
+
8
+ ROOT = Path(__file__).resolve().parents[2]
9
+ META = ROOT / "skills" / "agent-skill-engineer"
10
+ SKILL = META / "SKILL.md"
11
+ STANDARD = META / "references" / "field-gate-standard.md"
12
+
13
+
14
+ def _frontmatter(path: Path) -> dict:
15
+ lines = path.read_text(encoding="utf-8").splitlines()
16
+ end = lines[1:].index("---") + 1
17
+ value = yaml.safe_load("\n".join(lines[1:end]))
18
+ assert isinstance(value, dict)
19
+ return value
20
+
21
+
22
+ def test_meta_skill_routes_field_trials_to_fixed_gate_standard():
23
+ skill = SKILL.read_text(encoding="utf-8")
24
+ frontmatter = _frontmatter(SKILL)
25
+
26
+ # The field contract landed in 2.0.1; later repairs must retain it, not
27
+ # keep an obsolete exact version merely to satisfy this regression test.
28
+ version = tuple(int(part) for part in frontmatter["version"].split("."))
29
+ assert len(version) == 3 and version >= (2, 0, 1)
30
+ assert frontmatter["baseline_version"] == "a47135373c4c0598391e808939397cd139234afd"
31
+ assert "`references/field-gate-standard.md`" in skill
32
+ assert "Host code—not the acting agent—decides pass" in skill
33
+ assert "full parent/child execution budget" in skill
34
+ assert "Never weaken a completed gate" in skill
35
+
36
+
37
+ def test_field_gate_standard_is_general_and_host_enforced():
38
+ text = STANDARD.read_text(encoding="utf-8")
39
+ normalized = " ".join(text.split())
40
+
41
+ for phrase in (
42
+ "ordered required check IDs",
43
+ "fingerprint of the complete skill package",
44
+ "including `SKILL.md`, references, scripts, and assets",
45
+ "The host computes the aggregate verdict",
46
+ "complete causal execution tree",
47
+ "A required outcome that fails is not converted into a gap",
48
+ "A phase verdict covers only that phase's frozen obligations",
49
+ "does not force every later phase to report `passed_with_gap`",
50
+ "compute and preserve both verdict scopes separately",
51
+ "Credential exposure is monotonic for the exposed credential",
52
+ "does not make a completed `no_secret_exposure` check true",
53
+ "prove the old value is rejected",
54
+ "invalidate stale exports or reports",
55
+ "preserve the original report",
56
+ "separately approved versioned remediation contract",
57
+ "Avoid case-specific overfitting",
58
+ "Project-specific ID, title, payload, or workaround",
59
+ ):
60
+ assert phrase in normalized
61
+
62
+ # General doctrine must not embed installation IDs or private evidence paths.
63
+ assert not re.search(r"[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}", text)
64
+ assert "scratchpad/" not in text
65
+
66
+
67
+ def test_review_and_evaluation_standards_fail_closed_on_field_gate_drift():
68
+ review = (META / "references" / "review-standard.md").read_text(encoding="utf-8")
69
+ evaluation = (META / "references" / "evaluation-standard.md").read_text(encoding="utf-8")
70
+
71
+ assert "acting agent invent required checks" in review
72
+ assert "complete causal execution counts" in review
73
+ assert "failed required field outcome" in review
74
+ assert "deterministic host code should validate exact IDs and order" in evaluation
75
+ assert "does not retroactively permit a gap" in evaluation
76
+ assert "full parent/child execution budget" in evaluation