Skip to content

RHLGA-1 G2b: workspace test suite green; ruchy run agrees with compiled output - #246

Open
noahgift wants to merge 107 commits into
mainfrom
RHLGA-G2b-test-suite
Open

noahgift wants to merge 107 commits into
mainfrom
RHLGA-G2b-test-suite

Conversation

@noahgift

Copy link
Copy Markdown
Contributor

RHLGA-1 G2b: workspace test suite, and ruchy run agrees with compiled output

Part of epic #238 (ruchy 5.0.0). This branch fixes the workspace test failures from the G2 intel run. Most of the fixes make the interpreter (ruchy run) and the compiled binary (ruchy compile) produce the same output. Each ticket has a row in docs/roadmaps/roadmap.yaml and user-visible changes are listed in the CHANGELOG under "Fixed — G2 part 2 (RHLGA-1)".

Tickets fixed: ARRCLONE-1 ARRREPEAT-1 ARRVECARG-1 CLOSUREUNIT-1 COUNTITER-1 DICTIDX-1 DICTTYPE-1 ENUMFIELDKW-1 EPRINTLN-1 FLOATDISP-1 FMTEXTRA-1 FMTSPEC-1 FMTTEMPLATE-1 FORLEAK-1 FORMATFN-1 FORMATVAL-1 IDXASSIGN-1 IDXCOMPOUND-1 IDXEVAL1-1 IDXPUSHWB-1 INTLEN-1 LENRET-1 LONELIT-1 MAINUNIT-1 NESTARRVEC-1 NESTASSIGN-1 NESTPUSHLIT-1 PRINTLNFMT-1 PRINTPARAM-1 PRINTSTR-1 PRINTSTRSCOPE-1 RETLEN-1 STRRECV-1 TMPLEAK-1 UNITRET-1

Filed, not fixed: DEADDISPATCH-1 (backlog). The duplicate method dispatch in eval_string.rs and eval_generic_method is never reached.

Gate (re-run by the orchestrator at fb58f64)

  • cargo fmt --check: 0. cargo clippy --all-targets -D warnings: 0.
  • The 14 G2b suites pass (g2b_transfix_1..6, g2b_runfix_1..6, idxassign_1_place_targets, g2b_t2b_misc).
  • --lib: 20890 passed, 0 failed.
  • Full workspace nextest on the intel host at fb58f64: 28119 tests run, 28069 passed, 48 failed, 2 timed out. None of these is new compared with the three earlier baselines (8b483a0, 316b743, 02cab56). All of them fail because of the host environment: matrix_*_native, lang_comp_suite, cli_unify_003 property timeouts, renacer, pgo. They are G2c scope.

Quorum (sonnet-5 + agy gemini-3.1-pro-high + haiku-4-5; author opus-5.5)

Round Diff Result What happened
r1 8b483a0..316b743 sonnet PASS_WITH_NITS, haiku PASS, sonnet-2 FAIL (agy 429, marked degraded: same-family) 4 nits fixed. The sonnet-2 major was fixed as LONELIT-1.
r2 316b743..2c1296f sonnet FAIL, haiku PASS, agy PASS The major was fixed as STRRECV-1.
r3 2c1296f..33b55af sonnet FAIL (a single confirmation seat) Vec and Option receivers were fixed in b1f3a01.
r4 2c1296f..93efa28 sonnet FAIL, haiku PASS, agy FAIL vec![..] is now a known list, fixed in fb58f64.
r5 2c1296f..fb58f64 sonnet PASS, haiku PASS, agy PASS (agy tree witness verified) brief e21e7b3d29b43fb7ba9f9a38f4870997c5bfcdacbaae765380280a3e82967c2b, diff 635757a09e34cf065d21cb0ae8441d05aa3d09b60d16c81765f17a11b25553bb

