Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/00_overview/DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ _Top-level index across MVP1 → GA v1+ as of **2026-06-04**. Click a release na
| Release | Theme | Progress | Status |
|---|---|---|---|
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 94 / 94 scoped done | **Complete** |
| [MVP2 / v0.2](MVP2_DASHBOARD.md) | Three-Engine + Real Signals | 15 / 25 scoped done · 25 remaining | **In progress** |
| [MVP2 / v0.2](MVP2_DASHBOARD.md) | Three-Engine + Real Signals | 15 / 26 scoped done · 27 remaining | **In progress** |
| MVP3 / v0.3 | Observable | — | **Not yet scoped** |
| GA v1 / v1.0 | Production-ready | — | **Not yet scoped** |

Expand Down
49 changes: 26 additions & 23 deletions docs/00_overview/MVP2_DASHBOARD.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion docs/00_overview/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,7 @@ <h2>Releases</h2>
<div class="roadmap-row">
<div class="release-name"><a href="mvp2_dashboard.html">MVP2 / v0.2</a></div>
<div class="theme">Three-Engine + Real Signals</div>
<div class="progress">15 / 25 scoped done · 25 remaining</div>
<div class="progress">15 / 26 scoped done · 27 remaining</div>
<span class="state-pill in_progress">In progress</span>
</div>

Expand Down
59 changes: 38 additions & 21 deletions docs/00_overview/mvp2_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -397,13 +397,13 @@ <h2>MVP2 Progress</h2>
<div class="kpi-row">
<div class="kpi ">
<div class="label">Specced features done</div>
<div class="value">15 / 25</div>
<div class="sub">60% specced · 48 filed under MVP2</div>
<div class="bar"><span style="width:60%"></span></div>
<div class="value">15 / 26</div>
<div class="sub">58% specced · 49 filed under MVP2</div>
<div class="bar"><span style="width:58%"></span></div>
</div>
<div class="kpi warn">
<div class="label">Pending work</div>
<div class="value">31</div>
<div class="value">32</div>
<div class="sub">every not-done feat/infra/chore/bug across all priorities</div>
</div>
<div class="kpi bug">
Expand All @@ -425,7 +425,7 @@ <h2>MVP2 Progress</h2>
</div>
<div class="kpi">
<div class="label">P2 (default)</div>
<div class="value">26</div>
<div class="value">27</div>
<div class="sub">important to file, not blocking</div>
</div>
<div class="kpi">
Expand All @@ -435,14 +435,14 @@ <h2>MVP2 Progress</h2>
</div>
<div class="kpi">
<div class="label">Legacy "Path to MVP2"</div>
<div class="value">25</div>
<div class="value">27</div>
<div class="sub">scoped not-done + bugs + chore-ideas only (excludes feat/infra ideas)</div>
</div>
</div>
<div class="kpi-secondary">
<span>
<strong>Backlog ideas:</strong>
6 idea-only feat/infra folders (not yet scoped into MVP2)
5 idea-only feat/infra folders (not yet scoped into MVP2)
</span>
<span>
<strong>In flight:</strong>
Expand All @@ -465,19 +465,6 @@ <h2>Pipeline</h2>
<div class="col idea">
<h3>Idea <span class="count">19</span></h3>

<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/feat_overnight_final_solution_phase2">Overnight Final Solution Phase2</a></div>
<div class="meta">
<span class="badge feat">Feature</span>
<span class="badge priority" data-priority="P2">P2</span>

</div>
<div class="one-liner">After Phase 1 ships, an operator who picks `follow_suggestions` overnight wakes up to:</div>


</div>


<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/feat_proposal_full_param_space_view">Proposal Full Param Space View</a></div>
<div class="meta">
Expand Down Expand Up @@ -530,6 +517,19 @@ <h3>Idea <span class="count">19</span></h3>
</div>


<div class="card chore" data-prefix="chore" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/chore_overnight_result_card_screenshot">Overnight Result Card Screenshot</a></div>
<div class="meta">
<span class="badge chore">Chore</span>
<span class="badge priority" data-priority="P2">P2</span>

</div>
<div class="one-liner">The `docs/08_guides/tutorial-first-study.md` Step 12 sub-section *&quot;In the morning — read the overnight result card&quot;* shipped on PR #442 with prose only — no…</div>


</div>


<div class="card chore" data-prefix="chore" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/chore_pr_yml_parallelize_backend_job">Pr Yml Parallelize Backend Job</a></div>
<div class="meta">
Expand Down Expand Up @@ -719,7 +719,7 @@ <h3>Spec <span class="count">0</span></h3>
</div>

<div class="col plan">
<h3>Plan <span class="count">12</span></h3>
<h3>Plan <span class="count">13</span></h3>

<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/feat_apply_path_normalizer_declaration/feature_spec.md">Apply Path Normalizer Declaration</a></div>
Expand All @@ -734,6 +734,19 @@ <h3>Plan <span class="count">12</span></h3>
</div>


<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/feat_overnight_final_solution_phase2/feature_spec.md">Overnight Final Solution Phase2</a></div>
<div class="meta">
<span class="badge feat">Feature</span>
<span class="badge priority" data-priority="P2">P2</span>
<span>merged 2026-06-04</span>
</div>
<div class="one-liner">When the chain that this study belongs to has terminated (`stop_reason` ≠ `in_flight`) and has at least 2 links, a top-of-page **Overnight result card** mounts above `LinkedEntitiesRow` and compresses</div>


</div>


<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/planned_features/02_mvp2/feat_overnight_studies_summary_card/feature_spec.md">Overnight Studies Summary Card</a></div>
<div class="meta">
Expand Down Expand Up @@ -1131,6 +1144,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class chore_ubi_reader_search_after_pagination plan;
feat_apply_path_normalizer_declaration[&quot;apply path normalizer declaration&quot;]
class feat_apply_path_normalizer_declaration plan;
feat_overnight_final_solution_phase2[&quot;overnight final solution phase2&quot;]
class feat_overnight_final_solution_phase2 plan;
feat_overnight_studies_summary_card[&quot;overnight studies summary card&quot;]
class feat_overnight_studies_summary_card plan;
feat_query_normalization_tuning[&quot;query normalization tuning&quot;]
Expand Down Expand Up @@ -1188,6 +1203,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class chore_ubi_reader_search_after_pagination plan;
feat_apply_path_normalizer_declaration[&quot;apply path normalizer declaration&quot;]
class feat_apply_path_normalizer_declaration plan;
feat_overnight_final_solution_phase2[&quot;overnight final solution phase2&quot;]
class feat_overnight_final_solution_phase2 plan;
feat_overnight_studies_summary_card[&quot;overnight studies summary card&quot;]
class feat_overnight_studies_summary_card plan;
feat_query_normalization_tuning[&quot;query normalization tuning&quot;]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Capture the populated-stack screenshot for the morning result card

**Date:** 2026-06-04
**Status:** Idea — deferred FR-9 deliverable from PR #442
**Priority:** P2
**Origin:** `feat_overnight_final_solution_phase2` Story 6 / FR-9. The plan's hard-fallback escape hatch (see [`implementation_plan.md` §"Story 6 — Tasks #3 hard fallback"](../feat_overnight_final_solution_phase2/implementation_plan.md)) explicitly allowed filing this chore when the demo seed cannot reliably produce a `follow_suggestions` terminated chain at `pnpm capture-guides` time. GPT-5.5 final-review finding flagged the missing screenshot as blocking, per the plan's "screenshot is required, not waived by D-17" rule.
**Depends on:** None — the morning card ships in [`feat_overnight_final_solution_phase2`](../../implemented_features/2026_06_04_feat_overnight_final_solution_phase2/) (PR #442). The screenshot capture needs a populated stack with a deterministic terminated multi-link `follow_suggestions` chain.

## Problem

The `docs/08_guides/tutorial-first-study.md` Step 12 sub-section *"In the morning — read the overnight result card"* shipped on PR #442 with prose only — no `![Overnight result card](images/12-overnight-result-card.png)` screenshot reference. FR-9 required the screenshot. The reason it didn't land: the standard CI demo seed (`make seed-demo`) does not produce a chain that exercises the card's full rendered state (path + convergence chip + narrative excerpt) — chain children seeded via `/api/v1/_test/auto-followup/seed-chain` have NULL `selected_followup_kind` (legacy narrow pattern), no winning proposal, no winning-link digest.

Operators reading the tutorial Step 12 see the prose but no visual reference for what the card looks like. The screenshot is the "show, don't tell" component of the morning-review flow documentation.

## Proposed capabilities

### Capture the populated-stack screenshot

- Boot the local stack (`make up && make seed-demo`).
- Manually create a `follow_suggestions` chain via the UI wizard:
- Pick the **Deep (1000)** preset.
- Set `auto_followup_depth=2`.
- Pick **Strategy: Try suggested follow-ups**.
- Launch the study.
- Wait for the chain to terminate (one anchor + at least one follow-up; the digest narrative + winning proposal both need to land).
- Run `pnpm capture-guides` against the now-populated state OR navigate to `/studies/{anchor.id}` in a headless browser and capture a PNG of `data-testid="overnight-result-card"`.
- Commit the resulting `docs/08_guides/images/12-overnight-result-card.png` and add the `![Overnight result card](images/12-overnight-result-card.png)` reference to `docs/08_guides/tutorial-first-study.md` Step 12.
- Regenerate `ui/public/docs/tutorial-first-study.md` via `pnpm prebuild` (the copy-docs gate).

### Optional — extend the demo seed

Alternative path that fixes this AND the AC-12 E2E downgrade in one swing: extend `/api/v1/_test/auto-followup/seed-chain` (or add a sibling test-only endpoint) to take a `selected_followup_kind` argument so seeded chain links carry non-null kinds, and to optionally seed a winning proposal + digest. Then `pnpm capture-guides` against the demo seed produces a card-rendered guide page automatically, AND the E2E spec can promote AC-12's click-through from best-effort to required.

The optional extension is the cleaner long-term fix; the per-PR screenshot capture is the minimum to close the FR-9 gap.

## Scope signals

- **Backend:** None for the minimum scope (just capture the screenshot). For the optional extension: ~30–60 LOC on the `/seed-chain` test endpoint + tests.
- **Frontend:** None — the morning card ships in PR #442.
- **Migration:** None.
- **Config:** None.
- **Audit events:** N/A — read-only.

## Why deferred

The CI demo seed does not produce the precondition (a terminated `follow_suggestions` chain with a winning digest + proposal) so the auto-capture path didn't work. The plan's escape hatch authorized filing this chore instead of blocking PR #442 indefinitely while operator-side capture was arranged.

## Relationship to other work

- **Built on:** [`feat_overnight_final_solution_phase2`](../../implemented_features/2026_06_04_feat_overnight_final_solution_phase2/) — the feature being documented.
- **Coordinates with:** [`infra_solr_smoke_stability`](../../implemented_features/2026_06_02_infra_solr_smoke_stability/) precedent for "things the demo seed should produce automatically" — adding chain seeding with non-null kinds + a winning proposal would mirror that pattern.

## Open questions

- **Q1** Capture path: manual local capture vs extend `seed-chain` endpoint? Recommend manual local capture for the minimum (lowest cost to clear FR-9); the demo-seed extension is its own follow-up if AC-12's E2E click-through ever needs to be promoted from best-effort.
- **Q2** Should this block any downstream work? Recommend no — the prose lands in PR #442, operators can read the card description. The screenshot is a polish item.
Loading
Loading