@aifabrix/builder 2.53.1 → 2.55.0
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.
- package/README.md +8 -0
- package/bin/aifabrix.js +2 -2
- package/lib/agent-kit/apply-ops.js +82 -0
- package/lib/agent-kit/checksums.js +28 -0
- package/lib/agent-kit/classify.js +113 -0
- package/lib/agent-kit/claude-shim.js +61 -0
- package/lib/agent-kit/constants.js +55 -0
- package/lib/agent-kit/file-list.js +103 -0
- package/lib/agent-kit/host-approve.js +130 -0
- package/lib/agent-kit/hosting/github.js +63 -0
- package/lib/agent-kit/hosts.js +71 -0
- package/lib/agent-kit/init.js +319 -0
- package/lib/agent-kit/kit-root.js +17 -0
- package/lib/agent-kit/managed-section.js +79 -0
- package/lib/agent-kit/package-load.js +45 -0
- package/lib/agent-kit/plan-ops.js +69 -0
- package/lib/agent-kit/remote-prompts.js +239 -0
- package/lib/agent-kit/render-host-markdown.js +40 -0
- package/lib/agent-kit/repo-guard.js +47 -0
- package/lib/agent-kit/report.js +107 -0
- package/lib/agent-kit/run.js +82 -0
- package/lib/agent-kit/scm/git.js +122 -0
- package/lib/agent-kit/state-file.js +83 -0
- package/lib/agent-kit/status.js +50 -0
- package/lib/agent-kit/v1-detect.js +81 -0
- package/lib/agent-kit/validate-kit.js +87 -0
- package/lib/agent-kit/workspace-name.js +40 -0
- package/lib/agent-kit/workspace-skeleton.js +103 -0
- package/lib/api/assistants.api.js +8 -5
- package/lib/api/channel-identity.api.js +41 -0
- package/lib/api/evidence-authoring.api.js +5 -1
- package/lib/api/evidence.api.js +2 -0
- package/lib/api/role-assistant-test-pack.api.js +86 -0
- package/lib/api/types/evidence.types.js +2 -0
- package/lib/api/work-search.api.js +163 -0
- package/lib/api/work.api.js +19 -12
- package/lib/app/list-external-systems.js +2 -1
- package/lib/app/show-display.js +33 -6
- package/lib/app/show.js +25 -2
- package/lib/channels/add-channel.js +164 -126
- package/lib/channels/approval-guides/chatgpt.js +14 -18
- package/lib/channels/approval-guides/claude.js +29 -0
- package/lib/channels/approval-guides/index.js +88 -22
- package/lib/channels/approval-guides/mcp-client.js +27 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +52 -3
- package/lib/channels/approval-guides/slack.js +10 -10
- package/lib/channels/approval-guides/teams-bot.js +8 -12
- package/lib/channels/channel-add-continuations.js +91 -0
- package/lib/channels/channel-add-ensure.js +124 -27
- package/lib/channels/channel-add-existing.js +160 -28
- package/lib/channels/channel-add-failure.js +61 -0
- package/lib/channels/channel-add-remaining.js +492 -0
- package/lib/channels/channel-add-tty.js +190 -0
- package/lib/channels/channel-add-wizard-config.js +138 -0
- package/lib/channels/channel-add-wizard.js +250 -0
- package/lib/channels/channel-artifact-generator.js +27 -13
- package/lib/channels/channel-cardinality.js +83 -0
- package/lib/channels/channel-catalog-icon.js +45 -0
- package/lib/channels/channel-cli-instructions.js +75 -0
- package/lib/channels/channel-configuration-map.js +213 -0
- package/lib/channels/channel-credential.js +11 -14
- package/lib/channels/channel-definition-project.js +101 -0
- package/lib/channels/channel-definition-registry.js +154 -0
- package/lib/channels/channel-definition-status.js +115 -0
- package/lib/channels/channel-description.js +60 -2
- package/lib/channels/channel-discovery.js +16 -2
- package/lib/channels/channel-external-system.js +86 -9
- package/lib/channels/channel-install-envelope-actions.js +88 -0
- package/lib/channels/channel-install-envelope-microsoft.js +155 -0
- package/lib/channels/channel-install-envelope.js +358 -0
- package/lib/channels/channel-install-help-md.js +172 -0
- package/lib/channels/channel-install-http-payload.js +62 -0
- package/lib/channels/channel-install-inventory.js +115 -0
- package/lib/channels/channel-install-profiles.js +90 -0
- package/lib/channels/channel-instance-collision.js +118 -0
- package/lib/channels/channel-instance-key.js +100 -0
- package/lib/channels/channel-instance-materialize.js +240 -0
- package/lib/channels/channel-integration-generator.js +18 -9
- package/lib/channels/channel-integration-template.js +101 -22
- package/lib/channels/channel-inventory-fetch.js +79 -0
- package/lib/channels/channel-oauth-preflight.js +104 -0
- package/lib/channels/channel-package-version.js +76 -0
- package/lib/channels/channel-predefined-client.js +154 -0
- package/lib/channels/channel-probe.js +7 -2
- package/lib/channels/channel-runtime-resolver.js +194 -72
- package/lib/channels/channel-status-display.js +86 -16
- package/lib/channels/channel-targets.js +132 -92
- package/lib/channels/chatgpt-callback.js +318 -0
- package/lib/channels/chatgpt-channel-add.js +229 -0
- package/lib/channels/chatgpt-preflight.js +396 -0
- package/lib/channels/chatgpt-runtime-contract.js +17 -0
- package/lib/channels/chatgpt-setup-values.js +124 -0
- package/lib/channels/claude-callback.js +67 -0
- package/lib/channels/claude-channel-add.js +254 -0
- package/lib/channels/claude-runtime-contract.js +40 -0
- package/lib/channels/claude-runtime.js +58 -0
- package/lib/channels/claude-setup-values.js +92 -0
- package/lib/channels/mcp-client/config-merge.js +148 -0
- package/lib/channels/mcp-client/ensure-client.js +231 -0
- package/lib/channels/mcp-client/paths.js +53 -0
- package/lib/channels/mcp-client/profiles.js +122 -0
- package/lib/channels/mcp-client/redirect-uris.js +99 -0
- package/lib/channels/mcp-client/runtime.js +59 -0
- package/lib/channels/mcp-client-channel-add.js +186 -0
- package/lib/channels/microsoft-copilot-channel-add.js +117 -7
- package/lib/channels/microsoft-copilot-entra-identifier-uris.js +187 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +106 -18
- package/lib/channels/microsoft-copilot-entra-sso.js +31 -2
- package/lib/channels/microsoft-copilot-package-prior.js +107 -0
- package/lib/channels/microsoft-copilot-package.js +29 -28
- package/lib/channels/microsoft-provisioning/a365.js +80 -0
- package/lib/channels/microsoft-provisioning/auth-config.js +240 -0
- package/lib/channels/microsoft-provisioning/auth.js +179 -0
- package/lib/channels/microsoft-provisioning/cli.js +71 -0
- package/lib/channels/microsoft-provisioning/constants.js +75 -0
- package/lib/channels/microsoft-provisioning/errors.js +117 -0
- package/lib/channels/microsoft-provisioning/index.js +55 -0
- package/lib/channels/microsoft-provisioning/install-atk.js +158 -0
- package/lib/channels/microsoft-provisioning/install-teams.js +115 -0
- package/lib/channels/microsoft-provisioning/login-portal-device.js +236 -0
- package/lib/channels/microsoft-provisioning/login-portal-parse.js +71 -0
- package/lib/channels/microsoft-provisioning/login-portal-teams.js +193 -0
- package/lib/channels/microsoft-provisioning/login-portal.js +230 -0
- package/lib/channels/microsoft-provisioning/persist.js +110 -0
- package/lib/channels/microsoft-provisioning/teams-bot-args.js +119 -0
- package/lib/channels/microsoft-provisioning/teams-bot-controller.js +123 -0
- package/lib/channels/microsoft-provisioning/teams-bot-parse.js +134 -0
- package/lib/channels/microsoft-provisioning/teams-bot-persist.js +113 -0
- package/lib/channels/microsoft-provisioning/teams-bot-provision.js +234 -0
- package/lib/channels/microsoft-provisioning/teams-bot-secrets.js +45 -0
- package/lib/channels/microsoft-provisioning/teams-cli.js +82 -0
- package/lib/channels/runtime-tool-catalog.js +5 -2
- package/lib/channels/slack-channel-add-portal.js +130 -0
- package/lib/channels/slack-channel-add-tty-auth.js +95 -0
- package/lib/channels/slack-channel-add.js +311 -0
- package/lib/channels/slack-mcp-callback.js +51 -0
- package/lib/channels/slack-mcp-runtime.js +156 -0
- package/lib/channels/slack-provisioning/apps.js +181 -0
- package/lib/channels/slack-provisioning/auth-store.js +110 -0
- package/lib/channels/slack-provisioning/auth-ticket.js +185 -0
- package/lib/channels/slack-provisioning/auth.js +115 -0
- package/lib/channels/slack-provisioning/callbacks.js +41 -0
- package/lib/channels/slack-provisioning/cli.js +226 -0
- package/lib/channels/slack-provisioning/constants.js +37 -0
- package/lib/channels/slack-provisioning/credentials.js +169 -0
- package/lib/channels/slack-provisioning/curl-shim.js +132 -0
- package/lib/channels/slack-provisioning/developer-install.js +118 -0
- package/lib/channels/slack-provisioning/env-file.js +120 -0
- package/lib/channels/slack-provisioning/errors.js +47 -0
- package/lib/channels/slack-provisioning/go-ca-bundle.js +137 -0
- package/lib/channels/slack-provisioning/index.js +250 -0
- package/lib/channels/slack-provisioning/install-cli.js +335 -0
- package/lib/channels/slack-provisioning/manifest.js +89 -0
- package/lib/channels/slack-provisioning/oauth-lock.js +33 -0
- package/lib/channels/slack-provisioning/offer-cli.js +113 -0
- package/lib/channels/slack-provisioning/onboard-members.js +122 -0
- package/lib/channels/slack-provisioning/onboard.js +89 -0
- package/lib/channels/slack-provisioning/persist.js +95 -0
- package/lib/channels/slack-provisioning/remaining-urls.js +158 -0
- package/lib/channels/slack-provisioning/with-curl-on-path.js +53 -0
- package/lib/channels/teams-bot-channel-add.js +94 -0
- package/lib/channels/vendor-dataplane-url.js +249 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/setup-certification-commands.js +2 -2
- package/lib/cli/setup-certification.help.js +5 -1
- package/lib/cli/setup-external-system-help.js +2 -0
- package/lib/cli/setup-external-system.js +1 -1
- package/lib/commands/agent-kit-help.js +79 -0
- package/lib/commands/agent-kit.js +346 -0
- package/lib/commands/channel-add-help.js +366 -0
- package/lib/commands/channel-add-setup.js +162 -80
- package/lib/commands/channel-configure.js +118 -0
- package/lib/commands/channel.js +10 -1
- package/lib/commands/datasource-capability-relate-cli.js +5 -4
- package/lib/commands/governance-upload-external.js +6 -3
- package/lib/commands/lifecycle-command-action.js +2 -5
- package/lib/commands/lifecycle-external.js +93 -21
- package/lib/commands/repair-auth-apply.js +1 -1
- package/lib/commands/repair-datasource-key-skip.js +39 -0
- package/lib/commands/repair-datasource-keys.js +24 -12
- package/lib/commands/repair-datasource-test-payload.js +4 -2
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +23 -2
- package/lib/commands/repair-datasource.js +3 -0
- package/lib/commands/repair-external-run.js +59 -25
- package/lib/commands/repair-openapi-rest-runtime.js +127 -0
- package/lib/commands/repair-orchestration-tag-merge.js +339 -0
- package/lib/commands/repair-rbac-catalog-defaults.js +96 -0
- package/lib/commands/repair-rbac-platform-preset.js +26 -15
- package/lib/commands/repair-rbac-reader-roles.js +8 -21
- package/lib/commands/repair-rbac.js +26 -44
- package/lib/commands/repair-system-permissions.js +24 -22
- package/lib/commands/role-assistant-copy-output.js +61 -0
- package/lib/commands/role-assistant-copy.js +155 -0
- package/lib/commands/role-assistant-test-output.js +22 -9
- package/lib/commands/role-assistant-test-result-rows.js +42 -0
- package/lib/commands/role-assistant.js +150 -43
- package/lib/commands/search.js +143 -0
- package/lib/commands/test-e2e-external.js +148 -21
- package/lib/commands/test-trust-external.js +7 -5
- package/lib/commands/upload-credential-push-log.js +2 -1
- package/lib/commands/upload-publish-context.js +1 -1
- package/lib/commands/upload-role-assistant-shell.js +124 -0
- package/lib/commands/upload-sidecar-followups.js +10 -4
- package/lib/commands/upload.js +18 -3
- package/lib/commands/verify-operations-skip-e2e.js +131 -0
- package/lib/commands/verify-operations-step-plan.js +6 -33
- package/lib/commands/verify-operations-steps.js +3 -1
- package/lib/core/secrets-docker-env.js +4 -1
- package/lib/core/secrets-env-content.js +17 -3
- package/lib/datasource/capability/capability-manifest.js +0 -3
- package/lib/datasource/capability/copy-test-payload.js +3 -0
- package/lib/datasource/capability/relate-operations.js +28 -10
- package/lib/datasource/capability/run-capability-relate.js +48 -25
- package/lib/datasource/datasource-identifier.js +13 -5
- package/lib/deployment/deployer-poll-run.js +117 -35
- package/lib/external-system/deploy-dataplane-published.js +70 -0
- package/lib/external-system/deploy-helpers.js +26 -1
- package/lib/external-system/deploy.js +22 -8
- package/lib/external-system/download-helpers.js +29 -2
- package/lib/external-system/download-role-assistant.js +109 -4
- package/lib/external-system/download.js +46 -30
- package/lib/external-system/sync-deploy-manifest.js +3 -2
- package/lib/external-system/upload-identity.js +42 -0
- package/lib/generator/index.js +19 -15
- package/lib/generator/split.js +13 -2
- package/lib/generator/wizard-datasource-key.js +54 -0
- package/lib/generator/wizard.js +55 -54
- package/lib/integration-definition/apply-datasource-keys.js +75 -0
- package/lib/integration-definition/apply-relationships.js +195 -0
- package/lib/integration-definition/apply-static-enterprise.js +229 -0
- package/lib/integration-definition/apply-system-file.js +71 -0
- package/lib/integration-definition/apply-test-endpoint.js +89 -0
- package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
- package/lib/integration-definition/apply.js +78 -59
- package/lib/integration-definition/enrich-openapi-operations.js +36 -10
- package/lib/integration-definition/enrich-openapi-pick.js +87 -0
- package/lib/lifecycle/role-assistant-governance.js +181 -0
- package/lib/lifecycle/scenario-upload.js +181 -30
- package/lib/programmatic/builder-api-cors.js +143 -0
- package/lib/programmatic/builder-api-request.js +6 -0
- package/lib/programmatic/builder-api-route-dispatch.js +56 -42
- package/lib/programmatic/builder-api-server.js +8 -1
- package/lib/programmatic/capability-registry.js +55 -0
- package/lib/programmatic/channel-install-help-resolve.js +359 -0
- package/lib/programmatic/channel-install-session.js +218 -0
- package/lib/programmatic/help-content/channel-onboarding.md +2 -0
- package/lib/programmatic/help-content/cip-overview.md +3 -1
- package/lib/programmatic/http-raw-response.js +62 -0
- package/lib/programmatic/index.js +2 -0
- package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
- package/lib/programmatic/openapi-channel-install-bindings.js +179 -0
- package/lib/programmatic/openapi-channel-install-schemas.js +289 -0
- package/lib/programmatic/openapi-component-schemas.js +19 -1
- package/lib/programmatic/openapi-description-enricher.js +3 -1
- package/lib/programmatic/openapi-descriptions.js +80 -3
- package/lib/programmatic/openapi-envelope-examples.js +124 -0
- package/lib/programmatic/openapi-operation-bindings.js +9 -1
- package/lib/programmatic/openapi-request-schemas.js +5 -0
- package/lib/programmatic/openapi-schema-descriptions-channel.js +319 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
- package/lib/programmatic/openapi-spec.js +13 -8
- package/lib/programmatic/platform-rbac-catalog.js +36 -18
- package/lib/programmatic/request-timeout.js +3 -0
- package/lib/programmatic/route-handler-map.js +58 -1
- package/lib/programmatic/route-handlers-context.js +2 -1
- package/lib/programmatic/run-auth-permissions.js +54 -0
- package/lib/programmatic/run-channel-catalog.js +238 -0
- package/lib/programmatic/run-channel-install-artifacts.js +137 -0
- package/lib/programmatic/run-channel-install-copilot.js +353 -0
- package/lib/programmatic/run-channel-install-options.js +236 -0
- package/lib/programmatic/run-channel-install-teams-bot.js +204 -0
- package/lib/programmatic/run-channel-install.js +346 -0
- package/lib/programmatic/run-channel-package.js +87 -7
- package/lib/programmatic/run-download.js +41 -0
- package/lib/programmatic/workspace-context.js +2 -0
- package/lib/protection/auth-context.js +3 -1
- package/lib/protection/protection-display.js +3 -2
- package/lib/protection/report-exit.js +50 -0
- package/lib/protection/run-commands.js +2 -0
- package/lib/role-assistant/evidence-sync.js +4 -2
- package/lib/role-assistant/evidence-validation-issues.js +51 -0
- package/lib/role-assistant/knowledge-sync.js +10 -4
- package/lib/role-assistant/package-validate.js +175 -0
- package/lib/role-assistant/settings.js +49 -2
- package/lib/role-assistant/test-case-assertion-row.js +36 -0
- package/lib/role-assistant/test-case-copy-bind.js +77 -0
- package/lib/role-assistant/test-case-copy-expected.js +127 -0
- package/lib/role-assistant/test-case-copy-from-work.js +90 -0
- package/lib/role-assistant/test-case-copy-interactions.js +67 -0
- package/lib/role-assistant/test-case-copy.js +119 -0
- package/lib/role-assistant/test-case-expected-catalog.js +135 -0
- package/lib/role-assistant/test-case-validate.js +88 -0
- package/lib/role-assistant/test-cases-bid.js +117 -4
- package/lib/role-assistant/test-cases-evaluate.js +159 -24
- package/lib/role-assistant/test-cases-evidence.js +175 -0
- package/lib/role-assistant/test-cases-honesty.js +155 -6
- package/lib/role-assistant/test-cases-lifecycle.js +291 -0
- package/lib/role-assistant/test-cases-search-graph.js +122 -0
- package/lib/role-assistant/test-cases-search.js +247 -0
- package/lib/role-assistant/test-cases.js +71 -172
- package/lib/role-assistant/test-pack-map.js +180 -0
- package/lib/role-assistant/test-pack-sync.js +187 -0
- package/lib/role-assistant/test-runner-debug.js +54 -0
- package/lib/role-assistant/test-runner-respond-body.js +36 -0
- package/lib/role-assistant/test-runner-search.js +164 -0
- package/lib/role-assistant/test-runner-start-payload.js +63 -10
- package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
- package/lib/role-assistant/test-runner-workhub-helpers.js +40 -2
- package/lib/role-assistant/test-runner-workhub-soft.js +9 -3
- package/lib/role-assistant/test-runner-workhub.js +74 -32
- package/lib/role-assistant/test-runner.js +66 -11
- package/lib/schema/external-datasource.schema.json +146 -21
- package/lib/schema/external-system.schema.json +177 -2
- package/lib/schema/mcp-client-profile.schema.json +103 -0
- package/lib/schema/role-assistant-test-case.schema.json +408 -0
- package/lib/search/dataplane-context.js +23 -0
- package/lib/search/search-args.js +211 -0
- package/lib/search/search-display.js +238 -0
- package/lib/search/search-errors.js +50 -0
- package/lib/search/search-prompts.js +119 -0
- package/lib/search/search-roles.js +85 -0
- package/lib/search/search-run.js +241 -0
- package/lib/search/search-skills.js +198 -0
- package/lib/utils/app-path-resolve.js +4 -0
- package/lib/utils/authentication-env-template.js +44 -6
- package/lib/utils/authentication-slot-show.js +153 -0
- package/lib/utils/credential-display.js +43 -1
- package/lib/utils/credential-secrets-env.js +6 -1
- package/lib/utils/env-copy.js +19 -7
- package/lib/utils/external-env-template.js +20 -2
- package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
- package/lib/utils/external-system-readiness-compact-display.js +30 -1
- package/lib/utils/external-system-validators.js +2 -1
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/paths.js +18 -1
- package/lib/utils/platform-shell-package.js +69 -0
- package/lib/utils/port-resolver.js +50 -1
- package/lib/utils/rewrite-name-flag.js +20 -0
- package/lib/utils/role-assistant-paths.js +13 -10
- package/lib/utils/schema-loader.js +37 -0
- package/lib/utils/schema-resolver.js +11 -1
- package/lib/utils/secrets-helpers.js +12 -21
- package/lib/utils/token-manager.js +10 -5
- package/lib/validation/validate-external-file.js +5 -1
- package/lib/validation/validate.js +41 -0
- package/package.json +1 -1
- package/templates/README.md +1 -1
- package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
- package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
- package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
- package/templates/agent-kit/agent-kit.yaml +45 -0
- package/templates/agent-kit/instructions/AGENTKIT.md +83 -0
- package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
- package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
- package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
- package/templates/agent-kit/parity-inventory.yaml +188 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +58 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
- package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +51 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
- package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +50 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
- package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +42 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
- package/templates/agent-kit/skills/shared/hosts.md +78 -0
- package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
- package/templates/agent-kit/workspace/LICENSE.mit +21 -0
- package/templates/agent-kit/workspace/README.md +89 -0
- package/templates/applications/builder-api/Dockerfile +3 -1
- package/templates/applications/builder-api/env.template +7 -0
- package/templates/applications/dataplane/application.yaml +6 -5
- package/templates/applications/dataplane/env.template +2 -2
- package/templates/applications/dataplane/rbac.yaml +35 -2
- package/templates/applications/keycloak/Dockerfile +30 -4
- package/templates/applications/keycloak/application.yaml +2 -2
- package/templates/applications/keycloak/cimd-lenient-parse/AbstractClientIdMetadataDocumentExecutor.java +896 -0
- package/templates/applications/keycloak/cimd-lenient-parse/SOURCE.md +19 -0
- package/templates/applications/keycloak/env.template +3 -0
- package/templates/applications/miso-controller/application.yaml +1 -2
- package/templates/applications/miso-controller/env.template +10 -9
- package/templates/channels/README.md +5 -5
- package/templates/channels/chatgpt/TROUBLESHOOTING.md +51 -0
- package/templates/channels/chatgpt/channel.json +59 -0
- package/templates/channels/chatgpt/icon.svg +1 -0
- package/templates/channels/chatgpt/install.template.md.hbs +20 -95
- package/templates/channels/chatgpt/integration/README.md +1 -1
- package/templates/channels/chatgpt/integration/application.json +2 -2
- package/templates/channels/chatgpt/integration/chatgpt-system.json +49 -4
- package/templates/channels/chatgpt/integration/env.template +2 -4
- package/templates/channels/chatgpt/integration/rbac.json +13 -0
- package/templates/channels/claude/TROUBLESHOOTING.md +44 -0
- package/templates/channels/claude/channel.json +59 -0
- package/templates/channels/claude/icon.svg +1 -0
- package/templates/channels/claude/install.template.md.hbs +22 -0
- package/templates/channels/claude/integration/README.md +14 -0
- package/templates/channels/claude/integration/application.json +15 -0
- package/templates/channels/claude/integration/claude-system.json +59 -0
- package/templates/channels/claude/integration/env.template +2 -0
- package/templates/channels/claude/integration/rbac.json +13 -0
- package/templates/channels/claude/manifest.template.json.hbs +40 -0
- package/templates/channels/mcp-client/channel.json +72 -0
- package/templates/channels/mcp-client/icon.svg +1 -0
- package/templates/channels/mcp-client/install.template.md.hbs +24 -0
- package/templates/channels/mcp-client/integration/README.md +13 -0
- package/templates/channels/mcp-client/integration/application.json +15 -0
- package/templates/channels/mcp-client/integration/env.template +2 -0
- package/templates/channels/mcp-client/integration/mcp-client-system.json +72 -0
- package/templates/channels/mcp-client/integration/rbac.json +13 -0
- package/templates/channels/mcp-client/manifest.template.json.hbs +41 -0
- package/templates/channels/mcp-client/profiles/cursor.json +26 -0
- package/templates/channels/mcp-client/profiles/github-copilot.json +29 -0
- package/templates/channels/mcp-client/profiles/vscode.json +29 -0
- package/templates/channels/microsoft-copilot/channel.json +73 -0
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +8 -4
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +65 -5
- package/templates/channels/microsoft-copilot/icon.svg +1 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +9 -9
- package/templates/channels/microsoft-copilot/integration/README.md +1 -1
- package/templates/channels/microsoft-copilot/integration/application.json +2 -2
- package/templates/channels/microsoft-copilot/integration/env.template +3 -6
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +63 -4
- package/templates/channels/microsoft-copilot/integration/rbac.json +13 -0
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +5 -5
- package/templates/channels/slack/channel.json +234 -0
- package/templates/channels/slack/icon.svg +1 -0
- package/templates/channels/slack/install.template.md.hbs +45 -28
- package/templates/channels/slack/integration/README.md +245 -22
- package/templates/channels/slack/integration/application.json +44 -7
- package/templates/channels/slack/integration/env.template +15 -6
- package/templates/channels/slack/integration/openapi/openapi.json +126 -0
- package/templates/channels/slack/integration/rbac.json +84 -0
- package/templates/channels/slack/integration/slack-datasource-commands.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +28 -3
- package/templates/channels/slack/integration/slack-datasource-events.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-interactive.json +154 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +40 -2
- package/templates/channels/slack/integration/slack-system.json +161 -72
- package/templates/channels/slack/manifest.template.json.hbs +10 -4
- package/templates/channels/teams-bot/channel.json +162 -0
- package/templates/channels/teams-bot/icon.svg +1 -0
- package/templates/channels/teams-bot/install.template.md.hbs +12 -13
- package/templates/channels/teams-bot/integration/README.md +5 -4
- package/templates/channels/teams-bot/integration/application.json +6 -4
- package/templates/channels/teams-bot/integration/env.template +5 -4
- package/templates/channels/teams-bot/integration/openapi/openapi.json +68 -0
- package/templates/channels/teams-bot/integration/rbac.json +21 -0
- package/templates/channels/teams-bot/integration/teams-bot-datasource-activities.json +154 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +128 -23
- package/templates/channels/web-embed/channel.json +60 -0
- package/templates/channels/web-embed/install.template.md.hbs +1 -1
- package/templates/channels/web-embed/integration/README.md +2 -2
- package/templates/channels/web-embed/integration/application.json +2 -2
- package/templates/channels/web-embed/integration/env.template +1 -1
- package/templates/channels/web-embed/integration/rbac.json +13 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +50 -4
- package/templates/python/docker-compose.hbs +14 -0
- package/templates/typescript/docker-compose.hbs +14 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Connected System contract checklist
|
|
2
|
+
|
|
3
|
+
Use after BID apply / repair and before READY or BUILT.
|
|
4
|
+
|
|
5
|
+
## Exposed
|
|
6
|
+
|
|
7
|
+
`exposed` must include `filterable`, `readonly`, `required`, `profiles` (`default` plus capability keys), and `schema`.
|
|
8
|
+
Every `filterable` field needs `metadataSchema.properties.<field>.filter: true` (usually `index: true`).
|
|
9
|
+
Schema-only stubs are not BUILT. `labelKey` prefers login identity before display name.
|
|
10
|
+
|
|
11
|
+
## Foreign keys
|
|
12
|
+
|
|
13
|
+
Challenge every storage and view DS. Empty `foreignKeys` on business facts/children is a defect.
|
|
14
|
+
FK lives on the child only: `fields` = carrier on this DS, `targetDatasource` = parent storage, `targetFields: ["externalId"]`.
|
|
15
|
+
Do not add reverse FKs on the parent. Same-DS `parentId` is a field, not a self-FK.
|
|
16
|
+
Allowed omit (changelog): config, logs, documented in-system root, self-tree.
|
|
17
|
+
Revalidate after BID apply: `relationships` must land on the `from` EDS.
|
|
18
|
+
|
|
19
|
+
## Viewpoints
|
|
20
|
+
|
|
21
|
+
Partitioned aggregates and current-state person composition (person + current manager + current location/org when those storage DS exist) need FK + `dimensions` (`type: fk`) + usually `abac.applicability: required`.
|
|
22
|
+
SQL must alias the grant column to the catalog dimension key before `GROUP BY`.
|
|
23
|
+
Protection SSOT stays on the storage DS; views inherit. Never bulk-sync a view as storage.
|
|
24
|
+
Do not flatten person+employment+org into one storage DS to avoid a current-state view.
|
|
25
|
+
|
|
26
|
+
## RBAC / ABAC
|
|
27
|
+
|
|
28
|
+
`roles[].value` = active COM catalog key from `aifabrix role list`. Map groups with `identity role set-groups`.
|
|
29
|
+
Local ABAC filters the physical column named after the dimension key.
|
|
30
|
+
Do not invent dimensions on `entityType: none` orchestration datasources.
|
|
31
|
+
|
|
32
|
+
## CIP mappings
|
|
33
|
+
|
|
34
|
+
Prefer `fieldMappings`, FK, and composite `primaryKey` for reshape. Minimal prep only for broken export JSON.
|
|
35
|
+
CIP executes certified capability surfaces; it does not decide continuation. COM does not own continuation.
|
|
36
|
+
Capabilities execute; they do not decide.
|
|
37
|
+
|
|
38
|
+
## Format and changelog
|
|
39
|
+
|
|
40
|
+
`aifabrix convert` is for `integration/` and `builder/` only. Manual EDS edits need `INTEGRATION_CHANGELOG.md`. File generic CLI gaps in `BUILDER_IMPROVEMENT_FINDINGS.md`.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Delivery gates
|
|
2
|
+
|
|
3
|
+
Public docs: https://docs.aifabrix.ai/docs/build-ai-ready-systems-validate-test-cli-workflow
|
|
4
|
+
|
|
5
|
+
## Create
|
|
6
|
+
|
|
7
|
+
BID preferred:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
aifabrix integration-definition validate ./integration/<systemKey>/bid.json
|
|
11
|
+
aifabrix integration-definition apply ./integration/<systemKey>/bid.json --dry-run
|
|
12
|
+
aifabrix integration-definition apply ./integration/<systemKey>/bid.json
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Live OpenAPI: `aifabrix wizard --config integration/wizard-configs/<system>.yaml`
|
|
16
|
+
|
|
17
|
+
Then `aifabrix repair <systemKey> --rbac --expose` (add `--auth` when credentials exist).
|
|
18
|
+
Match workspace format with `aifabrix convert` on `integration/` only.
|
|
19
|
+
|
|
20
|
+
If `integration/<systemKey>/deploy.js` exists, you may run it as the publish ladder.
|
|
21
|
+
|
|
22
|
+
## Validate vs publish
|
|
23
|
+
|
|
24
|
+
| Command | Meaning |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| `aifabrix validate <systemKey>` | Local package |
|
|
27
|
+
| `aifabrix upload <systemKey>` | Draft application. CLI “Published” is not CS publish |
|
|
28
|
+
| `aifabrix deploy <systemKey>` | Controller deploy = publish. Always run after upload |
|
|
29
|
+
| `aifabrix show <systemKey> --online` | Dataplane **published** is truth |
|
|
30
|
+
|
|
31
|
+
## Tests (separate results)
|
|
32
|
+
|
|
33
|
+
| Layer | Command |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| Structure | `aifabrix datasource test <datasourceKey>` |
|
|
36
|
+
| Pipeline | `aifabrix datasource test-integration <datasourceKey>` |
|
|
37
|
+
| Live | `aifabrix datasource test-e2e <datasourceKey> --app <systemKey>` |
|
|
38
|
+
| Static seed | `aifabrix datasource load <datasourceKey> --app <systemKey>` |
|
|
39
|
+
|
|
40
|
+
Never mark live E2E pass when it did not run.
|
|
41
|
+
|
|
42
|
+
## Identity and protection order
|
|
43
|
+
|
|
44
|
+
1. `aifabrix auth status`
|
|
45
|
+
2. Catalog roles + fixtures + `identity apply` / `identity sync` / `role set-groups`
|
|
46
|
+
3. Load partitioned fixtures
|
|
47
|
+
4. `aifabrix protection upload <sourceStorageDs> --sync` (storage DS, not the view)
|
|
48
|
+
5. `aifabrix verify-governance --pack ./scenarios/….yaml` with `defaults.limit` ≤ 1000
|
|
49
|
+
|
|
50
|
+
`builder/dataplane/rbac.yaml` is dataplane **app** RBAC, not customer CS roles.
|
|
51
|
+
|
|
52
|
+
## Missing vendor `kv://`
|
|
53
|
+
|
|
54
|
+
Do not AskQuestion for secrets. Resolve, empty generated Key Vault placeholders, **upload**, print `{dataplaneUrl}/connected-systems/{systemKey}?tab=authentication`, stop.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Production safety
|
|
2
|
+
|
|
3
|
+
Many organizations have only a production vendor system. Assume that by default for live OpenAPI.
|
|
4
|
+
|
|
5
|
+
System-specific limits (subject, partition, credential status, PII) live only in `integration/<systemKey>/README.md`.
|
|
6
|
+
|
|
7
|
+
## Credential-deferred certify
|
|
8
|
+
|
|
9
|
+
When the vendor secret is not yet in `kv://`:
|
|
10
|
+
|
|
11
|
+
| Layer | Required |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| Package validate | Yes |
|
|
14
|
+
| Structure test | Yes |
|
|
15
|
+
| Integration / pipeline test | Yes when entityType supports it |
|
|
16
|
+
| AI / Trust / ops | Yes where runnable without vendor secret |
|
|
17
|
+
| Governance packs | Yes when subjects + fixtures exist offline; else skip-with-reason |
|
|
18
|
+
| Live E2E / vendor-auth probe | Skip with reason |
|
|
19
|
+
|
|
20
|
+
Publish may be **PASS_WITH_SKIPS** only for those allowed live/static skips. Never fake an E2E pass.
|
|
21
|
+
Secret present and storage sync fails → FAIL / NEEDS_FIXES, never skipped.
|
|
22
|
+
|
|
23
|
+
## Mutation blast radius
|
|
24
|
+
|
|
25
|
+
1. README names exactly one approved test subject (stable identity keys).
|
|
26
|
+
2. Create / update / delete may target only that subject.
|
|
27
|
+
3. Never mutate “first list row” or a broader population.
|
|
28
|
+
4. Prefer read-only E2E until writes and the subject are confirmed.
|
|
29
|
+
5. Mutating E2E without a designated subject → BLOCKED before the call.
|
|
30
|
+
|
|
31
|
+
## Agent
|
|
32
|
+
|
|
33
|
+
Read the integration README before live or mutating tests.
|
|
34
|
+
Do not invent a second safe subject without customer approval recorded in that README.
|
|
35
|
+
Missing `kv://`: upload draft first, print the Authentication tab URL, stop.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reserved Connected System key prefixes.
|
|
3
|
+
* @fileoverview Deterministic reserved-key check for customer delivery skills
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} key Connected System key
|
|
10
|
+
* @returns {boolean} True when the key uses a reserved ra- or ek- prefix
|
|
11
|
+
*/
|
|
12
|
+
function isReservedSystemKey(key) {
|
|
13
|
+
const value = String(key || '')
|
|
14
|
+
.trim()
|
|
15
|
+
.toLowerCase();
|
|
16
|
+
return value.startsWith('ra-') || value.startsWith('ek-');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
module.exports = { isReservedSystemKey };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aifabrix-plan
|
|
3
|
+
description: >
|
|
4
|
+
Turn a customer business specification into a delivery plan with a fixed
|
|
5
|
+
section order. Challenges missing facts; does not invent entities, roles,
|
|
6
|
+
or authority. Use before Connected System validate/build. Do not use for
|
|
7
|
+
Builder product source changes or COM architecture explanations.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# aifabrix-plan
|
|
11
|
+
|
|
12
|
+
Input: business specification and optional `systemKey`.
|
|
13
|
+
Output: one delivery plan from [plan-template.md](references/plan-template.md).
|
|
14
|
+
|
|
15
|
+
Score completeness with [challenge-checklist.md](references/challenge-checklist.md).
|
|
16
|
+
Next-step interaction: [interaction.md](references/interaction.md).
|
|
17
|
+
Host runtimes (local vs SSH): [hosts.md](../shared/hosts.md).
|
|
18
|
+
|
|
19
|
+
## Sequence
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
specification → aifabrix-plan → PLAN_READY | NEEDS_DECISIONS | BLOCKED
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Do not start Connected System validate until **PLAN_READY** and the user picks `next-yes`.
|
|
26
|
+
|
|
27
|
+
## Workflow
|
|
28
|
+
|
|
29
|
+
1. Collect the spec the user named. Do not mine platform repos as the spec.
|
|
30
|
+
2. Inventory without adding: purpose, sources, entities, relationships, role labels, operations, Viewpoints, Evidence, identity join. Missing sections → `TBD` plus an Open question.
|
|
31
|
+
3. Challenge required rows. AskQuestion every MISSING required row. Authority and identity cannot be guessed.
|
|
32
|
+
4. Write or update `.cursor/plans/{major}.0-{slug}.plan.md` using the template H2 order. Same capability updates in place.
|
|
33
|
+
5. Report status and path. On PLAN_READY, offer validate — do not run it without `next-yes`.
|
|
34
|
+
|
|
35
|
+
## Hard stops
|
|
36
|
+
|
|
37
|
+
- Empty spec, reserved `ra-` / `ek-` key, or contradictory identity → **BLOCKED** (no challenge prompts).
|
|
38
|
+
- Unmapped catalog roles → NEEDS_DECISIONS; never invent `*-reader`.
|
|
39
|
+
- “Already connected” is FACT only if `integration/<key>/` exists in this workspace.
|
|
40
|
+
- No implementation before the project plan gate.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
aifabrix auth status
|
|
44
|
+
aifabrix role list --page-size 1000
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If still unauthenticated after refresh, draft the plan; catalog-role rows stay MISSING until the user runs `aifabrix login`.
|
|
48
|
+
|
|
49
|
+
## Trigger examples
|
|
50
|
+
|
|
51
|
+
- Turn this customer specification into an implementation plan
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Challenge checklist (business spec → plan)
|
|
2
|
+
|
|
3
|
+
Mark every row **FACT** | **ASSUMPTION** | **MISSING**.
|
|
4
|
+
Do **not** invent FACT. ASSUMPTION is allowed only when the spec implies it and you name the risk.
|
|
5
|
+
|
|
6
|
+
`PLAN_READY` requires every **Required** row FACT or a **locked decision** in the plan (not a silent guess).
|
|
7
|
+
|
|
8
|
+
## AskQuestion (mandatory when a row is MISSING)
|
|
9
|
+
|
|
10
|
+
Do **not** only list gaps in chat. For every **Required** row marked MISSING, and every **Challenge if missing** row that says Ask (C1, C2, D-edit, C4), call the **AskQuestion** tool in the same turn as the `/cust-0-plan` report. Batch into **one** AskQuestion (multiple `questions[]`). Do not invent FACT from a skipped prompt.
|
|
11
|
+
|
|
12
|
+
Shared option ids: `challenge-fact` (user will supply via Other), `challenge-assumption` (lock ASSUMPTION + who must confirm), `challenge-open` (leave NEEDS_DECISIONS).
|
|
13
|
+
|
|
14
|
+
```json
|
|
15
|
+
{
|
|
16
|
+
"title": "Plan challenges",
|
|
17
|
+
"questions": [{
|
|
18
|
+
"id": "challenge-B4",
|
|
19
|
+
"prompt": "B4 Process owner is MISSING.\n\nPLAN_READY needs a named owner or a locked ASSUMPTION with who must confirm.",
|
|
20
|
+
"options": [
|
|
21
|
+
{ "id": "challenge-fact", "label": "I will provide the FACT (use Other)" },
|
|
22
|
+
{ "id": "challenge-assumption", "label": "Lock as ASSUMPTION (name who must confirm in Other)" },
|
|
23
|
+
{ "id": "challenge-open", "label": "Leave open — NEEDS_DECISIONS" }
|
|
24
|
+
]
|
|
25
|
+
}]
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Substitute `challenge-{rowId}` and the row’s **PLAN_READY when** / **If missing** text. For **C1**, options are 2–3 impact models (prefer hours saved) plus `challenge-open` — do not invent a FACT measure. For **C2** / **D-edit**, ask once with the same three shared ids (D-edit default if they pick assumption: enabled while Open).
|
|
30
|
+
|
|
31
|
+
Do **not** AskQuestion challenges on **BLOCKED** (empty spec / reserved key / contradictory identity). Skip rows already FACT or locked.
|
|
32
|
+
|
|
33
|
+
## Business case (Required)
|
|
34
|
+
|
|
35
|
+
| # | Item | PLAN_READY when |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| B1 | Purpose | One paragraph: what improves and for whom |
|
|
38
|
+
| B2 | Expected outcome | What “done” looks like (experience + proof), not only “system exists” |
|
|
39
|
+
| B3 | In / out of scope | Explicit out-of-scope (do not grow the spec) |
|
|
40
|
+
| B4 | Process owner | Named owner **or** ASSUMPTION with “who must confirm” |
|
|
41
|
+
| B5 | Business roles | ≥1 role with **can** and **cannot** (authority, not prompts) |
|
|
42
|
+
| B6 | Prove story | How we will show authority change and refusals (demo / VAL / ATTACK) |
|
|
43
|
+
|
|
44
|
+
## Delivery (Required)
|
|
45
|
+
|
|
46
|
+
| # | Item | PLAN_READY when |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| D1 | Connected System key(s) | kebab-case; not `ra-` / `ek-`; existing package vs **new** stated |
|
|
49
|
+
| D2 | Authoritative source(s) | Each source: already connected in **this** workspace, to-be-connected, or internal-only |
|
|
50
|
+
| D3 | Entities + identity | Every entity has a stable id; **no name-string PK**; identity join named if “current user → entity” |
|
|
51
|
+
| D4 | Foreign keys | Every business fact/child has joins **on the child (`from`) only**; do **not** add reverse FKs on the parent; self-`parentId` is a field, not a same-DS FK; config/logs/root/self-tree omit only with rationale (skill `aifabrix-foreign-keys-challenge`) |
|
|
52
|
+
| D5 | Catalog roles | Spec role **labels** mapped to COM keys from `aifabrix role list` — never invent `*-reader` |
|
|
53
|
+
| D6 | Operations | List/submit/view/admin from the spec only; no extra authority |
|
|
54
|
+
| D7 | Viewpoints vs raw | Aggregates/results use named Viewpoints; raw rows not exposed through result assistants. Person+employment+org packages include a **current-state person view** (person + current manager + current location/org) unless explicitly out of scope (`viewpoint-fk-dimensions.mdc`) |
|
|
55
|
+
| D8 | Validations | Happy path **and** refusal/attack cases (VAL-* / ATTACK-* or equivalent) |
|
|
56
|
+
| D9 | Evidence | What Evidence must prove (actor, role, rule, success/refusal) |
|
|
57
|
+
| D10 | Historical vs current | Current eligibility from source of record; historical Evidence is **not** cascade-deleted |
|
|
58
|
+
|
|
59
|
+
## Challenge if missing (may stay ASSUMPTION)
|
|
60
|
+
|
|
61
|
+
| # | Item | If missing |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| C1 | Success measures | Offer 2–3 models (prefer hours saved / participation); do not invent FACT |
|
|
64
|
+
| C2 | Audience / personas | Ask once |
|
|
65
|
+
| C3 | Language handling | Original = Evidence; derived translation/normalization = Knowledge; never overwrite original |
|
|
66
|
+
| D-edit | Optional update-while-open | Ask; default **ASSUMPTION: enabled while Open** if spec says “if editing is enabled” |
|
|
67
|
+
| C4 | Admin operators | Who Open / Close / Validate / Release — named role, not “the AI” |
|
|
68
|
+
| C5 | Catalog `resourceType` | Confirm at BID apply; do not guess silently |
|
|
69
|
+
| C6 | Designated test subject | Required before mutating live E2E (`production-system-safety.mdc`) — README later |
|
|
70
|
+
| C7 | Credential posture | Secret present vs deferred — README later; do not block plan draft |
|
|
71
|
+
| C8 | Role Assistant packages | `ra-<catalogRole>` only after D5; one RA per catalog role that performs work |
|
|
72
|
+
| C9 | Supported languages | Spec may say “any supported”; list known ones as ASSUMPTION |
|
|
73
|
+
| C10 | Taxonomy predefined vs discovered | Spec default: discovered unless owners lock a list |
|
|
74
|
+
| C11 | Identity uniqueness | Email (or equivalent login identity) is **unique in business fact** — `index` + `filter` + identity join. EDS schema has no `unique` flag; prove uniqueness after **sync** (duplicates = data-quality fail). Do not invent a schema property. |
|
|
75
|
+
| C12 | Live pull / sync | Live OpenAPI with secret stored: E2E **sync** (or `datasource load` for static) must pass. Sync fail with secret present is **FAIL**, not PASS_WITH_SKIPS. |
|
|
76
|
+
| C13 | Governance packs | People/HR CS or any DS with dimensions: `scenarios/` + fixtures **before** claiming push ready. Missing packs = **FAIL** unless README says governance N/A. |
|
|
77
|
+
|
|
78
|
+
## Must not invent
|
|
79
|
+
|
|
80
|
+
- Extra Business Roles, operations, or “admin backdoors”
|
|
81
|
+
- Extra entities or fields not in the spec
|
|
82
|
+
- Vendor/source fields beyond the **approved** source scope
|
|
83
|
+
- COM catalog role keys that are not on `aifabrix role list`
|
|
84
|
+
- Treating display names as foreign keys
|
|
85
|
+
- Adding FKs on **both** sides of a relationship (parent and child)
|
|
86
|
+
- Enforcing BR-* only in UI or prompt text
|
|
87
|
+
- Publishing results automatically when a process **closes** if the spec requires explicit release
|
|
88
|
+
- Cascade-delete of historical Evidence when source records become inactive
|
|
89
|
+
- Putting tenant ids, secrets, or designated subjects into `.cursor/rules` / skills / commands
|
|
90
|
+
|
|
91
|
+
## Classification hints
|
|
92
|
+
|
|
93
|
+
| Spec language | Classify as |
|
|
94
|
+
| --- | --- |
|
|
95
|
+
| “already connected” | FACT only if the package exists under `integration/` **in this workspace**; else MISSING (to-be-connected) |
|
|
96
|
+
| Role names like “Employee”, “HR Manager” | Labels — **must** map to catalog keys (D5) |
|
|
97
|
+
| “AI-derived” / themes | Knowledge, versioned, not authoritative fact |
|
|
98
|
+
| Original free text | Evidence — immutable |
|
|
99
|
+
| Aggregate leaderboards / maps | Viewpoints — not storage dumps |
|
|
100
|
+
| Self-nomination / unique / window | Governed business rules (BR-*) |
|
|
101
|
+
|
|
102
|
+
## Status
|
|
103
|
+
|
|
104
|
+
| Status | Meaning |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| **PLAN_READY** | Required rows FACT or locked; remaining opens have owner; safe to `/cust-1-validate` |
|
|
107
|
+
| **NEEDS_DECISIONS** | Required MISSING; **still write** the draft plan; do **not** start `/cust-1-validate` |
|
|
108
|
+
| **BLOCKED** | Empty spec, reserved `system-key`, contradictory identity (name as PK with no join), or “invent authority” requested |
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Phase and result interaction
|
|
2
|
+
|
|
3
|
+
Use structured questions. Do not start the next phase from chat prose alone.
|
|
4
|
+
|
|
5
|
+
## After success
|
|
6
|
+
|
|
7
|
+
Offer the next eligible phase. Proceed only on `next-yes`.
|
|
8
|
+
|
|
9
|
+
Shared option ids: `next-yes` · `next-no` · `next-stop`.
|
|
10
|
+
|
|
11
|
+
| Completed | Next offer |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| aifabrix-plan PLAN_READY | connected-system validate |
|
|
14
|
+
| connected-system READY | connected-system build |
|
|
15
|
+
| connected-system BUILT | connected-system publish |
|
|
16
|
+
| connected-system PASS or PASS_WITH_SKIPS | archive (separate) and/or prove validate |
|
|
17
|
+
| prove READY / BUILT / UPDATED | prove next phase |
|
|
18
|
+
| prove PASS or PASS_WITH_SKIPS | iterate validate/build |
|
|
19
|
+
|
|
20
|
+
Archive is a distinct user decision (`archive-yes` / `archive-no`). Never archive as a side effect of PASS.
|
|
21
|
+
|
|
22
|
+
## On gaps
|
|
23
|
+
|
|
24
|
+
- NEEDS_DECISIONS: AskQuestion challenge rows. No `cust-next`.
|
|
25
|
+
- BLOCKED / FAIL / NEEDS_FIXES / ABORTED: do not offer the next phase as if success.
|
|
26
|
+
|
|
27
|
+
## Phase detection (connected-system and prove)
|
|
28
|
+
|
|
29
|
+
1. Explicit phase from the user
|
|
30
|
+
2. Active plan and package state
|
|
31
|
+
3. Safe next eligible phase
|
|
32
|
+
4. Ask once if ambiguous
|
|
33
|
+
|
|
34
|
+
Never silently run the following phase after success.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Cursor plan template (mandatory section order)
|
|
2
|
+
|
|
3
|
+
Every `/cust-0-plan` output uses **this order**. Do not rename, skip, or reorder H2 sections. Empty sections get `TBD` plus an Open-question id — never omit the heading.
|
|
4
|
+
|
|
5
|
+
File: `.cursor/plans/{major}.0-{slug}.plan.md`
|
|
6
|
+
`{major}` = next integer after existing plans (including `done/`). `{slug}` = kebab from capability name / proposed `system-key`.
|
|
7
|
+
|
|
8
|
+
## Frontmatter (exact keys)
|
|
9
|
+
|
|
10
|
+
```yaml
|
|
11
|
+
---
|
|
12
|
+
name: {major}.0-{slug}
|
|
13
|
+
overview: |
|
|
14
|
+
{2–4 lines: purpose + systems + proof. No secrets.}
|
|
15
|
+
todos:
|
|
16
|
+
- id: lock-open-questions
|
|
17
|
+
content: Close Open questions (or defer with owner) until PLAN_READY
|
|
18
|
+
status: pending
|
|
19
|
+
- id: map-catalog-roles
|
|
20
|
+
content: Map spec role labels to COM catalog keys (aifabrix role list)
|
|
21
|
+
status: pending
|
|
22
|
+
- id: author-bid
|
|
23
|
+
content: Author BID (or wizard config) for each new Connected System key
|
|
24
|
+
status: pending
|
|
25
|
+
- id: cust-1-validate
|
|
26
|
+
content: /cust-1-validate <system-key> → READY
|
|
27
|
+
status: pending
|
|
28
|
+
- id: cust-2-build
|
|
29
|
+
content: /cust-2-build <system-key> → BUILT
|
|
30
|
+
status: pending
|
|
31
|
+
- id: cust-3-push
|
|
32
|
+
content: /cust-3-push <system-key> → PASS or PASS_WITH_SKIPS
|
|
33
|
+
status: pending
|
|
34
|
+
- id: viewpoints-fk-dims
|
|
35
|
+
content: Viewpoints have FK + dimensions + ABAC (not raw storage dumps)
|
|
36
|
+
status: pending
|
|
37
|
+
- id: identity-fixtures
|
|
38
|
+
content: Catalog roles + fixtures/groups (skill aifabrix-identity-rbac) — push-scoped
|
|
39
|
+
status: pending
|
|
40
|
+
- id: ra-packages
|
|
41
|
+
content: Role Assistant packages ra-<catalogRole> after CS published
|
|
42
|
+
status: pending
|
|
43
|
+
- id: cust-biz-1-validate
|
|
44
|
+
content: /cust-biz-1-validate — prove-ready scope + learning.md
|
|
45
|
+
status: pending
|
|
46
|
+
- id: cust-biz-2-build
|
|
47
|
+
content: /cust-biz-2-build — demo / Knowledge / candidate Evidence / tests
|
|
48
|
+
status: pending
|
|
49
|
+
- id: cust-biz-3-prove
|
|
50
|
+
content: /cust-biz-3-prove — happy + refusal; Evidence summary
|
|
51
|
+
status: pending
|
|
52
|
+
status: draft # draft until PLAN_READY, then active
|
|
53
|
+
isProject: false
|
|
54
|
+
---
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Duplicate `author-bid` / `cust-1-validate` / `cust-2-build` / `cust-3-push` **per additional** `system-key` (`author-bid-personio`, …). Do not add extra todo ids unless the spec requires a named workstream.
|
|
58
|
+
|
|
59
|
+
When `/cust-0-plan` status is **NEEDS_DECISIONS**, keep `lock-open-questions` pending and `status: draft`. When **PLAN_READY**, set `status: active` and mark `lock-open-questions` completed if none remain.
|
|
60
|
+
|
|
61
|
+
## Body (copy all H2s)
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
# {major}.0 — {Capability title}
|
|
65
|
+
|
|
66
|
+
**Plan status:** PLAN_READY | NEEDS_DECISIONS | BLOCKED
|
|
67
|
+
**Proposed system-key(s):** …
|
|
68
|
+
**Authoritative source(s):** … (in this workspace / to-be-connected / internal)
|
|
69
|
+
**Role Assistant(s):** `ra-<catalogRole>` (after D5) or TBD
|
|
70
|
+
**Operational SSOT (after build):** `integration/<system-key>/README.md`
|
|
71
|
+
**Public docs:** [Build AI-ready systems](https://docs.aifabrix.ai/docs/build-ai-ready-systems)
|
|
72
|
+
|
|
73
|
+
## Goal
|
|
74
|
+
|
|
75
|
+
{Business purpose — verbatim spirit of the spec. Why this capability exists.}
|
|
76
|
+
|
|
77
|
+
## Non-goals
|
|
78
|
+
|
|
79
|
+
- {From spec out-of-scope}
|
|
80
|
+
- Extra authority, entities, or source fields not in the spec
|
|
81
|
+
- Prompt-only enforcement of business rules
|
|
82
|
+
|
|
83
|
+
## Authoritative sources
|
|
84
|
+
|
|
85
|
+
| Source | Role | In this workspace? | Approved fields only |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| … | identity / facts / … | yes path / **no — to-be-connected** | list |
|
|
88
|
+
|
|
89
|
+
Least privilege: the capability may retrieve **only** fields the spec approves.
|
|
90
|
+
|
|
91
|
+
## Business entities
|
|
92
|
+
|
|
93
|
+
For each entity: key fields, identity, source. `heroId`-style keys **resolve** to the source identity — they do not create a second master.
|
|
94
|
+
|
|
95
|
+
## Relationship model
|
|
96
|
+
|
|
97
|
+
ASCII diagram from the spec. Then the FK list. Call out dual relationships to the same entity (e.g. voter + nominee).
|
|
98
|
+
|
|
99
|
+
## Foreign-key integrity
|
|
100
|
+
|
|
101
|
+
- Current eligibility = source of record
|
|
102
|
+
- Historical Evidence keeps stable FKs
|
|
103
|
+
- **Do not** cascade-delete history when a source row becomes inactive
|
|
104
|
+
|
|
105
|
+
## Business roles
|
|
106
|
+
|
|
107
|
+
| Spec label | COM catalog key | Can | Cannot |
|
|
108
|
+
| --- | --- | --- | --- |
|
|
109
|
+
| … | from `aifabrix role list` or **TBD** | … | … |
|
|
110
|
+
|
|
111
|
+
If the label is not a catalog key → Open question (do not invent).
|
|
112
|
+
|
|
113
|
+
## Language handling
|
|
114
|
+
|
|
115
|
+
| Artifact | Kind | Rule |
|
|
116
|
+
| --- | --- | --- |
|
|
117
|
+
| Original human text | Evidence | Never overwrite |
|
|
118
|
+
| Normalized / translated text | Derived Knowledge | Separate field |
|
|
119
|
+
|
|
120
|
+
## Core business rules
|
|
121
|
+
|
|
122
|
+
Table `BR-ID` | Rule | Enforced as (governed rule, not prompt).
|
|
123
|
+
|
|
124
|
+
## Governed operations
|
|
125
|
+
|
|
126
|
+
Grouped by role. Inputs / outputs / window. No extra ops.
|
|
127
|
+
|
|
128
|
+
## Result Viewpoints
|
|
129
|
+
|
|
130
|
+
Each viewpoint: returns, **does not return** (no voter identities, no raw text, …). Viewpoints are governed aggregates — not dumps of join tables.
|
|
131
|
+
|
|
132
|
+
## Validation cases
|
|
133
|
+
|
|
134
|
+
Keep spec IDs (`VAL-001`, …). These become acceptance tests.
|
|
135
|
+
|
|
136
|
+
## Security / attack validations
|
|
137
|
+
|
|
138
|
+
Keep spec IDs (`ATTACK-001`, …). Expected: denied / rejected by BR-*.
|
|
139
|
+
|
|
140
|
+
## Evidence to capture
|
|
141
|
+
|
|
142
|
+
Actor, Business Role, operation, authority result, rule version, success/refusal, source, Viewpoint, taxonomy version. Include the spec’s **Evidence summary** shape if given.
|
|
143
|
+
|
|
144
|
+
## Identity join (most important relationship)
|
|
145
|
+
|
|
146
|
+
Authenticated person → catalog role → business entity → source record. Nominations (or equivalent) reference **ids**, never display names.
|
|
147
|
+
|
|
148
|
+
## Locked decisions
|
|
149
|
+
|
|
150
|
+
| # | Question | Decision | Date |
|
|
151
|
+
| --- | --- | --- | --- |
|
|
152
|
+
| 1 | … | … | … |
|
|
153
|
+
|
|
154
|
+
## Open questions
|
|
155
|
+
|
|
156
|
+
| ID | Question | Blocks | Owner |
|
|
157
|
+
| --- | --- | --- | --- |
|
|
158
|
+
| Q1 | … | PLAN_READY / build / push / prove | … |
|
|
159
|
+
|
|
160
|
+
## Delivery mapping
|
|
161
|
+
|
|
162
|
+
| Track | Command | When |
|
|
163
|
+
| --- | --- | --- |
|
|
164
|
+
| CS | `/cust-1-validate` → `/cust-2-build` → `/cust-3-push` | After PLAN_READY; one ladder per new `system-key` |
|
|
165
|
+
| PoC | `/cust-biz-1-validate` ↔ `/cust-biz-2-build` ↔ `/cust-biz-3-prove` | After CS published (or explicit waiver) |
|
|
166
|
+
|
|
167
|
+
Existing connected sources: reuse package; do not duplicate the employee/master.
|
|
168
|
+
|
|
169
|
+
## Success criteria
|
|
170
|
+
|
|
171
|
+
Numbered, testable. Include authority-change demo if the spec has one (same person, new role, same interface).
|
|
172
|
+
|
|
173
|
+
## Next
|
|
174
|
+
|
|
175
|
+
- **PLAN_READY** → AskQuestion `cust-next` → `/cust-1-validate <system-key>` on **`next-yes`**
|
|
176
|
+
- **NEEDS_DECISIONS** → AskQuestion challenge rows ([challenge-checklist.md](challenge-checklist.md)); lock answers into this file; do not start `/cust-1-validate`
|
|
177
|
+
- **BLOCKED** → stop; do not author BID
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Rewrite rule
|
|
181
|
+
|
|
182
|
+
Re-running `/cust-0-plan` for the same capability **updates** this file (same `{major}.0-{slug}`). Do not mint a new major for Q&A.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aifabrix-prove
|
|
3
|
+
description: >
|
|
4
|
+
Prove a business case on a published Connected System and Role Assistant.
|
|
5
|
+
Updates learning, keeps candidate Evidence separate from certified Evidence,
|
|
6
|
+
and iterates validate, build, and prove. Do not use for Builder product
|
|
7
|
+
source changes or to skip Connected System publish.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# aifabrix-prove
|
|
11
|
+
|
|
12
|
+
Phases: `validate` | `build` | `prove`.
|
|
13
|
+
Loop: validate ↔ build ↔ prove ↔ learn.
|
|
14
|
+
|
|
15
|
+
`READY` means prove-ready, not permission to stop authoring. Build may run without READY.
|
|
16
|
+
|
|
17
|
+
Every phase **must** update [learning-template.md](references/learning-template.md).
|
|
18
|
+
Evidence rules: [evidence-lifecycle.md](references/evidence-lifecycle.md).
|
|
19
|
+
Demo shape: [demo-template.md](references/demo-template.md).
|
|
20
|
+
Next-step: [interaction.md](../aifabrix-plan/references/interaction.md).
|
|
21
|
+
Host runtimes (local vs SSH): [hosts.md](../shared/hosts.md).
|
|
22
|
+
|
|
23
|
+
## Keys
|
|
24
|
+
|
|
25
|
+
Connected System: same resolution as `aifabrix-connected-system`.
|
|
26
|
+
Role: existing COM catalog key; on disk `role-assistant/ra-<roleKey>/`.
|
|
27
|
+
|
|
28
|
+
CS must be published (`deploy` + `show --online`) before live prove. Upload-only draft is BLOCKED for prove.
|
|
29
|
+
|
|
30
|
+
## Validate
|
|
31
|
+
|
|
32
|
+
Clarify scope and unknowns. Classify MISSING rows. Drafting may continue offline.
|
|
33
|
+
|
|
34
|
+
## Build
|
|
35
|
+
|
|
36
|
+
Repeatable: demo, Knowledge, candidate Evidence, tests. Do not refuse because validate is not READY.
|
|
37
|
+
|
|
38
|
+
## Prove
|
|
39
|
+
|
|
40
|
+
Run assistant tests. Record observations and gap owner (`none` | `product-gap` | `missing-customer-fact` | `scope-decision`).
|
|
41
|
+
Happy + safe-stop coverage for authority scenarios.
|
|
42
|
+
Never report candidates as certified.
|
|
43
|
+
|
|
44
|
+
## Narrative
|
|
45
|
+
|
|
46
|
+
Prefer public product language from https://docs.aifabrix.ai and, when present, sibling website masters. Do not invent slogans. AI has no authority of its own.
|
|
47
|
+
|
|
48
|
+
## Trigger examples
|
|
49
|
+
|
|
50
|
+
- Prove this business case and update learning
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# demo.md template (Finnish, customer-facing)
|
|
2
|
+
|
|
3
|
+
**Path:** `role-assistant/ra-<roleKey>/demo/demo.md`
|
|
4
|
+
|
|
5
|
+
Feeds PowerPoint / ChatGPT / Gamma. Business language only — no MCP/API how-to.
|
|
6
|
+
|
|
7
|
+
**Narrative SSOT:** `aifabrix-docs/anchor-docs/web-site/` — especially `evaluate.md`, `homepage.md`, `solutions.md`, `platform.md`, `use-cases.md`. Do not invent slogans; use pillar language from those masters (Enterprise Knowledge, Operational Trust, Role Assistants, Evidence Fabrix). AI has no authority of its own.
|
|
8
|
+
|
|
9
|
+
## Outline
|
|
10
|
+
|
|
11
|
+
```md
|
|
12
|
+
# PoC-demo — <prosessi / rooli>
|
|
13
|
+
|
|
14
|
+
## 1. Ongelma (nykytila)
|
|
15
|
+
- Mitä työtä tehdään tänään (raportit, Excel, ad-hoc kyselyt)?
|
|
16
|
+
- Kuka odottaa vastausta? Kuinka kauan?
|
|
17
|
+
- Missä luottamus pettää (väärä data, väärä näkyvyys)?
|
|
18
|
+
|
|
19
|
+
## 2. Mitä todistamme
|
|
20
|
+
- Yksi prosessi, yksi rooli, mitattava lopputulos
|
|
21
|
+
- Omistaja:
|
|
22
|
+
- Onnistumisen mittarit (FACT vs oletus merkitty):
|
|
23
|
+
|
|
24
|
+
## 3. Miksi AI Fabrix
|
|
25
|
+
- Neljä pilaria (solutions/platform): Enterprise Knowledge → Operational Trust → Role Assistants → Evidence Fabrix
|
|
26
|
+
- Luotettu liiketoimintakonteksti (ei raakadata-dumppi); AI:lla ei omaa toimivaltaa
|
|
27
|
+
- Oikeat ihmiset näkevät / päättävät vain oman organisaatiovaltuutuksensa rajoissa
|
|
28
|
+
- Role Assistant + Evidence — tarkastettavissa (evaluate.md / architecture-evidence-observability.md)
|
|
29
|
+
- Lähde: `aifabrix-docs/anchor-docs/web-site/` (ei vapaa markkinointimuisti)
|
|
30
|
+
|
|
31
|
+
## 4. Demo-skenaariot
|
|
32
|
+
### <DOMAIN>-010 — <lyhyt nimi>
|
|
33
|
+
- Kysymys (liiketoimintakieli):
|
|
34
|
+
- Odotettu lopputulos:
|
|
35
|
+
- Mitä ei saa tapahtua (safe stop / refusal):
|
|
36
|
+
- Liittyvä rooli / oikeusraja:
|
|
37
|
+
|
|
38
|
+
### <DOMAIN>-020 — …
|
|
39
|
+
…
|
|
40
|
+
|
|
41
|
+
## 5. Mitattava hyöty
|
|
42
|
+
- Säästetyt tunnit / kierros / virheet — FACT vs oletus
|
|
43
|
+
- Miten mitataan PoCissa
|
|
44
|
+
|
|
45
|
+
## 6. Mitä ei tehdä tässä PoCissa
|
|
46
|
+
- …
|
|
47
|
+
|
|
48
|
+
## 7. Päätös (Day 10 -kehys)
|
|
49
|
+
- Proceed / Refine / Stop — kriteerit
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## English scenario map (for agents; keep out of customer slide deck)
|
|
53
|
+
|
|
54
|
+
For each Finnish scenario, maintain in `learning.md` scenario map:
|
|
55
|
+
|
|
56
|
+
| Field | English |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| scenarioId | e.g. FIN-010 |
|
|
59
|
+
| intent | One sentence business intent |
|
|
60
|
+
| happyExpected | What success looks like |
|
|
61
|
+
| safeStopExpected | Refusal / authority / insufficient info |
|
|
62
|
+
| capabilitiesInScope | Approved capability keys if known |
|
|
63
|
+
| evidenceCandidate | Path under `evidence/candidates/` or — |
|
|
64
|
+
| testHappy | YAML path |
|
|
65
|
+
| testSafeStop | YAML path |
|