- Foundation hardening and regression expansion across parser, type system, and backends.
Stabilize range expression parsing and lowering behavior before introducing additional syntax forms.
- Canonical expression form:
range(start, stop[, step]) - Tuple shorthand lowering:
(start, stop[, step])torange(...) - Range loop form:
for i from start to stop [by step] - Strict loop-step rule:
byrequires an explicit step expression
- Punctuation range operators
..and..=are deferred for this cycle. - Function and tuple forms remain the stabilized prototype surface.
- Decision reference: docs/_internal/planning/range-expression-surface-rfc-2026-05.md
- Parser hardening matrix: tests/unit/compiler/test_range_expression_hardening_matrix.py
- Backend lowering matrix (C/LLVM invariants): tests/unit/compiler/test_range_codegen_hardening_matrix.py
- Both range hardening suites remain green in CI.
- No regressions in nearby compiler hardening suites.
- Broad compiler sweep remains green after range-track changes.
- Revisit punctuation operators only after precedence specification, ambiguity analysis, and full cross-component matrices are ready.
Add comprehensive negative-path test coverage for all security subsystems and harden the error formatting surface.
- Security negative-path hardening matrix: 146 cases across path traversal, command injection, URL scheme validation, SQL injection, XSS payloads, ReDoS patterns, filename sanitization, permission boundary enforcement, taint-sink propagation (all 5 labels x all 8 sinks = 40 parametrized cases), CFI indirect-call checks, and memory safety (use-after-free, type confusion, bounds at boundary).
- Security module bug fixes:
safe_executenow detects actual newline and carriage-return characters (not only their two-char escape representations).is_safe_regexnow detects(X+)+,(X*)*,(X|X)+, and(.*)+ReDoS patterns.- File: src/nexuslang/security/utils.py
- Error-surface hardening matrix: 48 cases covering
format_source_contextresilience (OOB line/column, empty source, large context), all error class location fields in formatted output, NxlNameError "did you mean" matching edge cases,get_close_matcheslarge-list cap, andsuggest_correctioncompleteness. - CI extended with
security-hardeningjob gatingexample-smokeand downstream jobs.
- Existing security suite: 171 passed, 6 skipped.
- New negative-path suite: 146 passed.
- New error-surface suite: 48 passed.
- Broad sweep (compiler + type_system + errors + systems): 2306 passed, 97 skipped, 1 xfailed, zero failures.
Stabilize stdlib watcher and inotify validation under constrained host kernel limits without masking genuine product defects.
- Watcher lifecycle hardening in src/nexuslang/stdlib/fs_watch/init.py:
- Added robust cleanup on startup failures to avoid partially-initialized observer resource leaks.
- Added stronger shutdown behavior (
unschedule_all, longer join timeout, explicit observer nulling). - Added process-exit cleanup (
atexit) to stop residual watchers.
- fs-watch test hardening in tests/unit/stdlib/test_fs_watch.py:
- Added host-capacity-aware skip path for
ENOSPC/EMFILEinotify exhaustion conditions. - Added autouse watcher-registry hygiene fixture (
fs_watch_stop_allbefore/after each test). - Updated start calls to use shared guarded helper.
- Updated concurrent thread test to avoid raising pytest skip exceptions from worker threads.
- Added host-capacity-aware skip path for
- Raw inotify test hardening in tests/unit/stdlib/test_platform_linux.py:
- Added guarded helpers for
inotify_createandinotify_add_watchwith skip-on-capacity exhaustion semantics.
- Added guarded helpers for
- Previously failing focus suites now stable: 19 passed, 48 skipped, 0 failed.
- Broader stdlib sweep remains green: 2277 passed, 269 skipped, 0 failed.
- Day 14 (Week 2 safety checkpoint): Compile and publish unresolved-risk register from Days 8-13. Update STATUS.md with baseline metrics. Identify any remaining open items for Week 3 tooling hardening.
- Optional follow-up: Add a dedicated CI job for Linux fs_watch/inotify resilience matrices so host-resource edge cases remain explicitly covered.