Skip to content

ROADMAP refactor + Tetris experiment: 2 codegen bugs + design-reviewed friction items#613

Merged
aallan merged 8 commits into
mainfrom
claude/roadmap-trim-retrospective
May 7, 2026
Merged

ROADMAP refactor + Tetris experiment: 2 codegen bugs + design-reviewed friction items#613
aallan merged 8 commits into
mainfrom
claude/roadmap-trim-retrospective

Conversation

@aallan

@aallan aallan commented May 7, 2026

Copy link
Copy Markdown
Owner

Summary

Two distinct themes bundled in one PR (per project convention — both share a release target):

Part 1 — ROADMAP refactor: strip retrospective, keep forward-looking only

ROADMAP is forward work; HISTORY is what we did; CHANGELOG is the detail. On review the file had drifted into a wall of retrospective evidence and meta-explanation. This PR strips ROADMAP back to a primarily forward-looking document:

  • "Where we are" trimmed to a single-line scoreboard.
  • "What's next" preamble removed entirely — the Stabilisation tier table is what's next.
  • Phase 1b VeraBench results dump removed — those are RESULTS, not forward work; they live in vera-bench. Replaced with one forward-looking item: pass@k, more models.
  • Meta-explanation paragraphs ("The ordering principle", "What moves when", Speculative-section preamble, Continuous-hardening preamble) collapsed.
  • Milestone 1 / 2 descriptive intros trimmed to forward-looking goal statements.
  • "Completed phases" footer removed — pure retrospective duplicating HISTORY.

Part 2 — Tetris experiment: 2 codegen bugs + 1 portability gap

An agent attempting to write terminal Tetris on Vera 0.0.138 surfaced two new closure-codegen bugs and a substantial friction list. After hard design review against DESIGN.md principles — including one mid-review correction — three items survive: the two bugs and one real "write once, run anywhere" capability gap.

Items kept (added to KNOWN_ISSUES.md and ROADMAP)

Friction items closed after design review

# Why closed
#616 Empirically redundant. Nat + Nat -> Nat and Nat * Nat -> Nat work directly today via Int <: Nat subtyping (Tier 1 verified, tested). Friction is a documentation gap tracked by #607. New built-ins would violate DESIGN.md principles 6 + 3.
#617 DESIGN.md principle 4 (Structural references over names) — let (x, y) = ... is the name-binding form principle 4 prohibits.
#619 DESIGN.md principles 2 + 5 + 6 + 3 — shorthand makes contracts implicit, erases per-clause receipt, adds non-canonical second form.
#620 Duplicate of #183 (closed as won't-fix April 2026 with three reasons that apply directly). Existing answer is vera check --explain-slots, shipped in v0.0.108.
#621 Closure-must-be-pure is principle 2 working as intended. Vera-aligned debugging is "extract closure to top-level helper". General future answer is #294 (effect polymorphism). A <Debug> effect adds a parallel mechanism redundant with both.
#622 Both items already in SKILL.md (line 729 prefix block, line 982 string_join example, line 1614 decreases-with-+1 example). Friction-doc author admitted reading-discipline gap.

ROADMAP changes (Part 2)

KNOWN_ISSUES.md (Part 2)

Gains entries for #614 and #615 in the Bugs section.

Net result of the Tetris experiment

The friction document was a useful map of where agents hit Vera's design constraints. After empirical testing and hard design review, the project-relevant output is:

The other six features were either solving documentation problems, duplicating already-rejected proposals, or contradicting load-bearing design principles.

Test plan

Summary by CodeRabbit

Release Notes

  • Documentation
    • Roadmap restructured with explicit tier-based sequencing for improved clarity on development priorities
    • Known issues updated with two closure-related WASM compilation failures and associated workarounds
    • Historical changelog updated documenting macOS Ctrl-C abort resolution

ROADMAP is future work; HISTORY is what we did; CHANGELOG is the
detailed account.  The previous Stage-12-launch edit blurred the
boundary by dragging a four-pattern campaign-recap into "What's
next" with references to closed issues (#515, #570, #487, #593,
#588) -- that material belongs in HISTORY's Stage 12 framing,
where it already lives.

