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,230 @@
1
+ # Process-building patterns (generalized)
2
+
3
+ These patterns were distilled from a production PROCESIO workspace (form-driven request intake,
4
+ agent review, multi-party e-signing). They contain no client-specific values. Each entry gives the
5
+ pattern, the problem, the mechanics, when to use it and its pitfalls. **Refines** marks an entry that
6
+ sharpens or corrects a rule in `agents/procesio/PROCESIO-BEST-PRACTICES.md` (BP) or
7
+ `PROCESIO-BUILD-AND-TEST-PLAYBOOK.md` (PB).
8
+
9
+ ---
10
+
11
+ ## P1. Dual outcome flags for form bindings (`e_ok` + `e_not_ok`)
12
+ - **Problem:** a form output binding cannot negate a boolean, yet a result usually has to show one
13
+ element and hide another.
14
+ - **Mechanics:** declare two Boolean outputs with pessimistic defaults (`e_ok=false`,
15
+ `e_not_ok=true`). One Map Data at the very end of the happy path flips both. The form binds
16
+ `successPanel.visible ← e_ok` and `inputPanel.visible ← e_not_ok`. Any early exit (error port, empty
17
+ guard) leaves the defaults, so the UI shows the "not ok" state automatically.
18
+ - **When:** every process a form calls to decide visibility.
19
+ - **Pitfalls:** optimistic defaults (`e_ok=true`) turn every crash into a false success. Keep one
20
+ casing for boolean literals (`true`, not `True`). Inside JSON results, don't switch the name to
21
+ `e_notOk`.
22
+ - **Refines BP §9 / §5:** this is the cheapest way to surface failure to the user without extra calls.
23
+
24
+ ## P2. Render display blocks server-side as one inline-styled HTML string
25
+ - **Problem:** status cards, dashboards, receipts and error banners need rich layout, but forms only
26
+ bind scalars.
27
+ - **Mechanics:** a Node builds one root `<div>` with **inline styles only** (no `<style>`, no classes,
28
+ no JS), SVG icons inline, a palette constant object and `escapeHtml` on every value, then
29
+ `return html`. Bind it to `Paragraph.label`. For static messages a Map Data literal is enough.
30
+ - **When:** any read-only visual summary. The same builder can feed Generate Document for a PDF.
31
+ - **Pitfalls:** for HTML→PDF use tables + SVG, not flex/grid. Escape `'` too (`&#39;`) so the HTML
32
+ can later be stored through an `N'…'` SQL literal. Never let the node return null: render the error
33
+ into the HTML instead.
34
+
35
+ ## P3. Selector feeds as `{label, value}` lists
36
+ - **Problem:** select and dropdown controls need `sourceValue` in a fixed shape. DB rows don't have
37
+ that shape.
38
+ - **Mechanics:** one query per list, then one Node:
39
+ `(Array.isArray(rows)?rows:[]).map(r=>({label:r.X, value:r.X}))`. Put all lists for one form step
40
+ in **one** "render" process that returns every list plus the classification flags, so a single
41
+ click fills the whole step.
42
+ - **When:** any form step with more than one data-driven selector.
43
+ - **Pitfalls:** one Node per list is copy-paste. Write one Node that maps a dictionary of result
44
+ lists, or one SQL that returns every list as a JSON column. That also meets BP §10 (fewer actions).
45
+
46
+ ## P4. Whole-form-in, SPEC-driven reshaping server-side
47
+ - **Problem:** form element names change between form versions (`SelectN` / `InputN`, renamed ids).
48
+ Mapping in the form is brittle and spread across many places.
49
+ - **Mechanics:** pass the whole form instance (`instance / flow / fields`) as one JSON input. A single
50
+ Node holds a declarative SPEC object (`target.path: "Element.value"`) plus directives for the hard
51
+ cases:
52
+ - first available source among renamed elements
53
+ - repeating rows
54
+ - a value taken from the active branch of a cascading selector
55
+ - a value derived from section visibility
56
+
57
+ It also records `warnings[]`, a `SCRIPT_VERSION` marker, and `e_ok/errorMessage` inside a
58
+ try/catch.
59
+ - **When:** any form with more than about 20 fields that feeds a DB or document.
60
+ - **Pitfalls:**
61
+ - Keep exactly one copy of the engine (a Utils process). Forking it per flow produces divergent
62
+ versions.
63
+ - An automatic `SelectN`↔`InputN` fallback must be disabled where the twin id exists with a
64
+ different meaning.
65
+ - Inactive branches keep stale values, so read only from the branch the controlling selector
66
+ points to.
67
+
68
+ ## P5. Server-owned identity: overwrite the client-supplied key
69
+ - **Problem:** a form can send any id. The primary key must come from the server.
70
+ - **Mechanics:** right after reshaping, run Generate GUID **into the id attribute of the form object**
71
+ (Generate GUID can target an attribute path), then persist.
72
+ - **When:** every create/submit from a public or guest form.
73
+ - **Pitfalls:** return the generated id to the form (receipt number) so later steps (signature, file
74
+ uploads) are keyed to the same record.
75
+
76
+ ## P6. Validate in the stored procedure, persist the messages, then Throw
77
+ - **Problem:** business validation spread across Decisionals is slow and hard to keep in sync with
78
+ the DB.
79
+ - **Mechanics:** a single `EXEC <schema>.usp_…_Save @json` validates and writes in one transaction and
80
+ returns a status row: `e_ok`, the generated ids, and one row per validation message on failure. The
81
+ process branches on `e_ok`:
82
+ - failure: For Each message → insert into a validation-log table keyed by the request id →
83
+ `Throw` with a short message
84
+ - success: continue with side effects (files, documents, notifications)
85
+ - **When:** multi-table inserts from one form submit.
86
+ - **Pitfalls:**
87
+ - The SP commit is not atomic with the later side effects, so design for resume and make the
88
+ submit idempotent (dedupe key).
89
+ - Ids for branches that don't apply come back as the all-zero GUID. Branch on "non-empty AND not
90
+ the zero GUID".
91
+ - **Refines BP §2 (idempotency) and §8.**
92
+
93
+ ## P7. SQL values: bind, or at minimum escape in a Node first
94
+ - **Problem:** Execute Query text with `'{{var}}'` breaks on the first apostrophe in a name and is
95
+ injectable. It is worst when the value comes from a URL parameter.
96
+ - **Mechanics:**
97
+ - Preferred (BP §8): parameter binding.
98
+ - If a whole JSON object must be passed as one string, run a Node first:
99
+ `return { json_sql: JSON.stringify(obj).replace(/'/g,"''") }` and inject that into `N'…'`.
100
+ - Validate tokens and ids taken from URLs as GUIDs before they reach SQL.
101
+ - **When:** always.
102
+ - **Pitfalls:** escaping is easy to forget on the next process that copies the pattern (seen: one
103
+ submit path escaped, its sibling did not). Treat an unbound interpolation of user input as a defect
104
+ in review.
105
+ - **Refines BP §8:** adds the JSON-payload-to-SP case and the "URL-sourced value" severity.
106
+
107
+ ## P8. Guarded state transitions, then notify
108
+ - **Problem:** "accept" or "deny" buttons can be clicked twice or on stale data.
109
+ - **Mechanics:** `UPDATE … SET status='<next>' WHERE id=@id AND status='<expected>'`, check the
110
+ affected rows (or re-select), and only then send the e-mail. Flip `e_ok` only on a real transition.
111
+ - **When:** every workflow status change.
112
+ - **Pitfalls:** e-mailing before the guarded update notifies the customer about a transition that
113
+ never happened. A disabled status-update node leaves the item in the queue while the customer
114
+ believes it is closed. Keep status names in one place (lookup table or constants), not as literals
115
+ in every query.
116
+
117
+ ## P9. One click, one orchestrating process
118
+ - **Problem:** attaching several async RUN_PROCESS actions to one button causes races (a later status
119
+ overwritten by an earlier one, a refresh that reads before the writes).
120
+ - **Mechanics:** one process runs the steps in order (update → notify → re-read) and returns
121
+ everything the form needs. Use **Trigger Subprocess** only for side effects the user must not wait
122
+ for (e.g. notifying staff).
123
+ - **When:** any button whose steps depend on each other.
124
+ - **Pitfalls:** fire-and-forget hides failures. Log or flag them somewhere readable.
125
+ - **Refines BP §9:** parallel async calls feel fast but are only safe when independent.
126
+
127
+ ## P10. Tokenised signer links through hash-routed form URLs
128
+ - **Problem:** external signers need a personal link to one form page with their context.
129
+ - **Mechanics:**
130
+ - One shared request id plus a unique per-signer token column.
131
+ - Link = `https://<forms-host>/forms/<formId>#<pageId>?req_id=<token>`. The parameter sits **after
132
+ the `#`** because the form uses hash routing.
133
+ - Page load calls a "verify token" process: look up by token → documents + flags.
134
+ - Signing calls a "sign by token" process: store the signature, `status='signed'`.
135
+ - Status lifecycle: created → sent → signed → submitted (countersign).
136
+ - **When:** multi-party approval or signature without accounts.
137
+ - **Pitfalls:**
138
+ - The token is a bearer credential. Give it an expiry and one-time use, and never put it into SQL
139
+ unbound.
140
+ - Build the base URL from one setting. A literal copied into several e-mail templates and code
141
+ nodes drifts when the form is republished.
142
+ - **Refines BP "pre-fill controls from URL query params":** the hash-routing placement and the
143
+ security caveats.
144
+
145
+ ## P11. Business-day windows computed in code, with the calendar in Python
146
+ - **Problem:** a date picker must allow only dates that give staff N working days, bounded by the
147
+ validity of the current offer period.
148
+ - **Mechanics:**
149
+ - Python (has `zoneinfo`, `calendar`) prints the month's days
150
+ `{zi, data, ziuaSaptamanii, esteWeekend}` for the current and the target month.
151
+ - A Node merges both calendars into one sorted timeline keyed by date, counts the Nth working day
152
+ strictly after today, and returns `YYYY-MM-DDT00:00:00Z` or `""` when it falls past the period
153
+ end.
154
+ - The form binds min, max and default of the date input. An empty result swaps in an HTML "period
155
+ closed" banner (P2).
156
+ - **When:** any "earliest allowed date" rule.
157
+ - **Pitfalls:**
158
+ - Use the business's real timezone id.
159
+ - Include public holidays, not just weekends.
160
+ - Compare dates as `YYYY-MM-DD` strings or regex parts, not `new Date()` local getters (they shift
161
+ around midnight UTC).
162
+ - Put N and the timezone in one setting.
163
+
164
+ ## P12. Python action output is always `{"result": …}`
165
+ - **Problem:** a Python action's `print(x)` arrives as `{"result": "<x as string>"}`, sometimes
166
+ double-encoded.
167
+ - **Mechanics:** in the consuming Node, unwrap repeatedly: if string → `JSON.parse`; if object with
168
+ `result` → take `.result`; stop after about 5 levels. Or read `result` with Extract Objects when the
169
+ value is flat.
170
+ - **When:** every Python → JS hand-off.
171
+ - **Pitfalls:** interpolate strings into Python inside quotes (`'''{{v}}'''`). The value is injected
172
+ raw.
173
+
174
+ ## P13. Same script offline and in the platform
175
+ - **Problem:** big code nodes (renderers, parsers) are hard to debug inside the designer.
176
+ - **Mechanics:** write the node as a standalone file with a `LOCAL: node preview.js payload.json`
177
+ header. Treat an unreplaced placeholder (`/^<%[^%]*%>$/`) as empty, so the same text runs with
178
+ sample JSON locally and with bound variables in PROCESIO. Add a `SCRIPT_VERSION` constant to the
179
+ output.
180
+ - **When:** any node over about 100 lines.
181
+ - **Pitfalls:** placeholder-tolerance also hides a variable that was **never bound** (a literal
182
+ `<%name%>` left in the pasted code). After pasting, check that every placeholder became a bound
183
+ variable.
184
+
185
+ ## P14. Layout-tolerant spreadsheet parsing by label
186
+ - **Problem:** tariff or price sheets from third parties move rows and columns between editions.
187
+ - **Mechanics:**
188
+ - Read Range a generous block.
189
+ - A Node converts whatever shape comes back into a 2-D grid (array of arrays, row objects keyed by
190
+ letter or number, or a wrapper object).
191
+ - Locate blocks by label prefix (`findCell(grid,"total taxe")`) and read the values to the right.
192
+ - Parse numbers tolerantly (`"35,34 (note)"` → `35.34` + note).
193
+ - Emit a clean JSON document and pass it to one import SP.
194
+ - **When:** any inbound Excel from outside your control, especially via webhook.
195
+ - **Pitfalls:** keep the Read Range bounds and the comments in sync, or let the parser find the used
196
+ range. Protect the webhook with a header key that is compared to a value stored outside the process.
197
+
198
+ ## P15. File-to-PDF normaliser via template placeholder swap
199
+ - **Problem:** uploads arrive as PDF or image, and downstream needs a PDF.
200
+ - **Mechanics:** if the MIME type is already `application/pdf`, pass it through. Otherwise:
201
+ File To Base64 → render an HTML template containing a placeholder base64 image to an HTML string →
202
+ Replace the placeholder base64 with the upload's base64 → Generate Document from that HTML.
203
+ - **When:** ID cards, invoices, any user-uploaded proof.
204
+ - **Pitfalls:** non-image, non-PDF files (docx, heic) produce a broken image, so whitelist the MIME
205
+ types. Very large base64 values vanish when injected into Node code (BP field learning 3), which is
206
+ why the swap happens in Replace, not in JS.
207
+
208
+ ## P16. Shared-library hygiene for Utils
209
+ - **Problem:** helpers get copy-pasted into node after node: label/value mapper, first-row field
210
+ extractor, date formatter, HTML helpers, e-mail shell, entity load chain.
211
+ - **Mechanics:** anything pasted twice becomes a `Utils/ …` process with a typed contract, or one
212
+ multi-purpose Node that takes a dictionary of inputs. An identical load chain in three processes
213
+ becomes one "load aggregate by id" subprocess. Company contact and legal blocks, URLs, timezones and
214
+ lead times come from a single settings source.
215
+ - **When:** at the second copy.
216
+ - **Pitfalls:**
217
+ - Destructive admin utilities (bulk DELETE) do not belong in the production library.
218
+ - Empty stubs and disabled nodes should be deleted before handover.
219
+ - Two processes with the same title make subprocess binding ambiguous. Titles must be unique.
220
+ - **Refines BP §2 "Centralize parameters" / "Modularize"** with concrete extraction triggers.
221
+
222
+ ## P17. Every Decisional needs a Default that reports
223
+ - **Problem:** a Decisional with only positive cases dead-ends when no case matches. The run ends
224
+ with default outputs and the form cannot tell "no data" from "broken".
225
+ - **Mechanics:** always wire a Default to a Map Data that sets `e_not_ok` plus a readable error
226
+ (text or HTML banner), then route it to the common Join and the single Stop.
227
+ - **When:** every Decisional, especially classifiers (type A/B, energy X/Y, accept/deny).
228
+ - **Pitfalls:** error-port branches that go straight to a bare Stop have the same problem. Prefer
229
+ "set error → Join → Stop".
230
+ - **Refines BP §5.**
@@ -0,0 +1,287 @@
1
+ # Form patterns: generalized techniques (PROCESIO forms ↔ processes)
2
+
3
+ These patterns were distilled from a production multi-step form workspace. Only reusable mechanics
4
+ are kept here: no client, id or business value. Each pattern says how it relates to
5
+ `tools/procesio/FORM-DEV-GUIDE/`: **NEW** (not covered), **REFINES** (adds to or corrects a
6
+ section) or **CONFIRMS+** (covered, plus a field-tested detail).
7
+
8
+ ---
9
+
10
+ ## P1. Hidden status field as a JS → no-code bridge — NEW
11
+ - **Problem.** Validation logic lives in JavaScript, but the reaction (show a button, lock fields,
12
+ reveal a step) is easiest to express as MAP_FORM_DATA conditions. A JS block cannot stop or steer
13
+ the rest of an event chain.
14
+ - **Mechanics.** Add a number-input per step (`validation-of-<step>`) and hide it with CSS
15
+ (`display:none` on the control and, through `:has()`, on its wrapper). The JS block, placed before
16
+ the MAP blocks in the same click chain, computes pass or fail and writes `"1"` / `"0"` using the
17
+ **native value setter** (`Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value').set.call(input, v)`)
18
+ followed by `input`, `change` and `blur` events. The native setter plus events is what makes Vue's
19
+ `v-model` take the value. The next events are `MAP_FORM_DATA when validation-of-<step>.value EQUALS 1`
20
+ (success actions) and `EQUALS 0` (failure actions).
21
+ - **When.** Any rule too complex for MAP conditions (regex sets, cross-field rules, repeated rows)
22
+ whose outcome should drive no-code visibility or locking.
23
+ - **Pitfalls.**
24
+ - **A MAP in the SAME chain as the JS never sees the flag it just wrote** (verified live): input
25
+ values reach the model after a 500 ms debounce, so the first click always reads the old value
26
+ and users learn to click twice. Read the flag from a LATER chain, through the trigger field of
27
+ P2 (FORM-DEV-GUIDE 04 §16), never from the button's own chain.
28
+ - The field must be *rendered* for JS to find it, so hide it with CSS, not `visible=false` (a
29
+ hidden element is not in the DOM).
30
+ - Also re-check silently on later edits and reset the flag to 0, or a user can pass, edit and still
31
+ confirm.
32
+ - Make a "Modify" action reset the flag through MAP as well.
33
+
34
+ ## P2. Forward-only step unlocking: one-click Validate + Modify — NEW (supersedes the triad)
35
+ - **Current form (build new steps this way).** One **Validate** button per step. Its chain runs the
36
+ validator, then asks a global runtime to write the button's branch into a hidden
37
+ `step-flow-branch` field and increment a hidden `step-flow-trigger` field. That field's own
38
+ `onInput` chain holds one MAP per step and branch on `flag == 1 AND branch == <its branch>`:
39
+ lock the step, hide Validate, show **Modify**, reveal the next step. Its last JS block clicks
40
+ Next. The branch comes from the clicked button, never from a Boolean form variable (P3). **Modify**
41
+ unlocks the step, resets its flag, hides every later step and resets them to their first-pass
42
+ state. Measured at about 0.8 s from click to the next step. Recipe, rules and the renderer facts
43
+ behind it: FORM-DEV-GUIDE 04 §16. Wiring: `procesio form-set-element-chains`.
44
+ - **Legacy form (what production forms were built with).** The triad below needs three clicks per
45
+ step (validate twice because of the P1 pitfall, then confirm). Migrate it rather than copy it.
46
+ - **Problem.** The native stepper lets users move freely, and a step's data should be final before
47
+ the next step unlocks.
48
+ - **Mechanics (legacy triad).**
49
+ - Every step after the first is `visible=false` in the designer.
50
+ - Each step ends with three buttons: **Validate** (visible), **Modify** and **Confirm** (hidden).
51
+ - When Validate passes (P1): MAP sets `disabled=true` on every field of the step and shows Modify
52
+ and Confirm.
53
+ - Modify: re-enables the fields, resets the flag, hides Confirm.
54
+ - Confirm: `MAP set <next-step>.visible = true`, then a JS block clicks the stepper's own Next
55
+ (`.form-builder--stepper--buttons--next button`).
56
+ - The first step can be unlocked by a process instead (for example a "compute allowed date range"
57
+ process returns `e_ok` → `<step>.visible`).
58
+ - **When.** Long regulated forms: KYC, contracts, onboarding.
59
+ - **Pitfalls.**
60
+ - The lock and unlock field lists are hand-maintained in two MAP blocks. Generate or diff them,
61
+ because copy-paste slips (a field locked twice, another never locked, Modify hiding the wrong
62
+ button) are the typical bug.
63
+ - The programmatic Next still passes through any capture-phase Next guard (P6), which is
64
+ intentional.
65
+
66
+ ## P3. Server-side "render" process drives visibility and options — NEW
67
+ - **Problem.** Which blocks, selects and validate buttons appear depends on a few configuration
68
+ choices (applicant type × product type × date), and option lists are master data.
69
+ - **Mechanics.** One process takes the configuration selects and returns primitive Booleans
70
+ (`isA`, `isB`…) plus JSON option lists. The outputMap fans **one Boolean out to many targets**:
71
+ a form variable (for later conditions), `visible` of each block, and `visible` of that branch's
72
+ Validate button. Each option list goes to a select's `sourceValue`, and one list can feed several
73
+ selects.
74
+ - **When.** More than two or three configuration axes, or options that must stay in sync with a DB.
75
+ - **Pitfalls.**
76
+ - **Never test these Boolean variables with `IS_TRUE` / `IS_FALSE`.** The designer default is the
77
+ TEXT "False"/"false", and a condition reads any non-empty text as true (measured live). Until
78
+ the process result lands, every `isX IS_TRUE` passes, so exclusive branches all run. Give the
79
+ variables a `null` default, or branch with `EQUALS` on the source select. `formlint` flags it.
80
+ - If later events in the **same** chain read the form variables this process writes, the process
81
+ must be `syncRun:true`, or they read the previous values (see P13).
82
+ - Feed downstream processes from the source selects, not from the derived variables.
83
+
84
+ ## P4. Outcome flag pair (`e_ok` / `e_not_ok`) → screen swap — NEW
85
+ - **Problem.** Show a result screen or keep the input screen after an action, without JS.
86
+ - **Mechanics.** Every action process declares two Boolean outputs, `e_ok` (default **false**) and
87
+ `e_not_ok` (default **true**), and sets them at the end. The outputMap writes `e_ok` → `visible` of
88
+ the success section and `e_not_ok` → `visible` of the input section or stepper (or of a "retry"
89
+ button).
90
+ - **When.** Any submit, accept or deny, or sign action.
91
+ - **Pitfalls.**
92
+ - Keep the defaults pessimistic. A process that stops early then leaves the form on the input
93
+ screen instead of showing a false success.
94
+ - Keep one spelling across the workspace (`e_not_ok`, not `e_noOk` / `e_notOk`), or outputMaps
95
+ silently target nothing.
96
+ - Never map a Boolean into a file or value slot.
97
+
98
+ ## P5. Cross-step value store read from the Vue model — REFINES 02 §7 / 04 §1
99
+ - **Problem.** The renderer destroys other steps' controls (`v-if`), so client-side validation or a
100
+ semantic payload spanning steps cannot read their DOM. `ProcesioForm.data.fields` is incomplete
101
+ for some props (08 "info-text").
102
+ - **Mechanics.** Walk the Vue 3 vnode tree from every element carrying `_vnode`
103
+ (`vnode.component` → `component.subTree` → `children`, depth-capped). For each component with
104
+ `props.modelValue`, match it to a field wrapper by DOM containment (`wrap === el ||
105
+ wrap.contains(el)`). For each id in an explicit `FIELD_IDS` list, store the model value when the
106
+ field is rendered (even when it is empty, since the model is the truth) and keep the last known
107
+ value when it is not. Fall back to the DOM value (`checked` for checkboxes). Refresh on a debounced
108
+ capture listener (`input/change/click/focusout`) and on every `get()`. Expose
109
+ `get()/json()/values` on `window.parent`.
110
+ - **When.** Multi-step forms whose validation or payload needs values from earlier steps.
111
+ - **Pitfalls.**
112
+ - `FIELD_IDS` must be the **union** of all steps and **identical** wherever the script is attached.
113
+ With two copies at the same version and different lists, the first installed wins and later
114
+ fields are never collected.
115
+ - Dynamic-table rows repeat ids, so read them separately (P9).
116
+ - Internals (`_vnode`, `modelValue`) are undocumented. Guard every access.
117
+
118
+ ## P6. Rules-table client validator with step scoping and a Next click-guard — CONFIRMS+ 04 §7 / §15
119
+ - **Mechanics.**
120
+ - `RULES = { <fieldId>: {required, regex, regexMessage, when(values), optional, date, stripSpaces} }`.
121
+ - Only fields **currently rendered** are validated, which scopes validation per step for free.
122
+ - `when` handles conditional branches (for example document type A vs B).
123
+ - `optional` means "validate the format only if filled". `date:true` means "any parseable date".
124
+ Date values arrive as ISO, display text or Date objects depending on the read path, so a strict
125
+ ISO regex gives false negatives.
126
+ - `stripSpaces` suits bank or ID numbers typed in groups.
127
+ - Treat arrays, selector option objects (`{label/value}`) and file objects (`{id,name}`) as filled
128
+ when they have content. A naive `String(value)` check marks them empty.
129
+ - Errors render under the field, scroll to the first one and clear on edit (only for fields
130
+ already in error, so the user is not scolded at the first keystroke).
131
+ - A document **capture** click listener on the stepper's Next blocks navigation on failure and
132
+ hides any loader.
133
+ - Also expose semantic payload builders whose keys equal the ones the process-side code expects,
134
+ so the client and server share one vocabulary.
135
+ - **Pitfalls.**
136
+ - Port the regexes from the server-side validation and keep them in sync.
137
+ - See P12 for versioning.
138
+
139
+ ## P7. Global branded loader API bracketing every process chain — REFINES 05 §5
140
+ - **Problem.** Async processes give no feedback, and chains mix JS, process and MAP events.
141
+ - **Mechanics.**
142
+ - Form-level JS defines `window.parent.__<name>Loader = {show(text,{unsafe,timeout,timeoutMessage}), hide()}`.
143
+ The overlay and style are injected once by id into the parent document.
144
+ - Every chain that triggers a process is bracketed: first event `RUN_JAVASCRIPT show('<message>')`,
145
+ last event `RUN_JAVASCRIPT hide()`, or the navigation block that hides in `finally`.
146
+ - An optional `unsafe` timeout switches the overlay to a warning state and auto-closes it.
147
+ - **When.** Any form whose processes take over a second.
148
+ - **Pitfalls.**
149
+ - `hide()` at the end of a chain whose processes are **async** fires before the result arrives,
150
+ so the loader only covers the launch. Use `syncRun:true` when the loader must cover the work.
151
+ - Every guard that blocks a click must also call `hide()`, or the veil stays up (08 "loader never
152
+ lifts").
153
+ - The element-script `try/catch` around `window.parent.__loader` keeps forms without the loader
154
+ working.
155
+
156
+ ## P8. Programmatic Next + multi-point scroll reset — REFINES 04 §14
157
+ - **Mechanics.**
158
+ - Click the stepper's own Next button instead of changing the step index.
159
+ - Then reset scroll on every candidate (parent window, `top`, `document.scrollingElement`, and any
160
+ element with `scrollTop>0 && scrollHeight>clientHeight`) at several delays (≈100/400/900 ms)
161
+ to catch the async re-render.
162
+ - **Skip** the reset when a validation error element exists, because the validator has already
163
+ scrolled to the error.
164
+ - **Pitfalls.** The frame hierarchy decides which element scrolls, which is why every candidate is
165
+ reset.
166
+
167
+ ## P9. Repeated-id rows: pick the visible instance, iterate rows by cell order — CONFIRMS+ 04 §15
168
+ - **Mechanics.** Dynamic-table rows repeat the child's DOM id. Use `querySelectorAll('[id="x"]')`
169
+ and keep the instance with `offsetParent!==null || offsetWidth>0`. For per-row work, find the
170
+ enclosing `tr` / `[role=row]` and read the cells in `tableColumnsSourceValue` order. Fall back to
171
+ row text plus regex when the cell count does not match.
172
+ - **Pitfalls.** Keep row inputs out of the scalar collector and validate them per row instance.
173
+
174
+ ## P10. Whole-form object → declarative SPEC mapper Node — NEW
175
+ - **Problem.** A final submit needs ~150 fields reshaped into a semantic JSON. Mapping each field to
176
+ a process input is unmaintainable.
177
+ - **Mechanics.**
178
+ - Map the special source `form` into one JSON process input. It carries `fields.<ElementName>…`
179
+ plus `instance.*` / `flow.*`.
180
+ - A reusable subprocess Node holds a SPEC: target keys mapped to source strings like
181
+ `"Input2.value"` or `"FileUpload1.value.id"`, with annotations after " =" or " (" ignored.
182
+ - Directives handle the irregular cases: an array from table rows, "first available of A|B",
183
+ "value of the active sub-select chosen by another select".
184
+ - A guarded fallback (`SelectN` ↔ `InputN`) is used **only when the source is missing**, and every
185
+ use is reported in `warnings`.
186
+ - Dates are normalized. A `SCRIPT_VERSION` marker is emitted in the output so the running version
187
+ is visible in instance data.
188
+ - **When.** Any large form submit, and any process shared by several variants of the same form.
189
+ - **Pitfalls.**
190
+ - Field keys are element **names**, so a duplicate name silently collides.
191
+ - Names can be re-derived in lower case after a designer save (see `PROCESIO-API-NOTES.md`), so
192
+ resolve case-insensitively.
193
+ - Files needed as `File` inputs should still be mapped explicitly.
194
+
195
+ ## P11. Process-built HTML into a paragraph label — NEW
196
+ - **Mechanics.** A Node builds a self-contained, **inline-styled** HTML string (counts, percentage
197
+ bars, inline SVG icons) and returns it as a String output mapped to a paragraph's `label`. Static
198
+ decoration (separators, section cards, footers) uses the same trick directly in designer labels.
199
+ - **When.** Read-only dashboards, extraction summaries and status cards, with no JS needed.
200
+ - **Pitfalls.**
201
+ - Only inline styles are reliable, because the page CSS may not target injected markup (08 "A
202
+ `<div>` written into a paragraph…").
203
+ - Escape any user or DB text you interpolate, since the label is rendered as HTML.
204
+
205
+ ## P12. Versioned idempotent installers for element-event scripts — REFINES 02 §4–5
206
+ - **Mechanics.**
207
+ - Each shared script family installs itself on `window.parent.__<family>` with a numeric `v`.
208
+ - The guard is "install if missing or `v` differs". It runs its action on every execution: install
209
+ once, act every click.
210
+ - Iron rule: guard version == exported version, and one file identical everywhere it is attached.
211
+ - **Pitfalls (observed).**
212
+ - If different buttons carry **different versions**, every step reinstalls. The old document
213
+ listeners are never removed, so N runtimes then run per click and keystroke.
214
+ - Header comments drift from the runtime `v`.
215
+ - A shared style tag guarded by one id keeps the **first** version's CSS.
216
+ - Prefer the form-level injected-runtime pattern (02 §4), or at minimum keep one canonical file and
217
+ diff all attachments before publishing.
218
+ - Listeners created in the sandbox realm are more fragile than an injected `<script>` in the
219
+ parent.
220
+
221
+ ## P13. Async RUN_PROCESS: outputs do land, but the chain does not wait — REFINES 06 §1 / 08 "outputMap populates nothing"
222
+ - **Observation.** Production forms here map dozens of outputs from `syncRun:false` events (71 async
223
+ events against 12 sync) and depend on them for visibility and tables. This matches
224
+ `PROCESIO-API-NOTES.md`: async outputs **arrive later**. It contradicts the guide's "fire and
225
+ forget, outputMap can never populate" and should be re-verified live.
226
+ - **Rule.** Async is fine when the outputs only paint the UI. Use `syncRun:true` whenever a **later
227
+ event in the same chain** (MAP condition, JS, another process's inputMap) reads those outputs, or
228
+ when a loader or Next must wait for them.
229
+ - **Pitfall.** Several async processes on one click (status change + notify + refresh) have no
230
+ ordering guarantee. Chain them inside one process instead.
231
+
232
+ ## P14. File outputs: `src` to preview, upload `value` to download or carry — NEW
233
+ - **Mechanics.** Map a generated or fetched File output to a file-viewer's `src` (preview) **and** to
234
+ a file-upload's `value`. The upload then acts as a download link or holds the file so a later
235
+ event can pass it on as a File input. For uploads, pair the extraction process with a
236
+ "convert to PDF" process on the same trigger so the preview works for photos too.
237
+ - **Pitfalls.** Keep outputMap targets pointed at existing elements. A deleted viewer leaves a raw
238
+ path target that fails silently.
239
+
240
+ ## P15. Row object as process input (master/detail) with an explicit reset — NEW
241
+ - **Mechanics.**
242
+ - A button inside a dynamic row maps `DynamicRowN.$.item` (the whole row object) into a JSON or
243
+ typed process input.
244
+ - The detail process returns files and flags. A MAP swaps the list section for the detail section
245
+ and copies the row into a form variable for later actions.
246
+ - A "back" button re-loads the list and runs **one MAP that clears every field, viewer and
247
+ visibility the detail view set**.
248
+ - **Pitfalls.**
249
+ - Ship only the columns needed. Whole DB rows in a table reach the browser.
250
+ - Conditions on detail outputs need `syncRun:true` (P13).
251
+
252
+ ## P16. Identity gate via FORM_LOAD → exclusive sections — NEW (with a security caveat)
253
+ - **Mechanics.** FORM_LOAD passes `instance.currentUser.email/name` to a process that returns
254
+ mutually exclusive Booleans (anonymous / known-but-unregistered / pending / approved), mapped to
255
+ `visible` of four sections (or of the stepper).
256
+ - **Pitfall (critical).** `visible` is presentation, not authorization. Any data-loading process on
257
+ the same FORM_LOAD still runs and ships its outputs to the browser. Load protected data only in a
258
+ process that re-checks the current user itself and returns nothing otherwise.
259
+ - A condition does not fix that either. `when isConfirmed IS_TRUE` on the data-loading event is
260
+ evaluated on the variable's default, the TEXT "false", which a condition reads as true (measured
261
+ live, P3). The load therefore runs for every visitor, and a correct condition would still be only
262
+ a browser-side check.
263
+
264
+ ## P17. CSS by attribute-id families — NEW
265
+ - **Mechanics.** Style with `[id="…"]` and prefix families (`[id^="separator"]`,
266
+ `[id^="button-header-"]`) inside `:is()`. Class-level specificity is kept, and decorative elements
267
+ intentionally share ids so a new one inherits its styling. Hide helper fields on the control and
268
+ on its wrapper through `:has(> …)` / `:has(> * > …)` so no empty row remains. Every rule is
269
+ `!important` against the builder's styles.
270
+ - **Pitfalls.**
271
+ - Duplicate **ids** are fine for decoration only. Keep element **names** unique.
272
+ - Never reuse a decorative id prefix for a field.
273
+
274
+ ## P18. Process-computed input constraints — NEW
275
+ - **Mechanics.** A load-time or click-time process returns `start_date`, `end_date`, `error` and
276
+ `e_not_ok`, mapped to a datetime input's `minValue`, `maxValue`, `defaultValue` and `readonly`,
277
+ and to an error paragraph `label`. Business calendars stay server-side.
278
+
279
+ ## P19. Public token-addressed signing form — NEW
280
+ - **Mechanics.** An email link opens a public form with the token prefilled into an input inside a
281
+ hidden section. FORM_LOAD verifies the token and returns the documents to viewers plus `e_ok` →
282
+ section visible. The signature-pad value (a File) plus the token go to a signing process, and a
283
+ flag pair swaps to a thank-you section.
284
+ - **Pitfalls.**
285
+ - The token is attacker-controlled. Never interpolate it into SQL: use parameters or validate the
286
+ format.
287
+ - Make tokens single-use and expiring.