Session and conversation ids for every seat are in the receipt, /mnt/nvme-raid0/tmp/g2b-r5/receipt-combined.json. The head merges main (#223), which changed only CLAUDE.md and the roadmap. The roadmap conflict was resolved row by row.

🤖 Generated with Claude Code

noahgift and others added 30 commits September 24, 2026 02:02
- ruchy_binary() hard-coded $CARGO_MANIFEST_DIR/target/debug/ruchy, which does not
  exist when CARGO_TARGET_DIR points elsewhere (NotFound / EOF on 14 tests)
- now env!("CARGO_BIN_EXE_ruchy"); 14 passed, 2 ignored (pre-existing)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-094, Issue #137)

A `a::b::c(..)` call parses as Call{FieldAccess} (`obj.m(..)` is a MethodCall), so
the callee of a Call that is a lowercase-rooted FieldAccess chain is rendered as a
Rust path. self and std roots keep their existing handling. Fixes 6 tests in
tests/parser_094_path_separator.rs and tests/parser_094_property_tests.rs.
Differential: mod helpers { pub fun double } + helpers::double(4): ruchy run = rustc binary = 8.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-001, SPEC 7.11)

self_receiver_tokens turned every bare `self` into `&self` (TRANSPILER-METHOD-SELF-001),
contradicting SPECIFICATION 7.11 (`fun transfer(self)` moves). Now: &self/&mut self kept,
`mut self` kept, bare self -> self, and a bare self whose body mutates it -> &mut self
(an immutable owned receiver could not compile). Fixes 4 tests in
tests/quality_001_self_receiver.rs; backend::transpiler lib tests 3233/3233.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
returns_vec only saw a trailing list literal; `let mut arr = []; arr.push(..); arr`
fell through to the numeric default -> i32. The Block tail check (block_tail_is_vec) now
also traces a trailing identifier to its let-bound list. Fixes 2 tests in
tests/issue_113_transpiler_type_inference.rs; the transpiled make_array compiles with rustc.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…(description)] (BUG-033)

format_regular_attribute_impl copied attribute args verbatim; Rust's #[test] takes none.
The description is kept as a doc comment. Fixes 4 tests in
tests/bug_033_test_attribute_invalid_rust.rs (compile + property-tests paths now build).

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…lling

- root cause: default features (batteries-included) do not include notebook, so
  handle_serve_command is the stub; server-spawning tests could never connect
- server tests cfg(feature = "notebook"); new default-build test asserts the stub
  names --features notebook and prints the ENVIRONMENT reason
- serve validates the directory in every build (validate_serve_directory)
- fixed 500 ms sleeps replaced by wait_for_port() TCP readiness polling
- with --features notebook: http_server_cli 13/13 pass; http_watch_mode
  test_serve_with_watch_starts_successfully still fails (server exits under --watch)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… RFC 1321

- root cause: 73569f2 (dependency-count chore) swapped the md5 crate for sha2,
  silently changing compute_hash from 32-hex MD5 to 64-hex SHA-256; docstring,
  STDLIB-005 tests and ticket all specify MD5
- src/stdlib/hash.rs: md5_hex/md5_digest, RFC 1321 A.5 suite + padding
  boundaries + proptest (32 lower-hex); no new crate dependency
- METHODS-1 lib tests updated from SHA-256 to MD5 digests

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- readme_validation: README title is <h1 align=center>Ruchy</h1> and the usage
  section is '## Core Commands'; test accepts those spellings (sections exist)
- dogfood_gates_declared: scripts/release-policy.sh landed (PMAT-135); pending
  allowlist emptied as the test itself instructs
- tooling_002: 0.6 is a minimum (traces from 0.6.2 read fine on 0.10.2; all
  other renacer tests pass), parsed as a (major, minor) floor, not a substring pin

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… threshold; version 5.0.x

- contracts check --min-coverage 80 on a contract-free file reports 0.0% and
  exits 1 (correct gate behaviour); test asserted success
- version test pinned 5.0.0-alpha; crate is 5.0.0-beta.2 -> assert 'ruchy 5.0.'

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… test enabled

- parser_defect_010: the default-method body was f"...", x) (a stray ')' after an
  f-string); the parser rightly rejects it. Body is now the spec's interpolated form
  f"(Read more from {self.summarize_author()}...)".
- sqlite_163: 'fun next(self): Option<Self.Item>' is not Ruchy syntax (SPECIFICATION
  uses '-> Option<Self::Response>'); now '-> Option<Self::Item>'.
- test_parser_010_transpile un-ignored: trait associated types already transpile.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… yet implemented'

