@zigrivers/scaffold 3.16.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/content/knowledge/backend/backend-fintech-broker-integration.md +244 -0
- package/content/knowledge/backend/backend-fintech-compliance.md +181 -0
- package/content/knowledge/backend/backend-fintech-data-modeling.md +210 -0
- package/content/knowledge/backend/backend-fintech-ledger.md +226 -0
- package/content/knowledge/backend/backend-fintech-observability.md +151 -0
- package/content/knowledge/backend/backend-fintech-order-lifecycle.md +213 -0
- package/content/knowledge/backend/backend-fintech-risk-management.md +150 -0
- package/content/knowledge/backend/backend-fintech-testing.md +197 -0
- package/content/knowledge/core/automated-review-tooling.md +10 -0
- package/content/knowledge/core/multi-service-api-contracts.md +634 -0
- package/content/knowledge/core/multi-service-architecture.md +492 -0
- package/content/knowledge/core/multi-service-auth.md +706 -0
- package/content/knowledge/core/multi-service-data-ownership.md +539 -0
- package/content/knowledge/core/multi-service-observability.md +545 -0
- package/content/knowledge/core/multi-service-resilience.md +710 -0
- package/content/knowledge/core/multi-service-task-decomposition.md +615 -0
- package/content/knowledge/core/multi-service-testing.md +728 -0
- package/content/methodology/backend-fintech.yml +46 -0
- package/content/methodology/custom-defaults.yml +6 -0
- package/content/methodology/deep.yml +6 -0
- package/content/methodology/multi-service-overlay.yml +103 -0
- package/content/methodology/mvp.yml +6 -0
- package/content/pipeline/architecture/service-ownership-map.md +83 -0
- package/content/pipeline/quality/cross-service-auth.md +96 -0
- package/content/pipeline/quality/cross-service-observability.md +104 -0
- package/content/pipeline/quality/integration-test-plan.md +106 -0
- package/content/pipeline/specification/inter-service-contracts.md +95 -0
- package/dist/cli/commands/adopt.cli-flags.test.js +20 -0
- package/dist/cli/commands/adopt.cli-flags.test.js.map +1 -1
- package/dist/cli/commands/adopt.d.ts.map +1 -1
- package/dist/cli/commands/adopt.js +11 -3
- package/dist/cli/commands/adopt.js.map +1 -1
- package/dist/cli/commands/complete.d.ts +1 -0
- package/dist/cli/commands/complete.d.ts.map +1 -1
- package/dist/cli/commands/complete.js +26 -8
- package/dist/cli/commands/complete.js.map +1 -1
- package/dist/cli/commands/dashboard.d.ts +1 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -1
- package/dist/cli/commands/dashboard.js +19 -6
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +1 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -1
- package/dist/cli/commands/decisions.js +18 -4
- package/dist/cli/commands/decisions.js.map +1 -1
- package/dist/cli/commands/info.d.ts +1 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +25 -3
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init-from.test.d.ts +2 -0
- package/dist/cli/commands/init-from.test.d.ts.map +1 -0
- package/dist/cli/commands/init-from.test.js +315 -0
- package/dist/cli/commands/init-from.test.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +239 -129
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.test.js +20 -0
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -0
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +40 -4
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/next.test.js +151 -0
- package/dist/cli/commands/next.test.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +1 -0
- package/dist/cli/commands/reset.d.ts.map +1 -1
- package/dist/cli/commands/reset.js +77 -29
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/rework.d.ts +1 -0
- package/dist/cli/commands/rework.d.ts.map +1 -1
- package/dist/cli/commands/rework.js +16 -2
- package/dist/cli/commands/rework.js.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +65 -13
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/run.test.js +192 -3
- package/dist/cli/commands/run.test.js.map +1 -1
- package/dist/cli/commands/skip.d.ts +1 -0
- package/dist/cli/commands/skip.d.ts.map +1 -1
- package/dist/cli/commands/skip.js +24 -7
- package/dist/cli/commands/skip.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +51 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/status.test.js +128 -0
- package/dist/cli/commands/status.test.js.map +1 -1
- package/dist/cli/guards-coverage.test.d.ts +2 -0
- package/dist/cli/guards-coverage.test.d.ts.map +1 -0
- package/dist/cli/guards-coverage.test.js +26 -0
- package/dist/cli/guards-coverage.test.js.map +1 -0
- package/dist/cli/guards-integration.test.d.ts +2 -0
- package/dist/cli/guards-integration.test.d.ts.map +1 -0
- package/dist/cli/guards-integration.test.js +178 -0
- package/dist/cli/guards-integration.test.js.map +1 -0
- package/dist/cli/guards.d.ts +13 -0
- package/dist/cli/guards.d.ts.map +1 -0
- package/dist/cli/guards.js +70 -0
- package/dist/cli/guards.js.map +1 -0
- package/dist/cli/guards.test.d.ts +2 -0
- package/dist/cli/guards.test.d.ts.map +1 -0
- package/dist/cli/guards.test.js +136 -0
- package/dist/cli/guards.test.js.map +1 -0
- package/dist/cli/init-flag-families.d.ts +1 -1
- package/dist/cli/init-flag-families.d.ts.map +1 -1
- package/dist/cli/init-flag-families.js +4 -1
- package/dist/cli/init-flag-families.js.map +1 -1
- package/dist/cli/init-flag-families.test.js +10 -0
- package/dist/cli/init-flag-families.test.js.map +1 -1
- package/dist/cli/shutdown.d.ts +2 -3
- package/dist/cli/shutdown.d.ts.map +1 -1
- package/dist/cli/shutdown.js +14 -11
- package/dist/cli/shutdown.js.map +1 -1
- package/dist/cli/shutdown.test.js +2 -4
- package/dist/cli/shutdown.test.js.map +1 -1
- package/dist/config/schema.d.ts +12122 -288
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +74 -79
- package/dist/config/schema.js.map +1 -1
- package/dist/config/schema.test.js +230 -1
- package/dist/config/schema.test.js.map +1 -1
- package/dist/config/validators/backend.d.ts +4 -0
- package/dist/config/validators/backend.d.ts.map +1 -0
- package/dist/config/validators/backend.js +14 -0
- package/dist/config/validators/backend.js.map +1 -0
- package/dist/config/validators/browser-extension.d.ts +4 -0
- package/dist/config/validators/browser-extension.d.ts.map +1 -0
- package/dist/config/validators/browser-extension.js +24 -0
- package/dist/config/validators/browser-extension.js.map +1 -0
- package/dist/config/validators/cli.d.ts +4 -0
- package/dist/config/validators/cli.d.ts.map +1 -0
- package/dist/config/validators/cli.js +14 -0
- package/dist/config/validators/cli.js.map +1 -0
- package/dist/config/validators/data-pipeline.d.ts +4 -0
- package/dist/config/validators/data-pipeline.d.ts.map +1 -0
- package/dist/config/validators/data-pipeline.js +14 -0
- package/dist/config/validators/data-pipeline.js.map +1 -0
- package/dist/config/validators/game.d.ts +4 -0
- package/dist/config/validators/game.d.ts.map +1 -0
- package/dist/config/validators/game.js +14 -0
- package/dist/config/validators/game.js.map +1 -0
- package/dist/config/validators/index.d.ts +7 -0
- package/dist/config/validators/index.d.ts.map +1 -0
- package/dist/config/validators/index.js +27 -0
- package/dist/config/validators/index.js.map +1 -0
- package/dist/config/validators/library.d.ts +4 -0
- package/dist/config/validators/library.d.ts.map +1 -0
- package/dist/config/validators/library.js +25 -0
- package/dist/config/validators/library.js.map +1 -0
- package/dist/config/validators/ml.d.ts +4 -0
- package/dist/config/validators/ml.d.ts.map +1 -0
- package/dist/config/validators/ml.js +31 -0
- package/dist/config/validators/ml.js.map +1 -0
- package/dist/config/validators/mobile-app.d.ts +4 -0
- package/dist/config/validators/mobile-app.d.ts.map +1 -0
- package/dist/config/validators/mobile-app.js +14 -0
- package/dist/config/validators/mobile-app.js.map +1 -0
- package/dist/config/validators/registry.test.d.ts +2 -0
- package/dist/config/validators/registry.test.d.ts.map +1 -0
- package/dist/config/validators/registry.test.js +26 -0
- package/dist/config/validators/registry.test.js.map +1 -0
- package/dist/config/validators/research.d.ts +4 -0
- package/dist/config/validators/research.d.ts.map +1 -0
- package/dist/config/validators/research.js +24 -0
- package/dist/config/validators/research.js.map +1 -0
- package/dist/config/validators/research.test.d.ts +2 -0
- package/dist/config/validators/research.test.d.ts.map +1 -0
- package/dist/config/validators/research.test.js +44 -0
- package/dist/config/validators/research.test.js.map +1 -0
- package/dist/config/validators/types.d.ts +19 -0
- package/dist/config/validators/types.d.ts.map +1 -0
- package/dist/config/validators/types.js +2 -0
- package/dist/config/validators/types.js.map +1 -0
- package/dist/config/validators/validators.test.d.ts +2 -0
- package/dist/config/validators/validators.test.d.ts.map +1 -0
- package/dist/config/validators/validators.test.js +25 -0
- package/dist/config/validators/validators.test.js.map +1 -0
- package/dist/config/validators/web-app.d.ts +4 -0
- package/dist/config/validators/web-app.d.ts.map +1 -0
- package/dist/config/validators/web-app.js +31 -0
- package/dist/config/validators/web-app.js.map +1 -0
- package/dist/core/assembly/context-gatherer.d.ts.map +1 -1
- package/dist/core/assembly/context-gatherer.js +4 -2
- package/dist/core/assembly/context-gatherer.js.map +1 -1
- package/dist/core/assembly/cross-reads.d.ts +58 -0
- package/dist/core/assembly/cross-reads.d.ts.map +1 -0
- package/dist/core/assembly/cross-reads.js +185 -0
- package/dist/core/assembly/cross-reads.js.map +1 -0
- package/dist/core/assembly/cross-reads.test.d.ts +2 -0
- package/dist/core/assembly/cross-reads.test.d.ts.map +1 -0
- package/dist/core/assembly/cross-reads.test.js +383 -0
- package/dist/core/assembly/cross-reads.test.js.map +1 -0
- package/dist/core/assembly/overlay-loader-structural.test.d.ts +2 -0
- package/dist/core/assembly/overlay-loader-structural.test.d.ts.map +1 -0
- package/dist/core/assembly/overlay-loader-structural.test.js +114 -0
- package/dist/core/assembly/overlay-loader-structural.test.js.map +1 -0
- package/dist/core/assembly/overlay-loader.d.ts +17 -3
- package/dist/core/assembly/overlay-loader.d.ts.map +1 -1
- package/dist/core/assembly/overlay-loader.js +75 -0
- package/dist/core/assembly/overlay-loader.js.map +1 -1
- package/dist/core/assembly/overlay-resolver.d.ts +2 -2
- package/dist/core/assembly/overlay-resolver.d.ts.map +1 -1
- package/dist/core/assembly/overlay-resolver.js.map +1 -1
- package/dist/core/assembly/overlay-resolver.test.js.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.d.ts +5 -0
- package/dist/core/assembly/overlay-state-resolver.d.ts.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.js +41 -1
- package/dist/core/assembly/overlay-state-resolver.js.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.test.js +262 -0
- package/dist/core/assembly/overlay-state-resolver.test.js.map +1 -1
- package/dist/core/assembly/update-mode.d.ts +1 -0
- package/dist/core/assembly/update-mode.d.ts.map +1 -1
- package/dist/core/assembly/update-mode.js +17 -9
- package/dist/core/assembly/update-mode.js.map +1 -1
- package/dist/core/dependency/eligibility.d.ts +10 -1
- package/dist/core/dependency/eligibility.d.ts.map +1 -1
- package/dist/core/dependency/eligibility.js +19 -1
- package/dist/core/dependency/eligibility.js.map +1 -1
- package/dist/core/dependency/eligibility.test.js +82 -0
- package/dist/core/dependency/eligibility.test.js.map +1 -1
- package/dist/core/dependency/graph.d.ts +4 -1
- package/dist/core/dependency/graph.d.ts.map +1 -1
- package/dist/core/dependency/graph.js +7 -1
- package/dist/core/dependency/graph.js.map +1 -1
- package/dist/core/dependency/graph.test.js +29 -0
- package/dist/core/dependency/graph.test.js.map +1 -1
- package/dist/core/pipeline/global-steps.d.ts +7 -0
- package/dist/core/pipeline/global-steps.d.ts.map +1 -0
- package/dist/core/pipeline/global-steps.js +18 -0
- package/dist/core/pipeline/global-steps.js.map +1 -0
- package/dist/core/pipeline/resolver.d.ts +1 -0
- package/dist/core/pipeline/resolver.d.ts.map +1 -1
- package/dist/core/pipeline/resolver.js +51 -6
- package/dist/core/pipeline/resolver.js.map +1 -1
- package/dist/core/pipeline/types.d.ts +5 -1
- package/dist/core/pipeline/types.d.ts.map +1 -1
- package/dist/e2e/cross-service-references.test.d.ts +22 -0
- package/dist/e2e/cross-service-references.test.d.ts.map +1 -0
- package/dist/e2e/cross-service-references.test.js +188 -0
- package/dist/e2e/cross-service-references.test.js.map +1 -0
- package/dist/e2e/multi-service-pipeline.test.d.ts +10 -0
- package/dist/e2e/multi-service-pipeline.test.d.ts.map +1 -0
- package/dist/e2e/multi-service-pipeline.test.js +185 -0
- package/dist/e2e/multi-service-pipeline.test.js.map +1 -0
- package/dist/e2e/project-type-overlays.test.js +68 -0
- package/dist/e2e/project-type-overlays.test.js.map +1 -1
- package/dist/e2e/service-execution.test.d.ts +15 -0
- package/dist/e2e/service-execution.test.d.ts.map +1 -0
- package/dist/e2e/service-execution.test.js +219 -0
- package/dist/e2e/service-execution.test.js.map +1 -0
- package/dist/e2e/service-manifest.test.d.ts +19 -0
- package/dist/e2e/service-manifest.test.d.ts.map +1 -0
- package/dist/e2e/service-manifest.test.js +166 -0
- package/dist/e2e/service-manifest.test.js.map +1 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts +224 -224
- package/dist/project/frontmatter.d.ts.map +1 -1
- package/dist/project/frontmatter.js +11 -0
- package/dist/project/frontmatter.js.map +1 -1
- package/dist/project/frontmatter.test.js +71 -0
- package/dist/project/frontmatter.test.js.map +1 -1
- package/dist/state/completion.d.ts +1 -1
- package/dist/state/completion.d.ts.map +1 -1
- package/dist/state/completion.js +10 -8
- package/dist/state/completion.js.map +1 -1
- package/dist/state/decision-logger.d.ts +3 -2
- package/dist/state/decision-logger.d.ts.map +1 -1
- package/dist/state/decision-logger.js +12 -11
- package/dist/state/decision-logger.js.map +1 -1
- package/dist/state/ensure-v3-migration.d.ts +9 -0
- package/dist/state/ensure-v3-migration.d.ts.map +1 -0
- package/dist/state/ensure-v3-migration.js +35 -0
- package/dist/state/ensure-v3-migration.js.map +1 -0
- package/dist/state/lock-manager.d.ts +5 -4
- package/dist/state/lock-manager.d.ts.map +1 -1
- package/dist/state/lock-manager.js +11 -11
- package/dist/state/lock-manager.js.map +1 -1
- package/dist/state/rework-manager.d.ts +1 -2
- package/dist/state/rework-manager.d.ts.map +1 -1
- package/dist/state/rework-manager.js +4 -5
- package/dist/state/rework-manager.js.map +1 -1
- package/dist/state/state-manager.d.ts +25 -1
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +86 -12
- package/dist/state/state-manager.js.map +1 -1
- package/dist/state/state-manager.test.js +278 -0
- package/dist/state/state-manager.test.js.map +1 -1
- package/dist/state/state-migration-v3.d.ts +22 -0
- package/dist/state/state-migration-v3.d.ts.map +1 -0
- package/dist/state/state-migration-v3.js +82 -0
- package/dist/state/state-migration-v3.js.map +1 -0
- package/dist/state/state-migration-v3.test.d.ts +2 -0
- package/dist/state/state-migration-v3.test.d.ts.map +1 -0
- package/dist/state/state-migration-v3.test.js +196 -0
- package/dist/state/state-migration-v3.test.js.map +1 -0
- package/dist/state/state-migration.d.ts.map +1 -1
- package/dist/state/state-migration.js +11 -6
- package/dist/state/state-migration.js.map +1 -1
- package/dist/state/state-migration.test.js +47 -2
- package/dist/state/state-migration.test.js.map +1 -1
- package/dist/state/state-path-resolver.d.ts +23 -0
- package/dist/state/state-path-resolver.d.ts.map +1 -0
- package/dist/state/state-path-resolver.js +36 -0
- package/dist/state/state-path-resolver.js.map +1 -0
- package/dist/state/state-path-resolver.test.d.ts +2 -0
- package/dist/state/state-path-resolver.test.d.ts.map +1 -0
- package/dist/state/state-path-resolver.test.js +78 -0
- package/dist/state/state-path-resolver.test.js.map +1 -0
- package/dist/state/state-version-dispatch.d.ts +17 -0
- package/dist/state/state-version-dispatch.d.ts.map +1 -0
- package/dist/state/state-version-dispatch.js +27 -0
- package/dist/state/state-version-dispatch.js.map +1 -0
- package/dist/state/state-version-dispatch.test.d.ts +2 -0
- package/dist/state/state-version-dispatch.test.d.ts.map +1 -0
- package/dist/state/state-version-dispatch.test.js +40 -0
- package/dist/state/state-version-dispatch.test.js.map +1 -0
- package/dist/types/config.d.ts +25 -3
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.test.js +13 -1
- package/dist/types/config.test.js.map +1 -1
- package/dist/types/dependency.d.ts +5 -0
- package/dist/types/dependency.d.ts.map +1 -1
- package/dist/types/frontmatter.d.ts +5 -0
- package/dist/types/frontmatter.d.ts.map +1 -1
- package/dist/types/lock.d.ts +1 -1
- package/dist/types/lock.d.ts.map +1 -1
- package/dist/types/state.d.ts +1 -1
- package/dist/types/state.d.ts.map +1 -1
- package/dist/utils/artifact-path.d.ts +19 -0
- package/dist/utils/artifact-path.d.ts.map +1 -0
- package/dist/utils/artifact-path.js +95 -0
- package/dist/utils/artifact-path.js.map +1 -0
- package/dist/utils/artifact-path.test.d.ts +2 -0
- package/dist/utils/artifact-path.test.d.ts.map +1 -0
- package/dist/utils/artifact-path.test.js +138 -0
- package/dist/utils/artifact-path.test.js.map +1 -0
- package/dist/utils/errors.d.ts +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +5 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/user-errors.d.ts +46 -0
- package/dist/utils/user-errors.d.ts.map +1 -0
- package/dist/utils/user-errors.js +76 -0
- package/dist/utils/user-errors.js.map +1 -0
- package/dist/utils/user-errors.test.d.ts +2 -0
- package/dist/utils/user-errors.test.d.ts.map +1 -0
- package/dist/utils/user-errors.test.js +74 -0
- package/dist/utils/user-errors.test.js.map +1 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +16 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/index.test.js +48 -0
- package/dist/validation/index.test.js.map +1 -1
- package/dist/validation/state-validator.d.ts +5 -2
- package/dist/validation/state-validator.d.ts.map +1 -1
- package/dist/validation/state-validator.js +18 -20
- package/dist/validation/state-validator.js.map +1 -1
- package/dist/validation/state-validator.test.js +31 -2
- package/dist/validation/state-validator.test.js.map +1 -1
- package/dist/wizard/copy/backend.d.ts.map +1 -1
- package/dist/wizard/copy/backend.js +12 -0
- package/dist/wizard/copy/backend.js.map +1 -1
- package/dist/wizard/flags.d.ts +1 -0
- package/dist/wizard/flags.d.ts.map +1 -1
- package/dist/wizard/questions.d.ts.map +1 -1
- package/dist/wizard/questions.js +5 -1
- package/dist/wizard/questions.js.map +1 -1
- package/dist/wizard/questions.test.js +45 -2
- package/dist/wizard/questions.test.js.map +1 -1
- package/dist/wizard/wizard.d.ts +23 -0
- package/dist/wizard/wizard.d.ts.map +1 -1
- package/dist/wizard/wizard.js +85 -47
- package/dist/wizard/wizard.js.map +1 -1
- package/dist/wizard/wizard.test.js +186 -1
- package/dist/wizard/wizard.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-path-resolver.test.d.ts","sourceRoot":"","sources":["../../src/state/state-path-resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import { StatePathResolver } from './state-path-resolver.js';
|
|
6
|
+
describe('StatePathResolver', () => {
|
|
7
|
+
const root = '/fake/project';
|
|
8
|
+
describe('root-scoped (no service)', () => {
|
|
9
|
+
const resolver = new StatePathResolver(root);
|
|
10
|
+
it('scaffoldDir is .scaffold/', () => {
|
|
11
|
+
expect(resolver.scaffoldDir).toBe(path.join(root, '.scaffold'));
|
|
12
|
+
});
|
|
13
|
+
it('statePath is .scaffold/state.json', () => {
|
|
14
|
+
expect(resolver.statePath).toBe(path.join(root, '.scaffold', 'state.json'));
|
|
15
|
+
});
|
|
16
|
+
it('lockPath is .scaffold/lock.json', () => {
|
|
17
|
+
expect(resolver.lockPath).toBe(path.join(root, '.scaffold', 'lock.json'));
|
|
18
|
+
});
|
|
19
|
+
it('decisionsPath is .scaffold/decisions.jsonl', () => {
|
|
20
|
+
expect(resolver.decisionsPath).toBe(path.join(root, '.scaffold', 'decisions.jsonl'));
|
|
21
|
+
});
|
|
22
|
+
it('reworkPath is .scaffold/rework.json', () => {
|
|
23
|
+
expect(resolver.reworkPath).toBe(path.join(root, '.scaffold', 'rework.json'));
|
|
24
|
+
});
|
|
25
|
+
it('rootScaffoldDir equals scaffoldDir for root-scoped', () => {
|
|
26
|
+
expect(resolver.rootScaffoldDir).toBe(resolver.scaffoldDir);
|
|
27
|
+
});
|
|
28
|
+
it('isServiceScoped is false', () => {
|
|
29
|
+
expect(resolver.isServiceScoped).toBe(false);
|
|
30
|
+
});
|
|
31
|
+
it('serviceName is undefined', () => {
|
|
32
|
+
expect(resolver.serviceName).toBeUndefined();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('service-scoped', () => {
|
|
36
|
+
const resolver = new StatePathResolver(root, 'api');
|
|
37
|
+
it('scaffoldDir is .scaffold/services/api/', () => {
|
|
38
|
+
expect(resolver.scaffoldDir).toBe(path.join(root, '.scaffold', 'services', 'api'));
|
|
39
|
+
});
|
|
40
|
+
it('statePath is .scaffold/services/api/state.json', () => {
|
|
41
|
+
expect(resolver.statePath).toBe(path.join(root, '.scaffold', 'services', 'api', 'state.json'));
|
|
42
|
+
});
|
|
43
|
+
it('lockPath is .scaffold/services/api/lock.json', () => {
|
|
44
|
+
expect(resolver.lockPath).toBe(path.join(root, '.scaffold', 'services', 'api', 'lock.json'));
|
|
45
|
+
});
|
|
46
|
+
it('decisionsPath is .scaffold/services/api/decisions.jsonl', () => {
|
|
47
|
+
expect(resolver.decisionsPath).toBe(path.join(root, '.scaffold', 'services', 'api', 'decisions.jsonl'));
|
|
48
|
+
});
|
|
49
|
+
it('reworkPath is .scaffold/services/api/rework.json', () => {
|
|
50
|
+
expect(resolver.reworkPath).toBe(path.join(root, '.scaffold', 'services', 'api', 'rework.json'));
|
|
51
|
+
});
|
|
52
|
+
it('rootScaffoldDir is always .scaffold/ regardless of service', () => {
|
|
53
|
+
expect(resolver.rootScaffoldDir).toBe(path.join(root, '.scaffold'));
|
|
54
|
+
});
|
|
55
|
+
it('isServiceScoped is true', () => {
|
|
56
|
+
expect(resolver.isServiceScoped).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it('serviceName is api', () => {
|
|
59
|
+
expect(resolver.serviceName).toBe('api');
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('empty string service', () => {
|
|
63
|
+
const resolver = new StatePathResolver(root, '');
|
|
64
|
+
it('treats empty string as root-scoped', () => {
|
|
65
|
+
expect(resolver.scaffoldDir).toBe(path.join(root, '.scaffold'));
|
|
66
|
+
expect(resolver.isServiceScoped).toBe(false);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('ensureDir', () => {
|
|
70
|
+
it('creates the scaffold directory recursively', () => {
|
|
71
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'spr-test-'));
|
|
72
|
+
const resolver = new StatePathResolver(tmpDir, 'my-service');
|
|
73
|
+
resolver.ensureDir();
|
|
74
|
+
expect(fs.existsSync(resolver.scaffoldDir)).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=state-path-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-path-resolver.test.js","sourceRoot":"","sources":["../../src/state/state-path-resolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,IAAI,GAAG,eAAe,CAAA;IAE5B,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAE5C,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;QAC7E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAA;QAC3E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACtF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAEnD,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;QACpF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAA;QAC9F,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAA;QACzG,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAA;QAClG,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAEhD,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAA;YAC/D,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;YAClE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;YAC5D,QAAQ,CAAC,SAAS,EAAE,CAAA;YACpB,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface MigrationContext {
|
|
2
|
+
readonly hasServices: boolean;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Dispatches schema-version handling on raw state JSON.
|
|
6
|
+
* - Rejects unknown / missing versions.
|
|
7
|
+
* - Bumps v1 → v2 in-place when the companion config has services[].
|
|
8
|
+
* - Does NOT run Zod full-shape validation — caller is responsible.
|
|
9
|
+
* - Mutates the input object; callers may rely on that side effect.
|
|
10
|
+
*
|
|
11
|
+
* Wave 3b will extend this module to bump v2 → v3 when per-service
|
|
12
|
+
* state fields are introduced.
|
|
13
|
+
*/
|
|
14
|
+
export declare function dispatchStateMigration(raw: unknown, ctx: MigrationContext, file: string): asserts raw is Record<string, unknown> & {
|
|
15
|
+
'schema-version': 1 | 2 | 3;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=state-version-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-version-dispatch.d.ts","sourceRoot":"","sources":["../../src/state/state-version-dispatch.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAMD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,CAW1E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { stateSchemaVersion } from '../utils/errors.js';
|
|
2
|
+
function isPlainObject(v) {
|
|
3
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Dispatches schema-version handling on raw state JSON.
|
|
7
|
+
* - Rejects unknown / missing versions.
|
|
8
|
+
* - Bumps v1 → v2 in-place when the companion config has services[].
|
|
9
|
+
* - Does NOT run Zod full-shape validation — caller is responsible.
|
|
10
|
+
* - Mutates the input object; callers may rely on that side effect.
|
|
11
|
+
*
|
|
12
|
+
* Wave 3b will extend this module to bump v2 → v3 when per-service
|
|
13
|
+
* state fields are introduced.
|
|
14
|
+
*/
|
|
15
|
+
export function dispatchStateMigration(raw, ctx, file) {
|
|
16
|
+
if (!isPlainObject(raw) || typeof raw['schema-version'] !== 'number') {
|
|
17
|
+
throw stateSchemaVersion([1, 2, 3], Number(raw && raw['schema-version']), file);
|
|
18
|
+
}
|
|
19
|
+
const version = raw['schema-version'];
|
|
20
|
+
if (version !== 1 && version !== 2 && version !== 3) {
|
|
21
|
+
throw stateSchemaVersion([1, 2, 3], version, file);
|
|
22
|
+
}
|
|
23
|
+
if (version === 1 && ctx.hasServices) {
|
|
24
|
+
raw['schema-version'] = 2;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=state-version-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-version-dispatch.js","sourceRoot":"","sources":["../../src/state/state-version-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAMvD,SAAS,aAAa,CAAC,CAAU;IAC/B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAY,EACZ,GAAqB,EACrB,IAAY;IAEZ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAK,GAA+B,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAC9G,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IACrC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-version-dispatch.test.d.ts","sourceRoot":"","sources":["../../src/state/state-version-dispatch.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { dispatchStateMigration } from './state-version-dispatch.js';
|
|
3
|
+
describe('dispatchStateMigration', () => {
|
|
4
|
+
it('accepts v1 state when hasServices is false (no bump)', () => {
|
|
5
|
+
const raw = { 'schema-version': 1, foo: 'bar' };
|
|
6
|
+
dispatchStateMigration(raw, { hasServices: false }, 'state.json');
|
|
7
|
+
expect(raw['schema-version']).toBe(1);
|
|
8
|
+
});
|
|
9
|
+
it('bumps v1 → v2 in place when hasServices is true', () => {
|
|
10
|
+
const raw = { 'schema-version': 1, foo: 'bar' };
|
|
11
|
+
dispatchStateMigration(raw, { hasServices: true }, 'state.json');
|
|
12
|
+
expect(raw['schema-version']).toBe(2);
|
|
13
|
+
});
|
|
14
|
+
it('accepts v2 state unchanged regardless of hasServices', () => {
|
|
15
|
+
const raw = { 'schema-version': 2, foo: 'bar' };
|
|
16
|
+
dispatchStateMigration(raw, { hasServices: true }, 'state.json');
|
|
17
|
+
expect(raw['schema-version']).toBe(2);
|
|
18
|
+
});
|
|
19
|
+
it('throws on missing schema-version', () => {
|
|
20
|
+
expect(() => dispatchStateMigration({}, { hasServices: false }, 'state.json')).toThrow();
|
|
21
|
+
});
|
|
22
|
+
it('throws on unknown schema-version', () => {
|
|
23
|
+
expect(() => dispatchStateMigration({ 'schema-version': 99 }, { hasServices: false }, 'state.json')).toThrow();
|
|
24
|
+
});
|
|
25
|
+
it('throws on non-object raw input', () => {
|
|
26
|
+
expect(() => dispatchStateMigration('not an object', { hasServices: false }, 'state.json')).toThrow();
|
|
27
|
+
expect(() => dispatchStateMigration(null, { hasServices: false }, 'state.json')).toThrow();
|
|
28
|
+
});
|
|
29
|
+
it('accepts schema-version 3 without modification', () => {
|
|
30
|
+
const raw = { 'schema-version': 3, steps: {} };
|
|
31
|
+
dispatchStateMigration(raw, { hasServices: true }, '/test/state.json');
|
|
32
|
+
expect(raw['schema-version']).toBe(3);
|
|
33
|
+
});
|
|
34
|
+
it('accepts schema-version 3 even without services', () => {
|
|
35
|
+
const raw = { 'schema-version': 3, steps: {} };
|
|
36
|
+
dispatchStateMigration(raw, { hasServices: false }, '/test/state.json');
|
|
37
|
+
expect(raw['schema-version']).toBe(3);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=state-version-dispatch.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-version-dispatch.test.js","sourceRoot":"","sources":["../../src/state/state-version-dispatch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAEpE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,GAAG,GAA4B,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;QACxE,sBAAsB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAAA;QACjE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,GAAG,GAA4B,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;QACxE,sBAAsB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;QAChE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,GAAG,GAA4B,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;QACxE,sBAAsB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;QAChE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CACV,sBAAsB,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CACjE,CAAC,OAAO,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,GAAG,EAAE,CACV,sBAAsB,CACpB,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,CAC/D,CACF,CAAC,OAAO,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,GAAG,EAAE,CACV,sBAAsB,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CAC9E,CAAC,OAAO,EAAE,CAAA;QACX,MAAM,CAAC,GAAG,EAAE,CACV,sBAAsB,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,CACnE,CAAC,OAAO,EAAE,CAAA;IACb,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QAC9C,sBAAsB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAA;QACtE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QAC9C,sBAAsB,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAA;QACvE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -93,16 +93,37 @@ export interface DependencyOverride {
|
|
|
93
93
|
replace?: Record<string, string>;
|
|
94
94
|
append?: string[];
|
|
95
95
|
}
|
|
96
|
-
/**
|
|
97
|
-
export interface
|
|
96
|
+
/** Pipeline overlay definition (project-type or structural). */
|
|
97
|
+
export interface PipelineOverlay {
|
|
98
98
|
name: string;
|
|
99
99
|
description: string;
|
|
100
|
-
projectType
|
|
100
|
+
projectType?: ProjectType;
|
|
101
101
|
stepOverrides: Record<string, StepEnablementEntry>;
|
|
102
102
|
knowledgeOverrides: Record<string, KnowledgeOverride>;
|
|
103
103
|
readsOverrides: Record<string, ReadsOverride>;
|
|
104
104
|
dependencyOverrides: Record<string, DependencyOverride>;
|
|
105
105
|
}
|
|
106
|
+
/** Service configuration — mirrors ServiceSchema structure for manual type declarations. */
|
|
107
|
+
export interface ServiceConfig {
|
|
108
|
+
name: string;
|
|
109
|
+
description?: string;
|
|
110
|
+
projectType: ProjectType;
|
|
111
|
+
backendConfig?: BackendConfig;
|
|
112
|
+
webAppConfig?: WebAppConfig;
|
|
113
|
+
researchConfig?: ResearchConfig;
|
|
114
|
+
libraryConfig?: LibraryConfig;
|
|
115
|
+
cliConfig?: CliConfig;
|
|
116
|
+
mobileAppConfig?: MobileAppConfig;
|
|
117
|
+
dataPipelineConfig?: DataPipelineConfig;
|
|
118
|
+
mlConfig?: MlConfig;
|
|
119
|
+
gameConfig?: GameConfig;
|
|
120
|
+
browserExtensionConfig?: BrowserExtensionConfig;
|
|
121
|
+
path?: string;
|
|
122
|
+
/** Pipeline step slugs this service exposes for cross-service reference. Closed by default. */
|
|
123
|
+
exports?: Array<{
|
|
124
|
+
step: string;
|
|
125
|
+
}>;
|
|
126
|
+
}
|
|
106
127
|
/** Project characteristics from config.yml. */
|
|
107
128
|
export interface ProjectConfig {
|
|
108
129
|
name?: string;
|
|
@@ -118,6 +139,7 @@ export interface ProjectConfig {
|
|
|
118
139
|
mlConfig?: MlConfig;
|
|
119
140
|
browserExtensionConfig?: BrowserExtensionConfig;
|
|
120
141
|
researchConfig?: ResearchConfig;
|
|
142
|
+
services?: ServiceConfig[];
|
|
121
143
|
[key: string]: unknown;
|
|
122
144
|
}
|
|
123
145
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,EACL,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAC1D,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAC3D,wBAAwB,EAAE,cAAc,EAAE,4BAA4B,EACtE,gBAAgB,EAAE,oBAAoB,EACvC,MAAM,qBAAqB,CAAA;AAE5B,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,UAAU,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CACzC;AAED,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,gFAAgF;AAChF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,iFAAiF;AACjF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAEvD,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,sFAAsF;AACtF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,mFAAmF;AACnF,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAErD,0FAA0F;AAC1F,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAEjF,yFAAyF;AACzF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEzD,8EAA8E;AAC9E,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAA;AAEhD,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,+CAA+C;AAC/C,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAClD,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IACrD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC7C,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;CACxD;AAED,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+FAA+F;IAC/F,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAClC;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAA;IAC/C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,CAAA;IACV,WAAW,EAAE,eAAe,CAAA;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,SAAS,EAAE,KAAK,CAAC,aAAa,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAA;IACpD,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,+FAA+F;AAC/F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,UAAU,CAAA;IACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAC3C"}
|
|
@@ -33,7 +33,7 @@ describe('StepEnablementEntry type', () => {
|
|
|
33
33
|
expect(entry.conditional).toBe('if-needed');
|
|
34
34
|
});
|
|
35
35
|
});
|
|
36
|
-
describe('
|
|
36
|
+
describe('PipelineOverlay type', () => {
|
|
37
37
|
it('accepts a valid overlay', () => {
|
|
38
38
|
const overlay = {
|
|
39
39
|
name: 'game',
|
|
@@ -57,6 +57,18 @@ describe('ProjectTypeOverlay type', () => {
|
|
|
57
57
|
expect(overlay.projectType).toBe('game');
|
|
58
58
|
expect(overlay.stepOverrides['game-design-document']?.enabled).toBe(true);
|
|
59
59
|
});
|
|
60
|
+
it('accepts a structural overlay without projectType', () => {
|
|
61
|
+
const overlay = {
|
|
62
|
+
name: 'multi-service',
|
|
63
|
+
description: 'Cross-service overlay',
|
|
64
|
+
stepOverrides: { 'service-ownership-map': { enabled: true } },
|
|
65
|
+
knowledgeOverrides: {},
|
|
66
|
+
readsOverrides: {},
|
|
67
|
+
dependencyOverrides: {},
|
|
68
|
+
};
|
|
69
|
+
expect(overlay.name).toBe('multi-service');
|
|
70
|
+
expect(overlay.projectType).toBeUndefined();
|
|
71
|
+
});
|
|
60
72
|
});
|
|
61
73
|
describe('KnowledgeOverride type', () => {
|
|
62
74
|
it('accepts a valid knowledge override', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/types/config.test.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAM7C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAe;YACzB,MAAM,EAAE,OAAO;YACf,eAAe,EAAE,MAAM;YACvB,SAAS,EAAE,MAAM;YACjB,gBAAgB,EAAE,UAAU;YAC5B,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,EAAE;YAClB,WAAW,EAAE,aAAa;YAC1B,eAAe,EAAE,CAAC,IAAI,CAAC;YACvB,gBAAgB,EAAE,CAAC,IAAI,CAAC;YACxB,UAAU,EAAE,KAAK;YACjB,eAAe,EAAE,MAAM;SACxB,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,OAAO,GAAkB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA;QACrD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,KAAK,GAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;QAC9E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/types/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,11 @@ export interface DependencyNode {
|
|
|
3
3
|
phase: string | null;
|
|
4
4
|
order: number | null;
|
|
5
5
|
dependencies: string[];
|
|
6
|
+
/** Cross-service dependency edges (informational, non-blocking). Populated from frontmatter.crossReads (Wave 3c). */
|
|
7
|
+
crossDependencies?: Array<{
|
|
8
|
+
service: string;
|
|
9
|
+
step: string;
|
|
10
|
+
}>;
|
|
6
11
|
enabled: boolean;
|
|
7
12
|
}
|
|
8
13
|
export interface DependencyGraph {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../../src/types/dependency.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC7B"}
|
|
1
|
+
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../../src/types/dependency.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,qHAAqH;IACrH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5D,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC7B"}
|
|
@@ -114,6 +114,11 @@ export interface MetaPromptFrontmatter {
|
|
|
114
114
|
knowledgeBase: string[];
|
|
115
115
|
/** Cross-cutting artifact references beyond the dependency chain. */
|
|
116
116
|
reads: string[];
|
|
117
|
+
/** Cross-service artifact references — each entry points at a foreign service:step pair (Wave 3c). */
|
|
118
|
+
crossReads?: Array<{
|
|
119
|
+
service: string;
|
|
120
|
+
step: string;
|
|
121
|
+
}>;
|
|
117
122
|
/** When true, step has no completion state tracking (on-demand, always available). */
|
|
118
123
|
stateless: boolean;
|
|
119
124
|
/** Source category: 'pipeline' for sequential steps, 'tool' for utility commands. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/types/frontmatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFT,CAAA;AAEV,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,oDAAoD;AACpD,eAAO,MAAM,aAAa,EAErB,MAAM,CAAC,SAAS,EAAE,CAAA,OAAO,MAAM,EAAC,MAAM,CAAC,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,iFAAiF;IACjF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,iHAAiH;IACjH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,qEAAqE;IACrE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,qEAAqE;IACrE,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,sFAAsF;IACtF,SAAS,EAAE,OAAO,CAAA;IAClB,qFAAqF;IACrF,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAA;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,6BAA6B;IAC7B,WAAW,EAAE,qBAAqB,CAAA;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC"}
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/types/frontmatter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiFT,CAAA;AAEV,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,oDAAoD;AACpD,eAAO,MAAM,aAAa,EAErB,MAAM,CAAC,SAAS,EAAE,CAAA,OAAO,MAAM,EAAC,MAAM,CAAC,CAAC,CAAA;AAE7C;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,iFAAiF;IACjF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,iHAAiH;IACjH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,qEAAqE;IACrE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,qEAAqE;IACrE,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,sGAAsG;IACtG,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrD,sFAAsF;IACtF,SAAS,EAAE,OAAO,CAAA;IAClB,qFAAqF;IACrF,QAAQ,EAAE,UAAU,GAAG,MAAM,CAAA;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,kEAAkE;AAClE,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,6BAA6B;IAC7B,WAAW,EAAE,qBAAqB,CAAA;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC"}
|
package/dist/types/lock.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type LockableCommand = 'run' | 'skip' | 'init' | 'reset' | 'adopt' | 'complete' | 'rework';
|
|
1
|
+
export type LockableCommand = 'run' | 'skip' | 'init' | 'reset' | 'adopt' | 'complete' | 'rework' | 'migration';
|
|
2
2
|
export interface LockFile {
|
|
3
3
|
holder: string;
|
|
4
4
|
prompt?: string;
|
package/dist/types/lock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/types/lock.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/types/lock.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE/G,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,eAAe,CAAA;CACzB"}
|
package/dist/types/state.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export interface ExtraStepEntry {
|
|
|
35
35
|
* See state-json-schema.md.
|
|
36
36
|
*/
|
|
37
37
|
export interface PipelineState {
|
|
38
|
-
'schema-version': 1;
|
|
38
|
+
'schema-version': 1 | 2 | 3;
|
|
39
39
|
'scaffold-version': string;
|
|
40
40
|
init_methodology: MethodologyName;
|
|
41
41
|
config_methodology: MethodologyName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAErF,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAErF,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;IAClB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,eAAe,CAAA;IACjC,kBAAkB,EAAE,eAAe,CAAA;IACnC,WAAW,EAAE,YAAY,GAAG,YAAY,GAAG,cAAc,CAAA;IACzD,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAA;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACrC,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,aAAa,EAAE,cAAc,EAAE,CAAA;CAChC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve an artifact path and verify it stays within the project root.
|
|
3
|
+
*
|
|
4
|
+
* Returns the canonicalized (symlink-resolved) absolute path if the target
|
|
5
|
+
* stays inside `projectRoot`. Returns `null` if:
|
|
6
|
+
* - `relPath` is not a non-empty string, or contains a null byte
|
|
7
|
+
* - the project root does not exist
|
|
8
|
+
* - the resolved target escapes the project root
|
|
9
|
+
* - a symlink anywhere in the path chain (including above a missing leaf)
|
|
10
|
+
* points outside the project root
|
|
11
|
+
* - any fs error other than ENOENT/ENOTDIR surfaces during canonicalization
|
|
12
|
+
* (EACCES, ELOOP, EINVAL, …) — we fail closed rather than guess
|
|
13
|
+
*
|
|
14
|
+
* TOCTOU note: callers MUST use the returned absolute path for all
|
|
15
|
+
* subsequent fs operations. Re-resolving `relPath` after this function
|
|
16
|
+
* returns reintroduces the race window between canonicalization and use.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveContainedArtifactPath(projectRoot: string, relPath: string): string | null;
|
|
19
|
+
//# sourceMappingURL=artifact-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-path.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-path.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CA2Bf"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve an artifact path and verify it stays within the project root.
|
|
5
|
+
*
|
|
6
|
+
* Returns the canonicalized (symlink-resolved) absolute path if the target
|
|
7
|
+
* stays inside `projectRoot`. Returns `null` if:
|
|
8
|
+
* - `relPath` is not a non-empty string, or contains a null byte
|
|
9
|
+
* - the project root does not exist
|
|
10
|
+
* - the resolved target escapes the project root
|
|
11
|
+
* - a symlink anywhere in the path chain (including above a missing leaf)
|
|
12
|
+
* points outside the project root
|
|
13
|
+
* - any fs error other than ENOENT/ENOTDIR surfaces during canonicalization
|
|
14
|
+
* (EACCES, ELOOP, EINVAL, …) — we fail closed rather than guess
|
|
15
|
+
*
|
|
16
|
+
* TOCTOU note: callers MUST use the returned absolute path for all
|
|
17
|
+
* subsequent fs operations. Re-resolving `relPath` after this function
|
|
18
|
+
* returns reintroduces the race window between canonicalization and use.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveContainedArtifactPath(projectRoot, relPath) {
|
|
21
|
+
// State is JSON-loaded with a trust-cast, so `relPath` may be any type at
|
|
22
|
+
// runtime. Reject non-strings, empty strings (would resolve to the project
|
|
23
|
+
// root itself — never a legitimate artifact), and null-byte injections.
|
|
24
|
+
if (typeof relPath !== 'string' || relPath === '' || relPath.includes('\0')) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const resolved = path.resolve(projectRoot, relPath);
|
|
28
|
+
let canonicalRoot;
|
|
29
|
+
try {
|
|
30
|
+
canonicalRoot = fs.realpathSync(projectRoot);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const canonicalPath = canonicalizeWithMissingTail(resolved);
|
|
36
|
+
if (canonicalPath === null)
|
|
37
|
+
return null;
|
|
38
|
+
if (!isContained(canonicalPath, canonicalRoot))
|
|
39
|
+
return null;
|
|
40
|
+
// Reject root-equivalent inputs ('.', './', an absolute path equal to the
|
|
41
|
+
// root, etc.). Callers never legitimately ask for the project root itself
|
|
42
|
+
// as an artifact, and accepting it would let existence-only call sites
|
|
43
|
+
// count the project root directory as a present artifact.
|
|
44
|
+
if (canonicalPath === canonicalRoot)
|
|
45
|
+
return null;
|
|
46
|
+
return canonicalPath;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Canonicalize a path whose leaf may not exist. Walk up until an ancestor
|
|
50
|
+
* exists, `realpathSync` it, then re-append the missing tail. This defeats
|
|
51
|
+
* symlink escape through intermediate directories even when the leaf is
|
|
52
|
+
* absent — a plain string-prefix check on the unresolved `path.resolve`
|
|
53
|
+
* output would miss this.
|
|
54
|
+
*
|
|
55
|
+
* Only climbs past ENOENT/ENOTDIR (genuine "does not exist" conditions).
|
|
56
|
+
* Any other errno (EACCES, ELOOP, EINVAL, Windows UNC/drive failures, …)
|
|
57
|
+
* returns null — we must not silently walk past a permission-denied
|
|
58
|
+
* ancestor and reach a canonical root that trivially passes containment.
|
|
59
|
+
*/
|
|
60
|
+
function canonicalizeWithMissingTail(target) {
|
|
61
|
+
let head = target;
|
|
62
|
+
const tail = [];
|
|
63
|
+
while (true) {
|
|
64
|
+
try {
|
|
65
|
+
const canonicalHead = fs.realpathSync(head);
|
|
66
|
+
return tail.length === 0 ? canonicalHead : path.join(canonicalHead, ...tail);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const code = err instanceof Error ? err.code : undefined;
|
|
70
|
+
if (code !== 'ENOENT' && code !== 'ENOTDIR')
|
|
71
|
+
return null;
|
|
72
|
+
const parent = path.dirname(head);
|
|
73
|
+
if (parent === head)
|
|
74
|
+
return null;
|
|
75
|
+
tail.unshift(path.basename(head));
|
|
76
|
+
head = parent;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function isContained(candidate, root) {
|
|
81
|
+
// `path.relative` normalizes the comparison across platforms (POSIX `/`,
|
|
82
|
+
// Windows drive roots, UNC shares) and naturally defeats both prefix
|
|
83
|
+
// collision (`/project` vs `/project-malicious` → `../project-malicious/…`)
|
|
84
|
+
// and root-slash edge cases (`/` + `path.sep` = `//`, which a manual
|
|
85
|
+
// `startsWith` check would mishandle).
|
|
86
|
+
const rel = path.relative(root, candidate);
|
|
87
|
+
if (rel === '')
|
|
88
|
+
return true; // candidate === root
|
|
89
|
+
if (rel === '..' || rel.startsWith('..' + path.sep))
|
|
90
|
+
return false;
|
|
91
|
+
if (path.isAbsolute(rel))
|
|
92
|
+
return false; // different Windows drive
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=artifact-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-path.js","sourceRoot":"","sources":["../../src/utils/artifact-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,4BAA4B,CAC1C,WAAmB,EACnB,OAAe;IAEf,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAEnD,IAAI,aAAqB,CAAA;IACzB,IAAI,CAAC;QACH,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IAC3D,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAEvC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,aAAa,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3D,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,0DAA0D;IAC1D,IAAI,aAAa,KAAK,aAAa;QAAE,OAAO,IAAI,CAAA;IAChD,OAAO,aAAa,CAAA;AACtB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,2BAA2B,CAAC,MAAc;IACjD,IAAI,IAAI,GAAG,MAAM,CAAA;IACjB,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,CAAA;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAE,GAA6B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;YACnF,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAA;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACjC,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;YACjC,IAAI,GAAG,MAAM,CAAA;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB,EAAE,IAAY;IAClD,yEAAyE;IACzE,qEAAqE;IACrE,4EAA4E;IAC5E,qEAAqE;IACrE,uCAAuC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC1C,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA,CAAC,qBAAqB;IACjD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IACjE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA,CAAC,0BAA0B;IACjE,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-path.test.d.ts","sourceRoot":"","sources":["../../src/utils/artifact-path.test.ts"],"names":[],"mappings":""}
|