Changes:

* "Where we are" -- trimmed to a single line scoreboard
  (3,766 tests, 86 conformance, 34 examples, 13 spec chapters).
  The retrospective VeraBench paragraph and the duplicate
  Conway-runs-cleanly note removed; both are HISTORY material.
* "What's next" -- replaced the four-pattern campaign-recap
  paragraph with one short forward-looking framing: stabilisation
  closes out N concrete issues, agent-integration is next.
* Stabilisation tier rows -- dropped retrospective references to
  #593 (closure-return shadow-push, fixed in v0.0.138) and #588
  (walker missing branches, fixed in v0.0.137).  The forward-looking
  rationale stands on its own.
* Verification-depth row -- generalises the obligation infrastructure
  reference instead of name-checking the closed #520 / #551 fixes
  that built it.

No content moved; the historical material lives in HISTORY.md
Stage 12 and CHANGELOG.md v0.0.137 / v0.0.138 entries.

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

coderabbitai Bot commented May 7, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

ROADMAP.md restructures “Where we are” into explicit counts, converts “What’s next” into ordered Stabilisation/Agent‑integration tables, and tightens several phase and verification phrasings; KNOWN_ISSUES.md adds two closure-related WASM malformation bug entries (#614, #615); HISTORY.md adds a Stage 12 entry for #595.

Changes

Roadmap Documentation Updates

Layer / File(s) Summary
Current Status & Metrics
ROADMAP.md
"Where we are" condensed to explicit counts: 3,766 tests, 86 conformance programmes, 34 examples, 13 spec chapters.
Stabilisation & What's Next
ROADMAP.md
Replaced prose ordering narrative with two tables: Stabilisation tier (orders 1–9) and Agent-integration tier (orders 11–13).
Phase Planning
ROADMAP.md
Phase 1b VeraBench coverage-expansion bullet streamlined; Phase 2a inference-effect prose deduplicated into a single lead line.
Phase 2b HTTP
ROADMAP.md
Phase 2b "Http effect hardening" lead-in reworded to reference prior basic GET/POST baseline and extension items.
Developer Experience
ROADMAP.md
"Comprehensive example programmes" item revised to remove prior baseline phrasing while retaining the 50+ examples goal.
Verification & Continuous Quality
ROADMAP.md
Continuous hardening preface reworded; "Verification depth" row for @Nat invariant generalised to binding sites (let, argument, match-bind) with shorter wording.
Speculative Deferred Work
ROADMAP.md
Deferred-decisions lead-in condensed and the verified @Byte arithmetic (with underflow/overflow guards) row moved into the speculative table.
Known Issues
KNOWN_ISSUES.md
Added two "Bugs" table entries: closure-capture WASM malformation at instantiation (#614) and skipped captured-slot malformation/incorrect runtime values (#615), with repro notes and workarounds.
History
HISTORY.md
Stage 12 timeline updated with 7 May entry noting issue #595 closed due to upstream wasmtime-py fix.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes


Possibly related PRs

  • aallan/vera#405: Related structural edits to ROADMAP.md content and formatting.
  • aallan/vera#483: Overlapping ROADMAP.md edits that rework "What's next" implementation-order content.
  • aallan/vera#518: Related documentation updates to ROADMAP.md and KNOWN_ISSUES.md tracking closure-related WASM issues.

Suggested labels

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 directly addresses the main changes: ROADMAP refactor (Part 1) and the Tetris experiment revealing codegen bugs (Part 2), accurately capturing the dual purpose of this PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/roadmap-trim-retrospective

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

@codecov

codecov Bot commented May 7, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.92%. Comparing base (ec46cf8) to head (641e0cf).
⚠️ Report is 9 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #613   +/-   ##
=======================================
  Coverage   90.92%   90.92%           
=======================================
  Files          59       59           
  Lines       22997    22997           
  Branches      259      259           
=======================================
  Hits        20910    20910           
  Misses       2080     2080           
  Partials        7        7           
Flag Coverage Δ
javascript 57.36% <ø> (ø)
python 94.74% <ø> (ø)

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.

The previous trim (33c8090) didn't go far enough -- ROADMAP was still
a wall of text with retrospective evidence, meta-explanation, and
descriptive intros that weren't forward-looking.  This pass cuts:

* Top intro: 3 paragraphs of meta-framing -> 1 sentence pointing at
  HISTORY + CHANGELOG.
* "What's next" prose recap removed.  The Stabilisation tier table
  *is* what's next; no preamble needed.
* "The ordering principle" / "What moves when" meta-paragraphs --
  collapsed to one short sentence inline below the agent-integration
  tier table.
* Phase 1b VeraBench results dump (lines 70-99 -- six-model results
  table, key-findings narrative) removed.  Those are RESULTS, not
  forward work; they live in the vera-bench repo.  Replaced with
  forward item: "Expand benchmark coverage (pass@k, more models)".
* Phase 1a-complete pointer dropped (redundant with doc-level
  HISTORY pointer at the top).
* Milestone 1 / Milestone 2 descriptive intros that were partly
  retrospective ("This milestone follows the critical dependency
  chain that has driven the project... Map / JSON / HTTP /
  Inference are complete...") trimmed to the forward-looking goal
  statement only.
* Phase 2b Http intro trimmed: "shipped in v0.0.99" -> "extend the
  existing GET/POST surface".
* "Completed phases" footer paragraph (810+ commits / 138 releases /
  3766 tests / etc) removed entirely -- pure retrospective summary
  duplicating HISTORY.
* Phase 3c stale "33 to 50+ examples" -> "50+".  Also drops the
  parenthetical about check_doc_counts.py (tooling note, not
  roadmap content).
* Speculative-section meta-explanation trimmed.
* Continuous-hardening intro trimmed.

Net: 263 -> 200 lines (-76 / +13).  No forward-looking content
removed; only retrospective state, evidence dumps, and meta-prose.

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

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
ROADMAP.md (1)

1-200: ⚠️ Potential issue | 🔴 Critical

Remove completed issues (#595, #478, #470, #471, #466) from ROADMAP per documentation guidelines.

All 80 GitHub issue links in ROADMAP.md are correctly formed and point to valid issues in the aallan/vera repository. However, verification discovered that five issues have reached CLOSED or MERGED state and should be deleted from the roadmap as per the coding guidelines: "Completed items get deleted from these tables and noted in HISTORY.md."

Issues to remove and migrate to HISTORY.md:

  • #595 (CLOSED) — currently in Stabilisation tier row 3
  • #478 (CLOSED) — currently in CI tooling table
  • #470 (CLOSED) — referenced in phase dependency for issue #509
  • #471 (CLOSED) — referenced in phase dependency for issue #509
  • #466 (CLOSED) — referenced in phase dependency for issue #507
🤖 Prompt for 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.

In `@ROADMAP.md` around lines 1 - 200, Remove the five completed issues from
ROADMAP.md and append concise entries to HISTORY.md: delete the
Stabilisation-tier row referencing `#595`, remove the CI tooling table row for
`#478`, and remove the phase-dependency mentions of `#470` and `#471` (referenced
under issue `#509`) and `#466` (referenced under issue `#507`) in Phase 4c; ensure any
parenthetical "Phase 2 of [`#470`]" / "[`#471`]" / "[`#466`]" text is updated to
remove the closed issue numbers and that no dangling commas or stray brackets
remain so the Markdown renders correctly.
🤖 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 `@ROADMAP.md`:
- Line 7: The counts in ROADMAP.md ("3,766 tests, 86 conformance programs, 34
examples, 13 spec chapters.") are out of sync with README.md (which lists 3,761
tests and 33 examples); update the test and example numbers in the ROADMAP.md
line to match README.md (adjust "3,766"→"3,761" and "34"→"33") and then run
scripts/check_doc_counts.py to validate consistency across docs before
committing; ensure the conformance programs and spec chapters values ("86" and
"13") remain unchanged.
- Around line 13-22: Remove the entire table row referencing issue `#595` from
ROADMAP.md (the row starting with "| 7 | [`#595`]") and add a one-line entry to
the appropriate version section in HISTORY.md noting that `#595` (macOS malloc
abort in wasmtime trampoline on Ctrl-C) was closed/fixed — e.g. append a short
bullet like "Closed `#595` — macOS malloc abort in wasmtime trampoline on Ctrl-C
(upstream fix merged)." Ensure the ROADMAP table remains syntactically valid
after deleting the row and the HISTORY.md entry clearly references "#595".

---

Outside diff comments:
In `@ROADMAP.md`:
- Around line 1-200: Remove the five completed issues from ROADMAP.md and append
concise entries to HISTORY.md: delete the Stabilisation-tier row referencing
`#595`, remove the CI tooling table row for `#478`, and remove the phase-dependency
mentions of `#470` and `#471` (referenced under issue `#509`) and `#466` (referenced
under issue `#507`) in Phase 4c; ensure any parenthetical "Phase 2 of [`#470`]" /
"[`#471`]" / "[`#466`]" text is updated to remove the closed issue numbers and that
no dangling commas or stray brackets remain so the Markdown renders correctly.
🪄 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: 58951d52-5229-4ec2-a888-76131240a61f

📥 Commits

Reviewing files that changed from the base of the PR and between ec46cf8 and 2fab2d4.

📒 Files selected for processing (1)
  • ROADMAP.md

Comment thread ROADMAP.md
Comment thread ROADMAP.md
Fold the Tetris-experiment work into this PR (was opened as #623,
which is now closed in favour of bundling here).

Bugs (filed + reproduced on current main, added to KNOWN_ISSUES.md):

* #615 -- Non-contiguous outer-Int capture in closures miscompiles
  (silent wrong result OR trap, depending on body shape).  Hit
  *everywhere* in the Tetris collision-check; required helper-function
  workarounds throughout.
* #614 -- Closure capturing data ADT and passing it to a function call
  emits malformed WASM.  Single-variant ADTs reproduce identically.
  Hypothesised same root cause as #615 in the closure-lifter
  env-struct serialisation.

Both promoted to top of stabilisation tier in ROADMAP (#615 first
since silent miscompute is the most severe failure mode).

Friction items: each evaluated against Vera's design principles
rather than just transcribed from the friction document.

Kept as-is (no design tension):
* #618 -- IO.read_char / Terminal effect (Phase 2c)
* #622 -- SKILL.md polish: array_join cross-reference + decreases
  idiom example (Phase 3c)

Reframed against design principles:
* #616 -- nat ops.  Ship total nat_add + nat_mul (Phase 4c); reject
  saturating nat_sub_sat -- saturating papers over the underflow
  obligation that refinement types are designed to surface.  The
  underflow case is fixed cheaper by #552 generalising @nat invariant
  checking.
* #620 -- optional field names in data declarations (Phase 4d, new
  "Cosmetic / advisory additions" phase).  Issue body now carries
  four load-bearing guardrails: names never bindable in patterns,
  semantics-irrelevant, no compiler enforcement, mixed/anonymous
  forms must coexist.  Sharpens the "cosmetic only" framing so this
  cannot drift into named-binding territory.
* #621 -- debug effect.  Reframed as a *visible* first-class effect
  uniquely composable with pure (effects(pure | <Debug>)), not the
  effect-system-invisible version the friction doc proposed.  The
  invisible version contradicted the load-bearing effect-row
  visibility property; the visible version preserves the design
  while still solving the closure-debugging friction.

Closed as design-rejected:
* #617 -- anonymous tuples with let (x, y) = ... destructuring.
  Destructuring sugar introduces named locals, which contradict
  Vera's De Bruijn slot indexing.  The friction doc itself
  de-prioritised this; the data Pair { Pair(A, B) } workaround is
  the design-aligned answer.
* #619 -- pure / io single-keyword shorthand.  Directly undermines
  the mandatory contract preamble's role as a forcing function.
  60 lines of vacuous preamble for 20 helpers is the design working
  as intended -- it makes "vacuous because lazy" and "vacuous
  because thoughtful" typographically distinct.

ROADMAP changes:

* Stabilisation tier expanded from 7 to 9 items; #614 / #615 inserted
  at top.  Agent-integration tier renumbered 8/9/10 -> 10/11/12.
* Phase 2c gains #618.
* Phase 3c gains #621 + #622.
* Phase 4c gains #616 (nat_add + nat_mul; nat_sub_sat rejected).
* New Phase 4d "Cosmetic / advisory additions" with #620.

KNOWN_ISSUES.md gains entries for #614 and #615 in the Bugs section.

Co-Authored-By: Claude <noreply@anthropic.invalid>
@aallan aallan changed the title ROADMAP: strip retrospective material, keep forward-looking only ROADMAP refactor + Tetris experiment: 2 codegen bugs + design-reviewed friction items May 7, 2026

@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.

♻️ Duplicate comments (1)
ROADMAP.md (1)

23-23: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Remove closed issue #595 from the forward-looking Stabilisation tier.

Line 23 keeps #595 in an active roadmap queue even though this issue is already treated as closed in current project docs; that makes the forward plan stale and conflicts with the “completed items get deleted” rule (Line 33).

As per coding guidelines: “When closing an issue with a feature PR, delete the entry from ROADMAP.md entirely and add a one-liner to the relevant version row in HISTORY.md.”

🤖 Prompt for 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.

In `@ROADMAP.md` at line 23, Remove the closed issue entry for `#595` from the
Stabilisation tier in ROADMAP.md (delete the entire table row referencing issue
`#595` / wasmtime trampoline), and append a one-line note about closing `#595` to
the appropriate version row in HISTORY.md per project guidelines; ensure the
ROADMAP no longer lists `#595` and HISTORY.md contains the one-liner indicating
the issue was resolved/closed.
🤖 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.

Duplicate comments:
In `@ROADMAP.md`:
- Line 23: Remove the closed issue entry for `#595` from the Stabilisation tier in
ROADMAP.md (delete the entire table row referencing issue `#595` / wasmtime
trampoline), and append a one-line note about closing `#595` to the appropriate
version row in HISTORY.md per project guidelines; ensure the ROADMAP no longer
lists `#595` and HISTORY.md contains the one-liner indicating the issue was
resolved/closed.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: d0e374e6-18d1-40f8-b30f-f79e0a607c6e

📥 Commits

Reviewing files that changed from the base of the PR and between 2fab2d4 and 6ea0606.

📒 Files selected for processing (2)
  • KNOWN_ISSUES.md
  • ROADMAP.md

Pushback during PR review surfaced that "optional field names in data
declarations" has already been considered and rejected in April 2026
as #183 ("Human-readable slot annotations: display layer for @T.n
references"), with three explicit reasons:

1. They can lie -- advisory labels with no enforcement become a
   liability when they drift from semantics.
2. They don't help LLMs *generate* correct indices, only help humans
   *read* generated code.
3. They add comment-rot maintenance burden.

#183's replacement was #445 (vera check --explain-slots), which
shipped in v0.0.108 and is the project's design-aligned answer to
the slot-readability friction class.

The "four load-bearing guardrails" reframe in #620 didn't escape
those reasons -- guardrail 3 ("the compiler does not -- and must
not -- warn on misleading names") explicitly enshrined the first
rejection reason as a feature.  The "single point of truth" framing
(names in constructor declaration, not on slot references) is a
minor mitigation versus #183's per-use-site annotations but a
smaller failure surface, not a different failure mode.

Removed Phase 4d entirely from ROADMAP (it had only #620).  Closure
comment on #620 cites #183 verbatim and explains why the syntactic
difference doesn't escape the rejection.

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

@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: 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 `@ROADMAP.md`:
- Line 125: Remove the stray trailing pipe character at the end of the bullet
describing the `<Debug>` effect so the Markdown renders cleanly; locate the list
item that mentions `[`#621`]`, the `<Debug>` effect and the example `effects(pure
| <Debug>)` and delete the terminal `|` character from that line.
🪄 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: e018e325-1edc-49e8-8d37-10c27caedd6e

📥 Commits

Reviewing files that changed from the base of the PR and between 6ea0606 and e41be07.

📒 Files selected for processing (1)
  • ROADMAP.md

Comment thread ROADMAP.md Outdated
aallan and others added 3 commits May 7, 2026 20:43
User pushback on #620 (which I closed as duplicate of #183) prompted
re-evaluation of every other newly opened friction issue against
DESIGN.md principles.  All four remaining feature issues fail the
hard look:

* #616 (nat_add / nat_mul / nat_sub_sat) -- Closed as redundant.
  Empirically tested: Nat + Nat -> Nat and Nat * Nat -> Nat work
  directly today, type-check, verify at Tier 1, and run.  Bidirectional
  Int <: Nat subtyping handles them.  The friction is a documentation
  gap that #607 already tracks.  Adding new built-ins for what + and *
  already do violates DESIGN.md principle 6 (constrained expressiveness)
  and principle 3 (one canonical form).
* #618 (IO.read_char / Terminal effect) -- Closed.  Strategic answer
  for real-time terminal programs is --target browser, already
  prioritised in the stabilisation tier as #609 (JSPI sleep) + #610
  (ANSI subset interpreter).  IO.read_char alone is half-useless without
  set_raw_mode (still line-buffered); the full Terminal effect is
  OS-specific and substantial.  Browser path is the design-aligned
  choice and avoids per-OS gotchas.
* #621 (Debug effect) -- Closed.  Closure-must-be-pure is principle 2
  working as intended.  The Vera-aligned debugging path is "extract
  closure to top-level helper, vera test, IO.print from caller" --
  same workaround needed for #614/#615 anyway.  General future answer
  is #294 (effect row polymorphism).  A Debug effect adds a parallel
  mechanism redundant with both -- principle 6 violation.
* #622 (SKILL polish) -- Closed.  Both proposed additions are already
  in SKILL.md: string_join is in the bolded prefix-convention block at
  line 729 plus a worked example at line 982; the decreases-with-+1
  idiom is shown in a worked example at line 1614.  The friction-doc
  author themselves admitted they "didn't read carefully enough first
  time".  Padding SKILL.md with redundant cross-references would
  violate principle 6's documentation analogue.

Net result of the Tetris experiment after design review:
* Two real codegen bugs filed and added to KNOWN_ISSUES.md (#614, #615)
  + stabilisation-tier entries.
* Zero of the seven friction features survive design review:
  - 5 closed (#617 De Bruijn, #619 mandatory contracts, #620 dup of
    #183, plus #616, #618, #621, #622 from this commit).
  - 1 reframed earlier and now also closed (#616).
  - 1 reframed earlier and now also closed (#621).

The friction document was a useful map of where agents hit Vera's
design constraints, but every feature it proposed either:
- Solved a documentation problem (#607 / #622)
- Was already considered and rejected (#620 dup of #183)
- Contradicted a load-bearing design principle (#617, #619, #621)
- Was redundant with an existing or planned mechanism (#616, #618)

ROADMAP cleanup: removed entries for the four newly-closed issues
(Phase 2c #618, Phase 3c #621 + #622, Phase 4c #616).

Co-Authored-By: Claude <noreply@anthropic.invalid>
Daisy correctly pushed back on the close.  Two errors:

1. I overstated the implementation cost.  Raw-mode terminal input is
   ~5 lines on Unix (termios.tcsetattr already in Python stdlib),
   msvcrt.getch on Windows, JSPI-bridged keypress events in browser.
   The runtime can enter raw mode implicitly per read_char call;
   no separate set_raw_mode operation needed.  User-facing API is
   a single new IO operation.

2. I treated --target browser as a substitute for portable terminal
   input.  That violates Vera's "write once, run anywhere" target
   commitment (DESIGN.md: "WebAssembly (native + browser)" -- both
   first-class).  Restricting real-time CLI games to browser-only is
   the symmetric anti-pattern to restricting Conway's Life to
   terminal-only because sleep doesn't work in browser.  The project
   already accepted the symmetric work for timing (#609 JSPI sleep);
   the same logic applies to single-character input.

Reframed #618 to the minimum proposal: single new IO.read_char
operation in the existing IO effect, with two host implementations.
Out-of-scope items (set_raw_mode, enable_alternate_screen, get_size)
called out as separable filings if real demand emerges.

Title updated: "IO.read_char -- single-character input portable
across terminal and browser targets".

Added to stabilisation tier as item 9, alongside #609 (timing) and
#610 (rendering) -- together those three close the input/timing/
rendering trio that real-time programs need.  Agent-integration tier
renumbered 10/11/12 to 11/12/13.  Issue body now carries explicit
DESIGN.md target-commitment citation, the symmetry argument with
#609, and the trajectory of filing -> reframe -> erroneous close ->
reopen.

Net result of the Tetris experiment after this revision:
* Two real codegen bugs (#614, #615) -- stabilisation tier 1+2
* One stdlib-write-once-run-anywhere addition (#618) --
  stabilisation tier 9
* Six items closed after design review (#616, #617, #619, #620,
  #621, #622)

Co-Authored-By: Claude <noreply@anthropic.invalid>
…ry for #595

Two of five CodeRabbit findings valid:

* #595 (macOS malloc abort) closed 2026-05-07 -- upstream wasmtime-py
  PR #337 merged.  Removed from ROADMAP stabilisation tier (was item
  10); added one-line entry to HISTORY.md Stage 12 table.
* #478 (check_changelog_updated.py) closed 2026-04-16, already in
  HISTORY.md line 247.  Removed the residual ROADMAP CI tooling
  table row that should have been deleted at close time.

Three findings skipped:

* Doc-counts (line 7) -- check_doc_counts.py reports counts
  consistent at 3766 tests / 34 examples; CodeRabbit comparing
  against a stale README revision.
* #470 / #471 / #466 lineage refs under #509 / #507 -- these
  aren't roadmap entries, they're "Phase 2 of [#X]" lineage
  citations under the current phase-2 work.  The cross-refs to
  closed phase-1 predecessors are intentional context.
* Stray pipe on line 125 -- moot.  The <Debug> entry that
  contained the pipe was deleted entirely when #621 was closed.
  Line 125 is now blank.

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

aallan commented May 7, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented May 7, 2026

Copy link
Copy Markdown
✅ Actions performed

Full review triggered.

@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: 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 `@HISTORY.md`:
- Line 286: Remove the non-versioned housekeeping row (the table entry with "— |
7 May | Closed [`#595`] — macOS malloc abort in wasmtime trampoline on Ctrl-C;
upstream bytecodealliance/wasmtime-py#337 merged") from HISTORY.md and instead
add that same note to CHANGELOG.md under the [Unreleased] section (or record it
in the ROADMAP tracker), keeping HISTORY.md strictly tied to tagged release
versions only.
🪄 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: 2101e179-240d-46f3-9cbe-f1c5d31b69f6

📥 Commits

Reviewing files that changed from the base of the PR and between ec46cf8 and 4ebdbf2.

📒 Files selected for processing (3)
  • HISTORY.md
  • KNOWN_ISSUES.md
  • ROADMAP.md

Comment thread HISTORY.md Outdated
CodeRabbit's stated rule ("HISTORY.md strictly tied to tagged release
versions") is incorrect -- non-versioned `| -- |` rows appear
throughout HISTORY.md, accepted convention for changes that landed
between version bumps.  But the underlying point is valid: existing
`| -- |` rows all describe work that shipped (bug fixes, CI tooling,
GC widening, etc).  The #595 close-note I added is qualitatively
different: nothing of ours shipped, only an upstream wasmtime-py PR
merged.  The issue's own close-comment is the canonical record;
HISTORY duplicating it just adds noise.

Removed the row from HISTORY.  Folded a brief mention into the
existing CHANGELOG [Unreleased] "Changed: ROADMAP.md" entry which
already documents this PR's roadmap edits, so the close-note lives
alongside the rest of the ROADMAP-cleanup record.

Co-Authored-By: Claude <noreply@anthropic.invalid>
@aallan aallan merged commit df59570 into main May 7, 2026
19 checks passed
@aallan aallan deleted the claude/roadmap-trim-retrospective branch May 7, 2026 20:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant