Parents: #495, #473 Original heap-snapshot implementation: #403 Related StringData boundary fixes: #672, #699, #701, #702
The Chrome/V8 heap-snapshot serializer currently interns StringCell.bytes directly as each string node name. That slice is a physical 1-byte-per-code-unit image for flat Latin-1 StringData, not canonical WTF-8. A reachable non-ASCII flat string can therefore produce invalid JSON or a semantically incorrect V8 strings table.
Scope
- Canonicalize string-node names through the semantic StringData boundary before V8 string-table interning.
- Preserve zero-copy borrowing for canonical/ASCII cells and bound temporary conversion lifetime to one snapshot transaction.
- Preserve graph identities, node/edge ordering, shallow/external sizes, retained-size accounting, class tables, and stable IDs.
- Keep the GCDebugging and heap-profile formats unchanged where they intentionally expose only the generic String class.
- Propagate conversion OOM fail-atomically with no partial output or leaked temporary storage.
- Add a reachable non-ASCII flat-Latin-1 witness that parses the complete V8 JSON and verifies semantic string-table content.
- Verify Debug, forced-flat-Latin-1, ReleaseSafe, TSan, private ABI audits/fixtures, and the full unit suite.
- Record applicable Test262 impact; this private profiler ABI has no Test262 subtree.
Excluded: Promise/microtask/Worker job scheduling, stack/queue work, and shared Map/Set iterator cursor work (#643).