- handle_complex_command sends Commands::Prove to dispatch_analysis (it was only
  listed there, so it fell through to dispatch_tooling's wildcard and exited 0).
- dispatch_tooling's wildcard arm (eprintln + Ok) is gone: the match names every
  Commands variant, so an unrouted new variant no longer compiles. Variants main
  or dispatch_analysis own return an internal routing error.
- tests/g2b_s2_cli.rs walks every verb in `ruchy --help` (recursing into command
  groups) on a trivial input; none may exit 0 printing the stub line.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
….f)(..)

The parser marks a FieldAccess written with `::` (Expr::is_path_access, attribute
"::", not spellable in source); the interpreter still sees a plain FieldAccess.
The transpiler renders a marked chain as a Rust path and wraps an unmarked
FieldAccess callee in parens, replacing the G2B-T1 lowercase-root heuristic.
tests/g2b_t2a_receiver_and_paths.rs: module path, std::cmp::max, Point::new,
closure field (rustc-run); hand mutation is_path_access=false -> 2 RED.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
test_bug_syntax_001 demanded an 'Attributes are not supported' error, the
pre-5.0 behaviour that PARSER-ATTR-001 removed. ruchy-5.0-sovereign-platform.md
section 3 defines attribute ::= '#[' IDENT ( '(' arg_list ')' )? ']', so the test
now asserts -e accepts the struct and transpile carries #[derive(Debug..)] through.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…fn main

async fun main transpiled to async fn main (rustc E0752) and a sync main using
await emitted .await in a non-async fn (E0728). ruchy compile invokes rustc with
no tokio, so main's body now runs as an async move block under a std-only,
thread-parking __ruchy_block_on (no unsafe); a non-unit tail is bound and printed
outside the println! macro so the awaited body stays rustfmt-formatted.
Detection is exact: the emitted body contains the await keyword token.
tests/g2b_t2b_misc.rs: sync-main-await, async-main, printed-tail, compiled and run.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- infra plan/apply/drift/destroy require a regular file (verify_regular_file).
  `ruchy infra destroy /nonexistent` exited 0 because /nonexistent is a real
  directory on this host; it now exits 1 with "... is not a file".
- CLI tests with a path missing on every host and with a directory.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ored

- cargo package --list refuses any dirty tree; the test now fails with
  "working tree is dirty: ..." plus the git status lines when that is the
  cause, instead of only cargo's raw error. No --allow-dirty.
