Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/corpus.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
99 changes: 51 additions & 48 deletions packages/conformance/corpus-report.md

Large diffs are not rendered by default.

95 changes: 49 additions & 46 deletions packages/conformance/provenance-report.md

Large diffs are not rendered by default.

21 changes: 12 additions & 9 deletions packages/conformance/src/chant-agreement.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string>])[] = [
["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));
Expand Down
5 changes: 3 additions & 2 deletions paper/draft.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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.
Loading
Loading