@aifabrix/builder 2.54.1 → 2.55.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (253) hide show
  1. package/README.md +8 -0
  2. package/lib/agent-kit/apply-ops.js +82 -0
  3. package/lib/agent-kit/checksums.js +28 -0
  4. package/lib/agent-kit/classify.js +113 -0
  5. package/lib/agent-kit/claude-shim.js +61 -0
  6. package/lib/agent-kit/constants.js +55 -0
  7. package/lib/agent-kit/file-list.js +103 -0
  8. package/lib/agent-kit/host-approve.js +172 -0
  9. package/lib/agent-kit/hosting/github.js +63 -0
  10. package/lib/agent-kit/hosts.js +71 -0
  11. package/lib/agent-kit/init.js +319 -0
  12. package/lib/agent-kit/kit-root.js +17 -0
  13. package/lib/agent-kit/managed-section.js +79 -0
  14. package/lib/agent-kit/package-load.js +45 -0
  15. package/lib/agent-kit/plan-ops.js +69 -0
  16. package/lib/agent-kit/remote-prompts.js +272 -0
  17. package/lib/agent-kit/render-host-markdown.js +40 -0
  18. package/lib/agent-kit/repo-guard.js +47 -0
  19. package/lib/agent-kit/report.js +107 -0
  20. package/lib/agent-kit/run.js +82 -0
  21. package/lib/agent-kit/scm/git.js +122 -0
  22. package/lib/agent-kit/start.js +310 -0
  23. package/lib/agent-kit/state-file.js +83 -0
  24. package/lib/agent-kit/status.js +50 -0
  25. package/lib/agent-kit/v1-detect.js +81 -0
  26. package/lib/agent-kit/validate-kit.js +87 -0
  27. package/lib/agent-kit/workspace-name.js +40 -0
  28. package/lib/agent-kit/workspace-skeleton.js +103 -0
  29. package/lib/api/role-assistant-test-pack.api.js +86 -0
  30. package/lib/api/work-search.api.js +31 -4
  31. package/lib/api/work.api.js +19 -12
  32. package/lib/app/deploy.js +7 -4
  33. package/lib/app/list-external-systems.js +2 -1
  34. package/lib/app/offer-create-from-template.js +184 -0
  35. package/lib/app/show-display.js +33 -6
  36. package/lib/app/show.js +25 -2
  37. package/lib/channels/add-channel.js +1 -0
  38. package/lib/channels/approval-guides/claude.js +2 -2
  39. package/lib/channels/channel-add-failure.js +1 -0
  40. package/lib/channels/channel-add-remaining.js +15 -9
  41. package/lib/channels/channel-definition-status.js +115 -0
  42. package/lib/channels/channel-description.js +2 -1
  43. package/lib/channels/channel-install-envelope.js +4 -2
  44. package/lib/channels/channel-integration-generator.js +2 -0
  45. package/lib/channels/channel-runtime-resolver.js +14 -0
  46. package/lib/channels/channel-targets.js +31 -5
  47. package/lib/channels/claude-setup-values.js +4 -1
  48. package/lib/channels/slack-channel-add.js +59 -6
  49. package/lib/channels/slack-mcp-callback.js +51 -0
  50. package/lib/channels/slack-mcp-runtime.js +156 -0
  51. package/lib/channels/slack-provisioning/install-cli.js +14 -2
  52. package/lib/channels/slack-provisioning/with-curl-on-path.js +6 -1
  53. package/lib/cli/index.js +4 -0
  54. package/lib/cli/setup-app.js +8 -1
  55. package/lib/cli/setup-auth.js +11 -2
  56. package/lib/cli/setup-certification-commands.js +2 -2
  57. package/lib/cli/setup-certification.help.js +3 -1
  58. package/lib/commands/agent-kit-help.js +149 -0
  59. package/lib/commands/agent-kit.js +417 -0
  60. package/lib/commands/auth-status-user.js +99 -0
  61. package/lib/commands/auth-status.js +14 -4
  62. package/lib/commands/channel-add-help.js +5 -5
  63. package/lib/commands/datasource-capability-relate-cli.js +5 -4
  64. package/lib/commands/datasource-load-export-cli.js +7 -2
  65. package/lib/commands/datasource-test-trust-cli.js +5 -1
  66. package/lib/commands/governance-command-action.js +5 -4
  67. package/lib/commands/identity-membership-role-cache.js +6 -1
  68. package/lib/commands/lifecycle-command-action.js +16 -15
  69. package/lib/commands/login-credentials.js +8 -3
  70. package/lib/commands/login-device.js +14 -5
  71. package/lib/commands/login.js +14 -1
  72. package/lib/commands/logout.js +50 -15
  73. package/lib/commands/repair-auth-apply.js +1 -1
  74. package/lib/commands/repair-datasource-key-skip.js +39 -0
  75. package/lib/commands/repair-datasource-keys.js +24 -12
  76. package/lib/commands/repair-rbac.js +16 -10
  77. package/lib/commands/role-assistant-copy-output.js +61 -0
  78. package/lib/commands/role-assistant-copy.js +155 -0
  79. package/lib/commands/role-assistant-test-output.js +8 -9
  80. package/lib/commands/role-assistant-test-result-rows.js +42 -0
  81. package/lib/commands/role-assistant.js +140 -59
  82. package/lib/commands/search.js +143 -0
  83. package/lib/commands/test-trust-external.js +7 -5
  84. package/lib/commands/upload-sidecar-followups.js +4 -1
  85. package/lib/commands/verify-governance-command-action.js +9 -7
  86. package/lib/commands/verify-operations-command-action.js +9 -8
  87. package/lib/commands/verify-operations-skip-e2e.js +131 -0
  88. package/lib/commands/verify-operations-step-plan.js +6 -33
  89. package/lib/commands/verify-operations-steps.js +3 -1
  90. package/lib/commands/verify-trust-command-action.js +6 -5
  91. package/lib/datasource/capability/relate-operations.js +28 -10
  92. package/lib/datasource/capability/run-capability-relate.js +48 -25
  93. package/lib/datasource/datasource-identifier.js +13 -5
  94. package/lib/deployment/deployer-poll-run.js +117 -35
  95. package/lib/external-system/deploy-dataplane-published.js +70 -0
  96. package/lib/external-system/deploy.js +12 -2
  97. package/lib/external-system/download-role-assistant.js +41 -15
  98. package/lib/external-system/download.js +8 -3
  99. package/lib/generator/helpers.js +12 -1
  100. package/lib/generator/wizard-datasource-key.js +54 -0
  101. package/lib/generator/wizard.js +55 -54
  102. package/lib/integration-definition/apply-datasource-keys.js +75 -0
  103. package/lib/integration-definition/apply-relationships.js +195 -0
  104. package/lib/integration-definition/apply-static-enterprise.js +232 -0
  105. package/lib/integration-definition/apply-system-file.js +71 -0
  106. package/lib/integration-definition/apply-test-endpoint.js +89 -0
  107. package/lib/integration-definition/apply-viewpoint-defaults.js +157 -0
  108. package/lib/integration-definition/apply.js +78 -59
  109. package/lib/integration-definition/enrich-openapi-operations.js +36 -10
  110. package/lib/integration-definition/enrich-openapi-pick.js +87 -0
  111. package/lib/lifecycle/role-assistant-governance.js +56 -21
  112. package/lib/programmatic/capability-registry.js +1 -0
  113. package/lib/programmatic/index.js +2 -0
  114. package/lib/programmatic/openapi-apply-result-schemas.js +8 -0
  115. package/lib/programmatic/openapi-channel-install-schemas.js +4 -1
  116. package/lib/programmatic/openapi-component-schemas.js +1 -0
  117. package/lib/programmatic/openapi-descriptions.js +9 -3
  118. package/lib/programmatic/openapi-envelope-examples.js +7 -0
  119. package/lib/programmatic/openapi-operation-bindings.js +5 -0
  120. package/lib/programmatic/openapi-request-schemas.js +5 -0
  121. package/lib/programmatic/openapi-schema-descriptions-channel.js +8 -5
  122. package/lib/programmatic/openapi-schema-descriptions-operations.js +19 -0
  123. package/lib/programmatic/openapi-spec.js +1 -0
  124. package/lib/programmatic/request-timeout.js +3 -0
  125. package/lib/programmatic/route-handler-map.js +7 -0
  126. package/lib/programmatic/run-channel-catalog.js +50 -8
  127. package/lib/programmatic/run-channel-install-options.js +5 -1
  128. package/lib/programmatic/run-download.js +41 -0
  129. package/lib/protection/auth-context.js +3 -1
  130. package/lib/protection/protection-display.js +3 -2
  131. package/lib/protection/report-exit.js +50 -0
  132. package/lib/protection/run-commands.js +2 -0
  133. package/lib/role-assistant/knowledge-sync-settings-push.js +172 -0
  134. package/lib/role-assistant/knowledge-sync.js +9 -126
  135. package/lib/role-assistant/package-validate.js +175 -0
  136. package/lib/role-assistant/test-case-assertion-row.js +36 -0
  137. package/lib/role-assistant/test-case-copy-bind.js +77 -0
  138. package/lib/role-assistant/test-case-copy-expected.js +127 -0
  139. package/lib/role-assistant/test-case-copy-from-work.js +90 -0
  140. package/lib/role-assistant/test-case-copy-interactions.js +67 -0
  141. package/lib/role-assistant/test-case-copy.js +119 -0
  142. package/lib/role-assistant/test-case-expected-catalog.js +135 -0
  143. package/lib/role-assistant/test-case-validate.js +88 -0
  144. package/lib/role-assistant/test-cases-bid.js +117 -4
  145. package/lib/role-assistant/test-cases-evaluate.js +149 -31
  146. package/lib/role-assistant/test-cases-evidence.js +44 -5
  147. package/lib/role-assistant/test-cases-honesty.js +155 -6
  148. package/lib/role-assistant/test-cases-lifecycle.js +297 -0
  149. package/lib/role-assistant/test-cases-search-graph.js +122 -0
  150. package/lib/role-assistant/test-cases-search.js +20 -2
  151. package/lib/role-assistant/test-cases.js +34 -168
  152. package/lib/role-assistant/test-pack-map.js +180 -0
  153. package/lib/role-assistant/test-pack-sync.js +187 -0
  154. package/lib/role-assistant/test-runner-debug.js +54 -0
  155. package/lib/role-assistant/test-runner-respond-body.js +36 -0
  156. package/lib/role-assistant/test-runner-search.js +20 -5
  157. package/lib/role-assistant/test-runner-start-payload.js +63 -10
  158. package/lib/role-assistant/test-runner-workhub-answers.js +45 -16
  159. package/lib/role-assistant/test-runner-workhub.js +45 -21
  160. package/lib/role-assistant/test-runner.js +53 -10
  161. package/lib/schema/external-datasource.schema.json +36 -5
  162. package/lib/schema/external-system.schema.json +20 -2
  163. package/lib/schema/infra-parameter.schema.json +51 -3
  164. package/lib/schema/infra.parameter.yaml +476 -40
  165. package/lib/schema/role-assistant-test-case.schema.json +408 -0
  166. package/lib/schema/type/document-storage.json +1 -1
  167. package/lib/search/dataplane-context.js +23 -0
  168. package/lib/search/search-args.js +211 -0
  169. package/lib/search/search-display.js +238 -0
  170. package/lib/search/search-errors.js +50 -0
  171. package/lib/search/search-prompts.js +119 -0
  172. package/lib/search/search-roles.js +85 -0
  173. package/lib/search/search-run.js +241 -0
  174. package/lib/search/search-skills.js +198 -0
  175. package/lib/utils/api-required-permissions.js +271 -0
  176. package/lib/utils/api.js +16 -13
  177. package/lib/utils/authentication-slot-show.js +153 -0
  178. package/lib/utils/cli-json-exit.js +41 -0
  179. package/lib/utils/cli-utils.js +23 -5
  180. package/lib/utils/controller-url.js +78 -4
  181. package/lib/utils/credential-display.js +43 -1
  182. package/lib/utils/deployment-errors.js +15 -0
  183. package/lib/utils/deployment-validation-helpers.js +4 -1
  184. package/lib/utils/device-code.js +31 -10
  185. package/lib/utils/error-formatters/error-parser.js +16 -1
  186. package/lib/utils/error-formatters/permission-errors.js +19 -5
  187. package/lib/utils/external-system-readiness-compact-blocks.js +5 -1
  188. package/lib/utils/external-system-readiness-compact-display.js +30 -1
  189. package/lib/utils/external-system-validators.js +2 -1
  190. package/lib/utils/help-builder.js +3 -1
  191. package/lib/utils/keycloak-realm-ready.js +5 -2
  192. package/lib/utils/logger.js +1 -0
  193. package/lib/utils/paths.js +26 -5
  194. package/lib/utils/schema-loader.js +37 -0
  195. package/lib/utils/secrets-helpers.js +2 -2
  196. package/lib/utils/write-stream-and-wait.js +63 -0
  197. package/lib/validation/validate-external-file.js +5 -1
  198. package/lib/validation/validate.js +3 -2
  199. package/package.json +20 -6
  200. package/templates/agent-kit/adapters/claude/nested.CLAUDE.md +1 -0
  201. package/templates/agent-kit/adapters/claude/root.CLAUDE.md +5 -0
  202. package/templates/agent-kit/adapters/cursor/commands/cust-0-plan.md +5 -0
  203. package/templates/agent-kit/adapters/cursor/commands/cust-1-validate.md +5 -0
  204. package/templates/agent-kit/adapters/cursor/commands/cust-2-build.md +5 -0
  205. package/templates/agent-kit/adapters/cursor/commands/cust-3-push.md +5 -0
  206. package/templates/agent-kit/adapters/cursor/commands/cust-biz-1-validate.md +5 -0
  207. package/templates/agent-kit/adapters/cursor/commands/cust-biz-2-build.md +5 -0
  208. package/templates/agent-kit/adapters/cursor/commands/cust-biz-3-prove.md +5 -0
  209. package/templates/agent-kit/agent-kit.yaml +45 -0
  210. package/templates/agent-kit/instructions/AGENTKIT.md +104 -0
  211. package/templates/agent-kit/instructions/integration.AGENTS.md +25 -0
  212. package/templates/agent-kit/instructions/role-assistant.AGENTS.md +22 -0
  213. package/templates/agent-kit/instructions/root.AGENTS.md +37 -0
  214. package/templates/agent-kit/parity-inventory.yaml +188 -0
  215. package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +59 -0
  216. package/templates/agent-kit/skills/aifabrix-connected-system/references/contract-checklist.md +40 -0
  217. package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +54 -0
  218. package/templates/agent-kit/skills/aifabrix-connected-system/references/production-safety.md +35 -0
  219. package/templates/agent-kit/skills/aifabrix-connected-system/scripts/reserved-system-key.js +19 -0
  220. package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +52 -0
  221. package/templates/agent-kit/skills/aifabrix-plan/references/challenge-checklist.md +108 -0
  222. package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +34 -0
  223. package/templates/agent-kit/skills/aifabrix-plan/references/plan-template.md +182 -0
  224. package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +51 -0
  225. package/templates/agent-kit/skills/aifabrix-prove/references/demo-template.md +65 -0
  226. package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +68 -0
  227. package/templates/agent-kit/skills/aifabrix-prove/references/learning-template.md +66 -0
  228. package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +43 -0
  229. package/templates/agent-kit/skills/aifabrix-role-assistant/references/package-boundary.md +21 -0
  230. package/templates/agent-kit/skills/shared/hosts.md +65 -0
  231. package/templates/agent-kit/skills/shared/login.md +16 -0
  232. package/templates/agent-kit/workspace/.cursor/plans/README.md +22 -0
  233. package/templates/agent-kit/workspace/LICENSE.mit +21 -0
  234. package/templates/agent-kit/workspace/README.md +89 -0
  235. package/templates/applications/builder-api/Dockerfile +3 -1
  236. package/templates/applications/dataplane/application.yaml +2 -3
  237. package/templates/applications/dataplane/env.template +5 -5
  238. package/templates/applications/dataplane/rbac.yaml +28 -0
  239. package/templates/applications/keycloak/env.template +3 -3
  240. package/templates/applications/miso-controller/application.yaml +21 -2
  241. package/templates/applications/miso-controller/env.template +96 -25
  242. package/templates/applications/miso-controller/rbac.yaml +5 -0
  243. package/templates/channels/claude/TROUBLESHOOTING.md +3 -0
  244. package/templates/channels/claude/channel.json +1 -1
  245. package/templates/channels/claude/install.template.md.hbs +1 -0
  246. package/templates/channels/claude/integration/claude-system.json +1 -1
  247. package/templates/channels/slack/channel.json +11 -0
  248. package/templates/channels/slack/install.template.md.hbs +9 -0
  249. package/templates/channels/slack/integration/slack-system.json +11 -0
  250. package/templates/channels/slack/manifest.template.json.hbs +6 -3
  251. package/templates/channels/teams-bot/channel.json +1 -0
  252. package/templates/python/docker-compose.hbs +14 -0
  253. package/templates/typescript/docker-compose.hbs +14 -0
