Skip to content

Release v0.0.156#688

Merged
aallan merged 3 commits into
mainfrom
release-v0.0.156
May 19, 2026
Merged

Release v0.0.156#688
aallan merged 3 commits into
mainfrom
release-v0.0.156

Conversation

@aallan

@aallan aallan commented May 19, 2026

Copy link
Copy Markdown
Owner

Summary

Release v0.0.156 — bundles the [Unreleased] work from PR #684 (2026-05-18 compiler-review docs sweep + #675 E500 fix-text) and PR #685 (#674 vera test classifier fix from external contributor @rzyns), plus a release-PR doc sweep that surfaced and addressed several stale references.

This is the third time the bug-tracker section has been empty since ~v0.0.80.

What's in this release

Added

  • TestSummary.unlisted_errors: int — new public field on vera.tester.TestSummary exposed in vera test --json output under summary.unlisted_errors. Counts verifier-error diagnostics whose attributable function isn't in the displayed functions list (e.g. when --fn filters to a subset, or for private functions). Downstream CI consumers can read the structured count instead of re-running regex attribution.

Fixed

  • #675 — E500 (Postcondition does not hold) fix= text now names all three repair classes neutrally with implementation-repair first. External report from @rzyns.

  • #674vera test now fails closed when the verifier reports E500/E501/E502 diagnostics. JSON output sets ok: false, preserves the verifier diagnostics, and exits non-zero. E501 call-site precondition failures attributed to the caller; --fn keeps function rows filtered but whole-file verifier errors still fail closed. First external code contribution from @rzyns.

Documentation

Release-PR doc sweep — additional fixes

The release-PR sweep surfaced four stale issue references that previously slipped through:

Where Issue What was wrong
SKILL.md "Known Bugs" #602 (closed COMPLETED 2026-05-08) Stale workaround row. Replaced with "No known bugs." per the established convention.
KNOWN_ISSUES.md Limitations #607 (closed COMPLETED 2026-05-11) Doc gap was filled; limitation entry removed.
KNOWN_ISSUES.md + SKILL.md + vera/README.md #608 (closed COMPLETED 2026-05-11) Umbrella issue closed, but the underlying implementation issues (#609 JSPI sleep, #610 ANSI rendering) are still open. Re-pointed all three citations.
SKILL.md + spec/02-types.md + spec/06-contracts.md (×2) #560 (closed COMPLETED 2026-05-11) The data invariant(...) feature is documented as NYI in 4 places, all citing the closed #560. The closure was about removing the broken spec examples, not implementing the feature. Filed #686 as the successor tracking issue.

Tacit context capture

