fix(javascript)!: stop copying literals into semantic metadata (#1407)

Commit literal values with canonical JSON SHA-256 in semantic role keys
and use a type label for strings. Preserve complete values, provenance and
literal queries while avoiding two payload copies in each string node.

Verify real compiled CLI/default stdio MCP, typed union seeds, empty
strings and trace continuation with a large source-owned fixture.

Refs #723

BREAKING CHANGE: Newly produced semantic literal node IDs use
value-sha256 role keys, and string labels read "string literal". Read exact
values from properties.value and obtain node IDs from the selected parent
graph. Previously stored Evidence and its original IDs remain valid.
This commit is contained in:
Ysopwnable
2026-10-10 11:00:53 +08:00
committed by GitHub
parent 1f0f728c63
commit 8550913cda
3 changed files with 171 additions and 2 deletions
+12
View File
@@ -90,6 +90,18 @@ keep the result ambiguous. Runtime Evidence can later corroborate an exact
mapped candidate, but structural reachability, semantic influence, runtime
observation, and causal proof remain separate claims.
Semantic literal nodes keep their complete value in `properties.value`; literal
queries match that field. String labels read `string literal` rather than
repeating the payload. A literal's `identity.role_key` commits its canonical
JSON value as `value-sha256:<digest>`, together with its binding and property
role. This keeps large values out of identity and display metadata without
truncating their Evidence.
New analyses therefore produce different literal node IDs from the earlier
payload-bearing role keys. Use IDs returned by the selected parent graph and
read literal values from `properties.value`, rather than decoding role keys or
labels. Previously stored graphs and their original IDs remain valid inputs.
## Version comparison
REA pairs entities only when a tier produces one unique candidate on each side.