Skip to content

feat(portal): side-by-side hypothesis map on the case dashboard (26 H.2)#171

Merged
bryanmatthewsimonson merged 1 commit into
claude/phase-26-h1-hypothesis-mapfrom
claude/phase-26-h2-hypothesis-render
Jul 18, 2026
Merged

feat(portal): side-by-side hypothesis map on the case dashboard (26 H.2)#171
bryanmatthewsimonson merged 1 commit into
claude/phase-26-h1-hypothesis-mapfrom
claude/phase-26-h2-hypothesis-render

Conversation

@bryanmatthewsimonson

Copy link
Copy Markdown
Owner

Summary

Phase-26 slice H.2 (HYPOTHESIS_MAP_DESIGN.md §4). Stacked on #170 (which stacks on #169) — merge in order; this PR retargets automatically.

What renders

A new Hypotheses block on the portal case dashboard, mounted in the shared-assembly IIFE (same data envelope, no second collection pass). Equal-width side-by-side cards — the layout deliberately encodes nothing — each with:

  • the hypothesis statement + brief-position provenance (holders as followable source links, from brief/llm:/nostr: badges),
  • default-open Supporting evidence (N) / Undermining evidence (N) sections — the section's own size is the only count that ever sits beside a role,
  • claim rows with source links, grounded quotes, crux badges (claim attached to 2+ hypotheses), and verdict chain-head chips as context,
  • disclosure lines for dangling edges and unlabeled brief positions,
  • visible copy: "competing answers, not a ranking… X-Ray maps them side by side; it does not pick one… a verdict chip does not weight the edge."

Self-removes when the case has no hypotheses (no flag needed — assembly is local and free; only H.4's LLM suggestion will be gated).

Guard tests (§6.2)

buildHypothesisBlockModel is pure and node-testable; the DOM layer projects it 1:1. The guard walks every rendered string: no comparison phrasing or judgment number anywhere (negative half), required disclaimers present (positive half), per-card cross-hypothesis reference check, honest degradation for unresolved claims/holders.

Tests: 1,758 green (6 new) · build clean · lint 0 errors.

Note for the smoke walk

The visual layout (grid cards, badge placement) needs a human browser pass — suggest adding a Phase-26 section to SMOKE_TEST.md once H.3's authoring affordance lands, so the walk covers create→attach→render in one pass.

Next

H.3 (manual attach claim→hypothesis affordance) follows.

🤖 Generated with Claude Code

Phase 26 slice H.2 (docs/HYPOTHESIS_MAP_DESIGN.md §4):

- src/portal/hypothesis-block.js — renderHypothesesBlock over the
  shared case-view data envelope. A pure, node-testable
  buildHypothesisBlockModel derives every user-facing string; the DOM
  layer projects it 1:1 (el()/textContent, no innerHTML). Hypotheses
  render as equal-width side-by-side cards (grid; layout encodes
  nothing), each with statement, brief holders as followable source
  links, and default-open Supporting/Undermining sections whose
  headings carry ONLY their own size. Crux badges on claims attached
  to more than one hypothesis; verdict chain-head chips as context
  with the does-not-weight note; llm/nostr/seed provenance badges;
  dangling edges and unlabeled brief positions disclosed. Self-removes
  when the case has no map.
- case-view.js mounts the block in the shared-assembly IIFE between
  the graph/synthesis blocks and the timeline.
- tests/hypothesis-block.test.mjs — the §6.2 no-scoreboard guard over
  the model's strings (negative: no comparison phrasing or judgment
  number anywhere; positive: the maps-not-picks / not-a-ranking /
  does-not-weight disclaimers present — the corpus-publish pairing),
  cross-hypothesis reference check per card, honest degradation for
  unresolved claims/holders.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant