diff --git a/docs/00_overview/DASHBOARD.md b/docs/00_overview/DASHBOARD.md index d3cfe50c..a441180f 100644 --- a/docs/00_overview/DASHBOARD.md +++ b/docs/00_overview/DASHBOARD.md @@ -6,7 +6,7 @@ _Top-level index across MVP1 → GA v1+ as of **2026-05-23**. Click a release na | Release | Theme | Progress | Status | |---|---|---|---| -| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 70 / 71 scoped done · 6 remaining | **In progress** | +| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 71 / 71 scoped done · 5 remaining | **In progress** | | [MVP1.5 / v0.1.5](MVP1_5_DASHBOARD.md) | Real Signals | 1 item(s) queued | **Held / queued** | | [MVP2 / v0.2](MVP2_DASHBOARD.md) | Observable | 1 / 1 scoped done · 1 remaining | **In progress** | | MVP3 / v0.3 | Production Stacks | — | **Not yet scoped** | diff --git a/docs/00_overview/MVP1_DASHBOARD.md b/docs/00_overview/MVP1_DASHBOARD.md index 2403cc4e..f4bd6ce1 100644 --- a/docs/00_overview/MVP1_DASHBOARD.md +++ b/docs/00_overview/MVP1_DASHBOARD.md @@ -6,34 +6,28 @@ _Reflects feature-folder state as of **2026-05-23** (latest mtime of any planned ## Next up -**[chore_dashboard_pr_extraction_from_idea](../02_product/planned_features/chore_dashboard_pr_extraction_from_idea/feature_spec.md)** — Chore, currently in **Plan** +All scoped MVP1 features shipped 🎉 -> Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through. - -Plan approved; run /impl-execute to ship - -```bash -/impl-execute docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/implementation_plan.md --all -``` +Pull from the Idea backlog or capture a new feature spec. ## MVP1 Progress | Metric | Value | |---|---| -| Scoped items done | **70 / 71** (99%) — feat_/infra_/chore_/epic_ past idea stage | -| Pending work | **13** items (every not-done feat/infra/chore/bug across all priorities) | +| Scoped items done | **71 / 71** (100%) — feat_/infra_/chore_/epic_ past idea stage | +| Pending work | **12** items (every not-done feat/infra/chore/bug across all priorities) | | → P0 — do next | **0** unblocking / paying daily cost | | → P1 | **0** high-value, ready when P0 clears | -| → P2 (default) | 12 important to file, not blocking | +| → P2 (default) | 11 important to file, not blocking | | → Backlog | 1 captured for record, not planned | | Open bugs | 0 | -| Legacy "Path to MVP1" | 6 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) | +| Legacy "Path to MVP1" | 5 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) | | Backlog ideas | 7 idea-only feat/infra (not yet scoped into MVP1) | | In flight | 0 feature(s) actively shipping | ## Pipeline -### Done (87) +### Done (88) | Feature | Type | One-liner | Depends on | Status | |---|---|---|---|---| @@ -80,6 +74,7 @@ Plan approved; run /impl-execute to ship | [chore_cluster_delete_ui](implemented_features/2026_05_13_chore_cluster_delete_ui/idea.md) | Chore | The `/clusters` list page (Story 2.1) and `/clusters/{id}` detail page render registered clusters fine, but there is no Delete button. When an operator registers a cluster with stale credentials or a | — | Complete | | [chore_create_study_modal_e2e_stability](implemented_features/2026_05_20_chore_create_study_modal_e2e_stability/idea.md) | Chore | The Playwright smoke lane runs every `ui/tests/e2e/*.spec.ts` against a real-backend stack. The create-study modal's Step-1 cluster trigger (rendered by [`EntitySelect`](../../ui/src/components/common | — | [PR #161](https://github.com/SoundMindsAI/relyloop/pull/161) merged 2026-05-20 | | [chore_create_study_wizard_polish](implemented_features/2026_05_20_chore_create_study_wizard_polish/feature_spec.md) | Chore | Step 4 auto-fills from the template's `declared_params` with conservative ranges, rejects unknown/missing params at create time with new machine-readable error codes, and surfaces four new glossary en | — | [PR #157](https://github.com/SoundMindsAI/relyloop/pull/157) merged 2026-05-20 | +| [chore_dashboard_pr_extraction_from_idea](implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/feature_spec.md) | Chore | Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through. | — | [PR #221](https://github.com/SoundMindsAI/relyloop/pull/221) merged 2026-05-23 | | [chore_data_table_columnvisibility_tanstack](implemented_features/2026_05_19_chore_data_table_columnvisibility_tanstack/idea.md) | Chore | `feat_data_table_primitive` shipped with six known non-regression follow-up items captured only in chat transcripts. None block the PR but each is a real improvement that would otherwise evaporate whe | — | Complete | | [chore_detail_page_shell_primitive](implemented_features/2026_05_19_chore_detail_page_shell_primitive/idea.md) | Chore | Six of the seven `/{entity}/[id]` detail routes hand-roll the same three-state scaffold around their data query. The structure is **identical** down to the className strings, with two minor copy varia | — | Complete | | [chore_digest_worker_narrow_except](implemented_features/2026_05_14_chore_digest_worker_narrow_except/idea.md) | Chore | … | — | Complete | @@ -129,11 +124,9 @@ Plan approved; run /impl-execute to ship _None._ -### Plan (1) +### Plan (0) -| # | Priority | Feature | Type | One-liner | Depends on | Status | -|---|---|---|---|---|---|---| -| 1 | P2 | [chore_dashboard_pr_extraction_from_idea](../02_product/planned_features/chore_dashboard_pr_extraction_from_idea/feature_spec.md) | Chore | Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through. | — | [PR #4](https://github.com/SoundMindsAI/relyloop/pull/4) merged 2026-05-15 | +_None._ ### Spec (0) @@ -167,8 +160,6 @@ graph LR classDef plan fill:#fef9c3,stroke:#854d0e,color:#854d0e; classDef spec fill:#dbeafe,stroke:#1e40af,color:#1e40af; classDef idea fill:#f1f5f9,stroke:#334155,color:#334155; - chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] - class chore_dashboard_pr_extraction_from_idea plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -299,6 +290,8 @@ graph LR class feat_orchestrator_zero_streak_abort done; feat_study_preflight_overlap_probe["study preflight overlap probe"] class feat_study_preflight_overlap_probe done; + chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] + class chore_dashboard_pr_extraction_from_idea done; chore_migration_test_head_brittleness["migration test head brittleness"] class chore_migration_test_head_brittleness done; chore_reconciler_terminal_closed_no_poll["reconciler terminal closed no poll"] diff --git a/docs/00_overview/dashboard.html b/docs/00_overview/dashboard.html index 2d10d644..1994dd3e 100644 --- a/docs/00_overview/dashboard.html +++ b/docs/00_overview/dashboard.html @@ -384,7 +384,7 @@

Releases

MVP1 / v0.1
The Loop
-
70 / 71 scoped done · 6 remaining
+
71 / 71 scoped done · 5 remaining
In progress
diff --git a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/feature_spec.md b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/feature_spec.md similarity index 98% rename from docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/feature_spec.md rename to docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/feature_spec.md index 408a014f..9a05ab85 100644 --- a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/feature_spec.md +++ b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/feature_spec.md @@ -1,7 +1,7 @@ # Feature Specification — `_extract_pr_number` reads `idea.md` for legacy idea-only features **Date:** 2026-05-23 -**Status:** Draft +**Status:** Implemented (PR #221 squash-merged as `8a6452d5` on 2026-05-23) **Owners:** Eric Starr (engineering) **Related docs:** - [`idea.md`](idea.md) @@ -190,7 +190,7 @@ N/A — no UI changes. ### AC-1: `**Status:** **Shipped** as PR #N` pattern extracts correctly -- **Given** an idea body whose first non-blank line after the title is `**Status:** **Shipped** as PR [#124](https://github.com/SoundMindsAI/relyloop/pull/124)` (precedent: `feat_contextual_help_mvp2`; the literal `(squash-merged 2026-05-15…)` trailer is omitted from this AC body because it trips the dashboard regen's pre-existing priority-3 fuzzy `PR #N…merged` regex — see tangential observation `chore_dashboard_regen_quoted_pr_false_positive` for the underlying issue. The strict Pattern A regex anchors at the `**Status:**` line, so the trailing prose doesn't affect AC-1's pass/fail.) +- **Given** an idea body whose first non-blank line after the title is `**Status:** **Shipped** as PR [#124](https://github.com/SoundMindsAI/relyloop/pull/124)` (precedent: `feat_contextual_help_mvp2`; the literal squash-merged-date trailer is omitted from this AC body because it trips the dashboard regen's pre-existing priority-3 fuzzy `PR #N…merge`-context regex — see tangential observation `chore_dashboard_regen_quoted_pr_false_positive` for the underlying issue. The strict Pattern A regex anchors at the `**Status:**` line, so the trailing prose doesn't affect AC-1's pass/fail.) - **When** `_extract_pr_number(pipe="", plan="", spec="", idea=)` is called - **Then** it returns `124`. diff --git a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/idea.md b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/idea.md similarity index 100% rename from docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/idea.md rename to docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/idea.md diff --git a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/implementation_plan.md b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/implementation_plan.md similarity index 99% rename from docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/implementation_plan.md rename to docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/implementation_plan.md index f61d8b99..9009354e 100644 --- a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/implementation_plan.md +++ b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/implementation_plan.md @@ -1,7 +1,7 @@ # Implementation Plan — `_extract_pr_number` reads `idea.md` for legacy idea-only features **Date:** 2026-05-23 -**Status:** Draft +**Status:** Complete (PR #221 squash-merged as `8a6452d5` on 2026-05-23) **Primary spec:** [`feature_spec.md`](feature_spec.md) **Policy source(s):** [`CLAUDE.md`](../../../../CLAUDE.md) (Conventional Commits, 80% coverage gate, no main commits). @@ -331,7 +331,7 @@ N/A. class TestMutualExclusion: def test_pattern_a_and_b_share_no_lines(self) -> None: ... ``` -6. Write each test body, using the AC-N "Given/When/Then" from the spec as the test contract. Each test must include the literal idea-body text the spec cites as its precedent example (e.g., AC-1's body is `**Status:** **Shipped** as PR [#124](https://github.com/SoundMindsAI/relyloop/pull/124) (squash-merged 2026-05-15, commit `9d22f62`).` — verified against the actual `feat_contextual_help_mvp2/idea.md`). +6. Write each test body, using the AC-N "Given/When/Then" from the spec as the test contract. Each test must include the literal idea-body text the spec cites as its precedent example (e.g., AC-1's body mirrors `feat_contextual_help_mvp2`'s `**Status:** **Shipped** as PR [#124](url) (squash-merged-date trailer)` shape — verified against the actual `feat_contextual_help_mvp2/idea.md`; the literal date is held in the test fixture, not quoted here, to avoid tripping the dashboard regen's priority-3 fuzzy regex). 7. The AC-12 test uses `pytest.fixture` or `tempfile.mkdtemp` to construct a real on-disk folder with a date-prefixed slug (e.g., `2026_05_20_chore_test_stub`) containing only `idea.md`. The `_load_implemented` call returns a `Feature` whose `pr_number` field is asserted. 8. Update `architecture.md` per the FR-3 requirement. Add a ~6-line subsection at the end of §"Where the code lives" (immediately after the `scripts/` mention at ~L141). Content: ```markdown diff --git a/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/pipeline_status.md b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/pipeline_status.md new file mode 100644 index 00000000..4ee45e34 --- /dev/null +++ b/docs/00_overview/implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/pipeline_status.md @@ -0,0 +1,35 @@ +# Pipeline Status — chore_dashboard_pr_extraction_from_idea + +## Idea +- Status: Complete +- File: idea.md +- Preflight: passed 2026-05-23 (4 sections patched — line-drift fix 476→499, dependency PR# refreshed, "⚠️ Audit finding" block added flagging Pattern C false-positive risk, new "Open questions" §1/§2/§3 with locked defaults) + +## Spec +- Status: Approved +- Date: 2026-05-23 +- File: feature_spec.md +- Cross-model review: GPT-5.5 passed (3 cycles, converged at cycle 3 with 0 H/0 M/1 Low — applied) + - Cycle 1: 7 findings (1 H / 4 M / 2 L) — 6 actionable accepted + - Cycle 2: 4 findings (1 H / 3 M / 0 L) — all 4 accepted (Pattern A boundary, §3 stale snippets, metadata-block algorithm, structural verification) + - Cycle 3: 1 finding (0 H / 0 M / 1 L) — accepted (AC count bookkeeping) +- Phases: 1 (single phase, single PR) + +## Plan +- Status: Approved +- Date: 2026-05-23 +- File: implementation_plan.md +- Cross-model review: GPT-5.5 passed (1 cycle, 3 findings: 0 High / 1 Medium / 2 Low — all accepted and applied: AC-12 ownership clarified, metadata-block title-once flag added, pytest collection grep fixed) +- Stories: 2 across 1 epic +- Phases covered: 1 (single phase, single PR) + +## Implementation +- Status: Complete +- Date: 2026-05-23 +- PR: #221 (squash-merged as `8a6452d5` to `main`) +- CI: green (5 jobs on each of 3 pushes — lint + typecheck + unit + integration + contract + Docker build + frontend + smoke) +- Stories completed: 2/2 (1.1 extraction logic, 1.2 call sites + tests + docs) +- Gemini review: 3 Medium findings, all accepted and applied in `5a90d989` (Pattern B + C markdown-link symmetry + `_load_implemented` one-liner fallback) +- Final GPT-5.5 review: 2 findings (0 High / 2 Medium / 0 Low) — 1 deferred (cosmetic anomaly on own planned-row, resolves on merge; captured as `chore_dashboard_regen_quoted_pr_false_positive`), 1 accepted and applied in `d03e3d5f` (metadata-block helper rejects later H1 as title) +- Tangential capture: [`chore_dashboard_regen_quoted_pr_false_positive`](../chore_dashboard_regen_quoted_pr_false_positive/idea.md) — pre-existing priority-3 fuzzy-regex weakness +- Empirical verification: forward gain of 2 strict-pattern legacy chores correctly populate Status column (`chore_create_study_modal_e2e_stability` → PR #161, `chore_precommit_node_path_resolution` → PR #171); plus material UX improvement on many idea-only rows via the `_load_implemented` one-liner fallback. ZERO existing PR-linked rows changed PR number. diff --git a/docs/00_overview/mvp1_dashboard.html b/docs/00_overview/mvp1_dashboard.html index 1220ec36..e8d5baf1 100644 --- a/docs/00_overview/mvp1_dashboard.html +++ b/docs/00_overview/mvp1_dashboard.html @@ -382,12 +382,12 @@

RelyLoop MVP1 Dashboard

-
-
Next up — Chore, currently in Plan
- -
Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through.
-
Plan approved; run /impl-execute to ship
- /impl-execute docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/implementation_plan.md --all +
+
Next up
+
All scoped MVP1 features shipped 🎉
+
+ Pull from the Idea backlog or capture a new feature spec. +
@@ -395,15 +395,15 @@

RelyLoop MVP1 Dashboard

MVP1 Progress

-
+
Scoped items done
-
70 / 71
-
99% of feat_/infra_/chore_/epic_ items past idea stage
-
+
71 / 71
+
100% of feat_/infra_/chore_/epic_ items past idea stage
+
Pending work
-
13
+
12
every not-done feat/infra/chore/bug across all priorities
@@ -425,7 +425,7 @@

MVP1 Progress

P2 (default)
-
12
+
11
important to file, not blocking
@@ -435,7 +435,7 @@

MVP1 Progress

Legacy "Path to MVP1"
-
6
+
5
scoped not-done + bugs + chore-ideas only (excludes feat/infra ideas)
@@ -628,19 +628,7 @@

Spec 0

-

Plan 1

- -
- -
- Chore - P2 - PR #4 merged 2026-05-15 -
-
Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through.
- - -
+

Plan 0

@@ -650,7 +638,7 @@

Implementing 0

-

Done 87

+

Done 88

@@ -1211,6 +1199,19 @@

Done 87

+
+ +
+ Chore + + PR #221 merged 2026-05-23 +
+
Extend `_extract_pr_number` to accept the idea body as a fourth argument, and have `_load_implemented` read `idea.md` and pass it through.
+ + +
+ +
@@ -1795,8 +1796,6 @@

Dependency graph (feat_ + infra_)

classDef plan fill:#fef9c3,stroke:#854d0e,color:#854d0e; classDef spec fill:#dbeafe,stroke:#1e40af,color:#1e40af; classDef idea fill:#f1f5f9,stroke:#334155,color:#334155; - chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] - class chore_dashboard_pr_extraction_from_idea plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -1927,6 +1926,8 @@

Dependency graph (feat_ + infra_)

class feat_orchestrator_zero_streak_abort done; feat_study_preflight_overlap_probe["study preflight overlap probe"] class feat_study_preflight_overlap_probe done; + chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] + class chore_dashboard_pr_extraction_from_idea done; chore_migration_test_head_brittleness["migration test head brittleness"] class chore_migration_test_head_brittleness done; chore_reconciler_terminal_closed_no_poll["reconciler terminal closed no poll"] @@ -1990,8 +1991,6 @@

Dependency graph (feat_ + infra_)

classDef plan fill:#fef9c3,stroke:#854d0e,color:#854d0e; classDef spec fill:#dbeafe,stroke:#1e40af,color:#1e40af; classDef idea fill:#f1f5f9,stroke:#334155,color:#334155; - chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] - class chore_dashboard_pr_extraction_from_idea plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -2122,6 +2121,8 @@

Dependency graph (feat_ + infra_)

class feat_orchestrator_zero_streak_abort done; feat_study_preflight_overlap_probe["study preflight overlap probe"] class feat_study_preflight_overlap_probe done; + chore_dashboard_pr_extraction_from_idea["dashboard pr extraction from idea"] + class chore_dashboard_pr_extraction_from_idea done; chore_migration_test_head_brittleness["migration test head brittleness"] class chore_migration_test_head_brittleness done; chore_reconciler_terminal_closed_no_poll["reconciler terminal closed no poll"] diff --git a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/pipeline_status.md b/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/pipeline_status.md deleted file mode 100644 index 51ab8770..00000000 --- a/docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/pipeline_status.md +++ /dev/null @@ -1,27 +0,0 @@ -# Pipeline Status — chore_dashboard_pr_extraction_from_idea - -## Idea -- Status: Complete -- File: idea.md -- Preflight: passed 2026-05-23 (4 sections patched — line-drift fix 476→499, dependency PR# refreshed, "⚠️ Audit finding" block added flagging Pattern C false-positive risk, new "Open questions" §1/§2/§3 with locked defaults) - -## Spec -- Status: Approved -- Date: 2026-05-23 -- File: feature_spec.md -- Cross-model review: GPT-5.5 passed (3 cycles, converged at cycle 3 with 0 H/0 M/1 Low — applied) - - Cycle 1: 7 findings (1 H / 4 M / 2 L) — 6 actionable accepted - - Cycle 2: 4 findings (1 H / 3 M / 0 L) — all 4 accepted (Pattern A boundary, §3 stale snippets, metadata-block algorithm, structural verification) - - Cycle 3: 1 finding (0 H / 0 M / 1 L) — accepted (AC count bookkeeping) -- Phases: 1 (single phase, single PR) - -## Plan -- Status: Approved -- Date: 2026-05-23 -- File: implementation_plan.md -- Cross-model review: GPT-5.5 passed (1 cycle, 3 findings: 0 High / 1 Medium / 2 Low — all accepted and applied: AC-12 ownership clarified, metadata-block title-once flag added, pytest collection grep fixed) -- Stories: 2 across 1 epic -- Phases covered: 1 (single phase, single PR) - -## Implementation -- Status: Not started diff --git a/docs/02_product/planned_features/chore_dashboard_regen_quoted_pr_false_positive/idea.md b/docs/02_product/planned_features/chore_dashboard_regen_quoted_pr_false_positive/idea.md index 872af142..3ff59d73 100644 --- a/docs/02_product/planned_features/chore_dashboard_regen_quoted_pr_false_positive/idea.md +++ b/docs/02_product/planned_features/chore_dashboard_regen_quoted_pr_false_positive/idea.md @@ -2,7 +2,7 @@ **Date:** 2026-05-23 **Status:** Idea — surfaced during `chore_dashboard_pr_extraction_from_idea` empirical verification (2026-05-23) -**Priority:** P3 — cosmetic-only; affects planned-feature rows in `MVP1_DASHBOARD.md`'s Plan/Spec sections when a feature's spec/plan/idea body cites other features' PR-merge phrases in narrative text. No effect on shipped-feature accuracy. +**Priority:** P2 — cosmetic-only; affects planned-feature rows in `MVP1_DASHBOARD.md`'s Plan/Spec sections when a feature's spec/plan/idea body cites other features' PR-merge phrases in narrative text. No effect on shipped-feature accuracy. (The dashboard regen script at [`scripts/build_mvp1_dashboard.py:240-245`](../../../../scripts/build_mvp1_dashboard.py#L240) only recognizes P0/P1/P2/Backlog and coerces anything else to P2; setting P2 explicitly to keep the idea-file and dashboard tier columns aligned — surfaced by Gemini on the finalization PR.) **Origin:** During `chore_dashboard_pr_extraction_from_idea` (this chore's sibling) empirical verification, `_load_planned` for the chore's own folder extracted `PR #4` (which belongs to `infra_foundation`) because the chore's spec content includes AC-4's example body `**Depends on:** [infra_foundation] — merged via PR #4 (2026-05-09)`. The pre-existing priority-3 fuzzy regex `merged[^.\n]{0,80}PR[^a-zA-Z\n]{0,5}#(\d+)` matched the narrative quote and returned `4` as this feature's PR number. Multiple other AC bodies in the spec (AC-9, AC-10) had similar patterns; the rendered dashboard row for the chore in the Plan section showed misleading values like `[PR #4] merged 2026-05-15` despite the chore being planned-only. **Depends on:** None. (Builds on top of [`bug_dashboard_depends_on_column_bloat`](../../../00_overview/implemented_features/2026_05_23_bug_dashboard_depends_on_column_bloat/) PR #208 + `chore_dashboard_pr_extraction_from_idea` PR-TBD.) diff --git a/state.md b/state.md index 52770436..747de506 100644 --- a/state.md +++ b/state.md @@ -8,8 +8,8 @@ ## Current branch / execution context -- **Branch:** `docs/finalize-migration-test-head-brittleness` — finalization docs PR after PR #219 (`63cb7c41`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_migration_test_head_brittleness/` per CLAUDE.md convention. `feature/chore-migration-test-head-brittleness` branch will be cleaned up via `gh pr merge --delete-branch` when this finalization PR merges. Earlier: `docs/finalize-chore-study-default-stop-conditions` — finalization docs PR after PR #215 (`370c87d9`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_study_default_stop_conditions/` per CLAUDE.md convention. `feature/chore-study-default-stop-conditions` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-reconciler-no-poll` — finalization docs PR after PR #216 (`95d4c414`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_reconciler_terminal_closed_no_poll/` per CLAUDE.md convention. `chore/reconciler-terminal-closed-no-poll` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-dashboard-banner-dismiss-persistence-flake` — finalization docs PR after PR #213 (`a8b788c`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_banner_dismiss_persistence_flake/` per CLAUDE.md convention. `bug/dashboard-banner-dismiss-persistence-flake` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-dashboard-classifier-half-step-releases` — finalization docs PR after PR #211 (`ab8674a`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_classifier_half_step_releases/` per CLAUDE.md convention. `bug/dashboard-classifier-missing-mvp1-5` branch deleted post-merge by `gh pr merge --delete-branch` (note: the local branch name retains the pre-rename slug since the rename happened mid-fix). Earlier: `docs/finalize-dashboard-depends-on-column-bloat` — finalization docs PR after PR #208 (`8bb7148`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_depends_on_column_bloat/` per CLAUDE.md convention. `bug/dashboard-depends-on-column-bloat` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-contract-test-stub-target-filter-kwarg` — finalization docs PR after PR #206 (`d3fbbce`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_contract_test_stub_missing_target_filter_kwarg/` per CLAUDE.md convention. `bug/contract-test-stub-target-filter-kwarg` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-pr-reconciler-blocked-by-closed-fallback` — finalization docs PR after PR #204 (`a0ca5b9`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_pr_reconciler_blocked_by_closed_fallback/` per CLAUDE.md convention. `bug/pr-reconciler-blocked-by-closed-fallback` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-config-repo-baseline-tracking` — finalization docs PR after PR #202 (`435badf`) merged 2026-05-23; moves the feature folder to `implemented_features/2026_05_23_feat_config_repo_baseline_tracking/` per CLAUDE.md convention. `feature/config-repo-baseline-tracking` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `feature/config-repo-baseline-tracking` — implementation branch for `feat_config_repo_baseline_tracking` (32nd MVP1-era artifact). 10 stories across 3 epics shipped: Alembic 0016 (config_repos.last_merged_proposal_id + FK + partial index + backfill), three new repo helpers (update_config_repo_last_merged_pointer with SELECT FOR UPDATE + strict-monotonic-timestamp guard, find_currently_live_proposal_ids, get_config_repo_with_last_merged_proposal), webhook handler patch at github.py:181-194 (FR-3), pr_reconcile.py patch at line 173 (FR-3a — with documented limitation for the `merged_at=null` fallback path captured as bug_pr_reconciler_blocked_by_closed_fallback), ConfigRepoDetail.last_merged_proposal API field with embed-side is_currently_live=True derivation, ProposalSummary/Detail.is_currently_live pointer-only derivation in the existing batch serializer, ?is_last_merged=true|false NULL-safe EXISTS/NOT EXISTS filter, frontend via on both proposals table rows + proposal detail page header, two new glossary entries (proposal.currently_live + proposal.currently_live_filter), and a two-state "Currently live only" filter chip on /proposals with empty-state copy override. Backend 1128 unit tests passing; integration + contract tests written for AC-1..AC-15 (skip locally without Postgres but run in CI); ui/src/lib/types.ts manually patched with the three new fields; UI vitest case for the badge added. Spec converged at GPT-5.5 cycle 3 (21 findings: 15 cycle-1 + 5 cycle-2 + 1 cycle-3, all accepted, 0 rejected); plan converged at GPT-5.5 cycle 3 (17 findings: 14 cycle-1 + 3 cycle-2 + 0 cycle-3, 15 accepted + 2 rejected with codebase counter-evidence). Earlier: `docs/finalize-mvp1-5-ubi-foundation` — finalization docs PR after PR #200 (`594f7b4`) merged 2026-05-23; introduced the MVP1.5 / v0.1.5 "Real Signals" release tier (planning artifact — `feat_ubi_judgments` (P1) + `bug_dashboard_depends_on_column_bloat` (P2) idea files + canonical-matrix update). `feature/mvp1-5-ubi-foundation` branch deleted post-merge. Earlier: `docs/finalize-ir-measures-migration` — finalization docs PR after PR #198 (`350b2fc`) merged 2026-05-23; moves the feature folder to `implemented_features/2026_05_23_infra_ir_measures_migration/` per CLAUDE.md convention. `feature/infra-ir-measures-migration` branch deleted post-merge by the user. Earlier: `docs/finalize-guides-glossary-faq-and-regen` — finalization docs PR after PR #195 (`ea2b242`) merged 2026-05-22; moves the three planned-feature folders to `implemented_features/` per CLAUDE.md convention. `feature/guides-glossary-faq-and-regen` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-study-preflight-overlap-probe` — finalization docs PR after PR #193 (`ca835e0`) merged 2026-05-22. `feature/study-preflight-overlap-probe` branch deleted post-merge. Earlier: `docs/finalize-orchestrator-zero-streak-abort` — finalization docs PR after PR #191 (`51ae4b3c`) merged 2026-05-22. `feature/orchestrator-zero-streak-abort` branch deleted post-merge. Earlier: `docs/finalize-home-first-run-demo-nudge` — finalization docs PR after PR #188 (`21325432`) merged 2026-05-22. `feature/home-first-run-demo-nudge` branch deleted post-merge. Earlier: `docs/finalize-e2e-test-rows-isolation` — finalization docs PR after PR #186 (`a444b94`) merged 2026-05-21. `chore/e2e-test-rows-isolation` branch deleted post-merge. Earlier: `docs/finalize-study-target-judgment-mismatch-guard` — finalization docs PR after PR #184 (`ce3fcf4`) merged 2026-05-21. `feature/study-target-judgment-mismatch-guard` branch deleted post-merge. Earlier: `docs/finalize-pr-metric-confidence` — finalization docs PR after PR #180 (`d0a8358`) merged 2026-05-21. `feat_pr_metric_confidence` branch deleted post-merge. Earlier: `docs/finalize-agent-propose-search-space` — finalization docs PR after PR #175 (`5d29355`) merged 2026-05-21. `feature/agent-propose-search-space` deleted post-merge. Earlier: `docs/finalize-cluster-target-filter` — finalization docs PR after PR #168 (`57d3ba0`) + PR #169 (`c44d774`) both merged. Prior `main` post-merge of PR #168 squash `57d3ba0` (`feat_cluster_target_filter`) + PR #169 squash `c44d774` (`chore_seed_meaningful_demos`) 2026-05-20. Earlier: PR #165 squash commit `bd4516a` 2026-05-20. Finalization docs branch `docs/finalize-create-study-target-autocomplete`. Prior squash same day: PR #163 `c703953` (`feat_create_study_search_space_builder`). Finalization docs PR off `docs/finalize-create-study-search-space-builder`. Prior squashes (same day): PR #161 `0879df2` (`chore_create_study_modal_e2e_stability`), PR #160 `160ff6b` (`bug_err_metric_frontend_backend_drift`), PR #159 `52e106d` (`bug_tutorial_template_param_boost_naming`), PR #158 `308c315` (finalize chore_create_study_wizard_polish), PR #157 `075c46b` (`chore_create_study_wizard_polish`). Prior squash: PR #155 `9a72514` 2026-05-19. Prior squashes: PR #154 `ed4121f` 2026-05-19 (`chore_form_dropdown_guide_screenshot_refresh`), PR #153 `199e225` 2026-05-19 (`chore_extract_shadcn_select_test_mock`), PR #152 `476db78` 2026-05-19 (`chore_ci_prettier_check`), PR #151 `110dc5a` 2026-05-19 (finalize chore_data_table_columnvisibility_tanstack), PR #150 `c1e4545` 2026-05-19 (`chore_data_table_columnvisibility_tanstack`), PR #149 `da9506b` 2026-05-19 (finalize infra_e2e_wire_seed_helper_into_studies_spec), PR #148 `65f4150` 2026-05-19 (`infra_e2e_wire_seed_helper_into_studies_spec` — `?study_id=` filter bug + E2E test restore), PR #147 `8854e47` 2026-05-18 (capture chore_detail_page_shell_primitive idea), PR #146 `7299fca` 2026-05-18 (bug_install_skip_ui_rebuild — `make up`/`make down` lifecycle fix), PR #136 `cb7d9ee` 2026-05-18 (chore_form_dropdown_primitive), PR #132 `ee4c8d4` 2026-05-17 (chore_data_table_primitive_followups items 1+2+4+6), PR #130 `13b3383` 2026-05-17 (infra_e2e_seed_completed_study), PR #128 `73459d2` 2026-05-17 (bug_cursor_decode_value_validation), PR #126 `d6115b3` 2026-05-16 (feat_data_table_primitive). `v0.1.0` annotated tag still on `main` commit `d099536` 2026-05-13; GitHub Release at https://github.com/SoundMindsAI/relyloop/releases/tag/v0.1.0. -- **Active feature:** none in flight (PR #219 closed `chore_migration_test_head_brittleness` on 2026-05-23 — second MVP1.0-cleanup chore from the operator's stated "finish MVP1.0 before MVP1.5" sweep. Test-only refactor; eliminates the recurring 2-lines-per-migration sympathy-edit tax on `backend/tests/integration/test_migrations.py`. Only this finalization docs PR remains. Remaining MVP1.0 backlog per dashboard Idea table: 4 P2 chores + 1 Backlog chore (`chore_dashboard_pr_extraction_from_idea`, `chore_e2e_seed_acme_idea_obsolete` newly captured during this chore's tangential sweep, `chore_studies_post_arq_spy_fixture`, `chore_template_library_expansion`, `chore_e2e_seed_acme_helper_dead` Backlog — though the last one is itself obsolete per the new tangential capture).). Prior: none in flight (PR #215 closed `chore_study_default_stop_conditions` on 2026-05-23 — first MVP1.0-cleanup chore from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Remaining MVP1.0 backlog is 2 P2 chores + 1 Backlog chore.). Prior: none in flight (PR #213 closed `bug_dashboard_banner_dismiss_persistence_flake` on 2026-05-23 — fifth MVP1.0-cleanup bug, last `bug_*` item in the operator's MVP1.0 cleanup queue. Only this finalization docs PR remains. Remaining MVP1.0 backlog is 3 P2 chores + 1 Backlog chore.). Prior: none in flight (PR #211 closed `bug_dashboard_classifier_half_step_releases` on 2026-05-23 — fourth MVP1.0-cleanup bug; restores trust in `/pipeline status` priority ordering by routing MVP1.5 features to their own dashboard. Only this finalization docs PR remains. The MVP1_DASHBOARD.md's Idea-table top is now correctly an MVP1.0 item.). Prior: none in flight (PR #208 closed `bug_dashboard_depends_on_column_bloat` on 2026-05-23 — third MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Dashboard "Depends on" column now time-ordered for shipped features; `feat_chat_agent` 46→10 entries, `chore_tutorial_polish` 42→11. Side effect captured as [`chore_dashboard_pr_extraction_from_idea/idea.md`](docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/idea.md) — legacy implemented features with only `idea.md` lose their PR# at extraction time, leaving ~1 missing edge per legacy feature in same-day peers' deps). Prior: none in flight (PR #206 closed `bug_contract_test_stub_missing_target_filter_kwarg` on 2026-05-23 — second MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Contract-test stubs now match the `SearchAdapter` Protocol's `target_filter` kwarg; 291 contract tests pass clean). Prior: none in flight (PR #204 closed `bug_pr_reconciler_blocked_by_closed_fallback` on 2026-05-23 — first MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Side effect captured as [`chore_reconciler_terminal_closed_no_poll/idea.md`](docs/02_product/planned_features/chore_reconciler_terminal_closed_no_poll/idea.md) — widened candidate query now polls genuinely-closed-unmerged proposals; bounded no-op but worth a `last_polled_at` polish layer). Prior: none in flight (PR #202 closed `feat_config_repo_baseline_tracking` on 2026-05-23 as the **32nd MVP1-era artifact** merged; only this finalization docs PR remains. Substrate for the downstream `feat_auto_followup_studies` work — tracks the most recently merged proposal per config_repo via a denormalized FK, exposed on ConfigRepoDetail + ProposalSummary + a proposals-page filter chip. Captured pre-existing reconciler bug `bug_pr_reconciler_blocked_by_closed_fallback` as a separate planned idea — out of scope for the merge; documented limitation surfaced in `webhook-debugging.md §8`). Prior: none in flight (PR #200 introduced the MVP1.5 / v0.1.5 "Real Signals" release tier on 2026-05-23 as a **planning artifact, not a shipped feature** — added `feat_ubi_judgments` (P1) and `bug_dashboard_depends_on_column_bloat` (P2) ideas + spec patches + canonical-matrix update; only the docs/finalize-mvp1-5-ubi-foundation finalization docs PR remains). Prior: none in flight (PR #198 closed `infra_ir_measures_migration` on 2026-05-23 as the **31st MVP1-era artifact** merged; only this finalization docs PR remains). Prior: none in flight (PR #195 closed `chore_guides_glossary_route` + `chore_guides_faq` + `chore_guide_06_screenshot_refresh_confidence_panel` on 2026-05-22; only this finalization docs PR remains. The three siblings shipped bundled per "one branch, one PR" memory). Prior: none in flight (PR #193 closed `feat_study_preflight_overlap_probe` on 2026-05-22 as the **27th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #191 closed `feat_orchestrator_zero_streak_abort` on 2026-05-22 as the **26th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #188 closed `feat_home_first_run_demo_nudge` on 2026-05-22 as the **25th MVP1 feature** merged; only finalization docs PR remains. Phase 2 reseed-endpoint work captured in [`feat_home_demo_reseed_endpoint/idea.md`](docs/02_product/planned_features/feat_home_demo_reseed_endpoint/idea.md)). Prior: none in flight (PR #186 closed `chore_e2e_test_rows_isolation` on 2026-05-21 as the **24th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #184 closed `feat_study_target_judgment_mismatch_guard` on 2026-05-21 as the **23rd MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #180 closed `feat_pr_metric_confidence` on 2026-05-21 as the **22nd MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #175 closed `feat_agent_propose_search_space` on 2026-05-21; only finalization docs PR remains for the 21st MVP1 feature). Prior — none in flight (PR #168 closed `feat_cluster_target_filter` + PR #169 closed `chore_seed_meaningful_demos` on 2026-05-20; only finalization docs PR remains for the 20th MVP1 feature). Prior — none in flight (PR #165 closed `feat_create_study_target_autocomplete` + the bundled `bug_get_schema_unhandled_connect_error` fix on 2026-05-20). Prior — none in flight (PR #163 closed `feat_create_study_search_space_builder` + the `bug_judgment_lists_listing_ignores_query_set_filter` bundled fix on 2026-05-20). PR #168 closed `feat_cluster_target_filter` + PR #169 closed `chore_seed_meaningful_demos` (sibling). **Three PRs shipped 2026-05-15:** PR #122 (Phase 1, 16th MVP1 feature — Tooltip primitive + 26 placements on create-study modal + study detail), PR #123 (Phase 1 finalization docs), PR #124 (Phases 2 + 3 — 17th MVP1 feature; 21 additional tooltips on judgments + proposals + cluster registration + 2 new first-run components: chat ExamplePrompts strip + Stripe-style StartHereChecklist on home page). The original "MVP1 Phase 1 only" scope-lock was reversed mid-day: operator decided to ship Phases 2 + 3 together with a Stripe-style design call rather than wait for MVP2. PR #124 took 2 hours from idea-folder reuse to merge. 47 total tooltip placements + 2 new first-run components live in `main`. **PR #122 shipped 2026-05-15 morning** — `feat_contextual_help` Phase 1 (16th MVP1 feature). Adds the first Tooltip primitive (`@radix-ui/react-tooltip@~1.2.8` + shadcn-style wrapper at `ui/src/components/ui/tooltip.tsx`), two glossary-backed wrappers (`InfoTooltip` standalone + asChild modes; `HelpPopover` click-to-open with `react-markdown` safety filter), and a 49-key glossary source-of-truth at `ui/src/lib/glossary.ts` (8 enum groups parity-tested against `enums.ts`). 26 tooltip placements across the create-study modal (Step 1 target + Step 3 template + 9 Step 5 inputs), study-header (status badge dynamic key + Best metric + Trials), trials-table (5 column headers + Sort label), and digest panel (5 section labels + Open PR enabled + Open PR disabled). The disabled Open PR button refactored from native `disabled` to `aria-disabled="true"` so it stays focusable and the tooltip reveals on focus (AC-11). Gemini Code Assist: 2 findings (1 accepted + fixed, 1 rejected with cited counter-evidence). Final GPT-5.5 review: 1 Medium accepted-framing-but-deferred. Spec converged at GPT-5.5 cycle 3 (24 findings, 23 accepted + 1 rejected); plan converged at cycle 2 (12 findings, 10 accepted + 1 rejected + 1 spec patch). UI vitest now **279 passing across 48 files** (was 249 across 45 — +3 new test files, +30 cases). Playwright E2E **8 passing** (was 5 — +3 new contextual-help tests). One follow-up filed: `infra_e2e_seed_completed_study/idea.md` tracks the E2E gap for digest-panel triggers + AC-11 (cross-subsystem helper for seeding a completed study with digest + proposal; component-level coverage is in place). Phases 2 + 3 deferred to MVP2 via `feat_contextual_help_mvp2/` (judgments + proposals tooltips; chat + cluster + home onboarding; the home-page "Start here" panel is the only product-design-shaped item). +- **Branch:** `docs/finalize-dashboard-pr-extraction-from-idea` — finalization docs PR after PR #221 (`8a6452d5`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_dashboard_pr_extraction_from_idea/` per CLAUDE.md convention. `feature/chore-dashboard-pr-extraction-from-idea` branch will be cleaned up via `gh pr merge --delete-branch` when this finalization PR merges. Also adds tangential `chore_dashboard_regen_quoted_pr_false_positive` idea capturing the pre-existing priority-3 fuzzy-regex weakness surfaced during empirical verification. Earlier: `docs/finalize-migration-test-head-brittleness` — finalization docs PR after PR #219 (`63cb7c41`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_migration_test_head_brittleness/` per CLAUDE.md convention. `feature/chore-migration-test-head-brittleness` branch deleted post-merge. Earlier: `docs/finalize-chore-study-default-stop-conditions` — finalization docs PR after PR #215 (`370c87d9`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_study_default_stop_conditions/` per CLAUDE.md convention. `feature/chore-study-default-stop-conditions` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-reconciler-no-poll` — finalization docs PR after PR #216 (`95d4c414`) merged 2026-05-23; moves the chore folder to `implemented_features/2026_05_23_chore_reconciler_terminal_closed_no_poll/` per CLAUDE.md convention. `chore/reconciler-terminal-closed-no-poll` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-dashboard-banner-dismiss-persistence-flake` — finalization docs PR after PR #213 (`a8b788c`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_banner_dismiss_persistence_flake/` per CLAUDE.md convention. `bug/dashboard-banner-dismiss-persistence-flake` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-dashboard-classifier-half-step-releases` — finalization docs PR after PR #211 (`ab8674a`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_classifier_half_step_releases/` per CLAUDE.md convention. `bug/dashboard-classifier-missing-mvp1-5` branch deleted post-merge by `gh pr merge --delete-branch` (note: the local branch name retains the pre-rename slug since the rename happened mid-fix). Earlier: `docs/finalize-dashboard-depends-on-column-bloat` — finalization docs PR after PR #208 (`8bb7148`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_dashboard_depends_on_column_bloat/` per CLAUDE.md convention. `bug/dashboard-depends-on-column-bloat` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-contract-test-stub-target-filter-kwarg` — finalization docs PR after PR #206 (`d3fbbce`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_contract_test_stub_missing_target_filter_kwarg/` per CLAUDE.md convention. `bug/contract-test-stub-target-filter-kwarg` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-pr-reconciler-blocked-by-closed-fallback` — finalization docs PR after PR #204 (`a0ca5b9`) merged 2026-05-23; moves the bug folder to `implemented_features/2026_05_23_bug_pr_reconciler_blocked_by_closed_fallback/` per CLAUDE.md convention. `bug/pr-reconciler-blocked-by-closed-fallback` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-config-repo-baseline-tracking` — finalization docs PR after PR #202 (`435badf`) merged 2026-05-23; moves the feature folder to `implemented_features/2026_05_23_feat_config_repo_baseline_tracking/` per CLAUDE.md convention. `feature/config-repo-baseline-tracking` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `feature/config-repo-baseline-tracking` — implementation branch for `feat_config_repo_baseline_tracking` (32nd MVP1-era artifact). 10 stories across 3 epics shipped: Alembic 0016 (config_repos.last_merged_proposal_id + FK + partial index + backfill), three new repo helpers (update_config_repo_last_merged_pointer with SELECT FOR UPDATE + strict-monotonic-timestamp guard, find_currently_live_proposal_ids, get_config_repo_with_last_merged_proposal), webhook handler patch at github.py:181-194 (FR-3), pr_reconcile.py patch at line 173 (FR-3a — with documented limitation for the `merged_at=null` fallback path captured as bug_pr_reconciler_blocked_by_closed_fallback), ConfigRepoDetail.last_merged_proposal API field with embed-side is_currently_live=True derivation, ProposalSummary/Detail.is_currently_live pointer-only derivation in the existing batch serializer, ?is_last_merged=true|false NULL-safe EXISTS/NOT EXISTS filter, frontend via on both proposals table rows + proposal detail page header, two new glossary entries (proposal.currently_live + proposal.currently_live_filter), and a two-state "Currently live only" filter chip on /proposals with empty-state copy override. Backend 1128 unit tests passing; integration + contract tests written for AC-1..AC-15 (skip locally without Postgres but run in CI); ui/src/lib/types.ts manually patched with the three new fields; UI vitest case for the badge added. Spec converged at GPT-5.5 cycle 3 (21 findings: 15 cycle-1 + 5 cycle-2 + 1 cycle-3, all accepted, 0 rejected); plan converged at GPT-5.5 cycle 3 (17 findings: 14 cycle-1 + 3 cycle-2 + 0 cycle-3, 15 accepted + 2 rejected with codebase counter-evidence). Earlier: `docs/finalize-mvp1-5-ubi-foundation` — finalization docs PR after PR #200 (`594f7b4`) merged 2026-05-23; introduced the MVP1.5 / v0.1.5 "Real Signals" release tier (planning artifact — `feat_ubi_judgments` (P1) + `bug_dashboard_depends_on_column_bloat` (P2) idea files + canonical-matrix update). `feature/mvp1-5-ubi-foundation` branch deleted post-merge. Earlier: `docs/finalize-ir-measures-migration` — finalization docs PR after PR #198 (`350b2fc`) merged 2026-05-23; moves the feature folder to `implemented_features/2026_05_23_infra_ir_measures_migration/` per CLAUDE.md convention. `feature/infra-ir-measures-migration` branch deleted post-merge by the user. Earlier: `docs/finalize-guides-glossary-faq-and-regen` — finalization docs PR after PR #195 (`ea2b242`) merged 2026-05-22; moves the three planned-feature folders to `implemented_features/` per CLAUDE.md convention. `feature/guides-glossary-faq-and-regen` branch deleted post-merge by `gh pr merge --delete-branch`. Earlier: `docs/finalize-study-preflight-overlap-probe` — finalization docs PR after PR #193 (`ca835e0`) merged 2026-05-22. `feature/study-preflight-overlap-probe` branch deleted post-merge. Earlier: `docs/finalize-orchestrator-zero-streak-abort` — finalization docs PR after PR #191 (`51ae4b3c`) merged 2026-05-22. `feature/orchestrator-zero-streak-abort` branch deleted post-merge. Earlier: `docs/finalize-home-first-run-demo-nudge` — finalization docs PR after PR #188 (`21325432`) merged 2026-05-22. `feature/home-first-run-demo-nudge` branch deleted post-merge. Earlier: `docs/finalize-e2e-test-rows-isolation` — finalization docs PR after PR #186 (`a444b94`) merged 2026-05-21. `chore/e2e-test-rows-isolation` branch deleted post-merge. Earlier: `docs/finalize-study-target-judgment-mismatch-guard` — finalization docs PR after PR #184 (`ce3fcf4`) merged 2026-05-21. `feature/study-target-judgment-mismatch-guard` branch deleted post-merge. Earlier: `docs/finalize-pr-metric-confidence` — finalization docs PR after PR #180 (`d0a8358`) merged 2026-05-21. `feat_pr_metric_confidence` branch deleted post-merge. Earlier: `docs/finalize-agent-propose-search-space` — finalization docs PR after PR #175 (`5d29355`) merged 2026-05-21. `feature/agent-propose-search-space` deleted post-merge. Earlier: `docs/finalize-cluster-target-filter` — finalization docs PR after PR #168 (`57d3ba0`) + PR #169 (`c44d774`) both merged. Prior `main` post-merge of PR #168 squash `57d3ba0` (`feat_cluster_target_filter`) + PR #169 squash `c44d774` (`chore_seed_meaningful_demos`) 2026-05-20. Earlier: PR #165 squash commit `bd4516a` 2026-05-20. Finalization docs branch `docs/finalize-create-study-target-autocomplete`. Prior squash same day: PR #163 `c703953` (`feat_create_study_search_space_builder`). Finalization docs PR off `docs/finalize-create-study-search-space-builder`. Prior squashes (same day): PR #161 `0879df2` (`chore_create_study_modal_e2e_stability`), PR #160 `160ff6b` (`bug_err_metric_frontend_backend_drift`), PR #159 `52e106d` (`bug_tutorial_template_param_boost_naming`), PR #158 `308c315` (finalize chore_create_study_wizard_polish), PR #157 `075c46b` (`chore_create_study_wizard_polish`). Prior squash: PR #155 `9a72514` 2026-05-19. Prior squashes: PR #154 `ed4121f` 2026-05-19 (`chore_form_dropdown_guide_screenshot_refresh`), PR #153 `199e225` 2026-05-19 (`chore_extract_shadcn_select_test_mock`), PR #152 `476db78` 2026-05-19 (`chore_ci_prettier_check`), PR #151 `110dc5a` 2026-05-19 (finalize chore_data_table_columnvisibility_tanstack), PR #150 `c1e4545` 2026-05-19 (`chore_data_table_columnvisibility_tanstack`), PR #149 `da9506b` 2026-05-19 (finalize infra_e2e_wire_seed_helper_into_studies_spec), PR #148 `65f4150` 2026-05-19 (`infra_e2e_wire_seed_helper_into_studies_spec` — `?study_id=` filter bug + E2E test restore), PR #147 `8854e47` 2026-05-18 (capture chore_detail_page_shell_primitive idea), PR #146 `7299fca` 2026-05-18 (bug_install_skip_ui_rebuild — `make up`/`make down` lifecycle fix), PR #136 `cb7d9ee` 2026-05-18 (chore_form_dropdown_primitive), PR #132 `ee4c8d4` 2026-05-17 (chore_data_table_primitive_followups items 1+2+4+6), PR #130 `13b3383` 2026-05-17 (infra_e2e_seed_completed_study), PR #128 `73459d2` 2026-05-17 (bug_cursor_decode_value_validation), PR #126 `d6115b3` 2026-05-16 (feat_data_table_primitive). `v0.1.0` annotated tag still on `main` commit `d099536` 2026-05-13; GitHub Release at https://github.com/SoundMindsAI/relyloop/releases/tag/v0.1.0. +- **Active feature:** none in flight (PR #221 closed `chore_dashboard_pr_extraction_from_idea` on 2026-05-23 — third MVP1.0-cleanup chore from the operator's stated "finish MVP1.0 before MVP1.5" sweep. Build-script-only refactor; extends `_extract_pr_number` with idea-aware extraction so legacy idea-only implemented folders surface their PRs in the dashboard's Status column; also adds a one-liner fallback per Gemini cycle 1 that materially improves rendering of many idea-only rows. Only this finalization docs PR remains. New tangential `chore_dashboard_regen_quoted_pr_false_positive` (P3) captures the pre-existing priority-3 fuzzy-regex weakness for future hardening. Remaining MVP1.0 backlog per dashboard Idea table: 3 P2 chores + 1 Backlog chore + 1 P3 (`chore_studies_post_arq_spy_fixture`, `chore_template_library_expansion`, `chore_e2e_seed_acme_idea_obsolete`, plus the new `chore_dashboard_regen_quoted_pr_false_positive` at P3, plus `chore_e2e_seed_acme_helper_dead` at Backlog).). Prior: none in flight (PR #219 closed `chore_migration_test_head_brittleness` on 2026-05-23 — second MVP1.0-cleanup chore from the operator's stated "finish MVP1.0 before MVP1.5" sweep. Test-only refactor; eliminates the recurring 2-lines-per-migration sympathy-edit tax on `backend/tests/integration/test_migrations.py`. Only this finalization docs PR remains. Remaining MVP1.0 backlog per dashboard Idea table: 4 P2 chores + 1 Backlog chore (`chore_dashboard_pr_extraction_from_idea`, `chore_e2e_seed_acme_idea_obsolete` newly captured during this chore's tangential sweep, `chore_studies_post_arq_spy_fixture`, `chore_template_library_expansion`, `chore_e2e_seed_acme_helper_dead` Backlog — though the last one is itself obsolete per the new tangential capture).). Prior: none in flight (PR #215 closed `chore_study_default_stop_conditions` on 2026-05-23 — first MVP1.0-cleanup chore from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Remaining MVP1.0 backlog is 2 P2 chores + 1 Backlog chore.). Prior: none in flight (PR #213 closed `bug_dashboard_banner_dismiss_persistence_flake` on 2026-05-23 — fifth MVP1.0-cleanup bug, last `bug_*` item in the operator's MVP1.0 cleanup queue. Only this finalization docs PR remains. Remaining MVP1.0 backlog is 3 P2 chores + 1 Backlog chore.). Prior: none in flight (PR #211 closed `bug_dashboard_classifier_half_step_releases` on 2026-05-23 — fourth MVP1.0-cleanup bug; restores trust in `/pipeline status` priority ordering by routing MVP1.5 features to their own dashboard. Only this finalization docs PR remains. The MVP1_DASHBOARD.md's Idea-table top is now correctly an MVP1.0 item.). Prior: none in flight (PR #208 closed `bug_dashboard_depends_on_column_bloat` on 2026-05-23 — third MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Dashboard "Depends on" column now time-ordered for shipped features; `feat_chat_agent` 46→10 entries, `chore_tutorial_polish` 42→11. Side effect captured as [`chore_dashboard_pr_extraction_from_idea/idea.md`](docs/02_product/planned_features/chore_dashboard_pr_extraction_from_idea/idea.md) — legacy implemented features with only `idea.md` lose their PR# at extraction time, leaving ~1 missing edge per legacy feature in same-day peers' deps). Prior: none in flight (PR #206 closed `bug_contract_test_stub_missing_target_filter_kwarg` on 2026-05-23 — second MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Contract-test stubs now match the `SearchAdapter` Protocol's `target_filter` kwarg; 291 contract tests pass clean). Prior: none in flight (PR #204 closed `bug_pr_reconciler_blocked_by_closed_fallback` on 2026-05-23 — first MVP1.0-cleanup bug from the operator's stated "finish MVP1.0 before MVP1.5" sweep; only this finalization docs PR remains. Side effect captured as [`chore_reconciler_terminal_closed_no_poll/idea.md`](docs/02_product/planned_features/chore_reconciler_terminal_closed_no_poll/idea.md) — widened candidate query now polls genuinely-closed-unmerged proposals; bounded no-op but worth a `last_polled_at` polish layer). Prior: none in flight (PR #202 closed `feat_config_repo_baseline_tracking` on 2026-05-23 as the **32nd MVP1-era artifact** merged; only this finalization docs PR remains. Substrate for the downstream `feat_auto_followup_studies` work — tracks the most recently merged proposal per config_repo via a denormalized FK, exposed on ConfigRepoDetail + ProposalSummary + a proposals-page filter chip. Captured pre-existing reconciler bug `bug_pr_reconciler_blocked_by_closed_fallback` as a separate planned idea — out of scope for the merge; documented limitation surfaced in `webhook-debugging.md §8`). Prior: none in flight (PR #200 introduced the MVP1.5 / v0.1.5 "Real Signals" release tier on 2026-05-23 as a **planning artifact, not a shipped feature** — added `feat_ubi_judgments` (P1) and `bug_dashboard_depends_on_column_bloat` (P2) ideas + spec patches + canonical-matrix update; only the docs/finalize-mvp1-5-ubi-foundation finalization docs PR remains). Prior: none in flight (PR #198 closed `infra_ir_measures_migration` on 2026-05-23 as the **31st MVP1-era artifact** merged; only this finalization docs PR remains). Prior: none in flight (PR #195 closed `chore_guides_glossary_route` + `chore_guides_faq` + `chore_guide_06_screenshot_refresh_confidence_panel` on 2026-05-22; only this finalization docs PR remains. The three siblings shipped bundled per "one branch, one PR" memory). Prior: none in flight (PR #193 closed `feat_study_preflight_overlap_probe` on 2026-05-22 as the **27th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #191 closed `feat_orchestrator_zero_streak_abort` on 2026-05-22 as the **26th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #188 closed `feat_home_first_run_demo_nudge` on 2026-05-22 as the **25th MVP1 feature** merged; only finalization docs PR remains. Phase 2 reseed-endpoint work captured in [`feat_home_demo_reseed_endpoint/idea.md`](docs/02_product/planned_features/feat_home_demo_reseed_endpoint/idea.md)). Prior: none in flight (PR #186 closed `chore_e2e_test_rows_isolation` on 2026-05-21 as the **24th MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #184 closed `feat_study_target_judgment_mismatch_guard` on 2026-05-21 as the **23rd MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #180 closed `feat_pr_metric_confidence` on 2026-05-21 as the **22nd MVP1 feature** merged; only finalization docs PR remains). Prior: none in flight (PR #175 closed `feat_agent_propose_search_space` on 2026-05-21; only finalization docs PR remains for the 21st MVP1 feature). Prior — none in flight (PR #168 closed `feat_cluster_target_filter` + PR #169 closed `chore_seed_meaningful_demos` on 2026-05-20; only finalization docs PR remains for the 20th MVP1 feature). Prior — none in flight (PR #165 closed `feat_create_study_target_autocomplete` + the bundled `bug_get_schema_unhandled_connect_error` fix on 2026-05-20). Prior — none in flight (PR #163 closed `feat_create_study_search_space_builder` + the `bug_judgment_lists_listing_ignores_query_set_filter` bundled fix on 2026-05-20). PR #168 closed `feat_cluster_target_filter` + PR #169 closed `chore_seed_meaningful_demos` (sibling). **Three PRs shipped 2026-05-15:** PR #122 (Phase 1, 16th MVP1 feature — Tooltip primitive + 26 placements on create-study modal + study detail), PR #123 (Phase 1 finalization docs), PR #124 (Phases 2 + 3 — 17th MVP1 feature; 21 additional tooltips on judgments + proposals + cluster registration + 2 new first-run components: chat ExamplePrompts strip + Stripe-style StartHereChecklist on home page). The original "MVP1 Phase 1 only" scope-lock was reversed mid-day: operator decided to ship Phases 2 + 3 together with a Stripe-style design call rather than wait for MVP2. PR #124 took 2 hours from idea-folder reuse to merge. 47 total tooltip placements + 2 new first-run components live in `main`. **PR #122 shipped 2026-05-15 morning** — `feat_contextual_help` Phase 1 (16th MVP1 feature). Adds the first Tooltip primitive (`@radix-ui/react-tooltip@~1.2.8` + shadcn-style wrapper at `ui/src/components/ui/tooltip.tsx`), two glossary-backed wrappers (`InfoTooltip` standalone + asChild modes; `HelpPopover` click-to-open with `react-markdown` safety filter), and a 49-key glossary source-of-truth at `ui/src/lib/glossary.ts` (8 enum groups parity-tested against `enums.ts`). 26 tooltip placements across the create-study modal (Step 1 target + Step 3 template + 9 Step 5 inputs), study-header (status badge dynamic key + Best metric + Trials), trials-table (5 column headers + Sort label), and digest panel (5 section labels + Open PR enabled + Open PR disabled). The disabled Open PR button refactored from native `disabled` to `aria-disabled="true"` so it stays focusable and the tooltip reveals on focus (AC-11). Gemini Code Assist: 2 findings (1 accepted + fixed, 1 rejected with cited counter-evidence). Final GPT-5.5 review: 1 Medium accepted-framing-but-deferred. Spec converged at GPT-5.5 cycle 3 (24 findings, 23 accepted + 1 rejected); plan converged at cycle 2 (12 findings, 10 accepted + 1 rejected + 1 spec patch). UI vitest now **279 passing across 48 files** (was 249 across 45 — +3 new test files, +30 cases). Playwright E2E **8 passing** (was 5 — +3 new contextual-help tests). One follow-up filed: `infra_e2e_seed_completed_study/idea.md` tracks the E2E gap for digest-panel triggers + AC-11 (cross-subsystem helper for seeding a completed study with digest + proposal; component-level coverage is in place). Phases 2 + 3 deferred to MVP2 via `feat_contextual_help_mvp2/` (judgments + proposals tooltips; chat + cluster + home onboarding; the home-page "Start here" panel is the only product-design-shaped item). **Earlier — seven PRs shipped 2026-05-14:** `feat_judgments_periodic_resume_sweep` (PR #104, 14th MVP1 feature), `bug_query_inline_crud_since_filter_uuidv7_ms_collision` (PR #106 — UUIDv7 ms-collision test flake), `infra_dashboard_regen_pre_commit_conflict §2+§4` (PR #108 — dashboard regen idempotency + relative-link rewriting), `infra_make_targets_split_backend_only` (PR #110 — `make backend-fmt/lint/typecheck` + symmetric `ui-fmt` so Node-18 contributors aren't blocked), `chore_digest_worker_narrow_except` (PR #112 — narrowed `except Exception` allowlist to `(ValueError,)` + ERROR-level `digest_importance_failed_unexpected` event), `infra_structlog_test_helpers` (PR #114 — factored the two structlog test-assertion patterns into `backend/tests/_log_helpers.py`), and `chore_chat_last_message_preview` (PR #117 — `last_message_preview` + `last_message_at` on `ConversationSummary` via LATERAL JOIN; frontend shows preview under title + swaps displayed timestamp from `created_at` to `last_message_at`). Plus PR #116 dropped `chore_studies_ui_shadcn_polish` as won't-do (forward-compat audit on NavigationMenu primitive + ClusterFilterSelect precedent on native `