@starci/hfs 4.4.0 → 4.5.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 +8 -0
- package/README.md +1 -1
- package/ci/cli.mjs +64 -0
- package/ci/github.mjs +41 -0
- package/ci/secret.mjs +28 -0
- package/ci/vars.mjs +33 -0
- package/ci/verify.mjs +36 -0
- package/db/backup-receipt.mjs +129 -0
- package/db/dump.mjs +66 -0
- package/db/migrate.mjs +8 -5
- package/db/post-cutover.mjs +4 -4
- package/db/reset.mjs +125 -0
- package/emit/contracts.mjs +2 -2
- package/emit/db-types.mjs +100 -7
- package/lint/run.mjs +30 -8
- package/package.json +2 -1
- package/release/ci-red.mjs +70 -0
- package/release/gate.mjs +53 -13
- package/release/index.mjs +8 -6
- package/release/push.mjs +1 -1
- package/report/sonar.mjs +1 -1
- package/runtime/config.example.yaml +7 -6
- package/runtime/engine/config.mjs +10 -18
- package/runtime/engine/removed-vocabulary.mjs +0 -2
- package/runtime/knowledge/hfs/canon-pins.yaml +4 -4
- package/runtime/knowledge/hfs/rules.yaml +505 -971
- package/runtime/knowledge/hfs/slots.yaml +13 -24
- package/runtime/modules/kernel/failure-codes.yaml +60 -22
- package/runtime/modules/kernel/removed-vocabulary.yaml +30 -0
- package/runtime/modules/models/runtimes.yaml +4 -6
- package/runtime/modules/schemas/application-stacks.schema.yaml +131 -1
- package/runtime/packages/cli/src/catalog.generated.mjs +286 -398
- package/runtime/scripts/api/git/lib.mjs +3 -3
- package/runtime/scripts/api/sops/lib.mjs +1 -1
- package/runtime/scripts/hfs/app-wiring.mjs +2 -2
- package/runtime/scripts/hfs/architecture/config.mjs +1 -1
- package/runtime/scripts/hfs/architecture/index.mjs +1 -1
- package/runtime/scripts/hfs/architecture/supabase.mjs +1 -1
- package/runtime/scripts/hfs/architecture/tiers.mjs +1 -1
- package/runtime/scripts/hfs/architecture.mjs +1 -1
- package/runtime/scripts/hfs/ci-declaration.mjs +102 -0
- package/runtime/scripts/hfs/coverage-from.mjs +1 -1
- package/runtime/scripts/hfs/coverage-scope.mjs +1 -1
- package/runtime/scripts/hfs/example-secrets.mjs +1 -1
- package/runtime/scripts/hfs/manifest-shape.mjs +3 -3
- package/runtime/scripts/hfs/param-names.mjs +1 -1
- package/runtime/scripts/hfs/rule-catalog.mjs +3 -1
- package/runtime/scripts/hfs/rules/a15-findings.mjs +10 -1
- package/runtime/scripts/hfs/rules/app-workflow-findings.mjs +10 -0
- package/runtime/scripts/hfs/rules/assets.mjs +1 -1
- package/runtime/scripts/hfs/rules/ci-custody.mjs +104 -0
- package/runtime/scripts/hfs/rules/cli.mjs +1 -1
- package/runtime/scripts/hfs/rules/contract-compat.mjs +1 -1
- package/runtime/scripts/hfs/rules/contract.mjs +1 -1
- package/runtime/scripts/hfs/rules/deploy-workflow.mjs +6 -19
- package/runtime/scripts/hfs/rules/fe-build-args.mjs +142 -0
- package/runtime/scripts/hfs/rules/frontend-tree.mjs +2 -2
- package/runtime/scripts/hfs/rules/supabase-secrets.mjs +1 -1
- package/runtime/scripts/hfs/rules/supply-chain.mjs +40 -3
- package/runtime/scripts/hfs/rules/workflow-contexts.mjs +103 -0
- package/runtime/scripts/hfs/runtime-rules/workflow-source.mjs +2 -2
- package/runtime/scripts/hfs/slots.mjs +2 -2
- package/runtime/scripts/hfs/typescript-programs.mjs +0 -8
- package/runtime/scripts/lib/env.mjs +2 -2
- package/runtime/scripts/lib/git.mjs +1 -1
- package/runtime/scripts/lib/i18n.mjs +0 -2
- package/runtime/scripts/lib/language.mjs +1 -1
- package/runtime/scripts/lib/roots.mjs +2 -4
- package/runtime/scripts/lib/secret-patterns.mjs +2 -2
- package/scaffold/add-fe-overlay.mjs +0 -121
- package/scaffold/add-fe-page.mjs +0 -268
- package/scaffold/supabase-ports.mjs +1 -1
- package/src/main.mjs +17 -6
- package/stack/age-install.mjs +1 -1
- package/stack/cli.mjs +2 -2
- package/stack/context.mjs +14 -2
- package/stack/digest.mjs +1 -1
- package/stack/docker-transport.mjs +93 -15
- package/stack/edge-alias.mjs +1 -1
- package/stack/image-scan.mjs +1 -1
- package/stack/ingress-create.mjs +2 -2
- package/stack/ingress.mjs +3 -3
- package/stack/release-store.mjs +12 -7
- package/stack/remote.mjs +16 -8
- package/stack/sealed.mjs +5 -5
- package/stack/ssh-session.mjs +178 -0
- package/sync/ci-commands.mjs +103 -1
- package/sync/format.mjs +1 -1
- package/sync/hygiene.mjs +1 -1
- package/sync/index.mjs +43 -18
- package/sync/quality-services.mjs +61 -0
- package/sync/readme-badges.mjs +44 -0
- package/sync/stack-images.mjs +31 -5
- package/templates/app/ci-workflows/github/workflows/ci.yml +26 -24
- package/templates/app/ci-workflows/github/workflows/images.yml +24 -2
- package/templates/app/ci-workflows/github/workflows/stack-deploy.yml +8 -2
- package/templates/app/ci-workflows/install-steps.yml +21 -0
- package/templates/app/ci-workflows/sonar-steps.yml +3 -9
- package/templates/app/ci-workflows-lite/github/workflows/ci.yml +28 -35
- package/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml +2 -1
- package/templates/app/ci-workflows-lite/github/workflows/images.yml +24 -2
- package/templates/app/ci-workflows-lite/github/workflows/stack-deploy.yml +8 -2
- package/templates/app/quality-config/codecov.yml +6 -6
- package/templates/app/quality-config/sonar-project.properties +1 -0
- package/templates/app/readme-badges/README.md +1 -0
- package/templates/app/skeleton/.github/dependabot.yml +1 -14
- package/templates/app/skeleton/.starcistacks/application-stacks.yaml +61 -3
- package/templates/app/skeleton/README.md +6 -0
- package/templates/app/skeleton-lite/.github/dependabot.yml +1 -14
- package/templates/app/skeleton-lite/.starcistacks/application-stacks.yaml +57 -3
- package/templates/app/skeleton-lite/README.md +6 -0
- package/templates/app/upgrade-full/.starcistacks/application-stacks.yaml +52 -1
- package/upgrade/index.mjs +1 -1
|
@@ -535,7 +535,6 @@ slots:
|
|
|
535
535
|
profiles: [app]
|
|
536
536
|
exemplifiedBy:
|
|
537
537
|
- packages/hfs/templates/app/ci-workflows-lite/github/workflows/db-deploy.yml
|
|
538
|
-
- {path: tests/fixtures/hfs-callback-full/.github/workflows/db-deploy.yml, edition: full}
|
|
539
538
|
editionWhy: "ruling:R212/case-2 (with the Work boundary amended by ruling:R212/case-4): lite manages its Supabase database deploy workflow; full owns an optional provider-specific workflow."
|
|
540
539
|
# The database deploy workflow: workflow_dispatch only (like app.ci-e2e); starci app sync renders it under the managed ci group.
|
|
541
540
|
path: ".github/workflows/db-deploy.yml"
|
|
@@ -546,6 +545,7 @@ slots:
|
|
|
546
545
|
liteManagedBy: ci-workflows-lite
|
|
547
546
|
rules: [HFS_MANAGED_FILE_DRIFT]
|
|
548
547
|
since: 2.1.0
|
|
548
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
549
549
|
- id: app.ci-stack-deploy
|
|
550
550
|
since: 3.3.0
|
|
551
551
|
profiles: [app]
|
|
@@ -657,8 +657,6 @@ slots:
|
|
|
657
657
|
- id: app.scripts.delivery
|
|
658
658
|
since: 3.1.0
|
|
659
659
|
profiles: [app]
|
|
660
|
-
exemplifiedBy:
|
|
661
|
-
- {path: tests/fixtures/hfs-delivery-lite/scripts/build-frontend.mjs, edition: lite}
|
|
662
660
|
editionWhy: "Lite splits product delivery tooling from managed codegen; full owns the same files through app.scripts (ruling:R212/case-2 (with the Work boundary amended by ruling:R212/case-4))."
|
|
663
661
|
editions: [lite]
|
|
664
662
|
# Product-owned environment, secret and build tooling, kept apart from lite's managed codegen script.
|
|
@@ -669,6 +667,7 @@ slots:
|
|
|
669
667
|
tier: none
|
|
670
668
|
tests: none
|
|
671
669
|
rules: [HFS_PLAINTEXT_SECRET, HFS_SCRIPT_ONE_OFF, BE_SPEC_PLACEMENT, HFS_REPO_LOCAL_CHECK]
|
|
670
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
672
671
|
- id: app.sides
|
|
673
672
|
since: 3.1.0
|
|
674
673
|
profiles: [app]
|
|
@@ -791,7 +790,6 @@ slots:
|
|
|
791
790
|
profiles: [app]
|
|
792
791
|
exemplifiedBy:
|
|
793
792
|
- packages/hfs/templates/app/skeleton-lite/supabase/
|
|
794
|
-
- {path: tests/fixtures/hfs-callback-full/supabase/, edition: full}
|
|
795
793
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): Supabase is required in lite; full enables it only through a declared connection."
|
|
796
794
|
# The one Supabase project directory, at the app root beside be/, fe/ and .starcistacks (never under a side).
|
|
797
795
|
path: "supabase/"
|
|
@@ -802,11 +800,11 @@ slots:
|
|
|
802
800
|
tier: none
|
|
803
801
|
tests: none
|
|
804
802
|
since: 2.1.0
|
|
803
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
805
804
|
- id: app.supabase.config
|
|
806
805
|
profiles: [app]
|
|
807
806
|
exemplifiedBy:
|
|
808
807
|
- packages/hfs/templates/app/skeleton-lite/supabase/config.toml
|
|
809
|
-
- {path: tests/fixtures/hfs-callback-full/supabase/config.toml, edition: full}
|
|
810
808
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite requires Supabase configuration; full requires it only when Supabase is declared."
|
|
811
809
|
# The project configuration: auth keys are env(NAME) references, never literals (L08 judges its policy keys).
|
|
812
810
|
path: "supabase/config.toml"
|
|
@@ -817,11 +815,11 @@ slots:
|
|
|
817
815
|
tier: none
|
|
818
816
|
tests: none
|
|
819
817
|
since: 2.1.0
|
|
818
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
820
819
|
- id: app.supabase.migrations
|
|
821
820
|
profiles: [app]
|
|
822
821
|
exemplifiedBy:
|
|
823
822
|
- packages/hfs/templates/app/skeleton-lite/supabase/migrations/__timestamp___baseline.sql
|
|
824
|
-
- {path: tests/fixtures/hfs-callback-full/supabase/migrations/20261014100000_baseline.sql, edition: full}
|
|
825
823
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite uses Supabase schema authority and requires a migration; full opts into that provider."
|
|
826
824
|
# The schema authority of an app on Supabase: forward-only SQL migrations named <timestamp14>_<kebab-name>.sql,
|
|
827
825
|
# one file per change, immutable once on origin/main (L02-L08 judge them).
|
|
@@ -834,6 +832,7 @@ slots:
|
|
|
834
832
|
tier: none
|
|
835
833
|
tests: none
|
|
836
834
|
since: 2.1.0
|
|
835
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
837
836
|
- id: app.supabase.migrations.archive
|
|
838
837
|
profiles: [app]
|
|
839
838
|
# The migrations an existing app retired at its cutover (owner ruling 2026-10-13, migration baseline policy): the live schema is
|
|
@@ -858,8 +857,6 @@ slots:
|
|
|
858
857
|
- id: app.supabase.types
|
|
859
858
|
profiles: [app]
|
|
860
859
|
templateNa: "Database row types are generated from the app's Supabase schema by contract:emit; a hand-authored scaffold template would invent the schema contract."
|
|
861
|
-
exemplifiedBy:
|
|
862
|
-
- {path: tests/fixtures/hfs-callback-full/supabase/types/database.types.ts, edition: full}
|
|
863
860
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite requires generated Supabase row types; full enables them with the provider."
|
|
864
861
|
# The generated Database types (database.types.ts) contract:emit writes from the migrations; both sides read it
|
|
865
862
|
# (sides.<side>.reads supabase/types/); drift against regeneration is L09.
|
|
@@ -871,6 +868,7 @@ slots:
|
|
|
871
868
|
tier: none
|
|
872
869
|
tests: none
|
|
873
870
|
since: 2.1.0
|
|
871
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
874
872
|
- id: app.supabase.templates
|
|
875
873
|
profiles: [app]
|
|
876
874
|
path: "supabase/templates/*.html"
|
|
@@ -1006,10 +1004,8 @@ slots:
|
|
|
1006
1004
|
tier: none
|
|
1007
1005
|
tests: none
|
|
1008
1006
|
coverage: none
|
|
1009
|
-
exemplifiedBy:
|
|
1010
|
-
- {path: tests/fixtures/hfs-i18n-ledger/fe/i18n-dynamic-keys.yaml, editions: [lite, full]}
|
|
1011
|
-
- {path: tests/fixtures/hfs-i18n-ledger/be/i18n-dynamic-keys.yaml, editions: [lite, full]}
|
|
1012
1007
|
rules: [HFS_UNUSED_SYMBOL]
|
|
1008
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1013
1009
|
- id: repo.packages
|
|
1014
1010
|
since: 3.1.0
|
|
1015
1011
|
profiles: [be, fe]
|
|
@@ -1401,8 +1397,6 @@ slots:
|
|
|
1401
1397
|
since: 1.0.0
|
|
1402
1398
|
- id: be.feature.realtime
|
|
1403
1399
|
profiles: [be]
|
|
1404
|
-
exemplifiedBy:
|
|
1405
|
-
- {path: tests/fixtures/hfs-lite-slots/be/src/features/realtime/order-status/, edition: lite}
|
|
1406
1400
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite runs socket.io in the api process, one instance without Redis; full may scale its gateway."
|
|
1407
1401
|
path: "src/features/realtime/<channel>/"
|
|
1408
1402
|
presence: opt-in # a push channel: reads and pushes only (a socket gateway or a GraphQL subscription), no domain write
|
|
@@ -1422,6 +1416,7 @@ slots:
|
|
|
1422
1416
|
coverage: none
|
|
1423
1417
|
rules: [BE_KIND_ISOLATION, BE_FEATURE_IMPORTS_FEATURE, BE_FEATURE_NOT_COMPOSED]
|
|
1424
1418
|
since: 1.0.0
|
|
1419
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1425
1420
|
- id: be.feature.realtime.graphql
|
|
1426
1421
|
profiles: [be]
|
|
1427
1422
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite uses only the in-process socket.io gateway; the GraphQL subscription door remains full-only."
|
|
@@ -1607,8 +1602,6 @@ slots:
|
|
|
1607
1602
|
- id: be.platform.event-bus
|
|
1608
1603
|
since: 3.1.0
|
|
1609
1604
|
profiles: [be]
|
|
1610
|
-
exemplifiedBy:
|
|
1611
|
-
- {path: tests/fixtures/hfs-lite-slots/be/src/modules/platform/event-bus/, edition: lite}
|
|
1612
1605
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite implements the event ports with outbox and pgmq; full uses its Kafka adapter."
|
|
1613
1606
|
path: "src/modules/platform/event-bus/"
|
|
1614
1607
|
presence: opt-in
|
|
@@ -1627,6 +1620,7 @@ slots:
|
|
|
1627
1620
|
coverage: required
|
|
1628
1621
|
budget: {indexExports: 60}
|
|
1629
1622
|
rules: [BE_TIER_DIRECTION, ARCH_OWNER_CYCLE, BE_MODULE_SHAPE, BE_INFRA_OWNER]
|
|
1623
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1630
1624
|
- id: be.platform.queue
|
|
1631
1625
|
since: 3.1.0
|
|
1632
1626
|
profiles: [be]
|
|
@@ -1750,8 +1744,6 @@ slots:
|
|
|
1750
1744
|
- id: be.projections
|
|
1751
1745
|
since: 3.1.0
|
|
1752
1746
|
profiles: [be]
|
|
1753
|
-
exemplifiedBy:
|
|
1754
|
-
- {path: tests/fixtures/hfs-lite-slots/be/src/modules/projections/order-summary/, edition: lite}
|
|
1755
1747
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite projection tables live in Supabase migrations; full keeps the TypeORM projection entity beside its projection."
|
|
1756
1748
|
path: "src/modules/projections/<name>/"
|
|
1757
1749
|
presence: opt-in
|
|
@@ -1767,6 +1759,7 @@ slots:
|
|
|
1767
1759
|
tests: unit-beside # a measured slot: <name>.projection.spec.ts beside its projection is legal (the file owes 100 per file; a spec of its own is optional)
|
|
1768
1760
|
coverage: required
|
|
1769
1761
|
rules: [BE_PROJECTION_WRITE_OWNER, BE_PROJECTION_SHAPE, BE_TIER_DIRECTION, BE_CONTEXT_COUPLING]
|
|
1762
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1770
1763
|
- id: be.integrations
|
|
1771
1764
|
since: 3.1.0
|
|
1772
1765
|
profiles: [be]
|
|
@@ -1796,7 +1789,6 @@ slots:
|
|
|
1796
1789
|
profiles: [be]
|
|
1797
1790
|
exemplifiedBy:
|
|
1798
1791
|
- packages/hfs/templates/be/skeleton-lite/src/modules/integrations/supabase/
|
|
1799
|
-
- {path: tests/fixtures/hfs-callback-full/be/src/modules/integrations/supabase/, edition: full}
|
|
1800
1792
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite requires the Supabase Auth and Storage integration; full opts in through a connection."
|
|
1801
1793
|
# The only be import of @supabase/* (L10): the Auth admin and Storage admin client, plus the JWKS-based verification of
|
|
1802
1794
|
# the Supabase access token the guard chain reads (L16). The connection itself is ordinary Postgres (the shared
|
|
@@ -1814,6 +1806,7 @@ slots:
|
|
|
1814
1806
|
rules: [BE_TIER_DIRECTION, BE_ERROR_HOME, BE_SECRET_DEFAULT]
|
|
1815
1807
|
coverage: required
|
|
1816
1808
|
since: 2.1.0
|
|
1809
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1817
1810
|
|
|
1818
1811
|
# ----- BE: tests (owner test layout 2026-09-30). Unit specs are <name>.service.spec.ts beside their service and nothing else; everything else
|
|
1819
1812
|
# lives under src/tests/, one folder per kind, and the folder and the file suffix always agree (a file whose suffix does
|
|
@@ -1821,8 +1814,6 @@ slots:
|
|
|
1821
1814
|
- id: be.tests.world
|
|
1822
1815
|
since: 3.1.0
|
|
1823
1816
|
profiles: [be]
|
|
1824
|
-
exemplifiedBy:
|
|
1825
|
-
- {path: tests/fixtures/hfs-lite-slots/be/src/tests/world/, edition: lite}
|
|
1826
1817
|
editionWhy: "ruling:R212/case-2 (owner:lite-production-swarm) (with the Work boundary amended by ruling:R212/case-4): lite integration proofs use the local Supabase stack and network fakes; full also boots apps and self-hosted services."
|
|
1827
1818
|
path: "src/tests/world/"
|
|
1828
1819
|
presence: optional
|
|
@@ -1848,6 +1839,7 @@ slots:
|
|
|
1848
1839
|
overridden in the DI container. It is the only test location that may import typeorm's DataSource or testcontainers,
|
|
1849
1840
|
call migrate/runMigrations/synchronize, or write process.env.
|
|
1850
1841
|
rules: [BE_TEST_TOPOLOGY, BE_TEST_CONSTRAINTS_ON]
|
|
1842
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
1851
1843
|
|
|
1852
1844
|
- id: be.tests.world.kit
|
|
1853
1845
|
since: 3.1.0
|
|
@@ -2015,8 +2007,6 @@ slots:
|
|
|
2015
2007
|
rules: [FE_NEXT_CONVENTIONS]
|
|
2016
2008
|
- id: fe.route.callback
|
|
2017
2009
|
profiles: [fe]
|
|
2018
|
-
exemplifiedBy:
|
|
2019
|
-
- {path: tests/fixtures/hfs-callback-full/fe/apps/web/src/app/auth/callback/route.ts, edition: full}
|
|
2020
2010
|
# The auth callback of a Supabase session (the PKCE code exchange), kept only when the auth flow truly needs a server exchange
|
|
2021
2011
|
# (prefer the client-side PKCE exchange in fe.modules.auth): the one non-health route handler of an app with a Supabase
|
|
2022
2012
|
# connection; an app without one has no route handler in fe/ (L15).
|
|
@@ -2246,8 +2236,7 @@ slots:
|
|
|
2246
2236
|
tests: none
|
|
2247
2237
|
why: the canonical GraphQL client output of codegen is local and never committed; this specific slot overrides the tracked API parent
|
|
2248
2238
|
rules: [FE_WIRE_GENERATED]
|
|
2249
|
-
|
|
2250
|
-
- {path: tests/fixtures/hfs-generated-wire/fe/apps/web/src/modules/api/graphql/__generated__/graphql.ts, editions: [lite, full]}
|
|
2239
|
+
exampleNa: "owner:no-runtime-specs (2026-10-17): the only example of this slot in an edition was a deleted runtime fixture; the scaffold e2e exercises the scaffolded slot"
|
|
2251
2240
|
- id: fe.transport.client
|
|
2252
2241
|
since: 3.1.0
|
|
2253
2242
|
profiles: [fe]
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
APP_SECRET_IN_CI:
|
|
2
|
+
title: "App runtime secret appears in CI custody"
|
|
3
|
+
title_vi: "Bí mật ứng dụng xuất hiện trong CI"
|
|
4
|
+
meaning_vi: "Khóa cấp cho container ứng dụng cũng được khai báo hoặc tìm thấy trong kho CI."
|
|
5
|
+
causes_vi:
|
|
6
|
+
- "Khóa cấp cho container ứng dụng cũng được khai báo hoặc tìm thấy trong kho CI."
|
|
7
|
+
nextStep_vi: "Giữ khóa ứng dụng trong .enc và xóa khai báo hoặc bản sao CI sau khi kiểm tra nơi dùng."
|
|
8
|
+
owner: op-retry
|
|
9
|
+
kind: check-finding
|
|
10
|
+
|
|
1
11
|
ARCH_COMPILER_FAILURE:
|
|
2
12
|
title: "Compiler failed during architecture check"
|
|
3
13
|
title_vi: "Trình biên dịch lỗi khi kiểm kiến trúc"
|
|
@@ -1671,6 +1681,26 @@ BE_WEBHOOK_UNVERIFIED:
|
|
|
1671
1681
|
owner: op-retry
|
|
1672
1682
|
kind: check-finding
|
|
1673
1683
|
|
|
1684
|
+
CI_DECLARATION_DRIFT:
|
|
1685
|
+
title: "Workflow references drift from CI declarations"
|
|
1686
|
+
title_vi: "Workflow lệch khai báo CI"
|
|
1687
|
+
meaning_vi: "Workflow hoặc liên kết dịch vụ thiếu khai báo đúng lớp, hoặc khai báo bắt buộc không được dùng."
|
|
1688
|
+
causes_vi:
|
|
1689
|
+
- "Workflow hoặc liên kết dịch vụ thiếu khai báo đúng lớp, hoặc khai báo bắt buộc không được dùng."
|
|
1690
|
+
nextStep_vi: "Đối chiếu secrets và vars trong workflow với ci và liên kết dịch vụ; chỉ đánh dấu optional khi phù hợp."
|
|
1691
|
+
owner: op-retry
|
|
1692
|
+
kind: check-finding
|
|
1693
|
+
|
|
1694
|
+
CI_SECRET_SEALED:
|
|
1695
|
+
title: "CI name overlaps sealed app custody"
|
|
1696
|
+
title_vi: "Tên CI trùng khóa bí mật đã niêm phong"
|
|
1697
|
+
meaning_vi: "Tên CI hoặc Dependabot cũng là khóa trong thành viên .enc của ứng dụng."
|
|
1698
|
+
causes_vi:
|
|
1699
|
+
- "Tên CI hoặc Dependabot cũng là khóa trong thành viên .enc của ứng dụng."
|
|
1700
|
+
nextStep_vi: "Bỏ khóa ứng dụng khỏi khai báo CI; đưa bí mật CI vào kho GitHub tương ứng."
|
|
1701
|
+
owner: op-retry
|
|
1702
|
+
kind: check-finding
|
|
1703
|
+
|
|
1674
1704
|
CI_TRIGGERS_RELEASE_ONLY:
|
|
1675
1705
|
title: "Workflow trigger other than a release tag, a person or the runtime's main"
|
|
1676
1706
|
title_vi: "Workflow có trigger không phải tag phát hành, người chạy tay hay main của runtime"
|
|
@@ -2470,6 +2500,16 @@ FE_PROPS_MUTABLE:
|
|
|
2470
2500
|
owner: op-retry
|
|
2471
2501
|
kind: check-finding
|
|
2472
2502
|
|
|
2503
|
+
FE_PUBLIC_BUILD_ARG_MISSING:
|
|
2504
|
+
title: "Required public front-end build arguments are missing"
|
|
2505
|
+
title_vi: "Thiếu tham số build công khai bắt buộc của front end"
|
|
2506
|
+
meaning_vi: "Dockerfile thiếu giá trị mặc định ARG và ảnh triển khai thiếu tên NEXT_PUBLIC bắt buộc trong môi trường được báo."
|
|
2507
|
+
causes_vi:
|
|
2508
|
+
- "Vi phạm R300: mã nguồn, cấu hình hoặc schema yêu cầu giá trị công khai nhưng ảnh triển khai không cung cấp tên đó."
|
|
2509
|
+
nextStep_vi: "Thêm giá trị mặc định ARG trong Dockerfile hoặc buildArgs.values hay buildArgs.sealed.keys cho ảnh trong mọi môi trường triển khai; chỉ kiểm tra tên, không mở giá trị mã hóa."
|
|
2510
|
+
owner: op-retry
|
|
2511
|
+
kind: check-finding
|
|
2512
|
+
|
|
2473
2513
|
FE_PURE_REACHES_DATA:
|
|
2474
2514
|
title: "Pure component reaches hooks or API"
|
|
2475
2515
|
title_vi: "Thành phần thuần chạm tới hook hoặc API"
|
|
@@ -3308,6 +3348,16 @@ HFS_EDITION_INVALID:
|
|
|
3308
3348
|
owner: op-retry
|
|
3309
3349
|
kind: check-finding
|
|
3310
3350
|
|
|
3351
|
+
HFS_EMIT_DB_TYPES_STALE:
|
|
3352
|
+
title: "Database types require current migration history"
|
|
3353
|
+
title_vi: "Lịch sử migration chưa khớp để sinh kiểu"
|
|
3354
|
+
meaning_vi: "Tập phiên bản đã áp dụng trong DB cục bộ khác dấu thời gian tệp supabase/migrations."
|
|
3355
|
+
causes_vi:
|
|
3356
|
+
- "Tập phiên bản đã áp dụng trong DB cục bộ khác dấu thời gian tệp supabase/migrations."
|
|
3357
|
+
nextStep_vi: "Chạy npm run db:reset rồi starci app emit; kiểm tra cả phiên bản thiếu và phiên bản thừa."
|
|
3358
|
+
owner: op-retry
|
|
3359
|
+
kind: verb-refusal
|
|
3360
|
+
|
|
3311
3361
|
HFS_EMPTY_DIR:
|
|
3312
3362
|
title: "No empty directory outside an `ignored` slot"
|
|
3313
3363
|
title_vi: "Thư mục rỗng còn sót lại"
|
|
@@ -4109,6 +4159,16 @@ HFS_UNUSED_SYMBOL:
|
|
|
4109
4159
|
owner: op-retry
|
|
4110
4160
|
kind: check-finding
|
|
4111
4161
|
|
|
4162
|
+
HFS_WORKFLOW_CONTEXT:
|
|
4163
|
+
title: "Workflow expressions use contexts available at their key"
|
|
4164
|
+
title_vi: "Biểu thức workflow dùng ngữ cảnh không được phép"
|
|
4165
|
+
meaning_vi: "Biểu thức tại file:line và đường dẫn khóa dùng ngữ cảnh chưa có tại khóa đó."
|
|
4166
|
+
causes_vi:
|
|
4167
|
+
- "Vi phạm R299: env cấp job đọc runner, job, steps hoặc env trước khi ngữ cảnh sẵn sàng."
|
|
4168
|
+
nextStep_vi: "Chuyển env phụ thuộc runner vào env của bước sử dụng, hoặc dùng RUNNER_TEMP trong shell; kiểm tra file:line và đường dẫn khóa được báo."
|
|
4169
|
+
owner: op-retry
|
|
4170
|
+
kind: check-finding
|
|
4171
|
+
|
|
4112
4172
|
HFS_WORKFLOW_PIN:
|
|
4113
4173
|
title: "Remote workflow actions use immutable commit SHAs"
|
|
4114
4174
|
title_vi: "Action của workflow chưa được ghim SHA"
|
|
@@ -4886,28 +4946,6 @@ RT_SOURCE_NAME:
|
|
|
4886
4946
|
owner: supervisor
|
|
4887
4947
|
kind: check-finding
|
|
4888
4948
|
|
|
4889
|
-
RT_SPEC_BUDGET_STALE:
|
|
4890
|
-
title: "A recorded spec duration names a missing file"
|
|
4891
|
-
title_vi: "Một thời lượng spec đã ghi trỏ tới tệp không còn tồn tại"
|
|
4892
|
-
meaning_vi: "Một hàng trong modules/kernel/spec-durations.yaml đặt tên tệp spec không còn tồn tại, nên bản ghi thời lượng của lần land đã cũ và không thể dùng làm ngân sách hiện hành."
|
|
4893
|
-
causes_vi:
|
|
4894
|
-
- "Tệp spec được đổi tên hoặc xóa sau lần làm mới bản ghi gần nhất"
|
|
4895
|
-
- "Bản ghi thời lượng được chép từ một revision khác"
|
|
4896
|
-
nextStep_vi: "Người giám sát làm mới bản ghi từ kết quả land của revision hiện tại để mỗi hàng trỏ tới một tệp spec đang tồn tại."
|
|
4897
|
-
owner: supervisor
|
|
4898
|
-
kind: check-finding
|
|
4899
|
-
|
|
4900
|
-
RT_SPEC_OVER_BUDGET:
|
|
4901
|
-
title: "A spec exceeds the land duration budget"
|
|
4902
|
-
title_vi: "Một tệp spec vượt quá ngân sách thời gian của lần land"
|
|
4903
|
-
meaning_vi: "Thời lượng đã ghi của một tệp spec còn tồn tại vượt quá giới hạn chung trong modules/kernel/spec-durations.yaml. Tệp chậm làm kéo dài lần land và phải giảm chi phí thiết lập mà vẫn giữ nguyên từng test, assertion và đường vào production."
|
|
4904
|
-
causes_vi:
|
|
4905
|
-
- "Mỗi test lặp lại việc cài đặt, khởi động tiến trình hoặc dựng fixture nặng"
|
|
4906
|
-
- "Test chờ đồng hồ thật thay vì dùng đồng hồ được tiêm vào"
|
|
4907
|
-
nextStep_vi: "Người giám sát làm theo speed.md: dùng fixture dùng chung trong một tiến trình spec, bỏ cài đặt hoặc khởi động theo từng test, tiêm đồng hồ và không tăng timeout; sau lần land cuối thì làm mới bản ghi thời lượng."
|
|
4908
|
-
owner: supervisor
|
|
4909
|
-
kind: check-finding
|
|
4910
|
-
|
|
4911
4949
|
RT_SPEC_PLACEMENT:
|
|
4912
4950
|
title: "Runtime spec out of place"
|
|
4913
4951
|
title_vi: "Spec của runtime đặt sai chỗ"
|
|
@@ -309,3 +309,33 @@ removed:
|
|
|
309
309
|
name: anonymousActions
|
|
310
310
|
use: 'the front end holds no Server Action (R243 FE_SERVER_ACTION_FORBIDDEN), so no slot lists anonymous ones'
|
|
311
311
|
since: 1.0.0-alpha.13
|
|
312
|
+
- id: verb-test-affected
|
|
313
|
+
kind: verb
|
|
314
|
+
name: starci test affected
|
|
315
|
+
use: 'the runtime has no specs of its own (owner ruling no-runtime-specs): `starci runtime verify` runs the check, `starci release clean-test --base <ref>` and `starci release scaffold-e2e`'
|
|
316
|
+
since: 1.0.0-alpha.19
|
|
317
|
+
match: '\bstarci test affected\b'
|
|
318
|
+
- id: verb-test-run
|
|
319
|
+
kind: verb
|
|
320
|
+
name: starci test run
|
|
321
|
+
use: 'the L1 to L4 spec ladder is gone with the runtime specs; `starci runtime verify` proves a change, `starci release cut` runs the release rows'
|
|
322
|
+
since: 1.0.0-alpha.19
|
|
323
|
+
match: '\bstarci test run\b'
|
|
324
|
+
- id: verb-gate-runtime-coverage
|
|
325
|
+
kind: verb
|
|
326
|
+
name: starci gate runtime-coverage
|
|
327
|
+
use: 'the runtime measures no coverage of its own; the example apps keep their Codecov flags'
|
|
328
|
+
since: 1.0.0-alpha.19
|
|
329
|
+
match: '\bgate runtime-coverage\b'
|
|
330
|
+
- id: verb-release-env-test
|
|
331
|
+
kind: verb
|
|
332
|
+
name: starci release env-test
|
|
333
|
+
use: 'the release rows are the package clean-test (`starci release clean-test`), the scaffold e2e (`starci release scaffold-e2e`) and the runtime check'
|
|
334
|
+
since: 1.0.0-alpha.19
|
|
335
|
+
match: '\brelease env-test\b'
|
|
336
|
+
- id: config-specs-harness
|
|
337
|
+
kind: config-key
|
|
338
|
+
name: specs.harness
|
|
339
|
+
use: 'the runtime has no specs of its own (owner ruling no-runtime-specs); specs.unit and specs.e2e switch the product workflow tests'
|
|
340
|
+
since: 1.0.0-alpha.19
|
|
341
|
+
match: '\bspecs\.harness\b'
|
|
@@ -199,9 +199,8 @@ allocation:
|
|
|
199
199
|
# revision still differs from the live one that long past minIntervalMs + checkMs + handoverMs is a drift row (scripts/reconciler/drift.mjs).
|
|
200
200
|
selfReload: {minIntervalMs: 300000, handoverMs: 30000, checkMs: 60000, driftGraceMs: 120000}
|
|
201
201
|
# deploy (scripts/reconciler/runtime-deploy.mjs): a deploy waits up to waitMs, polling every pollMs, for the settles, Critic runs and prepared
|
|
202
|
-
# decisions in flight to finish; after the engine restart it waits up to verifyMs for the new leader's fresh heartbeat on the new revision.
|
|
203
|
-
|
|
204
|
-
deploy: {waitMs: 1800000, pollMs: 5000, verifyMs: 120000, affectedMarginMs: 300000}
|
|
202
|
+
# decisions in flight to finish; after the engine restart it waits up to verifyMs for the new leader's fresh heartbeat on the new revision.
|
|
203
|
+
deploy: {waitMs: 1800000, pollMs: 5000, verifyMs: 120000}
|
|
205
204
|
# dispatchRefusal (scripts/kernel/dispatch-refusal-memo.mjs): a ready job whose dispatch is refused for the same cause is tried again after baseMs, then twice as long each time (the one retry budget), up to capMs; a change of
|
|
206
205
|
# the cause's fingerprint (runtime revision, a ruling, a resource the refusal names) tries it at once.
|
|
207
206
|
dispatchRefusal: {baseMs: 60000, capMs: 900000}
|
|
@@ -210,9 +209,8 @@ allocation:
|
|
|
210
209
|
footprint: {everyMs: 600000, lockStaleMs: 60000}
|
|
211
210
|
# jobGuard (scripts/guards/hook-install.mjs): a guard file older than ttlMs is pruned.
|
|
212
211
|
jobGuard: {ttlMs: 604800000}
|
|
213
|
-
# landGate (scripts/supervisor/land.mjs): a land waits waitMs for its turn at the gate
|
|
214
|
-
|
|
215
|
-
landGate: {waitMs: 1800000, specsBaseMs: 600000, perSpecMs: 60000, specConcurrency: 6, cliVerbs: 12}
|
|
212
|
+
# landGate (scripts/supervisor/land.mjs): a land waits waitMs for its turn at the gate.
|
|
213
|
+
landGate: {waitMs: 1800000}
|
|
216
214
|
# workerClose (scripts/machine/worker-close.mjs; owner rule: a finished worker is closed COMPLETELY): after worker-release and the terminal
|
|
217
215
|
# close the runtime waits verifyMs for every process of that terminal's shell tree to end (polled every pollMs); a survivor proven to belong
|
|
218
216
|
# to the tree is stopped and given stopVerifyMs to end before the finding is raised.
|
|
@@ -70,7 +70,7 @@ properties:
|
|
|
70
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
71
|
type: object
|
|
72
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.
|
|
73
|
+
description: 'Database cutover data (starci app db migrate and post-cutover); packages/hfs/db/migrate.mjs is the authority for the fields. reset: optional mapping with only backupMaxAgeHours (finite positive number; default 24 hours).'
|
|
74
74
|
type: object
|
|
75
75
|
jobs:
|
|
76
76
|
description: Application-owned schedules, bound to their back-end CLI commands.
|
|
@@ -104,6 +104,7 @@ properties:
|
|
|
104
104
|
properties:
|
|
105
105
|
status: {enum: [deferred, supported]}
|
|
106
106
|
reason: {type: string, minLength: 1}
|
|
107
|
+
ci: {$ref: '#/$defs/ciDeclaration'}
|
|
107
108
|
services:
|
|
108
109
|
description: >-
|
|
109
110
|
The delivery, quality and platform services this repository's code and CI use - NOT Compose
|
|
@@ -119,6 +120,9 @@ properties:
|
|
|
119
120
|
additionalProperties: false
|
|
120
121
|
properties:
|
|
121
122
|
sonar: {$ref: '#/$defs/service'}
|
|
123
|
+
codecov: {$ref: '#/$defs/service'}
|
|
124
|
+
dependabot: {$ref: '#/$defs/serviceOptionalCi'}
|
|
125
|
+
audit: {$ref: '#/$defs/serviceOptionalCi'}
|
|
122
126
|
container-registry: {$ref: '#/$defs/service'}
|
|
123
127
|
analytics: {$ref: '#/$defs/service'}
|
|
124
128
|
error-tracking: {$ref: '#/$defs/service'}
|
|
@@ -140,6 +144,31 @@ $defs:
|
|
|
140
144
|
local - a server a stack runs (stack and host.local required); hosted - a SaaS or remote
|
|
141
145
|
server (host.public required); disabled - not used (reason required, CI must not call it).
|
|
142
146
|
enum: [local, hosted, disabled]
|
|
147
|
+
organization: {type: string, minLength: 1}
|
|
148
|
+
flag: {type: string, minLength: 1}
|
|
149
|
+
target: {type: number, minimum: 0, maximum: 100}
|
|
150
|
+
components: {enum: [auto]}
|
|
151
|
+
required: {type: boolean}
|
|
152
|
+
ecosystems: {type: array, items: {enum: [npm, docker, github-actions]}}
|
|
153
|
+
schedule:
|
|
154
|
+
type: object
|
|
155
|
+
additionalProperties: false
|
|
156
|
+
required: [interval]
|
|
157
|
+
properties:
|
|
158
|
+
interval: {enum: [daily, weekly, monthly]}
|
|
159
|
+
day: {enum: [monday, tuesday, wednesday, thursday, friday, saturday, sunday]}
|
|
160
|
+
time: {type: string, pattern: '^(?:[01][0-9]|2[0-3]):[0-5][0-9]$'}
|
|
161
|
+
groups:
|
|
162
|
+
type: object
|
|
163
|
+
additionalProperties: false
|
|
164
|
+
properties:
|
|
165
|
+
minorPatch: {enum: [grouped]}
|
|
166
|
+
major: {enum: [per-package]}
|
|
167
|
+
ignore: {type: array, items: {type: string}}
|
|
168
|
+
security: {enum: [immediate]}
|
|
169
|
+
level: {enum: [low, moderate, high, critical]}
|
|
170
|
+
omitDev: {type: boolean}
|
|
171
|
+
in: {type: array, items: {enum: [release-gate, ci]}}
|
|
143
172
|
purpose: {type: string, minLength: 1}
|
|
144
173
|
reason: {type: string, minLength: 1}
|
|
145
174
|
qualityGate:
|
|
@@ -200,6 +229,104 @@ $defs:
|
|
|
200
229
|
properties:
|
|
201
230
|
needed: {type: string, minLength: 1}
|
|
202
231
|
reason: {type: string, minLength: 1}
|
|
232
|
+
serviceOptionalCi:
|
|
233
|
+
type: object
|
|
234
|
+
additionalProperties: false
|
|
235
|
+
required: [provider, mode, ownerAction]
|
|
236
|
+
properties:
|
|
237
|
+
provider: {$ref: '#/$defs/service/properties/provider'}
|
|
238
|
+
mode: {$ref: '#/$defs/service/properties/mode'}
|
|
239
|
+
organization: {$ref: '#/$defs/service/properties/organization'}
|
|
240
|
+
target: {$ref: '#/$defs/service/properties/target'}
|
|
241
|
+
components: {$ref: '#/$defs/service/properties/components'}
|
|
242
|
+
required: {$ref: '#/$defs/service/properties/required'}
|
|
243
|
+
ecosystems: {$ref: '#/$defs/service/properties/ecosystems'}
|
|
244
|
+
schedule: {$ref: '#/$defs/service/properties/schedule'}
|
|
245
|
+
groups: {$ref: '#/$defs/service/properties/groups'}
|
|
246
|
+
ignore: {$ref: '#/$defs/service/properties/ignore'}
|
|
247
|
+
security: {$ref: '#/$defs/service/properties/security'}
|
|
248
|
+
level: {$ref: '#/$defs/service/properties/level'}
|
|
249
|
+
omitDev: {$ref: '#/$defs/service/properties/omitDev'}
|
|
250
|
+
in: {$ref: '#/$defs/service/properties/in'}
|
|
251
|
+
purpose: {$ref: '#/$defs/service/properties/purpose'}
|
|
252
|
+
reason: {$ref: '#/$defs/service/properties/reason'}
|
|
253
|
+
qualityGate: {$ref: '#/$defs/service/properties/qualityGate'}
|
|
254
|
+
host: {$ref: '#/$defs/service/properties/host'}
|
|
255
|
+
stack: {$ref: '#/$defs/service/properties/stack'}
|
|
256
|
+
auth: {$ref: '#/$defs/service/properties/auth'}
|
|
257
|
+
projects: {$ref: '#/$defs/service/properties/projects'}
|
|
258
|
+
credentials: {$ref: '#/$defs/service/properties/credentials'}
|
|
259
|
+
runtimeSecrets: {$ref: '#/$defs/service/properties/runtimeSecrets'}
|
|
260
|
+
ci: {$ref: '#/$defs/service/properties/ci'}
|
|
261
|
+
ownerAction: {$ref: '#/$defs/service/properties/ownerAction'}
|
|
262
|
+
ciName: {type: string, pattern: '^[A-Z][A-Z0-9_]*$'}
|
|
263
|
+
ciDeclaration:
|
|
264
|
+
type: object
|
|
265
|
+
additionalProperties: false
|
|
266
|
+
properties:
|
|
267
|
+
github:
|
|
268
|
+
type: object
|
|
269
|
+
additionalProperties: false
|
|
270
|
+
required: [repository]
|
|
271
|
+
properties:
|
|
272
|
+
repository: {type: string, pattern: '^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$'}
|
|
273
|
+
defaultBranch: {type: string, minLength: 1, default: main}
|
|
274
|
+
workflow: {type: string, pattern: '^[A-Za-z0-9_.-]+\.ya?ml$', default: ci.yml}
|
|
275
|
+
secrets: {type: array, items: {$ref: '#/$defs/ciSecret'}}
|
|
276
|
+
vars: {type: array, items: {$ref: '#/$defs/ciVariable'}}
|
|
277
|
+
dependabot:
|
|
278
|
+
type: object
|
|
279
|
+
additionalProperties: false
|
|
280
|
+
properties:
|
|
281
|
+
secrets:
|
|
282
|
+
type: array
|
|
283
|
+
items:
|
|
284
|
+
type: object
|
|
285
|
+
additionalProperties: false
|
|
286
|
+
required: [name]
|
|
287
|
+
properties:
|
|
288
|
+
name: {$ref: '#/$defs/ciName'}
|
|
289
|
+
purpose: {type: string}
|
|
290
|
+
ciSecret:
|
|
291
|
+
anyOf:
|
|
292
|
+
- type: object
|
|
293
|
+
additionalProperties: false
|
|
294
|
+
required: [name, scope]
|
|
295
|
+
properties:
|
|
296
|
+
name: {$ref: '#/$defs/ciName'}
|
|
297
|
+
scope: {const: repository}
|
|
298
|
+
purpose: {type: string}
|
|
299
|
+
optional: {type: boolean}
|
|
300
|
+
- type: object
|
|
301
|
+
additionalProperties: false
|
|
302
|
+
required: [name, scope, environment]
|
|
303
|
+
properties:
|
|
304
|
+
name: {$ref: '#/$defs/ciName'}
|
|
305
|
+
scope: {const: environment}
|
|
306
|
+
environment: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
307
|
+
purpose: {type: string}
|
|
308
|
+
optional: {type: boolean}
|
|
309
|
+
ciVariable:
|
|
310
|
+
anyOf:
|
|
311
|
+
- type: object
|
|
312
|
+
additionalProperties: false
|
|
313
|
+
required: [name, scope, value]
|
|
314
|
+
properties:
|
|
315
|
+
name: {$ref: '#/$defs/ciName'}
|
|
316
|
+
scope: {const: repository}
|
|
317
|
+
value: {type: string}
|
|
318
|
+
purpose: {type: string}
|
|
319
|
+
optional: {type: boolean}
|
|
320
|
+
- type: object
|
|
321
|
+
additionalProperties: false
|
|
322
|
+
required: [name, scope, value, environment]
|
|
323
|
+
properties:
|
|
324
|
+
name: {$ref: '#/$defs/ciName'}
|
|
325
|
+
scope: {const: environment}
|
|
326
|
+
environment: {type: string, pattern: '^[a-z][a-z0-9-]*$'}
|
|
327
|
+
value: {type: string}
|
|
328
|
+
purpose: {type: string}
|
|
329
|
+
optional: {type: boolean}
|
|
203
330
|
serviceStack:
|
|
204
331
|
description: >-
|
|
205
332
|
Which stack defines a local service - either a project-owned .starcistacks stack
|
|
@@ -269,6 +396,9 @@ $defs:
|
|
|
269
396
|
additionalProperties: false
|
|
270
397
|
required: [wiring]
|
|
271
398
|
properties:
|
|
399
|
+
token: {$ref: '#/$defs/ciName'}
|
|
400
|
+
hostVar: {$ref: '#/$defs/ciName'}
|
|
401
|
+
organizationVar: {$ref: '#/$defs/ciName'}
|
|
272
402
|
wiring: {enum: [required, optional-follow-up, not-used]}
|
|
273
403
|
workflow: {type: string, minLength: 1}
|
|
274
404
|
permissions: {type: array, items: {type: string, minLength: 1}}
|