Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
c56c55a
Ask "whose name is this?" once, and let new() name its own cell
aallan Aug 13, 2026
bcd2943
Close the fourth op-first consumer, and say what the tables really do
aallan Aug 13, 2026
15f7c19
Say "not every helper", and name the third route
aallan Aug 13, 2026
5b05b00
Make the assertions mean what they read as
aallan Aug 14, 2026
5249dfc
Merge pull request #1300 from aallan/fix/a-handler-op-ownership
aallan Aug 14, 2026
efe74b8
Give json_stringify one canonical form, produced by both runtimes
aallan Aug 13, 2026
70231f9
Make the browser Markdown renderer a fixed point, like the reference one
aallan Aug 13, 2026
dc1184f
Separate and keep a block quote's children, on both runtimes
aallan Aug 13, 2026
300a7c2
Point the surviving md_parse and traceback findings at their trackers
aallan Aug 14, 2026
0d07c46
Scope the Markdown parity sentences to what is measured
aallan Aug 14, 2026
7e3eab0
Carry a JSON object's key order through the browser host
aallan Aug 14, 2026
c6f25cf
Hold the parity and Markdown claims to what was measured
aallan Aug 14, 2026
4bb8ab6
Table the two bugs this branch's review turned up
aallan Aug 14, 2026
162cf0a
Write back the three MdBlock values the renderer could not
aallan Aug 14, 2026
6ec14d1
Say what the parity tests do now, in the FAQ's closing line
aallan Aug 14, 2026
b95524a
Table the lone-surrogate divergence the reachability probe found
aallan Aug 14, 2026
95f715f
State the Markdown rules at the strength the tests enforce
aallan Aug 14, 2026
b713cdf
Say which whitespace decimal_from_string ignores, and stop eating a BOM
aallan Aug 14, 2026
3006686
Make the Decimal example compile, and count the parsers that differ
aallan Aug 14, 2026
8e08ec9
Merge pull request #1303 from aallan/fix/d-browser-parity
aallan Aug 14, 2026
4eedb20
Ask the two namespace questions with two tables
aallan Aug 14, 2026
7c41138
Promote the two shapes the rails used to refuse
aallan Aug 14, 2026
0addc74
Retire two bug rows, and record the rule nobody has decided
aallan Aug 14, 2026
e54c572
Make the matrix drivers fail when the fixture does
aallan Aug 14, 2026
ca1043c
Anchor the #1304 claim to its measurement, and re-derive two counts
aallan Aug 14, 2026
3ad824b
Type the #1299 monkeypatch stand-ins and retire their suppressions
aallan Aug 14, 2026
1ffd540
Correct the dual-target conformance count, and label what it covers
aallan Aug 14, 2026
856e723
Merge pull request #1311 from aallan/fix/b-namespace-rails
aallan Aug 14, 2026
1ab8e98
Close two declaration-order latents: the prelude stamp, and prelude-A…
aallan Aug 14, 2026
b228313
Record two name-collision bugs the burndown surfaced but did not close
aallan Aug 14, 2026
00113f9
Close CodeRabbit wave 1: a vacuous parametrization, a stale enumerati…
aallan Aug 14, 2026
0cb7260
Close CodeRabbit wave 2: the shape key reads spellings, and four smal…
aallan Aug 14, 2026
05ae0ab
Refresh three free-form conformance counts in TESTING.md
aallan Aug 14, 2026
90ff698
Say what the two skipped-tests tables actually split
aallan Aug 14, 2026
96f9ac5
Merge pull request #1313 from aallan/fix/c-decl-order-latents
aallan Aug 14, 2026
0b65fb0
Run the examples in CI, not only check, verify and compile them
aallan Aug 14, 2026
7c1191e
State the newly-covered example count as the audit measured it
aallan Aug 14, 2026
7608582
Assert the examples run on two signals, not just an exit code
aallan Aug 14, 2026
e20e99d
Stop the gate creating the fixture it checks for, and close seven rev…
aallan Aug 14, 2026
e892560
Assert the error blocks by position, not merely by presence
aallan Aug 14, 2026
ba90561
Merge pull request #1314 from aallan/fix/examples-run-gate
aallan Aug 14, 2026
d062165
Refuse a bare name two imports supply, in every namespace
aallan Aug 14, 2026
c7c0ba3
Close CodeRabbit wave 1: six findings, two of them measured wrong
aallan Aug 14, 2026
7a314b5
Close CodeRabbit wave 2: a conformance pair that could half-rot, and …
aallan Aug 14, 2026
c141522
Merge pull request #1318 from aallan/fix/1304-refuse-everywhere
aallan Aug 14, 2026
790ea85
Give json_parse one accept domain, and host failures a Vera error
aallan Aug 14, 2026
411fab8
Share the accept-domain fixtures, and give the flag knobs one rule
aallan Aug 14, 2026
649f766
Close CodeRabbit wave 2: a vacuous assertion, and three stale surfaces
aallan Aug 14, 2026
1f5a23d
Sync the conformance-negative prose with the manifest
aallan Aug 14, 2026
0f39328
Merge pull request #1319 from aallan/fix/j-json-domain
aallan Aug 14, 2026
74e07ab
Resolve two codegen WASM-type disagreements, one of them silent
aallan Aug 14, 2026
6ce5e27
Close CR wave 1: a third consumer of the branch-order defect, and two…
aallan Aug 14, 2026
9ea3c26
Merge pull request #1323 from aallan/fix/l-wasm-types
aallan Aug 14, 2026
fa419c7
Guard the throw payload at the boundary it crosses
aallan Aug 14, 2026
059e715
Close the review's third finding, and refute its second
aallan Aug 14, 2026
189a253
A refinement over @Int no longer disables the widening guard
aallan Aug 14, 2026
48cb45f
Align the two trap-fix comments and the #754 row with the shipped guards
aallan Aug 14, 2026
6164cc9
Merge pull request #1325 from aallan/fix/e-throw-guard
aallan Aug 14, 2026
fd55202
Join over the branches in the two Vera-level type namers
aallan Aug 14, 2026
94202d9
Close the review round: the same gap in two more shapes, and exact WA…
aallan Aug 14, 2026
2082678
Track the deferred IndexExpr shape as #1327 on every surface that men…
aallan Aug 14, 2026
35dba18
Merge pull request #1326 from aallan/fix/h-infer-join
aallan Aug 14, 2026
21c140c
Enforce spec 1.4's reserved-keyword MUST, from the grammar
aallan Aug 14, 2026
635593c
Count the stress marker's instances, not one file's
aallan Aug 14, 2026
9ab7172
Scope the stress budget figure to the workflow's suite
aallan Aug 14, 2026
e0987eb
State where the reclamation battery actually runs, and track the gap
aallan Aug 14, 2026
2c179de
Merge pull request #1324 from aallan/fix/f-reserved-keywords
aallan Aug 14, 2026
c8c982f
Make the release body fit, and widen the gates to the drift they missed
aallan Aug 14, 2026
444df6e
Stop matching paths and patterns by their shape
aallan Aug 15, 2026
c26a7ee
Assert where the pooled work ran, not how many threads ran it
aallan Aug 15, 2026
e6e7cb6
Prove the decode with the decoder, not with a child process
aallan Aug 15, 2026
00be161
Say deselected where the sum means deselected
aallan Aug 15, 2026
8775b74
Merge pull request #1329 from aallan/fix/g-release-tooling
aallan Aug 15, 2026
ec85f25
Cut v0.1.12
aallan Aug 15, 2026
3ebe7b2
Close the release-PR review
aallan Aug 15, 2026
502ee7c
Take the review's cheap reals, refute the rest
aallan Aug 15, 2026
7601e86
Track #1331, gate the error-code figures, pin the shape boundary
aallan Aug 15, 2026
d6d37f4
Close the release PR's last eleven review findings
aallan Aug 15, 2026
84c6338
Track #1332 and give the two json_serde sections one owner
aallan Aug 15, 2026
91ad930
Reconcile the release round's own edits
aallan Aug 15, 2026
23bc160
Scope the tuple-component clauses to what each layer actually does
aallan Aug 15, 2026
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
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ jobs:
- name: Check no unexpected [E602]/[E604] silent skips (Layer 1 of #626)
run: python scripts/check_e602_clean.py

- name: Check every example runs trap-free or carries a skip property
run: python scripts/check_examples_run.py

- name: Check editor grammars and READMEs carry every built-in effect (#1156)
run: python scripts/check_editor_grammars.py

Expand Down
1 change: 1 addition & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ jobs:
run: |
python scripts/release.py notes \
--version "$VERSION" \
--repo "$GITHUB_REPOSITORY" \
--output release/RELEASE_NOTES.md
python scripts/release.py manifest \
--dist-dir dist \
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,9 @@ node_modules/
# and verifies, so it produces neither; `pytest tests/` leaves the tree clean.)
/hello.txt
/examples/hello.txt

# `scripts/check_corpus_differential.py` checks the base revision out here
# by default, keyed by SHA and reused across runs. Output, not source, and
# deliberately repository-local rather than under a shared temporary
# directory (its contents end up on the base side's PYTHONPATH).
/.corpus-differential/
14 changes: 14 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,20 @@ repos:
pass_filenames: false
files: '(examples/.*\.vera$|tests/conformance/.*\.vera$|vera/.*\.py$|vera/grammar\.lark$|vera/prelude\.py$|scripts/check_e602_clean\.py$)'

# The examples RUN. check_examples.py checks + verifies them and
# the e602 gate above compiles them; none of that executes one, so
# an example could trap at run time and stay green. The gate runs
# every example it can drive and requires the rest to carry a
# documented skip property, so a new example cannot be added
# without classifying it. Also cross-checks TESTING.md's
# execution-model table against the script's own classification.
- id: examples-run
name: examples run trap-free
entry: .venv/bin/python scripts/check_examples_run.py
language: system
pass_filenames: false
files: '(examples/.*\.vera$|examples/sqlitedb\.sqlite$|vera/.*\.py$|vera/grammar\.lark$|TESTING\.md$|scripts/check_examples_run\.py$)'

- id: doc-counts
name: doc counts
entry: .venv/bin/python scripts/check_doc_counts.py
Expand Down
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Read `SKILL.md` for the full language reference. It covers syntax, slot referenc

### Conformance programs as reference

The conformance suite in `tests/conformance/` contains 214 small, self-contained programs — often one per language feature — that serve as minimal working examples (most are fully self-contained; the cross-module programs of Chapters 7–9 import companion `_lib`/module fixtures). Each positive program must pass its declared verification level (see `manifest.json` for mappings: `parse`, `check`, `verify`, or `run`); the thirty-two negative fixtures (`ch02_generic_over_unit_rejected`, `ch02_map_unit_value_rejected`, `ch04_let_unit_rejected`, `ch05_apply_fn_arity`, `ch05_decreases_float_rejected`, `ch05_reserved_fn_name_rejected`, `ch05_reserved_keyword_fn_rejected`, `ch05_reserved_resume_fn_rejected`, `ch05_where_helper_outer_slot_rejected`, `ch07_handler_state_body_scope_rejected`, `ch07_old_outside_ensures_rejected`, `ch07_state_unit_op_param_read_rejected`, `ch08_circular_import`, `ch08_reserved_vera_prefix_rejected`, `ch08_reserved_vera_prefix_reference_rejected`, `ch08_reserved_vera_prefix_binder_rejected`, `ch08_reserved_vera_prefix_effect_rejected`, `ch08_reserved_vera_prefix_ability_rejected`, `ch08_reserved_vera_prefix_constructor_rejected`, `ch08_visibility_private`, `ch09_builtin_effect_redefinition_rejected`, `ch09_builtin_redefinition`, `ch09_ord_adt_rejected`, `ch09_eq_non_derivable_rejected`, `ch09_sql_injection_rejected`, `ch09_sql_placeholder_mismatch_rejected`, `ch09_sql_placeholder_let_mismatch_rejected`, `ch09_sql_numbered_placeholder_rejected`, `ch07_bare_effect_op_rejected`, `ch06_quantifier_array_domain_rejected`, `ch07_handler_state_type_mismatch_rejected`, `ch02_alias_cycle_rejected`) instead must *fail* `check` with the E-code in their `expected_error` field. When you need to see how a specific construct works (e.g. effect handlers, match expressions, closures), check the corresponding conformance program before reading the spec.
The conformance suite in `tests/conformance/` contains 244 small, self-contained programs — often one per language feature — that serve as minimal working examples (most are fully self-contained; the cross-module programs of Chapters 7–9 import companion `_lib`/module fixtures). Each positive program must pass its declared verification level (see `manifest.json` for mappings: `parse`, `check`, `verify`, or `run`); the thirty-eight negative fixtures (`ch02_generic_over_unit_rejected`, `ch02_map_unit_value_rejected`, `ch04_let_unit_rejected`, `ch05_apply_fn_arity`, `ch05_decreases_float_rejected`, `ch05_reserved_fn_name_rejected`, `ch05_reserved_keyword_fn_rejected`, `ch05_reserved_contextual_keyword_fn_rejected`, `ch05_reserved_resume_fn_rejected`, `ch05_where_helper_outer_slot_rejected`, `ch07_handler_state_body_scope_rejected`, `ch07_old_outside_ensures_rejected`, `ch07_state_unit_op_param_read_rejected`, `ch08_ambiguous_import_adt_rejected`, `ch08_ambiguous_import_adt_swapped_rejected`, `ch08_ambiguous_import_rejected`, `ch08_ambiguous_import_swapped_rejected`, `ch08_circular_import`, `ch08_reserved_vera_prefix_rejected`, `ch08_reserved_vera_prefix_reference_rejected`, `ch08_reserved_vera_prefix_binder_rejected`, `ch08_reserved_vera_prefix_effect_rejected`, `ch08_reserved_vera_prefix_ability_rejected`, `ch08_reserved_vera_prefix_constructor_rejected`, `ch08_visibility_private`, `ch09_builtin_effect_redefinition_rejected`, `ch09_builtin_redefinition`, `ch09_ord_adt_rejected`, `ch09_eq_non_derivable_rejected`, `ch09_sql_injection_rejected`, `ch09_sql_placeholder_mismatch_rejected`, `ch09_sql_placeholder_let_mismatch_rejected`, `ch09_sql_numbered_placeholder_rejected`, `ch07_bare_effect_op_rejected`, `ch06_quantifier_array_domain_rejected`, `ch07_handler_state_type_mismatch_rejected`, `ch02_alias_cycle_rejected`, `ch08_module_prelude_adt_contention_rejected`) instead must *fail* with the E-code in their `expected_error` field, at the stage their `expected_error_stage` names — `check` by default, or `compile` for a diagnostic the checker accepts and codegen refuses. When you need to see how a specific construct works (e.g. effect handlers, match expressions, closures), check the corresponding conformance program before reading the spec.

### Workflow

Expand Down Expand Up @@ -187,9 +187,9 @@ Each stage is a module with a single public API function (`parse_file`, `transfo
pytest tests/ -v # Run all tests (see TESTING.md)
pytest tests/test_conformance.py -v # Conformance suite only
mypy vera/ # Type-check the compiler
python scripts/check_conformance.py # All 214 conformance programs hold (positives pass; negatives fail with their E-code)
python scripts/check_conformance.py # All 244 conformance programs hold (positives pass; negatives fail with their E-code)
python scripts/check_examples.py # All 42 examples must pass
python scripts/check_corpus_canonical.py # All 262 corpus programs in canonical form
python scripts/check_corpus_canonical.py # All 293 corpus programs in canonical form
```

Test helpers follow a pattern: `_check_ok(source)` / `_check_err(source, match)` / `_verify_ok(source)` / `_verify_err(source, match)`. See existing tests for examples.
Expand All @@ -198,7 +198,7 @@ When implementing a new language feature, write the conformance program *first*

### Invariants

- All 214 conformance programs in `tests/conformance/` must hold at their declared level — positive entries pass, and the negative fixtures (`ch02_generic_over_unit_rejected`, `ch02_map_unit_value_rejected`, `ch04_let_unit_rejected`, `ch05_apply_fn_arity`, `ch05_decreases_float_rejected`, `ch05_reserved_fn_name_rejected`, `ch05_reserved_keyword_fn_rejected`, `ch05_reserved_resume_fn_rejected`, `ch05_where_helper_outer_slot_rejected`, `ch07_handler_state_body_scope_rejected`, `ch07_old_outside_ensures_rejected`, `ch07_state_unit_op_param_read_rejected`, `ch08_circular_import`, `ch08_reserved_vera_prefix_rejected`, `ch08_reserved_vera_prefix_reference_rejected`, `ch08_reserved_vera_prefix_binder_rejected`, `ch08_reserved_vera_prefix_effect_rejected`, `ch08_reserved_vera_prefix_ability_rejected`, `ch08_reserved_vera_prefix_constructor_rejected`, `ch08_visibility_private`, `ch09_builtin_effect_redefinition_rejected`, `ch09_builtin_redefinition`, `ch09_ord_adt_rejected`, `ch09_eq_non_derivable_rejected`, `ch09_sql_injection_rejected`, `ch09_sql_placeholder_mismatch_rejected`, `ch09_sql_placeholder_let_mismatch_rejected`, `ch09_sql_numbered_placeholder_rejected`, `ch07_bare_effect_op_rejected`, `ch06_quantifier_array_domain_rejected`, `ch07_handler_state_type_mismatch_rejected`, `ch02_alias_cycle_rejected`) must *fail* `check` with their `expected_error` E-code
- All 244 conformance programs in `tests/conformance/` must hold at their declared level — positive entries pass, and the negative fixtures (`ch02_generic_over_unit_rejected`, `ch02_map_unit_value_rejected`, `ch04_let_unit_rejected`, `ch05_apply_fn_arity`, `ch05_decreases_float_rejected`, `ch05_reserved_fn_name_rejected`, `ch05_reserved_keyword_fn_rejected`, `ch05_reserved_contextual_keyword_fn_rejected`, `ch05_reserved_resume_fn_rejected`, `ch05_where_helper_outer_slot_rejected`, `ch07_handler_state_body_scope_rejected`, `ch07_old_outside_ensures_rejected`, `ch07_state_unit_op_param_read_rejected`, `ch08_ambiguous_import_adt_rejected`, `ch08_ambiguous_import_adt_swapped_rejected`, `ch08_ambiguous_import_rejected`, `ch08_ambiguous_import_swapped_rejected`, `ch08_circular_import`, `ch08_reserved_vera_prefix_rejected`, `ch08_reserved_vera_prefix_reference_rejected`, `ch08_reserved_vera_prefix_binder_rejected`, `ch08_reserved_vera_prefix_effect_rejected`, `ch08_reserved_vera_prefix_ability_rejected`, `ch08_reserved_vera_prefix_constructor_rejected`, `ch08_visibility_private`, `ch09_builtin_effect_redefinition_rejected`, `ch09_builtin_redefinition`, `ch09_ord_adt_rejected`, `ch09_eq_non_derivable_rejected`, `ch09_sql_injection_rejected`, `ch09_sql_placeholder_mismatch_rejected`, `ch09_sql_placeholder_let_mismatch_rejected`, `ch09_sql_numbered_placeholder_rejected`, `ch07_bare_effect_op_rejected`, `ch06_quantifier_array_domain_rejected`, `ch07_handler_state_type_mismatch_rejected`, `ch02_alias_cycle_rejected`, `ch08_module_prelude_adt_contention_rejected`) must *fail* with their `expected_error` E-code, at the stage `expected_error_stage` names — `check` by default, or `compile` for a diagnostic the checker accepts and codegen refuses (`ch08_module_prelude_adt_contention_rejected` → E621), which also asserts the program type-checks cleanly first
- All 42 examples in `examples/` must pass `vera check` and `vera verify`
- `mypy vera/` must be clean
- `pytest tests/ -v` must pass
Expand Down
Loading