High-impact items added inline (would have helped @rzyns / cold-context maintainers / AI agents working from the repo alone):

  • CONTRIBUTING.md — explicit note on the first-time-contributor action_required CI gate. This caused friction during Fix vera test verifier error handling (#674) #685's CI runs.

  • CLAUDE.mdNo known bugs. convention for empty KNOWN_ISSUES.md / SKILL.md bug tables, and the Skip-changelog: commit trailer as the documented escape hatch for the changelog-update gate.

Lower-priority items were initially filed as #687, then triaged inline in this PR per maintainer direction — three of the five items landed in this PR; two were judged not worth a doc bump. Closing #687 with this PR as the actionable subset.

Addressed inline (commit 0793938):

  • JSON output as a public API contract — new spec/00-introduction.md §0.5.8 "Machine-Readable Output (--json)" stating the stability rules (fields MAY be added; MUST NOT be removed/renamed/semantically-changed; ok is the canonical gate; consumers MUST tolerate unknowns). New TESTING.md "JSON Output Stability" section with per-command field tables (check / verify / test) including the new v0.0.156 summary.unlisted_errors field. No separate JSON-OUTPUT.md file — putting it in the spec keeps the diagnostics-narrative arc intact.
  • Doc-count gate awareness — added a paragraph in CONTRIBUTING.md "Running Tests" section explaining scripts/check_doc_counts.py, how to run it locally, and that pre-commit catches stale counts before CI does.
  • Modular verification design principle — expanded spec/06-contracts.md §6.4.2's existing one-liner with the practical implication that's the actual source of confusion: a buggy bad produces E500 on its body, but a caller main reading bad's declared contract is still verified. Names why (compositional verification bounded by per-function complexity) and why downstream consumers MUST surface the E500 (soundness chain).

Skipped per maintainer direction:

  • CodeRabbit reply workflow nuances — implicit convention, new contributors pick it up by example
  • Two-instance review workflow — likely a personal workflow, out of repo scope

#686 (data invariant follow-up) added to ROADMAP and KNOWN_ISSUES under appropriate sections in commit afe2ac9.

Additional CR findings (commit 0793938)

Two CodeRabbit comments on the v0.0.156 commit, both fixed:

  • HISTORY.md 58/59 active-day mismatch — line 3 still said "58" while the line 344 footer (which I'd bumped for v0.0.156) said "59". Line 3 corrected to match the canonical footer.
  • §2.6 → §2.4.1 for data invariant(...) spec locationspec/02-types.md has §2.4.1 "ADT Invariants" as the actual spec location (§2.6 is Refinement Types, the workaround). Corrected the spec-location citation in ROADMAP and KNOWN_ISSUES; left the parallel "Refinement types (§2.6)" workaround mentions untouched.

Validation

  • pytest tests/3,887 passed, 14 skipped, 16 stress-deselected
  • mypy vera/ clean
  • ruff check --select S vera/ clean
  • python scripts/check_conformance.py — 86/86
  • python scripts/check_examples.py — 34/34
  • python scripts/check_doc_counts.py — consistent (3,917 total tests across 32 files)
  • python scripts/check_version_sync.py — v0.0.156 across 6 files
  • python scripts/check_limitations_sync.py — consistent (27/17/4)
  • python scripts/check_skill_examples.py — pass
  • python scripts/check_spec_examples.py — pass
  • python scripts/check_site_assets.py — up-to-date
  • All 18 pre-commit hooks green

Workaround sweep — clean

Checked examples/ and tests/ for stale workarounds referencing the now-fixed bugs (#549, #578, #674, #675). No matches. The #602 references in tests/test_codegen.py are regression-test docstrings for the closed bug — those are intentional and stay.

Closes #687.

Post-merge

Standard release-tag workflow once merged: pull main, tag v0.0.156 on the merge commit, push tag, gh release create v0.0.156 with the extracted CHANGELOG section.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Test JSON summary now exposes an unlisted_errors count for verifier diagnostics not attributed to displayed functions.
  • Documentation

    • Revised changelog, history, ROADMAP, spec and guides; added JSON output stability docs and contributor/CLA guidance; updated issue references and known-issues.
  • Chores

    • Bumped project version to v0.0.156.
  • Tests

    • Stabilised string-interpolation test for deterministic output.

Review Change Stack

Bundles the #674 (`vera test` classifier) + #675 (E500 fix-text) +
2026-05-18 compiler-review docs sweep work that landed across PR
#684 and #685 under the `[Unreleased]` section.  First external
code contribution from @rzyns lands in this release (#685).

## Version bumps

- pyproject.toml, vera/__init__.py, uv.lock, docs/index.html
- README.md project-status line (v0.0.155 → v0.0.156; 155 releases
  → 156 releases)

## CHANGELOG

- Renamed `[Unreleased]` → `[0.0.156] - 2026-05-19`
- Added an `### Added` entry for the new public
  `TestSummary.unlisted_errors: int` field exposed in
  `vera test --json` output (was missing from the [Unreleased]
  section even though it's a public API addition)
- Updated link references at the bottom of CHANGELOG.md

## HISTORY

- New v0.0.156 row crediting @rzyns's first external code
  contribution
- Footer bumped: 155 → 156 tagged releases, 58 → 59 active
  development days

## Doc sweep findings (release-PR scoped)

The release-PR doc sweep surfaced stale references that the
in-context Explore agent and a manual cross-check found:

1. **SKILL.md "Known Bugs and Workarounds"** had a stale row
   for #602 (string-returning function call in interpolation —
   closed COMPLETED on 2026-05-08).  Replaced the empty-bug-table
   leftover with the established "No known bugs." convention
   (matching `KNOWN_ISSUES.md`).

2. **KNOWN_ISSUES.md limitation entry for #607** (Int <: Nat
   subtyping docs gap) — closed COMPLETED on 2026-05-11 when the
   doc gap was filled.  Removed the row.

3. **KNOWN_ISSUES.md, SKILL.md, vera/README.md limitation entries
   citing #608 (umbrella)** — #608 was closed COMPLETED on
   2026-05-11.  The underlying implementation tracking issues
   (#609 JSPI sleep, #610 ANSI subset) remain open and the
   limitation is still real, so re-pointed the citations to those
   two issues directly.

4. **`data invariant(...)` references citing the closed #560** —
   4 sites across SKILL.md, spec/02-types.md, and
   spec/06-contracts.md described the feature as NYI and pointed
   at #560 as the tracking issue.  #560 was closed COMPLETED on
   2026-05-11 but the closure was about removing the broken spec
   examples, NOT about implementing the feature.  Filed [#686](#686)
   as the successor tracking issue with explicit acceptance
   criteria; updated all 4 references.  Added #686 to ROADMAP's
   Verification-depth section.

## Tacit context capture

Items added inline (highest impact for new contributors / cold-
context maintainers / AI agents working from the repo alone):

- **CONTRIBUTING.md** — note on the first-time-contributor
  `action_required` CI gate (would have helped @rzyns; took
  manual approval on every push of #685 until I started pushing
  cleanup commits on the branch).

- **CLAUDE.md** — "No known bugs." convention for empty
  KNOWN_ISSUES/SKILL bug tables.  Plus the `Skip-changelog:`
  commit trailer as the documented escape hatch for the
  CHANGELOG-update gate when a change genuinely doesn't merit
  a release-note bullet.

Lower-priority tacit-context items filed as [#687](#687)
(CodeRabbit reply nuances, JSON output stability contract,
doc-count gate awareness, modular-verification design-principle
signposting).  Added to ROADMAP's CI tooling section so they
don't fall through.

## Validation

- pytest 3,887 / 3,887 ✓
- mypy clean ✓
- ruff S clean ✓
- conformance 86/86 ✓
- examples 34/34 ✓
- doc counts consistent (3,917 total tests across 32 files) ✓
- version sync consistent (0.0.156 across 6 files) ✓
- limitations sync consistent (27 in KNOWN_ISSUES, 17 in
  vera/README, 4 in spec/*) ✓
- SKILL.md + spec code blocks parse ✓
- site assets up-to-date ✓
- All 18 pre-commit hooks green ✓

## What this isn't

- No new behavioural code changes — bug fixes shipped in PR #684
  and PR #685 already; this PR just promotes them to a tagged
  release.

- Not a fix for #686 (`data invariant(...)`) or #687 (tacit
  context items) — both filed during this sweep, both queued
  for follow-up.

Co-Authored-By: Claude <noreply@anthropic.invalid>
@codecov

codecov Bot commented May 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.07%. Comparing base (d073749) to head (0793938).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #688   +/-   ##
=======================================
  Coverage   91.07%   91.07%           
=======================================
  Files          60       60           
  Lines       23458    23458           
  Branches      259      259           
=======================================
  Hits        21364    21364           
  Misses       2087     2087           
  Partials        7        7           
Flag Coverage Δ
javascript 57.36% <ø> (ø)
python 94.82% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai

coderabbitai Bot commented May 19, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 8a637688-5d3c-44b5-8cd9-104ecaac839f

📥 Commits

Reviewing files that changed from the base of the PR and between afe2ac9 and 0793938.

📒 Files selected for processing (8)
  • CONTRIBUTING.md
  • HISTORY.md
  • KNOWN_ISSUES.md
  • ROADMAP.md
  • TESTING.md
  • scripts/check_spec_examples.py
  • spec/00-introduction.md
  • spec/06-contracts.md

📝 Walkthrough

Walkthrough

Updates project version to v0.0.156, adds CHANGELOG/HISTORY/README entries for the release and TestSummary.unlisted_errors, documents stable machine-readable JSON output, consolidates issue references (560→686, 608→609+610), adds contributor/process guidance, and makes small test and spec bookkeeping edits.

Changes

v0.0.156 Release Bump and Documentation

Layer / File(s) Summary
Version Constants and Package Metadata
vera/__init__.py, pyproject.toml
__version__/version constants and [project] version field bumped from 0.0.155 → 0.0.156.
Release Notes, HISTORY and README
CHANGELOG.md, HISTORY.md, README.md
CHANGELOG adds ## [0.0.156] documenting TestSummary.unlisted_errors (exposed as summary.unlisted_errors in vera test --json) and updates compare links; HISTORY records the v0.0.156 stage and counts; README project-status updated.
Data invariant and spec consolidation
spec/02-types.md, spec/06-contracts.md, spec/00-introduction.md, KNOWN_ISSUES.md, ROADMAP.md, SKILL.md
References for unimplemented data invariant(...) updated from #560#686; spec adds JSON machine-readable output subsection and a contracts paragraph on E500 reporting; ROADMAP adds verification-depth item; KNOWN_ISSUES documents invariant limitation.
Terminal-vs-Browser IO issue relinks
KNOWN_ISSUES.md, SKILL.md, vera/README.md
Replaces umbrella #608 with the two specific issues #609 and #610 for browser-target terminal-style rendering limitations.
Release and Contributor Process Documentation
CLAUDE.md, CONTRIBUTING.md, SKILL.md
CLAUDE.md adds conventions (literal “No known bugs.” for empty bug tables; CHANGELOG gate and Skip-changelog: trailer); CONTRIBUTING.md documents first-time-PR CI manual-approval gating and a doc-count gate; SKILL.md simplifies known-bugs section.
Tests, TESTING.md and tooling
tests/test_codegen.py, TESTING.md, scripts/check_spec_examples.py
test_basic_string now defines @String = "world" inside main before interpolation; TESTING.md updates documented test file line-count for test_codegen and adds JSON Output Stability section; spec example allowlist line corrected.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related issues

Possibly related PRs

  • aallan/vera#685: Implements the TestSummary.unlisted_errors verifier error-handling behaviour documented here.
  • aallan/vera#651: Related release-prep changes touching version constants and changelog/history link structure.

Suggested labels

compiler, tests, spec, ci, docs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title "Release v0.0.156" directly and precisely identifies the main change: packaging a versioned release. It aligns with the PR's comprehensive nature, which spans version bumps across multiple files, documentation updates, and changelog entries.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release-v0.0.156

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 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 `@HISTORY.md`:
- Line 344: The two active-day counts in HISTORY.md are inconsistent: one
occurrence reads "59 active development days" (in the "Total: **810+ commits,
156 tagged releases, 59 active development days.**" line) while the other reads
"58 active development days" near the top; update the incorrect occurrence so
both statements match (choose the correct current total from the codebase/logs
and replace the mismatched "58" or "59" text accordingly) ensuring both
instances of "active development days" in HISTORY.md are identical.

In `@ROADMAP.md`:
- Line 180: The spec section reference for ADT invariants is incorrect: update
the text that mentions "data invariant(...)" so it cites Chapter 2 §2.4.1 (not
§2.6) while keeping the existing Chapter 6 §6.2.3 reference; ensure the sentence
reads something like "specified in Chapter 2 §2.4.1 (and Chapter 6 §6.2.3)" and
verify any link or anchor to the spec is corrected to point to §2.4.1 rather
than §2.6.
🪄 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

Run ID: b3f661b2-dee0-4e28-9f45-45bcc8284ea5

📥 Commits

Reviewing files that changed from the base of the PR and between d073749 and 71a3cf8.

⛔ Files ignored due to path filters (7)
  • docs/SKILL.md is excluded by !docs/**
  • docs/index.html is excluded by !docs/**
  • docs/index.md is excluded by !docs/**
  • docs/llms-full.txt is excluded by !docs/**
  • docs/llms.txt is excluded by !docs/**
  • docs/sitemap.xml is excluded by !docs/**
  • uv.lock is excluded by !**/*.lock, !uv.lock
📒 Files selected for processing (13)
  • CHANGELOG.md
  • CLAUDE.md
  • CONTRIBUTING.md
  • HISTORY.md
  • KNOWN_ISSUES.md
  • README.md
  • ROADMAP.md
  • SKILL.md
  • pyproject.toml
  • spec/02-types.md
  • spec/06-contracts.md
  • vera/README.md
  • vera/__init__.py

Comment thread HISTORY.md
Comment thread ROADMAP.md Outdated
aallan and others added 2 commits May 19, 2026 10:39
Two small follow-ups to the v0.0.156 release sweep:

**1. Add #686 to KNOWN_ISSUES.md Limitations**

When I filed #686 (data invariant() NYI, successor to closed #560)
during the release sweep, I added it to ROADMAP.md but missed the
KNOWN_ISSUES.md entry.  #686 belongs in both:

- ROADMAP.md = future planning/tracking ✓ (already done)
- KNOWN_ISSUES.md = current user-facing limitations (the spec
  describes `data invariant(...)` as a working feature; users
  attempting to use it hit E130; that's a current limitation
  worth documenting alongside the Tier 2 verification limitation
  with the same shape)

Added a row right after the Tier 2 entry since they're
structurally similar ("specified in spec §X but not yet
implemented in reference compiler").

**2. Clean test_codegen.py:8514 stale test-development scaffolding**

`test_basic_string` in `TestStringInterpolation` had a dead
`source` variable defined but never executed, plus a misleading
comment about a "string_concat workaround".  The `source`
program references `@String.0` in a function body that has no
`@String` binding (would fail typecheck if actually run); the
working program was always `source2` (renamed to `source` after
this cleanup).

The misleading comment "Pass a string via string_concat
workaround — use a known string / Instead, use a function that
builds the interpolated string" suggested an active workaround
for #602 (string-returning function in interpolation, closed
COMPLETED 2026-05-08), but the actual test code is just a
straightforward let-bind-then-interpolate.  Surfaced during the
release-PR workaround sweep; not a release blocker but worth
cleaning while in the area.

Net: test_codegen.py shrinks by 7 lines (18,979 → 18,972).
Doc-count updated in TESTING.md.

Validation: pytest 3887/3887 (test still passes), mypy clean,
ruff S clean, doc-counts consistent, limitations sync consistent
(27 → 28 in KNOWN_ISSUES.md after adding #686).

Co-Authored-By: Claude <noreply@anthropic.invalid>
Two CodeRabbit comments + three of the five tacit-context items
from #687 inline.  The other two #687 items (CodeRabbit reply
workflow nuances, two-instance review workflow) skipped per
maintainer direction — neither rises to a doc gap worth closing
in this release.  Closing #687 as the actionable subset is done.

**CR Finding 1: HISTORY.md 58/59 active days mismatch**.  Line 3
read "58 active development days" while the footer (line 344)
read "59" after my v0.0.156 row.  Fixed line 3 to match the
footer (the canonical current state).

**CR Finding 2: §2.6 → §2.4.1 for `data invariant(...)` spec
location**.  `spec/02-types.md` has §2.4.1 "ADT Invariants" as
the actual spec location of the invariant feature; §2.6 is
"Refinement Types" (the workaround mentioned).  Fixed the
spec-location citation in ROADMAP.md and KNOWN_ISSUES.md.  The
parallel "Refinement types (§2.6)" mentions in the same rows are
correct — those reference the workaround section, not the
invariant feature.  Net: two citations changed, four left
intentionally as §2.6.

**#687 item 1: JSON output as a public API contract**.  Added in
two places:
- `spec/00-introduction.md` §0.5.8 "Machine-Readable Output
  (`--json`)" — sits inside the existing §0.5 diagnostics chapter
  because the JSON output is the machine-readable mirror of the
  human-readable diagnostic format.  States the stability rules
  (fields MAY be added, MUST NOT be removed/renamed/semantically-
  changed; `ok` is the canonical gate; consumers MUST tolerate
  unknowns).  Cross-references TESTING.md for the field set.
- `TESTING.md` new "JSON Output Stability" section between
  Validation Scripts and Pre-commit Hooks.  Documents the
  per-command field tables (`vera check --json`,
  `vera verify --json`, `vera test --json`) including the new
  v0.0.156 `summary.unlisted_errors` field.  Provides the
  concrete contract that tests in `tests/test_cli.py` assert
  against.

(Considered a separate `JSON-OUTPUT.md` file and rejected it
per maintainer direction — putting it in the spec where
diagnostics already live keeps the narrative arc intact.)

**#687 item 2: Doc-count gate awareness in CONTRIBUTING.md**.
Added a paragraph in the "Running Tests" section explaining
`scripts/check_doc_counts.py` — what it checks, how to run it
locally, the pre-commit / CI gating, and why the gate exists.
Stops new contributors from learning this from CI failures.

**#687 item 3: Modular verification design principle**.
`spec/06-contracts.md` §6.4.2 already had a one-liner about
modularity; expanded it with the practical implication that's
the actual source of confusion: a buggy `bad` fn produces E500
on its body, but a caller `main` reading `bad`'s declared
contract is still verified.  Names why this is intentional
(compositional verification bounded by per-function complexity)
and why downstream consumers MUST surface the E500 (soundness
chain).

**ROADMAP.md cleanup**.  Removed the #687 row since this PR
closes the issue.

**Skipped per maintainer direction**:
- CodeRabbit reply workflow nuances — judged not worth a doc
  bump; the convention is implicit-but-consistent and new
  contributors pick it up by example
- Two-instance review workflow — likely a personal workflow,
  out of repo scope

Validation: pytest 3,887/3,887, mypy clean, ruff S clean,
spec examples pass, doc-counts consistent, limitations sync
consistent (28/17/4), site assets up-to-date.

Closes #687.

Co-Authored-By: Claude <noreply@anthropic.invalid>
@aallan aallan merged commit 444c15b into main May 19, 2026
23 checks passed
@aallan aallan deleted the release-v0.0.156 branch May 19, 2026 09:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant