From 51154b45f3fd156b38006d602d0af7d1b883f40d Mon Sep 17 00:00:00 2001 From: SoundMindsAI Date: Wed, 20 May 2026 12:36:00 -0400 Subject: [PATCH] docs: finalize feat_create_study_search_space_builder + bundled bug fix (PR #163) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Step 8 finalization for PR #163 (squash commit c703953, merged 2026-05-20). - pipeline_status.md: Implementation marked Complete with PR + CI + tests + reviews. - implementation_plan.md: Status flipped from Draft → Complete (PR #163). - state.md: bumped Last updated + new most-recent-changes entry + active-feature reset. - Folder moves to docs/00_overview/implemented_features/: * 2026_05_20_feat_create_study_search_space_builder/ * 2026_05_20_bug_judgment_lists_listing_ignores_query_set_filter/ - feat_create_study_target_autocomplete/ stays in planned_features/ (deferred UX gap). - Regenerated MVP1 dashboard via pre-commit hook. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/00_overview/DASHBOARD.md | 2 +- docs/00_overview/MVP1_DASHBOARD.md | 31 +++---- docs/00_overview/dashboard.html | 2 +- .../idea.md | 0 .../feature_spec.md | 0 .../idea.md | 0 .../implementation_plan.md | 2 +- .../pipeline_status.md | 30 +++++++ docs/00_overview/mvp1_dashboard.html | 87 ++++++++++--------- .../pipeline_status.md | 23 ----- state.md | 8 +- 11 files changed, 95 insertions(+), 90 deletions(-) rename docs/{02_product/planned_features/bug_judgment_lists_listing_ignores_query_set_filter => 00_overview/implemented_features/2026_05_20_bug_judgment_lists_listing_ignores_query_set_filter}/idea.md (100%) rename docs/{02_product/planned_features/feat_create_study_search_space_builder => 00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder}/feature_spec.md (100%) rename docs/{02_product/planned_features/feat_create_study_search_space_builder => 00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder}/idea.md (100%) rename docs/{02_product/planned_features/feat_create_study_search_space_builder => 00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder}/implementation_plan.md (99%) create mode 100644 docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/pipeline_status.md delete mode 100644 docs/02_product/planned_features/feat_create_study_search_space_builder/pipeline_status.md diff --git a/docs/00_overview/DASHBOARD.md b/docs/00_overview/DASHBOARD.md index d2188ec5..c03f7162 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-20**. Click a release na | Release | Theme | Progress | Status | |---|---|---|---| -| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 48 / 49 scoped done · 3 remaining | **In progress** | +| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 49 / 49 scoped done · 1 remaining | **In progress** | | [MVP2 / v0.2](MVP2_DASHBOARD.md) | Observable | 1 / 1 scoped done · 1 remaining | **In progress** | | MVP3 / v0.3 | Production Stacks | — | **Not yet scoped** | | MVP4 / v0.4 | Multi-tenant, Multi-LLM | — | **Not yet scoped** | diff --git a/docs/00_overview/MVP1_DASHBOARD.md b/docs/00_overview/MVP1_DASHBOARD.md index 4a570b0e..9d85b1ad 100644 --- a/docs/00_overview/MVP1_DASHBOARD.md +++ b/docs/00_overview/MVP1_DASHBOARD.md @@ -6,33 +6,30 @@ _Reflects feature-folder state as of **2026-05-20** (latest mtime of any planned ## Next up -**[feat_create_study_search_space_builder](../02_product/planned_features/feat_create_study_search_space_builder/feature_spec.md)** — Feature, currently in **Plan** +All scoped MVP1 features shipped 🎉 -Plan approved; run /impl-execute to ship - -```bash -/impl-execute docs/02_product/planned_features/feat_create_study_search_space_builder/implementation_plan.md --all -``` +Pull from the Idea backlog or capture a new feature spec. ## MVP1 Progress | Metric | Value | |---|---| -| Scoped items done | **48 / 49** (98%) — feat_/infra_/chore_/epic_ past idea stage | -| Path to MVP1 | **3** items remaining (features + bugs + chores) | -| Open bugs | 1 | +| Scoped items done | **49 / 49** (100%) — feat_/infra_/chore_/epic_ past idea stage | +| Path to MVP1 | **1** items remaining (features + bugs + chores) | +| Open bugs | 0 | | Open chores | 1 (idea-stage debt) | | Backlog ideas | 3 idea-only feat/infra (not yet scoped into MVP1) | | In flight | 0 feature(s) actively shipping | ## Pipeline -### Done (57) +### Done (59) | Feature | Type | One-liner | Depends on | Status | |---|---|---|---|---| | [feat_chat_agent](implemented_features/2026_05_12_feat_chat_agent/feature_spec.md) | Feature | A chat surface at `/chat/{conversation_id}` streams OpenAI completions via SSE. | `feat_agent_propose_search_space` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` | [PR #60](https://github.com/SoundMindsAI/relyloop/pull/60) merged 2026-05-12 | | [feat_contextual_help](implemented_features/2026_05_15_feat_contextual_help/feature_spec.md) | Feature | a relevance engineer can launch their second study and interpret its digest without re-reading the tutorial, because every domain-jargon label has a one-click contextual definition grounded in the sam | — | [PR #122](https://github.com/SoundMindsAI/relyloop/pull/122) merged 2026-05-15 | +| [feat_create_study_search_space_builder](implemented_features/2026_05_20_feat_create_study_search_space_builder/feature_spec.md) | Feature | Complete (PR #163, squash commit `c703953`, merged 2026-05-20) | — | [PR #163](https://github.com/SoundMindsAI/relyloop/pull/163) merged 2026-05-20 | | [feat_data_table_primitive](implemented_features/2026_05_16_feat_data_table_primitive/feature_spec.md) | Feature | Complete (PR #126, merged 2026-05-16) | — | [PR #126](https://github.com/SoundMindsAI/relyloop/pull/126) merged 2026-05-16 | | [feat_digest_proposal](implemented_features/2026_05_11_feat_digest_proposal/feature_spec.md) | Feature | When a study transitions to `completed`, the digest worker generates: a narrative summary (LLM-authored), a parameter-importance map (computed by `optuna.importance`), and a recommended config. | `feat_study_lifecycle` `feat_llm_judgments` | [PR #41](https://github.com/SoundMindsAI/relyloop/pull/41) merged 2026-05-11 | | [feat_github_pr_worker](implemented_features/2026_05_12_feat_github_pr_worker/feature_spec.md) | Feature | `POST /api/v1/proposals/{id}/open_pr` enqueues a Git worker job that clones the configured repo, edits `*.params.json`, commits with a structured message, pushes a branch, opens a GitHub PR, attaches | `infra_foundation` `infra_adapter_elastic` `feat_study_lifecycle` `feat_digest_proposal` | [PR #45](https://github.com/SoundMindsAI/relyloop/pull/45) merged 2026-05-12 | @@ -84,6 +81,7 @@ Plan approved; run /impl-execute to ship | [bug_digest_param_importance_seam](implemented_features/2026_05_13_bug_digest_param_importance_seam/idea.md) | Bug | Complete | — | Complete | | [bug_dockerfile_missing_prompts](implemented_features/2026_05_13_bug_dockerfile_missing_prompts/idea.md) | Bug | Complete | — | Complete | | [bug_env_file_corrupted_during_session](implemented_features/2026_05_13_bug_env_file_corrupted_during_session/idea.md) | Bug | Complete | — | Complete | +| [bug_judgment_lists_listing_ignores_query_set_filter](implemented_features/2026_05_20_bug_judgment_lists_listing_ignores_query_set_filter/idea.md) | Bug | Complete | — | Complete | | [bug_judgment_template_default_params_contract](implemented_features/2026_05_13_bug_judgment_template_default_params_contract/idea.md) | Bug | Complete | — | Complete | | [bug_query_inline_crud_since_filter_uuidv7_ms_collision](implemented_features/2026_05_14_bug_query_inline_crud_since_filter_uuidv7_ms_collision/idea.md) | Bug | Complete | — | Complete | | [bug_test_smoke_requires_env_vars](implemented_features/2026_05_13_bug_test_smoke_requires_env_vars/idea.md) | Bug | Complete | — | Complete | @@ -93,17 +91,15 @@ Plan approved; run /impl-execute to ship _None._ -### Plan (1) +### Plan (0) -| Feature | Type | One-liner | Depends on | Status | -|---|---|---|---|---| -| [feat_create_study_search_space_builder](../02_product/planned_features/feat_create_study_search_space_builder/feature_spec.md) | Feature | | — | [PR #157](https://github.com/SoundMindsAI/relyloop/pull/157) merged 2026-05-20 | +_None._ ### Spec (0) _None._ -### Idea (5) +### Idea (4) | Feature | Type | One-liner | Depends on | Status | |---|---|---|---|---| @@ -111,7 +107,6 @@ _None._ | [feat_create_study_target_autocomplete](../02_product/planned_features/feat_create_study_target_autocomplete/idea.md) | Feature | The "Target index / collection" field at Step 1 of the create-study modal is a free-text `` (see [`ui/src/components/studies/create-study-modal.tsx:457`](../../ui/src/components/ | — | Idea — surfaced during local verification of PR #163 (`feat_create_study_search_space_builder`) on 2026-05-20. Step 4 builder verification required walking through Step 1, where the UX gap surfaced. | | [feat_study_clone_from_previous](../02_product/planned_features/feat_study_clone_from_previous/idea.md) | Feature | A relevance engineer's normal workflow after the first study completes: | — | Idea — surfaced during a UX review of parameter-tuning ergonomics on 2026-05-19. | | [chore_template_library_expansion](../02_product/planned_features/chore_template_library_expansion/idea.md) | Chore | Three connected gaps: | — | Idea — surfaced during a UX review of parameter-tuning ergonomics on 2026-05-19. | -| [bug_judgment_lists_listing_ignores_query_set_filter](../02_product/planned_features/bug_judgment_lists_listing_ignores_query_set_filter/idea.md) | Bug | The frontend hook at [`ui/src/lib/api/judgments.ts:37-46`](../../ui/src/lib/api/judgments.ts#L37-L46) (`useJudgmentLists`) passes `query_set_id` and `cluster_id` query parameters when listing judgment | — | Bug — surfaced during local verification of PR #163 (`feat_create_study_search_space_builder`). Pre-existing since `feat_llm_judgments` (PR #35, 2026-05-11); not introduced by PR #163. | ## Dependency graph @@ -124,8 +119,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; - feat_create_study_search_space_builder["create study search space builder"] - class feat_create_study_search_space_builder plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -222,6 +215,8 @@ graph LR class chore_create_study_modal_e2e_stability done; chore_create_study_wizard_polish["create study wizard polish"] class chore_create_study_wizard_polish done; + feat_create_study_search_space_builder["create study search space builder"] + class feat_create_study_search_space_builder done; feat_study_lifecycle --> feat_digest_proposal feat_llm_judgments --> feat_digest_proposal infra_foundation --> feat_llm_judgments diff --git a/docs/00_overview/dashboard.html b/docs/00_overview/dashboard.html index f0c6afe7..2bf5a2ef 100644 --- a/docs/00_overview/dashboard.html +++ b/docs/00_overview/dashboard.html @@ -371,7 +371,7 @@

Releases

The Loop
-
48 / 49 scoped done · 3 remaining
+
49 / 49 scoped done · 1 remaining
In progress
diff --git a/docs/02_product/planned_features/bug_judgment_lists_listing_ignores_query_set_filter/idea.md b/docs/00_overview/implemented_features/2026_05_20_bug_judgment_lists_listing_ignores_query_set_filter/idea.md similarity index 100% rename from docs/02_product/planned_features/bug_judgment_lists_listing_ignores_query_set_filter/idea.md rename to docs/00_overview/implemented_features/2026_05_20_bug_judgment_lists_listing_ignores_query_set_filter/idea.md diff --git a/docs/02_product/planned_features/feat_create_study_search_space_builder/feature_spec.md b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/feature_spec.md similarity index 100% rename from docs/02_product/planned_features/feat_create_study_search_space_builder/feature_spec.md rename to docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/feature_spec.md diff --git a/docs/02_product/planned_features/feat_create_study_search_space_builder/idea.md b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/idea.md similarity index 100% rename from docs/02_product/planned_features/feat_create_study_search_space_builder/idea.md rename to docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/idea.md diff --git a/docs/02_product/planned_features/feat_create_study_search_space_builder/implementation_plan.md b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/implementation_plan.md similarity index 99% rename from docs/02_product/planned_features/feat_create_study_search_space_builder/implementation_plan.md rename to docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/implementation_plan.md index 94d37ed7..4ed3acb6 100644 --- a/docs/02_product/planned_features/feat_create_study_search_space_builder/implementation_plan.md +++ b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/implementation_plan.md @@ -1,7 +1,7 @@ # Implementation Plan — Create-Study Search-Space Builder **Date:** 2026-05-20 -**Status:** Draft +**Status:** Complete (PR #163, squash commit `c703953`, merged 2026-05-20) **Primary spec:** [`feature_spec.md`](./feature_spec.md) **Policy source(s):** [`CLAUDE.md`](../../../../CLAUDE.md) §"Enumerated Value Contract Discipline" + §"Frontend Conventions" · [`docs/01_architecture/ui-architecture.md`](../../../01_architecture/ui-architecture.md) §"Form dropdown primitive" + §"DataTable primitive" diff --git a/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/pipeline_status.md b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/pipeline_status.md new file mode 100644 index 00000000..1677fdc7 --- /dev/null +++ b/docs/00_overview/implemented_features/2026_05_20_feat_create_study_search_space_builder/pipeline_status.md @@ -0,0 +1,30 @@ +# Pipeline Status — Create-Study Search-Space Builder + +## Idea +- Status: Complete +- File: [idea.md](./idea.md) + +## Spec +- Status: Approved +- Date: 2026-05-20 +- File: [feature_spec.md](./feature_spec.md) +- Cross-model review: GPT-5.5 — 3 cycles run; all 16 findings (8 cycle-1 high, 4 cycle-2 mixed, 4 cycle-3 medium/low) accepted with cited fixes +- Phases: 1 total, 1 covered by spec (single-phase feature; no deferred Phase 2) + +## Plan +- Status: Approved +- Date: 2026-05-20 +- File: [implementation_plan.md](./implementation_plan.md) +- Cross-model review: GPT-5.5 — 3 cycles run; 27 total findings (13 cycle-1, 8 cycle-2, 6 cycle-3) all accepted with cited fixes +- Stories: 8 stories across 4 epics +- Phases covered: Phase 1 (single-phase feature; no deferred phases) + +## Implementation +- Status: Complete +- Date: 2026-05-20 +- PR: [#163](https://github.com/SoundMindsAI/relyloop/pull/163) (squash commit `c703953`, merged 2026-05-20) +- CI: all 5 jobs green on final commit `d708827` +- Stories completed: 8/8 (all FRs 1–11 implemented; 1 phase, no deferred work) +- Test coverage: 512 vitest assertions / 77 files + 4 real-backend Playwright e2e cases (happy path, type-switch stash, categorical chip coercion, cardinality cap warning) + 2 new backend tests for the bundled bug fix (integration + contract on judgment-list filter) +- Cross-model review: 16 spec findings + 27 plan findings + 3 Gemini findings + 1 GPT-5.5 v2 finding, all 47 accepted with cited fixes +- Bundled bug fix: `bug_judgment_lists_listing_ignores_query_set_filter` — `GET /api/v1/judgment-lists` now honors `query_set_id` + `cluster_id` filters; closes the cross-entity 422 surfaced during local verification diff --git a/docs/00_overview/mvp1_dashboard.html b/docs/00_overview/mvp1_dashboard.html index b99e8687..ed025b70 100644 --- a/docs/00_overview/mvp1_dashboard.html +++ b/docs/00_overview/mvp1_dashboard.html @@ -369,12 +369,12 @@

RelyLoop MVP1 Dashboard

-
-
Next up — Feature, currently in Plan
- -
-
Plan approved; run /impl-execute to ship
- /impl-execute docs/02_product/planned_features/feat_create_study_search_space_builder/implementation_plan.md --all +
+
Next up
+
All scoped MVP1 features shipped 🎉
+
+ Pull from the Idea backlog or capture a new feature spec. +
@@ -382,20 +382,20 @@

RelyLoop MVP1 Dashboard

MVP1 Progress

-
+
Scoped items done
-
48 / 49
-
98% of feat_/infra_/chore_/epic_ items past idea stage
-
+
49 / 49
+
100% of feat_/infra_/chore_/epic_ items past idea stage
+
Path to MVP1
-
3
+
1
items left = features + bugs + chores
-
+
Open bugs
-
1
+
0
tracked bug_* idea files
@@ -428,7 +428,7 @@

Pipeline

-

Idea 5

+

Idea 4

@@ -475,18 +475,6 @@

Idea 5

Three connected gaps:
-
- - -
- -
- Bug - -
-
The frontend hook at [`ui/src/lib/api/judgments.ts:37-46`](../../ui/src/lib/api/judgments.ts#L37-L46) (`useJudgmentLists`) passes `query_set_id` and `cluster_id` query parameters when listing judgment
- -
@@ -497,18 +485,7 @@

Spec 0

-

Plan 1

- -
- -
- Feature - PR #157merged 2026-05-20 -
-
- - -
+

Plan 0

@@ -518,7 +495,7 @@

Implementing 0

-

Done 57

+

Done 59

@@ -544,6 +521,18 @@

Done 57

+
+ +
+ Feature + PR #163merged 2026-05-20 +
+
Complete (PR #163, squash commit `c703953`, merged 2026-05-20)
+ + +
+ +
@@ -1156,6 +1145,18 @@

Done 57

+
+ +
+ Bug + merged 2026-05-20 +
+
Complete
+ + +
+ +
@@ -1216,8 +1217,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; - feat_create_study_search_space_builder["create study search space builder"] - class feat_create_study_search_space_builder plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -1314,6 +1313,8 @@

Dependency graph (feat_ + infra_)

class chore_create_study_modal_e2e_stability done; chore_create_study_wizard_polish["create study wizard polish"] class chore_create_study_wizard_polish done; + feat_create_study_search_space_builder["create study search space builder"] + class feat_create_study_search_space_builder done; feat_study_lifecycle --> feat_digest_proposal feat_llm_judgments --> feat_digest_proposal infra_foundation --> feat_llm_judgments @@ -1395,8 +1396,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; - feat_create_study_search_space_builder["create study search space builder"] - class feat_create_study_search_space_builder plan; infra_foundation["foundation"] class infra_foundation done; feat_study_lifecycle["study lifecycle"] @@ -1493,6 +1492,8 @@

Dependency graph (feat_ + infra_)

class chore_create_study_modal_e2e_stability done; chore_create_study_wizard_polish["create study wizard polish"] class chore_create_study_wizard_polish done; + feat_create_study_search_space_builder["create study search space builder"] + class feat_create_study_search_space_builder done; feat_study_lifecycle --> feat_digest_proposal feat_llm_judgments --> feat_digest_proposal infra_foundation --> feat_llm_judgments diff --git a/docs/02_product/planned_features/feat_create_study_search_space_builder/pipeline_status.md b/docs/02_product/planned_features/feat_create_study_search_space_builder/pipeline_status.md deleted file mode 100644 index 8c99c511..00000000 --- a/docs/02_product/planned_features/feat_create_study_search_space_builder/pipeline_status.md +++ /dev/null @@ -1,23 +0,0 @@ -# Pipeline Status — Create-Study Search-Space Builder - -## Idea -- Status: Complete -- File: [idea.md](./idea.md) - -## Spec -- Status: Approved -- Date: 2026-05-20 -- File: [feature_spec.md](./feature_spec.md) -- Cross-model review: GPT-5.5 — 3 cycles run; all 16 findings (8 cycle-1 high, 4 cycle-2 mixed, 4 cycle-3 medium/low) accepted with cited fixes -- Phases: 1 total, 1 covered by spec (single-phase feature; no deferred Phase 2) - -## Plan -- Status: Approved -- Date: 2026-05-20 -- File: [implementation_plan.md](./implementation_plan.md) -- Cross-model review: GPT-5.5 — 3 cycles run; 27 total findings (13 cycle-1, 8 cycle-2, 6 cycle-3) all accepted with cited fixes -- Stories: 8 stories across 4 epics -- Phases covered: Phase 1 (single-phase feature; no deferred phases) - -## Implementation -- Status: Not started diff --git a/state.md b/state.md index 45dbf68b..eb38d202 100644 --- a/state.md +++ b/state.md @@ -2,14 +2,14 @@ > Read this first. Snapshots the active branch, what just shipped, what's in flight, what's queued, and where the project currently sits in the MVP1 → GA roadmap. Updated whenever a feature lands or a priority shifts. -**Last updated:** 2026-05-20 (after the create-study wizard polish run closed cleanly. The chore itself shipped as PR #157 `075c46b`, then all three follow-up ideas it captured were closed in the same session: PR #159 `52e106d` `bug_tutorial_template_param_boost_naming` (heuristic extension for `_boost` suffix), PR #160 `160ff6b` `bug_err_metric_frontend_backend_drift` (wire-enum trim — `err` removed from frontend + backend Literal), PR #161 `0879df2` `chore_create_study_modal_e2e_stability` (un-skipped the deferred Playwright spec; resolved the flake via `dispatchEvent('click')` on the Radix trigger after `toBeEnabled()` alone wasn't sufficient — the real cause was Playwright's stability heuristic, not state-thrash on `disabled`). Three idea files captured during PR #157 review = three idea files closed within hours of the chore merging.) Earlier (also 2026-05-20) — PR #157 `chore_create_study_wizard_polish` — squash commit `075c46b` — merged into `main`. Ships the 4-surface chore: backend template-mismatch validation at create time (two new error codes `SEARCH_SPACE_UNKNOWN_PARAM` + `SEARCH_SPACE_MISSING_DECLARED_PARAM`), Step-4 auto-fill via the new `ui/src/lib/search-space-defaults.ts` heuristic + cap-aware fallback + TS↔Python cardinality parity fixture, 4 new `study.search_space.*` glossary entries (one dual + three short-only) and 6 extended per-metric entries with k-tier clauses, Step-5 tri-state metric+k rendering with new `K_IGNORED` predicate, plus client-side validation mirror + zero-declared block + 404/transient template-fetch recovery + `__placeholder__` warning. 16 new test files + 2 modified + 1 shared JSON fixture across backend unit/integration/contract + frontend unit/component + 1 skipped E2E. Three follow-up ideas captured: `bug_tutorial_template_param_boost_naming` (tutorial template uses `_boost` suffix not matched by the locked heuristic), `chore_create_study_modal_e2e_stability` (re-enable the skipped Playwright spec once EntitySelect disabled gating stabilizes), `bug_err_metric_frontend_backend_drift` (`err` selectable in wizard but unsupported by `scoring.py`). Gemini Code Assist + GPT-5.5 final-pass both adjudicated on the PR — 2 Gemini findings + 7 GPT-5.5 findings, all addressed or filed.) Earlier 2026-05-19 (after a 4-PR shipping run drained the actionable post-MVP1 chore backlog: PR #152 `chore_ci_prettier_check` (`476db78`) + PR #153 `chore_extract_shadcn_select_test_mock` (`199e225`) + PR #154 `chore_form_dropdown_guide_screenshot_refresh` (`ed4121f`) + PR #155 `chore_detail_page_shell_primitive` (`9a72514`). PR #155 is the third primitive after `` and `` — 6 detail-page migrations + new lint guard + flattens a latent UX bug where only `proposals/[id]` discriminated 404 from network error. Earlier the same session: PR #150 (`chore_data_table_columnvisibility_tanstack`, `c1e4545`) — closes the residual DataTable follow-ups: item 5 migrates the primitive from `columns.filter(...)` to TanStack's `state.columnVisibility` API (memoized per Gemini feedback), item 3 locked the flat-prop `DataTableProps` API as canonical with a "Shipped contract addendum" on the historical implementation plan's Story 2.6. Folder renamed `chore_data_table_primitive_followups` → `chore_data_table_columnvisibility_tanstack`. Earlier 2026-05-19 PR #148 (`infra_e2e_wire_seed_helper_into_studies_spec`, squash `65f4150`) — restored the 2 digest-panel E2E tests deferred from PR #130, diagnosed and fixed the real root cause of the original smoke-lane failure (`GET /api/v1/proposals` was silently ignoring the `?study_id=` filter, returning the most-recent global pending proposal), added 5-case integration regression coverage at `backend/tests/integration/test_proposals_study_filter.py`. Plus: (a) earlier 2026-05-18 PR #146 (`bug_install_skip_ui_rebuild`, squash `7299fca`) made `make up` rebuild every Compose service (`docker compose build` no-args), switched `make down` to `docker compose down`, and added a `verify_install_builds_all_services.sh` CI gate to lock the contract; (b) earlier 2026-05-18 PR #147 captured `chore_detail_page_shell_primitive` idea (squash `8854e47`). Two new follow-ups filed: `chore_ci_prettier_check` (CI's frontend job has no `prettier --check` step — surfaced when PR #136 drift in 2 unrelated files blocked an unrelated commit) and the in-flight `chore_detail_page_shell_primitive` (third primitive after DataTable + EntitySelect).) +**Last updated:** 2026-05-20 (after `feat_create_study_search_space_builder` shipped as PR #163 squash commit `c703953`, bundling the search-space builder feature + the `bug_judgment_lists_listing_ignores_query_set_filter` backend fix surfaced during local verification. 18th MVP1 feature. The builder + bug-fix bundle reflects the single-developer series workflow: rather than spin a sibling backend PR off `main`, the bug fix landed in the same branch since the dev was already in verification mode. PR #163 went through 3 spec cycles (16 findings) + 3 plan cycles (27 findings) + 3 Gemini Code Assist findings + 2 GPT-5.5 final-review passes (1 second-pass Low finding accepted on test coverage) = 47 review findings all accepted with cited fixes. 512 vitest assertions across 77 files, 4 real-backend Playwright e2e cases against the builder, 2 new backend tests for the bundled filter fix. Two follow-up idea files captured during local verification: `feat_create_study_target_autocomplete` (Step-1 free-text target field has no autocomplete from cluster indexes — pre-existing UX debt deferred) and the now-closed `bug_judgment_lists_listing_ignores_query_set_filter` (bundled into this PR).) Earlier (also 2026-05-20) — PR #161 `0879df2` `chore_create_study_modal_e2e_stability` (un-skipped the deferred Playwright spec via `dispatchEvent('click')` on the Radix trigger), PR #160 `160ff6b` `bug_err_metric_frontend_backend_drift` (wire-enum trim — `err` removed from frontend + backend Literal), PR #159 `52e106d` `bug_tutorial_template_param_boost_naming` (heuristic extension for `_boost` suffix). Earlier (also 2026-05-20) — PR #157 `chore_create_study_wizard_polish` — squash commit `075c46b` — merged into `main`. Ships the 4-surface chore: backend template-mismatch validation at create time (two new error codes `SEARCH_SPACE_UNKNOWN_PARAM` + `SEARCH_SPACE_MISSING_DECLARED_PARAM`), Step-4 auto-fill via the new `ui/src/lib/search-space-defaults.ts` heuristic + cap-aware fallback + TS↔Python cardinality parity fixture, 4 new `study.search_space.*` glossary entries (one dual + three short-only) and 6 extended per-metric entries with k-tier clauses, Step-5 tri-state metric+k rendering with new `K_IGNORED` predicate, plus client-side validation mirror + zero-declared block + 404/transient template-fetch recovery + `__placeholder__` warning. 16 new test files + 2 modified + 1 shared JSON fixture across backend unit/integration/contract + frontend unit/component + 1 skipped E2E. Three follow-up ideas captured: `bug_tutorial_template_param_boost_naming` (tutorial template uses `_boost` suffix not matched by the locked heuristic), `chore_create_study_modal_e2e_stability` (re-enable the skipped Playwright spec once EntitySelect disabled gating stabilizes), `bug_err_metric_frontend_backend_drift` (`err` selectable in wizard but unsupported by `scoring.py`). Gemini Code Assist + GPT-5.5 final-pass both adjudicated on the PR — 2 Gemini findings + 7 GPT-5.5 findings, all addressed or filed.) Earlier 2026-05-19 (after a 4-PR shipping run drained the actionable post-MVP1 chore backlog: PR #152 `chore_ci_prettier_check` (`476db78`) + PR #153 `chore_extract_shadcn_select_test_mock` (`199e225`) + PR #154 `chore_form_dropdown_guide_screenshot_refresh` (`ed4121f`) + PR #155 `chore_detail_page_shell_primitive` (`9a72514`). PR #155 is the third primitive after `` and `` — 6 detail-page migrations + new lint guard + flattens a latent UX bug where only `proposals/[id]` discriminated 404 from network error. Earlier the same session: PR #150 (`chore_data_table_columnvisibility_tanstack`, `c1e4545`) — closes the residual DataTable follow-ups: item 5 migrates the primitive from `columns.filter(...)` to TanStack's `state.columnVisibility` API (memoized per Gemini feedback), item 3 locked the flat-prop `DataTableProps` API as canonical with a "Shipped contract addendum" on the historical implementation plan's Story 2.6. Folder renamed `chore_data_table_primitive_followups` → `chore_data_table_columnvisibility_tanstack`. Earlier 2026-05-19 PR #148 (`infra_e2e_wire_seed_helper_into_studies_spec`, squash `65f4150`) — restored the 2 digest-panel E2E tests deferred from PR #130, diagnosed and fixed the real root cause of the original smoke-lane failure (`GET /api/v1/proposals` was silently ignoring the `?study_id=` filter, returning the most-recent global pending proposal), added 5-case integration regression coverage at `backend/tests/integration/test_proposals_study_filter.py`. Plus: (a) earlier 2026-05-18 PR #146 (`bug_install_skip_ui_rebuild`, squash `7299fca`) made `make up` rebuild every Compose service (`docker compose build` no-args), switched `make down` to `docker compose down`, and added a `verify_install_builds_all_services.sh` CI gate to lock the contract; (b) earlier 2026-05-18 PR #147 captured `chore_detail_page_shell_primitive` idea (squash `8854e47`). Two new follow-ups filed: `chore_ci_prettier_check` (CI's frontend job has no `prettier --check` step — surfaced when PR #136 drift in 2 unrelated files blocked an unrelated commit) and the in-flight `chore_detail_page_shell_primitive` (third primitive after DataTable + EntitySelect).) --- ## Current branch / execution context -- **Branch:** `main` (post-merge of PR #161 squash commit `0879df2` 2026-05-20). Finalization docs PR off `docs/finalize-create-study-modal-e2e-stability`. Prior squashes (same day): 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. **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:** `main` (post-merge of PR #163 squash commit `c703953` 2026-05-20). 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 #163 closed `feat_create_study_search_space_builder` + the `bug_judgment_lists_listing_ignores_query_set_filter` bundled fix on 2026-05-20). **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 `