- Root .gitignore covers src/.pmat/, .pmat/*.db, .pmat/jidoka.jsonl,
  .pmat/clippy-receipt, .pmat/dead-code-cache-*.json (previously ignored only by
  pmat's own untracked nested .gitignore, absent in a fresh clone); a test
  checks them against the root .gitignore in a scratch repo.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…reated

Root cause: FileWatcher::new failed with EMFILE ("Too many open files") when
the per-user inotify instance limit (fs.inotify.max_user_instances=128 here) was
exhausted by other processes, and run_watch_mode propagated it with `?`, so the
server exited ~immediately (reproduced: 60 extra inotify holders -> exit 1).
- open_watcher warns on stderr (cause + remedy) and serve falls back to
  run_normal_mode; after the fix the same reproduction keeps serving.
- The watcher is created once per session, not once per restart.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rving forever

- handle_serve_command = ServeRequest + serve_until(request, shutdown_on_signal)
- serve_until takes the shutdown channel installer; tests pass a pre-sent channel
- run_normal_mode returns the server's own error (e.g. port in use) instead of waiting forever
- new tests: real GET then shutdown, port-in-use error, watch mode stops
- pid-file test uses a tempdir, not /tmp/pid (PidFile::new kills the recorded pid)
- serve_handler tests under --features notebook: 17 passed in 0.15s (was: hung >60s)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…call

- create_field_access spans receiver.start..field-name end (was 0..0), incl. tuple index t.0
- try_handle_postfix_call's same-line check now sees the real end; (h.f)(3) no longer splits into h.f; 3
- tests: tests/g2b_s3_misc.rs test_parencall_1_* (committed with G2BS8); hand-mutation span->0..0 fails 5/6

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- module body parses a pub item via parse_pub_token (pub struct/enum/mod/use/fun, pub(crate))
- transpile_module_declaration emits nested modules as items: pub mod b { .. }, not mod b { { .. } }
- tests/g2b_s3_misc.rs: PARENCALL-1 + NESTEDMOD-1 differential (interpreter vs rustc); 10/10
- hand-mutation dropping pub on nested modules fails nestedmod 01/04 (E0603)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd format! substitute like the macro

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…dded on main by #243)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oot; router tests exercise the real routes

The proptest compiled random strings with the default output, so an empty or whitespace input produced a.out in the working directory. It and two tests writing fixed /tmp paths now compile into their own temp dirs. The six handle_advanced_command tests had passed only through the removed catch-all: parse, transpile, check and compile now go through handle_command_dispatch; publish and repl assert the router refuses a main-routed verb.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… a restart awaits the aborted server

- run_watch_mode polls the server task like normal mode (poll_server) and
  returns its outcome when it ends on its own; a file change aborts the task
  and awaits it before rebinding (serve_until_change, stopped_on_change,
  spawn_server)
- test_serve_until_watch_mode_reports_a_port_in_use (RED: hung past 20 s)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…zed; G2BFA2: &mut self sees nested/indexed field writes, field ++/--, mutating std methods on fields and mutating sibling calls (fixpoint)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…r outside callee position

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…A5: an awaiting main keeps its declared return type; block_on park/wake is exercised

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…p and the crate root; the CLI verb walk is hermetic

- g2b_t3_misc, g2b_t2a_receiver_and_paths: scratch_dir returns a TempDir
- quality_001_self_receiver: rustc_lib compiles in a TempDir with --out-dir
  (no fixed /tmp paths, no .rlib in the crate root)
- g2b_s2_cli: every leaf verb's --help must exit 0 without the stub line; only
  offline-safe verbs (parse, check, transpile, ast, lint, fmt, score, tier,
  provability, prove, explain) run for real; a timeout fails

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…(3) from source; is_path_access no longer steals Expr::new's docs

- g2b_t2a t5_02: nested pub mod parses and transpiles; only std::cmp keeps it
  transpiler-only
- g2b_t2a t5_04: the program calls (h.f)(3) directly; retarget_probe removed
- ast.rs: is_path_access moved above Expr::new's doc block

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
noahgift and others added 27 commits September 24, 2026 11:44
…omes a Vec

Adds tests/g2b_transfix_3.rs (RED for ARRVECARG-1, MAINUNIT-1, DICTTYPE-1); array literals passed to a parameter annotated Vec<T> get .to_vec().

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…as ()

Signature collection records user functions with no declared return type and a void body; has_non_unit_last_expr treats a call to one as unit.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e type

The DICTIDX-1 list-valued dict path now covers any dict whose values share one typed class (lists, ints, floats, bools); a binding to one is recorded so d["k"] = v inserts the value unconverted.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- fmt_spec: {} of a float uses display_float (format!("{f}")): 3.0 -> 3,
  1e21 -> 1000000000000000000000, -0.0 -> -0; {:?} keeps Rust Debug.
- A bare println(x) of a float keeps Debug text (3.0, 1e21), as the
  transpiler emits {:?}; f-string {x} uses Display like format!("{}").
- tests/g2b_runfix_3.rs: 7 FLOATDISP-1 tests against rustc references and
  the ruchy-compiled binary.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- prepare_compilation returns the binary path as a tempfile::TempPath, so
  the compiled ruchy_temp_bin_* is removed when it drops, including an
  early return through ?.
- compile_for_property_testing returns the TempPath; property-tests, fuzz
  and notebook drop it instead of calling remove_file on the success path.
- tests/g2b_runfix_3.rs: 4 TMPLEAK-1 tests run failing commands with a
  fresh TMPDIR and assert no ruchy_temp_bin_ file remains.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…XTRA, PRINTSTRSCOPE)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…rint with {:?}

- for-loop variables, closure parameters and match/if-let/while-let
  pattern bindings drop the outer PRINTSTR-1 string record of the name
  they re-bind while their scope is transpiled; the prior variable_types
  entries are restored after (with_string_scope). A String-annotated
  closure parameter is recorded as a string.
- replace/repeat count as string results only on a string receiver;
  to_string and the case/trim methods print as text on every receiver
  they exist on and are unchanged.
- tests/g2b_transfix_4.rs: 7 end-to-end tests (6 RED before the fix).
  Two compare compiled output only: ruchy run leaks a for-loop variable
  into the enclosing scope and has no array repeat (interpreter defects).

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Compound assignment, nested-index assignment, field assignment through an
indexed chain and in-place array methods on an element freeze the place
first: every index expression is evaluated once and replaced by its value's
literal, so the read and the write-back run no index expression again.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The interpreter used a non-literal first argument with two or more
arguments as the template (println(s, 1) printed 1); the compiled binary
joins every argument with spaces (prints {} 1). Only a string-literal first
argument is a template now.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
render records which positional argument each {} or {N} field uses and
reports the first one no field references, following rustc's rule; it used
to ignore extra arguments.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…(found by G2b fix workers)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- eval_builtin_comprehensive test_print_no_newline pinned print("A") as "A";
  PRINTSTR-1/FMTSPEC-1 print the text, as the compiled print! does
- opt_022 hidden_class_transition pinned {} of 10.0 as 10.0; FLOATDISP-1 prints 10
- transpiler_deadlock_fix properties generated keyword names (fun); assume the
  lexer reads the name as one identifier
- cli_unify_003 prop_030/031 (10K spawns) ran 113-119s against a 120s kill;
  the property override now also matches property-test binaries

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…are vec!

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s not printed

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The for loop assigned its variable with set_variable, which overwrote a
same-named outer binding, and ignored the parsed pattern, so for (k, v)
bound k to the whole tuple. Each iteration now pushes a scope, binds the
pattern (try_pattern_match) there, runs the body and pops the scope.
if-let, while-let and match arms did not leak; a regression test pins that.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
eval_array_repeat clones the elements n times; a negative or
non-integer count is a runtime error. Dispatched with the other
one-argument array methods in eval_array.rs.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ral-template rule

format_sink_for now routes any identifier bound to a __builtin_*__
format marker (println, let g = format, a parameter holding one) through
eval_format_call, the single FMTTEMPLATE-1 implementation, so only a
string-literal first argument is a template. The value-only path
(eval_builtin_format) keeps its heuristic for callees that are not
identifiers, where no argument expressions exist.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…kers)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… with Display

- A named function's parameters whose emitted (inferred) type is String/&str
  are recorded as strings, so println(s) uses {} (track_emitted_string_params).
- A closure bound by let takes its untyped parameters' call-site types
  (call_site_arg_types) for the same choice (with_closure_param_scope).
- Parameters of unknown or non-string type keep {:?}.
- tests/g2b_transfix_6.rs: 7 end-to-end tests (compile, run, ruchy run).

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…terals is a vec! too

- transpile_let/transpile_let_with_type record a binding whose inner list
  literals were emitted as vec! (the NESTARRVEC-1 rewrite) in
  inner_vec_lists; any other binding of the name clears it, as does a
  new function.
- transpile_method_call emits the element argument of push/insert on such
  a binding as vec![..], so m[0].push(2); m.push([3]) compiles.
- tests/g2b_transfix_6.rs: 4 end-to-end tests (compile, run, ruchy run).

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Arrays: clone, to_vec, to_owned (eval_array nullary dispatch)
- Tuples: clone, to_owned (eval_method::eval_generic_method)
- Strings: clone, to_owned (eval_string_methods zero-arg dispatch)
- Plain objects: clone (eval_method_dispatch::eval_plain_object_method)
- A clone is independent of its source; tests/g2b_runfix_6.rs (7 tests)

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…batim, as compiled code does

Found by the G2b final quorum (second sonnet seat). format(lit) stays a template.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ariables over string items print as text

Found by the G2b round-2 quorum (sonnet seat). Trailing for/while/+= in main are unit; strings gain split_whitespace in the interpreter.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…n list-typed params and bindings

Found by the G2b round-3 confirmation seat (sonnet): an untracked Vec/Option receiver got {} and failed rustc. Vec records are cleared per function.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ates vec![x; n]

Found by the G2b round-4 quorum (sonnet and agy seats).

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Roadmap resolved by row: branch rows kept, PMAT-140 appended from main.

Pmat-Ticket: RHLGA-1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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