Repository navigation
string() coercion on list-type value HARD-ABORTS interpreter (exit 1, uncontainable); blocks --export-root #887
Copy link
Copy link
Open
Labels
priority/p1High priority - address soonHigh priority - address soonscope/medium1-2 weeks, requires design work1-2 weeks, requires design worktype/bugDefect in existing functionality, needs fixDefect in existing functionality, needs fixworkstream/runtime-coreRuntime architecture, memory, lifecycle, and global contextRuntime architecture, memory, lifecycle, and global context
Description
Rationale
string() coercion on a list-type value HARD-ABORTS the interpreter (exit 1), killing the script THROUGH an enclosing try (uncontainable). Enumerating the list is fine; only string() dies. This blocks any generic walker/serializer that coerces values (including the planned --export-root tool). Impact is severe: crash cannot be caught, no fallback available.
Current State
Verified reproduction (2026-08-11, pristine Virgin.root):
string(system.extensions.odbc.data.dll.macCarbon.rFork)
string(system.extensions.odbc.data.dll.macCarbon.rFork) -- regex sibling also crashes
Both are type list with 3 reco children:
- Enumerating the list: works fine
- string() coercion: HARD-ABORT (exit 1, kills script, uncontainable by try/else)
Impact:
- Generic value walker/serializer crashes on
listvalues - Planned --export-root tool will hit this on Virgin.root paths
- try/else offers NO protection (hard abort)
- No fallback coercion available
Scope:
- At least 2 confirmed
listvalues in Virgin.root - May be more (census incomplete at time of report)
Desired Outcome
- Fix string() coercion to handle
listtype gracefully - Return a sensible representation (e.g., string of list length, or JSON array representation)
- Make the operation catchable by try/else (convert hard-abort to exception)
- Add regression test: string() on list values must not crash
Recommendation
- Trace the crash: LLDB backtrace on string(list_value)
- Identify root cause: Type dispatch in string coercion, missing list handler
- Implement handler: Return appropriate string representation (length, array notation, etc.)
- Test: Verify try/else can catch any exceptions (no hard abort)
Exit Criteria
- string(list_value) does not crash
- Returns sensible string representation
- Exceptions are catchable by try/else
- Regression test added: string() on list values
- Planned --export-root tool can handle
listvalues
Related Context
- Found by: ODB census 2026-08-11
- Related issues: system.macintosh iterative walk SEGFAULTS (exit 139); deterministic reproducer for #828/#857 dbgeteof null-deref family #864 (different crash), ROOT_BUILD_FROM_SOURCE_PLAN.md (exporter must special-case list/reco until fixed)
- Code: Coercion verb string(), type dispatch, list handler
- Data: system.extensions.odbc.data.dll.macCarbon.rFork (and sibling), both type
list - Impact: Blocks generic serialization, --export-root tool, census tools
Distinct from Other Issues
- NOT system.macintosh iterative walk SEGFAULTS (exit 139); deterministic reproducer for #828/#857 dbgeteof null-deref family #864 (dbgeteof null-deref) — this is type-dispatch crash, different mechanism
- Data is intact (enumeration works); issue is in coercion logic
Metadata
Metadata
Assignees
Labels
priority/p1High priority - address soonHigh priority - address soonscope/medium1-2 weeks, requires design work1-2 weeks, requires design worktype/bugDefect in existing functionality, needs fixDefect in existing functionality, needs fixworkstream/runtime-coreRuntime architecture, memory, lifecycle, and global contextRuntime architecture, memory, lifecycle, and global context
Activity
feat(odb): --diff-roots value-level equality walker (root-build Step …