@@ -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,51 @@
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
+ CLI login from chat: [login.md](../shared/login.md).
23
+
24
+ ## Keys
25
+
26
+ Connected System: same resolution as `aifabrix-connected-system`.
27
+ Role: existing COM catalog key; on disk `role-assistant/ra-<roleKey>/`.
28
+
29
+ CS must be published (`deploy` + `show --online`) before live prove. Upload-only draft is BLOCKED for prove.
30
+
31
+ ## Validate
32
+
33
+ Clarify scope and unknowns. Classify MISSING rows. Drafting may continue offline.
34
+
35
+ ## Build
36
+
37
+ Repeatable: demo, Knowledge, candidate Evidence, tests. Do not refuse because validate is not READY.
38
+
39
+ ## Prove
40
+
41
+ Run assistant tests. Record observations and gap owner (`none` | `product-gap` | `missing-customer-fact` | `scope-decision`).
42
+ Happy + safe-stop coverage for authority scenarios.
43
+ Never report candidates as certified.
44
+
45
+ ## Narrative
46
+
47
+ 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.
48
+
49
+ ## Trigger examples
50
+
51
+ - 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 |
@@ -0,0 +1,68 @@
1
+ # Evidence lifecycle (PoC)
2
+
3
+ ## Flow
4
+
5
+ ```text
6
+ Demo / workshop / prove observations
7
+ → learning.md (FACT | ASSUMPTION)
8
+ → evidence/candidates/ (drafts — not consumed)
9
+ → validate + certify path
10
+ → governed Evidence (consumable by Role Assistant)
11
+ ```
12
+
13
+ ## Directories
14
+
15
+ | Path | Role |
16
+ | --- | --- |
17
+ | `learning/learning.md` | Delivery log only |
18
+ | `evidence/candidates/` | Candidate drafts (English). **Do not** treat as production-like Evidence |
19
+ | `evidence/` (package root, non-candidates) | Only rows ready for the Evidence certification / consume path |
20
+ | `knowledge/` | Reusable **business understanding** from governed content — not operational decision rules |
21
+
22
+ If Builder upload processes every file under `evidence/`, keep candidates **out of** the upload consume set:
23
+
24
+ - Prefer `evidence/candidates/` and document in learning.md that upload must exclude candidates until certified, **or**
25
+ - Keep drafts only under `.temp/cust-biz-2-build/<roleKey>/evidence-candidates/` until promotion.
26
+
27
+ Default convention for this skill: **`evidence/candidates/`** + explicit prove/build note: do not promote; do not claim Runtime consumption.
28
+
29
+ ## Candidate draft shape (English)
30
+
31
+ One purpose per file or per row. Trace to scenario ID in `key` / filename / title.
32
+
33
+ Example filename: `FIN-010-cost-centre-authority.json` (array or single object matching platform Evidence row schema when known).
34
+
35
+ Minimum fields to author:
36
+
37
+ - `key` — includes scenario id slug
38
+ - `title` / `description`
39
+ - `when` — business condition
40
+ - `expectedBehavior` — ground in Reality; respect authority; refuse raw dump / cross-partition; safe-stop when insufficient
41
+ - Mark in learning.md: `ASSUMPTION` vs `FACT`-backed
42
+
43
+ ## Promotion gate
44
+
45
+ Promote candidate → governed Evidence only when:
46
+
47
+ 1. Business intent confirmed (FACT in learning.md)
48
+ 2. Happy + safe-stop tests observed for the scenario
49
+ 3. Contract validation + certification path for Evidence completed (public Evidence Fabrix / operate-first RA docs)
50
+ 4. learning.md records promotion date + commit
51
+
52
+ ## Tests
53
+
54
+ For each in-scope scenario ID:
55
+
56
+ | Case | Purpose |
57
+ | --- | --- |
58
+ | `*-happy.yaml` | Agreed business outcome under authority |
59
+ | `*-safestop.yaml` | Refusal / missing authority / insufficient information |
60
+
61
+ Prefer `role-assistant/ra-<roleKey>/tests/<suiteId>/` in this customer repo (package SSOT).
62
+
63
+ ## Forbidden
64
+
65
+ - Calling workshop acceptance alone “governed Evidence”
66
+ - Hiding process law in Knowledge
67
+ - Uploading candidates as if certified
68
+ - Skipping safe-stop coverage for authority scenarios
@@ -0,0 +1,66 @@
1
+ # learning.md template
2
+
3
+ **Path:** `role-assistant/ra-<roleKey>/learning/learning.md`
4
+
5
+ Delivery learning artifact only. Not Runtime Knowledge. Not governed Evidence.
6
+
7
+ ## Skeleton
8
+
9
+ ```md
10
+ # PoC learning log
11
+
12
+ ## Current PoC hypothesis
13
+ - Process:
14
+ - Role (responsibility / capabilities / safe boundaries):
15
+ - Expected decision / value:
16
+ - Connected System:
17
+ - Audience:
18
+
19
+ ## Confirmed facts
20
+ | Fact | Source | Date | Owner | Confidence |
21
+ | --- | --- | --- | --- | --- |
22
+ | … | … | … | … | high/med |
23
+
24
+ ## Assumptions
25
+ | Assumption | Why needed | Risk if wrong | Scenario IDs |
26
+ | --- | --- | --- | --- |
27
+ | … | … | … | FIN-010 |
28
+
29
+ ## Open questions and safe stops
30
+ - Missing authority / data / baseline / policy / capability:
31
+ - Scenario IDs affected:
32
+
33
+ ## Scenario map
34
+ | ID | Demo ask (short) | demo.md | Knowledge | Evidence candidate | Tests |
35
+ | --- | --- | --- | --- | --- | --- |
36
+ | FIN-010 | … | y/n | path or — | candidates/… | happy + safestop |
37
+
38
+ ## Observations from proof runs
39
+ | Date | Scenario | Commit | Env | Outcome | Gap class | Notes |
40
+ | --- | --- | --- | --- | --- | --- | --- |
41
+ | … | FIN-010 | abc123 | dev | pass/fail/safestop | none \| product-gap \| missing-customer-fact \| scope-decision | … |
42
+
43
+ ## Changes made
44
+ - YYYY-MM-DD — command — what changed and why
45
+
46
+ ## Decision for next iteration
47
+ - Build | Prove | Obtain customer decision | Stop
48
+ - Rationale:
49
+ ```
50
+
51
+ ## Mandatory updates by command
52
+
53
+ | Command | Sections to update |
54
+ | --- | --- |
55
+ | `/cust-biz-1-validate` | Hypothesis, facts, assumptions, open questions, baseline / prove-ready decision |
56
+ | `/cust-biz-2-build` | Changes made; scenario map (demo / Knowledge / candidates / tests) |
57
+ | `/cust-biz-3-prove` | Observations table; gap class; decision for next iteration |
58
+
59
+ ## Gap class (prove)
60
+
61
+ | Value | Meaning |
62
+ | --- | --- |
63
+ | `none` | Result matches intent |
64
+ | `product-gap` | Platform / capability / Evidence contract issue |
65
+ | `missing-customer-fact` | Need customer answer (baseline, policy, owner) |
66
+ | `scope-decision` | In/out of PoC scope — not a defect |
@@ -0,0 +1,43 @@
1
+ ---
2
+ name: aifabrix-role-assistant
3
+ description: >
4
+ Download, author, validate, test, or upload a Role Assistant package under
5
+ role-assistant/ra-*. Use for catalog digital workers. Do not use to invent
6
+ Connected System operations or to edit platform product source.
7
+ ---
8
+
9
+ # aifabrix-role-assistant
10
+
11
+ See [package-boundary.md](references/package-boundary.md) and nested `role-assistant/AGENTS.md`.
12
+ Host runtimes (local vs SSH): [hosts.md](../shared/hosts.md).
13
+ CLI login from chat: [login.md](../shared/login.md).
14
+
15
+ ## Preconditions
16
+
17
+ ```bash
18
+ aifabrix auth status
19
+ aifabrix role list --page-size 1000
20
+ ```
21
+
22
+ Catalog Business Role and an active user binding are prerequisites.
23
+ Connected Systems this assistant needs must be dataplane **published** (deploy, not upload-only).
24
+
25
+ ## Workflow
26
+
27
+ 1. `aifabrix download <catalogRoleOrRaKey>` before editing an existing assistant.
28
+ 2. Author settings, Knowledge, Evidence, tests, and sidecars per current Builder contracts. Read `aifabrix role-assistant --help`.
29
+ 3. `aifabrix role-assistant test …` is allowed without local RA publish.
30
+ 4. Upload/deploy RA only when the user explicitly asks in this turn.
31
+ 5. Report results honestly.
32
+
33
+ ## Hard rules
34
+
35
+ - Package key `ra-<catalogRole>` from the catalog — never `ra-<systemKey>-reader`.
36
+ - Candidate Evidence cannot be reported as certified.
37
+ - Missing subscribed CS capability → fail in CS ownership; no RA-local workaround.
38
+ - No hidden authority, actor, or identity injection.
39
+ - Do not convert RA folders with `aifabrix convert`.
40
+
41
+ ## Trigger examples
42
+
43
+ - Create or update the Finance Controller Role Assistant
@@ -0,0 +1,21 @@
1
+ # Role Assistant package boundary
2
+
3
+ Public docs: https://docs.aifabrix.ai/docs/role-assistants
4
+
5
+ ```text
6
+ integration/<systemKey>/ Connected System
7
+ role-assistant/ra-<roleKey>/ Role Assistant
8
+ ```
9
+
10
+ Download writes `role-assistant.yaml` and keeps sidecars. It does not write CS files (`application.*`, `*-system.*`, `*-datasource-*`, `env.template`). Delete those leftovers if they reappear.
11
+
12
+ If download also writes `integration/ra-*`, move sidecars into `role-assistant/ra-*`.
13
+
14
+ Generated RA FKs target **CS** datasource keys. Missing RA FK → fix the CS, re-download.
15
+
16
+ Hand-edit leftover CS manifests under `role-assistant/` is forbidden.
17
+
18
+ Do not invent an API key for `authType: system`.
19
+ Do not treat passivated invent packages (`ra-<vendor>-*`) as catalog workers.
20
+
21
+ Operator **Make available** is separate from CS publish.
@@ -0,0 +1,65 @@
1
+ # Coding hosts — local vs SSH
2
+
3
+ Use this workspace from **Cursor**, **Claude Code**, and **Codex**. Skills live in `.agents/skills/`. Invoke `/aifabrix-*` in Cursor and Claude Code, and `$aifabrix-*` in Codex.
4
+
5
+ Install and sign-in steps are in `AGENTKIT.md`. This file is how to **run** each host on a local machine or over SSH. Builder CLI login from chat: [login.md](login.md).
6
+
7
+ Do not start Claude or Codex in your home directory. `cd` into this git workspace first.
8
+
9
+ ## Auto-approve (optional)
10
+
11
+ `aifabrix agent-kit install` can write gitignored host configs so Claude Code and Codex do not prompt for every tool:
12
+
13
+ - Claude Code: `.claude/settings.local.json` (`permissions.defaultMode` = `bypassPermissions`, `allow` = `Bash(aifabrix *)` and `Read(~/**)`)
14
+ - Codex: `.codex/config.toml` (`approval_policy = "never"`, `sandbox_mode = "workspace-write"`)
15
+
16
+ Those files stay in **this workspace**. Claude may **read** files under the developer home (`Read(~/**)`) and run the delivery CLI (`Bash(aifabrix *)`). They do not add sibling folders as extra workspaces, do not grant Write outside this repo, and do not allow every shell command. TTY asks which host to auto-approve when both are selected. `--approve-all claude` or `--approve-all codex` writes only that host. `--yes` or a non-TTY / `--json` run writes them. `--skip-approve-all` skips. `--force` overwrites existing local files. Builder never writes `~/.claude` or `~/.codex`.
17
+
18
+ ## Cursor
19
+
20
+ **Local.** Open this folder in Cursor. Skills appear as `/aifabrix-plan` and the other `/aifabrix-*` commands.
21
+
22
+ **SSH.** Use Cursor Remote SSH to the machine that holds the repo. The session is the Cursor window — no tmux required. Same `/aifabrix-*` skills.
23
+
24
+ ## Claude Code
25
+
26
+ **Local or SSH — tmux.** Closing the terminal must not kill Claude. Agent Kit starts Claude **inside tmux**. `--remote-control` is the **same** session on this PC, [claude.ai/code](https://claude.ai/code), and the Claude mobile app (**Code**). Do not use `claude --cloud` for this — that starts a different machine that clones GitHub. Claude `--tmux` is only for `--worktree` sessions, not this wrapper.
27
+
28
+ ```bash
29
+ aifabrix agent-kit start claude --remote-control --approve-all --yes
30
+ ```
31
+
32
+ tmux session name is this folder (for example `aifabrix-docs`). Remote Control name is `hostname-user-folder` (for example `builder01-dev03-aifabrix-docs`). `--name` overrides the folder. Several workspaces can run at once. Detach without killing Claude: `Ctrl-b` then `d`. Reattach: `tmux attach -t aifabrix-docs`, or run `start` again from the same folder. Then `/aifabrix-plan` (or another `/aifabrix-*` skill). First run in a project asks you to trust the folder; accept only this workspace.
33
+
34
+ **Phone and PC.** Sign in with the same Claude Pro/Max/Team account (`claude auth login` — not an API key). After Remote Control starts, open **Code** in the Claude mobile app and/or [claude.ai/code](https://claude.ai/code) on the PC. In an already-running session, `/remote-control` or `/mobile`.
35
+
36
+ Closing the terminal (or SSH) does not stop a tmux session. Stopping tmux or the machine does. Remote Control also stops if this host goes down.
37
+
38
+ ## Codex
39
+
40
+ **Local or SSH — tmux (recommended).** Same recipe on your PC and on a remote host. tmux keeps Codex running if you close the terminal or disconnect SSH. Codex has no Claude-style phone/web Remote Control.
41
+
42
+ ```bash
43
+ aifabrix agent-kit start codex --approve-all --yes
44
+ ```
45
+
46
+ Equivalent: `tmux new -s aifabrix-docs -c /path/to/this-workspace` then `codex`. Default `--name` is the last folder. If that session already exists, `start` attaches. Detach: `Ctrl-b` then `d`. Then `$aifabrix-plan` (and the other `$aifabrix-*` skills). Codex reads `AGENTS.md`.
47
+
48
+ **Foreground only (no tmux).**
49
+
50
+ ```bash
51
+ cd /path/to/this-workspace
52
+ codex
53
+ ```
54
+
55
+ ## tmux cheat sheet
56
+
57
+ | Action | Keys / command |
58
+ | --- | --- |
59
+ | New named session | `tmux new -s <name> -c /path/to/this-workspace` |
60
+ | Detach (leave it running) | `Ctrl-b`, then `d` |
61
+ | List sessions | `tmux ls` |
62
+ | Attach | `tmux attach -t <name>` |
63
+ | Kill session | `tmux kill-session -t <name>` |
64
+
65
+ Use a different `--name` per workspace so several Claude or Codex sessions can run on the same host. Claude and Codex in the **same** folder also need two names.
@@ -0,0 +1,16 @@
1
+ # Delivery CLI login (no terminal)
2
+
3
+ Before any online Builder command (`deploy`, `upload`, `role list`, `show --online`):
4
+
5
+ 1. Run `aifabrix auth status`. If authenticated, continue.
6
+ 2. If not, ask the user in chat for the Miso Controller URL. Do not invent it. Paste whatever they give you; extra path segments are ignored.
7
+ 3. Run (environment **dev** unless they named another):
8
+
9
+ ```bash
10
+ aifabrix login --method device -c <url> -e dev
11
+ ```
12
+
13
+ 4. As soon as the command prints **Open this URL to authenticate:**, copy that full URL into chat and ask the user to open it and approve. Do not ask them to use a terminal.
14
+ 5. Leave the login command running until it reports success (or fails). Then run `aifabrix auth status` again.
15
+
16
+ On 401 later, repeat this flow once, then retry the original command.
@@ -0,0 +1,22 @@
1
+ # Plans (customer workspace)
2
+
3
+ Delivery plans for Connected Systems in this workspace.
4
+ **Operational limits for a system live in `integration/<systemKey>/README.md`**, not in Agent Kit skills.
5
+
6
+ ## Active
7
+
8
+ | Plan | Focus |
9
+ | --- | --- |
10
+ | — | No active delivery plan yet |
11
+
12
+ ## Done
13
+
14
+ | Plan | Focus | Archived |
15
+ | --- | --- | --- |
16
+ | — | — | — |
17
+
18
+ ## Naming
19
+
20
+ - `{N}.{m}-{slug}.plan.md` under `.cursor/plans/`
21
+ - Archive completed plans under `done/` when finished
22
+ - New delivery work from a business specification starts with **`aifabrix-plan`**
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) {{year}} {{copyrightHolder}}
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.