diff --git a/.github/workflows/corpus.yml b/.github/workflows/corpus.yml index 15874df..44011e3 100644 --- a/.github/workflows/corpus.yml +++ b/.github/workflows/corpus.yml @@ -31,7 +31,7 @@ permissions: env: # chant is public, and the corpus is read at the version this repository # pins in its devDependencies (0.72.0). Bump both together. - CHANT_REF: chant-v0.109.0 + CHANT_REF: chant-v0.110.0 CHANT_DIR: .chant-corpus jobs: diff --git a/package-lock.json b/package-lock.json index 6499403..6b261bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "packages/*" ], "devDependencies": { - "@intentius/chant": "0.109.0", + "@intentius/chant": "0.110.0", "@types/node": "^24.0.0", "sentences": "0.5.1", "typescript": "^5.9.0", @@ -491,9 +491,9 @@ } }, "node_modules/@intentius/chant": { - "version": "0.109.0", - "resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.109.0.tgz", - "integrity": "sha512-Y0Gd8mEKrjfoGRFJh7wg3w02gGs20gEsm4FlQdEqD9DqujzGr0PLiy3ysG6O1icLpjWKoCYDZ1dkL8BbnzzmoQ==", + "version": "0.110.0", + "resolved": "https://registry.npmjs.org/@intentius/chant/-/chant-0.110.0.tgz", + "integrity": "sha512-8a8WBcp5SgW6/CW+NeORAjcKyHzSCPL4m4uFa5aQtTDnlFYQqtZR03euKUDRetyoToEt1DYgga54s1fYfxSUVg==", "dev": true, "license": "Apache-2.0", "dependencies": { diff --git a/package.json b/package.json index f4bb426..454ac89 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "smoke:published": "bash scripts/smoke-published.sh" }, "devDependencies": { - "@intentius/chant": "0.109.0", + "@intentius/chant": "0.110.0", "@types/node": "^24.0.0", "sentences": "0.5.1", "typescript": "^5.9.0", diff --git a/packages/conformance/corpus-report.md b/packages/conformance/corpus-report.md index 6f7e36f..a3148df 100644 --- a/packages/conformance/corpus-report.md +++ b/packages/conformance/corpus-report.md @@ -2,8 +2,8 @@ Generated by `npm run corpus` (#25). Do not edit, and do not regenerate partially. A run without the Rust evaluator built, or without the external checkouts fetched, silently drops whole sections and every value in them — and anything downstream that trusted those values then fails somewhere that does not point at the cause. Regenerate all of it or none of it. -- engine under test: `chant@0.109.0`, declaring spec `2.2` -- corpus: chant `0.109.0` at `a2d3c66aa`, 116 entries, 467 files +- engine under test: `chant@0.110.0`, declaring spec `2.3` +- corpus: chant `0.110.0` at `037f355dd`, 116 entries, 467 files ## Totals @@ -25,7 +25,7 @@ None. ## The data-host column -- evaluator: `tsad-eval/0.1.0`, declaring spec `2.2`, no JavaScript runtime +- evaluator: `tsad-eval/0.1.0`, declaring spec `2.3`, no JavaScript runtime | Files | Agreed | Both fold | |---|---|---| @@ -86,17 +86,19 @@ Every field an entity emits, by where its value came from (F-Obs-Provenance): wr | Verdict | Files | With a record | Entities | Fields | Direct | Composite parameter | Composite literal | Unknown | Known share | Known among composite fields | |---|---|---|---|---|---|---|---|---|---|---| -| fold | 374 | 374 | 1159 | 6709 | 1442 | 14 | 4 | 5249 | 21.8% | 0.3% | +| fold | 374 | 374 | 1159 | 6709 | 1368 | 14 | 4 | 5323 | 20.7% | 0.3% | | run | 93 | 93 | 354 | 2178 | 1216 | 0 | 0 | 962 | 55.8% | 0.0% | -| all | 467 | 467 | 1513 | 8887 | 2658 | 14 | 4 | 6211 | 30.1% | 0.3% | +| all | 467 | 467 | 1513 | 8887 | 2584 | 14 | 4 | 6285 | 29.3% | 0.3% | Unknown fields by reason: | Reason | Fold | Run | |---|---|---| | `composite-not-interpreted` | 5249 | 962 | +| `host-call` | 11 | 0 | +| `host-value` | 63 | 0 | -Unknown fields by the composite that expanded them, largest first. `project` marks a composite defined in the declaring file or a project file it imports, by the name it gives `Composite`; `package` is every other, a lexicon's composite, which chant invokes rather than interprets. +Unknown fields by the composite that expanded them, largest first. `project` marks a composite defined in the declaring file or a project file it imports, by the name it gives `Composite`; `package` is every other, a lexicon's composite, which chant interprets when its body is in the subset and invokes otherwise. | Composite | Fold | Run | |---|---|---| @@ -120,6 +122,7 @@ Unknown fields by the composite that expanded them, largest first. `project` mar | `GkeCluster (package)` | 27 | 52 | | `FargateAlb (package)` | 78 | 0 | | `CloudSqlInstance (package)` | 0 | 75 | +| `(none)` | 74 | 0 | | `ConfiguredApp (package)` | 24 | 49 | | `WorkerPool (package)` | 69 | 0 | | `MetricsServer (package)` | 68 | 0 | @@ -269,7 +272,7 @@ Per file, every file that emits a field: | `examples/cockroachdb-multi-region-gke/west/infra.ts` | fold | 10 | 92 | 0 | 0 | 0 | 92 | composite-not-interpreted 92 | | `examples/cockroachdb-multi-region-gke/west/k8s.ts` | fold | 29 | 281 | 0 | 0 | 0 | 281 | composite-not-interpreted 281 | | `examples/components-aws-e2e/bucket-policy.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `examples/components-aws-e2e/infra.ts` | fold | 2 | 9 | 9 | 0 | 0 | 0 | | +| `examples/components-aws-e2e/infra.ts` | fold | 2 | 9 | 8 | 0 | 0 | 1 | host-value 1 | | `examples/fan-out-estate/app-01/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | | `examples/fan-out-estate/app-02/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | | `examples/fan-out-estate/app-03/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | @@ -289,9 +292,9 @@ Per file, every file that emits a field: | `examples/flux-apps/apps/web/web.ts` | run | 4 | 29 | 11 | 0 | 0 | 18 | composite-not-interpreted 18 | | `examples/flux-apps/flux/apps.ts` | run | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/flux-apps/platform/platform.ts` | run | 2 | 4 | 4 | 0 | 0 | 0 | | -| `examples/fly-deploy-rollback/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `examples/fly-durable-deploy/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `examples/fly-reconcile/infra.ts` | fold | 4 | 11 | 11 | 0 | 0 | 0 | | +| `examples/fly-deploy-rollback/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `examples/fly-durable-deploy/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `examples/fly-reconcile/infra.ts` | fold | 4 | 11 | 10 | 0 | 0 | 1 | host-value 1 | | `examples/fold-adversarial/function-call-depth-bound.ts` | run | 1 | 3 | 3 | 0 | 0 | 0 | | | `examples/fold-adversarial/helper-name-shadowed.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/fold-adversarial/optional-chain-short-circuit.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | @@ -314,7 +317,7 @@ Per file, every file that emits a field: | `examples/gitlab-aws-alb-infra/network.ts` | fold | 16 | 38 | 0 | 0 | 0 | 38 | composite-not-interpreted 38 | | `examples/gitlab-aws-alb-infra/pipeline.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | | `examples/gitlab-aws-alb-services/ci.ts` | fold | 4 | 6 | 6 | 0 | 0 | 0 | | -| `examples/gitlab-aws-alb-services/pipeline.ts` | fold | 3 | 19 | 19 | 0 | 0 | 0 | | +| `examples/gitlab-aws-alb-services/pipeline.ts` | fold | 3 | 19 | 17 | 0 | 0 | 2 | host-value 2 | | `examples/gitlab-aws-alb-services/services.ts` | fold | 14 | 58 | 0 | 0 | 0 | 58 | composite-not-interpreted 58 | | `examples/gitlab-cells-single-region-gke/cell/index.ts` | run | 42 | 332 | 236 | 0 | 0 | 96 | composite-not-interpreted 96 | | `examples/gitlab-cells-single-region-gke/gcp/cache.ts` | run | 4 | 48 | 0 | 0 | 0 | 48 | composite-not-interpreted 48 | @@ -340,10 +343,10 @@ Per file, every file that emits a field: | `examples/gitlab-cells-single-region-gke/system/namespace.ts` | run | 3 | 20 | 0 | 0 | 0 | 20 | composite-not-interpreted 20 | | `examples/gitlab-cells-single-region-gke/system/storage.ts` | fold | 1 | 11 | 0 | 0 | 0 | 11 | composite-not-interpreted 11 | | `examples/gitlab-cells-single-region-gke/system/topology-service.ts` | run | 5 | 36 | 36 | 0 | 0 | 0 | | -| `examples/k8s-aks-microservice/infra/cluster.ts` | fold | 8 | 51 | 21 | 0 | 0 | 30 | composite-not-interpreted 30 | +| `examples/k8s-aks-microservice/infra/cluster.ts` | fold | 8 | 51 | 18 | 0 | 0 | 33 | host-value 3, composite-not-interpreted 30 | | `examples/k8s-aks-microservice/infra/dns.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | | `examples/k8s-aks-microservice/infra/networking.ts` | fold | 5 | 25 | 0 | 0 | 0 | 25 | composite-not-interpreted 25 | -| `examples/k8s-aks-microservice/k8s/app.ts` | fold | 6 | 61 | 6 | 0 | 0 | 55 | composite-not-interpreted 55 | +| `examples/k8s-aks-microservice/k8s/app.ts` | fold | 6 | 61 | 5 | 0 | 0 | 56 | host-call 1, composite-not-interpreted 55 | | `examples/k8s-aks-microservice/k8s/ingress.ts` | fold | 5 | 39 | 0 | 0 | 0 | 39 | composite-not-interpreted 39 | | `examples/k8s-aks-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-aks-microservice/k8s/observability.ts` | fold | 6 | 39 | 2 | 0 | 0 | 37 | composite-not-interpreted 37 | @@ -354,7 +357,7 @@ Per file, every file that emits a field: | `examples/k8s-eks-microservice/infra/dns.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `examples/k8s-eks-microservice/infra/irsa.ts` | fold | 7 | 21 | 21 | 0 | 0 | 0 | | | `examples/k8s-eks-microservice/infra/networking.ts` | fold | 16 | 38 | 0 | 0 | 0 | 38 | composite-not-interpreted 38 | -| `examples/k8s-eks-microservice/k8s/app.ts` | fold | 14 | 128 | 6 | 0 | 0 | 122 | composite-not-interpreted 122 | +| `examples/k8s-eks-microservice/k8s/app.ts` | fold | 14 | 128 | 5 | 0 | 0 | 123 | host-call 1, composite-not-interpreted 122 | | `examples/k8s-eks-microservice/k8s/ingress.ts` | fold | 5 | 39 | 0 | 0 | 0 | 39 | composite-not-interpreted 39 | | `examples/k8s-eks-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-eks-microservice/k8s/observability.ts` | fold | 12 | 76 | 4 | 0 | 0 | 72 | composite-not-interpreted 72 | @@ -362,7 +365,7 @@ Per file, every file that emits a field: | `examples/k8s-gke-microservice/infra/cluster.ts` | fold | 14 | 95 | 68 | 0 | 0 | 27 | composite-not-interpreted 27 | | `examples/k8s-gke-microservice/infra/dns.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | | `examples/k8s-gke-microservice/infra/networking.ts` | fold | 7 | 50 | 0 | 0 | 0 | 50 | composite-not-interpreted 50 | -| `examples/k8s-gke-microservice/k8s/app.ts` | fold | 6 | 60 | 6 | 0 | 0 | 54 | composite-not-interpreted 54 | +| `examples/k8s-gke-microservice/k8s/app.ts` | fold | 6 | 60 | 5 | 0 | 0 | 55 | host-call 1, composite-not-interpreted 54 | | `examples/k8s-gke-microservice/k8s/ingress.ts` | fold | 5 | 37 | 0 | 0 | 0 | 37 | composite-not-interpreted 37 | | `examples/k8s-gke-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-gke-microservice/k8s/observability.ts` | fold | 12 | 76 | 4 | 0 | 0 | 72 | composite-not-interpreted 72 | @@ -371,7 +374,7 @@ Per file, every file that emits a field: | `examples/local-cloud-trio/aws/infra.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/local-cloud-trio/azure/infra.ts` | fold | 1 | 22 | 0 | 0 | 0 | 22 | composite-not-interpreted 22 | | `examples/local-cloud-trio/gcp/infra.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `examples/local-fly/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | +| `examples/local-fly/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `examples/ray-kuberay-gke/infra/cluster.ts` | run | 6 | 57 | 16 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/ray-kuberay-gke/infra/filestore.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/ray-kuberay-gke/infra/networking.ts` | run | 3 | 14 | 0 | 0 | 0 | 14 | composite-not-interpreted 14 | @@ -379,29 +382,29 @@ Per file, every file that emits a field: | `examples/ray-kuberay-gke/k8s/namespace.ts` | run | 3 | 18 | 0 | 0 | 0 | 18 | composite-not-interpreted 18 | | `examples/ray-kuberay-gke/k8s/storage.ts` | run | 2 | 15 | 15 | 0 | 0 | 0 | | | `examples/testing-harness-aws/bucket-policy.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `examples/testing-harness-aws/infra.ts` | fold | 2 | 10 | 10 | 0 | 0 | 0 | | +| `examples/testing-harness-aws/infra.ts` | fold | 2 | 10 | 8 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/core-concepts/composite-usage.ts` | fold | 2 | 8 | 0 | 4 | 4 | 0 | | | `lexicons/aws/examples/core-concepts/cross-ref-combined.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/cross-ref-policy.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/cross-ref-storage.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/aws/examples/core-concepts/cross-ref-storage.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `lexicons/aws/examples/core-concepts/naming-sequential.ts` | run | 3 | 15 | 15 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/naming-shared-config.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/parameters.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/preset-defaults.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/preset-usage.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-attributes.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-basic.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-tags.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/action-constants.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | +| `lexicons/aws/examples/core-concepts/preset-usage.ts` | fold | 1 | 3 | 2 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-attributes.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-basic.ts` | fold | 1 | 6 | 5 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-tags.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/docs-snippets/action-constants.ts` | fold | 2 | 8 | 6 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/docs-snippets/builtin-composites.ts` | fold | 40 | 147 | 0 | 0 | 0 | 147 | composite-not-interpreted 147 | | `lexicons/aws/examples/docs-snippets/computed-defaults.ts` | run | 2 | 12 | 0 | 0 | 0 | 12 | composite-not-interpreted 12 | -| `lexicons/aws/examples/docs-snippets/conditions.ts` | fold | 1 | 7 | 7 | 0 | 0 | 0 | | +| `lexicons/aws/examples/docs-snippets/conditions.ts` | fold | 1 | 7 | 6 | 0 | 0 | 1 | host-value 1 | | `lexicons/aws/examples/docs-snippets/config.ts` | fold | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/depends-on.ts` | fold | 3 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/lint-waw006-bad.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/lint-waw006-good.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/lint-waw009-bad.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/lint-waw009-good.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/aws/examples/docs-snippets/lint-waw009-bad.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/docs-snippets/lint-waw009-good.ts` | fold | 2 | 5 | 3 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/docs-snippets/mappings.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/output-explicit.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/parameter-cross-file-ref.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | @@ -457,51 +460,51 @@ Per file, every file that emits a field: | `lexicons/docker/examples/basic-app/api.ts` | fold | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/docker/examples/basic-app/compose.ts` | fold | 2 | 16 | 16 | 0 | 0 | 0 | | | `lexicons/docker/examples/otel-collector/compose.ts` | fold | 3 | 9 | 3 | 0 | 0 | 6 | composite-not-interpreted 6 | -| `lexicons/fly/examples/getting-started/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/fly/examples/otel-collector/infra.ts` | fold | 2 | 5 | 2 | 0 | 0 | 3 | composite-not-interpreted 3 | +| `lexicons/fly/examples/getting-started/infra.ts` | fold | 2 | 5 | 3 | 0 | 0 | 2 | host-value 2 | +| `lexicons/fly/examples/otel-collector/infra.ts` | fold | 2 | 5 | 1 | 0 | 0 | 4 | host-value 1, composite-not-interpreted 3 | | `lexicons/forgejo/examples/ci-workflow/pipeline.ts` | fold | 3 | 10 | 10 | 0 | 0 | 0 | | | `lexicons/gcp/examples/basic-bucket/infra.ts` | fold | 1 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-function/infra.ts` | fold | 4 | 24 | 24 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-run/infra.ts` | fold | 2 | 14 | 14 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-sql/infra.ts` | fold | 4 | 24 | 24 | 0 | 0 | 0 | | +| `lexicons/gcp/examples/cloud-function/infra.ts` | fold | 4 | 24 | 22 | 0 | 0 | 2 | host-value 2 | +| `lexicons/gcp/examples/cloud-run/infra.ts` | fold | 2 | 14 | 11 | 0 | 0 | 3 | host-value 3 | +| `lexicons/gcp/examples/cloud-sql/infra.ts` | fold | 4 | 24 | 23 | 0 | 0 | 1 | host-value 1 | | `lexicons/gcp/examples/cloud-storage-lifecycle/infra.ts` | fold | 1 | 11 | 11 | 0 | 0 | 0 | | | `lexicons/gcp/examples/gke-cluster/infra.ts` | fold | 2 | 19 | 19 | 0 | 0 | 0 | | | `lexicons/gcp/examples/pubsub/infra.ts` | fold | 4 | 19 | 19 | 0 | 0 | 0 | | | `lexicons/gcp/examples/vpc-network/infra.ts` | fold | 8 | 42 | 42 | 0 | 0 | 0 | | | `lexicons/github/examples/deploy-pages/pipeline.ts` | fold | 3 | 15 | 15 | 0 | 0 | 0 | | -| `lexicons/github/examples/docker-build/pipeline.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | +| `lexicons/github/examples/docker-build/pipeline.ts` | fold | 2 | 8 | 7 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/docs-snippets/composites-usage.ts` | run | 9 | 28 | 2 | 0 | 0 | 26 | composite-not-interpreted 26 | -| `lexicons/github/examples/docs-snippets/lint-gha003.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | +| `lexicons/github/examples/docs-snippets/lint-gha003.ts` | fold | 2 | 4 | 3 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/docs-snippets/quickstart.ts` | fold | 2 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/github/examples/docs-snippets/variables-usage.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | +| `lexicons/github/examples/docs-snippets/variables-usage.ts` | fold | 1 | 2 | 1 | 0 | 0 | 1 | host-value 1 | | `lexicons/github/examples/getting-started/ci.ts` | fold | 2 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/github/examples/matrix-test/pipeline.ts` | fold | 3 | 13 | 13 | 0 | 0 | 0 | | -| `lexicons/github/examples/node-ci/pipeline.ts` | fold | 2 | 9 | 9 | 0 | 0 | 0 | | +| `lexicons/github/examples/matrix-test/pipeline.ts` | fold | 3 | 13 | 9 | 0 | 0 | 4 | host-call 4 | +| `lexicons/github/examples/node-ci/pipeline.ts` | fold | 2 | 9 | 8 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/release-please/pipeline.ts` | fold | 3 | 14 | 14 | 0 | 0 | 0 | | -| `lexicons/github/examples/reusable-workflow/pipeline.ts` | fold | 4 | 23 | 23 | 0 | 0 | 0 | | +| `lexicons/github/examples/reusable-workflow/pipeline.ts` | fold | 4 | 23 | 22 | 0 | 0 | 1 | host-call 1 | | `lexicons/gitlab/examples/docker-build/pipeline.ts` | fold | 2 | 9 | 3 | 0 | 0 | 6 | composite-not-interpreted 6 | | `lexicons/gitlab/examples/docs-snippets/config.ts` | run | 8 | 15 | 15 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/defaults.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/defaults.ts` | fold | 1 | 3 | 2 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/environment.ts` | run | 2 | 6 | 6 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/images.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/job-basic.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/job-test.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/lint-wgl001.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/lint-wgl001.ts` | fold | 2 | 6 | 5 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/lint-wgl002.ts` | fold | 3 | 6 | 6 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/lint-wgl003.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/lint-wgl004.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/lint-wgl011.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/lint-wgl011.ts` | fold | 1 | 2 | 1 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/pipeline-shared-config.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/quickstart.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/quickstart.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/reference-basic.ts` | run | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/reference-shared.ts` | run | 3 | 9 | 9 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/reference-vs-import.ts` | run | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/rules-conditions.ts` | fold | 3 | 6 | 6 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/rules-conditions.ts` | fold | 3 | 6 | 4 | 0 | 0 | 2 | host-value 2 | | `lexicons/gitlab/examples/docs-snippets/stages.ts` | fold | 4 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/trigger.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/variables-patterns.ts` | fold | 5 | 9 | 9 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/variables-usage.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/workflow.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/variables-patterns.ts` | fold | 5 | 9 | 4 | 0 | 0 | 5 | host-value 5 | +| `lexicons/gitlab/examples/docs-snippets/variables-usage.ts` | fold | 2 | 3 | 1 | 0 | 0 | 2 | host-value 2 | +| `lexicons/gitlab/examples/docs-snippets/workflow.ts` | fold | 1 | 3 | 1 | 0 | 0 | 2 | host-value 2 | | `lexicons/gitlab/examples/getting-started/config.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/getting-started/pipeline.ts` | fold | 3 | 12 | 12 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/monorepo-pipeline/pipeline.ts` | run | 4 | 16 | 16 | 0 | 0 | 0 | | @@ -524,10 +527,10 @@ Per file, every file that emits a field: | `lexicons/helm/examples/composites-production/cron-secured.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `lexicons/helm/examples/composites-production/hardened-web-app.ts` | fold | 7 | 84 | 0 | 0 | 0 | 84 | composite-not-interpreted 84 | | `lexicons/helm/examples/composites-production/monitored-api.ts` | fold | 7 | 58 | 0 | 0 | 0 | 58 | composite-not-interpreted 58 | -| `lexicons/helm/examples/cron-job/chart.ts` | fold | 3 | 34 | 34 | 0 | 0 | 0 | | +| `lexicons/helm/examples/cron-job/chart.ts` | fold | 3 | 34 | 27 | 0 | 0 | 7 | host-value 7 | | `lexicons/helm/examples/microservice-chart/infra.ts` | fold | 9 | 101 | 0 | 0 | 0 | 101 | composite-not-interpreted 101 | -| `lexicons/helm/examples/multi-container/chart.ts` | fold | 4 | 35 | 35 | 0 | 0 | 0 | | -| `lexicons/helm/examples/stateful-service/chart.ts` | fold | 4 | 34 | 34 | 0 | 0 | 0 | | +| `lexicons/helm/examples/multi-container/chart.ts` | fold | 4 | 35 | 31 | 0 | 0 | 4 | host-value 4 | +| `lexicons/helm/examples/stateful-service/chart.ts` | fold | 4 | 34 | 30 | 0 | 0 | 4 | host-value 4 | | `lexicons/helm/examples/web-app-with-ingress/infra.ts` | fold | 7 | 81 | 0 | 0 | 0 | 81 | composite-not-interpreted 81 | | `lexicons/k8s/examples/basic-deployment/infra.ts` | fold | 2 | 10 | 10 | 0 | 0 | 0 | | | `lexicons/k8s/examples/batch-workers/cron.ts` | fold | 4 | 31 | 0 | 0 | 0 | 31 | composite-not-interpreted 31 | diff --git a/packages/conformance/provenance-report.md b/packages/conformance/provenance-report.md index ee9dd36..1280ef6 100644 --- a/packages/conformance/provenance-report.md +++ b/packages/conformance/provenance-report.md @@ -2,8 +2,8 @@ Generated by `npm run corpus` (#237) when the chant under test reports fold provenance. Do not edit. The same section is in `corpus-report.md` once the pinned chant carries provenance. -- engine under test: `chant@0.109.0`, declaring spec `2.2` -- corpus: chant `0.109.0` at `a2d3c66aa`, 116 entries, 467 files +- engine under test: `chant@0.110.0`, declaring spec `2.3` +- corpus: chant `0.110.0` at `037f355dd`, 116 entries, 467 files ## The provenance column @@ -11,15 +11,17 @@ Every field an entity emits, by where its value came from (F-Obs-Provenance): wr | Verdict | Files | With a record | Entities | Fields | Direct | Composite parameter | Composite literal | Unknown | Known share | Known among composite fields | |---|---|---|---|---|---|---|---|---|---|---| -| fold | 374 | 374 | 1159 | 6709 | 1442 | 14 | 4 | 5249 | 21.8% | 0.3% | +| fold | 374 | 374 | 1159 | 6709 | 1368 | 14 | 4 | 5323 | 20.7% | 0.3% | | run | 93 | 93 | 354 | 2178 | 1216 | 0 | 0 | 962 | 55.8% | 0.0% | -| all | 467 | 467 | 1513 | 8887 | 2658 | 14 | 4 | 6211 | 30.1% | 0.3% | +| all | 467 | 467 | 1513 | 8887 | 2584 | 14 | 4 | 6285 | 29.3% | 0.3% | Unknown fields by reason: | Reason | Fold | Run | |---|---|---| | `composite-not-interpreted` | 5249 | 962 | +| `host-call` | 11 | 0 | +| `host-value` | 63 | 0 | Unknown fields by the composite that expanded them, largest first. `project` marks a composite defined in the declaring file or a project file it imports, by the name it gives `Composite`; `package` is every other, a lexicon's composite, which chant interprets when its body is in the subset and invokes otherwise. @@ -45,6 +47,7 @@ Unknown fields by the composite that expanded them, largest first. `project` mar | `GkeCluster (package)` | 27 | 52 | | `FargateAlb (package)` | 78 | 0 | | `CloudSqlInstance (package)` | 0 | 75 | +| `(none)` | 74 | 0 | | `ConfiguredApp (package)` | 24 | 49 | | `WorkerPool (package)` | 69 | 0 | | `MetricsServer (package)` | 68 | 0 | @@ -194,7 +197,7 @@ Per file, every file that emits a field: | `examples/cockroachdb-multi-region-gke/west/infra.ts` | fold | 10 | 92 | 0 | 0 | 0 | 92 | composite-not-interpreted 92 | | `examples/cockroachdb-multi-region-gke/west/k8s.ts` | fold | 29 | 281 | 0 | 0 | 0 | 281 | composite-not-interpreted 281 | | `examples/components-aws-e2e/bucket-policy.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `examples/components-aws-e2e/infra.ts` | fold | 2 | 9 | 9 | 0 | 0 | 0 | | +| `examples/components-aws-e2e/infra.ts` | fold | 2 | 9 | 8 | 0 | 0 | 1 | host-value 1 | | `examples/fan-out-estate/app-01/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | | `examples/fan-out-estate/app-02/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | | `examples/fan-out-estate/app-03/resources.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | @@ -214,9 +217,9 @@ Per file, every file that emits a field: | `examples/flux-apps/apps/web/web.ts` | run | 4 | 29 | 11 | 0 | 0 | 18 | composite-not-interpreted 18 | | `examples/flux-apps/flux/apps.ts` | run | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/flux-apps/platform/platform.ts` | run | 2 | 4 | 4 | 0 | 0 | 0 | | -| `examples/fly-deploy-rollback/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `examples/fly-durable-deploy/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `examples/fly-reconcile/infra.ts` | fold | 4 | 11 | 11 | 0 | 0 | 0 | | +| `examples/fly-deploy-rollback/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `examples/fly-durable-deploy/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `examples/fly-reconcile/infra.ts` | fold | 4 | 11 | 10 | 0 | 0 | 1 | host-value 1 | | `examples/fold-adversarial/function-call-depth-bound.ts` | run | 1 | 3 | 3 | 0 | 0 | 0 | | | `examples/fold-adversarial/helper-name-shadowed.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/fold-adversarial/optional-chain-short-circuit.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | @@ -239,7 +242,7 @@ Per file, every file that emits a field: | `examples/gitlab-aws-alb-infra/network.ts` | fold | 16 | 38 | 0 | 0 | 0 | 38 | composite-not-interpreted 38 | | `examples/gitlab-aws-alb-infra/pipeline.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | | `examples/gitlab-aws-alb-services/ci.ts` | fold | 4 | 6 | 6 | 0 | 0 | 0 | | -| `examples/gitlab-aws-alb-services/pipeline.ts` | fold | 3 | 19 | 19 | 0 | 0 | 0 | | +| `examples/gitlab-aws-alb-services/pipeline.ts` | fold | 3 | 19 | 17 | 0 | 0 | 2 | host-value 2 | | `examples/gitlab-aws-alb-services/services.ts` | fold | 14 | 58 | 0 | 0 | 0 | 58 | composite-not-interpreted 58 | | `examples/gitlab-cells-single-region-gke/cell/index.ts` | run | 42 | 332 | 236 | 0 | 0 | 96 | composite-not-interpreted 96 | | `examples/gitlab-cells-single-region-gke/gcp/cache.ts` | run | 4 | 48 | 0 | 0 | 0 | 48 | composite-not-interpreted 48 | @@ -265,10 +268,10 @@ Per file, every file that emits a field: | `examples/gitlab-cells-single-region-gke/system/namespace.ts` | run | 3 | 20 | 0 | 0 | 0 | 20 | composite-not-interpreted 20 | | `examples/gitlab-cells-single-region-gke/system/storage.ts` | fold | 1 | 11 | 0 | 0 | 0 | 11 | composite-not-interpreted 11 | | `examples/gitlab-cells-single-region-gke/system/topology-service.ts` | run | 5 | 36 | 36 | 0 | 0 | 0 | | -| `examples/k8s-aks-microservice/infra/cluster.ts` | fold | 8 | 51 | 21 | 0 | 0 | 30 | composite-not-interpreted 30 | +| `examples/k8s-aks-microservice/infra/cluster.ts` | fold | 8 | 51 | 18 | 0 | 0 | 33 | host-value 3, composite-not-interpreted 30 | | `examples/k8s-aks-microservice/infra/dns.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | | `examples/k8s-aks-microservice/infra/networking.ts` | fold | 5 | 25 | 0 | 0 | 0 | 25 | composite-not-interpreted 25 | -| `examples/k8s-aks-microservice/k8s/app.ts` | fold | 6 | 61 | 6 | 0 | 0 | 55 | composite-not-interpreted 55 | +| `examples/k8s-aks-microservice/k8s/app.ts` | fold | 6 | 61 | 5 | 0 | 0 | 56 | host-call 1, composite-not-interpreted 55 | | `examples/k8s-aks-microservice/k8s/ingress.ts` | fold | 5 | 39 | 0 | 0 | 0 | 39 | composite-not-interpreted 39 | | `examples/k8s-aks-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-aks-microservice/k8s/observability.ts` | fold | 6 | 39 | 2 | 0 | 0 | 37 | composite-not-interpreted 37 | @@ -279,7 +282,7 @@ Per file, every file that emits a field: | `examples/k8s-eks-microservice/infra/dns.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `examples/k8s-eks-microservice/infra/irsa.ts` | fold | 7 | 21 | 21 | 0 | 0 | 0 | | | `examples/k8s-eks-microservice/infra/networking.ts` | fold | 16 | 38 | 0 | 0 | 0 | 38 | composite-not-interpreted 38 | -| `examples/k8s-eks-microservice/k8s/app.ts` | fold | 14 | 128 | 6 | 0 | 0 | 122 | composite-not-interpreted 122 | +| `examples/k8s-eks-microservice/k8s/app.ts` | fold | 14 | 128 | 5 | 0 | 0 | 123 | host-call 1, composite-not-interpreted 122 | | `examples/k8s-eks-microservice/k8s/ingress.ts` | fold | 5 | 39 | 0 | 0 | 0 | 39 | composite-not-interpreted 39 | | `examples/k8s-eks-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-eks-microservice/k8s/observability.ts` | fold | 12 | 76 | 4 | 0 | 0 | 72 | composite-not-interpreted 72 | @@ -287,7 +290,7 @@ Per file, every file that emits a field: | `examples/k8s-gke-microservice/infra/cluster.ts` | fold | 14 | 95 | 68 | 0 | 0 | 27 | composite-not-interpreted 27 | | `examples/k8s-gke-microservice/infra/dns.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | | `examples/k8s-gke-microservice/infra/networking.ts` | fold | 7 | 50 | 0 | 0 | 0 | 50 | composite-not-interpreted 50 | -| `examples/k8s-gke-microservice/k8s/app.ts` | fold | 6 | 60 | 6 | 0 | 0 | 54 | composite-not-interpreted 54 | +| `examples/k8s-gke-microservice/k8s/app.ts` | fold | 6 | 60 | 5 | 0 | 0 | 55 | host-call 1, composite-not-interpreted 54 | | `examples/k8s-gke-microservice/k8s/ingress.ts` | fold | 5 | 37 | 0 | 0 | 0 | 37 | composite-not-interpreted 37 | | `examples/k8s-gke-microservice/k8s/namespace.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/k8s-gke-microservice/k8s/observability.ts` | fold | 12 | 76 | 4 | 0 | 0 | 72 | composite-not-interpreted 72 | @@ -296,7 +299,7 @@ Per file, every file that emits a field: | `examples/local-cloud-trio/aws/infra.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/local-cloud-trio/azure/infra.ts` | fold | 1 | 22 | 0 | 0 | 0 | 22 | composite-not-interpreted 22 | | `examples/local-cloud-trio/gcp/infra.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `examples/local-fly/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | +| `examples/local-fly/infra.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `examples/ray-kuberay-gke/infra/cluster.ts` | run | 6 | 57 | 16 | 0 | 0 | 41 | composite-not-interpreted 41 | | `examples/ray-kuberay-gke/infra/filestore.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | | `examples/ray-kuberay-gke/infra/networking.ts` | run | 3 | 14 | 0 | 0 | 0 | 14 | composite-not-interpreted 14 | @@ -304,29 +307,29 @@ Per file, every file that emits a field: | `examples/ray-kuberay-gke/k8s/namespace.ts` | run | 3 | 18 | 0 | 0 | 0 | 18 | composite-not-interpreted 18 | | `examples/ray-kuberay-gke/k8s/storage.ts` | run | 2 | 15 | 15 | 0 | 0 | 0 | | | `examples/testing-harness-aws/bucket-policy.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `examples/testing-harness-aws/infra.ts` | fold | 2 | 10 | 10 | 0 | 0 | 0 | | +| `examples/testing-harness-aws/infra.ts` | fold | 2 | 10 | 8 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/core-concepts/composite-usage.ts` | fold | 2 | 8 | 0 | 4 | 4 | 0 | | | `lexicons/aws/examples/core-concepts/cross-ref-combined.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/cross-ref-policy.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/cross-ref-storage.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/aws/examples/core-concepts/cross-ref-storage.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `lexicons/aws/examples/core-concepts/naming-sequential.ts` | run | 3 | 15 | 15 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/naming-shared-config.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/parameters.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/core-concepts/preset-defaults.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/preset-usage.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-attributes.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-basic.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `lexicons/aws/examples/core-concepts/resource-tags.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/action-constants.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | +| `lexicons/aws/examples/core-concepts/preset-usage.ts` | fold | 1 | 3 | 2 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-attributes.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-basic.ts` | fold | 1 | 6 | 5 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/core-concepts/resource-tags.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/docs-snippets/action-constants.ts` | fold | 2 | 8 | 6 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/docs-snippets/builtin-composites.ts` | fold | 40 | 147 | 0 | 0 | 0 | 147 | composite-not-interpreted 147 | | `lexicons/aws/examples/docs-snippets/computed-defaults.ts` | run | 2 | 12 | 0 | 0 | 0 | 12 | composite-not-interpreted 12 | -| `lexicons/aws/examples/docs-snippets/conditions.ts` | fold | 1 | 7 | 7 | 0 | 0 | 0 | | +| `lexicons/aws/examples/docs-snippets/conditions.ts` | fold | 1 | 7 | 6 | 0 | 0 | 1 | host-value 1 | | `lexicons/aws/examples/docs-snippets/config.ts` | fold | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/depends-on.ts` | fold | 3 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/lint-waw006-bad.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/lint-waw006-good.ts` | fold | 1 | 6 | 6 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/lint-waw009-bad.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/aws/examples/docs-snippets/lint-waw009-good.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/aws/examples/docs-snippets/lint-waw009-bad.ts` | fold | 2 | 5 | 4 | 0 | 0 | 1 | host-value 1 | +| `lexicons/aws/examples/docs-snippets/lint-waw009-good.ts` | fold | 2 | 5 | 3 | 0 | 0 | 2 | host-value 2 | | `lexicons/aws/examples/docs-snippets/mappings.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/output-explicit.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | | `lexicons/aws/examples/docs-snippets/parameter-cross-file-ref.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | @@ -382,51 +385,51 @@ Per file, every file that emits a field: | `lexicons/docker/examples/basic-app/api.ts` | fold | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/docker/examples/basic-app/compose.ts` | fold | 2 | 16 | 16 | 0 | 0 | 0 | | | `lexicons/docker/examples/otel-collector/compose.ts` | fold | 3 | 9 | 3 | 0 | 0 | 6 | composite-not-interpreted 6 | -| `lexicons/fly/examples/getting-started/infra.ts` | fold | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/fly/examples/otel-collector/infra.ts` | fold | 2 | 5 | 2 | 0 | 0 | 3 | composite-not-interpreted 3 | +| `lexicons/fly/examples/getting-started/infra.ts` | fold | 2 | 5 | 3 | 0 | 0 | 2 | host-value 2 | +| `lexicons/fly/examples/otel-collector/infra.ts` | fold | 2 | 5 | 1 | 0 | 0 | 4 | host-value 1, composite-not-interpreted 3 | | `lexicons/forgejo/examples/ci-workflow/pipeline.ts` | fold | 3 | 10 | 10 | 0 | 0 | 0 | | | `lexicons/gcp/examples/basic-bucket/infra.ts` | fold | 1 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-function/infra.ts` | fold | 4 | 24 | 24 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-run/infra.ts` | fold | 2 | 14 | 14 | 0 | 0 | 0 | | -| `lexicons/gcp/examples/cloud-sql/infra.ts` | fold | 4 | 24 | 24 | 0 | 0 | 0 | | +| `lexicons/gcp/examples/cloud-function/infra.ts` | fold | 4 | 24 | 22 | 0 | 0 | 2 | host-value 2 | +| `lexicons/gcp/examples/cloud-run/infra.ts` | fold | 2 | 14 | 11 | 0 | 0 | 3 | host-value 3 | +| `lexicons/gcp/examples/cloud-sql/infra.ts` | fold | 4 | 24 | 23 | 0 | 0 | 1 | host-value 1 | | `lexicons/gcp/examples/cloud-storage-lifecycle/infra.ts` | fold | 1 | 11 | 11 | 0 | 0 | 0 | | | `lexicons/gcp/examples/gke-cluster/infra.ts` | fold | 2 | 19 | 19 | 0 | 0 | 0 | | | `lexicons/gcp/examples/pubsub/infra.ts` | fold | 4 | 19 | 19 | 0 | 0 | 0 | | | `lexicons/gcp/examples/vpc-network/infra.ts` | fold | 8 | 42 | 42 | 0 | 0 | 0 | | | `lexicons/github/examples/deploy-pages/pipeline.ts` | fold | 3 | 15 | 15 | 0 | 0 | 0 | | -| `lexicons/github/examples/docker-build/pipeline.ts` | fold | 2 | 8 | 8 | 0 | 0 | 0 | | +| `lexicons/github/examples/docker-build/pipeline.ts` | fold | 2 | 8 | 7 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/docs-snippets/composites-usage.ts` | run | 9 | 28 | 2 | 0 | 0 | 26 | composite-not-interpreted 26 | -| `lexicons/github/examples/docs-snippets/lint-gha003.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | +| `lexicons/github/examples/docs-snippets/lint-gha003.ts` | fold | 2 | 4 | 3 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/docs-snippets/quickstart.ts` | fold | 2 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/github/examples/docs-snippets/variables-usage.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | +| `lexicons/github/examples/docs-snippets/variables-usage.ts` | fold | 1 | 2 | 1 | 0 | 0 | 1 | host-value 1 | | `lexicons/github/examples/getting-started/ci.ts` | fold | 2 | 7 | 7 | 0 | 0 | 0 | | -| `lexicons/github/examples/matrix-test/pipeline.ts` | fold | 3 | 13 | 13 | 0 | 0 | 0 | | -| `lexicons/github/examples/node-ci/pipeline.ts` | fold | 2 | 9 | 9 | 0 | 0 | 0 | | +| `lexicons/github/examples/matrix-test/pipeline.ts` | fold | 3 | 13 | 9 | 0 | 0 | 4 | host-call 4 | +| `lexicons/github/examples/node-ci/pipeline.ts` | fold | 2 | 9 | 8 | 0 | 0 | 1 | host-call 1 | | `lexicons/github/examples/release-please/pipeline.ts` | fold | 3 | 14 | 14 | 0 | 0 | 0 | | -| `lexicons/github/examples/reusable-workflow/pipeline.ts` | fold | 4 | 23 | 23 | 0 | 0 | 0 | | +| `lexicons/github/examples/reusable-workflow/pipeline.ts` | fold | 4 | 23 | 22 | 0 | 0 | 1 | host-call 1 | | `lexicons/gitlab/examples/docker-build/pipeline.ts` | fold | 2 | 9 | 3 | 0 | 0 | 6 | composite-not-interpreted 6 | | `lexicons/gitlab/examples/docs-snippets/config.ts` | run | 8 | 15 | 15 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/defaults.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/defaults.ts` | fold | 1 | 3 | 2 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/environment.ts` | run | 2 | 6 | 6 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/images.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/job-basic.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/job-test.ts` | fold | 1 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/lint-wgl001.ts` | fold | 2 | 6 | 6 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/lint-wgl001.ts` | fold | 2 | 6 | 5 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/lint-wgl002.ts` | fold | 3 | 6 | 6 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/lint-wgl003.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/lint-wgl004.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/lint-wgl011.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/lint-wgl011.ts` | fold | 1 | 2 | 1 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/pipeline-shared-config.ts` | run | 1 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/quickstart.ts` | fold | 1 | 5 | 5 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/quickstart.ts` | fold | 1 | 5 | 4 | 0 | 0 | 1 | host-value 1 | | `lexicons/gitlab/examples/docs-snippets/reference-basic.ts` | run | 1 | 1 | 1 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/reference-shared.ts` | run | 3 | 9 | 9 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/reference-vs-import.ts` | run | 2 | 5 | 5 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/rules-conditions.ts` | fold | 3 | 6 | 6 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/rules-conditions.ts` | fold | 3 | 6 | 4 | 0 | 0 | 2 | host-value 2 | | `lexicons/gitlab/examples/docs-snippets/stages.ts` | fold | 4 | 8 | 8 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/docs-snippets/trigger.ts` | fold | 1 | 2 | 2 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/variables-patterns.ts` | fold | 5 | 9 | 9 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/variables-usage.ts` | fold | 2 | 3 | 3 | 0 | 0 | 0 | | -| `lexicons/gitlab/examples/docs-snippets/workflow.ts` | fold | 1 | 3 | 3 | 0 | 0 | 0 | | +| `lexicons/gitlab/examples/docs-snippets/variables-patterns.ts` | fold | 5 | 9 | 4 | 0 | 0 | 5 | host-value 5 | +| `lexicons/gitlab/examples/docs-snippets/variables-usage.ts` | fold | 2 | 3 | 1 | 0 | 0 | 2 | host-value 2 | +| `lexicons/gitlab/examples/docs-snippets/workflow.ts` | fold | 1 | 3 | 1 | 0 | 0 | 2 | host-value 2 | | `lexicons/gitlab/examples/getting-started/config.ts` | fold | 2 | 4 | 4 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/getting-started/pipeline.ts` | fold | 3 | 12 | 12 | 0 | 0 | 0 | | | `lexicons/gitlab/examples/monorepo-pipeline/pipeline.ts` | run | 4 | 16 | 16 | 0 | 0 | 0 | | @@ -449,10 +452,10 @@ Per file, every file that emits a field: | `lexicons/helm/examples/composites-production/cron-secured.ts` | fold | 4 | 41 | 0 | 0 | 0 | 41 | composite-not-interpreted 41 | | `lexicons/helm/examples/composites-production/hardened-web-app.ts` | fold | 7 | 84 | 0 | 0 | 0 | 84 | composite-not-interpreted 84 | | `lexicons/helm/examples/composites-production/monitored-api.ts` | fold | 7 | 58 | 0 | 0 | 0 | 58 | composite-not-interpreted 58 | -| `lexicons/helm/examples/cron-job/chart.ts` | fold | 3 | 34 | 34 | 0 | 0 | 0 | | +| `lexicons/helm/examples/cron-job/chart.ts` | fold | 3 | 34 | 27 | 0 | 0 | 7 | host-value 7 | | `lexicons/helm/examples/microservice-chart/infra.ts` | fold | 9 | 101 | 0 | 0 | 0 | 101 | composite-not-interpreted 101 | -| `lexicons/helm/examples/multi-container/chart.ts` | fold | 4 | 35 | 35 | 0 | 0 | 0 | | -| `lexicons/helm/examples/stateful-service/chart.ts` | fold | 4 | 34 | 34 | 0 | 0 | 0 | | +| `lexicons/helm/examples/multi-container/chart.ts` | fold | 4 | 35 | 31 | 0 | 0 | 4 | host-value 4 | +| `lexicons/helm/examples/stateful-service/chart.ts` | fold | 4 | 34 | 30 | 0 | 0 | 4 | host-value 4 | | `lexicons/helm/examples/web-app-with-ingress/infra.ts` | fold | 7 | 81 | 0 | 0 | 0 | 81 | composite-not-interpreted 81 | | `lexicons/k8s/examples/basic-deployment/infra.ts` | fold | 2 | 10 | 10 | 0 | 0 | 0 | | | `lexicons/k8s/examples/batch-workers/cron.ts` | fold | 4 | 31 | 0 | 0 | 0 | 31 | composite-not-interpreted 31 | diff --git a/packages/conformance/src/chant-agreement.test.ts b/packages/conformance/src/chant-agreement.test.ts index 322db3d..d836f42 100644 --- a/packages/conformance/src/chant-agreement.test.ts +++ b/packages/conformance/src/chant-agreement.test.ts @@ -31,17 +31,20 @@ const all = loadFixtures(join(dirname(fileURLToPath(import.meta.url)), "..", ".. // chant-v0.109.0: the pin predated the fold of a same-file call's result read // inside an argument (spec 2.2, F-Call step 6). // -// chant#3610 holds two F-Call fixtures out until the pin carries chant#3618. -// chant-v0.109.0 keeps a call result an argument resolved bound for the rest -// of the file, and it does not count a host composite's result as an instance. +// chant#3610 held two F-Call fixtures out until chant-v0.110.0, which carries +// chant#3618. chant-v0.109.0 kept a call result an argument resolved bound for +// the rest of the file, and did not count a host composite's result as an +// instance. // -// tsad#248 holds three provenance fixtures out. chant-v0.109.0 reports a host -// value written outside any composite as direct, or reports no origin for it, -// where spec 2.3 says unknown. Those differ from the fixture only, never from -// the reference's verdict, so the guard below reads chant's own report too. +// tsad#248 held three provenance fixtures out until chant-v0.110.0. chant#3619 +// reports a host call or host value in a resource field as unknown, so the +// field fixture agrees. A non-resource export such as `export const k = +// count([1, 2])` still has no provenance record in chant at all, a limit +// chant#3619 states, so the two fixtures that assert an export's origin stay +// held. Those differ from the fixture only, never from the reference's +// verdict, so the guard below reads chant's own report too. const HELD: readonly (readonly [string, Set])[] = [ - ["chant#3610", new Set(["F-Call/a-read-in-an-argument-binds-for-that-argument-only", "F-Call/a-host-composite-result-read-in-an-argument-folds"])], - ["tsad#248", new Set(["F-Obs-Provenance/a-host-call-in-a-field-is-unknown", "F-Obs-Provenance/a-host-call-at-an-export-is-unknown", "F-Obs-Provenance/a-host-value-is-unknown"])], + ["chant#3619 (no provenance for a non-resource export)", new Set(["F-Obs-Provenance/a-host-call-at-an-export-is-unknown", "F-Obs-Provenance/a-host-value-is-unknown"])], ]; const heldIds = new Set(HELD.flatMap(([, names]) => [...names])); const fixtures = all.filter((f) => !heldIds.has(f.id)); diff --git a/paper/draft.md b/paper/draft.md index ab58d7a..7b835a9 100644 --- a/paper/draft.md +++ b/paper/draft.md @@ -268,8 +268,9 @@ The conformance package runs chant's example corpus through both implementations | chant 0.72.3, specification 1.8 | 441 | 440 | 440 | 304 | | chant 0.73.0, specification 2.1 | 441 | 440 | 440 | 304 | | chant 0.109.0, specification 2.2 | 467 | 466 | 466 | 310 | +| chant 0.110.0, specification 2.3 | 467 | 466 | 466 | 310 | -The last row crosses a major. Specification 2.0 narrowed the call rule so that a project-file callee is refused outside the executing mode, and 2.1 bounded what an entity constructor may do. Neither moved the comparable set or the agreement. +The specification crosses a major version between chant `0.72.3` and chant `0.73.0`, where 2.0 narrowed the call rule so that a project-file callee is refused outside the executing mode, and 2.1 bounded what an entity constructor may do. Neither moved the comparable set or the agreement. A file is comparable when nothing disarmed either implementation before the comparison. Four things did at the first pin and one remains, the single file that imports a package the reference's host cannot load. Two were limits of chant's entry point, 52 files reading a host export that needed a lexicon list and 19 in entries with build parameters the entry could not be given, until chant `0.71.0` took both; one held 290 files reaching a host factory until the reference implemented the call rule; the last held 68 files calling a package export outside a declarator, until specification `1.6` wrote chant's behavior into the declarator and call rules. @@ -373,4 +374,4 @@ The subset is not the contribution; six languages have carved one more completel ## Appendix B. Artifacts -The specification is at version `2.3`, tagged `spec-2.3`, in the typescript-as-data repository under the INTENTIUS organization. The reference implementation and the conformance suite sit beside it with the Rust evaluator, and the two packages are published to npm at `2.3.0`. Every number in section 6 was taken on 7 October 2026 with chant pinned at `0.109.0` and the corpus at that release's revision, from the corpus report committed there; the external checkouts are pinned by revision in the conformance package's manifest. The documentation site renders every figure from those artifacts at build time, and one of its pages folds a file in the reader's browser with the WebAssembly evaluator. +The specification is at version `2.3`, tagged `spec-2.3`, in the typescript-as-data repository under the INTENTIUS organization. The reference implementation and the conformance suite sit beside it with the Rust evaluator, and the two packages are published to npm at `2.3.0`. Every number in section 6 was taken on 8 October 2026 with chant pinned at `0.110.0` and the corpus at that release's revision, from the corpus report committed there; the external checkouts are pinned by revision in the conformance package's manifest. The documentation site renders every figure from those artifacts at build time, and one of its pages folds a file in the reader's browser with the WebAssembly evaluator. diff --git a/paper/measurements.md b/paper/measurements.md index 122d608..09cfaa6 100644 --- a/paper/measurements.md +++ b/paper/measurements.md @@ -54,9 +54,9 @@ The chant side's `false` is also an unsampled invariant: the run fails unless ev |---|---|---|---| | chant `0.72.5` | 127, of which 65 are whole-build | 135 of 139 | all, on the 120 the pin answers; three wait on the adapter (the counters fixture and the executing pair, both halves in the release), and the four round-trip fixtures skip, chant having no generator | -The 3 rules without a fixture are listed in `spec/fixtures/UNCOVERED.md` with a reason each. All are properties no adapter can observe from verdicts: the host's own module tree, and what a host may vary or must not execute. Provenance has fixtures now. The capability is optional, so they are judged for an adapter that claims it and reported skipped for one that does not. chant claims it since `0.109.0` and passes five of the eight. The other three are held out until chant reports a host value as `unknown` (tsad#248). One disagreement existed between the reference and chant, on an envelope inside a template span. The recommendation went into the spec, chant-v0.68.0 implemented it, and a fixture now pins it (chant#2349). +The 3 rules without a fixture are listed in `spec/fixtures/UNCOVERED.md` with a reason each. All are properties no adapter can observe from verdicts: the host's own module tree, and what a host may vary or must not execute. Provenance has fixtures now. The capability is optional, so they are judged for an adapter that claims it and reported skipped for one that does not. chant claims it since `0.109.0`, and at `0.110.0` passes six of the eight. The other two assert the origin of a host value written at an export, and chant keeps no provenance record for an export that is not a resource, so they stay held out. One disagreement existed between the reference and chant, on an envelope inside a template span. The recommendation went into the spec, chant-v0.68.0 implemented it, and a fixture now pins it (chant#2349). -**Two profiles.** Spec `1.1` names `full` and `data-host` (F-Profile, F-Profile-DataHost); the second is the specification for an evaluator with no JavaScript runtime, and it is what a platform in another language implements. Fixtures carry profile tags, and 77 of the 139 belong to `data-host`, and the reference judged in that profile passes every one of them. That is a JavaScript implementation passing a profile defined by the absence of JavaScript, so it establishes that the profile is consistent. Whether it is implementable without an engine is what `evaluators/rust` establishes (#86): `tsad-eval`, written from the text in Rust on oxc, passes every fixture tagged for the profile, the four round-trip fixtures among them since it generates as well as folds (F-Val-Source), and agrees with the reference on each; compiled to WebAssembly, with no imports, the same crate passes the same fixtures and agrees with its own binary answer for answer (`rust-wasm-agreement.test.ts`), so the embedded form is the evaluator measured here and not a second one. Over chant's corpus it sits as a third column, both evaluators judged in `data-host` on the same host description: at `chant-v0.109.0` the two agree on all 467 files, and 149 fold on both sides to the same namespace, envelopes included. Writing it found the reference reviving and tainting in a profile that does neither, both fixed in the reference; the corpus report records the column's numbers. +**Two profiles.** Spec `1.1` names `full` and `data-host` (F-Profile, F-Profile-DataHost); the second is the specification for an evaluator with no JavaScript runtime, and it is what a platform in another language implements. Fixtures carry profile tags, and 77 of the 139 belong to `data-host`, and the reference judged in that profile passes every one of them. That is a JavaScript implementation passing a profile defined by the absence of JavaScript, so it establishes that the profile is consistent. Whether it is implementable without an engine is what `evaluators/rust` establishes (#86): `tsad-eval`, written from the text in Rust on oxc, passes every fixture tagged for the profile, the four round-trip fixtures among them since it generates as well as folds (F-Val-Source), and agrees with the reference on each; compiled to WebAssembly, with no imports, the same crate passes the same fixtures and agrees with its own binary answer for answer (`rust-wasm-agreement.test.ts`), so the embedded form is the evaluator measured here and not a second one. Over chant's corpus it sits as a third column, both evaluators judged in `data-host` on the same host description: at `chant-v0.110.0` the two agree on all 467 files, and 149 fold on both sides to the same namespace, envelopes included. Writing it found the reference reviving and tainting in a profile that does neither, both fixed in the reference; the corpus report records the column's numbers. **Coercion, stated as fixtures.** Thirteen expression fixtures pin the parts of ECMAScript an evaluator in another language has to reproduce bit for bit. Number formatting in template literals is the largest of them (shortest round-trip digits; `1e+21`; `-0` as `0`; a literal beyond 2^53 rounded before it is printed). The others are `+`'s string-or-number dispatch and relational comparison on strings; the logical operators returning an operand; unary coercion and IEEE division. The one deliberate departure, array spread refusing a string (R10.6), is pinned as well. The same family pins that an `undefined`-valued property is present in the folded namespace and travels through a spread, which is what a selective-by-omission consumer reads (#82). Both implementations agree on all thirteen. Their sufficiency is not established by that: the reference is JavaScript and passes them for free, so whether they are enough is known only once an evaluator with no JavaScript engine runs them (#86). @@ -80,20 +80,21 @@ The 3 rules without a fixture are listed in `spec/fixtures/UNCOVERED.md` with a | `chant-v0.72.5` at `f5c68a5a`, 109 entries, spec `1.8`, chant declaring `1.8` | 441 | 440 | 440 | 304 | | `chant-v0.73.0` at `8ccbf3f4`, 109 entries, spec `2.1`, chant declaring `2.1` | 441 | 440 | 440 | 304 | | `chant-v0.109.0` at `a2d3c66a`, 116 entries, spec `2.2`, chant declaring `2.2` | 467 | 466 | 466 | 310 | +| `chant-v0.110.0` at `037f355d`, 116 entries, spec `2.3`, chant declaring `2.3` | 467 | 466 | 466 | 310 | The `chant-v0.73.0` row crosses a major. Spec `2.0` narrowed F-Call step 5 so that a project-file callee is refused outside `ι = executing`, and spec `2.1` bounded what an entity constructor may do. Neither moved the comparable set or -the agreement. In the last row the spec is at `2.2`, which widened F-Call to a binding +the agreement. In the `chant-v0.109.0` row the spec is at `2.2`, which widened F-Call to a binding exported by name and to a same-file call's result read inside an argument. Every file the corpus gained between the two releases is comparable, and every -comparable file agrees. +comparable file agrees. Spec `2.3`, in the last row, moved neither. A file is comparable when nothing disarmed either implementation before the comparison started. Four things did so under `chant-v0.70.1`, two under `chant-v0.71.0`, and one remains under spec `1.6`, the single file that imports a package the host cannot load, which is the reference's limit. Each of the others retired for its own reason. Two were limits of chant's entry point rather than of chant, 52 files reading a host data export that `foldProject` could not resolve without a lexicon list and 19 in entries with build parameters it could not be given, until chant#2422 gave it both (#96). Another held 290 files reaching a host factory until F-Call was implemented in the reference (#109). The final one held 68 files calling a package export outside a declarator; the limit went when spec `1.6` wrote chant's behavior into F-Declarator and F-Call (#110). **What this establishes.** On 466 files nobody wrote for the purpose, the two implementations agree on every verdict, and on the 310 that fold on both sides the export namespaces are structurally identical, entity class and properties included. It is agreement between the two that was observed rather than designed; each run since the first has widened the set it is observed on without adding a disagreement, and the fourth, at spec `1.6`, covers every file but one. -**Its limit.** 466 of 467 is the comparable set; the one file outside it imports a package the reference's host could not load, and a limit is an over-approximation, so that file may also be hiding a disagreement. The second limit is a declarator call the reference would have to invoke (F-Call step 6); it is empty on chant's corpus and exists for the rows below. Every run shares a larger limit. The implementation under test declares spec `2.2` since `chant-v0.109.0`, and it is the implementation the text was extracted from, so this is agreement with a rewrite written from the text rather than between two independent readings. +**Its limit.** 466 of 467 is the comparable set; the one file outside it imports a package the reference's host could not load, and a limit is an over-approximation, so that file may also be hiding a disagreement. The second limit is a declarator call the reference would have to invoke (F-Call step 6); it is empty on chant's corpus and exists for the rows below. Every run shares a larger limit. The implementation under test declares spec `2.3` since `chant-v0.110.0`, and it is the implementation the text was extracted from, so this is agreement with a rewrite written from the text rather than between two independent readings. **Codebases nobody here maintains (#129).** Every entry above was written by the people who wrote the folder. A public project that depends on chant and is not maintained here runs beside it, at a pinned revision, each directory with a `chant.config.ts` an entry, with the imported project files a build would reach and the host a build would have at the pinned chant (`corpus-external.json`, `scripts/fetch-corpus-external.sh`). Its row never enters the totals above. A second project, private and so not in the weekly record, was run once locally the same way: 16 entries, 19 files, 12 comparable, all agreed. @@ -137,23 +138,24 @@ The port's own failure mode: chant-v0.69.0 extended an envelope check from three `packages/conformance/provenance-report.md` counts every field chant's corpus emits by where its value came from (#237). F-Obs-Provenance names four kinds. A field is declared directly or comes from a composite, and a composite's field is either one of its parameters or a literal it fixes. The fourth kind is unknown, with the reason chant records. Here a field means one of chant's emitted property paths through plain objects; an array counts whole. Files that fold are counted from the record `foldProject` returns. A file that runs has no fold record. For those the harness builds the entry the way `chant build` does and counts the record that build keeps. -This run is at the pin, `chant-v0.109.0` at `a2d3c66aa`, the first chant release that reports provenance. On a build of chant's main branch ahead of the release, an earlier run counted more than twice as many direct fields in files that fold. The release reports a member destructured from a lexicon composite's result as unknown rather than direct (chant#3608), and those fields moved from direct to unknown. +This run is at the pin, `chant-v0.110.0` at `037f355dd`. `chant-v0.109.0` was the first release to report provenance, and against it fewer fields in files that fold are direct. Since spec `2.3` a value host code produced is unknown wherever it is written, and `0.110.0` reports a host call or a lexicon package's export in a resource field that way (chant#3619). Composite fields did not move. | Files | Count | Entities | Fields | Direct | Composite parameter | Composite literal | Unknown | Known share | Known among composite fields | |---|---|---|---|---|---|---|---|---|---| -| fold | 374 | 1159 | 6709 | 1442 | 14 | 4 | 5249 | 21.8% | 0.3% | +| fold | 374 | 1159 | 6709 | 1368 | 14 | 4 | 5323 | 20.7% | 0.3% | | run | 93 | 354 | 2178 | 1216 | 0 | 0 | 962 | 55.8% | 0.0% | -| all | 467 | 1513 | 8887 | 2658 | 14 | 4 | 6211 | 30.1% | 0.3% | +| all | 467 | 1513 | 8887 | 2584 | 14 | 4 | 6285 | 29.3% | 0.3% | | `jhgaylor/infisical-chant`, run | 23 | 10 | 158 | 0 | 0 | 0 | 158 | 0.0% | 0.0% | The known share counts every field whose kind is not unknown, over all fields. A direct field is known by construction, and the third claim is about composites. The last column therefore leaves direct fields out of both sides: it is the attributed composite fields over every field a composite expanded. The external project's eight files that fold emit no field. -Every unknown carries the reason `composite-not-interpreted`. The other reason, `no-provenance`, needs a build in a sandboxed child. Nothing here builds that way. The unknowns come from two places: +chant gives the reason `composite-not-interpreted` for an unknown inside a composite, and `host-call` or `host-value` for a host value written outside one. The reason `no-provenance` needs a build in a sandboxed child. Nothing here builds that way. The unknowns come from three places: | Source of the unknown fields | Fold | Run | |---|---|---| | a composite a lexicon package ships, 107 of them | 5249 | 893 | | a project composite in a file that runs, called through a project function in another file or through `withDefaults` with computed defaults | 0 | 69 | +| a host call or a lexicon package's export, written in a resource field outside any composite | 74 | 0 | A lexicon's composite is host code. chant invokes its factory and interprets only a project's, so every field such a composite expands is unknown whichever path the file takes. Eight files of one example, `cockroachdb-multi-region-gke`, hold about a quarter of the unknowns in files that fold. Two project composites are called in files that fold, and all 18 of their fields are attributed. One sets four fields from a parameter and four from a literal. The other is the drift demo's `WebApp`, whose ten fields all come from its parameters.