Skip to content

SKILL.md documentation sweep + bug tracking from Game of Life agent run (#513)#518

Merged
aallan merged 9 commits into
mainfrom
docs-skill-gaps
Apr 23, 2026
Merged

SKILL.md documentation sweep + bug tracking from Game of Life agent run (#513)#518
aallan merged 9 commits into
mainfrom
docs-skill-gaps

Conversation

@aallan

@aallan aallan commented Apr 23, 2026

Copy link
Copy Markdown
Owner

Summary

Documentation-only PR capturing the current state of Vera after the Stage 11 capability push — and, critically, documenting the four bugs surfaced by an agent trying to write Conway's Game of Life against v0.0.119.

The agent's friction transcript is the clearest empirical signal we've had about where the language's failure modes actually bite: the language has caught up to what agents need at the capability level, but the documentation and a handful of compiler bugs are the remaining walls.

What the agent surfaced

Eight documentation gaps + four compiler bugs:

# Friction Type Addressed
1 Array literals [1, 2, 3] / [] never documented Doc gap New "Array literals" subsection under Composite types
2 Closure outer-binding capture never documented Doc gap New "Closures and captured bindings" section with De Bruijn shift rule
3 \x1b escape not supported → string_from_char_code(27) workaround Doc gap Full string-escape table (\n / \t / \r / \0 / \\ / \" / \u{XXXX}) + explicit "not supported" list + two documented fallbacks
4 (@Unit -> T) vs (-> T) ambiguity Doc gap New "Nullary and Unit-taking functions" subsection
5 apply_fn discoverable only by inspecting prelude.py Doc gap New "Stored function values and apply_fn" subsection
6 Closure nested directly inside another closure fails at compile time Compiler bug #514 filed + known-limitation note
7 Closure capturing a heap type (Array, String, ADT) fails at compile time Compiler bug #514 updated: this is the root cause, the earlier shapes were narrow manifestations
8 $gc_collect itself faults at memory boundary under sustained allocation pressure Compiler bug #515 filed
9 Runtime traps bubble up as raw wasmtime stack traces; CLI mis-labels every trap as "Runtime contract violation" Compiler/UX bug #516 filed — three-stage scope
10 No tail-call optimization; tail-recursive functions blow the stack at ~tens of thousands of frames Compiler bug #517 filed
11 No KNOWN_ISSUES awareness in SKILL.md Doc gap New "Known Bugs and Workarounds" section near end of SKILL.md
12 fix_allowlists.py silently creates duplicate dict keys (memory'd in feedback_spec_allowlist.md) Tooling AST-verified clean ALLOWLIST: 68 unique entries, 0 duplicates

The agent's own self-observation is captured on #516 and worth quoting as the motivation:

The entire reason this program took as many rounds as it did isn't that the language is hard — once you internalise the De Bruijn discipline, the slot arithmetic becomes pretty mechanical — but that type-checking passed on the first version while runtime WASM execution didn't. That's a meaningful thing to know about Vera's current state: the gap between "the type system is happy" and "the compiled artefact actually runs" is wider than you'd expect from a language with SMT-verified contracts. The verifier can prove your termination argument is sound while the codegen silently miscompiles your closure environment out from under you.

That's the gap this PR documents and the next few releases will close.

Structural additions to SKILL.md

Sections added, in order of appearance:

  • Nullary and Unit-taking functions (under Function Structure) — clarifies (-> T) vs (@Unit -> T) are both valid with different call-site arities.
  • Stored function values and apply_fn (same block) — pins apply_fn as the invocation mechanism for Fn(T -> U) values.
  • Array literals (under Types) — [] / [1, 2, 3], type inference rules, context-disambiguation from the postfix [] index operator.
  • Closures and captured bindings (between Iteration and Built-in Functions) — syntax, capture semantics, De Bruijn shift rule, the "primitives-only capture" limitation, tail-recursion-with-explicit-parameters workaround, four-case "when to use recursion instead" list, and a dedicated "Known limitation: nested closures and captured-scalar indirection" subsection with the two documented failure shapes.
  • Escape sequences (under the existing string discussion) — full supported set as a table, explicit list of unsupported escapes (\x.., \v, \f, \a, \b), two documented workarounds (\u{XXXX} unicode escape or string_from_char_code(N)).
  • Known Bugs and Workarounds (new top-level section near end) — tabulates the three classes of runtime bug most likely to bite an agent (Closures capturing heap-allocated values produce invalid WASM (nested-closure case is a narrow instance) #514, Pre-existing bugs in WASM call translators (surfaced by #474 review) #475, GC $alloc grows memory by only 1 page — large single allocations trap #487), each with a concrete workaround and tracking issue.

KNOWN_ISSUES.md updates

Three new rows under "Bugs":

ROADMAP.md updates

Short-term queue re-sorted into a bug-killing campaign with the three freshly-surfaced bugs at the top:

  1. Closures capturing heap-allocated values produce invalid WASM (nested-closure case is a narrow instance) #514 — closure heap-capture codegen (highest agent impact; blocks idiomatic higher-order array code)
  2. GC collect itself faults with out-of-bounds memory access under sustained allocation pressure #515 — GC collect faults (highest user-visibility; crashes realistic programs)
  3. Runtime traps need Vera-native diagnostics, not raw wasmtime stack traces #516 — runtime trap diagnostics (unblocks debugging all the others)
  4. Pre-existing bugs in WASM call translators (surfaced by #474 review) #475 — 10 pre-existing WASM translator bugs (previously v0.0.4: Typed AST layer #1, pushed down as the new findings outrank it)
  5. Phase 2 of #466: Eq/Ord-dispatched array operations (array_sort, array_contains, array_index_of) #507 — Eq/Ord-dispatched array ops

Workflow meta-lesson

Two observations worth carrying forward (saved to session memory, not included in the PR):

  • Document features by running a real agent against them — this PR's additions weren't designed; they were generated from a transcript. Every subsection maps to a specific moment the agent got stuck. Design-first doc writing missed all eight.
  • Don't defend drift as "established format" on consistency grounds — the test is "does this match the file's OLDEST examples", not "does this match the rows immediately above me." See the memory note added to feedback_coderabbit.md after PR Release v0.0.119: JSON typed accessors (#366) #511 round 3.

Validation

  • check_skill_examples.py: 52 parsed + 67 allowlisted + 0 failed
  • check_doc_counts.py: consistent
  • check_site_assets.py: up-to-date
  • ALLOWLIST AST-verified: 68 unique keys, 0 duplicates (previous state: 7 silently shadowed keys)
  • mypy / pytest clean on the branch

Files

  • SKILL.md — new subsections (lines 164-ish, 380-ish, 596-ish, 1680-ish, 2290-ish) and updated existing ones
  • KNOWN_ISSUES.md — three new bug rows
  • ROADMAP.md — implementation-order table re-sorted
  • docs/SKILL.md, docs/llms-full.txt — site asset regeneration
  • scripts/check_skill_examples.py — ALLOWLIST cleanup

No source code changes. No spec changes. No compiled-artefact changes.

Test plan

  • python scripts/check_skill_examples.py exits 0
  • python scripts/check_doc_counts.py exits 0
  • python scripts/check_site_assets.py exits 0
  • pytest tests/test_readme.py tests/test_build_site.py green
  • AST verification: ALLOWLIST has 0 duplicate keys
  • Each SKILL.md worked example smoke-tested at runtime (array literals, closure capture, finite-overflow guard, ANSI escape via string_from_char_code)

Closes #513

Summary by CodeRabbit

  • Documentation
    • Large sweep of language docs: function arity/calling rules, array literal semantics, closures/capture semantics, string escape table, and a consolidated known-bugs & workarounds table; release notes updated.
  • Bug Reports / Known Issues
    • Added four tracked issues: nested-closure capture failures, GC faulting under sustained allocation, raw runtime trap diagnostics/CLI mislabelling, and missing tail-call optimisation.
  • Roadmap
    • Reordered priorities to place the four new issues ahead of prior top items.
  • Chores
    • Regenerated example-check allowlist to match revised docs.

aallan and others added 4 commits April 23, 2026 16:12
Two documentation gaps surfaced by the same agent writing Conway's
Game of Life — the same agent whose earlier feedback drove the
Stage 11 primitives push.  Both features WORK; they just weren't
in SKILL.md, so an agent reading only SKILL.md found workarounds
where idiomatic solutions exist.

Agent friction #1 (array literals):
  "I don't see direct array literal syntax.  I could use
   array_range(0, 0) to get an empty array, but that returns
   Array<Int> and I need Array<Bool>.  Looking more carefully at
   the skill documentation, I see [] is just an index operator,
   not an array literal."

Agent friction #2 (closure capture):
  "Closures seem to only reference their own parameters through
   De Bruijn indices, with no clear way to access outer bindings.
   Since the documentation doesn't explicitly cover closure
   capture semantics, I'll stick with recursion as the safer
   approach."

Both correctly followed the (incomplete) documentation to the
wrong conclusion.

Additions:
- New "Array literals" subsection under "Composite types":
  shows [], [1, 2, 3], type inference, nested arrays, and the
  context-disambiguation between literal-[] and postfix-index-[].
  Verified with a live smoke test — Array<Bool> = [] followed by
  = [true, false, true] compiles and returns length 3.
- New "Closures and captured bindings" section between Iteration
  and Built-in Functions, with: (a) syntax example, (b) worked
  fold example capturing an outer `let @int = 100` at Int.2
  (smoke-tested returning 306), (c) explicit rule for counting
  De Bruijn shifts by the closure's own parameters of each type,
  (d) the --explain-slots tip, (e) a "when to use recursion
  instead" section listing the four cases closures don't cover
  (non-pure effect rows, early-return, non-linear iteration,
  termination proofs requiring `decreases`).

Allowlist bookkeeping:
- Added 3 new FRAGMENT entries (my two new bare-let blocks plus
  md_parse signatures that shifted).
- Updated 2 shifted entries (handle syntax template 1388→1459,
  import aliasing 1878→1949).

No code changes.  No spec changes.  No test changes beyond
allowlist-shift in scripts/check_skill_examples.py.

Branch kept open to collect further agent-friction gaps as they
arrive — this is a small PR that can grow by one commit per
signal until the agent stops hitting walls.

Co-Authored-By: Claude <noreply@anthropic.invalid>
, #514)

Second wave of agent-friction documentation, plus a filed compiler
bug (#514) the agent surfaced during the same Game of Life run.

SKILL.md additions:
- **String escape sequences table**: full set (\\n, \\t, \\r, \\0, \\\\,
  \\", \\u{XXXX}).  Call out \\x / \\v / \\f etc. NOT supported, with
  two documented workarounds (unicode escape or
  string_from_char_code).  Confirms raw UTF-8 literals work
  ("██" compiles and prints).  Triggered by the agent trying \\x1b
  for an ANSI sequence and needing to discover string_from_char_code
  by inspection.
- **Nullary vs Unit-taking functions**: both `(-> T)` and `(@Unit -> T)`
  are valid; call sites must match the arity exactly.  Agent noticed
  both in the codebase and wondered which was "right".  Worked
  examples show both compile and run.
- **Stored function values and apply_fn**: the agent discovered
  apply_fn by inspecting prelude.py; it was never in SKILL.md.
  Added a subsection with a worked example and a pointer to
  examples/closures.vera and ch05_closures.vera for the full shape.
- **Known Bugs and Workarounds section** near the end of SKILL.md:
  new, dedicated table with the three classes of runtime bugs
  agents are most likely to hit — nested closures (#514), the 10
  pre-existing translator bugs (#475), and the 64 KB single-alloc
  limit (#487).  Each entry gives a shape, a concrete workaround,
  and the tracking issue.  Terminal sentence pins the diagnostic
  heuristic: "type-checks cleanly + mysterious runtime trap =
  probably #514 in a new shape."
- **Closure known-limitation subsection**: expanded to cover the
  two distinct failure modes (compile-time nested; runtime
  captured-scalar-through-indirection) with the agent's refined
  isolation matrix (see #514 comment).

Non-SKILL updates:
- KNOWN_ISSUES.md: new #514 row under Bugs covering both failure
  modes and the workaround.
- scripts/check_skill_examples.py: clean allowlist rewrite, 66
  unique entries, AST-verified zero duplicate keys.  The previous
  state had 7 duplicate keys from fix_allowlists shifting entries
  into collision — memory feedback_spec_allowlist.md covers this
  failure mode.

Full validation green: 54 parsed + 66 allowlisted = 120 SKILL.md
blocks handled, 0 failures; doc counts consistent; site assets
up-to-date; 19 doc-related tests pass.

Co-Authored-By: Claude <noreply@anthropic.invalid>
Two new issues surfaced by the same agent run:

- #515: $gc_collect itself faults with out-of-bounds memory access
  under sustained allocation pressure.  40×20 Conway's Game of Life
  over 200 generations reliably reproduces.  The collector walks
  past $heap_ptr to the linear-memory bound and traps — gc_collect
  is the top frame of the crashing stack, not the program.  This
  is distinct from #487 (alloc path) and #484 (sweeper 16-bit
  truncation).
- #516: Runtime traps bubble up as raw wasmtime stack traces; the
  CLI mis-labels every Trap/WasmtimeError as "Runtime contract
  violation" even when the actual cause is out-of-bounds memory
  access, integer overflow, unreachable, etc.  No source-line
  mapping, no actionable guidance — the exact opposite of the
  carefully crafted compile-time diagnostics.  Three-stage
  proposed scope: categorise trap reason, source-map the Vera
  function that trapped, specialise help for common trap classes.

KNOWN_ISSUES.md updated with rows for both.

ROADMAP.md implementation-order table re-sorted:
  1. #514 (nested closures + captured-scalar indirection)
  2. #515 (GC collect faults)
  3. #516 (runtime trap diagnostics)
  4. #475 (WASM translator bug cleanup — previously #1)
  5. #507 (Eq/Ord-dispatched array ops)

The top three are all surfaced by the single Game of Life agent
run — the empirical signal is the clearest prioritisation we've
had.  #475 was promoted to #1 after PR #511 merged; pushed to #4
as the new issues outrank it on agent-adoption impact.

Agent-noted quote, worth capturing as the motivation for #516
specifically:

  "the gap between 'the type system is happy' and 'the compiled
   artefact actually runs' is wider than you'd expect from a
   language with SMT-verified contracts. The verifier can prove
   your termination argument is sound while the codegen silently
   miscompiles your closure environment out from under you."

Also posted comment on #514 documenting the third shape the
agent is now isolating (closure body with i32/i64 type mismatch,
distinct from direct-nesting and captured-scalar-indirection).

No code changes.

Co-Authored-By: Claude <noreply@anthropic.invalid>
Fourth round of agent isolation has narrowed #514 from "nested
closures" + "captured scalar through array_map" to a single root
cause:

**Closures can capture primitive outer bindings (Int, Nat, Bool,
Byte, Float64) but NOT heap-allocated ones (String, Array<T>, any
ADT, opaque handles).**

The previously documented shapes were narrow manifestations of the
same bug.  vera check and vera compile both succeed for heap-
capture shapes; vera run fails with "unknown table 0" or
"i32/i64 type mismatch" at WASM validation.

Changes:
- SKILL.md "Capturing outer bindings" rewritten to lead with the
  limitation, enumerate which types work and which don't, and
  point at the recursion-with-explicit-parameters workaround.  A
  new "What you cannot capture" subsection lists every heap type.
  A "Workaround: tail recursion with explicit parameters"
  subsection shows the lifted-function pattern that dodges the
  bug (demonstrated end-to-end in examples/life.vera once that
  example lands).
- KNOWN_ISSUES.md #514 row rewritten with the sharpened root
  cause, the full list of failing capture types, the primitive-
  capture allowlist, and the two observed validation error
  shapes.
- #514 on the issue tracker updated with the fourth-round
  isolation matrix and an investigation pointer at
  vera/wasm/closures.py._compile_lifted_closure's environment
  struct emission (my hypothesis: environment field layout
  treats all captures as i64 scalars, fine for primitives, wrong
  for pair-shaped or ADT values).
- scripts/check_skill_examples.py allowlist regenerated via
  fix_allowlists, then manually de-duplicated (two line-number
  collisions from the shift) and extended with 3 new FRAGMENT
  entries for the BROKEN-example blocks in the updated closure
  section.  AST-verified 68 unique keys, 0 dups.

Ready to ship as the first commit of the docs-only PR (#513).
More signals can land as additional commits before merge if the
agent run surfaces further gaps.

Co-Authored-By: Claude <noreply@anthropic.invalid>
@aallan aallan added the documentation Improvements or additions to documentation label Apr 23, 2026
@coderabbitai

coderabbitai Bot commented Apr 23, 2026

Copy link
Copy Markdown

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

Documentation and tracking updates: SKILL.md expanded with array literals, closures, strings and a Known Bugs table; KNOWN_ISSUES.md adds four tracked bugs (#514#517); ROADMAP.md reprioritises those issues; scripts/check_skill_examples.py ALLOWLIST rewritten to use fence opening line numbers; CHANGELOG updated under Unreleased.

Changes

Cohort / File(s) Summary
Issue tracking & roadmap
KNOWN_ISSUES.md, ROADMAP.md
Added four tracked issues (#514#517) describing nested-closure/capture codegen failures, $gc_collect trapping under sustained allocations, poor runtime-trap diagnostics/CLI labelling, and missing tail-call optimisation; ROADMAP.md reordered the implementation-priority queue to elevate these items.
Language specification & examples
SKILL.md
Large documentation additions: array literal syntax and typing/parse disambiguation (including empty-array contextual typing), new closures section (anonymous functions, De Bruijn indexing, capture constraints, nested-closure limitations and workarounds), expanded string escape table and Unicode notes, plus a consolidated “Known Bugs and Workarounds” table with example fragments.
Example validation tooling
scripts/check_skill_examples.py
Rewrote ALLOWLIST to key entries by the fenced example opening line number; updated/realigned allowlist entries to match SKILL.md fence locations and expanded inline comment describing keying and duplicate-key behaviour.
Changelog
CHANGELOG.md
Replaced the Unreleased placeholder with release notes referencing the SKILL.md sweep and added a Tracked bugs section listing #514#517.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~22 minutes

Possibly related PRs

Suggested labels

docs, ci

🚥 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 Title accurately captures the main change: a SKILL.md documentation sweep with tracked bugs from agent testing, matching the PR content.
Linked Issues check ✅ Passed All PR objectives from #513 are fully met: array literals documented, closures section added with capture semantics, nullary/unit-taking functions detailed, string escape table included, examples validated via check_skill_examples.py, and no spec/source changes.
Out of Scope Changes check ✅ Passed All changes are documentation-focused (SKILL.md, KNOWN_ISSUES.md, ROADMAP.md, CHANGELOG.md, scripts/check_skill_examples.py allowlist regeneration). No source code, spec rewrites, or new built-ins; perfectly aligned with scope.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ 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 docs-skill-gaps

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

Fourth bug surfaced during the Game of Life agent run: Vera's
compiler doesn't emit WASM return_call in tail positions, so
tail-recursive functions — the documented for/while replacement —
blow the call stack at ~tens of thousands of frames.

Added:
- KNOWN_ISSUES.md: new row under Bugs describing the missing
  TCO and the SKILL.md idiom-vs-reality gap.
- ROADMAP.md: #517 inserted at position 4 in the short-term
  implementation-order table; #475 pushed to #5, #507 to #6.

No code changes.

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

codecov Bot commented Apr 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.03%. Comparing base (eef844b) to head (ba78c9b).
⚠️ Report is 10 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #518   +/-   ##
=======================================
  Coverage   91.03%   91.03%           
=======================================
  Files          58       58           
  Lines       21964    21964           
  Branches      259      259           
=======================================
  Hits        19995    19995           
  Misses       1962     1962           
  Partials        7        7           
Flag Coverage Δ
javascript 56.83% <ø> (ø)
python 95.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 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 the current code and only fix it if needed.

Inline comments:
In `@SKILL.md`:
- Around line 716-760: Duplicate example blocks showing the same "BROKEN"
nested-closure and "WORKING" named-helper pattern were accidentally left in the
file; remove the redundant second block so only one copy of the example remains
(keep the example that defines fill_row and build_grid and the
array_map/array_range snippets), ensuring references to fill_row, build_grid,
array_map and array_range remain intact and formatting/```vera fences are
consistent.
🪄 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: f6baf12d-50f0-48f6-9b5d-0c336c53c26b

📥 Commits

Reviewing files that changed from the base of the PR and between eef844b and edd5433.

⛔ Files ignored due to path filters (2)
  • docs/SKILL.md is excluded by !docs/**
  • docs/llms-full.txt is excluded by !docs/**
📒 Files selected for processing (4)
  • KNOWN_ISSUES.md
  • ROADMAP.md
  • SKILL.md
  • scripts/check_skill_examples.py

Comment thread SKILL.md
aallan and others added 2 commits April 23, 2026 17:10
Pre-commit's check_changelog_updated.py requires CHANGELOG entries
whenever SKILL.md is modified.  Add a Documentation + Tracked-bugs
block under [Unreleased] summarising the eight SKILL sections
added/rewritten and the four bugs filed (#514, #515, #516, #517)
from the Game of Life agent run.

Co-Authored-By: Claude <noreply@anthropic.invalid>
CodeRabbit caught two copies of the same BROKEN/WORKING nested-closure
example pair — one labeled (1) and one unlabeled but otherwise identical.
Dropped the unlabeled duplicate; kept the (1)-labeled copy as the
canonical example for the 'Known limitation: nested closures and
captured-scalar indirection' subsection.

scripts/check_skill_examples.py: cleaned up ALLOWLIST (fix_allowlists
re-introduced duplicate keys per the memory'd bug; manually deduped
and re-verified 66 unique entries, 0 duplicates).

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 the current code and only fix it if needed.

Inline comments:
In `@SKILL.md`:
- Around line 2296-2307: Update the "Known Bugs and Workarounds" table in
SKILL.md to include the missing tracked issues `#515`, `#516`, and `#517`: add one
table row per issue with the Shape, a short Bug summary, the appropriate
Workaround text (copied/condensed from KNOWN_ISSUES.md), and the Issue column
linking to the GitHub issue; also update the trailing paragraph that enumerates
the likely-causing issues so it lists `#514/`#515/#516/#517 to keep this section
consistent with KNOWN_ISSUES.md and the documented short-term bug focus.
🪄 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: 7d829aae-2d15-437e-94d4-386aa3be0d47

📥 Commits

Reviewing files that changed from the base of the PR and between dab0225 and db7f25e.

⛔ Files ignored due to path filters (2)
  • docs/SKILL.md is excluded by !docs/**
  • docs/llms-full.txt is excluded by !docs/**
📒 Files selected for processing (2)
  • SKILL.md
  • scripts/check_skill_examples.py

Comment thread SKILL.md
CodeRabbit caught that the Known Bugs and Workarounds table only had
rows for #514/#475/#487 but KNOWN_ISSUES.md and the ROADMAP short-term
queue already tracked #515/#516/#517 as well.  Added three new rows:

- GC collect faults (#515): collector walks past heap_ptr under
  allocation pressure.
- Runtime trap diagnostics (#516): 'Runtime contract violation'
  label conflates contract-fail with OOM/overflow/etc.
- No tail-call optimization (#517): tail-recursive iteration blows
  the call stack at ~tens of thousands of frames.

Also rewrote the existing #514 row with the agent's sharpened
characterization (closures + any heap capture, not 'nested
closures'), and rewrote the trailing diagnostic-hint paragraph to
map each common symptom to the specific issue it's likely caused
by.  No stale labels remain; the section mirrors the KNOWN_ISSUES.md
Bugs table in scope.

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 the current code and only fix it if needed.

Inline comments:
In `@SKILL.md`:
- Around line 643-655: The broken repro uses invalid/placeholder names and
therefore demonstrates the wrong failure path; update the snippet so it uses a
valid array variable (replace some_array with a real variable name declared
earlier, e.g., let my_array = [10,20,30]) and correct field access on the heap
array type (use the actual variable name instead of `@Array`<Int>.1) so the
closure passed to array_fold captures the heap-typed value and triggers the
intended WASM validation/runtime error; ensure the example uses the same heap
type symbol `@Array`<Int>, references array_length(my_array) and nat_to_int(...)
correctly, and removes any invalid syntax so the repro reaches the `#514`
validation shape.
🪄 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: 58548c43-3afd-4f53-922c-1c21634f2651

📥 Commits

Reviewing files that changed from the base of the PR and between db7f25e and dc010e5.

⛔ Files ignored due to path filters (2)
  • docs/SKILL.md is excluded by !docs/**
  • docs/llms-full.txt is excluded by !docs/**
📒 Files selected for processing (1)
  • SKILL.md

Comment thread SKILL.md
Eleven open bugs total; all now in the ROADMAP implementation-order
table:

Campaign-ordered by impact:
1. #514 — closure heap capture
2. #515 — GC collect faults
3. #516 — runtime trap diagnostics
4. #517 — no tail-call optimization
5. #520 — Nat subtraction soundness
6. #475 — 10 pre-existing WASM translator bugs
7. #487 + #348 — GC allocator growth + worklist sizing (grouped)
8. #346 + #347 + #490 — opaque-handle hygiene (grouped)
9. #507 — Eq/Ord-dispatched array ops (enhancement, not bug)

Slots 7 and 8 are grouped-issue lines because those bugs share
implementation sites and are cheaper to fix together than apart.

Also fixed SKILL.md allowlist shifts from the heap-capture example
rewrite (CR round 3) — allowlist now 67 unique entries, AST-verified
zero duplicates.

No code changes.  Pure coordination.

Co-Authored-By: Claude <noreply@anthropic.invalid>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SKILL.md missing sections: array literals + closure capture + audit pass

1 participant