[GH-ISSUE #1442] [Bug] Assigning an object into a slot, then writing through it, reports a stale literal #490

Closed
opened 2026-10-15 18:25:31 +00:00 by bsakaguchi · 3 comments
Owner

Originally created by @CassieFox23 on GitHub (Oct 10, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/1442

TL;DR: Put an object into a slot, then write through that slot. REA misses the write. It reports the old value as a sure fact. No loop is needed. Real JS gives a different value.

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

Evidence, artifacts, or reconstruction

Observed behavior

The return shape says literal 1 here. Real JS returns 2.

export function result() {
  const shared = { x: 1 };
  const o = { a: { x: 0 } };
  o.a = shared;
  o.a.x = 2;
  return shared.x;
}

After o.a = shared, the slot o.a is shared. So o.a.x = 2 writes shared.x. REA does not link the two. It keeps the first value. The return-shape coverage still says complete.

When the object goes in at creation, REA is honest. const o = { a: shared } gives unknown. So the gap is the later assignment.

Reproduction

Save each form as app.js in its own folder. Run rea analyze-javascript-application <dir> --artifact-format directory --json. Then read static_return_shapes on result.

Form Real JS 6.3.0 main 0b9815b6 #1437 head 62bffde3
o.a = shared; o.a.x = 2 2 literal 1 literal 1 literal 1
arr[0] = shared; arr[0].x = 2 2 literal 1 literal 1 literal 1
o.a = shared; const t = o.a; t.x = 2 2 literal 1 literal 1 literal 1
const o = { a: shared }; o.a.x = 2 2 unknown
const arr = [shared]; arr[0].x = 2 2 unknown

Expected behavior

unknown, like the initializer forms. Or literal 2 if the write is followed. Never a literal that real JS can't produce.

Impact and scope

This is a wrong fact, not a lost one. A caller would trust literal 1. It is not new: 6.3.0 does it too. The same gap shows up in loops. arr[0] = shared; for (const t of arr) t.x = 2 gives literal 1 on main and on #1437. That PR fixes the loop form from #1428, so this is a separate root.

Interface

CLI. Also seen when calling the analysis function directly.

Earliest failure stage

Native analysis or reconstruction

Not run

Edit: Results for these are in the follow-up. The bug reaches further than this body says. macOS and Windows are still not run.

  • The MCP surface.
  • Deeper chains like o.a.b = shared.
  • Maps, sets and class fields.
  • macOS or Windows.

Found while testing #1437. Thanks to N0zoM1z0 for the quick loop fix that led here.

Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1
  • REA: 6.3.0 (released package), main at 0b9815b6, #1437 at 62bffde3

🤖 Generated with Claude Code (Opus 5.5) 🦊

Originally created by @CassieFox23 on GitHub (Oct 10, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/1442 **TL;DR:** Put an object into a slot, then write through that slot. REA misses the write. It reports the old value as a sure fact. No loop is needed. Real JS gives a different value. ### Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ### Area Evidence, artifacts, or reconstruction ### Observed behavior The return shape says `literal 1` here. Real JS returns 2. ```js export function result() { const shared = { x: 1 }; const o = { a: { x: 0 } }; o.a = shared; o.a.x = 2; return shared.x; } ``` After `o.a = shared`, the slot `o.a` is `shared`. So `o.a.x = 2` writes `shared.x`. REA does not link the two. It keeps the first value. The return-shape coverage still says `complete`. When the object goes in at creation, REA is honest. `const o = { a: shared }` gives `unknown`. So the gap is the later assignment. ### Reproduction Save each form as `app.js` in its own folder. Run `rea analyze-javascript-application <dir> --artifact-format directory --json`. Then read `static_return_shapes` on `result`. | Form | Real JS | 6.3.0 | main `0b9815b6` | #1437 head `62bffde3` | |---|---|---|---|---| | `o.a = shared; o.a.x = 2` | 2 | `literal 1` | `literal 1` | `literal 1` | | `arr[0] = shared; arr[0].x = 2` | 2 | `literal 1` | `literal 1` | `literal 1` | | `o.a = shared; const t = o.a; t.x = 2` | 2 | `literal 1` | `literal 1` | `literal 1` | | `const o = { a: shared }; o.a.x = 2` | 2 | | `unknown` | | | `const arr = [shared]; arr[0].x = 2` | 2 | | `unknown` | | ### Expected behavior `unknown`, like the initializer forms. Or `literal 2` if the write is followed. Never a literal that real JS can't produce. ### Impact and scope This is a wrong fact, not a lost one. A caller would trust `literal 1`. It is not new: 6.3.0 does it too. The same gap shows up in loops. `arr[0] = shared; for (const t of arr) t.x = 2` gives `literal 1` on main and on #1437. That PR fixes the loop form from #1428, so this is a separate root. ### Interface CLI. Also seen when calling the analysis function directly. ### Earliest failure stage Native analysis or reconstruction ### Not run Edit: Results for these are in [the follow-up](https://github.com/morluto/rea/issues/1442#issuecomment-6094125652). The bug reaches further than this body says. macOS and Windows are still not run. - ~~The MCP surface.~~ - ~~Deeper chains like `o.a.b = shared`.~~ - ~~Maps, sets and class fields.~~ - macOS or Windows. Found while testing #1437. Thanks to N0zoM1z0 for the quick loop fix that led here. <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1 - REA: 6.3.0 (released package), main at `0b9815b6`, #1437 at `62bffde3` </details> 🤖 Generated with Claude Code (Opus 5.5) 🦊
Author
Owner

@CassieFox23 commented on GitHub (Oct 10, 2026):

TL;DR: I ran the tests from the Not run list. MCP gives the same wrong literal 1 as the CLI. So do Node 24 and 26. The bug reaches further than I said. Deeper chains, computed keys and spread copies all get it. Maps, sets and class fields stay honest.

WRONG: literal 1, but real JS returns 2

Each form puts shared in a slot, then writes x = 2 through it. Coverage still says complete on every row.

Form Real JS REA
o.a = shared; o.a.x = 2 (from the issue) 2 literal 1
o.a.b = shared; o.a.b.x = 2 2 literal 1
o.a = shared; o.a.inner.x = 2 (returns shared.inner.x) 2 literal 1
o.a = p; p.b = shared; o.a.b.x = 2 2 literal 1
const k = 'a'; o[k] = shared; o[k].x = 2 2 literal 1
o.a = other; o.a = shared; o.a.x = 2 2 literal 1
o.a = shared; const o2 = { ...o }; o2.a.x = 2 2 literal 1

Maps, sets and both class forms give an honest unknown. Five controls keep a correct literal 1. The fold below has every row.

Every cell above is the same in all of these:

  • 6.3.0, main 0b9815b6 and #1437 head 62bffde3.
  • Node 22.23.1, 24.18.0 and 26.11.1.
  • CLI and MCP. All 216 MCP calls matched the CLI.

#1437 has merged since. Main is now ce16f7bc9. Its src/domain/javascript is byte for byte the #1437 head. So the head column covers current main too.

One more thing stood out. A direct shared.x = 2 drops to unknown. The same write through a slot stays literal 1.

Still not run

Edit: The fresh build of main is done, in a new comment. Nothing changed.

  • A fresh build of current main ce16f7bc9. Its JavaScript code matches #1437 head. Under src/, one MCP contracts file differs. Tests and docs differ too.
  • macOS and Windows.
Full matrix (24 cases, same on every version and Node)
Case Real JS 6.3.0 / main / #1437 head Verdict
o.a = shared; o.a.x = 2 2 literal 1 WRONG
arr[0] = shared; arr[0].x = 2 2 literal 1 WRONG
o.a = shared; const t = o.a; t.x = 2 2 literal 1 WRONG
o.a.b = shared; o.a.b.x = 2 2 literal 1 WRONG
o.a = shared; o.a.inner.x = 2 2 literal 1 WRONG
o.a = p; p.b = shared; o.a.b.x = 2 2 literal 1 WRONG
o[k] = shared; o[k].x = 2 2 literal 1 WRONG
o.a = { x: 0 }; o.a = shared; o.a.x = 2 2 literal 1 WRONG
o.a = other; o.a = shared; o.a.x = 2 2 literal 1 WRONG
o.a = shared; o2 = { ...o }; o2.a.x = 2 2 literal 1 WRONG
const o = { a: shared }; o.a.x = 2 2 unknown honest
const arr = [shared]; arr[0].x = 2 2 unknown honest
m.set('k', shared); m.get('k').x = 2 2 unknown honest
new Set([shared]) + for…of write 2 unknown honest
s.add(shared) + for…of write 2 unknown honest
Class method this.a = s; this.a.x = 2 2 unknown honest
Static method C.a = s; C.a.x = 2 2 unknown honest
shared.x = 2 (direct) 2 unknown honest
o.a = { x: 5 }; o.a.x = 2 1 literal 1 correct
o.a = shared; o.a = { x: 5 }; o.a.x = 2 1 literal 1 correct
o.a = shared; o.a = { x: 0 }; o.a.x = 2 1 literal 1 correct
o.a = { ...shared }; o.a.x = 2 1 literal 1 correct
o.a = shared; const y = o.a.x; return shared.x 1 literal 1 correct
o.a = shared; const y = o.a.x; return shared.x + 0 * y 1 unknown honest

Each case starts with const shared = { x: 1 }. Each returns shared.x, except the inner case.

Commands
  • Real JS: import each app.js and call result(). Run on all three Nodes.
  • CLI: rea analyze-javascript-application <dir> --artifact-format directory --json. Read static_return_shapes and return_shape_coverage on result.
  • MCP: one stdio server (rea --mcp) per version and Node. A client on the repo's own @modelcontextprotocol/client calls analyze_javascript_application with format: "directory". Then it reads static_return_shapes from structuredContent.
  • All 216 CLI runs and 216 MCP calls exited clean.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1, 24.18.0, 26.11.1
  • REA: 6.3.0 (released package), main at 0b9815b6, #1437 at 62bffde3
  • Current main ce16f7bc9: same src/domain/javascript as 62bffde3, not built

🤖 Generated with Claude Code (Opus 5.5) 🦊

<!-- gh-comment-id:6094125652 --> @CassieFox23 commented on GitHub (Oct 10, 2026): **TL;DR:** I ran the tests from the Not run list. MCP gives the same wrong `literal 1` as the CLI. So do Node 24 and 26. The bug reaches further than I said. Deeper chains, computed keys and spread copies all get it. Maps, sets and class fields stay honest. ### WRONG: `literal 1`, but real JS returns 2 Each form puts `shared` in a slot, then writes `x = 2` through it. Coverage still says `complete` on every row. | Form | Real JS | REA | |---|---|---| | `o.a = shared; o.a.x = 2` (from the issue) | 2 | `literal 1` | | `o.a.b = shared; o.a.b.x = 2` | 2 | `literal 1` | | `o.a = shared; o.a.inner.x = 2` (returns `shared.inner.x`) | 2 | `literal 1` | | `o.a = p; p.b = shared; o.a.b.x = 2` | 2 | `literal 1` | | `const k = 'a'; o[k] = shared; o[k].x = 2` | 2 | `literal 1` | | `o.a = other; o.a = shared; o.a.x = 2` | 2 | `literal 1` | | `o.a = shared; const o2 = { ...o }; o2.a.x = 2` | 2 | `literal 1` | Maps, sets and both class forms give an honest `unknown`. Five controls keep a correct `literal 1`. The fold below has every row. Every cell above is the same in all of these: - 6.3.0, main `0b9815b6` and #1437 head `62bffde3`. - Node 22.23.1, 24.18.0 and 26.11.1. - CLI and MCP. All 216 MCP calls matched the CLI. #1437 has merged since. Main is now `ce16f7bc9`. Its `src/domain/javascript` is byte for byte the #1437 head. So the head column covers current main too. One more thing stood out. A direct `shared.x = 2` drops to `unknown`. The same write through a slot stays `literal 1`. ### Still not run Edit: The fresh build of main is done, in [a new comment](https://github.com/morluto/rea/issues/1442#issuecomment-6094203030). Nothing changed. - ~~A fresh build of current main `ce16f7bc9`. Its JavaScript code matches #1437 head. Under `src/`, one MCP contracts file differs. Tests and docs differ too.~~ - macOS and Windows. <details> <summary>Full matrix (24 cases, same on every version and Node)</summary> | Case | Real JS | 6.3.0 / main / #1437 head | Verdict | |---|---|---|---| | `o.a = shared; o.a.x = 2` | 2 | `literal 1` | WRONG | | `arr[0] = shared; arr[0].x = 2` | 2 | `literal 1` | WRONG | | `o.a = shared; const t = o.a; t.x = 2` | 2 | `literal 1` | WRONG | | `o.a.b = shared; o.a.b.x = 2` | 2 | `literal 1` | WRONG | | `o.a = shared; o.a.inner.x = 2` | 2 | `literal 1` | WRONG | | `o.a = p; p.b = shared; o.a.b.x = 2` | 2 | `literal 1` | WRONG | | `o[k] = shared; o[k].x = 2` | 2 | `literal 1` | WRONG | | `o.a = { x: 0 }; o.a = shared; o.a.x = 2` | 2 | `literal 1` | WRONG | | `o.a = other; o.a = shared; o.a.x = 2` | 2 | `literal 1` | WRONG | | `o.a = shared; o2 = { ...o }; o2.a.x = 2` | 2 | `literal 1` | WRONG | | `const o = { a: shared }; o.a.x = 2` | 2 | `unknown` | honest | | `const arr = [shared]; arr[0].x = 2` | 2 | `unknown` | honest | | `m.set('k', shared); m.get('k').x = 2` | 2 | `unknown` | honest | | `new Set([shared])` + `for…of` write | 2 | `unknown` | honest | | `s.add(shared)` + `for…of` write | 2 | `unknown` | honest | | Class method `this.a = s; this.a.x = 2` | 2 | `unknown` | honest | | Static method `C.a = s; C.a.x = 2` | 2 | `unknown` | honest | | `shared.x = 2` (direct) | 2 | `unknown` | honest | | `o.a = { x: 5 }; o.a.x = 2` | 1 | `literal 1` | correct | | `o.a = shared; o.a = { x: 5 }; o.a.x = 2` | 1 | `literal 1` | correct | | `o.a = shared; o.a = { x: 0 }; o.a.x = 2` | 1 | `literal 1` | correct | | `o.a = { ...shared }; o.a.x = 2` | 1 | `literal 1` | correct | | `o.a = shared; const y = o.a.x; return shared.x` | 1 | `literal 1` | correct | | `o.a = shared; const y = o.a.x; return shared.x + 0 * y` | 1 | `unknown` | honest | Each case starts with `const shared = { x: 1 }`. Each returns `shared.x`, except the `inner` case. </details> <details> <summary>Commands</summary> - Real JS: import each `app.js` and call `result()`. Run on all three Nodes. - CLI: `rea analyze-javascript-application <dir> --artifact-format directory --json`. Read `static_return_shapes` and `return_shape_coverage` on `result`. - MCP: one stdio server (`rea --mcp`) per version and Node. A client on the repo's own `@modelcontextprotocol/client` calls `analyze_javascript_application` with `format: "directory"`. Then it reads `static_return_shapes` from `structuredContent`. - All 216 CLI runs and 216 MCP calls exited clean. </details> <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1, 24.18.0, 26.11.1 - REA: 6.3.0 (released package), main at `0b9815b6`, #1437 at `62bffde3` - Current main `ce16f7bc9`: same `src/domain/javascript` as `62bffde3`, not built </details> 🤖 Generated with Claude Code (Opus 5.5) 🦊
Author
Owner

@CassieFox23 commented on GitHub (Oct 10, 2026):

TL;DR: I built current main fresh and ran all 24 cases again. Nothing changed. The same 10 forms still give a wrong literal 1.

Main is now eeb83f658, two commits past ce16f7bc9. Its src/domain/javascript matches #1437 head 62bffde3 byte for byte. Three other src/ files differ. One is the MCP schema change from #1433. Two now load a package on first use.

Every cell matched my last comment. That held on Node 22, 24 and 26. It held for the CLI and for MCP. All 72 CLI runs and 72 MCP calls exited clean. Coverage still says complete on every row.

The tests next to the changed files pass on Node 24:

  • toolOutputReferences.test.ts: 6 of 6
  • outputValidatorReuse.test.ts: 2 of 2
  • cliStartupImports.test.ts: 2 of 2

Still not run

  • macOS and Windows.
Full matrix (24 cases, main eeb83f658)
Case Real JS CLI 22 / 24 / 26 MCP 22 / 24 / 26 Verdict
o.a = shared; o.a.x = 2 2 literal 1 literal 1 WRONG
arr[0] = shared; arr[0].x = 2 2 literal 1 literal 1 WRONG
o.a = shared; const t = o.a; t.x = 2 2 literal 1 literal 1 WRONG
o.a.b = shared; o.a.b.x = 2 2 literal 1 literal 1 WRONG
o.a = shared; o.a.inner.x = 2 2 literal 1 literal 1 WRONG
o.a = p; p.b = shared; o.a.b.x = 2 2 literal 1 literal 1 WRONG
o[k] = shared; o[k].x = 2 2 literal 1 literal 1 WRONG
o.a = { x: 0 }; o.a = shared; o.a.x = 2 2 literal 1 literal 1 WRONG
o.a = other; o.a = shared; o.a.x = 2 2 literal 1 literal 1 WRONG
o.a = shared; o2 = { ...o }; o2.a.x = 2 2 literal 1 literal 1 WRONG
const o = { a: shared }; o.a.x = 2 2 unknown unknown honest
const arr = [shared]; arr[0].x = 2 2 unknown unknown honest
m.set('k', shared); m.get('k').x = 2 2 unknown unknown honest
new Set([shared]) + for…of write 2 unknown unknown honest
s.add(shared) + for…of write 2 unknown unknown honest
Class method this.a = s; this.a.x = 2 2 unknown unknown honest
Static method C.a = s; C.a.x = 2 2 unknown unknown honest
shared.x = 2 (direct) 2 unknown unknown honest
o.a = { x: 5 }; o.a.x = 2 1 literal 1 literal 1 correct
o.a = shared; o.a = { x: 5 }; o.a.x = 2 1 literal 1 literal 1 correct
o.a = shared; o.a = { x: 0 }; o.a.x = 2 1 literal 1 literal 1 correct
o.a = { ...shared }; o.a.x = 2 1 literal 1 literal 1 correct
o.a = shared; const y = o.a.x; return shared.x 1 literal 1 literal 1 correct
o.a = shared; const y = o.a.x; return shared.x + 0 * y 1 unknown unknown honest

Each case starts with const shared = { x: 1 }. Each returns shared.x, except the inner case. The full shape objects match the #1437 head run too. That covers source ranges and field paths.

Commands
  • Build: git archive eeb83f658, then npm ci and npm run build on Node 24.
  • CLI: rea analyze-javascript-application <dir> --artifact-format directory --json.
  • MCP: one stdio server (rea --mcp) per Node. It calls analyze_javascript_application with format: "directory".
  • Tests: npx vitest run --project <name> <file> on Node 24.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1, 24.18.0, 26.11.1
  • REA: main at eeb83f658

🤖 Generated with Claude Code (Opus 5.5) 🦊

<!-- gh-comment-id:6094203030 --> @CassieFox23 commented on GitHub (Oct 10, 2026): **TL;DR:** I built current main fresh and ran all 24 cases again. Nothing changed. The same 10 forms still give a wrong `literal 1`. Main is now `eeb83f658`, two commits past `ce16f7bc9`. Its `src/domain/javascript` matches #1437 head `62bffde3` byte for byte. Three other `src/` files differ. One is the MCP schema change from #1433. Two now load a package on first use. Every cell matched my last comment. That held on Node 22, 24 and 26. It held for the CLI and for MCP. All 72 CLI runs and 72 MCP calls exited clean. Coverage still says `complete` on every row. The tests next to the changed files pass on Node 24: - `toolOutputReferences.test.ts`: 6 of 6 - `outputValidatorReuse.test.ts`: 2 of 2 - `cliStartupImports.test.ts`: 2 of 2 ### Still not run - macOS and Windows. <details> <summary>Full matrix (24 cases, main eeb83f658)</summary> | Case | Real JS | CLI 22 / 24 / 26 | MCP 22 / 24 / 26 | Verdict | |---|---|---|---|---| | `o.a = shared; o.a.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `arr[0] = shared; arr[0].x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = shared; const t = o.a; t.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a.b = shared; o.a.b.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = shared; o.a.inner.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = p; p.b = shared; o.a.b.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o[k] = shared; o[k].x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = { x: 0 }; o.a = shared; o.a.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = other; o.a = shared; o.a.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `o.a = shared; o2 = { ...o }; o2.a.x = 2` | 2 | `literal 1` | `literal 1` | WRONG | | `const o = { a: shared }; o.a.x = 2` | 2 | `unknown` | `unknown` | honest | | `const arr = [shared]; arr[0].x = 2` | 2 | `unknown` | `unknown` | honest | | `m.set('k', shared); m.get('k').x = 2` | 2 | `unknown` | `unknown` | honest | | `new Set([shared])` + `for…of` write | 2 | `unknown` | `unknown` | honest | | `s.add(shared)` + `for…of` write | 2 | `unknown` | `unknown` | honest | | Class method `this.a = s; this.a.x = 2` | 2 | `unknown` | `unknown` | honest | | Static method `C.a = s; C.a.x = 2` | 2 | `unknown` | `unknown` | honest | | `shared.x = 2` (direct) | 2 | `unknown` | `unknown` | honest | | `o.a = { x: 5 }; o.a.x = 2` | 1 | `literal 1` | `literal 1` | correct | | `o.a = shared; o.a = { x: 5 }; o.a.x = 2` | 1 | `literal 1` | `literal 1` | correct | | `o.a = shared; o.a = { x: 0 }; o.a.x = 2` | 1 | `literal 1` | `literal 1` | correct | | `o.a = { ...shared }; o.a.x = 2` | 1 | `literal 1` | `literal 1` | correct | | `o.a = shared; const y = o.a.x; return shared.x` | 1 | `literal 1` | `literal 1` | correct | | `o.a = shared; const y = o.a.x; return shared.x + 0 * y` | 1 | `unknown` | `unknown` | honest | Each case starts with `const shared = { x: 1 }`. Each returns `shared.x`, except the `inner` case. The full shape objects match the #1437 head run too. That covers source ranges and field paths. </details> <details> <summary>Commands</summary> - Build: `git archive eeb83f658`, then `npm ci` and `npm run build` on Node 24. - CLI: `rea analyze-javascript-application <dir> --artifact-format directory --json`. - MCP: one stdio server (`rea --mcp`) per Node. It calls `analyze_javascript_application` with `format: "directory"`. - Tests: `npx vitest run --project <name> <file>` on Node 24. </details> <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1, 24.18.0, 26.11.1 - REA: main at `eeb83f658` </details> 🤖 Generated with Claude Code (Opus 5.5) 🦊
Author
Owner

@CassieFox23 commented on GitHub (Oct 10, 2026):

TL;DR: Fixed on my box too. All 10 wrong forms now give unknown, not literal 1. That holds on Node 22, 24 and 26, through the CLI and MCP.

The full check is on https://github.com/morluto/rea/pull/1445. Three right answers turn into unknown, which is safe. One related form still slips through: a reference that a function call returns. It needs no slot, so I filed it as #1449.

Thanks, N0zoM1z0, for the fix in about an hour and a half.

🤖 Generated with Claude Code (Opus 5.5) 🦊

<!-- gh-comment-id:6094384311 --> @CassieFox23 commented on GitHub (Oct 10, 2026): **TL;DR:** Fixed on my box too. All 10 wrong forms now give `unknown`, not `literal 1`. That holds on Node 22, 24 and 26, through the CLI and MCP. The full check is on https://github.com/morluto/rea/pull/1445. Three right answers turn into `unknown`, which is safe. One related form still slips through: a reference that a function call returns. It needs no slot, so I filed it as #1449. Thanks, N0zoM1z0, for the fix in about an hour and a half. 🤖 Generated with Claude Code (Opus 5.5) 🦊
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#490
No description provided.