@aifabrix/builder 2.60.0 → 2.61.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.
- package/README.md +14 -11
- package/docs/README.md +80 -0
- package/docs/builder-help/evidence-patterns.json +155 -0
- package/docs/builder-help/golden-examples/crm-company.json +30 -0
- package/docs/builder-help/golden-examples/crm-deal.json +29 -0
- package/docs/builder-help/golden-examples/document-storage-keyed-get.json +85 -0
- package/docs/builder-help/golden-examples/document-storage.json +30 -0
- package/docs/builder-help/golden-examples/meeting-transcript.json +29 -0
- package/docs/builder-help/golden-examples/repository-template.json +29 -0
- package/docs/builder-help/golden-examples/service-ticket.json +29 -0
- package/docs/builder-help/platform-roles.json +98 -0
- package/docs/builder-help/resource-type-catalog.json +402 -0
- package/lib/api/configuration.api.js +131 -0
- package/lib/api/system-secrets.api.js +72 -0
- package/lib/app/run-docker-fallback.js +6 -1
- package/lib/app/run-helpers.js +2 -1
- package/lib/app/run-parameter-sync.js +142 -0
- package/lib/build/docker-build-args.js +5 -2
- package/lib/build/index.js +3 -2
- package/lib/build/standard-docker-build.js +2 -2
- package/lib/cli/setup-app.js +5 -0
- package/lib/cli/setup-environment.js +156 -0
- package/lib/commands/datasource-capability-upsert-cli.js +112 -0
- package/lib/commands/datasource-capability.js +4 -2
- package/lib/commands/env-secret-context.js +113 -0
- package/lib/commands/env-secret-list.js +200 -0
- package/lib/commands/env-secret-push-confirm.js +54 -0
- package/lib/commands/env-secret-push-run.js +227 -0
- package/lib/commands/env-secret-push.js +168 -0
- package/lib/commands/repair-datasource-apply.js +2 -0
- package/lib/commands/repair-datasource-keyed-document.js +122 -0
- package/lib/commands/repair-datasource-run.js +1 -0
- package/lib/commands/setup-modes.js +1 -8
- package/lib/commands/setup-prompts.js +2 -180
- package/lib/commands/verify-operations-skip-e2e.js +25 -1
- package/lib/commands/verify-operations-steps.js +13 -1
- package/lib/commands/wizard-config-normalizer.js +7 -4
- package/lib/commands/wizard-core.js +5 -157
- package/lib/commands/wizard-file-saving.js +163 -0
- package/lib/core/env-platform-expand.js +5 -1
- package/lib/core/secrets-env-content.js +5 -1
- package/lib/core/secrets-env-write.js +10 -3
- package/lib/core/secrets-load.js +4 -2
- package/lib/datasource/binary-documents-validator.js +190 -0
- package/lib/datasource/capability/run-capability-upsert.js +202 -0
- package/lib/datasource/capability/upsert-ingredients.js +291 -0
- package/lib/datasource/capability/upsert-operations.js +138 -0
- package/lib/datasource/capability/upsert-test-scaffold.js +189 -0
- package/lib/datasource/validate.js +12 -5
- package/lib/generator/index.js +3 -0
- package/lib/lifecycle/product-model.js +4 -3
- package/lib/lifecycle/report-display.js +3 -2
- package/lib/parameters/infra-parameter-catalog.js +1 -1
- package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +1 -1
- package/lib/programmatic/builder-help-governance.js +1 -1
- package/lib/programmatic/builder-help.js +1 -1
- package/lib/role-assistant/test-runner-workhub-answers.js +4 -1
- package/lib/role-assistant/test-runner-workhub-missing-fields.js +42 -0
- package/lib/role-assistant/test-runner-workhub-wait-stop.js +94 -0
- package/lib/role-assistant/test-runner-workhub.js +28 -19
- package/lib/schema/application-schema.json +14 -2
- package/lib/schema/external-datasource.schema.json +23 -3
- package/lib/schema/infra.parameter.yaml +388 -38
- package/lib/utils/compose-generate-docker-compose.js +7 -12
- package/lib/utils/datasource-binary-evidence.js +92 -0
- package/lib/utils/datasource-test-run-capability-scope.js +44 -1
- package/lib/utils/datasource-test-run-debug-display.js +2 -0
- package/lib/utils/datasource-test-run-display.js +8 -2
- package/lib/utils/datasource-test-run-issue-guidance.js +176 -0
- package/lib/utils/datasource-test-run-tty-log.js +2 -0
- package/lib/utils/env-copy.js +11 -10
- package/lib/utils/external-system-system-test-tty.js +3 -2
- package/lib/utils/image-tags.js +2 -2
- package/lib/utils/platform-kv-ref.js +1 -1
- package/lib/utils/prepare-local-data-mount.js +58 -0
- package/lib/utils/secrets-helpers.js +0 -1
- package/lib/utils/system-secret-mapping.js +125 -0
- package/lib/utils/test-log-writer.js +2 -1
- package/lib/validation/external-manifest-validator.js +5 -0
- package/lib/validation/openapi-contract-surface-validator.js +3 -1
- package/lib/validation/validate-external-file.js +5 -1
- package/package.json +4 -3
- package/templates/agent-kit/agent-kit.yaml +1 -1
- package/templates/agent-kit/skills/aifabrix-connected-system/SKILL.md +2 -1
- package/templates/agent-kit/skills/aifabrix-connected-system/references/delivery-gates.md +15 -0
- package/templates/agent-kit/skills/aifabrix-plan/SKILL.md +3 -2
- package/templates/agent-kit/skills/aifabrix-prove/SKILL.md +6 -2
- package/templates/agent-kit/skills/aifabrix-prove/references/evidence-lifecycle.md +22 -0
- package/templates/agent-kit/skills/aifabrix-role-assistant/SKILL.md +7 -1
- package/templates/agent-kit/skills/aifabrix-role-assistant/references/testing-playbook.md +117 -0
- package/templates/agent-kit/skills/shared/interaction.md +83 -0
- package/templates/agent-kit/skills/shared/status.md +3 -12
- package/templates/applications/builder-api/application.yaml +1 -1
- package/templates/applications/builder-api/env.template +5 -1
- package/templates/applications/dataplane/application.yaml +1 -1
- package/templates/applications/dataplane/env.template +10 -12
- package/templates/applications/keycloak/application.yaml +6 -1
- package/templates/applications/miso-controller/application.yaml +74 -2
- package/templates/applications/miso-controller/env.template +42 -3
- package/templates/applications/miso-controller/rbac.yaml +17 -0
- package/templates/external-system/external-datasource.yaml.hbs +7 -1
- package/templates/marketplace/main.json +4 -4
- package/templates/python/docker-compose.hbs +1 -1
- package/templates/agent-kit/skills/aifabrix-plan/references/interaction.md +0 -41
- /package/{lib/programmatic/help-content → docs/builder-help/content}/channel-onboarding.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/cip-overview.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/connected-system-ui.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/dimensions-guide.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/enterprise-sync-fabrix.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/overview.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/subscription-guide.md +0 -0
- /package/{lib/programmatic/help-content → docs/builder-help/content}/workflow.md +0 -0
|
@@ -44,7 +44,7 @@ API_KEY_BYPASS_ROLES=full-access
|
|
|
44
44
|
|
|
45
45
|
# API Configuration
|
|
46
46
|
API_V1_STR=/api/v1
|
|
47
|
-
VERSION=2.0.
|
|
47
|
+
VERSION=2.0.79
|
|
48
48
|
# Minimum supported aifabrix-builder CLI semver (advertised on /health and /api/v1/health; empty = no gate)
|
|
49
49
|
# MIN_BUILDER_CLI_VERSION=2.45.0
|
|
50
50
|
MIN_BUILDER_CLI_VERSION=2.45.5
|
|
@@ -137,21 +137,18 @@ ABAC_POLICY_PARSE_CACHE_MAX_ENTRIES=2048
|
|
|
137
137
|
# AUTHENTICATION CONFIGURATION
|
|
138
138
|
# =============================================================================
|
|
139
139
|
|
|
140
|
-
# MISO
|
|
141
|
-
#
|
|
142
|
-
#
|
|
143
|
-
#
|
|
144
|
-
#
|
|
145
|
-
#
|
|
146
|
-
# Rotation: changed names are reread from the SDK; DB/Redis pools are disposed and
|
|
147
|
-
# the process reports secretRotationRestartRequired until restarted. Invalidation
|
|
148
|
-
# (denial/expiry) stops new secret-dependent work and makes health unhealthy.
|
|
140
|
+
# MISO governed configuration runtime (583.0): client credentials are active by default.
|
|
141
|
+
# The SDK uses the per-application credentials below to load its bootstrap snapshot and
|
|
142
|
+
# refreshes it automatically within two minutes. Changed names invoke application refresh
|
|
143
|
+
# handlers; a handler may still recreate an internal resource such as a DB or Redis client.
|
|
144
|
+
# Override with MISO_AUTH_MODE=local only for an explicit .env/dotenv development flow.
|
|
145
|
+
# Invalidation (denial/expiry) stops new secret-dependent work and makes health unhealthy.
|
|
149
146
|
# Health: /health, /api/v1/health and /api/v1/health/platform return HTTP 503 with
|
|
150
147
|
# reasonCode misoTokenUnavailable | misoTokenRejected | misoControllerUnreachable |
|
|
151
148
|
# misoValidationTimeout whenever the Controller does not accept the live client
|
|
152
149
|
# token — in LOCAL_MODE too. These endpoints measure usable application health,
|
|
153
150
|
# not process liveness.
|
|
154
|
-
MISO_AUTH_MODE=
|
|
151
|
+
MISO_AUTH_MODE=client-credentials
|
|
155
152
|
# MISO Application Client Credentials (per application)
|
|
156
153
|
# Backend-only: never expose MISO_CLIENTSECRET to the Vite frontend (use VITE_* in app-ui).
|
|
157
154
|
MISO_CLIENTID=kv://dataplane-client-idKeyVault
|
|
@@ -167,7 +164,8 @@ KEYCLOAK_REALM=aifabrix
|
|
|
167
164
|
# =============================================================================
|
|
168
165
|
# Public: browser redirects and CORS (includes /controller front-door path from miso-controller application.yaml).
|
|
169
166
|
MISO_WEB_SERVER_URL=url://miso-controller-public
|
|
170
|
-
#
|
|
167
|
+
# Private service-to-service controller origin. The SDK permits HTTP only for a local/private
|
|
168
|
+
# target; public or remote controller origins still require HTTPS.
|
|
171
169
|
MISO_CONTROLLER_URL=url://miso-controller-internal
|
|
172
170
|
# Browser logout page on miso-controller (path relative to MISO_WEB_SERVER_URL; not dataplane /login).
|
|
173
171
|
MISO_LOGOUT_URL=/logout
|
|
@@ -9,7 +9,12 @@ app:
|
|
|
9
9
|
# Image Configuration
|
|
10
10
|
image:
|
|
11
11
|
name: aifabrix/keycloak
|
|
12
|
-
|
|
12
|
+
# `latest`, like every other app here. The Keycloak version lives in app.version above,
|
|
13
|
+
# which is what `aifabrix push --tag 'latest,{version}'` expands, so nothing is lost by
|
|
14
|
+
# not repeating it here. Pinning it made `aifabrix run` look for keycloak-dev1:<version>
|
|
15
|
+
# while `aifabrix build` only ever produces :latest, so dev-build-kc failed with
|
|
16
|
+
# "Docker image not found" on an image it had just built.
|
|
17
|
+
tag: latest
|
|
13
18
|
registry: aifabrixacr.azurecr.io
|
|
14
19
|
registryMode: external
|
|
15
20
|
|
|
@@ -4,7 +4,7 @@ app:
|
|
|
4
4
|
displayName: 'Miso Controller'
|
|
5
5
|
description: 'Miso is the AI Fabrix in-tenant controller and portal layer for securely operating enterprise AI apps inside a customer’s Azure tenant. It provides Entra ID SSO, RBAC, audit logs, environment/app configuration via schemas, and safe secret handling via Key Vault references—ensuring governance, traceability, and predictable UX across portal, SDK, and CLI.'
|
|
6
6
|
type: webapp
|
|
7
|
-
version: '2.0.
|
|
7
|
+
version: '2.0.89'
|
|
8
8
|
# Image Configuration
|
|
9
9
|
# Set tag to match your build (e.g. aifabrix build miso-controller -t 1.0.0 then tag: 1.0.0)
|
|
10
10
|
# Registry is required so the controller can pull the image (avoids "docker: not found" on the controller host).
|
|
@@ -84,12 +84,68 @@ repository:
|
|
|
84
84
|
# are stack-level, not per environment: there is no `environments:` section.
|
|
85
85
|
# env.template consumes these names as {NAME}.
|
|
86
86
|
platforms:
|
|
87
|
+
# Production is matched first and by its literal name, because its host is not the suffixed
|
|
88
|
+
# pattern the other platforms follow: `platform.aifabrix.dev`, not `platform-pro.aifabrix.dev`.
|
|
89
|
+
- resource: aifabrix-int-pro
|
|
90
|
+
name: aifabrix
|
|
91
|
+
platform: pro
|
|
92
|
+
configuration:
|
|
93
|
+
- name: LOCATION
|
|
94
|
+
value: 'swedencentral'
|
|
95
|
+
- name: MORI_BASE_URL
|
|
96
|
+
value: 'https://platform.aifabrix.dev/mori'
|
|
97
|
+
|
|
98
|
+
# Local Docker runs. No resource group is supplied, so `matchLocalPlatform` takes the FIRST entry
|
|
99
|
+
# declaring the local platform (`dev`) -- this one -- and the literal `aifabrix-local` can never
|
|
100
|
+
# match a real group, so Azure deployments fall through to the entries below.
|
|
101
|
+
#
|
|
102
|
+
# It MUST sit above `aifabrix-int-{platform}`: that entry also resolves to `dev`, so without this
|
|
103
|
+
# one a local stack took `https://platform-dev.aifabrix.dev/mori` -- a host that does not exist on
|
|
104
|
+
# a developer machine. Measured on dev01 2026-09-28: every Mori call failed with `socket hang up`,
|
|
105
|
+
# and `LicenseValidationService.pickupLicenseFromMori` maps that transport failure to
|
|
106
|
+
# `LicenseInvalidError`, which surfaces as **HTTP 403** on
|
|
107
|
+
# `POST /api/ide/onboarding/license/pickup`. A connection failure reported as Forbidden sent the
|
|
108
|
+
# investigation after api-key permissions for days (mori 48.0 `reproduce-license-pickup-403`).
|
|
109
|
+
#
|
|
110
|
+
# Service-to-service traffic has no reason to leave the cluster through the public edge, and the
|
|
111
|
+
# public host is not even resolvable from inside the container. Verified from the miso-controller
|
|
112
|
+
# container: `http://mori-controller:3004/api/v1/health` answers 200 while both
|
|
113
|
+
# `platform-dev.aifabrix.dev` and `dev01.aifabrix.dev` fail to connect.
|
|
114
|
+
#
|
|
115
|
+
# The value is the declarative `url://` form rather than a literal host, so the Builder resolves
|
|
116
|
+
# it from the platform topology the same way Mori's own env.template resolves
|
|
117
|
+
# `url://miso-controller-internal`. A literal would be a second place to edit whenever the local
|
|
118
|
+
# service address changes, and the whole point of `url://` is that there is one.
|
|
119
|
+
#
|
|
120
|
+
# Verified on dev01 that this is the reachable address and that the `/mori` prefix it carries is
|
|
121
|
+
# served: from the miso-controller container both `http://mori-controller:3004/api/v1/health` and
|
|
122
|
+
# `http://mori-controller:3004/mori/api/v1/health` answer 200. `moriApiBase()` appends `/api/v1`.
|
|
123
|
+
#
|
|
124
|
+
# NOT `kv://mori-controller-web-server-url`, which is what the entries below deliberately moved
|
|
125
|
+
# away from: that reads the application RECORD, and on aifabrix-ce-16 the record still held
|
|
126
|
+
# `http://localhost:3004`. `url://` is resolved from the topology at resolve time, not from a
|
|
127
|
+
# record an Azure deployment never overwrites.
|
|
128
|
+
- resource: aifabrix-local
|
|
129
|
+
name: aifabrix
|
|
130
|
+
platform: dev
|
|
131
|
+
configuration:
|
|
132
|
+
- name: LOCATION
|
|
133
|
+
value: 'swedencentral'
|
|
134
|
+
- name: MORI_BASE_URL
|
|
135
|
+
value: 'url://mori-controller-internal'
|
|
136
|
+
|
|
87
137
|
- resource: aifabrix-int-{platform}
|
|
88
138
|
name: aifabrix
|
|
89
|
-
options: [dev, tst
|
|
139
|
+
options: [dev, tst]
|
|
90
140
|
configuration:
|
|
91
141
|
- name: LOCATION
|
|
92
142
|
value: 'swedencentral'
|
|
143
|
+
# Mori the installation talks to. Previously `kv://mori-controller-web-server-url`, which
|
|
144
|
+
# resolved to whatever the *application record* held — on aifabrix-ce-16 that was
|
|
145
|
+
# `http://localhost:3004`, because an Azure deployment never overwrites a stale URL, so every
|
|
146
|
+
# consumer of it was pointed at a loopback address that does not exist in the cluster.
|
|
147
|
+
- name: MORI_BASE_URL
|
|
148
|
+
value: 'https://platform-{platform}.aifabrix.dev/mori'
|
|
93
149
|
|
|
94
150
|
- resource: aifabrix-ce-*
|
|
95
151
|
name: '*'
|
|
@@ -98,6 +154,22 @@ platforms:
|
|
|
98
154
|
configuration:
|
|
99
155
|
- name: LOCATION
|
|
100
156
|
value: 'swedencentral'
|
|
157
|
+
# The App Service hostname, not the Front Door one, because only this is derivable.
|
|
158
|
+
#
|
|
159
|
+
# The Front Door endpoint carries an Azure-generated suffix (`fzahchbachcfbgaj`) that no
|
|
160
|
+
# template can spell: `{platform}`, `{platform.name}` and `{resourceGroup}` are the only
|
|
161
|
+
# tokens, and none of them yields it. The previous literal was aifabrix-ce-16's endpoint and
|
|
162
|
+
# was therefore wrong for every other `aifabrix-ce-*` installation -- the next one built would
|
|
163
|
+
# have pointed its Miso at ce-16's Mori.
|
|
164
|
+
#
|
|
165
|
+
# The web app is named `{resourceGroup}-miso-mori-controller` by the installer, so its default
|
|
166
|
+
# hostname IS derivable and is correct for every installation in the group. Verified on
|
|
167
|
+
# aifabrix-ce-16 2026-09-27: that host answers /mori/health with 200. This is also the better
|
|
168
|
+
# address for Miso->Mori traffic, which is service-to-service and has no reason to leave the
|
|
169
|
+
# cluster through the public edge. When the named platform hosts exist
|
|
170
|
+
# (`platform-dev.aifabrix.dev/mori`) this entry can follow the pattern used above.
|
|
171
|
+
- name: MORI_BASE_URL
|
|
172
|
+
value: 'https://{resourceGroup}-miso-mori-controller.azurewebsites.net/mori'
|
|
101
173
|
|
|
102
174
|
configuration:
|
|
103
175
|
# -------------------------------------------------------------------------
|
|
@@ -193,16 +193,21 @@ WAIT_FOR_KEYCLOAK=true
|
|
|
193
193
|
# For production: use public domain (e.g., https://miso.example.com)
|
|
194
194
|
# url://public includes front-door path from application.yaml (e.g. /controller).
|
|
195
195
|
MISO_WEB_SERVER_URL=url://public
|
|
196
|
+
# Private service-to-service controller origin; public/browser traffic uses MISO_WEB_SERVER_URL.
|
|
196
197
|
MISO_CONTROLLER_URL=url://internal
|
|
197
198
|
MISO_RELATIVE_PATH=url://vdir-public
|
|
198
|
-
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private
|
|
199
|
+
ALLOWED_ORIGINS=http://localhost:*,url://host-public,url://host-private,url://dataplane-host-public,url://dataplane-host-private,url://mori-controller-host-public
|
|
199
200
|
# Opt-in: broker/entry/referer under /data keep …/data/auth/callback (do not append /miso). Default off.
|
|
200
201
|
# AUTH_PRESERVE_DATAPLANE_VDIR=true
|
|
201
202
|
|
|
202
203
|
# MISO Environment Configuration (miso, dev, tst, pro)
|
|
203
204
|
MISO_ENVIRONMENT=miso
|
|
204
205
|
|
|
205
|
-
#
|
|
206
|
+
# Governed configuration uses per-application client credentials by default. The SDK loads
|
|
207
|
+
# its bootstrap snapshot and refreshes it automatically within two minutes; consumers decide
|
|
208
|
+
# whether a changed key also requires an internal client or resource to be recreated.
|
|
209
|
+
MISO_AUTH_MODE=client-credentials
|
|
210
|
+
# MISO Application Client Credentials (per application; never expose the secret to the browser)
|
|
206
211
|
MISO_CLIENTID=kv://miso-controller-client-idKeyVault
|
|
207
212
|
MISO_CLIENTSECRET=kv://miso-controller-client-secretKeyVault
|
|
208
213
|
|
|
@@ -378,8 +383,17 @@ ENTRA_GRAPH_DELEGATED_REDIRECT_URI=url://mori-controller-public/entra-graph-dele
|
|
|
378
383
|
# registered and running for this developer.
|
|
379
384
|
# MORI_API_KEY is per-installation and is minted by POST /marketplace/bootstrap; it is written
|
|
380
385
|
# here by the controller after registration, not provisioned ahead of it.
|
|
381
|
-
MORI_BASE_URL=
|
|
386
|
+
MORI_BASE_URL={MORI_BASE_URL}
|
|
382
387
|
MORI_API_KEY=kv://mori-controller-api-keyKeyVault
|
|
388
|
+
# Ask Mori for a container-registry credential when the installation was given none.
|
|
389
|
+
# Off by default: the call has a 30s timeout inside credential resolution, so enabling it on an
|
|
390
|
+
# installation whose Mori cannot issue would stall every deployment that reaches that point.
|
|
391
|
+
# Declared here because it was previously read from process.env and set nowhere, so there was no
|
|
392
|
+
# supported way to turn the path on — an installation that pulls vendor images through a
|
|
393
|
+
# Mori-issued token had to have an app setting added by hand. Cross-tenant managed identity
|
|
394
|
+
# cannot grant registry access, so this is the only mechanism that works for a customer
|
|
395
|
+
# installation pulling from the vendor registry.
|
|
396
|
+
MORI_REGISTRY_CREDENTIALS=false
|
|
383
397
|
|
|
384
398
|
# =============================================================================
|
|
385
399
|
# LOGGING CONFIGURATION
|
|
@@ -412,3 +426,28 @@ OTEL_SERVICE_VERSION=
|
|
|
412
426
|
|
|
413
427
|
# Mount Volume Configuration
|
|
414
428
|
MOUNT_VOLUME=/mnt/data/
|
|
429
|
+
|
|
430
|
+
# Image registry this installation deploys from.
|
|
431
|
+
#
|
|
432
|
+
# `pipeline-validation-flow.helper.ts` resolves the deploy registry as ACR_LOGIN_SERVER first, then
|
|
433
|
+
# the controller record's `configuration.imageRegistry`. Azure installations get the record from the
|
|
434
|
+
# installer, so this stays EMPTY there and behaviour is unchanged. A local installation matches no
|
|
435
|
+
# platform (`allowLocalPlatform` is false for the controller) and has no record, so without this key
|
|
436
|
+
# every `aifabrix deploy` fails with "Image registry is not configured on the controller
|
|
437
|
+
# installation".
|
|
438
|
+
#
|
|
439
|
+
# EMPTY on purpose. The controller record is read AFTER this and overwrites it, so an Azure
|
|
440
|
+
# installation ignores whatever stands here; only a local installation consumes it.
|
|
441
|
+
#
|
|
442
|
+
# This briefly shipped as `aifabrixce16.azurecr.io` — one test installation's registry, committed
|
|
443
|
+
# into the product, so every developer who did not override it would have pushed and pulled
|
|
444
|
+
# against ce-16 without being told. A `{ACR_LOGIN_SERVER}` token was tried instead and is worse
|
|
445
|
+
# still: nothing resolves it without a resource group, so it breaks `aifabrix build` outright
|
|
446
|
+
# ("no platform or environment configuration resolves it for environment dev").
|
|
447
|
+
#
|
|
448
|
+
# Empty is the honest third answer. An Azure installation is unaffected, and a local
|
|
449
|
+
# `aifabrix deploy` fails with "Image registry is not configured on the controller installation",
|
|
450
|
+
# which names the missing thing. Its proper home is the Builder run tooling, which already knows
|
|
451
|
+
# the answer (`aifabrix dev print-registry`) and should inject it per developer rather than have
|
|
452
|
+
# Miso ship one installation's registry to everybody.
|
|
453
|
+
ACR_LOGIN_SERVER=
|
|
@@ -176,6 +176,23 @@ permissions:
|
|
|
176
176
|
roles: ['aifabrix-platform-admin', 'aifabrix-deployment-admin']
|
|
177
177
|
description: 'Remove applications from environments'
|
|
178
178
|
|
|
179
|
+
# External-system catalog (aligned with src/examples/permissions.csv)
|
|
180
|
+
- name: 'external-system:read'
|
|
181
|
+
roles:
|
|
182
|
+
[
|
|
183
|
+
'aifabrix-platform-admin',
|
|
184
|
+
'aifabrix-security-admin',
|
|
185
|
+
'aifabrix-deployment-admin',
|
|
186
|
+
'aifabrix-compliance-admin',
|
|
187
|
+
'aifabrix-developer',
|
|
188
|
+
'aifabrix-observer'
|
|
189
|
+
]
|
|
190
|
+
description: 'Read external systems'
|
|
191
|
+
|
|
192
|
+
- name: 'external-systems:domain-manager'
|
|
193
|
+
roles: ['aifabrix-platform-admin', 'aifabrix-security-admin']
|
|
194
|
+
description: 'Manage external-system catalog promotion and role-derived dimension governance'
|
|
195
|
+
|
|
179
196
|
# Pipeline & Deployment
|
|
180
197
|
- name: 'applications:deploy'
|
|
181
198
|
roles: ['aifabrix-platform-admin', 'aifabrix-deployment-admin', 'aifabrix-developer']
|
|
@@ -122,7 +122,13 @@ openapi:
|
|
|
122
122
|
# documentStorage:
|
|
123
123
|
# enabled: true
|
|
124
124
|
# binaryOperationRef: get
|
|
125
|
-
#
|
|
125
|
+
# responseType: binary
|
|
126
|
+
# ingestAfterSync: true
|
|
127
|
+
# Keyed retrieval (no list): for a vendor PDF, image or octet-stream response,
|
|
128
|
+
# keep only get in capabilities and end its CIP steps with output.mode: documents.
|
|
129
|
+
# Fetch: { source: openapi, openapiRef: get, responseType: binary }
|
|
130
|
+
# Map response metadata from raw.headers.FileName and raw.params.DocumentId.
|
|
131
|
+
# The wizard and repair infer this shape from the vendor OpenAPI response media type.
|
|
126
132
|
{{/if}}
|
|
127
133
|
{{#if (eq schemaEntityType "vectorStore")}}
|
|
128
134
|
# vectorStore: vector index settings (model id, dimensions, etc. per schema). Uncomment and set to match your embedding deployment.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"_generator": {
|
|
6
6
|
"name": "bicep",
|
|
7
7
|
"version": "0.47.16.16243",
|
|
8
|
-
"templateHash": "
|
|
8
|
+
"templateHash": "8811550299172477333"
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
11
|
"parameters": {
|
|
@@ -1047,7 +1047,7 @@
|
|
|
1047
1047
|
"_generator": {
|
|
1048
1048
|
"name": "bicep",
|
|
1049
1049
|
"version": "0.47.16.16243",
|
|
1050
|
-
"templateHash": "
|
|
1050
|
+
"templateHash": "9369439869727192513"
|
|
1051
1051
|
}
|
|
1052
1052
|
},
|
|
1053
1053
|
"parameters": {
|
|
@@ -1099,7 +1099,7 @@
|
|
|
1099
1099
|
{
|
|
1100
1100
|
"type": "Microsoft.KeyVault/vaults/secrets",
|
|
1101
1101
|
"apiVersion": "2023-07-01",
|
|
1102
|
-
"name": "[format('{0}/{1}', parameters('keyVaultName'), '
|
|
1102
|
+
"name": "[format('{0}/{1}', parameters('keyVaultName'), 'dev-dataplane-azure-openai-endpoint')]",
|
|
1103
1103
|
"properties": {
|
|
1104
1104
|
"value": "[reference(resourceId('Microsoft.CognitiveServices/accounts', variables('accountName')), '2023-05-01').endpoint]"
|
|
1105
1105
|
},
|
|
@@ -1110,7 +1110,7 @@
|
|
|
1110
1110
|
{
|
|
1111
1111
|
"type": "Microsoft.KeyVault/vaults/secrets",
|
|
1112
1112
|
"apiVersion": "2023-07-01",
|
|
1113
|
-
"name": "[format('{0}/{1}', parameters('keyVaultName'), '
|
|
1113
|
+
"name": "[format('{0}/{1}', parameters('keyVaultName'), 'dev-dataplane-azure-openai-api-key')]",
|
|
1114
1114
|
"properties": {
|
|
1115
1115
|
"value": "[listKeys(resourceId('Microsoft.CognitiveServices/accounts', variables('accountName')), '2023-05-01').key1]"
|
|
1116
1116
|
},
|
|
@@ -1,41 +0,0 @@
|
|
|
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
|
-
A phase gate is per-gate, not overall. Offer the next phase only when the **Delivery** row
|
|
28
|
-
supports it; a passing package gate beside `Delivery: NEEDS_FIXES` is not success and the
|
|
29
|
-
offer must name what is still open.
|
|
30
|
-
|
|
31
|
-
## Phase detection (connected-system and prove)
|
|
32
|
-
|
|
33
|
-
1. Explicit phase from the user
|
|
34
|
-
2. Ask, offering the routes in [status.md](../../shared/status.md)
|
|
35
|
-
|
|
36
|
-
There is no third step. Package and plan state decide what you *recommend*, never what you
|
|
37
|
-
run: a bare invocation reports status and stops ([status.md](../../shared/status.md)).
|
|
38
|
-
Inferring "the safe next eligible phase" is what makes a skill start working before the
|
|
39
|
-
user has said what they want.
|
|
40
|
-
|
|
41
|
-
Never silently run the following phase after success.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{lib/programmatic/help-content → docs/builder-help/content}/enterprise-sync-fabrix.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|