Lazily resolve cross-step content-hash markers (@same) in the frontend
## Problem / Motivation
The Workflow Modeler now lazily expands replay-data dedup markers in the frontend (#3589096): `@prev` (whole step equals previous) and `@ref` (a content entity repeated under another token name within the same step). ECA is adding a third, content-equality marker, `@same` (project/eca#3590333), which deduplicates **fully-normalized sub-trees by content hash across steps and at any nesting level** — collapsing entities that are carried unchanged through multiple steps and identical nested referenced entities. This is a major payload reduction for large models (see project/eca#3590324).
Unlike `@ref` (which references a sibling token key in the same step), `@same` references its first occurrence by **(stepIndex, path)**, because the identical sub-tree may live in an earlier step and/or at a nested path.
## Proposed resolution
Extend the frontend lazy expander to resolve `@same` at display time, on a non-mutating copy, alongside the existing `@ref`/`@prev` handling:
- When rendering a step, a node carrying `@same: { step, path }` resolves its `data` from the already-expanded sub-tree at that (step, path).
- Resolution order matters: `@prev` (reuse previous expanded step) and `@ref` (sibling within step) are resolved first as today; `@same` resolves against the expanded data of the referenced earlier step/path. Ensure referenced steps are expanded before (or memoized for) the step being displayed.
- Operate on a **copy** — never mutate the stored `replayData`, so the JSON export keeps the compact markers (same rule that #3589096 established).
- Confirm the JSON export still contains unexpanded `@same`/`@ref`/`@prev` markers after viewing any step.
## Remaining tasks
- [ ] Resolve `@same` (by step+path) in the frontend expander, reusing the structures from #3589096.
- [ ] Guarantee referenced (earlier) steps/paths are expanded/memoized when resolving `@same`.
- [ ] Lazy, render-time only, on a non-mutating copy.
- [ ] Confirm export keeps compact markers after viewing steps.
- [ ] Rebuild the bundle.
- [ ] Unit tests: cross-step `@same` resolution, nested `@same`, and export-compactness after view.
- [ ] Coordinate the dependency/version bump with the ECA companion issue.
## Related
- Parent: project/eca#3590324
- Companion (ECA emits `@same`): project/eca#3590333
- Builds on: #3589096 (frontend `@ref`/`@prev` lazy expander), modeler_api#3588498 (marker-bearing contract)
issue