@starci/hfs 4.2.17 → 4.4.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/CHANGELOG.md +28 -0
- package/README.md +7 -0
- package/db/migrate.mjs +361 -0
- package/db/post-cutover.mjs +136 -0
- package/emit/db-types.mjs +10 -1
- package/lint/run.mjs +1 -1
- package/package.json +4 -1
- package/release/gate.mjs +298 -0
- package/release/index.mjs +103 -0
- package/release/push.mjs +110 -0
- package/runtime/knowledge/hfs/canon-pins.yaml +11 -11
- package/runtime/knowledge/hfs/fe-stack.yaml +22 -1
- package/runtime/knowledge/hfs/rules.yaml +3437 -160
- package/runtime/knowledge/hfs/slots.yaml +430 -92
- package/runtime/knowledge/patterns/be/api.yaml +92 -2
- package/runtime/knowledge/patterns/be/cli.yaml +37 -9
- package/runtime/knowledge/patterns/be/event-bus.yaml +3 -3
- package/runtime/knowledge/patterns/be/jobs.yaml +20 -2
- package/runtime/knowledge/patterns/be/projections.yaml +4 -2
- package/runtime/knowledge/patterns/be/queues.yaml +11 -3
- package/runtime/knowledge/patterns/be/reactors.yaml +20 -1
- package/runtime/knowledge/patterns/be/realtime.yaml +25 -3
- package/runtime/knowledge/patterns/be/saga.yaml +20 -3
- package/runtime/knowledge/patterns/be/webhooks.yaml +210 -36
- package/runtime/knowledge/patterns/fe/folder.yaml +4 -0
- package/runtime/knowledge/sonar-gate.yaml +1 -1
- package/runtime/modules/kernel/failure-codes.yaml +3128 -47
- package/runtime/modules/models/runtimes.yaml +1 -1
- package/runtime/modules/schemas/application-stacks.schema.yaml +663 -0
- package/runtime/packages/cli/src/catalog.generated.mjs +14104 -0
- package/runtime/packages/cli/src/validate-args.mjs +213 -0
- package/runtime/scripts/api/git/add.mjs +5 -0
- package/runtime/scripts/api/git/cat-file.mjs +5 -0
- package/runtime/scripts/api/git/init.mjs +7 -0
- package/runtime/scripts/api/git/lib.mjs +3 -0
- package/runtime/scripts/api/git/tag.mjs +5 -0
- package/runtime/scripts/api/node/lib.mjs +20 -0
- package/runtime/scripts/api/node/run-node.mjs +6 -0
- package/runtime/scripts/api/sops/lib.mjs +41 -0
- package/runtime/scripts/api/sops/resolve-sops.mjs +7 -0
- package/runtime/scripts/api/sops/seal.mjs +1 -1
- package/runtime/scripts/api/sops/selected-age-recipient.mjs +7 -0
- package/runtime/scripts/api/supabase/database-dump.mjs +5 -0
- package/runtime/scripts/api/supabase/database-query.mjs +5 -0
- package/runtime/scripts/api/supabase/lib.mjs +44 -0
- package/runtime/scripts/api/supabase/migration-repair.mjs +5 -0
- package/runtime/scripts/hfs/app-wiring.mjs +201 -0
- package/runtime/scripts/hfs/architecture/backend-app-files.mjs +103 -0
- package/runtime/scripts/hfs/architecture/backend.mjs +22 -10
- package/runtime/scripts/hfs/architecture/background-unowned.mjs +157 -41
- package/runtime/scripts/hfs/architecture/canon-clones.mjs +240 -0
- package/runtime/scripts/hfs/architecture/canon-jsx-clones.mjs +143 -0
- package/runtime/scripts/hfs/architecture/client-reaches-server.mjs +6 -3
- package/runtime/scripts/hfs/architecture/clones.mjs +17 -8
- package/runtime/scripts/hfs/architecture/connection-map.mjs +14 -12
- package/runtime/scripts/hfs/architecture/context-map.mjs +25 -14
- package/runtime/scripts/hfs/architecture/context-owner.mjs +1 -2
- package/runtime/scripts/hfs/architecture/dead-exports-bindings.mjs +149 -0
- package/runtime/scripts/hfs/architecture/dead-exports.mjs +23 -50
- package/runtime/scripts/hfs/architecture/default-deny.mjs +8 -6
- package/runtime/scripts/hfs/architecture/frontend-block-render.mjs +104 -0
- package/runtime/scripts/hfs/architecture/frontend-world-render.mjs +30 -11
- package/runtime/scripts/hfs/architecture/frontend-world.mjs +1 -1
- package/runtime/scripts/hfs/architecture/function-spec-providers.mjs +153 -0
- package/runtime/scripts/hfs/architecture/hfs.mjs +3 -3
- package/runtime/scripts/hfs/architecture/i18n-keys.mjs +16 -3
- package/runtime/scripts/hfs/architecture/machine-ast.mjs +17 -0
- package/runtime/scripts/hfs/architecture/module-per-transport.mjs +49 -25
- package/runtime/scripts/hfs/architecture/next-data-inference.mjs +176 -0
- package/runtime/scripts/hfs/architecture/next-data-symbols.mjs +26 -0
- package/runtime/scripts/hfs/architecture/next-data.mjs +31 -23
- package/runtime/scripts/hfs/architecture/reachability.mjs +14 -0
- package/runtime/scripts/hfs/architecture/register-once.mjs +15 -7
- package/runtime/scripts/hfs/architecture/required-files.mjs +2 -1
- package/runtime/scripts/hfs/architecture/source-names.mjs +48 -3
- package/runtime/scripts/hfs/architecture/staged-consumers.mjs +37 -0
- package/runtime/scripts/hfs/architecture/supabase-ast.mjs +214 -17
- package/runtime/scripts/hfs/architecture/supabase-be.mjs +1 -6
- package/runtime/scripts/hfs/architecture/supabase.mjs +59 -21
- package/runtime/scripts/hfs/architecture/surface.mjs +2 -1
- package/runtime/scripts/hfs/architecture/tiers.mjs +11 -4
- package/runtime/scripts/hfs/architecture/typescript.mjs +1 -8
- package/runtime/scripts/hfs/architecture/unit-spec-providers.mjs +9 -13
- package/runtime/scripts/hfs/check-results.mjs +28 -0
- package/runtime/scripts/hfs/check.mjs +63 -72
- package/runtime/scripts/hfs/coverage-from.mjs +70 -0
- package/runtime/scripts/hfs/db-baseline-verb.mjs +276 -0
- package/runtime/scripts/hfs/db-plan-verb.mjs +254 -0
- package/runtime/scripts/hfs/db-restamp-verb.mjs +60 -0
- package/runtime/scripts/hfs/declaration-shape.mjs +39 -3
- package/runtime/scripts/hfs/doc-commands.mjs +367 -0
- package/runtime/scripts/hfs/edition-slots.mjs +2 -2
- package/runtime/scripts/hfs/example-secrets.mjs +158 -0
- package/runtime/scripts/hfs/manifest-shape.mjs +91 -6
- package/runtime/scripts/hfs/path-findings.mjs +32 -2
- package/runtime/scripts/hfs/refusal-codes.mjs +6 -0
- package/runtime/scripts/hfs/rule-catalog.mjs +156 -11
- package/runtime/scripts/hfs/rule-params-shape.mjs +22 -10
- package/runtime/scripts/hfs/rules/a15-findings.mjs +88 -0
- package/runtime/scripts/hfs/rules/app-env-required.mjs +20 -0
- package/runtime/scripts/hfs/rules/app-root.mjs +2 -2
- package/runtime/scripts/hfs/rules/assets.mjs +79 -0
- package/runtime/scripts/hfs/rules/boot-proof.mjs +16 -0
- package/runtime/scripts/hfs/rules/canon-copy-drift.mjs +59 -0
- package/runtime/scripts/hfs/rules/contract.mjs +66 -5
- package/runtime/scripts/hfs/rules/coverage-below.mjs +230 -0
- package/runtime/scripts/hfs/rules/database-access.mjs +343 -0
- package/runtime/scripts/hfs/rules/database-baseline.mjs +142 -0
- package/runtime/scripts/hfs/rules/database-config.mjs +250 -2
- package/runtime/scripts/hfs/rules/database-constants.mjs +9 -0
- package/runtime/scripts/hfs/rules/database-migrations.mjs +317 -37
- package/runtime/scripts/hfs/rules/database-plpgsql.mjs +119 -9
- package/runtime/scripts/hfs/rules/database-queue-sources.mjs +176 -0
- package/runtime/scripts/hfs/rules/database-queues.mjs +361 -0
- package/runtime/scripts/hfs/rules/database-sql.mjs +91 -9
- package/runtime/scripts/hfs/rules/database.mjs +11 -2
- package/runtime/scripts/hfs/rules/deploy-scan.mjs +192 -0
- package/runtime/scripts/hfs/rules/deploy-workflow.mjs +219 -0
- package/runtime/scripts/hfs/rules/doc-fresh.mjs +286 -0
- package/runtime/scripts/hfs/rules/docker-health.mjs +249 -0
- package/runtime/scripts/hfs/rules/docker.mjs +24 -7
- package/runtime/scripts/hfs/rules/edition.mjs +11 -10
- package/runtime/scripts/hfs/rules/env-parity.mjs +373 -0
- package/runtime/scripts/hfs/rules/env-value-shape.mjs +113 -0
- package/runtime/scripts/hfs/rules/event-bus.mjs +3 -2
- package/runtime/scripts/hfs/rules/event-tables.mjs +100 -0
- package/runtime/scripts/hfs/rules/fe-contract-documents.mjs +115 -15
- package/runtime/scripts/hfs/rules/fe-stack.mjs +57 -0
- package/runtime/scripts/hfs/rules/feature-files.mjs +28 -0
- package/runtime/scripts/hfs/rules/frontend-tree.mjs +54 -35
- package/runtime/scripts/hfs/rules/integration-specs.mjs +3 -2
- package/runtime/scripts/hfs/rules/lexicon.mjs +62 -0
- package/runtime/scripts/hfs/rules/lite-proof-lane.mjs +89 -0
- package/runtime/scripts/hfs/rules/monorepo.mjs +14 -1
- package/runtime/scripts/hfs/rules/pipeline.mjs +8 -1
- package/runtime/scripts/hfs/rules/proof-commands.mjs +2 -0
- package/runtime/scripts/hfs/rules/release-provenance.mjs +211 -0
- package/runtime/scripts/hfs/rules/saga-delivery.mjs +66 -0
- package/runtime/scripts/hfs/rules/saga.mjs +8 -16
- package/runtime/scripts/hfs/rules/script-hygiene.mjs +151 -0
- package/runtime/scripts/hfs/rules/secret-custody-only.mjs +65 -0
- package/runtime/scripts/hfs/rules/secrets.mjs +26 -0
- package/runtime/scripts/hfs/rules/services.mjs +4 -4
- package/runtime/scripts/hfs/rules/stack-tooling.mjs +93 -0
- package/runtime/scripts/hfs/rules/stacks-deploy.mjs +76 -0
- package/runtime/scripts/hfs/rules/stacks-ingress.mjs +87 -0
- package/runtime/scripts/hfs/rules/stacks-lite-backing.mjs +111 -0
- package/runtime/scripts/hfs/rules/stacks-release.mjs +366 -0
- package/runtime/scripts/hfs/rules/stacks-runtime.mjs +168 -0
- package/runtime/scripts/hfs/rules/stacks-swarm.mjs +417 -0
- package/runtime/scripts/hfs/rules/stacks.mjs +13 -8
- package/runtime/scripts/hfs/rules/supabase-secrets.mjs +1 -1
- package/runtime/scripts/hfs/rules/supply-chain.mjs +167 -0
- package/runtime/scripts/hfs/rules/unused-symbol-flow.mjs +101 -0
- package/runtime/scripts/hfs/rules/unused-symbol-ledger.mjs +77 -0
- package/runtime/scripts/hfs/rules/unused-symbol-translators.mjs +165 -0
- package/runtime/scripts/hfs/rules/unused-symbol-values.mjs +103 -0
- package/runtime/scripts/hfs/rules/unused-symbol.mjs +320 -0
- package/runtime/scripts/hfs/runtime-rules/source-ast.mjs +185 -0
- package/runtime/scripts/hfs/runtime-rules/workflow-source.mjs +19 -0
- package/runtime/scripts/hfs/sealed-members.mjs +101 -0
- package/runtime/scripts/hfs/secret-bootstrap-crypto.mjs +200 -0
- package/runtime/scripts/hfs/secret-document.mjs +97 -0
- package/runtime/scripts/hfs/secret-edit.mjs +170 -0
- package/runtime/scripts/hfs/secret-errors.mjs +20 -0
- package/runtime/scripts/hfs/secret-files.mjs +124 -0
- package/runtime/scripts/hfs/secret-init.mjs +300 -0
- package/runtime/scripts/hfs/secret-output.mjs +100 -0
- package/runtime/scripts/hfs/secret-sops.mjs +130 -0
- package/runtime/scripts/hfs/secret-store.mjs +163 -0
- package/runtime/scripts/hfs/secret.mjs +162 -193
- package/runtime/scripts/hfs/slot-imports.mjs +18 -3
- package/runtime/scripts/hfs/slot-required.mjs +13 -0
- package/runtime/scripts/hfs/slot-semantic-problems.mjs +2 -1
- package/runtime/scripts/hfs/slots.mjs +1 -0
- package/runtime/scripts/hfs/stack-config-kit.mjs +34 -0
- package/runtime/scripts/hfs/stack-deploy-config.mjs +313 -0
- package/runtime/scripts/hfs/stack-ingress-config.mjs +237 -0
- package/runtime/scripts/hfs/stacks-gate.mjs +414 -0
- package/runtime/scripts/hfs/starcistacks-runtime.mjs +61 -0
- package/runtime/scripts/hfs/tree-findings.mjs +22 -0
- package/runtime/scripts/lib/command-tokens.mjs +126 -0
- package/runtime/scripts/lib/compose-values.mjs +11 -0
- package/runtime/scripts/lib/deployment-findings.mjs +7 -0
- package/runtime/scripts/lib/json-clone.mjs +61 -0
- package/runtime/scripts/lib/list.mjs +4 -0
- package/runtime/scripts/lib/roots.mjs +59 -0
- package/runtime/scripts/lib/runtime-example.mjs +13 -0
- package/runtime/scripts/lib/secret-patterns.mjs +60 -5
- package/runtime/scripts/lib/sql-ast.mjs +32 -0
- package/runtime/scripts/lib/stack-services.mjs +1 -1
- package/runtime/scripts/lib/swarm-stack.mjs +126 -0
- package/runtime/scripts/lib/trim-end.mjs +8 -0
- package/runtime/scripts/lib/ts-analysis.mjs +23 -0
- package/runtime/scripts/lib/ts-ast.mjs +27 -2
- package/runtime/scripts/lib/workflow-events.mjs +8 -0
- package/scaffold/add-app.mjs +77 -59
- package/scaffold/add-cli-lite.mjs +24 -17
- package/scaffold/add-compose.mjs +79 -0
- package/scaffold/add-database-lite.mjs +14 -0
- package/scaffold/add-fe-overlay.mjs +122 -0
- package/scaffold/add-fe-page.mjs +269 -0
- package/scaffold/add-inbox-lite.mjs +87 -124
- package/scaffold/add-plan.mjs +183 -0
- package/scaffold/add-table.mjs +132 -70
- package/scaffold/add.mjs +186 -204
- package/scaffold/app.mjs +128 -43
- package/scaffold/edition-gate.mjs +3 -3
- package/scaffold/image.mjs +2 -2
- package/scaffold/lite-exports.mjs +2 -1
- package/scaffold/service.mjs +2 -2
- package/src/main.mjs +238 -119
- package/stack/age-install.mjs +37 -0
- package/stack/backup.mjs +100 -0
- package/stack/build-args.mjs +42 -0
- package/stack/build.mjs +173 -0
- package/stack/cli.mjs +130 -0
- package/stack/config.mjs +57 -0
- package/stack/context.mjs +57 -0
- package/stack/converge.mjs +107 -0
- package/stack/deploy.mjs +301 -0
- package/stack/digest.mjs +16 -0
- package/stack/docker-transport.mjs +53 -0
- package/stack/edge-alias.mjs +118 -0
- package/stack/errors.mjs +21 -0
- package/stack/image-scan.mjs +152 -0
- package/stack/ingress-create.mjs +114 -0
- package/stack/ingress-publish.mjs +273 -0
- package/stack/ingress.mjs +706 -0
- package/stack/jobs.mjs +51 -0
- package/stack/live-restore.mjs +177 -0
- package/stack/prepare.mjs +266 -0
- package/stack/private-file.mjs +22 -0
- package/stack/provision.mjs +90 -0
- package/stack/prune.mjs +46 -0
- package/stack/release-store.mjs +87 -0
- package/stack/remote.mjs +205 -0
- package/stack/render.mjs +149 -0
- package/stack/retire.mjs +47 -0
- package/stack/sealed.mjs +149 -0
- package/stack/task.mjs +42 -0
- package/stack/verify.mjs +99 -0
- package/sync/ci-commands.mjs +13 -0
- package/sync/index.mjs +127 -64
- package/sync/stack-images.mjs +127 -0
- package/templates/app/ci-workflows/github/workflows/ci.yml +5 -1
- package/templates/app/ci-workflows/github/workflows/images.yml +15 -3
- package/templates/app/ci-workflows/github/workflows/stack-deploy.yml +148 -0
- package/templates/app/ci-workflows-lite/github/workflows/ci.yml +7 -3
- package/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml +38 -6
- package/templates/app/ci-workflows-lite/github/workflows/images.yml +14 -2
- package/templates/app/ci-workflows-lite/github/workflows/stack-deploy.yml +148 -0
- package/templates/app/codegen-graphql.mjs.partial +13 -2
- package/templates/app/codegen-lite/scripts/codegen.mjs +6 -1
- package/templates/app/codegen-prelude.mjs.partial +8 -0
- package/templates/app/gitignore +4 -0
- package/templates/app/gitignore-lite +4 -0
- package/templates/app/hooks/husky/pre-commit +7 -12
- package/templates/app/package-scripts/package.json +1 -0
- package/templates/app/package-scripts/supabase.json +7 -0
- package/templates/app/package-scripts-lite/package.json +1 -7
- package/templates/app/skeleton/.editorconfig +1 -0
- package/templates/app/skeleton/.gitattributes +7 -1
- package/templates/app/skeleton/.github/dependabot.yml +17 -0
- package/templates/app/skeleton/.nvmrc +1 -1
- package/templates/app/skeleton/.sops.yaml +1 -1
- package/templates/app/skeleton/.starcistacks/application-stacks.yaml +134 -1
- package/templates/app/skeleton/.starcistacks/dev/README.md +16 -0
- package/templates/app/skeleton/.starcistacks/dev/environment.json +5 -0
- package/templates/app/skeleton/.starcistacks/dev/infra/compose/stack.yaml +71 -0
- package/templates/app/skeleton/.starcistacks/dev/runtime/env/KEYS.md +14 -0
- package/templates/app/skeleton/.starcistacks/production/README.md +37 -0
- package/templates/app/skeleton/.starcistacks/production/environment.json +5 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/Caddyfile +15 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/owner-actions.md +11 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/recovery/restore-proof.md +7 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/releases/current.yaml +6 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/releases/images.lock.yaml +9 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/releases/previous.yaml +6 -0
- package/templates/app/skeleton/.starcistacks/production/infra/swarm/stack.yaml +142 -0
- package/templates/app/skeleton/.starcistacks/production/runtime/env/KEYS.md +14 -0
- package/templates/app/skeleton/README.md +6 -6
- package/templates/app/skeleton/scripts/codegen.mjs +1 -2
- package/templates/app/skeleton-lite/.editorconfig +16 -0
- package/templates/app/skeleton-lite/.gitattributes +8 -0
- package/templates/app/skeleton-lite/.github/dependabot.yml +17 -0
- package/templates/app/skeleton-lite/.nvmrc +1 -0
- package/templates/app/skeleton-lite/.sops.yaml +3 -2
- package/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml +193 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/README.md +20 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/environment.json +2 -1
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/Caddyfile +16 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/owner-actions.md +11 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/recovery/restore-proof.md +7 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/releases/current.yaml +6 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/releases/images.lock.yaml +8 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/releases/previous.yaml +6 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/infra/swarm/stack.yaml +120 -0
- package/templates/app/skeleton-lite/.starcistacks/dev/runtime/env/KEYS.md +18 -0
- package/templates/app/skeleton-lite/.starcistacks/production/README.md +38 -0
- package/templates/app/skeleton-lite/.starcistacks/production/environment.json +6 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/Caddyfile +11 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/owner-actions.md +11 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/recovery/restore-proof.md +7 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/releases/current.yaml +6 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/releases/images.lock.yaml +8 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/releases/previous.yaml +6 -0
- package/templates/app/skeleton-lite/.starcistacks/production/infra/swarm/stack.yaml +121 -0
- package/templates/app/skeleton-lite/.starcistacks/production/runtime/env/KEYS.md +21 -0
- package/templates/app/skeleton-lite/.starciwork/brand/index.yaml +12 -0
- package/templates/app/skeleton-lite/.starciwork/workspace.yaml +9 -0
- package/templates/app/skeleton-lite/README.md +8 -4
- package/templates/app/skeleton-lite/supabase/config.toml +8 -1
- package/templates/app/skeleton-lite/supabase/migrations/__timestamp___baseline.sql +15 -6
- package/templates/app/starciwork.gitignore-lite +6 -0
- package/templates/app/upgrade-full/.starcistacks/dev/README.md +13 -7
- package/templates/be/image/worker/Dockerfile +1 -1
- package/templates/be/inbox/database-client.spec.ts.tpl +22 -28
- package/templates/be/inbox/database-client.ts.tpl +14 -28
- package/templates/be/inbox/delivery-recorded.event.ts.tpl +36 -0
- package/templates/be/inbox/event-index.ts.tpl +1 -0
- package/templates/be/inbox/events.json.tpl +10 -0
- package/templates/be/inbox/migration.sql.tpl +1 -0
- package/templates/be/inbox/platform/event-bus/event-bus.contracts.ts.tpl +42 -0
- package/templates/be/inbox/platform/event-bus/event-bus.decorators.ts.tpl +9 -0
- package/templates/be/inbox/platform/event-bus/event-bus.module-definition.ts.tpl +6 -0
- package/templates/be/inbox/platform/event-bus/event-bus.module.ts.tpl +19 -0
- package/templates/be/inbox/platform/event-bus/event-bus.options.ts.tpl +2 -0
- package/templates/be/inbox/platform/event-bus/event-bus.port.ts.tpl +16 -0
- package/templates/be/inbox/platform/event-bus/event-bus.service.spec.ts.tpl +45 -0
- package/templates/be/inbox/platform/event-bus/event-bus.service.ts.tpl +15 -0
- package/templates/be/inbox/platform/event-bus/index.ts.tpl +5 -0
- package/templates/be/inbox/platform/event-bus/persistence/event-bus.sql.ts.tpl +5 -0
- package/templates/be/inbox/platform/inbox/inbox.decorators.ts.tpl +9 -0
- package/templates/be/inbox/platform/inbox/inbox.module-definition.ts.tpl +6 -0
- package/templates/be/inbox/platform/inbox/inbox.module.ts.tpl +19 -0
- package/templates/be/inbox/platform/inbox/inbox.options.ts.tpl +2 -0
- package/templates/be/inbox/platform/inbox/inbox.port.ts.tpl +10 -0
- package/templates/be/inbox/platform/inbox/inbox.service.spec.ts.tpl +41 -0
- package/templates/be/inbox/platform/inbox/inbox.service.ts.tpl +19 -0
- package/templates/be/inbox/platform/inbox/index.ts.tpl +3 -0
- package/templates/be/inbox/platform/inbox/persistence/inbox.sql.ts.tpl +7 -0
- package/templates/be/inbox/platform/migration.sql.tpl +48 -0
- package/templates/be/inbox/service.spec.ts.tpl +49 -20
- package/templates/be/inbox/service.ts.tpl +27 -16
- package/templates/be/inbox/sql.ts.tpl +2 -2
- package/templates/be/inbox/webhook-door.spec.ts.tpl +3 -3
- package/templates/be/inbox/webhook-door.ts.tpl +4 -3
- package/templates/be/patterns/api/feature.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/api/feature.module.ts.tpl +2 -1
- package/templates/be/patterns/api/feature.options.ts.tpl +2 -0
- package/templates/be/patterns/api/graphql.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/api/graphql.module.ts.tpl +3 -2
- package/templates/be/patterns/api/graphql.options.ts.tpl +2 -0
- package/templates/be/patterns/cli/group.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/cli/group.module.ts.tpl +2 -1
- package/templates/be/patterns/cli/group.options.ts.tpl +2 -0
- package/templates/be/patterns/event-bus/platform/errors/event-bus.error.ts.tpl +0 -3
- package/templates/be/patterns/event-bus/platform/messages/event-bus.messages.ts.tpl +0 -2
- package/templates/be/patterns/jobs/job.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/jobs/job.module.ts.tpl +2 -1
- package/templates/be/patterns/jobs/job.options.ts.tpl +2 -0
- package/templates/be/patterns/jobs/job.queue.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/jobs/job.queue.module.ts.tpl +6 -3
- package/templates/be/patterns/jobs/job.queue.options.ts.tpl +2 -0
- package/templates/be/patterns/jobs/platform/fenced.processor.spec.ts.tpl +3 -1
- package/templates/be/patterns/outbox/platform/outbox-relay.policy.spec.ts.tpl +25 -9
- package/templates/be/patterns/queues/platform/queue.config.ts.tpl +1 -1
- package/templates/be/patterns/queues/platform/queue.index.ts.tpl +1 -1
- package/templates/be/patterns/queues/platform/queue.module-definition.ts.tpl +2 -2
- package/templates/be/patterns/queues/platform/queue.module.ts.tpl +11 -0
- package/templates/be/patterns/queues/platform/queue.options.ts.tpl +10 -0
- package/templates/be/patterns/queues/queue.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/queues/queue.module.ts.tpl +2 -1
- package/templates/be/patterns/queues/queue.options.ts.tpl +2 -0
- package/templates/be/patterns/reactors/message.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/reactors/message.module.ts.tpl +6 -3
- package/templates/be/patterns/reactors/message.options.ts.tpl +2 -0
- package/templates/be/patterns/reactors/reactor.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/reactors/reactor.module.ts.tpl +2 -1
- package/templates/be/patterns/reactors/reactor.options.ts.tpl +2 -0
- package/templates/be/patterns/realtime/channel.gateway.spec.ts.tpl +188 -0
- package/templates/be/patterns/realtime/channel.gateway.ts.tpl +22 -0
- package/templates/be/patterns/realtime/channel.graphql.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/realtime/channel.graphql.module.ts.tpl +2 -1
- package/templates/be/patterns/realtime/channel.graphql.options.ts.tpl +2 -0
- package/templates/be/patterns/realtime/channel.websocket.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/realtime/channel.websocket.module.ts.tpl +110 -0
- package/templates/be/patterns/realtime/channel.websocket.options.ts.tpl +7 -0
- package/templates/be/patterns/saga/saga.message.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/saga/saga.message.module.ts.tpl +6 -3
- package/templates/be/patterns/saga/saga.message.options.ts.tpl +2 -0
- package/templates/be/patterns/saga/saga.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/saga/saga.module.ts.tpl +2 -1
- package/templates/be/patterns/saga/saga.options.ts.tpl +2 -0
- package/templates/be/patterns/webhooks/webhook.door.spec.ts.tpl +3 -3
- package/templates/be/patterns/webhooks/webhook.door.ts.tpl +3 -3
- package/templates/be/patterns/webhooks/webhook.http.module-definition.ts.tpl +6 -0
- package/templates/be/patterns/webhooks/webhook.http.module.ts.tpl +2 -1
- package/templates/be/patterns/webhooks/webhook.http.options.ts.tpl +2 -0
- package/templates/be/platform/graphql/localize-errors.mapper.spec.ts +80 -26
- package/templates/be/platform/graphql/localize-errors.mapper.ts +2 -5
- package/templates/be/skeleton/apps/__app__/src/__app__.env.ts +21 -0
- package/templates/be/skeleton/apps/__app__/src/__app__.options.ts +1 -1
- package/templates/be/skeleton/apps/__app__/src/app.module.ts +15 -45
- package/templates/be/skeleton/apps/__app__/src/compose/api.ts +4 -0
- package/templates/be/skeleton/apps/__app__/src/compose/domain.ts +11 -0
- package/templates/be/skeleton/apps/__app__/src/compose/platform.ts +44 -0
- package/templates/be/skeleton/apps/__app__/src/compose/system.ts +5 -0
- package/templates/be/skeleton/apps/__app__/src/compose/webhooks.ts +4 -0
- package/templates/be/skeleton/apps/__app__/src/main.ts +18 -10
- package/templates/be/skeleton/apps/cli/src/app.module.ts +3 -13
- package/templates/be/skeleton/apps/cli/src/cli.env.ts +13 -0
- package/templates/be/skeleton/apps/cli/src/cli.options.ts +7 -17
- package/templates/be/skeleton/apps/cli/src/compose/cli.ts +5 -0
- package/templates/be/skeleton/apps/cli/src/compose/platform.ts +24 -0
- package/templates/be/skeleton/apps/cli/src/main.ts +3 -2
- package/templates/be/skeleton/src/features/api/system-health/application/check-readiness.contracts.ts +2 -0
- package/templates/be/skeleton/src/features/api/system-health/application/check-readiness.handler.ts +22 -0
- package/templates/be/skeleton/src/features/api/system-health/application/check-readiness.query.ts +11 -0
- package/templates/be/skeleton/src/features/api/system-health/system-health.module-definition.ts +6 -0
- package/templates/be/skeleton/src/features/api/system-health/system-health.module.ts +5 -3
- package/templates/be/skeleton/src/features/api/system-health/system-health.options.ts +2 -0
- package/templates/be/skeleton/src/features/api/system-health/transport/http/ready.controller.ts +19 -0
- package/templates/be/skeleton/src/features/api/system-health/transport/http/system-health-http.module-definition.ts +6 -0
- package/templates/be/skeleton/src/features/api/system-health/transport/http/system-health-http.module.ts +8 -3
- package/templates/be/skeleton/src/features/api/system-health/transport/http/system-health-http.options.ts +2 -0
- package/templates/be/skeleton/src/features/cli/cli.module-definition.ts +6 -0
- package/templates/be/skeleton/src/features/cli/cli.module.ts +3 -2
- package/templates/be/skeleton/src/features/cli/cli.options.ts +2 -0
- package/templates/be/skeleton/src/features/cli/migrate/migrate.module-definition.ts +6 -0
- package/templates/be/skeleton/src/features/cli/migrate/migrate.module.ts +2 -1
- package/templates/be/skeleton/src/features/cli/migrate/migrate.options.ts +2 -0
- package/templates/be/skeleton/src/features/cli/seed/seed.module-definition.ts +6 -0
- package/templates/be/skeleton/src/features/cli/seed/seed.module.ts +2 -1
- package/templates/be/skeleton/src/features/cli/seed/seed.options.ts +2 -0
- package/templates/be/skeleton/src/features/cli/seed/subs/run.cli.spec.ts +5 -6
- package/templates/be/skeleton/src/modules/domain/identity/admission.policy.spec.ts +56 -4
- package/templates/be/skeleton/src/modules/domain/identity/admission.policy.ts +36 -5
- package/templates/be/skeleton/src/modules/domain/identity/auth.guard.spec.ts +39 -8
- package/templates/be/skeleton/src/modules/domain/identity/auth.guard.ts +14 -8
- package/templates/be/skeleton/src/modules/domain/identity/credential.contracts.ts +26 -0
- package/templates/be/skeleton/src/modules/domain/identity/credential.guard.spec.ts +119 -0
- package/templates/be/skeleton/src/modules/domain/identity/credential.guard.ts +43 -0
- package/templates/be/skeleton/src/modules/domain/identity/identity.contracts.ts +16 -0
- package/templates/be/skeleton/src/modules/domain/identity/identity.decorators.ts +18 -1
- package/templates/be/skeleton/src/modules/domain/identity/identity.module.ts +22 -4
- package/templates/be/skeleton/src/modules/domain/identity/identity.options.ts +8 -2
- package/templates/be/skeleton/src/modules/domain/identity/index.ts +1 -0
- package/templates/be/skeleton/src/modules/platform/config/env-source.config.ts +6 -6
- package/templates/be/skeleton/src/modules/platform/database/connection-source.client.spec.ts +11 -4
- package/templates/be/skeleton/src/modules/platform/database/database-probe.service.spec.ts +32 -0
- package/templates/be/skeleton/src/modules/platform/database/database-probe.service.ts +14 -0
- package/templates/be/skeleton/src/modules/platform/database/database.module.ts +7 -1
- package/templates/be/skeleton/src/modules/platform/database/index.ts +2 -0
- package/templates/be/skeleton/src/modules/platform/database/primary.decorators.ts +8 -0
- package/templates/be/skeleton/src/modules/platform/database/seed-connections.client.spec.ts +25 -6
- package/templates/be/skeleton/src/modules/platform/errors/errors.filter.spec.ts +16 -6
- package/templates/be/skeleton/src/modules/platform/http-security/edge-security.service.spec.ts +130 -0
- package/templates/be/skeleton/src/modules/platform/http-security/edge-security.service.ts +58 -0
- package/templates/be/skeleton/src/modules/platform/http-security/errors/http-security.error.ts +3 -0
- package/templates/be/skeleton/src/modules/platform/http-security/execution-request.mapper.spec.ts +16 -4
- package/templates/be/skeleton/src/modules/platform/http-security/http-security.config.ts +16 -10
- package/templates/be/skeleton/src/modules/platform/http-security/http-security.module.ts +3 -1
- package/templates/be/skeleton/src/modules/platform/http-security/http-security.options.ts +2 -0
- package/templates/be/skeleton/src/modules/platform/http-security/index.ts +5 -0
- package/templates/be/skeleton/src/modules/platform/http-security/messages/http-security.messages.ts +12 -5
- package/templates/be/skeleton/src/modules/platform/http-security/rate-limit.guard.spec.ts +13 -8
- package/templates/be/skeleton/src/modules/platform/http-security/readiness.contracts.ts +5 -0
- package/templates/be/skeleton/src/modules/platform/http-security/readiness.decorators.ts +7 -0
- package/templates/be/skeleton/src/modules/platform/http-security/readiness.service.spec.ts +86 -0
- package/templates/be/skeleton/src/modules/platform/http-security/readiness.service.ts +39 -0
- package/templates/be/skeleton/src/modules/platform/http-security/webhook-signature.service.spec.ts +139 -131
- package/templates/be/skeleton/src/modules/platform/i18n/index.ts +1 -1
- package/templates/be/skeleton/src/modules/platform/logging/json-logger.service.spec.ts +91 -67
- package/templates/be/skeleton/src/modules/platform/logging/json-logger.service.ts +5 -4
- package/templates/be/skeleton/src/modules/platform/logging/logging.log-events.ts +0 -2
- package/templates/be/skeleton/src/modules/platform/primitives/outcome.mapper.spec.ts +20 -6
- package/templates/be/skeleton/src/modules/platform/primitives/sequence.policy.spec.ts +16 -4
- package/templates/be/skeleton/src/modules/platform/retry/index.ts +3 -0
- package/templates/be/skeleton/src/modules/platform/retry/retry.decorators.ts +9 -0
- package/templates/be/skeleton/src/modules/platform/retry/retry.module-definition.ts +7 -0
- package/templates/be/skeleton/src/modules/platform/retry/retry.module.ts +19 -0
- package/templates/be/skeleton/src/modules/platform/retry/retry.options.ts +2 -0
- package/templates/be/skeleton/src/modules/platform/retry/retry.port.ts +11 -0
- package/templates/be/skeleton/src/modules/platform/retry/system-timer.service.spec.ts +36 -0
- package/templates/be/skeleton/src/modules/platform/retry/system-timer.service.ts +10 -0
- package/templates/be/skeleton/src/tests/contract/http-security/http-security.contract-spec.ts +54 -0
- package/templates/be/skeleton-lite/apps/api/src/api.env.ts +25 -0
- package/templates/be/skeleton-lite/apps/api/src/api.options.ts +1 -1
- package/templates/be/skeleton-lite/apps/api/src/app.module.ts +18 -58
- package/templates/be/skeleton-lite/apps/api/src/compose/api.ts +4 -0
- package/templates/be/skeleton-lite/apps/api/src/compose/domain.ts +10 -0
- package/templates/be/skeleton-lite/apps/api/src/compose/integrations.ts +16 -0
- package/templates/be/skeleton-lite/apps/api/src/compose/platform.ts +47 -0
- package/templates/be/skeleton-lite/apps/api/src/compose/system.ts +5 -0
- package/templates/be/skeleton-lite/apps/api/src/compose/webhooks.ts +4 -0
- package/templates/be/skeleton-lite/apps/api/src/main.ts +5 -13
- package/templates/be/skeleton-lite/apps/cli/src/cli.env.ts +17 -0
- package/templates/be/skeleton-lite/apps/cli/src/compose/platform.ts +12 -0
- package/templates/be/skeleton-lite/src/modules/domain/identity/admission.policy.spec.ts +71 -5
- package/templates/be/skeleton-lite/src/modules/domain/identity/admission.policy.ts +29 -2
- package/templates/be/skeleton-lite/src/modules/domain/identity/auth.guard.spec.ts +68 -15
- package/templates/be/skeleton-lite/src/modules/domain/identity/auth.guard.ts +14 -9
- package/templates/be/skeleton-lite/src/modules/domain/identity/identity.contracts.ts +9 -2
- package/templates/be/skeleton-lite/src/modules/domain/identity/identity.decorators.ts +16 -1
- package/templates/be/skeleton-lite/src/modules/domain/identity/identity.module.ts +19 -4
- package/templates/be/skeleton-lite/src/modules/domain/identity/identity.options.ts +5 -1
- package/templates/be/skeleton-lite/src/modules/domain/identity/index.ts +2 -1
- package/templates/be/skeleton-lite/src/modules/integrations/supabase/errors/supabase.error.ts +0 -3
- package/templates/be/skeleton-lite/src/modules/integrations/supabase/supabase.client.spec.ts +17 -5
- package/templates/be/skeleton-lite/src/modules/platform/database/database.module.ts +24 -13
- package/templates/be/skeleton-lite/src/modules/platform/database/database.port.ts +5 -0
- package/templates/be/skeleton-lite/src/modules/platform/database/errors/database.error.ts +16 -0
- package/templates/be/skeleton-lite/src/modules/platform/database/index.ts +3 -0
- package/templates/be/skeleton-lite/src/modules/platform/http-security/http-security.module.ts +5 -2
- package/templates/be/skeleton-lite/src/modules/platform/http-security/index.ts +4 -1
- package/templates/be/skeleton-lite/src/modules/platform/i18n/index.ts +1 -1
- package/templates/be/skeleton-lite/src/modules/platform/logging/logging.log-events.ts +7 -0
- package/templates/be/skeleton-lite/src/tests/fixtures/builders/api.builder.ts +29 -0
- package/templates/be/skeleton-lite/src/tests/fixtures/builders/cli.builder.ts +16 -0
- package/templates/be/table/api/feature.module-definition.ts.tpl +6 -0
- package/templates/be/table/api/feature.module.ts.tpl +2 -1
- package/templates/be/table/api/feature.options.ts.tpl +2 -0
- package/templates/be/table/api/graphql.module-definition.ts.tpl +6 -0
- package/templates/be/table/api/graphql.module.ts.tpl +3 -2
- package/templates/be/table/api/graphql.options.ts.tpl +2 -0
- package/templates/be/table/migration.sql.tpl +1 -0
- package/templates/be/upgrade-full/apps/cli/src/app.module.ts +4 -6
- package/templates/be/upgrade-full/apps/cli/src/cli.env.ts +7 -0
- package/templates/be/upgrade-full/apps/cli/src/compose/cli.ts +5 -0
- package/templates/be/upgrade-full/apps/cli/src/compose/platform.ts +9 -0
- package/templates/be/upgrade-full/apps/cli/src/main.ts +3 -0
- package/templates/be/upgrade-full/src/features/cli/cli.module.ts +3 -2
- package/templates/fe/auth/supabase-client.ts.tpl +34 -0
- package/templates/fe/skeleton/apps/__app__/src/app/auth/callback/route.ts +11 -0
- package/templates/fe/skeleton/apps/__app__/src/components/blocks/SignInForm/index.tsx +6 -1
- package/templates/fe/skeleton/apps/__app__/src/components/leaves/Icon/index.tsx +4 -0
- package/templates/fe/skeleton/apps/__app__/src/features/overlays/AppGuideOverlay/component.tsx +31 -0
- package/templates/fe/skeleton/apps/__app__/src/features/overlays/AppGuideOverlay/index.tsx +24 -0
- package/templates/fe/skeleton/apps/__app__/src/hooks/auth/useSession.ts +6 -1
- package/templates/fe/skeleton/apps/__app__/src/hooks/auth/useSignOut.ts +3 -4
- package/templates/fe/skeleton/apps/__app__/src/hooks/zustand/appGuide/index.ts +1 -0
- package/templates/fe/skeleton/apps/__app__/src/hooks/zustand/appGuide/store.ts +15 -0
- package/templates/fe/skeleton/apps/__app__/src/modules/auth/pkce-client.ts +18 -0
- package/templates/fe/skeleton/apps/__app__/src/modules/auth/server.ts +19 -0
- package/templates/fe/skeleton/apps/app/src/features/pages/AppHomePage/index.tsx +7 -1
- package/templates/fe/skeleton/apps/app/src/modules/i18n/messages/en.json +57 -0
- package/templates/fe/skeleton/apps/app/src/modules/i18n/messages/vi.json +6 -0
- package/templates/fe/skeleton/apps/landing/src/modules/i18n/messages/en.json +31 -0
- package/templates/fe/skeleton/packages/__project__-i18n/src/routing.ts +1 -1
- package/templates/fe/skeleton/packages/__project__-ui/src/index.ts +1 -0
- package/templates/fe/skeleton-lite/apps/__app__/src/modules/auth/client.ts +1 -34
- package/templates/fe/skeleton-lite/apps/web/src/features/pages/AppHomePage/index.tsx +7 -1
- package/templates/fe/skeleton-lite/apps/web/src/modules/i18n/messages/en.json +57 -0
- package/templates/fe/skeleton-lite/apps/web/src/modules/i18n/messages/vi.json +30 -24
- package/templates/fe/skeleton-lite/apps/web/src/modules/i18n/routing.ts +1 -1
- package/templates/fe/transport/graphql/clients/clients/auth.ts +1 -1
- package/templates/fe/transport/graphql/clients/links/locale.ts +2 -2
- package/upgrade/check.mjs +3 -1
- package/upgrade/file-state.mjs +68 -0
- package/upgrade/index.mjs +58 -94
- package/runtime/scripts/api/git/log.mjs +0 -5
- package/templates/app/skeleton-lite/.starciwork/shell/index.yaml +0 -55
|
@@ -351,7 +351,7 @@ allocation:
|
|
|
351
351
|
# process keeps the lock regardless of age.
|
|
352
352
|
housekeeping:
|
|
353
353
|
tmpMaxAgeMs: 172800000
|
|
354
|
-
tmpPrefixes: [policy-, rights-, l4-, starci, starci-w2, evidence, sup-k, work-v3, scoped-lint, si-, w1-, nivo-, orca-spec,
|
|
354
|
+
tmpPrefixes: [coverage-generated-wire-, work-validate-lite-, example-refs-lite-, example-lite-, coverage-inventory-, policy-, rights-, l4-, starci, starci-w2, evidence, sup-k, work-v3, scoped-lint, si-, w1-, nivo-, orca-spec,
|
|
355
355
|
owner-bias-cli-, admission-runtime-, agent-launch-, starci-provider-budget-, starci-provider-schema-,
|
|
356
356
|
codex-, deps-, direction-part-, draw-layer-, footprint-, grammar-pin-, guard-, literal-argv-, module-yaml-,
|
|
357
357
|
doc-language-, guidance-, hk-, hfs-, install-link-, kernel-check-, kguard-, sup-orca, land-, op-manifest-, path-key-, pathspec-, push-scan-spec-, rename-over-, sbl-, serve-ask-, sup-chat, sup-repo, sup-src, sup-wd,
|
|
@@ -0,0 +1,663 @@
|
|
|
1
|
+
schema: starci/schema@1
|
|
2
|
+
id: starci/application-stacks@1
|
|
3
|
+
title: Application stack declaration
|
|
4
|
+
description: >-
|
|
5
|
+
Static, repository-owned inventory for reproducible environments. It declares intended topology,
|
|
6
|
+
custody and runbook location; it is not evidence that a stack ran. This is the machine form of
|
|
7
|
+
modules/schemas/stacks-layout.yaml's CONTENT half - the layout governs the TREE, this document governs the
|
|
8
|
+
fields inside application-stacks.yaml. Runtime and edition content rules require the applicable
|
|
9
|
+
deployment declarations; optional schema fields preserve compatibility with older inventories.
|
|
10
|
+
type: object
|
|
11
|
+
additionalProperties: false
|
|
12
|
+
required: [schema, components, environments, k8s]
|
|
13
|
+
properties:
|
|
14
|
+
schema: {type: string, minLength: 1}
|
|
15
|
+
sources:
|
|
16
|
+
type: array
|
|
17
|
+
minItems: 1
|
|
18
|
+
items:
|
|
19
|
+
type: object
|
|
20
|
+
additionalProperties: false
|
|
21
|
+
required: [repository]
|
|
22
|
+
properties:
|
|
23
|
+
repository: {type: string, minLength: 1}
|
|
24
|
+
components:
|
|
25
|
+
type: object
|
|
26
|
+
minProperties: 1
|
|
27
|
+
additionalProperties:
|
|
28
|
+
type: object
|
|
29
|
+
additionalProperties: false
|
|
30
|
+
required: [role]
|
|
31
|
+
properties:
|
|
32
|
+
role:
|
|
33
|
+
description: >-
|
|
34
|
+
Component classification, including service, stateful, observability, ingress, scheduler
|
|
35
|
+
and job. Free text preserves older declarations.
|
|
36
|
+
type: string
|
|
37
|
+
minLength: 1
|
|
38
|
+
image: {type: string, minLength: 1}
|
|
39
|
+
app:
|
|
40
|
+
description: Back-end app id whose composition the component runs.
|
|
41
|
+
type: string
|
|
42
|
+
minLength: 1
|
|
43
|
+
compose: {type: string, minLength: 1}
|
|
44
|
+
purpose: {type: string}
|
|
45
|
+
required: {type: boolean}
|
|
46
|
+
stateful: {type: boolean}
|
|
47
|
+
database:
|
|
48
|
+
description: A sidecar's declared database adapter and persistent volume.
|
|
49
|
+
type: object
|
|
50
|
+
additionalProperties: false
|
|
51
|
+
required: [provider]
|
|
52
|
+
properties:
|
|
53
|
+
provider: {type: string, minLength: 1}
|
|
54
|
+
volume: {type: string, minLength: 1}
|
|
55
|
+
volumes:
|
|
56
|
+
description: Named persistent volumes owned by this component.
|
|
57
|
+
type: array
|
|
58
|
+
uniqueItems: true
|
|
59
|
+
items: {type: string, minLength: 1}
|
|
60
|
+
mode: {enum: [service, replicated-job], default: service}
|
|
61
|
+
scheduler:
|
|
62
|
+
description: Component id of the declared scheduler that triggers a replicated-job.
|
|
63
|
+
type: string
|
|
64
|
+
minLength: 1
|
|
65
|
+
schedule:
|
|
66
|
+
description: Cron expression consumed by the declared scheduler.
|
|
67
|
+
type: string
|
|
68
|
+
minLength: 1
|
|
69
|
+
release:
|
|
70
|
+
description: Release gates of the app (starci app release gate and push); packages/hfs/release/gate.mjs is the authority for the fields.
|
|
71
|
+
type: object
|
|
72
|
+
database:
|
|
73
|
+
description: Database cutover data (starci app db migrate and post-cutover); packages/hfs/db/migrate.mjs is the authority for the fields.
|
|
74
|
+
type: object
|
|
75
|
+
jobs:
|
|
76
|
+
description: Application-owned schedules, bound to their back-end CLI commands.
|
|
77
|
+
type: object
|
|
78
|
+
additionalProperties:
|
|
79
|
+
type: object
|
|
80
|
+
additionalProperties: false
|
|
81
|
+
required: [schedule, command]
|
|
82
|
+
properties:
|
|
83
|
+
component: {type: string, minLength: 1}
|
|
84
|
+
schedule: {type: string, minLength: 1}
|
|
85
|
+
command: {type: string, minLength: 1}
|
|
86
|
+
backing:
|
|
87
|
+
description: Managed backing services declared as dependencies, never run as stack components.
|
|
88
|
+
type: object
|
|
89
|
+
additionalProperties:
|
|
90
|
+
type: object
|
|
91
|
+
additionalProperties: false
|
|
92
|
+
required: [provider, managed]
|
|
93
|
+
properties:
|
|
94
|
+
provider: {type: string, minLength: 1}
|
|
95
|
+
managed: {const: true}
|
|
96
|
+
environments:
|
|
97
|
+
type: object
|
|
98
|
+
minProperties: 1
|
|
99
|
+
additionalProperties: {$ref: '#/$defs/environment'}
|
|
100
|
+
k8s:
|
|
101
|
+
type: object
|
|
102
|
+
additionalProperties: false
|
|
103
|
+
required: [status, reason]
|
|
104
|
+
properties:
|
|
105
|
+
status: {enum: [deferred, supported]}
|
|
106
|
+
reason: {type: string, minLength: 1}
|
|
107
|
+
services:
|
|
108
|
+
description: >-
|
|
109
|
+
The delivery, quality and platform services this repository's code and CI use - NOT Compose
|
|
110
|
+
services (those are `components`). One entry per service id from the closed catalog below; a
|
|
111
|
+
service the repository does not use is still declared `mode: disabled` when its CI or config
|
|
112
|
+
mentions it. Owner ruling 2026-09-24: every product states these unambiguously so no Kernel or
|
|
113
|
+
op misreads them and asks the owner again. Optional in this schema so older declarations
|
|
114
|
+
stay loadable; scripts/gates/starcistacks.mjs requires it for a new repository or a
|
|
115
|
+
new leg (contract change starcistacks-services) and reports its absence as a suspect with a
|
|
116
|
+
planned follow-up everywhere else.
|
|
117
|
+
type: object
|
|
118
|
+
minProperties: 1
|
|
119
|
+
additionalProperties: false
|
|
120
|
+
properties:
|
|
121
|
+
sonar: {$ref: '#/$defs/service'}
|
|
122
|
+
container-registry: {$ref: '#/$defs/service'}
|
|
123
|
+
analytics: {$ref: '#/$defs/service'}
|
|
124
|
+
error-tracking: {$ref: '#/$defs/service'}
|
|
125
|
+
$defs:
|
|
126
|
+
service:
|
|
127
|
+
type: object
|
|
128
|
+
additionalProperties: false
|
|
129
|
+
required: [provider, mode, ci, ownerAction]
|
|
130
|
+
properties:
|
|
131
|
+
provider:
|
|
132
|
+
description: >-
|
|
133
|
+
Closed per service id (check-starcistacks.mjs PROVIDERS): sonar sonarqube|sonarcloud,
|
|
134
|
+
container-registry ghcr|dockerhub|ecr|gar, analytics posthog|plausible|umami|google-analytics,
|
|
135
|
+
error-tracking sentry|glitchtip.
|
|
136
|
+
type: string
|
|
137
|
+
minLength: 1
|
|
138
|
+
mode:
|
|
139
|
+
description: >-
|
|
140
|
+
local - a server a stack runs (stack and host.local required); hosted - a SaaS or remote
|
|
141
|
+
server (host.public required); disabled - not used (reason required, CI must not call it).
|
|
142
|
+
enum: [local, hosted, disabled]
|
|
143
|
+
purpose: {type: string, minLength: 1}
|
|
144
|
+
reason: {type: string, minLength: 1}
|
|
145
|
+
qualityGate:
|
|
146
|
+
description: >-
|
|
147
|
+
sonar only: the name of the one quality gate the repository is held to. The thresholds are not restated
|
|
148
|
+
here - knowledge/sonar-gate.yaml owns them and scripts/gates/starcistacks.mjs refuses any other name
|
|
149
|
+
(STACKS_QUALITY_GATE_DRIFT).
|
|
150
|
+
type: string
|
|
151
|
+
pattern: '^[a-z][a-z0-9-]*$'
|
|
152
|
+
host:
|
|
153
|
+
type: object
|
|
154
|
+
additionalProperties: false
|
|
155
|
+
properties:
|
|
156
|
+
local: {type: string, pattern: '^https?://[^\s]+$'}
|
|
157
|
+
public: {type: string, pattern: '^https://[^\s]+$'}
|
|
158
|
+
fromCredential:
|
|
159
|
+
description: A hosted endpoint carried inside a credential (a Sentry DSN) - the credential id, never the value.
|
|
160
|
+
type: string
|
|
161
|
+
pattern: '^[a-z][a-z0-9-]*$'
|
|
162
|
+
stack: {$ref: '#/$defs/serviceStack'}
|
|
163
|
+
auth:
|
|
164
|
+
description: >-
|
|
165
|
+
How a client authenticates - token (a credential in custody), oidc (GitHub OIDC, no stored
|
|
166
|
+
secret), github-token (the workflow's automatic GITHUB_TOKEN, no stored secret), none.
|
|
167
|
+
enum: [token, oidc, github-token, none]
|
|
168
|
+
projects:
|
|
169
|
+
type: array
|
|
170
|
+
items:
|
|
171
|
+
type: object
|
|
172
|
+
additionalProperties: false
|
|
173
|
+
required: [repository, key]
|
|
174
|
+
properties:
|
|
175
|
+
repository: {type: string, pattern: '^[A-Za-z0-9._-]+$'}
|
|
176
|
+
key: {type: string, minLength: 1}
|
|
177
|
+
name: {type: string, minLength: 1}
|
|
178
|
+
credentials:
|
|
179
|
+
type: array
|
|
180
|
+
items: {$ref: '#/$defs/serviceCredential'}
|
|
181
|
+
runtimeSecrets:
|
|
182
|
+
description: >-
|
|
183
|
+
An app that lives inside the runtime repository (an example) holds no custody: it names the variables of the runtime's untracked
|
|
184
|
+
.claude/secret.env it reads (and, in CI, the repository secret or variable of the same name). A product declares credentials instead;
|
|
185
|
+
scripts/gates/starcistacks.mjs refuses each form for the other kind (STACKS_EXAMPLE_FORM, STACKS_PRODUCT_FORM).
|
|
186
|
+
type: array
|
|
187
|
+
minItems: 1
|
|
188
|
+
items: {type: string, pattern: '^[A-Z][A-Z0-9_]*$'}
|
|
189
|
+
ci: {$ref: '#/$defs/serviceCi'}
|
|
190
|
+
ownerAction:
|
|
191
|
+
description: >-
|
|
192
|
+
none - nothing about this service is ever asked of the owner (the default and the only
|
|
193
|
+
value allowed while every credential is in custody). Otherwise the one thing only the owner
|
|
194
|
+
can give, named exactly.
|
|
195
|
+
anyOf:
|
|
196
|
+
- {const: none}
|
|
197
|
+
- type: object
|
|
198
|
+
additionalProperties: false
|
|
199
|
+
required: [needed, reason]
|
|
200
|
+
properties:
|
|
201
|
+
needed: {type: string, minLength: 1}
|
|
202
|
+
reason: {type: string, minLength: 1}
|
|
203
|
+
serviceStack:
|
|
204
|
+
description: >-
|
|
205
|
+
Which stack defines a local service - either a project-owned .starcistacks stack
|
|
206
|
+
({repository, root: .starcistacks, environment, compose}) or a host-owned runtime
|
|
207
|
+
extension ({owner: host, root: .claude/ext/<service>, environment, compose}).
|
|
208
|
+
anyOf:
|
|
209
|
+
- $ref: '#/$defs/serviceStackProject'
|
|
210
|
+
- $ref: '#/$defs/serviceStackHost'
|
|
211
|
+
serviceStackProject:
|
|
212
|
+
description: A local service one repository's own .starcistacks runs.
|
|
213
|
+
type: object
|
|
214
|
+
additionalProperties: false
|
|
215
|
+
required: [repository, root, environment, compose]
|
|
216
|
+
properties:
|
|
217
|
+
repository: {type: string, pattern: '^[A-Za-z0-9._-]+$'}
|
|
218
|
+
root: {const: .starcistacks}
|
|
219
|
+
environment: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
220
|
+
compose: {type: string, minLength: 1}
|
|
221
|
+
container: {type: string, minLength: 1}
|
|
222
|
+
publishedBy: {type: string, minLength: 1}
|
|
223
|
+
serviceStackHost:
|
|
224
|
+
description: >-
|
|
225
|
+
A shared service the host's installed .claude tree runs once for every routed project
|
|
226
|
+
(SonarQube at .claude/ext/sonar). `root` is a path inside the runtime tree; `environment`
|
|
227
|
+
names the environment slot the extension serves and is not a path segment - the Compose
|
|
228
|
+
file resolves at <root>/<compose>. The runtime tree carries the extension, so no
|
|
229
|
+
repository is named.
|
|
230
|
+
type: object
|
|
231
|
+
additionalProperties: false
|
|
232
|
+
required: [owner, root, environment, compose]
|
|
233
|
+
properties:
|
|
234
|
+
owner: {const: host}
|
|
235
|
+
root: {type: string, pattern: '^\.claude/ext/[a-z][a-z0-9-]*$'}
|
|
236
|
+
environment: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
237
|
+
compose: {type: string, minLength: 1}
|
|
238
|
+
container: {type: string, minLength: 1}
|
|
239
|
+
publishedBy: {type: string, minLength: 1}
|
|
240
|
+
serviceCredential:
|
|
241
|
+
description: >-
|
|
242
|
+
A custody reference, never a value - the repository whose stack holds it and the plaintext
|
|
243
|
+
member's path from that repository's root; the tracked <path>.enc twin must exist. The field env is the
|
|
244
|
+
variable the consuming tool reads; `key` is the field inside a structured custody file (app.yaml)
|
|
245
|
+
when the application reads the file itself. At least one of env and key is named. Sonar
|
|
246
|
+
convention (scripts/gates/sonar-local.mjs reads it): id `admin` creates projects and mints
|
|
247
|
+
tokens; a credential whose id is a project key is that project's analysis token.
|
|
248
|
+
type: object
|
|
249
|
+
additionalProperties: false
|
|
250
|
+
required: [id, custody]
|
|
251
|
+
properties:
|
|
252
|
+
id: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
253
|
+
purpose: {type: string, minLength: 1}
|
|
254
|
+
env: {type: string, pattern: '^[A-Z][A-Z0-9_]*$'}
|
|
255
|
+
key: {type: string, minLength: 1}
|
|
256
|
+
custody:
|
|
257
|
+
type: object
|
|
258
|
+
additionalProperties: false
|
|
259
|
+
required: [repository, path]
|
|
260
|
+
properties:
|
|
261
|
+
repository: {type: string, pattern: '^[A-Za-z0-9._-]+$'}
|
|
262
|
+
path: {type: string, pattern: '^(\.starcistacks/[a-z][a-z0-9-]*/(runtime/files|runtime/env|secrets)/[^\s]+|\.claude/ext/[a-z][a-z0-9-]*/secrets/[^\s]+)$'}
|
|
263
|
+
serviceCi:
|
|
264
|
+
description: >-
|
|
265
|
+
How GitHub CI gets the service. wiring required - CI calls it now and the named secrets and
|
|
266
|
+
variables must exist; optional-follow-up - CI may call it, and a Kernel (never the owner) sets
|
|
267
|
+
the secrets and variables from custody when it chooses to; not-used - CI does not call it.
|
|
268
|
+
type: object
|
|
269
|
+
additionalProperties: false
|
|
270
|
+
required: [wiring]
|
|
271
|
+
properties:
|
|
272
|
+
wiring: {enum: [required, optional-follow-up, not-used]}
|
|
273
|
+
workflow: {type: string, minLength: 1}
|
|
274
|
+
permissions: {type: array, items: {type: string, minLength: 1}}
|
|
275
|
+
secrets:
|
|
276
|
+
type: array
|
|
277
|
+
items:
|
|
278
|
+
type: object
|
|
279
|
+
additionalProperties: false
|
|
280
|
+
required: [name, credential]
|
|
281
|
+
properties:
|
|
282
|
+
name: {type: string, pattern: '^[A-Z][A-Z0-9_]*$'}
|
|
283
|
+
credential: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
284
|
+
vars:
|
|
285
|
+
type: array
|
|
286
|
+
items:
|
|
287
|
+
type: object
|
|
288
|
+
additionalProperties: false
|
|
289
|
+
required: [name, value]
|
|
290
|
+
properties:
|
|
291
|
+
name: {type: string, pattern: '^[A-Z][A-Z0-9_]*$'}
|
|
292
|
+
value: {type: string, minLength: 1}
|
|
293
|
+
provisioning: {type: string, minLength: 1}
|
|
294
|
+
environment:
|
|
295
|
+
type: object
|
|
296
|
+
additionalProperties: false
|
|
297
|
+
required: [status, runtime, composeFiles, components, runbook, secrets]
|
|
298
|
+
properties:
|
|
299
|
+
status: {const: supported}
|
|
300
|
+
runtime: {enum: [docker-compose, docker-swarm]}
|
|
301
|
+
composeFiles: {type: array, minItems: 1, items: {type: string, minLength: 1}}
|
|
302
|
+
renderedModel:
|
|
303
|
+
description: Tracked rendered model relative to .starcistacks/<environment>, such as infra/swarm/rendered.yaml.
|
|
304
|
+
type: string
|
|
305
|
+
minLength: 1
|
|
306
|
+
components:
|
|
307
|
+
type: object
|
|
308
|
+
additionalProperties:
|
|
309
|
+
type: object
|
|
310
|
+
additionalProperties: {type: number}
|
|
311
|
+
runbook: {type: string, minLength: 1}
|
|
312
|
+
secrets: {type: array, items: {$ref: '#/$defs/secret'}}
|
|
313
|
+
deploy: {$ref: '#/$defs/deploy'}
|
|
314
|
+
ingress:
|
|
315
|
+
description: "The one selected ingress component and the hosts it routes, or external with the stack name when the ingress is a shared stack outside this one (then no component; rule R275 judges which of the two is declared)."
|
|
316
|
+
type: object
|
|
317
|
+
additionalProperties: false
|
|
318
|
+
required: [hosts]
|
|
319
|
+
properties:
|
|
320
|
+
component: {type: string, minLength: 1}
|
|
321
|
+
external:
|
|
322
|
+
description: "The shared ingress stack (its own docker stack) that serves the hosts; this stack renders no ingress and publishes no port."
|
|
323
|
+
type: object
|
|
324
|
+
additionalProperties: false
|
|
325
|
+
required: [stack]
|
|
326
|
+
properties:
|
|
327
|
+
stack: {type: string, minLength: 1}
|
|
328
|
+
hosts:
|
|
329
|
+
type: array
|
|
330
|
+
minItems: 1
|
|
331
|
+
uniqueItems: true
|
|
332
|
+
items: {type: string, minLength: 1}
|
|
333
|
+
dns:
|
|
334
|
+
description: Owner-run DNS prerequisites, one declaration per ingress host.
|
|
335
|
+
type: array
|
|
336
|
+
items:
|
|
337
|
+
type: object
|
|
338
|
+
additionalProperties: false
|
|
339
|
+
required: [host, owner, receipt]
|
|
340
|
+
properties:
|
|
341
|
+
host: {type: string, minLength: 1}
|
|
342
|
+
owner: {type: string, minLength: 1}
|
|
343
|
+
receipt: {type: string, minLength: 1}
|
|
344
|
+
tls:
|
|
345
|
+
description: Ownership and receipt for TLS issuance and persistent certificate custody.
|
|
346
|
+
type: object
|
|
347
|
+
additionalProperties: false
|
|
348
|
+
required: [owner, receipt]
|
|
349
|
+
properties:
|
|
350
|
+
owner: {type: string, minLength: 1}
|
|
351
|
+
receipt: {type: string, minLength: 1}
|
|
352
|
+
release:
|
|
353
|
+
description: Immutable image inventory, active and previous release pointers, and health assertions.
|
|
354
|
+
type: object
|
|
355
|
+
additionalProperties: false
|
|
356
|
+
required: [imagesLock, pointer, previous, healthAssertions]
|
|
357
|
+
properties:
|
|
358
|
+
imagesLock: {type: string, minLength: 1}
|
|
359
|
+
pointer: {type: string, minLength: 1}
|
|
360
|
+
previous: {type: string, minLength: 1}
|
|
361
|
+
healthAssertions:
|
|
362
|
+
type: array
|
|
363
|
+
minItems: 1
|
|
364
|
+
items: {type: string, minLength: 1}
|
|
365
|
+
backup:
|
|
366
|
+
description: Backup ownership and restore evidence for each stateful component.
|
|
367
|
+
type: array
|
|
368
|
+
items:
|
|
369
|
+
type: object
|
|
370
|
+
additionalProperties: false
|
|
371
|
+
required: [component, target, retention, owner, restoreProof]
|
|
372
|
+
properties:
|
|
373
|
+
component: {type: string, minLength: 1}
|
|
374
|
+
target: {type: string, minLength: 1}
|
|
375
|
+
retention: {type: string, minLength: 1}
|
|
376
|
+
owner: {type: string, minLength: 1}
|
|
377
|
+
restoreProof: {type: string, minLength: 1}
|
|
378
|
+
deploy:
|
|
379
|
+
description: >-
|
|
380
|
+
The Swarm deploy configuration `starci app stack` verbs read (optional; rule R294 judges it). It holds names, paths and shapes
|
|
381
|
+
only, never a value: sealed members and keys are references into .starcistacks/<environment>/secrets. The authority is
|
|
382
|
+
scripts/hfs/stack-deploy-config.mjs, which normalises exactly this shape (service, volume and member names, paths
|
|
383
|
+
inside the environment directory and the existence of the files they name are checked there, not here).
|
|
384
|
+
type: object
|
|
385
|
+
additionalProperties: false
|
|
386
|
+
properties:
|
|
387
|
+
stack: {$ref: '#/$defs/deployName'}
|
|
388
|
+
remote: {$ref: '#/$defs/deployRemote'}
|
|
389
|
+
images:
|
|
390
|
+
description: Service -> the image the deploy injects; the managed workflow builds one per entry.
|
|
391
|
+
type: object
|
|
392
|
+
propertyNames: {$ref: '#/$defs/deployName'}
|
|
393
|
+
additionalProperties: {$ref: '#/$defs/deployImage'}
|
|
394
|
+
volumes:
|
|
395
|
+
description: External volumes prepare creates and doctor checks.
|
|
396
|
+
type: array
|
|
397
|
+
items: {$ref: '#/$defs/deployVolumeName'}
|
|
398
|
+
secrets: {$ref: '#/$defs/deploySecrets'}
|
|
399
|
+
environment:
|
|
400
|
+
description: Service -> plain environment merged into the generated override.
|
|
401
|
+
type: object
|
|
402
|
+
additionalProperties: {$ref: '#/$defs/deployServiceEnvironment'}
|
|
403
|
+
configs:
|
|
404
|
+
description: Non-secret files mounted into services, versioned by content digest; config names are unique (checked by the normaliser).
|
|
405
|
+
type: array
|
|
406
|
+
items: {$ref: '#/$defs/deployConfig'}
|
|
407
|
+
passEnv:
|
|
408
|
+
description: Host variable names interpolated into the rendered stack (names only).
|
|
409
|
+
type: array
|
|
410
|
+
items: {$ref: '#/$defs/deployKey'}
|
|
411
|
+
verify: {$ref: '#/$defs/deployVerify'}
|
|
412
|
+
jobs: {$ref: '#/$defs/deployJobs'}
|
|
413
|
+
tasks: {$ref: '#/$defs/deployTasks'}
|
|
414
|
+
backup: {$ref: '#/$defs/deployBackup'}
|
|
415
|
+
registry: {$ref: '#/$defs/deployRegistry'}
|
|
416
|
+
ingress:
|
|
417
|
+
description: The shared host ingress (stack-ingress-config.mjs is the authority for the fields; starci app check R294 judges them).
|
|
418
|
+
type: object
|
|
419
|
+
deployName:
|
|
420
|
+
type: string
|
|
421
|
+
pattern: '^[a-z][a-z0-9-]*$'
|
|
422
|
+
deployKey:
|
|
423
|
+
type: string
|
|
424
|
+
pattern: '^[A-Z][A-Z0-9_]*$'
|
|
425
|
+
deployVolumeName:
|
|
426
|
+
type: string
|
|
427
|
+
pattern: '^[A-Za-z0-9][A-Za-z0-9_.-]*$'
|
|
428
|
+
deployTreePath:
|
|
429
|
+
description: A relative path inside .starcistacks/<environment>/ (forward slashes, no .. segment).
|
|
430
|
+
type: string
|
|
431
|
+
pattern: '^(?!/)(?!.*\\)(?!(?:.*/)?\.\.(?:/|$)).+$'
|
|
432
|
+
deployAbsolutePath:
|
|
433
|
+
description: An absolute path on the host without .. segments.
|
|
434
|
+
type: string
|
|
435
|
+
pattern: '^/(?!.*\.\.)[A-Za-z0-9._/-]+$'
|
|
436
|
+
deployKeyList:
|
|
437
|
+
type: array
|
|
438
|
+
minItems: 1
|
|
439
|
+
items: {$ref: '#/$defs/deployKey'}
|
|
440
|
+
deployMemberKeys:
|
|
441
|
+
description: A sealed member and the keys taken from it.
|
|
442
|
+
type: object
|
|
443
|
+
additionalProperties: false
|
|
444
|
+
required: [member, keys]
|
|
445
|
+
properties:
|
|
446
|
+
member: {$ref: '#/$defs/deployName'}
|
|
447
|
+
keys: {$ref: '#/$defs/deployKeyList'}
|
|
448
|
+
deployRemote:
|
|
449
|
+
type: object
|
|
450
|
+
additionalProperties: false
|
|
451
|
+
properties:
|
|
452
|
+
host:
|
|
453
|
+
description: ssh alias used for DOCKER_HOST=ssh://<host> and the release records (default vps).
|
|
454
|
+
type: string
|
|
455
|
+
pattern: '^[A-Za-z0-9][A-Za-z0-9._-]*$'
|
|
456
|
+
releasesBase: {$ref: '#/$defs/deployAbsolutePath'}
|
|
457
|
+
sealed:
|
|
458
|
+
description: 'Owner-machine session for prepare and doctor: members of .starcistacks/<environment>/secrets.'
|
|
459
|
+
type: object
|
|
460
|
+
additionalProperties: false
|
|
461
|
+
required: [ops, sshKey, knownHosts]
|
|
462
|
+
properties:
|
|
463
|
+
ops: {$ref: '#/$defs/deployName'}
|
|
464
|
+
sshKey: {$ref: '#/$defs/deployName'}
|
|
465
|
+
knownHosts: {$ref: '#/$defs/deployName'}
|
|
466
|
+
deployImage:
|
|
467
|
+
type: object
|
|
468
|
+
additionalProperties: false
|
|
469
|
+
required: [app]
|
|
470
|
+
properties:
|
|
471
|
+
app: {$ref: '#/$defs/deployName'}
|
|
472
|
+
buildArgs:
|
|
473
|
+
description: Public build values (they reach the browser by design), literals and the public keys of a sealed member.
|
|
474
|
+
type: object
|
|
475
|
+
additionalProperties: false
|
|
476
|
+
properties:
|
|
477
|
+
values:
|
|
478
|
+
type: object
|
|
479
|
+
propertyNames: {$ref: '#/$defs/deployKey'}
|
|
480
|
+
additionalProperties: {type: string}
|
|
481
|
+
sealed: {$ref: '#/$defs/deployMemberKeys'}
|
|
482
|
+
deploySecrets:
|
|
483
|
+
type: object
|
|
484
|
+
additionalProperties: false
|
|
485
|
+
properties:
|
|
486
|
+
grants:
|
|
487
|
+
description: Which sealed keys become which Swarm secrets, granted to which services.
|
|
488
|
+
type: array
|
|
489
|
+
items: {$ref: '#/$defs/deployGrant'}
|
|
490
|
+
settings: {$ref: '#/$defs/deployMemberKeys'}
|
|
491
|
+
deployGrant:
|
|
492
|
+
type: object
|
|
493
|
+
additionalProperties: false
|
|
494
|
+
required: [service, from]
|
|
495
|
+
properties:
|
|
496
|
+
service: {$ref: '#/$defs/deployName'}
|
|
497
|
+
filePointers:
|
|
498
|
+
description: Also set <KEY>_FILE=/run/secrets/<KEY> in the service environment.
|
|
499
|
+
type: boolean
|
|
500
|
+
from:
|
|
501
|
+
type: array
|
|
502
|
+
minItems: 1
|
|
503
|
+
items: {$ref: '#/$defs/deployGrantSource'}
|
|
504
|
+
deployGrantSource:
|
|
505
|
+
type: object
|
|
506
|
+
additionalProperties: false
|
|
507
|
+
required: [member]
|
|
508
|
+
properties:
|
|
509
|
+
member: {$ref: '#/$defs/deployName'}
|
|
510
|
+
keys: {$ref: '#/$defs/deployKeyList'}
|
|
511
|
+
required: {type: boolean}
|
|
512
|
+
fill:
|
|
513
|
+
description: Never override a key an earlier source of the same service gave.
|
|
514
|
+
type: boolean
|
|
515
|
+
if:
|
|
516
|
+
required: [required]
|
|
517
|
+
properties:
|
|
518
|
+
required: {const: true}
|
|
519
|
+
then:
|
|
520
|
+
required: [keys]
|
|
521
|
+
deployServiceEnvironment:
|
|
522
|
+
type: object
|
|
523
|
+
additionalProperties: false
|
|
524
|
+
properties:
|
|
525
|
+
files:
|
|
526
|
+
description: KEY=VALUE files, relative to .starcistacks/<environment>/.
|
|
527
|
+
type: array
|
|
528
|
+
items: {$ref: '#/$defs/deployTreePath'}
|
|
529
|
+
values:
|
|
530
|
+
type: object
|
|
531
|
+
propertyNames: {$ref: '#/$defs/deployKey'}
|
|
532
|
+
additionalProperties: {type: string}
|
|
533
|
+
settings:
|
|
534
|
+
type: object
|
|
535
|
+
propertyNames: {$ref: '#/$defs/deployKey'}
|
|
536
|
+
additionalProperties: {$ref: '#/$defs/deploySetting'}
|
|
537
|
+
deploySetting:
|
|
538
|
+
type: object
|
|
539
|
+
additionalProperties: false
|
|
540
|
+
required: [key]
|
|
541
|
+
properties:
|
|
542
|
+
key: {$ref: '#/$defs/deployKey'}
|
|
543
|
+
default: {description: 'A literal default: a string, number or boolean.'}
|
|
544
|
+
deployConfig:
|
|
545
|
+
type: object
|
|
546
|
+
additionalProperties: false
|
|
547
|
+
required: [name, file, env]
|
|
548
|
+
properties:
|
|
549
|
+
name: {$ref: '#/$defs/deployName'}
|
|
550
|
+
file: {$ref: '#/$defs/deployTreePath'}
|
|
551
|
+
env: {$ref: '#/$defs/deployKey'}
|
|
552
|
+
deployVerify:
|
|
553
|
+
type: object
|
|
554
|
+
additionalProperties: false
|
|
555
|
+
properties:
|
|
556
|
+
http:
|
|
557
|
+
type: array
|
|
558
|
+
items: {$ref: '#/$defs/deployHttpCheck'}
|
|
559
|
+
exec:
|
|
560
|
+
type: array
|
|
561
|
+
items: {$ref: '#/$defs/deployExecCheck'}
|
|
562
|
+
deployHttpCheck:
|
|
563
|
+
type: object
|
|
564
|
+
additionalProperties: false
|
|
565
|
+
required: [name, url]
|
|
566
|
+
properties:
|
|
567
|
+
name: {type: string, minLength: 1}
|
|
568
|
+
url: {type: string, pattern: '^https?://[^\s]+$'}
|
|
569
|
+
method: {enum: [GET, POST]}
|
|
570
|
+
body: {type: string}
|
|
571
|
+
status: {type: integer, minimum: 100, maximum: 599}
|
|
572
|
+
json:
|
|
573
|
+
description: Expected fields of the JSON response.
|
|
574
|
+
type: object
|
|
575
|
+
contains: {type: string}
|
|
576
|
+
retry: {type: boolean}
|
|
577
|
+
deployExecCheck:
|
|
578
|
+
type: object
|
|
579
|
+
additionalProperties: false
|
|
580
|
+
required: [name, service, command]
|
|
581
|
+
properties:
|
|
582
|
+
name: {type: string, minLength: 1}
|
|
583
|
+
service: {$ref: '#/$defs/deployName'}
|
|
584
|
+
command: {$ref: '#/$defs/deployCommand'}
|
|
585
|
+
stdout:
|
|
586
|
+
description: Regular expression the standard output must match.
|
|
587
|
+
type: string
|
|
588
|
+
deployCommand:
|
|
589
|
+
description: An argument vector run inside a task; every argument is a plain word (no shell syntax).
|
|
590
|
+
type: array
|
|
591
|
+
minItems: 1
|
|
592
|
+
items:
|
|
593
|
+
type: string
|
|
594
|
+
pattern: '^[A-Za-z0-9_@%+=:,./-]+$'
|
|
595
|
+
deployJobs:
|
|
596
|
+
type: object
|
|
597
|
+
additionalProperties: false
|
|
598
|
+
required: [service, command]
|
|
599
|
+
properties:
|
|
600
|
+
service: {$ref: '#/$defs/deployName'}
|
|
601
|
+
command: {$ref: '#/$defs/deployCommand'}
|
|
602
|
+
deployTasks:
|
|
603
|
+
description: One-off commands `starci app stack task <name>` runs inside a running task of the declared service.
|
|
604
|
+
type: object
|
|
605
|
+
propertyNames:
|
|
606
|
+
pattern: '^[a-z][a-z0-9-]{0,40}$'
|
|
607
|
+
additionalProperties:
|
|
608
|
+
type: object
|
|
609
|
+
additionalProperties: false
|
|
610
|
+
required: [service, command]
|
|
611
|
+
properties:
|
|
612
|
+
service: {$ref: '#/$defs/deployName'}
|
|
613
|
+
command: {$ref: '#/$defs/deployCommand'}
|
|
614
|
+
deployBackup:
|
|
615
|
+
type: object
|
|
616
|
+
additionalProperties: false
|
|
617
|
+
required: [image, volumes]
|
|
618
|
+
properties:
|
|
619
|
+
image:
|
|
620
|
+
description: The tar helper image, pinned by a non-placeholder digest.
|
|
621
|
+
type: string
|
|
622
|
+
pattern: '^[a-z0-9./_-]+(?::[A-Za-z0-9._-]+)?@sha256:(?!0{64}$)[0-9a-f]{64}$'
|
|
623
|
+
keepDays: {type: integer, minimum: 1, maximum: 3650}
|
|
624
|
+
dir: {$ref: '#/$defs/deployAbsolutePath'}
|
|
625
|
+
volumes:
|
|
626
|
+
type: array
|
|
627
|
+
minItems: 1
|
|
628
|
+
items: {$ref: '#/$defs/deployBackupVolume'}
|
|
629
|
+
deployRegistry:
|
|
630
|
+
description: >-
|
|
631
|
+
The image registry and the visibility the app's packages are meant to have. The canon scaffold writes `public`; the value then belongs to the app.
|
|
632
|
+
While the effective value is `public`, `stack build --push` scans every image for secret material before the push and checks the real
|
|
633
|
+
visibility afterwards. Omitted: ghcr.io and public.
|
|
634
|
+
type: object
|
|
635
|
+
additionalProperties: false
|
|
636
|
+
properties:
|
|
637
|
+
host: {type: string, pattern: '^[a-z0-9][a-z0-9.-]*(?::[0-9]{1,5})?$', default: ghcr.io}
|
|
638
|
+
visibility: {enum: [public, private], default: public}
|
|
639
|
+
deployBackupVolume:
|
|
640
|
+
type: object
|
|
641
|
+
additionalProperties: false
|
|
642
|
+
required: [name, volume]
|
|
643
|
+
properties:
|
|
644
|
+
name: {$ref: '#/$defs/deployName'}
|
|
645
|
+
volume: {$ref: '#/$defs/deployVolumeName'}
|
|
646
|
+
secret:
|
|
647
|
+
type: object
|
|
648
|
+
additionalProperties: false
|
|
649
|
+
required: [name, where, recipientPolicy, keyCustody]
|
|
650
|
+
properties:
|
|
651
|
+
name: {type: string, pattern: '^[a-z][a-z0-9.-]*$'}
|
|
652
|
+
runtimeName:
|
|
653
|
+
description: Immutable external Swarm secret name, ending in -v followed by its version.
|
|
654
|
+
type: string
|
|
655
|
+
pattern: '^[a-z][a-z0-9.-]*-v[1-9][0-9]*$'
|
|
656
|
+
version:
|
|
657
|
+
description: Positive version matching the immutable runtimeName suffix.
|
|
658
|
+
anyOf:
|
|
659
|
+
- {type: integer, minimum: 1}
|
|
660
|
+
- {type: string, pattern: '^[1-9][0-9]*$'}
|
|
661
|
+
where: {type: string, minLength: 1}
|
|
662
|
+
recipientPolicy: {type: string, minLength: 1, description: "Which age recipient the envelope is encrypted to: the one shared master recipient every project uses."}
|
|
663
|
+
keyCustody: {type: string, minLength: 1, description: "Where the shared decrypting identity is held; docs/host-secrets.md owns host custody and its execution prerequisites."}
|