Preserve source locations, validate malformed JSON, and add opt-in resource limits. Include executable error-guide coverage, learner pilot materials, native Windows acceptance helpers, and updated CI/documentation.
3.5 KiB
Reliability checkpoint
Use release status for artifact-specific evidence and publication state. This page describes tested boundaries, not a universal pass.
The known OBJECT cleanup investigation is resolved for the maintained regression
cases. Historical notes in HARDENING.md describe earlier failures, not the current
status of those tested boundaries.
Repairs and coverage
- Borrowed type/class metadata no longer creates abandoned deep copies.
- Checked assignments, object copies, construction, and OBJECT result temporaries release owned values after storage has copied them.
- Function declaration and typechecker parameter arrays, per-file type metadata, text transforms, sorting, and REPL teardown have explicit cleanup.
- A lone
!no longer leaves the tokenizer at the same input position until memory is exhausted. It produces aNOTrepair hint;!=remains supported. - Missing quotes/parentheses/operands and trailing expression tokens are diagnosed.
- Expression recursion and nested control blocks have bounded guardrails. Deep block input no longer writes beyond the checker's fixed array.
- Existing function recursion, HTTP response-size, and trusted-command boundaries retain their focused checks.
Reproduce verification
make -s all
python3 tools/validate_reliability.py
python3 tools/validate_v1_17.py
The current reliability runner executes 35 maintained checks and records each exit status and log in a scratch result directory. It includes the full introductory learning-path checker and First Hour under ASan/UBSan/LeakSanitizer, with leak detection enabled. Full release validation invokes this runner; CI has explicit reliability, single-file C89, and learning-path checks.
The OBJECT regression verifies class name, field count and field content, not a fictional printed list representation. Five isolated ownership tests separate metadata, field storage and object construction so one leak cannot hide another. Malformed-expression and nesting tests check failure diagnostics and valid inputs.
Diagnostics, JSON and opt-in budgets
Expression errors keep source origins across calls, imports and TRY/CATCH. The error guide is executable-verified. Malformed JSON now fails instead of hanging, nesting is bounded, control-character round trips are checked, and Unicode escapes/surrogate pairs are covered. JSON temporaries, serialization copies and popped import-stack entries have focused leak-enabled regressions. The optional step budget counts empty loop entries; READ FILE can enforce a per-read byte cap. These are not process isolation or wall-clock bounds.
validate_error_locations.py, validate_error_guide.py, validate_learner_pilot.py
and validate_resource_guards.py run in the full gate and inside the existing
learning-ownership sanitizer check. The reliability runner still counts 35
maintained top-level checks; subcase coverage has expanded, not been relabeled
as 35 new independent platform tests. Human feedback and native Windows tests
remain separate, blocked acceptance tracks.
Scope
A passing run establishes the exercised boundaries, not universal leak freedom, security or correctness for arbitrary programs. POSIX sanitizer coverage does not establish native Windows behavior. See runtime limits for implemented guards and portability for distribution evidence. Intentional infinite loops and untrusted-script execution are not made safe by these checks. Historical beta environment-limit claims are not current guarantees.