Feature/product platform foundation v0.62 #1

Merged
robbond merged 683 commits from feature/product-platform-foundation-v0.62 into feature/emergent-unknowns-v0.5 2026-09-09 07:58:20 +01:00
Showing only changes of commit b9a54589f0 - Show all commits
+57
View File
@@ -1574,6 +1574,63 @@ With Contribution persistence demonstrated working, the remaining unresolved bou
**Selected next boundary: Focused → global Finding integration / Previous Learning presentation.**
### PHASE 6 — UNCLEAR + INVESTIGATING CUE ON OPEN QUESTION CARDS
#### What was done
Added an amber **INVESTIGATING** cue to the `ThreadContributionsBadge` component (line ~583-590 of `reasoning-workspace.jsx`). The cue renders above the "📝 N learned contribution" detail element whenever the node has one or more matching contributions identified by `c.targetNodeId === nodeId`.
The cue is also visible on Done-for-now cards (same ThreadContributionsBadge component).
UNCLEAR (epistemic state tag) and INVESTIGATING (activity indicator) are **independent** — both render on the same card simultaneously. One does not suppress or replace the other.
#### Deterministic tests added (11 new)
File: `tests/open-questions-vs-assumptions.test.jsx` — describe block "Focused investigation history cue"
| Test | What it verifies |
|------|------------------|
| investigated question matches contributions by targetNodeId | identity rule correctness |
| uninvestigated question gets zero threadContribs | no false-positive cue |
| unrelated contributions do not contaminate another node | isolation |
| 1+ contributions → cue shows | visibility logic |
| UNCLEAR and INVESTIGATING coexist on same node | epistemic vs activity independence |
| Done-for-now retains cue when contributions exist | persistent indicator state |
| identity rule distinguishes contributed from uninvestigated | discrimination test |
| multiple contributions on same node still show single cue | idempotent cue, not count-dependent |
| null/undefined contributions → no cue | guard against falsy |
| empty array → no cue | boundary value |
| mismatched targetNodeId → no match | selector correctness |
All 57 tests pass.
#### Live Playwright verification (2026-08-28)
Canonical scenario: e-commerce checkout abandonment, `targetNode = n58lwnx`.
State: 1 contribution targeting n58lwnx, 3 findings.
**Observed on first Open Question card ("Relative contribution..."):**
- `INVESTIGATING` (amber text) visible above the card content
- `📝 1 learned contribution` badge visible below INVESTIGATING
- Both UNCLEAR and INVESTIGATING present simultaneously — coexist, no suppression
**Observed on other two Open Question cards:**
- No INVESTIGATING cue — correct (zero matching contributions by targetNodeId)
#### What is OUT OF SCOPE for this phase
- The cue does NOT render in the initial reflection surface (plain buttons). It only renders inside `OpenQuestionsPanel` → `ThreadContributionsBadge`. This is by design; the panel appears during focused workspace operation, not the initial scenario entry.
- No CSS animation, transition, or expansion behavior — just a static indicator.
- Does NOT affect which cards are clickable/investigable (UNCLEAR handles that).
#### Remaining open boundaries (unchanged)
1. **Follow-up selected-question duplication** (OPEN UI ISSUE) — proposed follow-up appears simultaneously as ACTIVE QUESTION and STILL-AVAILABLE FOLLOW-UP; proposal state vs active-question state disconnect
2. **Focused → global ownership/integration** (STILL OPEN) — how accumulated focused Findings map into the global SituationGraph reasoning layer
3. **Current Understanding incorporating focused learning** (STILL OPEN) — narrative understanding should be reconstructed from globally eligible Findings + graph state, not directly from latest focused result
**Selected next boundary: Focused → global Finding integration / Previous Learning presentation.**
**Why this is now the strongest next boundary:**
- The Contribution persistence blocker that prevented assessing previous-learning completeness has been removed. If Contributions persist correctly to canonical storage and survive reload, then the Previous Learning panel should be able to render them without a persistence defect obscuring the UI question.
- This is a product-semantic/user-facing progression (not internal cleanup). It directly tests whether the findings domain model established in the handoff can be exercised end-to-end: accumulated focused evidence → visible to user as usable context.