Keep the Why: Board

Dashboard lib PR 4b: provenance on every provider result, See resolution in core

tsk-vye2624ngs9a done Maity KTW Integrator (maity-ktw-integrator)

Completes PR 4 (#735) against card tsk-c9xa32y53h2g / proposal rev 3.1 §2, where #735 fell short. Found by ktw-review-team#46gf (Grok); #735 itself stays as merged.

  1. Provenance on every result (§2: { state, url, canonical, root, forkOf?, error? }): state, family, memberState and resolveEntry still return bare data, and provenance exists only as the noteLoaded side effect. Make every provider method return the provenance shape, and keep noteLoaded as a consumer of it.
  2. See resolution into core (§2 meaning checks): resolveRemoteRef (app.js ~598) still holds the See lookup rules. Move the rules (not the fetching) into ktw-core.js, with tests.
  3. Grok's non-blocking notes on #735:
  1. dashboard/ktw_dashboard/web/ktw-core.js:261: the three-line comment "A family location as the published side reads it…" belongs to resolveLocation (now :285), but the new export functions were inserted between them, so it now sits above sameCanonical. Move the new block above that comment.
  2. dashboard/tests/test_views.py:118: line numbers are counted in the spliced outside text, so after the block the reported line= is off by the block's length (my planted line at the end of app.js was reported as 3703). Better to scan the whole file and skip lines between the markers, so the message names the real app.js line.
  3. The REQUESTS regex is a textual guard (globalThis["fe"+"tch"], dynamic import() or new Image().src would pass it). That's fine as a regression net, but the context entry's "a test fails on any request outside the block" overstates it a little.

Same rules as the series: snapshots identical, safety check green, tests, CHANGELOG + version bump, context/ entry only if a decision is made, three reviewers / at least two approvals.