release: v0.1.2 — the gate-hardening batch + pre-release sweep - #968
Conversation
Rolls [Unreleased] (the four merged community PRs: #852 limitations-sync, #702 arm64 advisory lane, #956+#955 gate-honesty pair) into [0.1.2], plus what the pre-release sweep found: - fix(transform): an invalid string escape no longer crashes vera check with a raw lark.VisitError traceback (#966) — transform() unwraps a VisitError carrying a VeraError; E009 diagnostics gain the full instruction format (rationale/fix/spec_ref for the escape and interpolation classes), retiring a false grammar-prevents waiver. Test-first: text + JSON envelope tests, RED-confirmed pre-fix. - ci: two workarounds retired on fired triggers (#537) — pygments 2.20.0 shipped the CVE-2026-4539 fix (--ignore-vuln removed), and setup-python's toolcache carries pip 26.1.2 natively (--upgrade pip removed); both KNOWN_ISSUES rows retire with them. - docs: TESTING.md contract-verification block regenerated from live vera verify --json (283/378 obligations, 74.9% static - was three campaigns stale at 256/280); the summary off-by-one it surfaced is filed as #967 (KNOWN_ISSUES limitation + ROADMAP Stage 19 row); scheduled limitations-sync workflow documented; gate rows scoped to the #955 semantics; spec-block counts to 189; ~93,500 test-code lines; spec 0.5.1 acknowledges W001/W002; HISTORY's v0.1.0 column restored to its true snapshot (6,779) with the growth chart in lockstep; README/FAQ counts to 6,848; three test-code comments citing since-fixed issues (#918, #706, #635) retired. Release machinery: versions to 0.1.2 (10-file surface), HISTORY gains the combined 'Stage 19 and Stage 20' dual-threaded section + index row, 196-day... 96-day count recomputed from git, 200 tagged releases. Closes #966 Closes #537 Co-Authored-By: Claude <noreply@anthropic.invalid>
📝 WalkthroughWalkthroughThis PR fixes invalid string-escape crashes by unwrapping ChangesE009 Diagnostic and VisitError Unwrapping
v0.1.2 Version Bump and Release Documentation
Dependency-Audit Workaround Removal
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant cmd_check
participant transform
participant LarkTransformer
participant decode_string_escapes
cmd_check->>transform: transform(tree)
transform->>LarkTransformer: visit tree
LarkTransformer->>decode_string_escapes: process STRING_LIT token
decode_string_escapes->>decode_string_escapes: raise _escape_error (E009)
LarkTransformer->>transform: raise VisitError(orig_exc=VeraError)
transform->>transform: unwrap VisitError, re-raise VeraError
transform->>cmd_check: propagate VeraError with rationale/fix/spec_ref
Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 7 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (7 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #968 +/- ##
==========================================
+ Coverage 93.23% 93.30% +0.06%
==========================================
Files 96 96
Lines 31448 31470 +22
Branches 456 456
==========================================
+ Hits 29321 29362 +41
+ Misses 2114 2095 -19
Partials 13 13
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@vera/transform.py`:
- Around line 395-408: _parse_interp_expr() is still bypassing the new
VisitError unwrapping path, so E009 inside string interpolation can be
double-wrapped and escape correctly handled. Update the interpolation parsing
flow in VeraTransformer.transform() / _parse_interp_expr() so the same
VisitError boundary is used there, or explicitly flatten any nested VisitError
chain before re-raising. Make sure the fix preserves the existing
invalid-expression and statements-not-allowed errors while preventing wrapped
interpolation errors from slipping through.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: e9ffb66f-97bc-44b0-85ca-4976263b9243
⛔ Files ignored due to path filters (7)
assets/diagrams/history-growth.svgis excluded by!**/*.svgdocs/index.htmlis excluded by!docs/**docs/index.mdis excluded by!docs/**docs/llms-full.txtis excluded by!docs/**docs/llms.txtis excluded by!docs/**tests/conformance/ch09_show_hash_composites.verais excluded by!**/*.verauv.lockis excluded by!**/*.lock,!uv.lock
📒 Files selected for processing (16)
.github/workflows/ci.ymlCHANGELOG.mdFAQ.mdHISTORY.mdKNOWN_ISSUES.mdREADME.mdROADMAP.mdTESTING.mdpyproject.tomlscripts/check_diagnostic_fields.pyspec/00-introduction.mdtests/test_cli.pytests/test_codegen_gc_rooting.pytests/test_codegen_interpolation.pyvera/__init__.pyvera/transform.py
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
aallan/vera-bench(manual)
… ongoing-thread (PR #968 review)
… (PR #968 review) A nested transformer (_parse_interp_expr's inner VeraTransformer runs inside the outer transformer's STRING_LIT callback) can double-wrap a VeraError; the single-level unwrap would re-raise the wrapper. Not user-reachable today - interpolation segments cannot contain nested string literals (the outer lexer closes at the first quote, verified by probe), and the inner transformer's other token callbacks cannot raise on grammar-valid input - but _unwrap_visit_error now walks the whole chain (unit-tested with a hand-built double wrap, RED-first), and the user-reachable interpolation-statement E009 path gains its own envelope pin. Counts follow (+3 tests).
…roject's motion, not a headcount
The v0.1.2 release: rolls the four merged community PRs into
[0.1.2], plus everything the six-auditor pre-release sweep surfaced — including one genuine crash bug, fixed test-first in this PR.The batch being released
ubuntu-24.04-armto CI matrix to actually test Linux aarch64 #702 — advisoryubuntu-24.04-armCI lane (wheel gate + platform policy in lockstep)# diag-fields-exemptopt-out is honoured by only one of three passes #955 — the diagnostic-fields gate-honesty pair (reachability election with generic rebind counting; opt-out scoped to unresolvable fields)Four PRs — #960, #962, #964, #965 — closing three Stage 20 rows plus one ongoing-thread item, all by @chethanuk and each hardened in review.
What the sweep found (23 confirmed findings, 2-skeptic verified)
Fixed in this PR:
vera checkcrashed with a rawlark.VisitErrortraceback on an invalid string escape (Closes vera check crashes with a raw lark.VisitError traceback on an invalid string escape (E009) #966). The E009TransformErroris raised inside a token callback, which lark wraps — soexcept VeraErrornever fired and--jsonmode emitted zero bytes for CI to gate on.transform()now unwraps and re-raises; E009 diagnostics gain the full instruction format (rationale/fix/spec_ref for both escape and interpolation classes), retiring a# diag-fields-exemptwaiver whose "the grammar prevents this" premise was false. RED-confirmed text + JSON tests.--ignore-vulnremoved — left in place it would mask a real regression), and setup-python's toolcache now carries pip 26.1.2 natively (--upgrade pipremoved). Both KNOWN_ISSUES rows retire per the bridges-not-permanent-exceptions contract.vera verify --json, which also surfaced a summary off-by-one on three examples — filed as vera verify --json summary: tier1_verified + tier3_runtime = total + 1 on three examples #967 (KNOWN_ISSUES limitation + ROADMAP Stage 19 row: derive the summary from the reified obligations list).W001/W002; the scheduled workflow documented in TESTING.md; gate rows scoped to the Diagnostic-fields gate: the# diag-fields-exemptopt-out is honoured by only one of three passes #955 semantics; three test-code comments citing since-fixed issues (Verifier crashes with uncaught Z3 Sort mismatch on a nested-Option-returning function (check-green, run-OK, verify-crash) #918, Move Map/Set host stores from Python mirror to bucket-as-truth #706, Parameterised-alias substitution missing in _type_expr_to_wasm_type (compilability check) #635) retired.Release machinery
Versions to 0.1.2 across the 10-file surface;
[Unreleased]emptied into[0.1.2]with compare links; HISTORY opens the combined "Stage 19 and Stage 20: The dual-threaded start" section (maintainer decision: the external thread runs the single-source sprint while verification completeness follows) with its index row; 200 tagged releases / 96 active days, both computed from git.Closes #966
Closes #537
🤖 Generated with Claude Code
Summary by CodeRabbit