@agent-teams/engineering-foundation 0.7.0 → 0.9.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 +6 -2
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.d.ts +6 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.js +7 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.d.ts +8 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.js +131 -0
- package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.d.ts +37 -0
- package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.js +258 -0
- package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.d.ts +52 -2
- package/dist/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.js +0 -3
- package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.d.ts +14 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.js +2 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.d.ts +5 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.js +2 -0
- package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.d.ts +2 -0
- package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.js +10 -1
- package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/contract/config.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/contract/config.js +30 -15
- package/dist/capabilities/contract-protobuf-evolution/contract/config.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/module.d.ts +3 -1
- package/dist/capabilities/contract-protobuf-evolution/module.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/module.js +4 -1
- package/dist/capabilities/contract-protobuf-evolution/module.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.d.ts +21 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js +301 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.d.ts +2 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.js +28 -41
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.d.ts +8 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.js +102 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/module.d.ts +14 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/module.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/qualification/module.js +22 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/module.js.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.d.ts +21 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.js +2 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.d.ts +18 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.js +2 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.js.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.d.ts +22 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.d.ts.map +1 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.js +221 -0
- package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.js +1 -14
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/public-api-baseline-mapper.d.ts +4 -4
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/public-api-baseline-mapper.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/public-api-baseline-mapper.js +34 -46
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/public-api-baseline-mapper.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts +18 -75
- package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/model/public-api.js +7 -29
- package/dist/capabilities/public-api-compatibility/application/model/public-api.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/accepted-breaking-change.d.ts +1 -5
- package/dist/capabilities/public-api-compatibility/application/policies/accepted-breaking-change.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/accepted-breaking-change.js +1 -8
- package/dist/capabilities/public-api-compatibility/application/policies/accepted-breaking-change.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.js +5 -38
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/validate-package-export-coverage.d.ts +1 -1
- package/dist/capabilities/public-api-compatibility/application/policies/validate-package-export-coverage.js +2 -2
- package/dist/capabilities/public-api-compatibility/application/policies/validate-package-export-coverage.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.js +0 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js +0 -38
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js.map +1 -1
- package/dist/capabilities/public-api-compatibility/contract/config.d.ts +1 -1
- package/dist/capabilities/public-api-compatibility/contract/config.d.ts.map +1 -1
- package/dist/capabilities/public-api-compatibility/contract/config.js +32 -106
- package/dist/capabilities/public-api-compatibility/contract/config.js.map +1 -1
- package/dist/cli-arguments.d.ts +2 -0
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +34 -2
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli.js +40 -1
- package/dist/cli.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts +13 -0
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js +257 -0
- package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-authority.d.ts +20 -0
- package/dist/scaffolding/adapters/node/filesystem-authority.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-authority.js +55 -0
- package/dist/scaffolding/adapters/node/filesystem-authority.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts +20 -0
- package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-file-identity.js +122 -0
- package/dist/scaffolding/adapters/node/filesystem-file-identity.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts +22 -0
- package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-finalization.js +169 -0
- package/dist/scaffolding/adapters/node/filesystem-finalization.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-journal-state.d.ts +25 -0
- package/dist/scaffolding/adapters/node/filesystem-journal-state.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-journal-state.js +119 -0
- package/dist/scaffolding/adapters/node/filesystem-journal-state.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-journal.d.ts +7 -4
- package/dist/scaffolding/adapters/node/filesystem-journal.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-journal.js +104 -29
- package/dist/scaffolding/adapters/node/filesystem-journal.js.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts +16 -0
- package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-operation-state.js +158 -0
- package/dist/scaffolding/adapters/node/filesystem-operation-state.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-path-guard.d.ts +2 -2
- package/dist/scaffolding/adapters/node/filesystem-path-guard.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-path-guard.js.map +1 -1
- package/dist/scaffolding/adapters/node/node-authority-error.d.ts +4 -0
- package/dist/scaffolding/adapters/node/node-authority-error.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-authority-error.js +7 -0
- package/dist/scaffolding/adapters/node/node-authority-error.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-authority-input-loader.d.ts +20 -0
- package/dist/scaffolding/adapters/node/node-authority-input-loader.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-authority-input-loader.js +180 -0
- package/dist/scaffolding/adapters/node/node-authority-input-loader.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-authority-receipt-validator.d.ts +4 -0
- package/dist/scaffolding/adapters/node/node-authority-receipt-validator.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-authority-receipt-validator.js +10 -0
- package/dist/scaffolding/adapters/node/node-authority-receipt-validator.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-owner-document-resolver.d.ts +17 -0
- package/dist/scaffolding/adapters/node/node-owner-document-resolver.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-owner-document-resolver.js +161 -0
- package/dist/scaffolding/adapters/node/node-owner-document-resolver.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-plan-authority.d.ts +14 -2
- package/dist/scaffolding/adapters/node/node-plan-authority.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/node-plan-authority.js +28 -9
- package/dist/scaffolding/adapters/node/node-plan-authority.js.map +1 -1
- package/dist/scaffolding/adapters/node/node-repository-file.d.ts +9 -0
- package/dist/scaffolding/adapters/node/node-repository-file.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-repository-file.js +65 -0
- package/dist/scaffolding/adapters/node/node-repository-file.js.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-limits.d.ts +2 -0
- package/dist/scaffolding/adapters/node/node-scaffold-limits.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-scaffold-limits.js +2 -0
- package/dist/scaffolding/adapters/node/node-scaffold-limits.js.map +1 -0
- package/dist/scaffolding/authority-service.d.ts +7 -0
- package/dist/scaffolding/authority-service.d.ts.map +1 -0
- package/dist/scaffolding/authority-service.js +15 -0
- package/dist/scaffolding/authority-service.js.map +1 -0
- package/dist/scaffolding/canonical-api.d.ts +14 -0
- package/dist/scaffolding/canonical-api.d.ts.map +1 -0
- package/dist/scaffolding/canonical-api.js +32 -0
- package/dist/scaffolding/canonical-api.js.map +1 -0
- package/dist/scaffolding/cli-command.d.ts.map +1 -1
- package/dist/scaffolding/cli-command.js +1 -2
- package/dist/scaffolding/cli-command.js.map +1 -1
- package/dist/scaffolding/contract/receipt-authority-types.d.ts +125 -0
- package/dist/scaffolding/contract/receipt-authority-types.d.ts.map +1 -0
- package/dist/scaffolding/contract/receipt-authority-types.js +2 -0
- package/dist/scaffolding/contract/receipt-authority-types.js.map +1 -0
- package/dist/scaffolding/contract/scaffold-contract.d.ts +329 -0
- package/dist/scaffolding/contract/scaffold-contract.d.ts.map +1 -0
- package/dist/scaffolding/contract/scaffold-contract.js +2 -0
- package/dist/scaffolding/contract/scaffold-contract.js.map +1 -0
- package/dist/scaffolding/contract/types.d.ts +130 -193
- package/dist/scaffolding/contract/types.d.ts.map +1 -1
- package/dist/scaffolding/definitions/node-typescript-library.d.ts +3 -0
- package/dist/scaffolding/definitions/node-typescript-library.d.ts.map +1 -0
- package/dist/scaffolding/definitions/node-typescript-library.js +134 -0
- package/dist/scaffolding/definitions/node-typescript-library.js.map +1 -0
- package/dist/scaffolding/definitions/registry.d.ts +1 -1
- package/dist/scaffolding/definitions/registry.d.ts.map +1 -1
- package/dist/scaffolding/definitions/registry.js +6 -2
- package/dist/scaffolding/definitions/registry.js.map +1 -1
- package/dist/scaffolding/index.d.ts +4 -8
- package/dist/scaffolding/index.d.ts.map +1 -1
- package/dist/scaffolding/index.js +2 -7
- package/dist/scaffolding/index.js.map +1 -1
- package/dist/scaffolding/kernel/authority-compiler.d.ts +4 -0
- package/dist/scaffolding/kernel/authority-compiler.d.ts.map +1 -0
- package/dist/scaffolding/kernel/authority-compiler.js +78 -0
- package/dist/scaffolding/kernel/authority-compiler.js.map +1 -0
- package/dist/scaffolding/kernel/authority-evidence.d.ts +13 -0
- package/dist/scaffolding/kernel/authority-evidence.d.ts.map +1 -0
- package/dist/scaffolding/kernel/authority-evidence.js +79 -0
- package/dist/scaffolding/kernel/authority-evidence.js.map +1 -0
- package/dist/scaffolding/kernel/authority-receipt.d.ts +11 -0
- package/dist/scaffolding/kernel/authority-receipt.d.ts.map +1 -0
- package/dist/scaffolding/kernel/authority-receipt.js +189 -0
- package/dist/scaffolding/kernel/authority-receipt.js.map +1 -0
- package/dist/scaffolding/kernel/compiler.d.ts +28 -2
- package/dist/scaffolding/kernel/compiler.d.ts.map +1 -1
- package/dist/scaffolding/kernel/compiler.js +22 -36
- package/dist/scaffolding/kernel/compiler.js.map +1 -1
- package/dist/scaffolding/kernel/definition-registry.d.ts +6 -3
- package/dist/scaffolding/kernel/definition-registry.d.ts.map +1 -1
- package/dist/scaffolding/kernel/definition-registry.js +17 -1
- package/dist/scaffolding/kernel/definition-registry.js.map +1 -1
- package/dist/scaffolding/kernel/plan-content-validation.d.ts +3 -0
- package/dist/scaffolding/kernel/plan-content-validation.d.ts.map +1 -0
- package/dist/scaffolding/kernel/plan-content-validation.js +44 -0
- package/dist/scaffolding/kernel/plan-content-validation.js.map +1 -0
- package/dist/scaffolding/kernel/plan-validation.d.ts +2 -2
- package/dist/scaffolding/kernel/plan-validation.d.ts.map +1 -1
- package/dist/scaffolding/kernel/plan-validation.js +16 -40
- package/dist/scaffolding/kernel/plan-validation.js.map +1 -1
- package/dist/scaffolding/scaffold-defaults.d.ts +2 -0
- package/dist/scaffolding/scaffold-defaults.d.ts.map +1 -0
- package/dist/scaffolding/scaffold-defaults.js +2 -0
- package/dist/scaffolding/scaffold-defaults.js.map +1 -0
- package/dist/scaffolding/scaffold-error.d.ts +3 -3
- package/dist/scaffolding/scaffold-error.d.ts.map +1 -1
- package/dist/scaffolding/scaffold-error.js.map +1 -1
- package/dist/schema-catalog.d.ts +2 -2
- package/dist/schema-catalog.d.ts.map +1 -1
- package/dist/schema-catalog.js +41 -8
- package/dist/schema-catalog.js.map +1 -1
- package/dist/schema-ids.d.ts +2 -1
- package/dist/schema-ids.d.ts.map +1 -1
- package/dist/schema-ids.js +3 -2
- package/dist/schema-ids.js.map +1 -1
- package/package.json +25 -2
- package/schemas/contract-protobuf-breaking-qualification/v1.schema.json +93 -0
- package/schemas/contract-protobuf-evolution/v1.schema.json +47 -15
- package/schemas/package-public-api-baseline/v1.schema.json +49 -12
- package/schemas/package-public-api-compatibility/v1.schema.json +46 -5
- package/schemas/scaffold-authority-evidence/v1.schema.json +103 -0
- package/schemas/scaffold-intent/v1.schema.json +1 -1
- package/schemas/scaffold-plan/v1.schema.json +86 -8
- package/schemas/scaffold-receipt/v1.schema.json +102 -221
- package/schemas/scaffold-recovery-journal/v1.schema.json +31 -0
- package/schemas/scaffold-target-catalog/v1.schema.json +9 -8
- package/schemas/scaffolding-config/v1.schema.json +38 -2
- package/dist/scaffolding/adapters/memory/memory-workspace.d.ts +0 -9
- package/dist/scaffolding/adapters/memory/memory-workspace.d.ts.map +0 -1
- package/dist/scaffolding/adapters/memory/memory-workspace.js +0 -93
- package/dist/scaffolding/adapters/memory/memory-workspace.js.map +0 -1
- package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts +0 -13
- package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts.map +0 -1
- package/dist/scaffolding/adapters/node/filesystem-workspace.js +0 -336
- package/dist/scaffolding/adapters/node/filesystem-workspace.js.map +0 -1
- package/dist/scaffolding/adapters/node/node-input-loader.d.ts +0 -17
- package/dist/scaffolding/adapters/node/node-input-loader.d.ts.map +0 -1
- package/dist/scaffolding/adapters/node/node-input-loader.js +0 -157
- package/dist/scaffolding/adapters/node/node-input-loader.js.map +0 -1
- package/dist/scaffolding/adapters/node/node-receipt-validator.d.ts +0 -4
- package/dist/scaffolding/adapters/node/node-receipt-validator.d.ts.map +0 -1
- package/dist/scaffolding/adapters/node/node-receipt-validator.js +0 -10
- package/dist/scaffolding/adapters/node/node-receipt-validator.js.map +0 -1
- package/dist/scaffolding/kernel/receipt.d.ts +0 -35
- package/dist/scaffolding/kernel/receipt.d.ts.map +0 -1
- package/dist/scaffolding/kernel/receipt.js +0 -206
- package/dist/scaffolding/kernel/receipt.js.map +0 -1
- package/dist/scaffolding/service.d.ts +0 -8
- package/dist/scaffolding/service.d.ts.map +0 -1
- package/dist/scaffolding/service.js +0 -15
- package/dist/scaffolding/service.js.map +0 -1
- package/schemas/package-public-api-baseline/v2.schema.json +0 -62
- package/schemas/package-public-api-compatibility/v2.schema.json +0 -113
package/README.md
CHANGED
|
@@ -8,8 +8,12 @@ tooling. It is not a production runtime dependency.
|
|
|
8
8
|
|
|
9
9
|
It also exposes a closed deterministic scaffolding kernel through
|
|
10
10
|
`@agent-teams/engineering-foundation/scaffolding`. Consumers provide strict
|
|
11
|
-
data-only Intent, Composition,
|
|
12
|
-
|
|
11
|
+
data-only Intent, Composition, target-catalog, and owner-document files. The
|
|
12
|
+
catalog binds each target to one owner document ID. Foundation resolves that ID
|
|
13
|
+
from bounded document roots, records the derived path, and independently
|
|
14
|
+
verifies the allowed owner status before planning, applying, or recovering.
|
|
15
|
+
Consumers cannot provide templates, hooks, callbacks, commands, or definition
|
|
16
|
+
plugins.
|
|
13
17
|
|
|
14
18
|
Consumer CI should run both policy gates:
|
|
15
19
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Sha256DigestPort } from "../../../application/ports/sha256-digest.js";
|
|
2
|
+
import type { Sha256Digest } from "../../../application/model/protobuf-release-evidence.js";
|
|
3
|
+
export declare class NodeSha256Digest implements Sha256DigestPort {
|
|
4
|
+
digest(value: string | Uint8Array): Sha256Digest;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=node-sha256-digest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-sha256-digest.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAE5F,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,YAAY,CAE/C;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-sha256-digest.js","sourceRoot":"","sources":["../../../../../../src/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CAAC,KAA0B;QAC/B,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtE,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BufBreakingQualificationEvidencePort, ReadBufBreakingQualificationEvidenceInput, ResolvedBufBreakingQualificationEvidence } from "../../../application/ports/buf-breaking-qualification-evidence.js";
|
|
2
|
+
import type { Sha256DigestPort } from "../../../application/ports/sha256-digest.js";
|
|
3
|
+
export declare class FilesystemBufBreakingQualificationEvidence implements BufBreakingQualificationEvidencePort {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(digest?: Sha256DigestPort);
|
|
6
|
+
read(input: ReadBufBreakingQualificationEvidenceInput): Promise<ResolvedBufBreakingQualificationEvidence>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=filesystem-buf-breaking-qualification-evidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-buf-breaking-qualification-evidence.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EACV,oCAAoC,EACpC,yCAAyC,EACzC,wCAAwC,EACzC,MAAM,mEAAmE,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAgEpF,qBAAa,0CACb,YAAW,oCAAoC;;IAG7C,YAAY,MAAM,GAAE,gBAAyC,EAE5D;IAEK,IAAI,CACR,KAAK,EAAE,yCAAyC,GAC/C,OAAO,CAAC,wCAAwC,CAAC,CAwGnD;CACF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { CapabilityInputError } from "../../../../../capability-runtime.js";
|
|
3
|
+
import { ContainedFileReadError, readContainedRegularFile } from "../../../../../filesystem-path-safety.js";
|
|
4
|
+
import { assertSchema } from "../../../../../schema-catalog.js";
|
|
5
|
+
import { assertNotCancelled, parseStrictYamlSource } from "../../../../../strict-yaml.js";
|
|
6
|
+
import { assertExactBufFilePolicy, BUF_FILE_BREAKING_CONFIG_SOURCE, canonicalBufFindingSet, canonicalBufQualificationEvidence, canonicalBufQualificationInvocation, mapBufBreakingQualificationEvidence, qualificationInvocationInput } from "../../../application/model/buf-breaking-qualification.js";
|
|
7
|
+
import { NodeSha256Digest } from "../crypto/node-sha256-digest.js";
|
|
8
|
+
const MAX_BUF_CONFIG_BYTES = 1024 * 1024;
|
|
9
|
+
const MAX_DESCRIPTOR_BYTES = 64 * 1024 * 1024;
|
|
10
|
+
const MAX_EVIDENCE_BYTES = 8 * 1024 * 1024;
|
|
11
|
+
function inputError(code, message) {
|
|
12
|
+
throw new CapabilityInputError({
|
|
13
|
+
code,
|
|
14
|
+
message,
|
|
15
|
+
phase: "protobuf-buf-qualification-evidence",
|
|
16
|
+
retryable: false
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function readQualificationFile(input) {
|
|
20
|
+
try {
|
|
21
|
+
return await readContainedRegularFile({
|
|
22
|
+
candidate: resolve(input.consumerRoot, input.path),
|
|
23
|
+
maxBytes: input.maxBytes,
|
|
24
|
+
root: input.consumerRoot
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (!(error instanceof ContainedFileReadError)) {
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
inputError(error.failure === "symlink" || error.failure === "escape"
|
|
32
|
+
? "BUF_QUALIFICATION_PATH_UNSAFE"
|
|
33
|
+
: "BUF_QUALIFICATION_INPUT_UNAVAILABLE", `${input.label} is unavailable, unsafe, or changed while reading: ${input.path}.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function withoutEvidenceDigest(evidence) {
|
|
37
|
+
return {
|
|
38
|
+
schemaVersion: evidence.schemaVersion,
|
|
39
|
+
producerId: evidence.producerId,
|
|
40
|
+
producerVersion: evidence.producerVersion,
|
|
41
|
+
policy: evidence.policy,
|
|
42
|
+
contractId: evidence.contractId,
|
|
43
|
+
bufVersion: evidence.bufVersion,
|
|
44
|
+
modulePath: evidence.modulePath,
|
|
45
|
+
bufConfigPath: evidence.bufConfigPath,
|
|
46
|
+
evidencePath: evidence.evidencePath,
|
|
47
|
+
bufConfigDigest: evidence.bufConfigDigest,
|
|
48
|
+
baselineDescriptorImagePath: evidence.baselineDescriptorImagePath,
|
|
49
|
+
baselineDescriptorImageDigest: evidence.baselineDescriptorImageDigest,
|
|
50
|
+
candidateDescriptorImageDigest: evidence.candidateDescriptorImageDigest,
|
|
51
|
+
breakingPolicyConfigDigest: evidence.breakingPolicyConfigDigest,
|
|
52
|
+
invocationDigest: evidence.invocationDigest,
|
|
53
|
+
result: evidence.result
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export class FilesystemBufBreakingQualificationEvidence {
|
|
57
|
+
#digest;
|
|
58
|
+
constructor(digest = new NodeSha256Digest()) {
|
|
59
|
+
this.#digest = digest;
|
|
60
|
+
}
|
|
61
|
+
async read(input) {
|
|
62
|
+
assertNotCancelled(input.signal);
|
|
63
|
+
const { configuration } = input;
|
|
64
|
+
const evidenceBytes = await readQualificationFile({
|
|
65
|
+
consumerRoot: input.consumerRoot,
|
|
66
|
+
path: configuration.qualification.evidencePath,
|
|
67
|
+
maxBytes: MAX_EVIDENCE_BYTES,
|
|
68
|
+
label: "Buf qualification evidence"
|
|
69
|
+
});
|
|
70
|
+
assertNotCancelled(input.signal);
|
|
71
|
+
const rawEvidence = parseStrictYamlSource(evidenceBytes.toString("utf8"), "protobuf-buf-qualification-evidence");
|
|
72
|
+
await assertSchema("contract-protobuf-breaking-qualification/v1", rawEvidence, "protobuf-buf-qualification-evidence");
|
|
73
|
+
const evidence = mapBufBreakingQualificationEvidence(rawEvidence);
|
|
74
|
+
const [bufConfigBytes, baselineDescriptorBytes] = await Promise.all([
|
|
75
|
+
readQualificationFile({
|
|
76
|
+
consumerRoot: input.consumerRoot,
|
|
77
|
+
path: configuration.qualification.bufConfigPath,
|
|
78
|
+
maxBytes: MAX_BUF_CONFIG_BYTES,
|
|
79
|
+
label: "Buf configuration"
|
|
80
|
+
}),
|
|
81
|
+
readQualificationFile({
|
|
82
|
+
consumerRoot: input.consumerRoot,
|
|
83
|
+
path: configuration.qualification.releasedDescriptorImagePath,
|
|
84
|
+
maxBytes: MAX_DESCRIPTOR_BYTES,
|
|
85
|
+
label: "Released descriptor image"
|
|
86
|
+
})
|
|
87
|
+
]);
|
|
88
|
+
assertNotCancelled(input.signal);
|
|
89
|
+
assertExactBufFilePolicy(parseStrictYamlSource(bufConfigBytes.toString("utf8"), "protobuf-buf-config"));
|
|
90
|
+
const observedBufConfigDigest = this.#digest.digest(bufConfigBytes);
|
|
91
|
+
const observedBaselineDigest = this.#digest.digest(baselineDescriptorBytes);
|
|
92
|
+
const expectedBreakingPolicyConfigDigest = this.#digest.digest(BUF_FILE_BREAKING_CONFIG_SOURCE);
|
|
93
|
+
const expectedInvocationDigest = this.#digest.digest(canonicalBufQualificationInvocation(qualificationInvocationInput({
|
|
94
|
+
...configuration,
|
|
95
|
+
breakingPolicyConfigDigest: expectedBreakingPolicyConfigDigest
|
|
96
|
+
})));
|
|
97
|
+
const expectedFindingSetDigest = this.#digest.digest(canonicalBufFindingSet(evidence.result.findings));
|
|
98
|
+
const expectedEvidenceDigest = this.#digest.digest(canonicalBufQualificationEvidence(withoutEvidenceDigest(evidence)));
|
|
99
|
+
const bindingsMatch = evidence.contractId === configuration.current.contractId &&
|
|
100
|
+
evidence.bufVersion === configuration.current.bufVersion &&
|
|
101
|
+
evidence.modulePath === configuration.qualification.modulePath &&
|
|
102
|
+
evidence.bufConfigPath === configuration.qualification.bufConfigPath &&
|
|
103
|
+
evidence.evidencePath === configuration.qualification.evidencePath &&
|
|
104
|
+
evidence.bufConfigDigest === configuration.current.bufConfigDigest &&
|
|
105
|
+
evidence.baselineDescriptorImagePath ===
|
|
106
|
+
configuration.qualification.releasedDescriptorImagePath &&
|
|
107
|
+
evidence.baselineDescriptorImageDigest === configuration.released.descriptorImageDigest &&
|
|
108
|
+
evidence.candidateDescriptorImageDigest === configuration.current.descriptorImageDigest &&
|
|
109
|
+
evidence.breakingPolicyConfigDigest === expectedBreakingPolicyConfigDigest;
|
|
110
|
+
if (!bindingsMatch) {
|
|
111
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_MISMATCH", "Buf qualification evidence is stale or does not match the declared contract, toolchain, paths, baseline, or candidate.");
|
|
112
|
+
}
|
|
113
|
+
if (observedBufConfigDigest !== configuration.current.bufConfigDigest ||
|
|
114
|
+
observedBaselineDigest !== configuration.released.descriptorImageDigest) {
|
|
115
|
+
inputError("BUF_QUALIFICATION_INPUT_DIGEST_MISMATCH", "Buf configuration or released descriptor bytes do not match declared digests.");
|
|
116
|
+
}
|
|
117
|
+
if (evidence.invocationDigest !== expectedInvocationDigest ||
|
|
118
|
+
evidence.result.findingSetDigest !== expectedFindingSetDigest ||
|
|
119
|
+
evidence.evidenceDigest !== expectedEvidenceDigest) {
|
|
120
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_DIGEST_MISMATCH", "Buf qualification evidence contains a stale or fabricated deterministic digest.");
|
|
121
|
+
}
|
|
122
|
+
return Object.freeze({
|
|
123
|
+
breaking: Object.freeze({
|
|
124
|
+
status: evidence.result.status,
|
|
125
|
+
fingerprint: evidence.evidenceDigest
|
|
126
|
+
}),
|
|
127
|
+
releasedDescriptorImageDigest: evidence.baselineDescriptorImageDigest
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=filesystem-buf-breaking-qualification-evidence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-buf-breaking-qualification-evidence.js","sourceRoot":"","sources":["../../../../../../src/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { BufBreakingFinding, BufBreakingQualificationBinding, BufBreakingQualificationEvidence, CurrentProtobufContractDeclaration, ReleasedProtobufContractEvidence, Sha256Digest } from "./protobuf-release-evidence.js";
|
|
2
|
+
export declare const BUF_QUALIFICATION_PRODUCER_ID: "agent-teams-foundation.buf-breaking-qualification";
|
|
3
|
+
export declare const BUF_QUALIFICATION_PRODUCER_VERSION: 1;
|
|
4
|
+
export declare const BUF_QUALIFICATION_SCHEMA_VERSION: 1;
|
|
5
|
+
export declare const BUF_BREAKING_POLICY: "FILE";
|
|
6
|
+
export declare const BUF_FILE_BREAKING_CONFIG_SOURCE: '{"version":"v2","modules":[{"path":"."}],"breaking":{"use":["FILE"]}}';
|
|
7
|
+
export declare function bufQualificationInvocationPlan(input: {
|
|
8
|
+
readonly baselineDescriptorPath: string;
|
|
9
|
+
readonly bufConfigPath: string;
|
|
10
|
+
readonly candidateDescriptorPath: string;
|
|
11
|
+
readonly modulePath: string;
|
|
12
|
+
}): {
|
|
13
|
+
readonly breakingArguments: readonly string[];
|
|
14
|
+
readonly buildArguments: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
export declare function assertExactBufFilePolicy(value: unknown): void;
|
|
17
|
+
export declare function sortAndValidateBufFindings(values: readonly BufBreakingFinding[]): readonly BufBreakingFinding[];
|
|
18
|
+
export declare function mapBufBreakingQualificationEvidence(value: unknown): BufBreakingQualificationEvidence;
|
|
19
|
+
export declare function canonicalBufFindingSet(findings: readonly BufBreakingFinding[]): string;
|
|
20
|
+
export declare function canonicalBufQualificationInvocation(input: {
|
|
21
|
+
readonly binding: BufBreakingQualificationBinding;
|
|
22
|
+
readonly contractId: string;
|
|
23
|
+
readonly bufVersion: string;
|
|
24
|
+
readonly bufConfigDigest: Sha256Digest;
|
|
25
|
+
readonly baselineDescriptorImageDigest: Sha256Digest;
|
|
26
|
+
readonly candidateDescriptorImageDigest: Sha256Digest;
|
|
27
|
+
readonly breakingPolicyConfigDigest: Sha256Digest;
|
|
28
|
+
}): string;
|
|
29
|
+
export declare function canonicalBufQualificationEvidence(evidence: Omit<BufBreakingQualificationEvidence, "evidenceDigest">): string;
|
|
30
|
+
export declare function serializeBufQualificationEvidence(evidence: BufBreakingQualificationEvidence): string;
|
|
31
|
+
export declare function qualificationInvocationInput(input: {
|
|
32
|
+
readonly qualification: BufBreakingQualificationBinding;
|
|
33
|
+
readonly current: CurrentProtobufContractDeclaration;
|
|
34
|
+
readonly released: ReleasedProtobufContractEvidence;
|
|
35
|
+
readonly breakingPolicyConfigDigest: Sha256Digest;
|
|
36
|
+
}): Parameters<typeof canonicalBufQualificationInvocation>[0];
|
|
37
|
+
//# sourceMappingURL=buf-breaking-qualification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buf-breaking-qualification.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,kCAAkC,EAClC,gCAAgC,EAChC,YAAY,EACb,MAAM,gCAAgC,CAAC;AAExC,eAAO,MAAM,6BAA6B,EACxC,mDAA4D,CAAC;AAC/D,eAAO,MAAM,kCAAkC,EAAG,CAAU,CAAC;AAC7D,eAAO,MAAM,gCAAgC,EAAG,CAAU,CAAC;AAC3D,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AACnD,eAAO,MAAM,+BAA+B,EAC1C,uEAAgF,CAAC;AAKnF,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,GAAG;IACF,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C,CAwBA;AA4BD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAe7D;AA8DD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,SAAS,kBAAkB,EAAE,CAkB/B;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,OAAO,GACb,gCAAgC,CA6ElC;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,MAAM,CAYR;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,QAAQ,CAAC,OAAO,EAAE,+BAA+B,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,QAAQ,CAAC,6BAA6B,EAAE,YAAY,CAAC;IACrD,QAAQ,CAAC,8BAA8B,EAAE,YAAY,CAAC;IACtD,QAAQ,CAAC,0BAA0B,EAAE,YAAY,CAAC;CACnD,GAAG,MAAM,CAyBT;AAED,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,IAAI,CAAC,gCAAgC,EAAE,gBAAgB,CAAC,GACjE,MAAM,CAgCR;AAED,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,gCAAgC,GACzC,MAAM,CAER;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,QAAQ,CAAC,aAAa,EAAE,+BAA+B,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;IACpD,QAAQ,CAAC,0BAA0B,EAAE,YAAY,CAAC;CACnD,GAAG,UAAU,CAAC,OAAO,mCAAmC,CAAC,CAAC,CAAC,CAAC,CAU5D"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { compareBinaryStrings } from "../../../../binary-string-comparator.js";
|
|
2
|
+
import { CapabilityInputError } from "../../../../capability-runtime.js";
|
|
3
|
+
export const BUF_QUALIFICATION_PRODUCER_ID = "agent-teams-foundation.buf-breaking-qualification";
|
|
4
|
+
export const BUF_QUALIFICATION_PRODUCER_VERSION = 1;
|
|
5
|
+
export const BUF_QUALIFICATION_SCHEMA_VERSION = 1;
|
|
6
|
+
export const BUF_BREAKING_POLICY = "FILE";
|
|
7
|
+
export const BUF_FILE_BREAKING_CONFIG_SOURCE = '{"version":"v2","modules":[{"path":"."}],"breaking":{"use":["FILE"]}}';
|
|
8
|
+
const SHA256_DIGEST = /^sha256:[a-f0-9]{64}$/u;
|
|
9
|
+
const MAX_FINDINGS = 10_000;
|
|
10
|
+
export function bufQualificationInvocationPlan(input) {
|
|
11
|
+
return Object.freeze({
|
|
12
|
+
buildArguments: Object.freeze([
|
|
13
|
+
"build",
|
|
14
|
+
input.modulePath,
|
|
15
|
+
"--config",
|
|
16
|
+
input.bufConfigPath,
|
|
17
|
+
"--disable-symlinks",
|
|
18
|
+
"-o",
|
|
19
|
+
input.candidateDescriptorPath
|
|
20
|
+
]),
|
|
21
|
+
breakingArguments: Object.freeze([
|
|
22
|
+
"breaking",
|
|
23
|
+
input.candidateDescriptorPath,
|
|
24
|
+
"--against",
|
|
25
|
+
input.baselineDescriptorPath,
|
|
26
|
+
"--config",
|
|
27
|
+
BUF_FILE_BREAKING_CONFIG_SOURCE,
|
|
28
|
+
"--against-config",
|
|
29
|
+
BUF_FILE_BREAKING_CONFIG_SOURCE,
|
|
30
|
+
"--disable-symlinks",
|
|
31
|
+
"--error-format=json"
|
|
32
|
+
])
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function hasControlCharacter(value) {
|
|
36
|
+
for (const character of value) {
|
|
37
|
+
const code = character.codePointAt(0);
|
|
38
|
+
if (code !== undefined && (code <= 0x1f || code === 0x7f)) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
function inputError(code, message) {
|
|
45
|
+
throw new CapabilityInputError({
|
|
46
|
+
code,
|
|
47
|
+
message,
|
|
48
|
+
phase: "protobuf-buf-qualification-evidence",
|
|
49
|
+
retryable: false
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function record(value, field) {
|
|
53
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
54
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", `${field} must be an object.`);
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
export function assertExactBufFilePolicy(value) {
|
|
59
|
+
const config = record(value, "Buf config");
|
|
60
|
+
const breaking = record(config["breaking"], "Buf config breaking");
|
|
61
|
+
if (Object.keys(breaking).length !== 1 ||
|
|
62
|
+
!Object.hasOwn(breaking, "use") ||
|
|
63
|
+
!Array.isArray(breaking["use"]) ||
|
|
64
|
+
breaking["use"].length !== 1 ||
|
|
65
|
+
breaking["use"][0] !== BUF_BREAKING_POLICY) {
|
|
66
|
+
inputError("BUF_FILE_POLICY_INVALID", "Buf breaking configuration must contain exactly use: [FILE] without exclusions.");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function string(value, field, maximum = 1000) {
|
|
70
|
+
if (typeof value !== "string" ||
|
|
71
|
+
value.length === 0 ||
|
|
72
|
+
value.length > maximum ||
|
|
73
|
+
hasControlCharacter(value)) {
|
|
74
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", `${field} must be a bounded printable string.`);
|
|
75
|
+
}
|
|
76
|
+
return value;
|
|
77
|
+
}
|
|
78
|
+
function integer(value, field) {
|
|
79
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
80
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", `${field} must be a positive safe integer.`);
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
function digest(value, field) {
|
|
85
|
+
if (typeof value !== "string" || !SHA256_DIGEST.test(value)) {
|
|
86
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", `${field} must be a lowercase sha256 digest.`);
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
function findingKey(finding) {
|
|
91
|
+
return [
|
|
92
|
+
finding.path,
|
|
93
|
+
finding.startLine,
|
|
94
|
+
finding.startColumn,
|
|
95
|
+
finding.endLine,
|
|
96
|
+
finding.endColumn,
|
|
97
|
+
finding.type,
|
|
98
|
+
finding.message
|
|
99
|
+
].join("\u0000");
|
|
100
|
+
}
|
|
101
|
+
function mapFinding(value, index) {
|
|
102
|
+
const source = record(value, `result.findings[${index}]`);
|
|
103
|
+
return Object.freeze({
|
|
104
|
+
path: string(source["path"], `result.findings[${index}].path`, 500),
|
|
105
|
+
startLine: integer(source["startLine"], `result.findings[${index}].startLine`),
|
|
106
|
+
startColumn: integer(source["startColumn"], `result.findings[${index}].startColumn`),
|
|
107
|
+
endLine: integer(source["endLine"], `result.findings[${index}].endLine`),
|
|
108
|
+
endColumn: integer(source["endColumn"], `result.findings[${index}].endColumn`),
|
|
109
|
+
type: string(source["type"], `result.findings[${index}].type`, 240),
|
|
110
|
+
message: string(source["message"], `result.findings[${index}].message`, 4000)
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
export function sortAndValidateBufFindings(values) {
|
|
114
|
+
if (values.length > MAX_FINDINGS) {
|
|
115
|
+
inputError("BUF_QUALIFICATION_FINDINGS_INVALID", `Buf breaking output exceeds the supported ${MAX_FINDINGS} finding limit.`);
|
|
116
|
+
}
|
|
117
|
+
const sorted = values.toSorted((left, right) => compareBinaryStrings(findingKey(left), findingKey(right)));
|
|
118
|
+
const keys = sorted.map(findingKey);
|
|
119
|
+
if (new Set(keys).size !== keys.length) {
|
|
120
|
+
inputError("BUF_QUALIFICATION_FINDINGS_INVALID", "Buf breaking output contains duplicate findings.");
|
|
121
|
+
}
|
|
122
|
+
return Object.freeze(sorted.map((finding) => Object.freeze({ ...finding })));
|
|
123
|
+
}
|
|
124
|
+
export function mapBufBreakingQualificationEvidence(value) {
|
|
125
|
+
const source = record(value, "qualification evidence");
|
|
126
|
+
const result = record(source["result"], "result");
|
|
127
|
+
if (!Array.isArray(result["findings"])) {
|
|
128
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", "result.findings must be an array.");
|
|
129
|
+
}
|
|
130
|
+
const mappedFindings = result["findings"].map((finding, index) => mapFinding(finding, index));
|
|
131
|
+
const findings = sortAndValidateBufFindings(mappedFindings);
|
|
132
|
+
if (mappedFindings.some((finding, index) => findingKey(finding) !== findingKey(findings[index]))) {
|
|
133
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", "Buf qualification findings must be stored in deterministic order.");
|
|
134
|
+
}
|
|
135
|
+
const status = result["status"];
|
|
136
|
+
if (status !== "compatible" && status !== "breaking") {
|
|
137
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", "result.status is invalid.");
|
|
138
|
+
}
|
|
139
|
+
if ((status === "compatible" && findings.length !== 0) ||
|
|
140
|
+
(status === "breaking" && findings.length === 0)) {
|
|
141
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", "Buf result status and finding count are inconsistent.");
|
|
142
|
+
}
|
|
143
|
+
if (source["schemaVersion"] !== BUF_QUALIFICATION_SCHEMA_VERSION ||
|
|
144
|
+
source["producerId"] !== BUF_QUALIFICATION_PRODUCER_ID ||
|
|
145
|
+
source["producerVersion"] !== BUF_QUALIFICATION_PRODUCER_VERSION ||
|
|
146
|
+
source["policy"] !== BUF_BREAKING_POLICY) {
|
|
147
|
+
inputError("BUF_QUALIFICATION_EVIDENCE_INVALID", "Buf qualification producer, schema, or FILE policy is invalid.");
|
|
148
|
+
}
|
|
149
|
+
return Object.freeze({
|
|
150
|
+
schemaVersion: BUF_QUALIFICATION_SCHEMA_VERSION,
|
|
151
|
+
producerId: BUF_QUALIFICATION_PRODUCER_ID,
|
|
152
|
+
producerVersion: BUF_QUALIFICATION_PRODUCER_VERSION,
|
|
153
|
+
policy: BUF_BREAKING_POLICY,
|
|
154
|
+
contractId: string(source["contractId"], "contractId", 120),
|
|
155
|
+
bufVersion: string(source["bufVersion"], "bufVersion", 80),
|
|
156
|
+
modulePath: string(source["modulePath"], "modulePath", 300),
|
|
157
|
+
bufConfigPath: string(source["bufConfigPath"], "bufConfigPath", 300),
|
|
158
|
+
evidencePath: string(source["evidencePath"], "evidencePath", 300),
|
|
159
|
+
bufConfigDigest: digest(source["bufConfigDigest"], "bufConfigDigest"),
|
|
160
|
+
baselineDescriptorImagePath: string(source["baselineDescriptorImagePath"], "baselineDescriptorImagePath", 300),
|
|
161
|
+
baselineDescriptorImageDigest: digest(source["baselineDescriptorImageDigest"], "baselineDescriptorImageDigest"),
|
|
162
|
+
candidateDescriptorImageDigest: digest(source["candidateDescriptorImageDigest"], "candidateDescriptorImageDigest"),
|
|
163
|
+
breakingPolicyConfigDigest: digest(source["breakingPolicyConfigDigest"], "breakingPolicyConfigDigest"),
|
|
164
|
+
invocationDigest: digest(source["invocationDigest"], "invocationDigest"),
|
|
165
|
+
result: Object.freeze({
|
|
166
|
+
status,
|
|
167
|
+
findings,
|
|
168
|
+
findingSetDigest: digest(result["findingSetDigest"], "result.findingSetDigest"),
|
|
169
|
+
rawOutputDigest: digest(result["rawOutputDigest"], "result.rawOutputDigest")
|
|
170
|
+
}),
|
|
171
|
+
evidenceDigest: digest(source["evidenceDigest"], "evidenceDigest")
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
export function canonicalBufFindingSet(findings) {
|
|
175
|
+
return JSON.stringify(sortAndValidateBufFindings(findings).map((finding) => ({
|
|
176
|
+
path: finding.path,
|
|
177
|
+
startLine: finding.startLine,
|
|
178
|
+
startColumn: finding.startColumn,
|
|
179
|
+
endLine: finding.endLine,
|
|
180
|
+
endColumn: finding.endColumn,
|
|
181
|
+
type: finding.type,
|
|
182
|
+
message: finding.message
|
|
183
|
+
})));
|
|
184
|
+
}
|
|
185
|
+
export function canonicalBufQualificationInvocation(input) {
|
|
186
|
+
const invocation = bufQualificationInvocationPlan({
|
|
187
|
+
baselineDescriptorPath: "<baseline-descriptor>",
|
|
188
|
+
bufConfigPath: input.binding.bufConfigPath,
|
|
189
|
+
candidateDescriptorPath: "<candidate-descriptor>",
|
|
190
|
+
modulePath: input.binding.modulePath
|
|
191
|
+
});
|
|
192
|
+
return JSON.stringify({
|
|
193
|
+
schemaVersion: BUF_QUALIFICATION_SCHEMA_VERSION,
|
|
194
|
+
producerId: BUF_QUALIFICATION_PRODUCER_ID,
|
|
195
|
+
producerVersion: BUF_QUALIFICATION_PRODUCER_VERSION,
|
|
196
|
+
policy: BUF_BREAKING_POLICY,
|
|
197
|
+
contractId: input.contractId,
|
|
198
|
+
bufVersion: input.bufVersion,
|
|
199
|
+
modulePath: input.binding.modulePath,
|
|
200
|
+
bufConfigPath: input.binding.bufConfigPath,
|
|
201
|
+
evidencePath: input.binding.evidencePath,
|
|
202
|
+
bufConfigDigest: input.bufConfigDigest,
|
|
203
|
+
baselineDescriptorImagePath: input.binding.releasedDescriptorImagePath,
|
|
204
|
+
baselineDescriptorImageDigest: input.baselineDescriptorImageDigest,
|
|
205
|
+
candidateDescriptorImageDigest: input.candidateDescriptorImageDigest,
|
|
206
|
+
breakingPolicyConfigDigest: input.breakingPolicyConfigDigest,
|
|
207
|
+
buildArguments: invocation.buildArguments,
|
|
208
|
+
breakingArguments: invocation.breakingArguments
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
export function canonicalBufQualificationEvidence(evidence) {
|
|
212
|
+
return JSON.stringify({
|
|
213
|
+
schemaVersion: evidence.schemaVersion,
|
|
214
|
+
producerId: evidence.producerId,
|
|
215
|
+
producerVersion: evidence.producerVersion,
|
|
216
|
+
policy: evidence.policy,
|
|
217
|
+
contractId: evidence.contractId,
|
|
218
|
+
bufVersion: evidence.bufVersion,
|
|
219
|
+
modulePath: evidence.modulePath,
|
|
220
|
+
bufConfigPath: evidence.bufConfigPath,
|
|
221
|
+
evidencePath: evidence.evidencePath,
|
|
222
|
+
bufConfigDigest: evidence.bufConfigDigest,
|
|
223
|
+
baselineDescriptorImagePath: evidence.baselineDescriptorImagePath,
|
|
224
|
+
baselineDescriptorImageDigest: evidence.baselineDescriptorImageDigest,
|
|
225
|
+
candidateDescriptorImageDigest: evidence.candidateDescriptorImageDigest,
|
|
226
|
+
breakingPolicyConfigDigest: evidence.breakingPolicyConfigDigest,
|
|
227
|
+
invocationDigest: evidence.invocationDigest,
|
|
228
|
+
result: {
|
|
229
|
+
status: evidence.result.status,
|
|
230
|
+
findings: sortAndValidateBufFindings(evidence.result.findings).map((finding) => ({
|
|
231
|
+
path: finding.path,
|
|
232
|
+
startLine: finding.startLine,
|
|
233
|
+
startColumn: finding.startColumn,
|
|
234
|
+
endLine: finding.endLine,
|
|
235
|
+
endColumn: finding.endColumn,
|
|
236
|
+
type: finding.type,
|
|
237
|
+
message: finding.message
|
|
238
|
+
})),
|
|
239
|
+
findingSetDigest: evidence.result.findingSetDigest,
|
|
240
|
+
rawOutputDigest: evidence.result.rawOutputDigest
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
export function serializeBufQualificationEvidence(evidence) {
|
|
245
|
+
return `${JSON.stringify(evidence, null, 2)}\n`;
|
|
246
|
+
}
|
|
247
|
+
export function qualificationInvocationInput(input) {
|
|
248
|
+
return {
|
|
249
|
+
binding: input.qualification,
|
|
250
|
+
contractId: input.current.contractId,
|
|
251
|
+
bufVersion: input.current.bufVersion,
|
|
252
|
+
bufConfigDigest: input.current.bufConfigDigest,
|
|
253
|
+
baselineDescriptorImageDigest: input.released.descriptorImageDigest,
|
|
254
|
+
candidateDescriptorImageDigest: input.current.descriptorImageDigest,
|
|
255
|
+
breakingPolicyConfigDigest: input.breakingPolicyConfigDigest
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=buf-breaking-qualification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buf-breaking-qualification.js","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,45 @@ export interface BufBreakingEvidence {
|
|
|
21
21
|
readonly status: "compatible" | "breaking" | "not-run";
|
|
22
22
|
readonly fingerprint?: Sha256Digest;
|
|
23
23
|
}
|
|
24
|
+
export interface BufBreakingQualificationBinding {
|
|
25
|
+
readonly modulePath: string;
|
|
26
|
+
readonly bufConfigPath: string;
|
|
27
|
+
readonly releasedDescriptorImagePath: string;
|
|
28
|
+
readonly evidencePath: string;
|
|
29
|
+
}
|
|
30
|
+
export interface BufBreakingFinding {
|
|
31
|
+
readonly path: string;
|
|
32
|
+
readonly startLine: number;
|
|
33
|
+
readonly startColumn: number;
|
|
34
|
+
readonly endLine: number;
|
|
35
|
+
readonly endColumn: number;
|
|
36
|
+
readonly type: string;
|
|
37
|
+
readonly message: string;
|
|
38
|
+
}
|
|
39
|
+
export interface BufBreakingQualificationEvidence {
|
|
40
|
+
readonly schemaVersion: 1;
|
|
41
|
+
readonly producerId: "agent-teams-foundation.buf-breaking-qualification";
|
|
42
|
+
readonly producerVersion: 1;
|
|
43
|
+
readonly policy: "FILE";
|
|
44
|
+
readonly contractId: string;
|
|
45
|
+
readonly bufVersion: string;
|
|
46
|
+
readonly modulePath: string;
|
|
47
|
+
readonly bufConfigPath: string;
|
|
48
|
+
readonly evidencePath: string;
|
|
49
|
+
readonly bufConfigDigest: Sha256Digest;
|
|
50
|
+
readonly baselineDescriptorImagePath: string;
|
|
51
|
+
readonly baselineDescriptorImageDigest: Sha256Digest;
|
|
52
|
+
readonly candidateDescriptorImageDigest: Sha256Digest;
|
|
53
|
+
readonly breakingPolicyConfigDigest: Sha256Digest;
|
|
54
|
+
readonly invocationDigest: Sha256Digest;
|
|
55
|
+
readonly result: {
|
|
56
|
+
readonly status: "compatible" | "breaking";
|
|
57
|
+
readonly findings: readonly BufBreakingFinding[];
|
|
58
|
+
readonly findingSetDigest: Sha256Digest;
|
|
59
|
+
readonly rawOutputDigest: Sha256Digest;
|
|
60
|
+
};
|
|
61
|
+
readonly evidenceDigest: Sha256Digest;
|
|
62
|
+
}
|
|
24
63
|
export interface ApprovedProtobufBreakingChange {
|
|
25
64
|
readonly decisionId: `ADR-${string}`;
|
|
26
65
|
readonly fingerprint: Sha256Digest;
|
|
@@ -34,11 +73,22 @@ export interface ProtobufEvolutionConfiguration {
|
|
|
34
73
|
readonly acceptedDecisionBaselinePath?: string;
|
|
35
74
|
readonly governanceConfigPath?: string;
|
|
36
75
|
readonly approvedBreakingChanges: readonly ApprovedProtobufBreakingChange[];
|
|
76
|
+
readonly qualification: BufBreakingQualificationBinding;
|
|
37
77
|
readonly released: ReleasedProtobufContractEvidence;
|
|
38
|
-
readonly current:
|
|
78
|
+
readonly current: CurrentProtobufContractDeclaration;
|
|
79
|
+
}
|
|
80
|
+
export interface CurrentProtobufContractDeclaration {
|
|
81
|
+
readonly schemaVersion: 1;
|
|
82
|
+
readonly contractId: string;
|
|
83
|
+
readonly publicContractVersion: string;
|
|
84
|
+
readonly bufVersion: string;
|
|
85
|
+
readonly bufConfigDigest: Sha256Digest;
|
|
86
|
+
readonly descriptorImageDigest: Sha256Digest;
|
|
87
|
+
readonly generatorVersions: readonly BufGeneratorVersionEvidence[];
|
|
88
|
+
readonly generationDrift: GenerationDriftEvidence;
|
|
39
89
|
}
|
|
40
90
|
export interface CurrentProtobufContractEvidence {
|
|
41
|
-
readonly schemaVersion:
|
|
91
|
+
readonly schemaVersion: 1;
|
|
42
92
|
readonly contractId: string;
|
|
43
93
|
readonly publicContractVersion: string;
|
|
44
94
|
readonly bufVersion: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protobuf-release-evidence.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,MAAM,EAAE,CAAC;AAE9C,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;IACvC,QAAQ,CAAC,qBAAqB,EAAE,YAAY,CAAC;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,SAAS,2BAA2B,EAAE,CAAC;IACnE,QAAQ,CAAC,qBAAqB,EAAE,YAAY,CAAC;CAC9C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,6BAA6B,EAAE,YAAY,CAAC;IACrD,QAAQ,CAAC,6BAA6B,EAAE,YAAY,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;CACrC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE,OAAO,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,uBAAuB,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC5E,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"protobuf-release-evidence.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate-protobuf-evolution.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,KAAK,EAIV,uBAAuB,EAGxB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluate-protobuf-evolution.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAG1E,OAAO,KAAK,EAIV,uBAAuB,EAGxB,MAAM,uCAAuC,CAAC;AA+N/C,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,uBAAuB,GAC9B,SAAS,oBAAoB,EAAE,CAqIjC"}
|
|
@@ -145,9 +145,6 @@ function assertReleasedEvidence(evidence) {
|
|
|
145
145
|
assertGeneratorVersions(evidence.generatorVersions, "released.generatorVersions");
|
|
146
146
|
}
|
|
147
147
|
function assertCurrentEvidence(evidence) {
|
|
148
|
-
if (evidence.schemaVersion !== 1) {
|
|
149
|
-
inputError("Current Protobuf evidence has an unsupported schema version.");
|
|
150
|
-
}
|
|
151
148
|
if (!CONTRACT_ID.test(evidence.contractId)) {
|
|
152
149
|
inputError("Current Protobuf evidence contractId is invalid.");
|
|
153
150
|
}
|