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.
- procesio_cli/__init__.py +18 -0
- procesio_cli/_cli.py +71 -0
- procesio_cli/agents/__init__.py +0 -0
- procesio_cli/agents/_lib/__init__.py +0 -0
- procesio_cli/agents/_lib/actiondef.py +24 -0
- procesio_cli/agents/_lib/errors.py +40 -0
- procesio_cli/agents/_lib/reversibility.py +236 -0
- procesio_cli/agents/_lib/toolrunner.py +141 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PLAYBOOK.md +62 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-PROCESIO-INTEROP.md +76 -0
- procesio_cli/agents/connector-builder/CONNECTOR-BUILDER-TROUBLESHOOTING.md +60 -0
- procesio_cli/agents/connector-builder/README.md +51 -0
- procesio_cli/agents/connector-builder/agent.yaml +61 -0
- procesio_cli/agents/connector-builder/context.py +19 -0
- procesio_cli/agents/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/agents/connector-builder/handlers/checklist.py +71 -0
- procesio_cli/agents/connector-builder/handlers/guidance.py +37 -0
- procesio_cli/agents/connector-builder/handlers/nextstep.py +221 -0
- procesio_cli/agents/connector-builder/handlers/status.py +35 -0
- procesio_cli/agents/connector-builder/knowledge.py +47 -0
- procesio_cli/agents/connector-builder/main.py +93 -0
- procesio_cli/agents/connector-builder/tests/conftest.py +95 -0
- procesio_cli/agents/connector-builder/tests/test_cba_agent.py +148 -0
- procesio_cli/agents/orchestrator/__init__.py +0 -0
- procesio_cli/agents/orchestrator/bootstraplib.py +166 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/00-INDEX.md +60 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/01-PROCESSES.md +230 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/02-FORMS.md +287 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/03-INTEGRATIONS.md +384 -0
- procesio_cli/agents/procesio/IMPLEMENTATION-PATTERNS/04-DATABASE.md +293 -0
- procesio_cli/agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md +113 -0
- procesio_cli/agents/procesio/PROCESIO-BEST-PRACTICES.md +316 -0
- procesio_cli/agents/procesio/PROCESIO-BUILD-AND-TEST-PLAYBOOK.md +217 -0
- procesio_cli/agents/procesio/PROCESIO-DATASTORE.md +72 -0
- procesio_cli/agents/procesio/PROCESIO-ENVIRONMENTS.md +62 -0
- procesio_cli/agents/procesio/PROCESIO-SCHEDULING.md +47 -0
- procesio_cli/agents/procesio/PROCESIO-VISUAL-ORGANIZATION.md +175 -0
- procesio_cli/agents/procesio/README.md +97 -0
- procesio_cli/agents/procesio/__init__.py +0 -0
- procesio_cli/agents/procesio/agent.yaml +73 -0
- procesio_cli/agents/procesio/audit.py +226 -0
- procesio_cli/agents/procesio/checklist.py +135 -0
- procesio_cli/agents/procesio/context.py +19 -0
- procesio_cli/agents/procesio/handlers/__init__.py +0 -0
- procesio_cli/agents/procesio/handlers/audit.py +39 -0
- procesio_cli/agents/procesio/handlers/checklist.py +34 -0
- procesio_cli/agents/procesio/handlers/guidance.py +36 -0
- procesio_cli/agents/procesio/handlers/status.py +33 -0
- procesio_cli/agents/procesio/handlers/verify.py +39 -0
- procesio_cli/agents/procesio/knowledge.py +115 -0
- procesio_cli/agents/procesio/main.py +89 -0
- procesio_cli/agents/procesio/tests/__init__.py +0 -0
- procesio_cli/agents/procesio/tests/conftest.py +62 -0
- procesio_cli/agents/procesio/tests/test_audit.py +91 -0
- procesio_cli/agents/procesio/tests/test_checklist.py +28 -0
- procesio_cli/agents/procesio/tests/test_guidance.py +78 -0
- procesio_cli/agents/procesio/tests/test_manifest_sync.py +48 -0
- procesio_cli/agents/procesio/tests/test_verify.py +134 -0
- procesio_cli/agents/procesio/tests/test_workspace_scope.py +97 -0
- procesio_cli/agents/procesio/verifylib.py +222 -0
- procesio_cli/dashboard/README.md +117 -0
- procesio_cli/dashboard/__init__.py +18 -0
- procesio_cli/dashboard/serve.py +98 -0
- procesio_cli/dashboard/server/__init__.py +1 -0
- procesio_cli/dashboard/server/config_schemas.py +92 -0
- procesio_cli/dashboard/server/google.py +103 -0
- procesio_cli/dashboard/server/handler.py +160 -0
- procesio_cli/dashboard/server/inventory.py +213 -0
- procesio_cli/dashboard/server/jobs.py +118 -0
- procesio_cli/dashboard/server/llmtest.py +181 -0
- procesio_cli/dashboard/server/procesio_env.py +94 -0
- procesio_cli/dashboard/server/routes.py +74 -0
- procesio_cli/dashboard/server/runner.py +150 -0
- procesio_cli/dashboard/server/security.py +29 -0
- procesio_cli/dashboard/server/setup.py +211 -0
- procesio_cli/dashboard/server/validate.py +152 -0
- procesio_cli/dashboard/tests/conftest.py +16 -0
- procesio_cli/dashboard/tests/test_dashboard.py +225 -0
- procesio_cli/dashboard/tests/test_procesio_env.py +159 -0
- procesio_cli/dashboard/web/actions.js +274 -0
- procesio_cli/dashboard/web/api.js +79 -0
- procesio_cli/dashboard/web/app.js +385 -0
- procesio_cli/dashboard/web/copilot.js +72 -0
- procesio_cli/dashboard/web/google.js +121 -0
- procesio_cli/dashboard/web/index.html +67 -0
- procesio_cli/dashboard/web/procesio_env.js +187 -0
- procesio_cli/dashboard/web/styles.css +207 -0
- procesio_cli/registry.py +370 -0
- procesio_cli/scripts/build-router.py +249 -0
- procesio_cli/scripts/build-tool-skill.py +202 -0
- procesio_cli/scripts/check-requirements.py +131 -0
- procesio_cli/scripts/check-skill-governance.py +174 -0
- procesio_cli/scripts/evaluate-skill-routing.py +217 -0
- procesio_cli/scripts/evaluate-skills.py +316 -0
- procesio_cli/scripts/get-skill.py +122 -0
- procesio_cli/scripts/list-skills.py +68 -0
- procesio_cli/scripts/list-tools.py +73 -0
- procesio_cli/scripts/run-agent.py +59 -0
- procesio_cli/scripts/run-tool.py +123 -0
- procesio_cli/scripts/secret_scan.py +584 -0
- procesio_cli/scripts/set-credential.py +126 -0
- procesio_cli/scripts/validate-skills.py +530 -0
- procesio_cli/skills/PORTFOLIO.md +134 -0
- procesio_cli/skills/__init__.py +6 -0
- procesio_cli/skills/agent-skill-engineer/SKILL.md +226 -0
- procesio_cli/skills/agent-skill-engineer/evals/evals.json +422 -0
- procesio_cli/skills/agent-skill-engineer/references/authoring-standard.md +178 -0
- procesio_cli/skills/agent-skill-engineer/references/decision-framework.md +107 -0
- procesio_cli/skills/agent-skill-engineer/references/domain-evidence-protocol.md +248 -0
- procesio_cli/skills/agent-skill-engineer/references/evaluation-standard.md +191 -0
- procesio_cli/skills/agent-skill-engineer/references/expert-lenses.md +167 -0
- procesio_cli/skills/agent-skill-engineer/references/field-gate-standard.md +231 -0
- procesio_cli/skills/agent-skill-engineer/references/optimization-protocol.md +233 -0
- procesio_cli/skills/agent-skill-engineer/references/optimizer-contract.md +268 -0
- procesio_cli/skills/agent-skill-engineer/references/portability-standard.md +99 -0
- procesio_cli/skills/agent-skill-engineer/references/research-basis.md +128 -0
- procesio_cli/skills/agent-skill-engineer/references/review-standard.md +143 -0
- procesio_cli/skills/agent-skill-engineer/scripts/audit_skill.py +959 -0
- procesio_cli/skills/agent-skill-engineer/scripts/optimize_skill.py +891 -0
- procesio_cli/skills/agent-skill-engineer/scripts/scaffold_skill.py +397 -0
- procesio_cli/skills/evals/baseline-catalog.json +14 -0
- procesio_cli/skills/evals/baseline-routing-v2.json +38 -0
- procesio_cli/skills/evals/baseline.json +37 -0
- procesio_cli/skills/evals/behavioral.json +367 -0
- procesio_cli/skills/evals/field-boundary-development-v1.json +126 -0
- procesio_cli/skills/evals/field-closeout-correction-development-v1.json +23 -0
- procesio_cli/skills/evals/field-closeout-development-v1.json +89 -0
- procesio_cli/skills/evals/portfolio-pressure-training-v1.json +83 -0
- procesio_cli/skills/evals/routing.json +363 -0
- procesio_cli/skills/evals/validation-baseline.json +4 -0
- procesio_cli/skills/procesio-cli/SKILL.md +134 -0
- procesio_cli/skills/procesio-cli/evals/evals.json +111 -0
- procesio_cli/skills/procesio-cli/evals/workflows.json +16 -0
- procesio_cli/skills/procesio-cli/references/connector-lifecycle.md +47 -0
- procesio_cli/skills/procesio-cli/references/credentials-admin.md +113 -0
- procesio_cli/skills/procesio-cli/references/data-verification.md +71 -0
- procesio_cli/skills/procesio-cli/references/documents-files.md +44 -0
- procesio_cli/skills/procesio-cli/references/form-e2e.md +57 -0
- procesio_cli/skills/procesio-cli/references/operation-contract.md +138 -0
- procesio_cli/skills/procesio-cli/references/process-debugging.md +65 -0
- procesio_cli/skills/procesio-cli/references/process-lifecycle.md +88 -0
- procesio_cli/skills/procesio-cli/references/schedules-webhooks.md +58 -0
- procesio_cli/skills/procesio-cli/references/transport-environments.md +53 -0
- procesio_cli/skills/procesio-cli-maintainer/SKILL.md +84 -0
- procesio_cli/skills/procesio-cli-maintainer/evals/evals.json +116 -0
- procesio_cli/skills/procesio-cli-maintainer/references/change-contract.md +34 -0
- procesio_cli/skills/procesio-cli-maintainer/references/mcp-compatibility.md +13 -0
- procesio_cli/skills/procesio-cli-maintainer/references/skill-authoring.md +51 -0
- procesio_cli/skills/procesio-platform-advisor/SKILL.md +82 -0
- procesio_cli/skills/procesio-platform-advisor/evals/evals.json +116 -0
- procesio_cli/skills/procesio-platform-advisor/references/capability-map.md +22 -0
- procesio_cli/skills/procesio-platform-advisor/references/fit-framework.md +35 -0
- procesio_cli/skills/procesio-platform-advisor/references/freshness-policy.md +25 -0
- procesio_cli/skills/procesio-platform-advisor/references/sizing-method.md +70 -0
- procesio_cli/skills/procesio-platform-advisor/scripts/estimate_capacity.py +99 -0
- procesio_cli/skills/procesio-setup/SKILL.md +180 -0
- procesio_cli/skills/sql-server-optimizer/SKILL.md +86 -0
- procesio_cli/skills/sql-server-optimizer/evals/evals.json +116 -0
- procesio_cli/skills/sql-server-optimizer/references/db-context.md +44 -0
- procesio_cli/skills/sql-server-optimizer/references/generic-mode.md +32 -0
- procesio_cli/skills/sql-server-optimizer/references/procesio-mode.md +40 -0
- procesio_cli/skills/sql-server-optimizer/references/sql-rules.md +43 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-indexes.sql +178 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-procs-and-functions.sql +118 -0
- procesio_cli/skills/sql-server-optimizer/scripts/export-tables.sql +367 -0
- procesio_cli/skills/tests/__init__.py +0 -0
- procesio_cli/skills/tests/test_agent_skill_engineer.py +240 -0
- procesio_cli/skills/tests/test_auth_failure_stop.py +25 -0
- procesio_cli/skills/tests/test_capacity_estimator.py +85 -0
- procesio_cli/skills/tests/test_field_boundary_learning.py +100 -0
- procesio_cli/skills/tests/test_field_closeout_learning.py +123 -0
- procesio_cli/skills/tests/test_field_gate_standard.py +76 -0
- procesio_cli/skills/tests/test_operational_playbooks.py +51 -0
- procesio_cli/skills/tests/test_portfolio_pressure_training.py +35 -0
- procesio_cli/skills/tests/test_process_lifecycle_single_run.py +25 -0
- procesio_cli/skills/tests/test_skill_evaluator.py +67 -0
- procesio_cli/skills/tests/test_skill_optimizer.py +473 -0
- procesio_cli/skills/tests/test_skill_portfolio_review.py +70 -0
- procesio_cli/skills/tests/test_skill_release_binding.py +204 -0
- procesio_cli/skills/tests/test_skill_routing.py +74 -0
- procesio_cli/skills/tests/test_skill_scaffold_v2.py +116 -0
- procesio_cli/skills/tests/test_validate_skills.py +115 -0
- procesio_cli/tools/__init__.py +0 -0
- procesio_cli/tools/_lib/README.md +119 -0
- procesio_cli/tools/_lib/__init__.py +0 -0
- procesio_cli/tools/_lib/accounting.py +120 -0
- procesio_cli/tools/_lib/contacts.py +544 -0
- procesio_cli/tools/_lib/creds.py +83 -0
- procesio_cli/tools/_lib/creds_backends.py +578 -0
- procesio_cli/tools/_lib/dbprofiles.py +147 -0
- procesio_cli/tools/_lib/dbquery.py +286 -0
- procesio_cli/tools/_lib/dbschema.py +225 -0
- procesio_cli/tools/_lib/io.py +54 -0
- procesio_cli/tools/_lib/manifest.py +297 -0
- procesio_cli/tools/_lib/skill_release.py +127 -0
- procesio_cli/tools/_lib/skill_resources.py +118 -0
- procesio_cli/tools/_lib/userdata.py +228 -0
- procesio_cli/tools/_lib/webserialize/__init__.py +16 -0
- procesio_cli/tools/_lib/webserialize/admin.py +61 -0
- procesio_cli/tools/_lib/webserialize/client.py +264 -0
- procesio_cli/tools/_lib/webserialize/config.py +96 -0
- procesio_cli/tools/_lib/webserialize/errors.py +27 -0
- procesio_cli/tools/_lib/webserialize/framing.py +45 -0
- procesio_cli/tools/_lib/webserialize/registry.py +47 -0
- procesio_cli/tools/_lib/webserialize/runtime.py +61 -0
- procesio_cli/tools/_lib/webserialize/server.py +510 -0
- procesio_cli/tools/_lib/websession.py +194 -0
- procesio_cli/tools/connector-builder/CONNECTOR-BUILDER-API-NOTES.md +91 -0
- procesio_cli/tools/connector-builder/README.md +101 -0
- procesio_cli/tools/connector-builder/SKILL.md +248 -0
- procesio_cli/tools/connector-builder/__init__.py +7 -0
- procesio_cli/tools/connector-builder/actiondef.py +24 -0
- procesio_cli/tools/connector-builder/client.py +251 -0
- procesio_cli/tools/connector-builder/errors.py +44 -0
- procesio_cli/tools/connector-builder/gen_manifest.py +142 -0
- procesio_cli/tools/connector-builder/handlers/__init__.py +1 -0
- procesio_cli/tools/connector-builder/handlers/admin.py +182 -0
- procesio_cli/tools/connector-builder/handlers/auth.py +74 -0
- procesio_cli/tools/connector-builder/handlers/builds.py +396 -0
- procesio_cli/tools/connector-builder/handlers/common.py +104 -0
- procesio_cli/tools/connector-builder/handlers/files.py +111 -0
- procesio_cli/tools/connector-builder/handlers/raw.py +38 -0
- procesio_cli/tools/connector-builder/handlers/telemetry.py +39 -0
- procesio_cli/tools/connector-builder/main.py +94 -0
- procesio_cli/tools/connector-builder/tests/conftest.py +146 -0
- procesio_cli/tools/connector-builder/tests/test_cb_client.py +86 -0
- procesio_cli/tools/connector-builder/tests/test_cb_dispatch.py +105 -0
- procesio_cli/tools/connector-builder/tests/test_cb_manifest_sync.py +76 -0
- procesio_cli/tools/connector-builder/tests/test_cb_wait.py +123 -0
- procesio_cli/tools/connector-builder/tool.yaml +671 -0
- procesio_cli/tools/framework-map/.gitattributes +2 -0
- procesio_cli/tools/framework-map/README.md +98 -0
- procesio_cli/tools/framework-map/SKILL.md +30 -0
- procesio_cli/tools/framework-map/app.js +188 -0
- procesio_cli/tools/framework-map/fm_builder.py +476 -0
- procesio_cli/tools/framework-map/fm_catalog.py +19 -0
- procesio_cli/tools/framework-map/fm_ro_catalog.py +94 -0
- procesio_cli/tools/framework-map/fm_strings.py +101 -0
- procesio_cli/tools/framework-map/main.py +95 -0
- procesio_cli/tools/framework-map/styles.css +214 -0
- procesio_cli/tools/framework-map/tests/conftest.py +33 -0
- procesio_cli/tools/framework-map/tests/test_fm_build.py +126 -0
- procesio_cli/tools/framework-map/tests/test_fm_manifest_sync.py +63 -0
- procesio_cli/tools/framework-map/tests/test_fm_store_tree.py +75 -0
- procesio_cli/tools/framework-map/tool.yaml +61 -0
- procesio_cli/tools/mysql/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/mysql/README.md +196 -0
- procesio_cli/tools/mysql/SKILL.md +37 -0
- procesio_cli/tools/mysql/__init__.py +0 -0
- procesio_cli/tools/mysql/connection.py +191 -0
- procesio_cli/tools/mysql/main.py +487 -0
- procesio_cli/tools/mysql/profiles.template.json +1 -0
- procesio_cli/tools/mysql/schema.py +434 -0
- procesio_cli/tools/mysql/tests/__init__.py +0 -0
- procesio_cli/tools/mysql/tests/conftest.py +21 -0
- procesio_cli/tools/mysql/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/mysql/tests/test_mysql.py +201 -0
- procesio_cli/tools/mysql/tests/test_mysql_schema.py +337 -0
- procesio_cli/tools/mysql/tool.yaml +112 -0
- procesio_cli/tools/procesio/DTO-SUBTOOLS-NOTE.md +360 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/00-INDEX.md +67 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/01-ANATOMY.md +209 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/02-CODE-INJECTION.md +309 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/03-DOM-CONTRACT.md +370 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/04-INTERACTION-RECIPES.md +600 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/05-STEPPER-AND-MOTION.md +426 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/06-PROCESS-INTEGRATION.md +347 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/07-DEPLOY-WORKFLOW.md +294 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/08-PITFALLS.md +569 -0
- procesio_cli/tools/procesio/FORM-DEV-GUIDE/09-NAVIGATION-AND-HOSTING.md +308 -0
- procesio_cli/tools/procesio/PHASE4-E2E-NOTES.md +594 -0
- procesio_cli/tools/procesio/PROCESIO-API-CORRECTIONS.md +295 -0
- procesio_cli/tools/procesio/PROCESIO-API-NOTES.md +6976 -0
- procesio_cli/tools/procesio/PROCESIO-AUTH-NOTES.md +226 -0
- procesio_cli/tools/procesio/PROCESIO-CARD-BUILD-NOTES.md +183 -0
- procesio_cli/tools/procesio/PROCESIO-CONNECTORS-NOTES.md +141 -0
- procesio_cli/tools/procesio/PROCESIO-CUSTOM-ACTION-NOTES.md +179 -0
- procesio_cli/tools/procesio/PROCESIO-DOCS-FIX-REPORT.md +123 -0
- procesio_cli/tools/procesio/PROCESIO-ENVIRONMENTS-NOTES.md +94 -0
- procesio_cli/tools/procesio/PROCESIO-FE-VALIDATION-NOTES.md +107 -0
- procesio_cli/tools/procesio/PROCESIO-FOREACH-NOTES.md +199 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-API-HANG-NOTE.md +101 -0
- procesio_cli/tools/procesio/PROCESIO-FORM-SUBMISSION-NOTES.md +172 -0
- procesio_cli/tools/procesio/PROCESIO-HTML-TO-DOCX-NOTES.md +110 -0
- procesio_cli/tools/procesio/PROCESIO-INSTANCE-HISTORY-NOTES.md +242 -0
- procesio_cli/tools/procesio/PROCESIO-METERING-NOTES.md +201 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-CODE-NOTES.md +279 -0
- procesio_cli/tools/procesio/PROCESIO-NODE-MODULE-WHITELIST.md +113 -0
- procesio_cli/tools/procesio/PROCESIO-PYTHON-ACTION-NOTES.md +165 -0
- procesio_cli/tools/procesio/PROCESIO-QUERY-STORE-NOTES.md +826 -0
- procesio_cli/tools/procesio/PROCESIO-RECONCILIATION-PATTERNS.md +104 -0
- procesio_cli/tools/procesio/PROCESIO-RESOURCE-MODEL-NOTES.md +1100 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-CRED-OPTIONALITY.md +45 -0
- procesio_cli/tools/procesio/PROCESIO-SEND-EMAIL-NOTES.md +252 -0
- procesio_cli/tools/procesio/PROCESIO-SQL-ACTIONS-NOTES.md +284 -0
- procesio_cli/tools/procesio/PROCESIO-USAGE-GUIDE.md +219 -0
- procesio_cli/tools/procesio/README.md +341 -0
- procesio_cli/tools/procesio/SCHEDULE-INPUT-SECURITY-NOTES.md +63 -0
- procesio_cli/tools/procesio/SKILL.md +694 -0
- procesio_cli/tools/procesio/__init__.py +1 -0
- procesio_cli/tools/procesio/actiondef.py +27 -0
- procesio_cli/tools/procesio/assets/html2docx/html2docx.js +2155 -0
- procesio_cli/tools/procesio/auth.py +354 -0
- procesio_cli/tools/procesio/autogen.py +121 -0
- procesio_cli/tools/procesio/client.py +355 -0
- procesio_cli/tools/procesio/config.py +96 -0
- procesio_cli/tools/procesio/data/endpoints.json +2901 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/01-authentication.md +180 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/02-conventions.md +116 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/ANONYMOUS-SURFACE.md +51 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/README.md +104 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/SYMBOL-INDEX.md +444 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/03-auth-users-workspaces.md +731 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/04-processes.md +913 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/05-actions.md +605 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/06-files.md +237 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/07-forms-documents.md +985 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/08-credentials.md +532 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/09-datastore-datatypes.md +830 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/10-custom-urls.md +319 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/11-subscriptions-resources-analytics.md +455 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/12-webhooks-notifications-misc.md +519 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/13-realtime-signalr.md +153 -0
- procesio_cli/tools/procesio/docs_info/API-DOCUMENTATION/endpoints/99-internal-and-other-services.md +52 -0
- procesio_cli/tools/procesio/docs_info/FormBuilder mock.ts +5725 -0
- procesio_cli/tools/procesio/docs_info/Procesio Platform Actions.json +30219 -0
- procesio_cli/tools/procesio/docs_info/form-config-enums.ts +92 -0
- procesio_cli/tools/procesio/docs_info/form-theme.ts +1603 -0
- procesio_cli/tools/procesio/docs_info/process-validation-reference-1.md +2739 -0
- procesio_cli/tools/procesio/dto/__init__.py +13 -0
- procesio_cli/tools/procesio/dto/credential/builder.py +179 -0
- procesio_cli/tools/procesio/dto/credential/config.schema.json +19 -0
- procesio_cli/tools/procesio/dto/credential/description.md +193 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.config.json +11 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.dto.json +28 -0
- procesio_cli/tools/procesio/dto/credential/fixtures/rest.template.json +44 -0
- procesio_cli/tools/procesio/dto/credential/template.dto.json +16 -0
- procesio_cli/tools/procesio/dto/data/_refresh.py +147 -0
- procesio_cli/tools/procesio/dto/data/action_catalog.json +30825 -0
- procesio_cli/tools/procesio/dto/data/action_families.json +55 -0
- procesio_cli/tools/procesio/dto/data/platform_types.json +182 -0
- procesio_cli/tools/procesio/dto/datatype/builder.py +223 -0
- procesio_cli/tools/procesio/dto/datatype/config.schema.json +47 -0
- procesio_cli/tools/procesio/dto/datatype/description.md +85 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.config.json +41 -0
- procesio_cli/tools/procesio/dto/datatype/fixtures/customer.dto.json +164 -0
- procesio_cli/tools/procesio/dto/datatype/template.dto.json +37 -0
- procesio_cli/tools/procesio/dto/document/builder.py +193 -0
- procesio_cli/tools/procesio/dto/document/config.schema.json +33 -0
- procesio_cli/tools/procesio/dto/document/description.md +124 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.config.json +16 -0
- procesio_cli/tools/procesio/dto/document/fixtures/invoice.dto.json +32 -0
- procesio_cli/tools/procesio/dto/document/template.dto.json +14 -0
- procesio_cli/tools/procesio/dto/form/FORM-STYLING-NOTES.md +142 -0
- procesio_cli/tools/procesio/dto/form/GOLDEN-DRIFT-NOTES.md +72 -0
- procesio_cli/tools/procesio/dto/form/RUN-PROCESS-RESULT-NOTES.md +80 -0
- procesio_cli/tools/procesio/dto/form/addelement.py +277 -0
- procesio_cli/tools/procesio/dto/form/builder.py +1009 -0
- procesio_cli/tools/procesio/dto/form/capture_goldens.py +106 -0
- procesio_cli/tools/procesio/dto/form/code_cipher.py +67 -0
- procesio_cli/tools/procesio/dto/form/config.schema.json +76 -0
- procesio_cli/tools/procesio/dto/form/data_shell.json +1 -0
- procesio_cli/tools/procesio/dto/form/description.md +346 -0
- procesio_cli/tools/procesio/dto/form/elements/approval.json +259 -0
- procesio_cli/tools/procesio/dto/form/elements/assignee.json +137 -0
- procesio_cli/tools/procesio/dto/form/elements/button.json +125 -0
- procesio_cli/tools/procesio/dto/form/elements/chart.json +341 -0
- procesio_cli/tools/procesio/dto/form/elements/chat.json +199 -0
- procesio_cli/tools/procesio/dto/form/elements/checkbox.json +153 -0
- procesio_cli/tools/procesio/dto/form/elements/column.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/columns.json +78 -0
- procesio_cli/tools/procesio/dto/form/elements/datetime-input.json +304 -0
- procesio_cli/tools/procesio/dto/form/elements/divider.json +54 -0
- procesio_cli/tools/procesio/dto/form/elements/dropdown.json +130 -0
- procesio_cli/tools/procesio/dto/form/elements/dynamic-table-row.json +253 -0
- procesio_cli/tools/procesio/dto/form/elements/file-upload.json +196 -0
- procesio_cli/tools/procesio/dto/form/elements/file-viewer.json +169 -0
- procesio_cli/tools/procesio/dto/form/elements/heading.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/icon.json +107 -0
- procesio_cli/tools/procesio/dto/form/elements/image.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/input.json +206 -0
- procesio_cli/tools/procesio/dto/form/elements/list.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/number-input.json +202 -0
- procesio_cli/tools/procesio/dto/form/elements/paragraph.json +79 -0
- procesio_cli/tools/procesio/dto/form/elements/radiobox.json +174 -0
- procesio_cli/tools/procesio/dto/form/elements/section.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/select.json +217 -0
- procesio_cli/tools/procesio/dto/form/elements/side-panel.json +146 -0
- procesio_cli/tools/procesio/dto/form/elements/signature-pad.json +141 -0
- procesio_cli/tools/procesio/dto/form/elements/static-table-row.json +84 -0
- procesio_cli/tools/procesio/dto/form/elements/step.json +105 -0
- procesio_cli/tools/procesio/dto/form/elements/stepper.json +126 -0
- procesio_cli/tools/procesio/dto/form/elements/tab.json +77 -0
- procesio_cli/tools/procesio/dto/form/elements/table.json +279 -0
- procesio_cli/tools/procesio/dto/form/elements/tabs.json +114 -0
- procesio_cli/tools/procesio/dto/form/elements/textarea.json +213 -0
- procesio_cli/tools/procesio/dto/form/enum_map.json +68 -0
- procesio_cli/tools/procesio/dto/form/fieldpath.py +284 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.config.json +32 -0
- procesio_cli/tools/procesio/dto/form/fixtures/reg.elements.json +638 -0
- procesio_cli/tools/procesio/dto/form/sync_from_mock.py +386 -0
- procesio_cli/tools/procesio/dto/framework.py +125 -0
- procesio_cli/tools/procesio/dto/process/builder.py +1991 -0
- procesio_cli/tools/procesio/dto/process/config.schema.json +159 -0
- procesio_cli/tools/procesio/dto/process/description.md +218 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.config.json +32 -0
- procesio_cli/tools/procesio/dto/process/fixtures/greet.dto.json +317 -0
- procesio_cli/tools/procesio/dto/process/naming.py +305 -0
- procesio_cli/tools/procesio/dto/process/normalize.py +74 -0
- procesio_cli/tools/procesio/dto/process/template.dto.json +32 -0
- procesio_cli/tools/procesio/dto/refdata.py +87 -0
- procesio_cli/tools/procesio/dto/registry.py +27 -0
- procesio_cli/tools/procesio/dto/webhook/builder.py +142 -0
- procesio_cli/tools/procesio/dto/webhook/config.schema.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/description.md +92 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.config.json +10 -0
- procesio_cli/tools/procesio/dto/webhook/fixtures/order.dto.json +25 -0
- procesio_cli/tools/procesio/dto/webhook/template.dto.json +14 -0
- procesio_cli/tools/procesio/environments.py +264 -0
- procesio_cli/tools/procesio/errors.py +166 -0
- procesio_cli/tools/procesio/flowmodel/README.md +37 -0
- procesio_cli/tools/procesio/flowmodel/__init__.py +14 -0
- procesio_cli/tools/procesio/flowmodel/digest.py +223 -0
- procesio_cli/tools/procesio/flowmodel/families.py +34 -0
- procesio_cli/tools/procesio/flowmodel/fevalidation.py +1098 -0
- procesio_cli/tools/procesio/flowmodel/formdigest.py +232 -0
- procesio_cli/tools/procesio/flowmodel/inspect.py +78 -0
- procesio_cli/tools/procesio/flowmodel/model.py +82 -0
- procesio_cli/tools/procesio/flowmodel/nodeparam.py +871 -0
- procesio_cli/tools/procesio/flowmodel/reader.py +191 -0
- procesio_cli/tools/procesio/flowmodel/sqlparam.py +410 -0
- procesio_cli/tools/procesio/form_code_keys.py +50 -0
- procesio_cli/tools/procesio/formlint.py +292 -0
- procesio_cli/tools/procesio/gen_manifest.py +118 -0
- procesio_cli/tools/procesio/handlers/__init__.py +1 -0
- procesio_cli/tools/procesio/handlers/auth_actions.py +103 -0
- procesio_cli/tools/procesio/handlers/catalog.py +147 -0
- procesio_cli/tools/procesio/handlers/common.py +90 -0
- procesio_cli/tools/procesio/handlers/customaction_ops.py +146 -0
- procesio_cli/tools/procesio/handlers/datastore_ops.py +482 -0
- procesio_cli/tools/procesio/handlers/datatype_ops.py +275 -0
- procesio_cli/tools/procesio/handlers/dto_actions.py +258 -0
- procesio_cli/tools/procesio/handlers/environment_admin.py +146 -0
- procesio_cli/tools/procesio/handlers/fevalidate.py +236 -0
- procesio_cli/tools/procesio/handlers/files.py +141 -0
- procesio_cli/tools/procesio/handlers/flowgraph.py +229 -0
- procesio_cli/tools/procesio/handlers/flowlint.py +269 -0
- procesio_cli/tools/procesio/handlers/form_chains.py +336 -0
- procesio_cli/tools/procesio/handlers/form_code.py +277 -0
- procesio_cli/tools/procesio/handlers/form_element.py +199 -0
- procesio_cli/tools/procesio/handlers/form_events.py +441 -0
- procesio_cli/tools/procesio/handlers/form_update.py +270 -0
- procesio_cli/tools/procesio/handlers/formprocess.py +211 -0
- procesio_cli/tools/procesio/handlers/generic.py +135 -0
- procesio_cli/tools/procesio/handlers/layout.py +137 -0
- procesio_cli/tools/procesio/handlers/nodeparams.py +1018 -0
- procesio_cli/tools/procesio/handlers/process_layout.py +189 -0
- procesio_cli/tools/procesio/handlers/process_naming.py +213 -0
- procesio_cli/tools/procesio/handlers/processes.py +416 -0
- procesio_cli/tools/procesio/handlers/profile_admin.py +184 -0
- procesio_cli/tools/procesio/handlers/resource_ops.py +447 -0
- procesio_cli/tools/procesio/handlers/schedules.py +320 -0
- procesio_cli/tools/procesio/handlers/sqlactions.py +232 -0
- procesio_cli/tools/procesio/handlers/transport.py +463 -0
- procesio_cli/tools/procesio/handlers/usageguide.py +222 -0
- procesio_cli/tools/procesio/layout/README.md +196 -0
- procesio_cli/tools/procesio/layout/__init__.py +11 -0
- procesio_cli/tools/procesio/layout/adapter.py +736 -0
- procesio_cli/tools/procesio/layout/cycles.py +186 -0
- procesio_cli/tools/procesio/layout/dispatch.py +39 -0
- procesio_cli/tools/procesio/layout/elk/elk_runner.mjs +50 -0
- procesio_cli/tools/procesio/layout/elk/package-lock.json +21 -0
- procesio_cli/tools/procesio/layout/elk/package.json +11 -0
- procesio_cli/tools/procesio/layout/elk_engine.py +568 -0
- procesio_cli/tools/procesio/layout/engine.py +1311 -0
- procesio_cli/tools/procesio/layout/report.py +187 -0
- procesio_cli/tools/procesio/main.py +179 -0
- procesio_cli/tools/procesio/profiles.py +193 -0
- procesio_cli/tools/procesio/reliability.py +193 -0
- procesio_cli/tools/procesio/sqlformat.py +167 -0
- procesio_cli/tools/procesio/swagger.py +51 -0
- procesio_cli/tools/procesio/tests/__init__.py +0 -0
- procesio_cli/tools/procesio/tests/conftest.py +129 -0
- procesio_cli/tools/procesio/tests/test_auth.py +200 -0
- procesio_cli/tools/procesio/tests/test_autogen.py +78 -0
- procesio_cli/tools/procesio/tests/test_builder_attrpath_sqlbind.py +180 -0
- procesio_cli/tools/procesio/tests/test_builder_custom_action_catalog.py +72 -0
- procesio_cli/tools/procesio/tests/test_client.py +114 -0
- procesio_cli/tools/procesio/tests/test_client_reliability.py +139 -0
- procesio_cli/tools/procesio/tests/test_customaction.py +103 -0
- procesio_cli/tools/procesio/tests/test_customaction_test.py +80 -0
- procesio_cli/tools/procesio/tests/test_cycles.py +69 -0
- procesio_cli/tools/procesio/tests/test_datastore.py +378 -0
- procesio_cli/tools/procesio/tests/test_datastore_node.py +94 -0
- procesio_cli/tools/procesio/tests/test_dispatch.py +170 -0
- procesio_cli/tools/procesio/tests/test_document_page_size.py +19 -0
- procesio_cli/tools/procesio/tests/test_dto.py +734 -0
- procesio_cli/tools/procesio/tests/test_edit_dryrun_preview.py +96 -0
- procesio_cli/tools/procesio/tests/test_elk_layout.py +221 -0
- procesio_cli/tools/procesio/tests/test_environments.py +214 -0
- procesio_cli/tools/procesio/tests/test_fevalidate_gate.py +104 -0
- procesio_cli/tools/procesio/tests/test_fevalidation.py +317 -0
- procesio_cli/tools/procesio/tests/test_fieldpath_variables.py +87 -0
- procesio_cli/tools/procesio/tests/test_files.py +72 -0
- procesio_cli/tools/procesio/tests/test_flow_digest.py +202 -0
- procesio_cli/tools/procesio/tests/test_flowlint.py +114 -0
- procesio_cli/tools/procesio/tests/test_flowmodel.py +158 -0
- procesio_cli/tools/procesio/tests/test_form_add_element.py +256 -0
- procesio_cli/tools/procesio/tests/test_form_approval_gaps.py +319 -0
- procesio_cli/tools/procesio/tests/test_form_auto_names.py +60 -0
- procesio_cli/tools/procesio/tests/test_form_chains.py +217 -0
- procesio_cli/tools/procesio/tests/test_form_code_actions.py +188 -0
- procesio_cli/tools/procesio/tests/test_form_code_keys.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_code_style.py +178 -0
- procesio_cli/tools/procesio/tests/test_form_delete_element.py +99 -0
- procesio_cli/tools/procesio/tests/test_form_element_config.py +141 -0
- procesio_cli/tools/procesio/tests/test_form_event_maps.py +135 -0
- procesio_cli/tools/procesio/tests/test_form_event_ops.py +376 -0
- procesio_cli/tools/procesio/tests/test_form_event_replace.py +86 -0
- procesio_cli/tools/procesio/tests/test_form_events.py +92 -0
- procesio_cli/tools/procesio/tests/test_form_parity.py +171 -0
- procesio_cli/tools/procesio/tests/test_form_select_source.py +74 -0
- procesio_cli/tools/procesio/tests/test_form_sync.py +35 -0
- procesio_cli/tools/procesio/tests/test_form_update.py +133 -0
- procesio_cli/tools/procesio/tests/test_formlint.py +155 -0
- procesio_cli/tools/procesio/tests/test_formlint_css_scope.py +38 -0
- procesio_cli/tools/procesio/tests/test_formlint_field_names.py +83 -0
- procesio_cli/tools/procesio/tests/test_guards.py +110 -0
- procesio_cli/tools/procesio/tests/test_hidden_setting_types.py +39 -0
- procesio_cli/tools/procesio/tests/test_html2docx_asset.py +132 -0
- procesio_cli/tools/procesio/tests/test_key_handle_terminology.py +45 -0
- procesio_cli/tools/procesio/tests/test_layout.py +574 -0
- procesio_cli/tools/procesio/tests/test_layout_report.py +88 -0
- procesio_cli/tools/procesio/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/procesio/tests/test_nodedelete.py +151 -0
- procesio_cli/tools/procesio/tests/test_nodeparam.py +826 -0
- procesio_cli/tools/procesio/tests/test_normalize.py +70 -0
- procesio_cli/tools/procesio/tests/test_payload_docs.py +86 -0
- procesio_cli/tools/procesio/tests/test_process_action_naming.py +170 -0
- procesio_cli/tools/procesio/tests/test_process_call_api_seed.py +46 -0
- procesio_cli/tools/procesio/tests/test_process_ext.py +373 -0
- procesio_cli/tools/procesio/tests/test_process_invariants.py +183 -0
- procesio_cli/tools/procesio/tests/test_process_layout.py +117 -0
- procesio_cli/tools/procesio/tests/test_process_naming.py +188 -0
- procesio_cli/tools/procesio/tests/test_process_query_store.py +172 -0
- procesio_cli/tools/procesio/tests/test_processinfo_variable.py +56 -0
- procesio_cli/tools/procesio/tests/test_profiles.py +127 -0
- procesio_cli/tools/procesio/tests/test_put_projects.py +41 -0
- procesio_cli/tools/procesio/tests/test_reliability.py +107 -0
- procesio_cli/tools/procesio/tests/test_removal_gate.py +95 -0
- procesio_cli/tools/procesio/tests/test_resource_ops.py +173 -0
- procesio_cli/tools/procesio/tests/test_save_validity.py +207 -0
- procesio_cli/tools/procesio/tests/test_schedule_cron_shape.py +111 -0
- procesio_cli/tools/procesio/tests/test_schedules.py +309 -0
- procesio_cli/tools/procesio/tests/test_sqlconvert.py +234 -0
- procesio_cli/tools/procesio/tests/test_sqlformat.py +83 -0
- procesio_cli/tools/procesio/tests/test_sqlparam.py +187 -0
- procesio_cli/tools/procesio/tests/test_superseded_actions.py +54 -0
- procesio_cli/tools/procesio/tests/test_surgical_concurrency.py +156 -0
- procesio_cli/tools/procesio/tests/test_tier4.py +123 -0
- procesio_cli/tools/procesio/tests/test_transport.py +147 -0
- procesio_cli/tools/procesio/tests/test_transport_data_stores.py +168 -0
- procesio_cli/tools/procesio/tests/test_transport_mapper_repair.py +150 -0
- procesio_cli/tools/procesio/tests/test_transport_webhook_strip.py +253 -0
- procesio_cli/tools/procesio/tests/test_usage_guide.py +96 -0
- procesio_cli/tools/procesio/tool.yaml +12486 -0
- procesio_cli/tools/sqlserver/MOVED-TO-CENTRAL.md +29 -0
- procesio_cli/tools/sqlserver/README.md +192 -0
- procesio_cli/tools/sqlserver/SKILL.md +37 -0
- procesio_cli/tools/sqlserver/SQLSERVER-SCHEMA-NOTES.md +284 -0
- procesio_cli/tools/sqlserver/__init__.py +0 -0
- procesio_cli/tools/sqlserver/connection.py +242 -0
- procesio_cli/tools/sqlserver/main.py +521 -0
- procesio_cli/tools/sqlserver/profiles.template.json +1 -0
- procesio_cli/tools/sqlserver/schema.py +600 -0
- procesio_cli/tools/sqlserver/tests/__init__.py +0 -0
- procesio_cli/tools/sqlserver/tests/conftest.py +21 -0
- procesio_cli/tools/sqlserver/tests/test_connection.py +75 -0
- procesio_cli/tools/sqlserver/tests/test_dbprofiles.py +92 -0
- procesio_cli/tools/sqlserver/tests/test_dbquery.py +220 -0
- procesio_cli/tools/sqlserver/tests/test_manifest_sync.py +68 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver.py +326 -0
- procesio_cli/tools/sqlserver/tests/test_sqlserver_schema.py +488 -0
- procesio_cli/tools/sqlserver/tool.yaml +123 -0
- procesio_cli/tools/web/README.md +381 -0
- procesio_cli/tools/web/SKILL.md +37 -0
- procesio_cli/tools/web/WEB-AUTOMATION-NOTES.md +277 -0
- procesio_cli/tools/web/__init__.py +21 -0
- procesio_cli/tools/web/actiondef.py +24 -0
- procesio_cli/tools/web/api.py +444 -0
- procesio_cli/tools/web/brokered.py +107 -0
- procesio_cli/tools/web/driver.py +839 -0
- procesio_cli/tools/web/drivercontract.py +44 -0
- procesio_cli/tools/web/errors.py +54 -0
- procesio_cli/tools/web/handlers/__init__.py +1 -0
- procesio_cli/tools/web/handlers/archive.py +367 -0
- procesio_cli/tools/web/handlers/browse.py +182 -0
- procesio_cli/tools/web/handlers/contacts.py +74 -0
- procesio_cli/tools/web/handlers/sessmgmt.py +120 -0
- procesio_cli/tools/web/main.py +128 -0
- procesio_cli/tools/web/sessions.py +253 -0
- procesio_cli/tools/web/steps.py +162 -0
- procesio_cli/tools/web/tests/__init__.py +0 -0
- procesio_cli/tools/web/tests/conftest.py +197 -0
- procesio_cli/tools/web/tests/test_api.py +330 -0
- procesio_cli/tools/web/tests/test_archive.py +190 -0
- procesio_cli/tools/web/tests/test_brokered.py +138 -0
- procesio_cli/tools/web/tests/test_dispatch.py +132 -0
- procesio_cli/tools/web/tests/test_errors.py +60 -0
- procesio_cli/tools/web/tests/test_manifest_sync.py +76 -0
- procesio_cli/tools/web/tests/test_page_contacts.py +68 -0
- procesio_cli/tools/web/tests/test_sessions.py +145 -0
- procesio_cli/tools/web/tests/test_steps.py +210 -0
- procesio_cli/tools/web/tool.yaml +184 -0
- procesio_cli/tools/xlsx/README.md +34 -0
- procesio_cli/tools/xlsx/SKILL.md +28 -0
- procesio_cli/tools/xlsx/__init__.py +0 -0
- procesio_cli/tools/xlsx/main.py +129 -0
- procesio_cli/tools/xlsx/reader.py +91 -0
- procesio_cli/tools/xlsx/tests/__init__.py +0 -0
- procesio_cli/tools/xlsx/tests/conftest.py +39 -0
- procesio_cli/tools/xlsx/tests/test_xlsx.py +103 -0
- procesio_cli/tools/xlsx/tool.yaml +30 -0
- procesio_cli/webplatform/aat_mcp/AAT-MCP-NOTES.md +244 -0
- procesio_cli/webplatform/aat_mcp/README.md +78 -0
- procesio_cli/webplatform/aat_mcp/bridge.py +705 -0
- procesio_cli/webplatform/aat_mcp/chat_server.py +194 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.snapshot.json +668 -0
- procesio_cli/webplatform/aat_mcp/chat_surface.yaml +372 -0
- procesio_cli/webplatform/aat_mcp/gate.py +68 -0
- procesio_cli/webplatform/aat_mcp/http_server.py +139 -0
- procesio_cli/webplatform/aat_mcp/protocol.py +175 -0
- procesio_cli/webplatform/aat_mcp/server.py +306 -0
- procesio_cli/webplatform/aat_mcp/tests/conftest.py +8 -0
- procesio_cli/webplatform/aat_mcp/tests/test_aat_mcp.py +255 -0
- procesio_cli/webplatform/aat_mcp/tests/test_chat_surface.py +247 -0
- procesio_cli/webplatform/aat_mcp/tests/test_discovery.py +489 -0
- procesio_cli/webplatform/aat_mcp/tests/test_multiuser.py +86 -0
- procesio_cli/webplatform/aat_mcp/tests/test_progressive_discovery.py +89 -0
- procesio_cli/webplatform/aat_mcp/tests/test_protocol.py +180 -0
- procesio_cli/webplatform/aat_mcp/tests/test_skill_discovery.py +23 -0
- procesio_cli-0.1.1.dist-info/METADATA +467 -0
- procesio_cli-0.1.1.dist-info/RECORD +647 -0
- procesio_cli-0.1.1.dist-info/WHEEL +4 -0
- procesio_cli-0.1.1.dist-info/entry_points.txt +7 -0
- procesio_cli-0.1.1.dist-info/licenses/LICENSE +201 -0
- procesio_cli-0.1.1.dist-info/licenses/NOTICE +5 -0
|
@@ -0,0 +1,569 @@
|
|
|
1
|
+
# 08 — Pitfalls: symptom → cause → rule
|
|
2
|
+
|
|
3
|
+
Every one of these was found by breaking something real. Scan the **symptom**
|
|
4
|
+
column first; that is how you will meet them.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Runtime / JavaScript
|
|
9
|
+
|
|
10
|
+
### The code works on first load, then stops
|
|
11
|
+
**Cause.** Listeners and observers were declared in the form-level JS scope. That
|
|
12
|
+
scope is a throwaway sandbox iframe, destroyed and rebuilt on every re-trigger.
|
|
13
|
+
**Rule.** Anything that must outlive one run is injected once into
|
|
14
|
+
`window.parent.document`. Installer + runtime, two layers, two guards
|
|
15
|
+
([02](02-CODE-INJECTION.md) §4).
|
|
16
|
+
|
|
17
|
+
### Doubled toasts / doubled ripples / the process launches twice
|
|
18
|
+
**Cause.** The file re-ran and installed a second copy of everything.
|
|
19
|
+
**Rule.** Guard the installer on a DOM id **and** the payload on a `window` flag.
|
|
20
|
+
Every DOM-touching function marks its work with a `data-*` attribute or an injected
|
|
21
|
+
child, and returns early if the mark is there.
|
|
22
|
+
|
|
23
|
+
### `querySelector` finds nothing, but the element is clearly on screen
|
|
24
|
+
**Cause.** You are querying the sandbox iframe's `document`, not the page's.
|
|
25
|
+
**Rule.** The runtime lives in the parent document; inside it, `document` is
|
|
26
|
+
correct. From the installer scope it is not.
|
|
27
|
+
|
|
28
|
+
### Something is processed on first render and never again
|
|
29
|
+
**Cause.** Processed nodes were remembered in a `Set`. The renderer destroyed them
|
|
30
|
+
and made new ones; the set is full of corpses.
|
|
31
|
+
**Rule.** Never track nodes across a rebuild. Mark the node itself, and recompute
|
|
32
|
+
everything from the current DOM on every pass.
|
|
33
|
+
|
|
34
|
+
### `refresh()` runs dozens of times per frame during a step change
|
|
35
|
+
**Cause.** The MutationObserver fires per mutation; a step change makes dozens.
|
|
36
|
+
**Rule.** Coalesce with a `pending` flag + `requestAnimationFrame`.
|
|
37
|
+
|
|
38
|
+
### An attribute rewrite feeds your own MutationObserver in a loop
|
|
39
|
+
**Cause.** Writing the attribute unconditionally on every pass.
|
|
40
|
+
**Rule.** Compare before writing: `if (next !== current) { set(next); }`.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Visibility and state
|
|
45
|
+
|
|
46
|
+
### An entire step renders completely blank
|
|
47
|
+
**Cause.** A class that sets `opacity: 0` was removed only in response to an
|
|
48
|
+
observed DOM mutation — and that mutation did not arrive (or the observer's target
|
|
49
|
+
had been replaced). Measured: `at200 opacity=0.002 → at1500 opacity=0`, never
|
|
50
|
+
lifting.
|
|
51
|
+
**Rule.** **A visual state must never depend on an event that may not come.** Lift
|
|
52
|
+
it on a timer. Clear it by sweeping `all('.leaving')` rather than a held node
|
|
53
|
+
reference, because the renderer may have swapped the container.
|
|
54
|
+
|
|
55
|
+
### The loader veil never lifts and the form is unusable
|
|
56
|
+
**Cause.** Dismissal was tied to a network call that failed or a quiet-timer that
|
|
57
|
+
never settled.
|
|
58
|
+
**Rule.** Every veil has a **hard ceiling** in both modes, and when the ceiling
|
|
59
|
+
fires the user is told what to do instead ([05](05-STEPPER-AND-MOTION.md) §5).
|
|
60
|
+
|
|
61
|
+
### The next button can never be reached
|
|
62
|
+
**Cause.** Readiness counted hidden fields. A field that is gated can never be
|
|
63
|
+
filled, so the gate never opens.
|
|
64
|
+
**Rule.** Only `el.offsetParent !== null` fields count toward readiness.
|
|
65
|
+
|
|
66
|
+
### A field is invisible but Tab still lands in it
|
|
67
|
+
**Cause.** Hidden with `visibility: hidden` or `opacity: 0`.
|
|
68
|
+
**Rule.** `display: none !important`. A control you can reach but cannot see is a
|
|
69
|
+
worse bug than a visible one.
|
|
70
|
+
|
|
71
|
+
### Hiding a button leaves an empty row
|
|
72
|
+
**Cause.** The button was hidden, not its element wrapper.
|
|
73
|
+
**Rule.** Hide `b.closest('.form-builder--element')`.
|
|
74
|
+
|
|
75
|
+
### Buttons belonging to a later view are visible on a fresh load
|
|
76
|
+
**Cause.** The form's own logic hides them inside a click handler that has never run.
|
|
77
|
+
**Rule.** Gate on an observable phase, e.g. "the stepper is on screen".
|
|
78
|
+
|
|
79
|
+
### The native form shows for about a second before any script runs
|
|
80
|
+
**Cause.** The renderer draws the form first and runs the form-load event about a
|
|
81
|
+
second later (measured: 1.0 s on a live form). Every script sits behind an event,
|
|
82
|
+
including the `Data.code` JavaScript, which the front end injects as a form event. So
|
|
83
|
+
no script, however small or early in the list, can hide anything from the first frame.
|
|
84
|
+
Setting `visible = false` from a load script is no faster, and it removes the node from
|
|
85
|
+
the page within milliseconds ([01](01-ANATOMY.md) §4), which breaks any field a script
|
|
86
|
+
reads or clicks in the DOM.
|
|
87
|
+
**Rule.** Make the form presentable without its scripts. The first element is a plain
|
|
88
|
+
line that says what is loading; hidden helper fields come after it. If something must be
|
|
89
|
+
invisible from the first frame, the form-level CSS in `Data.code` is the only surface
|
|
90
|
+
applied at render that can hide it. Per-element `style` takes only theme variables
|
|
91
|
+
([01](01-ANATOMY.md) §4), and writing `Data.code` needs the right key
|
|
92
|
+
([07](07-DEPLOY-WORKFLOW.md) §2).
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Values and Vue
|
|
97
|
+
|
|
98
|
+
### Writing `info-text` from the field model does nothing at all
|
|
99
|
+
**Cause.** The runtime renders `info-text` from the element's STATIC config array, not
|
|
100
|
+
from the reactive field object, so assigning `infoText` on
|
|
101
|
+
`ProcesioForm.data.fields.<name>` changes nothing on screen, and no
|
|
102
|
+
`setConfigValue`-style API is exposed to form JS. (The field object itself is wider
|
|
103
|
+
than `value`, `visible`, `required` and `readonly`: on a select built through the API it
|
|
104
|
+
carried 15 properties, `label` and `placeholder` among them. What it carries follows the
|
|
105
|
+
form's data model; see *A script reads a select's options and gets nothing*.)
|
|
106
|
+
**Rule.** Drive live text — counters, running totals, quota hints — by writing the DOM
|
|
107
|
+
node. Note that when `info-text` is empty the message component is never rendered at all
|
|
108
|
+
(`v-if` on a truthy value), so there is no node to write into: either set a non-empty
|
|
109
|
+
`info-text` in the designer, or create the node yourself.
|
|
110
|
+
See [`../dto/form/description.md`](../dto/form/description.md) for the selector details —
|
|
111
|
+
the control's DOM `id` equals its `name` config and sits on the `.pds-c-input-group`
|
|
112
|
+
wrapper, not on the `<input>`.
|
|
113
|
+
|
|
114
|
+
### A field looks filled and submits empty
|
|
115
|
+
**Cause.** `input.value` / `input.checked` was set directly. The renderer is
|
|
116
|
+
Vue-bound and never saw it.
|
|
117
|
+
**Rule.** Click the real control. If you must write, dispatch `input` **and**
|
|
118
|
+
`change` with `bubbles: true`.
|
|
119
|
+
|
|
120
|
+
### Clearing a radio group immediately re-selects the same option
|
|
121
|
+
**Cause.** A `change` event was re-dispatched after clearing. The Vue handler reads
|
|
122
|
+
the option's value and re-selects it.
|
|
123
|
+
**Rule.** Clear the model (`window.ProcesioForm.data.fields`, guarded) and the DOM
|
|
124
|
+
state, and dispatch nothing.
|
|
125
|
+
|
|
126
|
+
### Every field-matching function silently returns null, on every field
|
|
127
|
+
**Cause.** The form's inputs carry an **empty `label` config** — their visible label
|
|
128
|
+
is a separate `paragraph` element sitting above each one, which is a common way to
|
|
129
|
+
build a form whose labels need styling the control does not offer. The label-matching
|
|
130
|
+
handle then has nothing to match on: `.pds-c-input-group--label` is absent and the
|
|
131
|
+
control's own `textContent` is empty (a placeholder is an attribute, not text). Found
|
|
132
|
+
on a live form where an entire step's gating had never once executed, with no error
|
|
133
|
+
anywhere and no visible symptom other than the feature simply not happening.
|
|
134
|
+
**Rule.** Before building anything on label matching, **check that the labels exist**
|
|
135
|
+
— one `querySelectorAll('.pds-c-input-group--label')` on the rendered form answers it.
|
|
136
|
+
When they do not, fall back to an **element-id → field-name map generated from the
|
|
137
|
+
DTO**, say in a comment where it came from and how to regenerate it, and keep the rest
|
|
138
|
+
of the code speaking names. Ids are the weaker handle, but a weak handle that resolves
|
|
139
|
+
beats a strong one that returns null.
|
|
140
|
+
|
|
141
|
+
### A feature "does nothing" and no error is ever logged
|
|
142
|
+
**Cause.** A lookup returned null and every caller guarded it with `if (!key) return;`.
|
|
143
|
+
Defensive early-returns turn a wiring failure into silence.
|
|
144
|
+
**Rule.** When a mapping function can legitimately return null for SOME nodes, assert
|
|
145
|
+
that it resolves for **at least one** — a `console.warn` when a whole pass resolves
|
|
146
|
+
zero fields would have caught the above on first load.
|
|
147
|
+
|
|
148
|
+
### The wrong field gets a value / a label match hits the wrong control
|
|
149
|
+
**Cause.** A substring label match, ordered shortest-first. `'id — series'` matches
|
|
150
|
+
inside `'id representative — series'`.
|
|
151
|
+
**Rule.** Order the label table **most specific first**, and normalize diacritics
|
|
152
|
+
and case on both sides of every comparison.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
### A button has to be clicked twice before its MAP_FORM_DATA reacts
|
|
157
|
+
**Cause.** A JS block wrote a value (for example a validation flag) and a MAP
|
|
158
|
+
condition later in the SAME chain reads it. `input`/`number-input` values reach the
|
|
159
|
+
form model 500 ms after the DOM write (`onInputDebounced`), so the MAP sees the
|
|
160
|
+
value from before the click. The second click works only because the first one's
|
|
161
|
+
value has landed by then. Verified live, with a MAP that never saw the value its
|
|
162
|
+
own chain had written.
|
|
163
|
+
**Rule.** Never branch a MAP on a value the same chain's JS just wrote. Hand off
|
|
164
|
+
through a field's own `onInput` chain instead: [04](04-INTERACTION-RECIPES.md) §16.
|
|
165
|
+
|
|
166
|
+
### A programmatic click on another form button, from inside a chain, does nothing
|
|
167
|
+
**Cause.** While a button's chain runs the form is locked: every element is
|
|
168
|
+
`disabled`, and a disabled button ignores the click. The stepper's Next/Previous
|
|
169
|
+
are not form elements and still respond.
|
|
170
|
+
**Rule.** Do not chain one button into another. Trigger the follow-up through a
|
|
171
|
+
field's `onInput` chain ([04](04-INTERACTION-RECIPES.md) §16), or click the stepper.
|
|
172
|
+
|
|
173
|
+
### A MAP guarded by `<variable> IS_TRUE` runs although the variable is "false"
|
|
174
|
+
**Cause.** The designer stores a Boolean form variable's default as TEXT (`"False"`
|
|
175
|
+
or `"false"`), and a condition treats any non-empty text as true. Measured live:
|
|
176
|
+
text `"false"` → `IS_TRUE` passes and `IS_FALSE` fails; `null` → the opposite. Two
|
|
177
|
+
mutually exclusive branches both run, and a load gated on `isConfirmed IS_TRUE`
|
|
178
|
+
runs for every visitor. A render process that later writes a real boolean does not
|
|
179
|
+
help a condition evaluated before its result lands.
|
|
180
|
+
**Rule.** Do not branch or gate on a Boolean form variable with `IS_TRUE`/`IS_FALSE`.
|
|
181
|
+
Branch on a value that really is text (`EQUALS` on a select's value, or on a field
|
|
182
|
+
your own flow writes), or give the variable a `null` default. And a condition in
|
|
183
|
+
the browser is never access control: re-check the user inside the process.
|
|
184
|
+
`formlint` flags the pattern.
|
|
185
|
+
|
|
186
|
+
### A MAP that writes a field also runs that field's handlers, at once
|
|
187
|
+
**Cause.** A value set by MAP_FORM_DATA (or by a process outputMap) reaches the
|
|
188
|
+
element with no debounce and fires its `onInputEvents` chain immediately, in
|
|
189
|
+
parallel with the chain that wrote it. JS blocks of concurrent chains share one
|
|
190
|
+
sandbox iframe, so they can cancel each other.
|
|
191
|
+
**Rule.** A field that must trigger logic is written by exactly one party. Keep
|
|
192
|
+
flags that MAPs reset apart from the field that triggers work.
|
|
193
|
+
|
|
194
|
+
### A script reads a select's options and gets nothing
|
|
195
|
+
**Cause.** Two gaps, both silent. On a form built through the API before 2026-10-01, the
|
|
196
|
+
select's field object has no `sourceType` and no `sourceValue`: `form-create` wrote them
|
|
197
|
+
as element configs but left them out of the form's data model, and only data-model
|
|
198
|
+
attributes reach `ProcesioForm`. A save in the designer adds them, and `form-create` and
|
|
199
|
+
`form-add-element` now write them too, for a static option list. The page is no fallback either:
|
|
200
|
+
the option nodes are not drawn until the list is opened once (none before, the
|
|
201
|
+
options after). A local replica that draws its own select hides both gaps, so the list is fine
|
|
202
|
+
in every test and empty on the live form.
|
|
203
|
+
**Rule.** On a form built or rebuilt since then, read a static list from the field's
|
|
204
|
+
`sourceValue`, through a lookup that ignores case and separators. For an older form, a
|
|
205
|
+
JSON or URL source (whose shape was never captured, so the builder leaves it out), or a
|
|
206
|
+
list the page has to supply, hand the script the list directly: write it in at build
|
|
207
|
+
time, or return it from a process call the form already makes. Opening the select from
|
|
208
|
+
code so that it draws works, but it leans on markup and timing. Spec and the one
|
|
209
|
+
remaining live check: `todo/procesio-form-create-select-source-in-data-model.md`.
|
|
210
|
+
|
|
211
|
+
### Field reads that worked stop working after a designer save
|
|
212
|
+
**Cause.** A form built through the API keeps its field names exactly as written, and
|
|
213
|
+
`ProcesioForm.data.fields` is keyed by them. A save in the designer re-keys them: it
|
|
214
|
+
splits each name on underscores, lowercases the parts and joins them in camelCase, so
|
|
215
|
+
`orderList` becomes `orderlist` and `order_id` becomes `orderId`. A read that
|
|
216
|
+
worked for weeks returns `undefined` the first time anyone saves the form in the
|
|
217
|
+
designer, and a lowercase snake_case name is not safe either.
|
|
218
|
+
**Rule.** Read fields through a lookup that ignores case and separators
|
|
219
|
+
([`../dto/form/description.md`](../dto/form/description.md)). Only a name that is a single
|
|
220
|
+
lowercase word survives a designer save unchanged. `form-create`, `form-edit` and
|
|
221
|
+
`form-update` return a warning naming every field a designer save would re-key, and
|
|
222
|
+
what it would become. They never rename: scripts in use read the names as built. When no name is given, the builder generates a single lowercase word from the label, so auto-named fields are safe by default; only a name you set yourself can trip the warning.
|
|
223
|
+
**Why it happens, and the 2026-10-05 fix.** The re-key is the designer's legacy format
|
|
224
|
+
`"0"`, which it applies to a form with no `dataModelAttributeFormatVersion`; under `"1"` (what
|
|
225
|
+
the designer writes for its own new forms) it keeps every name as written. The builder wrote
|
|
226
|
+
no version until 2026-10-05 and now writes `"1"`, so a form built since then keeps
|
|
227
|
+
`orderList`, `order_id` and `Customer_First_Name` through a designer save (measured on QA,
|
|
228
|
+
read back by form JS) and draws no warning. The lookup above is still right for a script that
|
|
229
|
+
may run on an older form.
|
|
230
|
+
|
|
231
|
+
### A designer save changes far more than the edit you made
|
|
232
|
+
**Cause.** Saving in the designer rewrites the whole definition. On an API-built form, one
|
|
233
|
+
save with no edit at all re-keyed the field names (above), added an encrypted `Data.code`
|
|
234
|
+
blob, gave every element a `class` config, replaced the theme layout, swapped `type` for
|
|
235
|
+
`rows` on text fields and removed `disabledIfFormIsInvalid` from buttons. The form-load
|
|
236
|
+
scripts survived it.
|
|
237
|
+
**Rule.** Treat a designer save of an API-built form as a migration: export the definition
|
|
238
|
+
before and after and diff them, rerun the form's live checks, and Publish. Better still,
|
|
239
|
+
change API-built forms only through the builder.
|
|
240
|
+
|
|
241
|
+
## Mapping and processes
|
|
242
|
+
|
|
243
|
+
### `[object Object]` lands in every field
|
|
244
|
+
**Cause.** A structured variable was mapped as a whole, or the row's `path`
|
|
245
|
+
attribute chain was dropped during a rewrite. The form side's path shape is typed
|
|
246
|
+
`any` in the renderer — it is **not derivable** and cannot be guessed correctly.
|
|
247
|
+
**Rule.** Eliminate paths: one process output variable per field, all primitives,
|
|
248
|
+
split by small Node actions ([06](06-PROCESS-INTEGRATION.md) §4).
|
|
249
|
+
|
|
250
|
+
### The designer shows raw guids and the launch 400s
|
|
251
|
+
**Cause.** A variable **name** on the left of a map row. The API accepts it.
|
|
252
|
+
**Rule.** The process-variable GUID goes on the left, always. Let
|
|
253
|
+
`form-set-element-event` resolve names — it fails before writing if one is unknown.
|
|
254
|
+
|
|
255
|
+
### The designer cannot render a mapping row you wrote via the API
|
|
256
|
+
**Cause.** The sides were written as bare strings.
|
|
257
|
+
**Rule.** Each side is an object: `{value, isList, path}`, with `path: {}` on the
|
|
258
|
+
process side and `path: null` on the form side.
|
|
259
|
+
|
|
260
|
+
### The process runs but the outputMap populates nothing
|
|
261
|
+
**Cause.** `syncRun: false` — the form fired and forgot.
|
|
262
|
+
**Rule.** `syncRun: true`. Verified to hold the line open across a multi-second
|
|
263
|
+
external call.
|
|
264
|
+
**Observed timing with `syncRun: false` (2026-10-22, FORM_LOAD and click chains):** the
|
|
265
|
+
renderer still launched with `runSynchronous=false`, waited for the completion notice, then
|
|
266
|
+
read `GET /api/formProcess/{form}/{process}/{instance}/variables`, and only then ran the next
|
|
267
|
+
event of the same chain. So a "hide the loader" script placed after the RUN_PROCESS runs once
|
|
268
|
+
the result is in, not right after the launch.
|
|
269
|
+
|
|
270
|
+
### A signature-pad value mapped to a File input fails at launch
|
|
271
|
+
**Symptom.** The click chain runs (publish, upload and launch all return 200), the form
|
|
272
|
+
unlocks, and nothing else happens. The instance shows 0 actions consumed and
|
|
273
|
+
`Error while building input model: Invalid variable value for the mandatory input file property.`
|
|
274
|
+
**Seen** once, on a duplicated form whose signature pad fed a `File` process input (the
|
|
275
|
+
upload itself succeeded; the stored value was `{id, elementId, name, file: {}, path, …}`).
|
|
276
|
+
Not yet checked on an original, non-duplicated form.
|
|
277
|
+
**Rule.** Before relying on a signature pad → File mapping, run the real chain once and check
|
|
278
|
+
the instance's actions. Give the form a visible failure path: a UI that only reacts to the
|
|
279
|
+
success output leaves the signer looking at a button that did nothing.
|
|
280
|
+
|
|
281
|
+
### The process launches twice per interaction
|
|
282
|
+
**Cause.** Two `RUN_PROCESS` events on the same trigger.
|
|
283
|
+
**Rule.** One event per trigger; rewire with `--replace`.
|
|
284
|
+
|
|
285
|
+
### A Node action is rejected at save time
|
|
286
|
+
**Cause.** `Timeout` outside 60–300, or a superseded action (`Call API v3`).
|
|
287
|
+
**Rule.** `Timeout` 60–300; use `Call API` with `Response Status` / `Response Body`
|
|
288
|
+
/ `Time Out`. Remember `Node` returns raw while `Javascript` wraps as `{result: v}`.
|
|
289
|
+
|
|
290
|
+
### Fields come back empty but the call succeeded (status 200, valid body)
|
|
291
|
+
**Cause.** Extraction quality — the model returned mostly nulls for a partially
|
|
292
|
+
legible document. Not a wiring failure.
|
|
293
|
+
**Rule.** Carry a `warning_status` / `warning_message` pair out of the process so
|
|
294
|
+
the form can tell the two apart, and never throw inside a parse Node — return a
|
|
295
|
+
diagnosable object.
|
|
296
|
+
|
|
297
|
+
### A file variable is rejected
|
|
298
|
+
**Cause.** `file` is not a type.
|
|
299
|
+
**Rule.** Use the `FileDataModel` model.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## CSS
|
|
304
|
+
|
|
305
|
+
### The page will not scroll; the bottom of the form is unreachable
|
|
306
|
+
**Cause.** `overflow: hidden` on `.form-builder--form`.
|
|
307
|
+
**Rule.** Never. Clip with a **background** instead — backgrounds honour
|
|
308
|
+
`border-radius` for free.
|
|
309
|
+
|
|
310
|
+
### The pinned footer lands on top of the content
|
|
311
|
+
**Cause.** A `transform` on `.form-builder--form` made the card the containing block
|
|
312
|
+
for `position: fixed` descendants.
|
|
313
|
+
**Rule.** Animate the card's `opacity` only. No `transform`, `filter`,
|
|
314
|
+
`perspective`, or `will-change: transform` on the card.
|
|
315
|
+
|
|
316
|
+
### An animated gradient bar vanishes after the first cycle
|
|
317
|
+
**Cause.** `background-repeat: no-repeat` while animating `background-position` —
|
|
318
|
+
the gradient simply slid away.
|
|
319
|
+
**Rule.** `repeat-x`, gradient starting and ending on the same colour, travel
|
|
320
|
+
exactly one tile per cycle.
|
|
321
|
+
|
|
322
|
+
### A CSS rule has no effect on the form's own markup
|
|
323
|
+
**Cause.** The form author wrote an inline `style` attribute; an inline declaration
|
|
324
|
+
beats a stylesheet one.
|
|
325
|
+
**Rule.** `!important`, and target it with `[style*="border-left"]`-style attribute
|
|
326
|
+
selectors when the structure is unknown.
|
|
327
|
+
|
|
328
|
+
### A `<div>` written into a paragraph is not where the CSS expects it
|
|
329
|
+
**Cause.** `Paragraph.component.vue` renders `<p v-html="sanitizeHtml(...)">`, and the
|
|
330
|
+
HTML parser cannot nest a `<div>` inside a `<p>` — the block is hoisted out and lands
|
|
331
|
+
as a SIBLING of an now-empty `<p>`. Selectors written against `p > .my-block` match
|
|
332
|
+
nothing, and the wrapper is `display: flex`, so the hoisted block becomes a flex ITEM
|
|
333
|
+
sized to its content: a centred block sits off to one side of the column it should fill.
|
|
334
|
+
**Rule.** Style the wrapper's children, not the `<p>`:
|
|
335
|
+
`.form-builder--paragraph { align-items: stretch } .form-builder--paragraph > * { flex: 1 1 auto; min-width: 0 }`.
|
|
336
|
+
DOMPurify's defaults keep `class`, `style` and `data-*`, so authored paragraph HTML can
|
|
337
|
+
carry real classes — do that instead of inline styles, which only `!important` can
|
|
338
|
+
override later.
|
|
339
|
+
|
|
340
|
+
### An `<img>` icon will not take a colour
|
|
341
|
+
**Cause.** The colour is baked into the icon service URL; `color` does nothing and
|
|
342
|
+
`filter` only approximates.
|
|
343
|
+
**Rule.** Rewrite the URL's colour parameter.
|
|
344
|
+
|
|
345
|
+
### The loader's indicator is invisible on a long form
|
|
346
|
+
**Cause.** It was centred inside a card taller than the viewport, so it sits below
|
|
347
|
+
the fold.
|
|
348
|
+
**Rule.** `position: sticky; top: 40vh` on the inner block.
|
|
349
|
+
|
|
350
|
+
### A completed-field glow overhangs the next column
|
|
351
|
+
**Cause.** An outer `box-shadow`.
|
|
352
|
+
**Rule.** `inset`.
|
|
353
|
+
|
|
354
|
+
### A hover lift does nothing on an element that animated in
|
|
355
|
+
**Cause.** The entrance animation used `animation-fill-mode: both`. Its last keyframe
|
|
356
|
+
(`transform: none`) stays applied after the animation ends, and animations beat
|
|
357
|
+
ordinary declarations, `:hover` included.
|
|
358
|
+
**Rule.** Entrances use `backwards`: the "from" state covers the delay, and the element
|
|
359
|
+
returns to its own styles at the end.
|
|
360
|
+
|
|
361
|
+
### Tiles in a grid overlap or overflow it
|
|
362
|
+
**Cause.** Authored `<a>` / `<button>` tiles with `width: 100%` and padding render with
|
|
363
|
+
`box-sizing: content-box` on this page, so every tile is wider than its grid track.
|
|
364
|
+
**Rule.** Set `box-sizing: border-box` on the component and its descendants. Also check
|
|
365
|
+
that a narrow-screen media query comes after the wider one in the file: a
|
|
366
|
+
`max-width: 480px` rule placed before a `max-width: 760px` rule loses to it on phones.
|
|
367
|
+
|
|
368
|
+
### The entrance stagger makes a long step take seconds to appear
|
|
369
|
+
**Cause.** An uncapped `nth-child` delay ramp.
|
|
370
|
+
**Rule.** Cap it: `nth-child(n+4) { animation-delay: 180ms; }`.
|
|
371
|
+
|
|
372
|
+
### A toast appears instantly with no transition
|
|
373
|
+
**Cause.** The class was added in the same frame as the insertion.
|
|
374
|
+
**Rule.** Add it inside `requestAnimationFrame`.
|
|
375
|
+
|
|
376
|
+
### The dropzone stays stuck in the drag state
|
|
377
|
+
**Cause.** `dragleave` fires on children; targeted removal missed.
|
|
378
|
+
**Rule.** On `dragleave`/`drop`, sweep **all** zones.
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Stepper
|
|
383
|
+
|
|
384
|
+
### A second, native stepper appears next to the custom one
|
|
385
|
+
**Cause.** The platform's nav renders as soon as the stepper's `steps` config names
|
|
386
|
+
the real step elements — which happens the next time the form is saved.
|
|
387
|
+
**Rule.** If you draw your own rail, hide theirs explicitly:
|
|
388
|
+
`.form-builder--stepper--nav { display: none !important; }`.
|
|
389
|
+
|
|
390
|
+
### The step indicator jumps to a wrong position (e.g. straight to 100%)
|
|
391
|
+
**Cause.** Step detection failed and the code guessed.
|
|
392
|
+
**Rule.** Return `-1` for unknown and **leave the indicator untouched**. Wrong
|
|
393
|
+
information is worse than a stale frame.
|
|
394
|
+
|
|
395
|
+
### Step detection breaks after a redesign
|
|
396
|
+
**Cause.** Matching on a design-system wrapper class.
|
|
397
|
+
**Rule.** Match on the visible banner text — that text is the form's own content.
|
|
398
|
+
|
|
399
|
+
### Custom step labels drift from the form's
|
|
400
|
+
**Cause.** A second, hand-maintained list.
|
|
401
|
+
**Rule.** Copy the labels off the platform's nav items before hiding it, and fall
|
|
402
|
+
back to the hard-coded list only if the counts disagree.
|
|
403
|
+
|
|
404
|
+
### A gated "next" button lets a fast clicker straight through
|
|
405
|
+
**Cause.** Two independent leaks, both measured on a replica:
|
|
406
|
+
1. the gate was a **class on the button**, and the renderer destroys and recreates the
|
|
407
|
+
nav buttons on every step change — the class is gone by the next click;
|
|
408
|
+
2. a step change is **not synchronous**. Until the swap lands, `currentStep()` still
|
|
409
|
+
reports the step you just left, so a burst of clicks each read "this step is fine"
|
|
410
|
+
and each advances one step. Three clicks jumped from step 1 to step 4, past two
|
|
411
|
+
ungated steps.
|
|
412
|
+
**Rule.** The class is presentation; **enforce in a capture-phase click listener on
|
|
413
|
+
the document**, recomputing the verdict at click time and calling `stopPropagation()`
|
|
414
|
+
so the platform's own handler never sees it. Add a short lock keyed on the step you
|
|
415
|
+
last advanced FROM, released when `currentStep()` actually changes.
|
|
416
|
+
|
|
417
|
+
### The gate can never be satisfied because the fields are hidden
|
|
418
|
+
**Cause.** A step hides its fields until some prerequisite (a document read, a lookup)
|
|
419
|
+
arrives, and readiness counts those hidden required fields. If the prerequisite fails,
|
|
420
|
+
the step is unreachable in both directions.
|
|
421
|
+
**Rule.** Whenever a step hides what it also requires, ship the **manual way out in the
|
|
422
|
+
same change** — an always-visible control that opens the fields — not a timeout. A
|
|
423
|
+
toast promising "you can fill these in by hand" over fields that are still hidden is
|
|
424
|
+
worse than no promise.
|
|
425
|
+
|
|
426
|
+
### The recompute loop stops the moment nobody is looking
|
|
427
|
+
**Cause.** `requestAnimationFrame` does not fire in a **backgrounded or hidden tab**,
|
|
428
|
+
and the recompute loop hangs entirely off it. Harmless for a person (nothing to see),
|
|
429
|
+
but it makes the form look frozen to any automated check — the page renders once and
|
|
430
|
+
never updates, with no error to find.
|
|
431
|
+
**Rule.** Know this before debugging a "form.js stopped working" in a headless or
|
|
432
|
+
side-panel browser. Give the local replica a switch (`?raf=timeout`) that swaps rAF for
|
|
433
|
+
a timer, and drive tests through that. Note that background tabs also throttle
|
|
434
|
+
`setTimeout` heavily, so allow generous waits before concluding anything is broken.
|
|
435
|
+
|
|
436
|
+
### The page scrolls itself on the very first render
|
|
437
|
+
**Cause.** `scrollIntoView` fired on the initial step assignment.
|
|
438
|
+
**Rule.** Only scroll when `lastStep > -1`.
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
## Deployment
|
|
443
|
+
|
|
444
|
+
### The form loses all its elements
|
|
445
|
+
**Cause.** `form-edit` (a desired-state editor) was used to change one thing.
|
|
446
|
+
**Rule.** Surgical actions only: `form-set-code`, `form-set-element-event`. Watch
|
|
447
|
+
the `elements` count in every write result.
|
|
448
|
+
|
|
449
|
+
### `len(None)` / a crash on a form that has never had code
|
|
450
|
+
**Cause.** `{"JAVASCRIPT": null, "CSS": null}` is the designer's **initial** state,
|
|
451
|
+
not a corrupt blob.
|
|
452
|
+
**Rule.** Normalize `null → ""` before any length or concatenation.
|
|
453
|
+
|
|
454
|
+
### Decryption fails and it is unclear whether the key or the blob is wrong
|
|
455
|
+
**Cause.** Both surface identically as a `UnicodeDecodeError`.
|
|
456
|
+
**Rule.** Round-trip `encrypt_code`/`decrypt_code` with a throwaway key. If that
|
|
457
|
+
works, the blob is fine and the key is wrong. Also check you are not confusing the
|
|
458
|
+
workspace API key with the form-code passphrase — both are short opaque tokens.
|
|
459
|
+
|
|
460
|
+
### A PUT starts failing for no visible reason
|
|
461
|
+
**Cause.** An unexpected extra field from the GET was echoed back, or camelCase was
|
|
462
|
+
sent where PascalCase is required.
|
|
463
|
+
**Rule.** Map the envelope explicitly (`_PUT_KEYS`), never spread the GET body.
|
|
464
|
+
|
|
465
|
+
### A fix on the process side breaks a branch that used to work
|
|
466
|
+
**Cause.** It was published straight to the live process.
|
|
467
|
+
**Rule.** Duplicate, change the copy, test the copy, promote. And when something
|
|
468
|
+
does break: revert fully and immediately, then re-approach.
|
|
469
|
+
|
|
470
|
+
### `form-set-code` succeeds and the form goes blank
|
|
471
|
+
**Cause.** The key stored for that environment is not the one the installation's
|
|
472
|
+
renderer uses. The write encrypts with it anyway; the renderer cannot open the blob, logs
|
|
473
|
+
`Malformed UTF-8 data` and never mounts the form. It is easy to read this as "the CLI
|
|
474
|
+
cannot write form CSS", which is the wrong conclusion. The tool no longer lends the
|
|
475
|
+
default environment's key to another installation, which closes the commonest way in,
|
|
476
|
+
but a wrong key stored under the right name still does this.
|
|
477
|
+
**Rule.** Before the first write on an installation, decrypt the code of a form whose CSS
|
|
478
|
+
was written in the designer there ([07](07-DEPLOY-WORKFLOW.md) §2). If that fails, the
|
|
479
|
+
key is wrong; do not write. `form-set-code --clear` repairs a form already blanked.
|
|
480
|
+
|
|
481
|
+
### A form answers "Form not found" after someone edited it in the designer
|
|
482
|
+
**Cause.** A designer **Save** without **Publish** turns a published form into a draft,
|
|
483
|
+
and a draft's page answers "Form not found". The draft is not closed, though: its data
|
|
484
|
+
stays reachable through the API, anonymous `rows/filter` included.
|
|
485
|
+
**Rule.** Publish after every designer save, and confirm the status through the API
|
|
486
|
+
(`status` 1 = published, 0 = draft). To take a form offline, make it private or disable
|
|
487
|
+
it. A draft takes the page down and leaves the data up.
|
|
488
|
+
|
|
489
|
+
### A form takes seconds to open, and much longer at busy times
|
|
490
|
+
**Cause.** The whole definition, scripts included, is sent on every open, uncompressed.
|
|
491
|
+
A 499 KB form took 4 s at good times and up to 20 s at bad ones. Minifying cut the
|
|
492
|
+
script by about a quarter but the form by only 9-15 %, because most of the weight is
|
|
493
|
+
elements and their data model (about 260 KB of them beside 100 KB of script, in one
|
|
494
|
+
case).
|
|
495
|
+
**Rule.** Few hidden helper fields: one request field and one result field per process,
|
|
496
|
+
holding JSON, rather than one field per value. Minify at build time and keep the
|
|
497
|
+
readable source in the repository. Check a form's size before it ships, the way you
|
|
498
|
+
check its contrast.
|
|
499
|
+
|
|
500
|
+
### The first open on a fresh browser takes most of a minute
|
|
501
|
+
**Cause.** Not the form. On a cold browser the forms site's own stylesheet, about 2 MB,
|
|
502
|
+
took 31-62 s to download in one measurement, while the form and its first process call
|
|
503
|
+
together took about 11 s.
|
|
504
|
+
**Rule.** Before a demo, open each form once on the presenting machine so the platform's
|
|
505
|
+
files are cached. Load the opening view with one process call, not several. Report
|
|
506
|
+
platform slowness with numbers: in the same measurement a neutral CDN served 1 MB in
|
|
507
|
+
about a second.
|
|
508
|
+
|
|
509
|
+
### Each process call from a form takes three to four seconds
|
|
510
|
+
**Cause.** Every `RUN_PROCESS` from a form went through a platform publish step
|
|
511
|
+
(1.8-3.0 s) before the launch itself (1.2-1.4 s). Calls made one after another add up:
|
|
512
|
+
a view that read three items with one call each spent 16.5 s on them, about half of its
|
|
513
|
+
31.7 s load.
|
|
514
|
+
**Rule.** Give each view one call that returns everything it needs. Whether the publish
|
|
515
|
+
step can be skipped for a process that has not changed is a question for the platform
|
|
516
|
+
team.
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Silent DTO acceptance (the server takes it and says nothing)
|
|
521
|
+
|
|
522
|
+
These are accepted with a 2xx and no error, then cost a debugging session because
|
|
523
|
+
nothing points at them. `form-update` now emits non-blocking **lint** warnings for
|
|
524
|
+
the first three (see `tools/procesio/formlint.py`); the doctrine is in
|
|
525
|
+
`agents/procesio/PROCESIO-API-RELIABILITY-DOCTRINE.md`.
|
|
526
|
+
|
|
527
|
+
### An element saves fine but renders on NO tab / pane
|
|
528
|
+
**Symptom.** The element exists in the DTO and the PUT succeeds, but it appears on
|
|
529
|
+
no tab — invisible in the rendered form.
|
|
530
|
+
**Cause.** Its `parentId` references no element on the form (a phantom parent). Tab
|
|
531
|
+
and container membership is by `parentId` = a container element's id (§01-ANATOMY);
|
|
532
|
+
a dangling id is silently placed nowhere.
|
|
533
|
+
**Rule.** Point `parentId` at a real container/tab element id, or `null` for a
|
|
534
|
+
top-level element. (Lint: "phantom parent — renders on NO pane".)
|
|
535
|
+
|
|
536
|
+
### A form-update patch changes nothing, silently
|
|
537
|
+
**Symptom.** `form-update` returns applied, but the form is unchanged.
|
|
538
|
+
**Cause.** The `--data` patch was wrapped as `{"Data": {...}}` (or a top-level key
|
|
539
|
+
was mistyped). The deep-merge adds it as a NEW key inside `Data` — inert junk — and
|
|
540
|
+
never touches the field you meant. Deep-merge also REPLACES arrays wholesale and
|
|
541
|
+
sets `null` rather than deleting.
|
|
542
|
+
**Rule.** Pass the INNER fields directly: `--data '{"hideBranding": true}'`, not
|
|
543
|
+
`--data '{"Data": {"hideBranding": true}}'`. To change one item of an array, pass
|
|
544
|
+
the whole new array. (Lint: "wrapping mistake" / "not an existing Data field".)
|
|
545
|
+
|
|
546
|
+
### Two elements fight over selectors or process mapping
|
|
547
|
+
**Symptom.** CSS/JS targets the wrong element, or a process input maps from the
|
|
548
|
+
wrong field.
|
|
549
|
+
**Cause.** Two elements share the same `id` or `name` config value.
|
|
550
|
+
**Rule.** Keep every element's `id`/`name` config unique. (Lint: "N elements share
|
|
551
|
+
the same … config".)
|
|
552
|
+
|
|
553
|
+
### A multi-select maps a list into a single value
|
|
554
|
+
**Symptom.** A `multiple=true` select sends only one value (or a stringified list)
|
|
555
|
+
into a process.
|
|
556
|
+
**Cause.** Its `value` config / mapped data-model attribute is not marked `isList`.
|
|
557
|
+
**Rule.** Set `isList` on the value config / the data-model attribute for any
|
|
558
|
+
multiple-select. (Lint: "multiple-select … not marked isList".)
|
|
559
|
+
|
|
560
|
+
### Wiring one event on an element wipes the others
|
|
561
|
+
**Symptom.** After adding a click handler, a previously-working handler on the same
|
|
562
|
+
element is gone.
|
|
563
|
+
**Cause.** The write replaced ALL events on the trigger. An element commonly carries
|
|
564
|
+
`[RUN_PROCESS, RUN_JAVASCRIPT]` on one click trigger; a blanket replace discards
|
|
565
|
+
both.
|
|
566
|
+
**Rule.** Replace only the action you mean:
|
|
567
|
+
`form-set-element-event --replace-action RUN_PROCESS` keeps the sibling event in
|
|
568
|
+
order. Bare `--replace` now warns before discarding more than one; append (no flag)
|
|
569
|
+
to add alongside.
|