@agent-teams/engineering-foundation 0.6.0 → 0.8.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 +1 -1
- package/dist/capabilities/contract-protobuf-evolution/contract/config.d.ts.map +1 -1
- package/dist/capabilities/contract-protobuf-evolution/contract/config.js +33 -18
- 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/source-dependencies/application/model/source-workspace.d.ts +2 -6
- package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts.map +1 -1
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js +0 -1
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js.map +1 -1
- package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.d.ts.map +1 -1
- package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.js +1 -3
- package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.js.map +1 -1
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts.map +1 -1
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js +1 -6
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js.map +1 -1
- package/dist/capabilities/source-dependencies/application/rules.js +2 -2
- package/dist/capabilities/source-dependencies/application/rules.js.map +1 -1
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts.map +1 -1
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js +1 -3
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js.map +1 -1
- package/dist/capabilities/source-dependencies/contract/config.d.ts +1 -1
- package/dist/capabilities/source-dependencies/contract/config.d.ts.map +1 -1
- package/dist/capabilities/source-dependencies/contract/config.js +17 -25
- package/dist/capabilities/source-dependencies/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/memory/memory-workspace.js +1 -1
- package/dist/scaffolding/adapters/memory/memory-workspace.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 +23 -0
- package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-operation-state.js +182 -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/filesystem-rendering-journal.d.ts +6 -0
- package/dist/scaffolding/adapters/node/filesystem-rendering-journal.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-rendering-journal.js +80 -0
- package/dist/scaffolding/adapters/node/filesystem-rendering-journal.js.map +1 -0
- package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts +1 -0
- package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/filesystem-workspace.js +22 -151
- package/dist/scaffolding/adapters/node/filesystem-workspace.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-input-loader.d.ts +1 -1
- package/dist/scaffolding/adapters/node/node-input-loader.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/node-input-loader.js +6 -56
- package/dist/scaffolding/adapters/node/node-input-loader.js.map +1 -1
- 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-receipt-validator.d.ts +1 -1
- package/dist/scaffolding/adapters/node/node-receipt-validator.d.ts.map +1 -1
- package/dist/scaffolding/adapters/node/node-receipt-validator.js +2 -2
- package/dist/scaffolding/adapters/node/node-receipt-validator.js.map +1 -1
- package/dist/scaffolding/adapters/node/node-rendering-plan-authority.d.ts +3 -0
- package/dist/scaffolding/adapters/node/node-rendering-plan-authority.d.ts.map +1 -0
- package/dist/scaffolding/adapters/node/node-rendering-plan-authority.js +18 -0
- package/dist/scaffolding/adapters/node/node-rendering-plan-authority.js.map +1 -0
- 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 +177 -35
- 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 +2 -1
- package/dist/scaffolding/definitions/registry.d.ts.map +1 -1
- package/dist/scaffolding/definitions/registry.js +8 -1
- 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/internal-rendering-regression-api.d.ts +8 -0
- package/dist/scaffolding/internal-rendering-regression-api.d.ts.map +1 -0
- package/dist/scaffolding/internal-rendering-regression-api.js +8 -0
- package/dist/scaffolding/internal-rendering-regression-api.js.map +1 -0
- 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/kernel/receipt.js +1 -1
- package/dist/scaffolding/kernel/receipt.js.map +1 -1
- package/dist/scaffolding/kernel/rendering-plan-compiler.d.ts +4 -0
- package/dist/scaffolding/kernel/rendering-plan-compiler.d.ts.map +1 -0
- package/dist/scaffolding/kernel/rendering-plan-compiler.js +43 -0
- package/dist/scaffolding/kernel/rendering-plan-compiler.js.map +1 -0
- package/dist/scaffolding/kernel/rendering-plan-validation.d.ts +3 -0
- package/dist/scaffolding/kernel/rendering-plan-validation.d.ts.map +1 -0
- package/dist/scaffolding/kernel/rendering-plan-validation.js +10 -0
- package/dist/scaffolding/kernel/rendering-plan-validation.js.map +1 -0
- 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/scaffolding/service.d.ts +1 -1
- package/dist/scaffolding/service.d.ts.map +1 -1
- package/dist/scaffolding/service.js +5 -4
- package/dist/scaffolding/service.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 +5 -1
- package/dist/schema-ids.d.ts.map +1 -1
- package/dist/schema-ids.js +14 -3
- package/dist/schema-ids.js.map +1 -1
- package/package.json +30 -2
- package/schemas/architecture-source-dependencies/v1.schema.json +6 -1
- package/schemas/contract-protobuf-breaking-qualification/v1.schema.json +89 -0
- package/schemas/contract-protobuf-breaking-qualification/v2.schema.json +93 -0
- package/schemas/contract-protobuf-evolution/v2.schema.json +147 -0
- package/schemas/scaffold-authority-evidence.schema.json +103 -0
- package/schemas/{scaffold-intent/v1.schema.json → scaffold-intent.schema.json} +2 -2
- package/schemas/{scaffold-plan/v1.schema.json → scaffold-plan.schema.json} +89 -11
- package/schemas/scaffold-receipt.schema.json +180 -0
- package/schemas/scaffold-recovery-journal.schema.json +31 -0
- package/schemas/{scaffold-target-catalog/v1.schema.json → scaffold-target-catalog.schema.json} +11 -10
- package/schemas/{scaffolding-config/v1.schema.json → scaffolding-config.schema.json} +40 -4
- package/schemas/architecture-source-dependencies/v2.schema.json +0 -102
- package/schemas/scaffold-receipt/v1.schema.json +0 -299
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-error.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-error.ts"],"names":[],"mappings":"AAAA,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-error.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AuthorityScaffoldCompilationInput, AuthorityScaffoldPlan } from "../../contract/types.js";
|
|
2
|
+
export type ScaffoldAuthorityInputFaultInjector = (point: {
|
|
3
|
+
readonly phase: "before-authority-source-stability-check";
|
|
4
|
+
}) => Promise<void> | void;
|
|
5
|
+
export declare function loadAuthorityScaffoldCompilationInputFromFile(options: {
|
|
6
|
+
readonly consumerRoot: string;
|
|
7
|
+
readonly configPath: string;
|
|
8
|
+
readonly intentPath: string;
|
|
9
|
+
readonly foundationVersion: string;
|
|
10
|
+
readonly faultInjector?: ScaffoldAuthorityInputFaultInjector;
|
|
11
|
+
}): Promise<AuthorityScaffoldCompilationInput>;
|
|
12
|
+
export declare function loadAuthorityScaffoldCompilationInputFromIntent(options: {
|
|
13
|
+
readonly consumerRoot: string;
|
|
14
|
+
readonly configPath: string;
|
|
15
|
+
readonly foundationVersion: string;
|
|
16
|
+
readonly intent: unknown;
|
|
17
|
+
readonly faultInjector?: ScaffoldAuthorityInputFaultInjector;
|
|
18
|
+
}): Promise<AuthorityScaffoldCompilationInput>;
|
|
19
|
+
export declare function readAuthorityScaffoldPlanFile(consumerRoot: string, planPath: string): Promise<AuthorityScaffoldPlan>;
|
|
20
|
+
//# sourceMappingURL=node-authority-input-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-input-loader.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-input-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,iCAAiC,EACjC,qBAAqB,EAKtB,MAAM,yBAAyB,CAAC;AAgBjC,MAAM,MAAM,mCAAmC,GAAG,CAChD,KAAK,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,yCAAyC,CAAA;CAAE,KACjE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAqO1B,wBAAsB,6CAA6C,CAAC,OAAO,EAAE;IAC3E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,mCAAmC,CAAC;CAC9D,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAwB7C;AAED,wBAAsB,+CAA+C,CAAC,OAAO,EAAE;IAC7E,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,mCAAmC,CAAC;CAC9D,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAiB7C;AAED,wBAAsB,6BAA6B,CACjD,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,CAAC,CAYhC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { sha256Json } from "../../kernel/canonical-json.js";
|
|
2
|
+
import { createScaffoldAuthorityEvidence } from "../../kernel/authority-evidence.js";
|
|
3
|
+
import { assertAuthorityScaffoldPlanDigest } from "../../kernel/plan-validation.js";
|
|
4
|
+
import { ScaffoldError } from "../../scaffold-error.js";
|
|
5
|
+
import { assertSchema } from "../../../schema-catalog.js";
|
|
6
|
+
import { parseStrictYamlSource } from "../../../strict-yaml.js";
|
|
7
|
+
import { assertion, readContainedRepositoryFile } from "./node-repository-file.js";
|
|
8
|
+
import { ScaffoldAuthorityStaleError } from "./node-authority-error.js";
|
|
9
|
+
import { resolveOwnerDocument } from "./node-owner-document-resolver.js";
|
|
10
|
+
import { MAX_SCAFFOLD_PLAN_BYTES } from "./node-scaffold-limits.js";
|
|
11
|
+
function requireExactlyOne(values, predicate, message) {
|
|
12
|
+
const matches = values.filter(predicate);
|
|
13
|
+
if (matches.length !== 1) {
|
|
14
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", message);
|
|
15
|
+
}
|
|
16
|
+
return matches[0];
|
|
17
|
+
}
|
|
18
|
+
function mapAuthorityCatalog(value) {
|
|
19
|
+
const raw = value;
|
|
20
|
+
return Object.freeze({
|
|
21
|
+
version: 2,
|
|
22
|
+
packages: Object.freeze(raw.packages.map((entry) => Object.freeze({
|
|
23
|
+
id: entry.id,
|
|
24
|
+
role: entry.role,
|
|
25
|
+
path: entry.path,
|
|
26
|
+
packageName: entry.package_name,
|
|
27
|
+
ownerDocumentId: entry.owner_document
|
|
28
|
+
})))
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function assertAuthoritySourceSetStable(options) {
|
|
32
|
+
const [files, owner] = await Promise.all([
|
|
33
|
+
Promise.all([
|
|
34
|
+
readContainedRepositoryFile(options.consumerRoot, options.configPath, "scaffolding-config-stability"),
|
|
35
|
+
readContainedRepositoryFile(options.consumerRoot, options.catalogPath, "scaffold-target-catalog-stability")
|
|
36
|
+
]),
|
|
37
|
+
resolveOwnerDocument({
|
|
38
|
+
consumerRoot: options.consumerRoot,
|
|
39
|
+
documentRoots: options.documentRoots,
|
|
40
|
+
ownerDocumentId: options.ownerDocumentId
|
|
41
|
+
})
|
|
42
|
+
]);
|
|
43
|
+
const observed = [...files.map(assertion), assertion(owner.file)];
|
|
44
|
+
if (owner.indexDigest !== options.ownerIndexDigest ||
|
|
45
|
+
observed.some((current, index) => {
|
|
46
|
+
const expected = options.expected[index];
|
|
47
|
+
return (expected === undefined ||
|
|
48
|
+
current.path !== expected.path ||
|
|
49
|
+
current.size !== expected.size ||
|
|
50
|
+
current.digest !== expected.digest);
|
|
51
|
+
})) {
|
|
52
|
+
throw new ScaffoldAuthorityStaleError("Consumer authority changed while Foundation was reading its canonical source set.");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function loadAuthorityScaffoldCompilationInput(options) {
|
|
56
|
+
await Promise.all([
|
|
57
|
+
assertSchema("scaffolding-config", options.configValue, "scaffolding-config"),
|
|
58
|
+
assertSchema("scaffold-intent", options.intent, "scaffold-intent")
|
|
59
|
+
]);
|
|
60
|
+
const config = options.configValue;
|
|
61
|
+
const catalogFile = await readContainedRepositoryFile(options.consumerRoot, config.targetCatalogPath, "scaffold-target-catalog");
|
|
62
|
+
const catalogValue = parseStrictYamlSource(catalogFile.source, "scaffold-target-catalog");
|
|
63
|
+
await assertSchema("scaffold-target-catalog", catalogValue, "scaffold-target-catalog");
|
|
64
|
+
const unresolvedCatalog = mapAuthorityCatalog(catalogValue);
|
|
65
|
+
const intent = options.intent;
|
|
66
|
+
const composition = requireExactlyOne(config.compositions, (candidate) => candidate.id === intent.compositionId, `Composition must exist exactly once: ${intent.compositionId}.`);
|
|
67
|
+
const target = requireExactlyOne(unresolvedCatalog.packages, (candidate) => candidate.id === intent.targetRef, `Scaffold target must exist exactly once: ${intent.targetRef}.`);
|
|
68
|
+
const authorityVerifiers = composition.authorityVerifiers;
|
|
69
|
+
if (authorityVerifiers.length !== 1) {
|
|
70
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "The selected Composition must contain exactly one authority verifier.");
|
|
71
|
+
}
|
|
72
|
+
const verifier = authorityVerifiers[0];
|
|
73
|
+
if (verifier === undefined) {
|
|
74
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "The selected Composition must admit exactly one supported authority verifier.");
|
|
75
|
+
}
|
|
76
|
+
const owner = await resolveOwnerDocument({
|
|
77
|
+
consumerRoot: options.consumerRoot,
|
|
78
|
+
documentRoots: verifier.parameters.documentRoots,
|
|
79
|
+
ownerDocumentId: target.ownerDocumentId
|
|
80
|
+
});
|
|
81
|
+
if (!verifier.parameters.allowedStatuses.includes(owner.status)) {
|
|
82
|
+
throw new ScaffoldAuthorityStaleError("Owner document status is not admitted by the selected Composition.");
|
|
83
|
+
}
|
|
84
|
+
const resolvedTarget = Object.freeze({
|
|
85
|
+
id: target.id,
|
|
86
|
+
role: target.role,
|
|
87
|
+
path: target.path,
|
|
88
|
+
packageName: target.packageName,
|
|
89
|
+
ownerDocument: Object.freeze({ id: owner.id, path: owner.file.path })
|
|
90
|
+
});
|
|
91
|
+
const catalog = Object.freeze({
|
|
92
|
+
version: 2,
|
|
93
|
+
packages: Object.freeze([resolvedTarget])
|
|
94
|
+
});
|
|
95
|
+
const authorityReadSet = Object.freeze([
|
|
96
|
+
assertion(options.configFile),
|
|
97
|
+
assertion(catalogFile),
|
|
98
|
+
assertion(owner.file)
|
|
99
|
+
]);
|
|
100
|
+
const [configAssertion, catalogAssertion, ownerAssertion] = authorityReadSet;
|
|
101
|
+
const evidence = createScaffoldAuthorityEvidence({
|
|
102
|
+
schemaVersion: 1,
|
|
103
|
+
verifier: Object.freeze({ id: verifier.id, contractVersion: verifier.contractVersion }),
|
|
104
|
+
projectId: config.projectId,
|
|
105
|
+
targetRef: intent.targetRef,
|
|
106
|
+
targetIdentityDigest: sha256Json(resolvedTarget),
|
|
107
|
+
ownerDocument: Object.freeze({
|
|
108
|
+
id: resolvedTarget.ownerDocument.id,
|
|
109
|
+
path: resolvedTarget.ownerDocument.path,
|
|
110
|
+
status: owner.status
|
|
111
|
+
}),
|
|
112
|
+
sources: Object.freeze([
|
|
113
|
+
Object.freeze({ role: "config", assertion: configAssertion }),
|
|
114
|
+
Object.freeze({ role: "owner-document", assertion: ownerAssertion }),
|
|
115
|
+
Object.freeze({ role: "target-catalog", assertion: catalogAssertion })
|
|
116
|
+
])
|
|
117
|
+
});
|
|
118
|
+
await assertSchema("scaffold-authority-evidence", evidence, "scaffold-authority-evidence");
|
|
119
|
+
await options.faultInjector?.({
|
|
120
|
+
phase: "before-authority-source-stability-check"
|
|
121
|
+
});
|
|
122
|
+
await assertAuthoritySourceSetStable({
|
|
123
|
+
consumerRoot: options.consumerRoot,
|
|
124
|
+
configPath: options.configPath,
|
|
125
|
+
catalogPath: config.targetCatalogPath,
|
|
126
|
+
ownerDocumentId: target.ownerDocumentId,
|
|
127
|
+
documentRoots: verifier.parameters.documentRoots,
|
|
128
|
+
ownerIndexDigest: owner.indexDigest,
|
|
129
|
+
expected: authorityReadSet
|
|
130
|
+
});
|
|
131
|
+
return Object.freeze({
|
|
132
|
+
foundationVersion: options.foundationVersion,
|
|
133
|
+
configPath: options.configPath,
|
|
134
|
+
config,
|
|
135
|
+
intent,
|
|
136
|
+
catalog,
|
|
137
|
+
authorityEvidence: evidence,
|
|
138
|
+
authorityReadSet
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
export async function loadAuthorityScaffoldCompilationInputFromFile(options) {
|
|
142
|
+
const [configFile, intentFile] = await Promise.all([
|
|
143
|
+
readContainedRepositoryFile(options.consumerRoot, options.configPath, "scaffolding-config"),
|
|
144
|
+
readContainedRepositoryFile(options.consumerRoot, options.intentPath, "scaffold-intent")
|
|
145
|
+
]);
|
|
146
|
+
return loadAuthorityScaffoldCompilationInput({
|
|
147
|
+
consumerRoot: options.consumerRoot,
|
|
148
|
+
configPath: options.configPath,
|
|
149
|
+
foundationVersion: options.foundationVersion,
|
|
150
|
+
intent: parseStrictYamlSource(intentFile.source, "scaffold-intent"),
|
|
151
|
+
configFile,
|
|
152
|
+
configValue: parseStrictYamlSource(configFile.source, "scaffolding-config"),
|
|
153
|
+
...(options.faultInjector === undefined
|
|
154
|
+
? {}
|
|
155
|
+
: { faultInjector: options.faultInjector })
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export async function loadAuthorityScaffoldCompilationInputFromIntent(options) {
|
|
159
|
+
const configFile = await readContainedRepositoryFile(options.consumerRoot, options.configPath, "scaffolding-config");
|
|
160
|
+
return loadAuthorityScaffoldCompilationInput({
|
|
161
|
+
consumerRoot: options.consumerRoot,
|
|
162
|
+
configPath: options.configPath,
|
|
163
|
+
foundationVersion: options.foundationVersion,
|
|
164
|
+
intent: options.intent,
|
|
165
|
+
configFile,
|
|
166
|
+
configValue: parseStrictYamlSource(configFile.source, "scaffolding-config"),
|
|
167
|
+
...(options.faultInjector === undefined
|
|
168
|
+
? {}
|
|
169
|
+
: { faultInjector: options.faultInjector })
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export async function readAuthorityScaffoldPlanFile(consumerRoot, planPath) {
|
|
173
|
+
const planFile = await readContainedRepositoryFile(consumerRoot, planPath, "scaffold-plan", MAX_SCAFFOLD_PLAN_BYTES);
|
|
174
|
+
const value = parseStrictYamlSource(planFile.source, "scaffold-plan");
|
|
175
|
+
await assertSchema("scaffold-plan", value, "scaffold-plan");
|
|
176
|
+
const plan = value;
|
|
177
|
+
assertAuthorityScaffoldPlanDigest(plan);
|
|
178
|
+
return plan;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=node-authority-input-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-input-loader.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-input-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AuthorityScaffoldPlan, AuthorityScaffoldReceipt } from "../../contract/types.js";
|
|
2
|
+
/** Validates an untrusted canonical Receipt against structural and semantic evidence. */
|
|
3
|
+
export declare function validateAuthorityScaffoldReceipt(receipt: unknown, plan?: AuthorityScaffoldPlan): Promise<AuthorityScaffoldReceipt>;
|
|
4
|
+
//# sourceMappingURL=node-authority-receipt-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-receipt-validator.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-receipt-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AAIjC,yFAAyF;AACzF,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,qBAAqB,GAC3B,OAAO,CAAC,wBAAwB,CAAC,CAKnC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { assertAuthorityScaffoldReceiptDigest } from "../../kernel/authority-receipt.js";
|
|
2
|
+
import { assertSchema } from "../../../schema-catalog.js";
|
|
3
|
+
/** Validates an untrusted canonical Receipt against structural and semantic evidence. */
|
|
4
|
+
export async function validateAuthorityScaffoldReceipt(receipt, plan) {
|
|
5
|
+
await assertSchema("scaffold-receipt", receipt, "scaffold-receipt");
|
|
6
|
+
const validated = receipt;
|
|
7
|
+
assertAuthorityScaffoldReceiptDigest(validated, plan);
|
|
8
|
+
return validated;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=node-authority-receipt-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-authority-receipt-validator.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-authority-receipt-validator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oCAAoC,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,OAAgB,EAChB,IAA4B;IAE5B,MAAM,YAAY,CAAC,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,OAAmC,CAAC;IACtD,oCAAoC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ScaffoldCompilationInput, ScaffoldPlanV1, ScaffoldReadAssertionV1 } from "../../contract/types.js";
|
|
2
|
-
export declare const MAX_SCAFFOLD_PLAN_BYTES: number;
|
|
3
2
|
export declare function loadScaffoldCompilationInput(options: {
|
|
4
3
|
readonly consumerRoot: string;
|
|
5
4
|
readonly configPath: string;
|
|
@@ -12,6 +11,7 @@ export declare function loadScaffoldCompilationInputFromIntent(options: {
|
|
|
12
11
|
readonly foundationVersion: string;
|
|
13
12
|
readonly intent: unknown;
|
|
14
13
|
}): Promise<ScaffoldCompilationInput>;
|
|
14
|
+
/** Reads a released 0.5 Plan for regression evidence only. */
|
|
15
15
|
export declare function readScaffoldPlanFile(consumerRoot: string, planPath: string): Promise<ScaffoldPlanV1>;
|
|
16
16
|
export declare function inspectAuthorityReadSet(consumerRoot: string, readSet: readonly ScaffoldReadAssertionV1[]): Promise<boolean>;
|
|
17
17
|
//# sourceMappingURL=node-input-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-input-loader.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-input-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-input-loader.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-input-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAExB,cAAc,EACd,uBAAuB,EAGxB,MAAM,yBAAyB,CAAC;AA2DjC,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CA0BpC;AAoDD,wBAAsB,sCAAsC,CAAC,OAAO,EAAE;IACpE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAEpC;AAED,8DAA8D;AAC9D,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAYzB;AAED,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,SAAS,uBAAuB,EAAE,GAC1C,OAAO,CAAC,OAAO,CAAC,CAwBlB"}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
-
import { sha256Bytes } from "../../kernel/canonical-json.js";
|
|
4
|
-
import { assertScaffoldPlanDigest } from "../../kernel/plan-validation.js";
|
|
5
|
-
import { ScaffoldError } from "../../scaffold-error.js";
|
|
6
|
-
import { pathTraversesSymbolicLink } from "../../../filesystem-path-safety.js";
|
|
1
|
+
import { assertScaffoldPlanDigest } from "../../kernel/rendering-plan-validation.js";
|
|
7
2
|
import { assertSchema } from "../../../schema-catalog.js";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
import { parseStrictYamlSource } from "../../../strict-yaml.js";
|
|
4
|
+
import { assertion, readContainedRepositoryFile } from "./node-repository-file.js";
|
|
5
|
+
import { MAX_SCAFFOLD_PLAN_BYTES } from "./node-scaffold-limits.js";
|
|
11
6
|
function hasErrorCode(error, code) {
|
|
12
7
|
const visited = new Set();
|
|
13
8
|
let candidate = error;
|
|
@@ -21,52 +16,6 @@ function hasErrorCode(error, code) {
|
|
|
21
16
|
}
|
|
22
17
|
return false;
|
|
23
18
|
}
|
|
24
|
-
function isContained(root, candidate) {
|
|
25
|
-
const relation = relative(root, candidate);
|
|
26
|
-
return (relation === "" ||
|
|
27
|
-
(!relation.startsWith(`..${sep}`) && relation !== ".." && !isAbsolute(relation)));
|
|
28
|
-
}
|
|
29
|
-
async function readContainedRepositoryFile(consumerRoot, repositoryPath, phase, maxBytes = MAX_INPUT_BYTES) {
|
|
30
|
-
try {
|
|
31
|
-
assertRepositoryRelativePath(repositoryPath, phase);
|
|
32
|
-
const canonicalRoot = await realpath(consumerRoot);
|
|
33
|
-
const candidate = resolve(canonicalRoot, repositoryPath);
|
|
34
|
-
if (await pathTraversesSymbolicLink(canonicalRoot, candidate)) {
|
|
35
|
-
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Scaffolding input cannot traverse a symbolic link: ${repositoryPath}.`);
|
|
36
|
-
}
|
|
37
|
-
const canonicalCandidate = await realpath(candidate);
|
|
38
|
-
if (!isContained(canonicalRoot, canonicalCandidate)) {
|
|
39
|
-
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Scaffolding input escapes the consumer repository: ${repositoryPath}.`);
|
|
40
|
-
}
|
|
41
|
-
const metadata = await lstat(canonicalCandidate);
|
|
42
|
-
if (metadata.isSymbolicLink() ||
|
|
43
|
-
!metadata.isFile() ||
|
|
44
|
-
metadata.size > maxBytes) {
|
|
45
|
-
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Scaffolding input must be a regular file no larger than ${maxBytes} bytes: ${repositoryPath}.`);
|
|
46
|
-
}
|
|
47
|
-
const bytes = await readFile(canonicalCandidate);
|
|
48
|
-
return {
|
|
49
|
-
path: repositoryPath,
|
|
50
|
-
bytes,
|
|
51
|
-
source: bytes.toString("utf8")
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
if (error instanceof ScaffoldError) {
|
|
56
|
-
throw error;
|
|
57
|
-
}
|
|
58
|
-
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Cannot read scaffolding input: ${repositoryPath}.`, [], { cause: error });
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function assertion(file) {
|
|
62
|
-
const canonicalBytes = Buffer.from(file.source.replace(/\r\n?/gu, "\n"), "utf8");
|
|
63
|
-
return Object.freeze({
|
|
64
|
-
path: file.path,
|
|
65
|
-
state: "file",
|
|
66
|
-
digest: sha256Bytes(canonicalBytes),
|
|
67
|
-
size: canonicalBytes.byteLength
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
19
|
function mapCatalog(value) {
|
|
71
20
|
const raw = value;
|
|
72
21
|
return Object.freeze({
|
|
@@ -126,10 +75,11 @@ async function loadScaffoldCompilationInputFromIntentInternal(options) {
|
|
|
126
75
|
export async function loadScaffoldCompilationInputFromIntent(options) {
|
|
127
76
|
return loadScaffoldCompilationInputFromIntentInternal(options);
|
|
128
77
|
}
|
|
78
|
+
/** Reads a released 0.5 Plan for regression evidence only. */
|
|
129
79
|
export async function readScaffoldPlanFile(consumerRoot, planPath) {
|
|
130
80
|
const planFile = await readContainedRepositoryFile(consumerRoot, planPath, "scaffold-plan", MAX_SCAFFOLD_PLAN_BYTES);
|
|
131
81
|
const value = parseStrictYamlSource(planFile.source, "scaffold-plan");
|
|
132
|
-
await assertSchema("scaffold-plan/v1", value, "
|
|
82
|
+
await assertSchema("scaffold-plan/v1", value, "rendering-regression-plan");
|
|
133
83
|
const plan = value;
|
|
134
84
|
assertScaffoldPlanDigest(plan);
|
|
135
85
|
return plan;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-input-loader.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-input-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"node-input-loader.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-input-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Sha256Digest } from "../../contract/types.js";
|
|
2
|
+
import { type LoadedRepositoryFile } from "./node-repository-file.js";
|
|
3
|
+
interface OwnerDocumentMetadata {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly status: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ResolvedOwnerDocument extends OwnerDocumentMetadata {
|
|
8
|
+
readonly file: LoadedRepositoryFile;
|
|
9
|
+
readonly indexDigest: Sha256Digest;
|
|
10
|
+
}
|
|
11
|
+
export declare function resolveOwnerDocument(options: {
|
|
12
|
+
readonly consumerRoot: string;
|
|
13
|
+
readonly documentRoots: readonly string[];
|
|
14
|
+
readonly ownerDocumentId: string;
|
|
15
|
+
}): Promise<ResolvedOwnerDocument>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=node-owner-document-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-owner-document-resolver.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-owner-document-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQ5D,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AAUnC,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAOD,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;IAClE,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC;CACpC;AAqMD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA4CjC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { lstat, opendir, realpath } from "node:fs/promises";
|
|
2
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { sha256Json } from "../../kernel/canonical-json.js";
|
|
4
|
+
import { ScaffoldError } from "../../scaffold-error.js";
|
|
5
|
+
import { pathTraversesSymbolicLink } from "../../../filesystem-path-safety.js";
|
|
6
|
+
import { assertRepositoryRelativePath, parseStrictYamlSource } from "../../../strict-yaml.js";
|
|
7
|
+
import { readContainedRepositoryFile } from "./node-repository-file.js";
|
|
8
|
+
import { ScaffoldAuthorityStaleError } from "./node-authority-error.js";
|
|
9
|
+
const MAX_AUTHORITY_DOCUMENTS = 4096;
|
|
10
|
+
const MAX_AUTHORITY_DOCUMENT_ENTRIES = 16_384;
|
|
11
|
+
const MAX_AUTHORITY_DOCUMENT_DEPTH = 32;
|
|
12
|
+
const MAX_AUTHORITY_METADATA_LENGTH = 160;
|
|
13
|
+
const OWNER_DOCUMENT_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._/-]*$/u;
|
|
14
|
+
const OWNER_DOCUMENT_STATUS_PATTERN = /^[a-z0-9][a-z0-9._/-]*$/u;
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
17
|
+
}
|
|
18
|
+
function isContained(root, candidate) {
|
|
19
|
+
const relation = relative(root, candidate);
|
|
20
|
+
return (relation === "" ||
|
|
21
|
+
(!relation.startsWith(`..${sep}`) &&
|
|
22
|
+
relation !== ".." &&
|
|
23
|
+
!isAbsolute(relation)));
|
|
24
|
+
}
|
|
25
|
+
function compareStrings(left, right) {
|
|
26
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
27
|
+
}
|
|
28
|
+
function parseOwnerFrontmatter(source) {
|
|
29
|
+
const normalized = source.replace(/\r\n?/gu, "\n");
|
|
30
|
+
if (!normalized.startsWith("---\n")) {
|
|
31
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Authority documents must start with strict YAML frontmatter.");
|
|
32
|
+
}
|
|
33
|
+
const end = normalized.indexOf("\n---\n", 4);
|
|
34
|
+
if (end === -1) {
|
|
35
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Authority document YAML frontmatter must have a closing delimiter.");
|
|
36
|
+
}
|
|
37
|
+
const parsed = parseStrictYamlSource(normalized.slice(4, end), "scaffold-owner-document");
|
|
38
|
+
if (!isRecord(parsed) ||
|
|
39
|
+
typeof parsed.id !== "string" ||
|
|
40
|
+
typeof parsed.status !== "string" ||
|
|
41
|
+
parsed.id.length > MAX_AUTHORITY_METADATA_LENGTH ||
|
|
42
|
+
parsed.status.length > MAX_AUTHORITY_METADATA_LENGTH ||
|
|
43
|
+
!OWNER_DOCUMENT_ID_PATTERN.test(parsed.id) ||
|
|
44
|
+
!OWNER_DOCUMENT_STATUS_PATTERN.test(parsed.status)) {
|
|
45
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Authority document frontmatter must contain normalized id and status strings.");
|
|
46
|
+
}
|
|
47
|
+
return Object.freeze({ id: parsed.id, status: parsed.status });
|
|
48
|
+
}
|
|
49
|
+
async function listMarkdownFilesInRoot(options) {
|
|
50
|
+
assertRepositoryRelativePath(options.documentRoot, "scaffold-owner-document-root");
|
|
51
|
+
const absoluteRoot = resolve(options.canonicalConsumerRoot, options.documentRoot);
|
|
52
|
+
if ((await pathTraversesSymbolicLink(options.canonicalConsumerRoot, absoluteRoot)) ||
|
|
53
|
+
!isContained(options.canonicalConsumerRoot, await realpath(absoluteRoot)) ||
|
|
54
|
+
!(await lstat(absoluteRoot)).isDirectory()) {
|
|
55
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document root must be a contained regular directory: ${options.documentRoot}.`);
|
|
56
|
+
}
|
|
57
|
+
const paths = [];
|
|
58
|
+
const walk = async (absoluteDirectory, repositoryDirectory, depth) => {
|
|
59
|
+
if (depth > MAX_AUTHORITY_DOCUMENT_DEPTH) {
|
|
60
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document roots cannot exceed ${MAX_AUTHORITY_DOCUMENT_DEPTH} directory levels.`);
|
|
61
|
+
}
|
|
62
|
+
const entries = [];
|
|
63
|
+
const directory = await opendir(absoluteDirectory);
|
|
64
|
+
for await (const entry of directory) {
|
|
65
|
+
options.budget.entriesVisited += 1;
|
|
66
|
+
if (options.budget.entriesVisited > MAX_AUTHORITY_DOCUMENT_ENTRIES) {
|
|
67
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document roots cannot contain more than ${MAX_AUTHORITY_DOCUMENT_ENTRIES} entries.`);
|
|
68
|
+
}
|
|
69
|
+
entries.push(entry);
|
|
70
|
+
}
|
|
71
|
+
entries.sort((left, right) => compareStrings(left.name, right.name));
|
|
72
|
+
for (const entry of entries) {
|
|
73
|
+
const repositoryPath = `${repositoryDirectory}/${entry.name}`;
|
|
74
|
+
const absolutePath = resolve(absoluteDirectory, entry.name);
|
|
75
|
+
if (entry.isSymbolicLink()) {
|
|
76
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document roots cannot contain symbolic links: ${repositoryPath}.`);
|
|
77
|
+
}
|
|
78
|
+
if (entry.isDirectory()) {
|
|
79
|
+
await walk(absolutePath, repositoryPath, depth + 1);
|
|
80
|
+
}
|
|
81
|
+
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
82
|
+
options.budget.documentsVisited += 1;
|
|
83
|
+
if (options.budget.documentsVisited > MAX_AUTHORITY_DOCUMENTS) {
|
|
84
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document roots cannot contain more than ${MAX_AUTHORITY_DOCUMENTS} Markdown files.`);
|
|
85
|
+
}
|
|
86
|
+
paths.push(repositoryPath);
|
|
87
|
+
}
|
|
88
|
+
else if (!entry.isFile()) {
|
|
89
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", `Authority document roots may contain only regular files and directories: ${repositoryPath}.`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
await walk(absoluteRoot, options.documentRoot, 0);
|
|
94
|
+
return Object.freeze(paths);
|
|
95
|
+
}
|
|
96
|
+
async function listAuthorityDocumentPaths(consumerRoot, documentRoots) {
|
|
97
|
+
try {
|
|
98
|
+
const normalizedRoots = documentRoots
|
|
99
|
+
.map((documentRoot) => documentRoot.toLowerCase())
|
|
100
|
+
.toSorted(compareStrings);
|
|
101
|
+
for (const [index, root] of normalizedRoots.entries()) {
|
|
102
|
+
for (const candidate of normalizedRoots.slice(index + 1)) {
|
|
103
|
+
if (root === candidate ||
|
|
104
|
+
root.startsWith(`${candidate}/`) ||
|
|
105
|
+
candidate.startsWith(`${root}/`)) {
|
|
106
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Authority document roots cannot overlap or differ only by case.");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const canonicalConsumerRoot = await realpath(consumerRoot);
|
|
111
|
+
const budget = { entriesVisited: 0, documentsVisited: 0 };
|
|
112
|
+
const paths = [];
|
|
113
|
+
for (const documentRoot of documentRoots.toSorted(compareStrings)) {
|
|
114
|
+
paths.push(...(await listMarkdownFilesInRoot({
|
|
115
|
+
canonicalConsumerRoot,
|
|
116
|
+
documentRoot,
|
|
117
|
+
budget
|
|
118
|
+
})));
|
|
119
|
+
}
|
|
120
|
+
paths.sort(compareStrings);
|
|
121
|
+
const exact = new Set(paths);
|
|
122
|
+
const caseFolded = new Set(paths.map((path) => path.toLowerCase()));
|
|
123
|
+
if (exact.size !== paths.length || caseFolded.size !== paths.length) {
|
|
124
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Authority document roots overlap or contain case-folding path collisions.");
|
|
125
|
+
}
|
|
126
|
+
return Object.freeze(paths);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error instanceof ScaffoldError) {
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Cannot index configured authority document roots.", [], { cause: error });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export async function resolveOwnerDocument(options) {
|
|
136
|
+
if (!OWNER_DOCUMENT_ID_PATTERN.test(options.ownerDocumentId)) {
|
|
137
|
+
throw new ScaffoldError("SCAFFOLD_INPUT_INVALID", "Owner document ID must be a normalized authority identifier.");
|
|
138
|
+
}
|
|
139
|
+
const paths = await listAuthorityDocumentPaths(options.consumerRoot, options.documentRoots);
|
|
140
|
+
const index = [];
|
|
141
|
+
const matches = [];
|
|
142
|
+
for (const path of paths) {
|
|
143
|
+
const file = await readContainedRepositoryFile(options.consumerRoot, path, "scaffold-owner-document");
|
|
144
|
+
const metadata = parseOwnerFrontmatter(file.source);
|
|
145
|
+
index.push({ path: file.path, id: metadata.id, status: metadata.status });
|
|
146
|
+
if (metadata.id === options.ownerDocumentId) {
|
|
147
|
+
matches.push({ file, metadata });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (matches.length !== 1) {
|
|
151
|
+
throw new ScaffoldAuthorityStaleError(`Owner document must resolve exactly once from configured roots: ${options.ownerDocumentId}.`);
|
|
152
|
+
}
|
|
153
|
+
const selected = matches[0];
|
|
154
|
+
const indexDigest = sha256Json(index);
|
|
155
|
+
return Object.freeze({
|
|
156
|
+
...selected.metadata,
|
|
157
|
+
file: selected.file,
|
|
158
|
+
indexDigest
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=node-owner-document-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-owner-document-resolver.js","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-owner-document-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { AuthorityScaffoldPlan } from "../../contract/types.js";
|
|
2
|
+
import { type ScaffoldAuthorityInputFaultInjector } from "./node-authority-input-loader.js";
|
|
3
|
+
export type ScaffoldAuthorityAssessment = {
|
|
4
|
+
readonly state: "current";
|
|
5
|
+
} | {
|
|
6
|
+
readonly state: "stale";
|
|
7
|
+
} | {
|
|
8
|
+
readonly state: "unverifiable";
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A source-bound authority change is stale only when the closed compiler can prove it.
|
|
12
|
+
* Input, parser, and filesystem failures are deliberately kept unverifiable.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assessScaffoldPlanAuthority(consumerRoot: string, plan: AuthorityScaffoldPlan, faultInjector?: ScaffoldAuthorityInputFaultInjector): Promise<ScaffoldAuthorityAssessment>;
|
|
3
15
|
//# sourceMappingURL=node-plan-authority.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-plan-authority.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-plan-authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"node-plan-authority.d.ts","sourceRoot":"","sources":["../../../../src/scaffolding/adapters/node/node-plan-authority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAKrE,OAAO,EAEL,KAAK,mCAAmC,EACzC,MAAM,kCAAkC,CAAC;AAE1C,MAAM,MAAM,2BAA2B,GACnC;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,CAAC;AA2BvC;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,qBAAqB,EAC3B,aAAa,CAAC,EAAE,mCAAmC,GAClD,OAAO,CAAC,2BAA2B,CAAC,CAgBtC"}
|