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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/00_overview/DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ _Top-level index across MVP1 → GA v1+ as of **2026-05-21**. Click a release na

| Release | Theme | Progress | Status |
|---|---|---|---|
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 57 / 58 scoped done · 7 remaining | **In progress** |
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 58 / 58 scoped done · 6 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** |
Expand Down
31 changes: 12 additions & 19 deletions docs/00_overview/MVP1_DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,28 @@ _Reflects feature-folder state as of **2026-05-21** (latest mtime of any planned

## Next up

**[feat_study_target_judgment_mismatch_guard](../02_product/planned_features/feat_study_target_judgment_mismatch_guard/feature_spec.md)** — Feature, currently in **Plan**
All scoped MVP1 features shipped 🎉

> `POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422).

Plan approved; run /impl-execute to ship

```bash
/impl-execute docs/02_product/planned_features/feat_study_target_judgment_mismatch_guard/implementation_plan.md --all
```
Pull from the Idea backlog or capture a new feature spec.

## MVP1 Progress

| Metric | Value |
|---|---|
| Scoped items done | **57 / 58** (98%) — feat_/infra_/chore_/epic_ past idea stage |
| Pending work | **14** items (every not-done feat/infra/chore/bug across all priorities) |
| → P0 — do next | **2** unblocking / paying daily cost |
| Scoped items done | **58 / 58** (100%) — feat_/infra_/chore_/epic_ past idea stage |
| Pending work | **13** items (every not-done feat/infra/chore/bug across all priorities) |
| → P0 — do next | **1** unblocking / paying daily cost |
| → P1 | **6** high-value, ready when P0 clears |
| → P2 (default) | 6 important to file, not blocking |
| → Backlog | 0 captured for record, not planned |
| Open bugs | 0 |
| Legacy "Path to MVP1" | 7 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) |
| Legacy "Path to MVP1" | 6 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 (69)
### Done (70)

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
Expand All @@ -54,6 +48,7 @@ Plan approved; run /impl-execute to ship
| [feat_query_inline_crud](implemented_features/2026_05_14_feat_query_inline_crud/feature_spec.md) | Feature | A relevance engineer on the `/query-sets/[id]` page sees a paginated table of every query in the set with `query_text`, `reference_answer`, `query_metadata`, and a `judgment_count` derived field. | `infra_foundation` `infra_adapter_elastic` `feat_study_lifecycle` `feat_llm_judgments` `feat_studies_ui` | [PR #101](https://github.com/SoundMindsAI/relyloop/pull/101) merged 2026-05-14 |
| [feat_studies_ui](implemented_features/2026_05_12_feat_studies_ui/feature_spec.md) | Feature | A Next.js app provides 9 of the 11 MVP1 routes from [`ui-architecture.md` §"Routes (MVP1)"](../01_architecture/ui-architecture.md): dashboard, clusters list/detail, query sets list/detail, judgment re | `infra_foundation` `feat_study_lifecycle` `feat_digest_proposal` `feat_llm_judgments` `infra_adapter_elastic` | [PR #50](https://github.com/SoundMindsAI/relyloop/pull/50) merged 2026-05-12 |
| [feat_study_lifecycle](implemented_features/2026_05_10_feat_study_lifecycle/feature_spec.md) | Feature | A relevance engineer creates a study via API or chat, the orchestrator enqueues N parallel `run_trial` jobs, trials accumulate in real time on the study detail page, the orchestrator detects stop-cond | — | [PR #18](https://github.com/SoundMindsAI/relyloop/pull/18) merged 2026-05-10 |
| [feat_study_target_judgment_mismatch_guard](implemented_features/2026_05_21_feat_study_target_judgment_mismatch_guard/feature_spec.md) | Feature | `POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422). | — | [PR #184](https://github.com/SoundMindsAI/relyloop/pull/184) merged 2026-05-21 |
| [infra_adapter_elastic](implemented_features/2026_05_10_infra_adapter_elastic/feature_spec.md) | Infra | A single `ElasticAdapter` implements the `SearchAdapter` Protocol and serves both Elasticsearch (8.11+ / 9.x) and OpenSearch (2.x / 3.x), distinguished by a `engine_type` column. | — | [PR #16](https://github.com/SoundMindsAI/relyloop/pull/16) merged 2026-05-10 |
| [infra_ci_smoke_makeup](implemented_features/2026_05_13_infra_ci_smoke_makeup/idea.md) | Infra | Complete | — | Complete |
| [infra_dashboard_regen_pre_commit_conflict](implemented_features/2026_05_14_infra_dashboard_regen_pre_commit_conflict/idea.md) | Infra | Complete | — | Complete |
Expand Down Expand Up @@ -111,11 +106,9 @@ Plan approved; run /impl-execute to ship

_None._

### Plan (1)
### Plan (0)

| Priority | Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|---|
| P0 | [feat_study_target_judgment_mismatch_guard](../02_product/planned_features/feat_study_target_judgment_mismatch_guard/feature_spec.md) | Feature | `POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422). | — | [PR #163](https://github.com/SoundMindsAI/relyloop/pull/163) |
_None._

### Spec (0)

Expand Down Expand Up @@ -150,8 +143,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_study_target_judgment_mismatch_guard["study target judgment mismatch guard"]
class feat_study_target_judgment_mismatch_guard plan;
infra_foundation["foundation"]
class infra_foundation done;
feat_study_lifecycle["study lifecycle"]
Expand Down Expand Up @@ -264,6 +255,8 @@ graph LR
class feat_agent_propose_search_space done;
feat_pr_metric_confidence["pr metric confidence"]
class feat_pr_metric_confidence done;
feat_study_target_judgment_mismatch_guard["study target judgment mismatch guard"]
class feat_study_target_judgment_mismatch_guard done;
infra_uv_sync_drops_precommit["uv sync drops precommit"]
class infra_uv_sync_drops_precommit done;
feat_study_lifecycle --> feat_digest_proposal
Expand Down
2 changes: 1 addition & 1 deletion docs/00_overview/dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -384,7 +384,7 @@ <h2>Releases</h2>
<div class="roadmap-row">
<div class="release-name"><a href="mvp1_dashboard.html">MVP1 / v0.1</a></div>
<div class="theme">The Loop</div>
<div class="progress">57 / 58 scoped done · 7 remaining</div>
<div class="progress">58 / 58 scoped done · 6 remaining</div>
<span class="state-pill in_progress">In progress</span>
</div>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Feature Specification — feat_study_target_judgment_mismatch_guard

**Date:** 2026-05-21
**Status:** Draft
**Status:** Implemented (PR #184, squash-merged `ce3fcf4` on 2026-05-21)
**Owners:** RelyLoop maintainers
**Related docs:**
- [idea.md](idea.md)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Implementation Plan — feat_study_target_judgment_mismatch_guard

**Date:** 2026-05-21
**Status:** Draft
**Status:** Complete (PR #184, squash-merged `ce3fcf4` on 2026-05-21)
**Primary spec:** [feature_spec.md](feature_spec.md)
**Policy source(s):** [api-conventions.md](../../../01_architecture/api-conventions.md), [CLAUDE.md](../../../../CLAUDE.md)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,11 @@
- Phases covered: single phase

## Implementation
- Status: Not started
- Status: Complete
- Date: 2026-05-21
- PR: #184 (merged squash `ce3fcf4`)
- CI: green on final commit `a358a71` (5/5 jobs incl. 70-test smoke)
- Stories completed: 3 / 3 (1.1 backend listing + 1.2 backend validators + 2.1 frontend filter)
- Cross-model reviews: spec 3 cycles (17 findings, all accepted, 1 rejected); plan 3 cycles (16 findings, all accepted, 1 rejected); Gemini Code Assist (2 findings — 1 accepted in `035af0a`, 1 rejected with precedent counter-evidence); final GPT-5.5 (10 findings — 2 accepted in `a358a71`, 8 rejected with cited counter-evidence including 5 truncation false positives)
- Drive-by fix bundled in PR: E2E seed helpers (`seedJudgmentList`, `seedFullChain`, `seedStudy`) gain optional `target` overrides; 3 specs updated to align target values so the new FR-1 validator doesn't reject chained POSTs
- Tests at merge: backend unit 1040, integration +7 cases, contract +2 cases; UI vitest 567 → 572 (+5)
63 changes: 32 additions & 31 deletions docs/00_overview/mvp1_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -382,28 +382,28 @@ <h1>RelyLoop MVP1 Dashboard</h1>
<main>

<section>
<div class="next-up">
<div class="eyebrow">Next up — Feature, currently in <strong>Plan</strong></div>
<div class="title"><a href="../../docs/02_product/planned_features/feat_study_target_judgment_mismatch_guard/feature_spec.md">Study Target Judgment Mismatch Guard</a></div>
<div class="one-liner">`POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422).</div>
<div class="stage-hint">Plan approved; run /impl-execute to ship</div>
<code class="cmd">/impl-execute docs/02_product/planned_features/feat_study_target_judgment_mismatch_guard/implementation_plan.md --all</code>
<div class="next-up done">
<div class="eyebrow">Next up</div>
<div class="title">All scoped MVP1 features shipped 🎉</div>
<div class="one-liner">
Pull from the Idea backlog or capture a new feature spec.
</div>
</div>
</section>


<section>
<h2>MVP1 Progress</h2>
<div class="kpi-row">
<div class="kpi ">
<div class="kpi complete">
<div class="label">Scoped items done</div>
<div class="value">57 / 58</div>
<div class="sub">98% of feat_/infra_/chore_/epic_ items past idea stage</div>
<div class="bar"><span style="width:98%"></span></div>
<div class="value">58 / 58</div>
<div class="sub">100% of feat_/infra_/chore_/epic_ items past idea stage</div>
<div class="bar"><span style="width:100%"></span></div>
</div>
<div class="kpi warn">
<div class="label">Pending work</div>
<div class="value">14</div>
<div class="value">13</div>
<div class="sub">every not-done feat/infra/chore/bug across all priorities</div>
</div>
<div class="kpi ">
Expand All @@ -413,7 +413,7 @@ <h2>MVP1 Progress</h2>
</div>
<div class="kpi warn">
<div class="label">P0 — do next</div>
<div class="value">2</div>
<div class="value">1</div>
<div class="sub">unblocking / paying daily cost</div>
</div>
</div>
Expand All @@ -435,7 +435,7 @@ <h2>MVP1 Progress</h2>
</div>
<div class="kpi">
<div class="label">Legacy "Path to MVP1"</div>
<div class="value">7</div>
<div class="value">6</div>
<div class="sub">scoped not-done + bugs + chore-ideas only (excludes feat/infra ideas)</div>
</div>
</div>
Expand Down Expand Up @@ -641,19 +641,7 @@ <h3>Spec <span class="count">0</span></h3>
</div>

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

<div class="card feat" data-prefix="feat" data-priority="P0">
<div class="name"><a href="../../docs/02_product/planned_features/feat_study_target_judgment_mismatch_guard/feature_spec.md">Study Target Judgment Mismatch Guard</a></div>
<div class="meta">
<span class="badge feat">Feature</span>
<span class="badge priority" data-priority="P0">P0</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/163">PR #163</a>
</div>
<div class="one-liner">`POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422).</div>


</div>
<h3>Plan <span class="count">0</span></h3>

</div>

Expand All @@ -663,7 +651,7 @@ <h3>Implementing <span class="count">0</span></h3>
</div>

<div class="col done">
<h3>Done <span class="count">69</span></h3>
<h3>Done <span class="count">70</span></h3>

<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_21_feat_agent_propose_search_space/feature_spec.md">Agent Propose Search Space</a></div>
Expand Down Expand Up @@ -886,6 +874,19 @@ <h3>Done <span class="count">69</span></h3>
</div>


<div class="card feat" data-prefix="feat" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_21_feat_study_target_judgment_mismatch_guard/feature_spec.md">Study Target Judgment Mismatch Guard</a></div>
<div class="meta">
<span class="badge feat">Feature</span>

<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/184">PR #184</a><span>merged 2026-05-21</span>
</div>
<div class="one-liner">`POST /api/v1/studies` rejects the mismatch at create time with a specific machine-readable error code (`JUDGMENT_TARGET_MISMATCH`, 422).</div>


</div>


<div class="card infra" data-prefix="infra" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_10_infra_adapter_elastic/feature_spec.md">Adapter Elastic</a></div>
<div class="meta">
Expand Down Expand Up @@ -1574,8 +1575,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
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_study_target_judgment_mismatch_guard[&quot;study target judgment mismatch guard&quot;]
class feat_study_target_judgment_mismatch_guard plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -1688,6 +1687,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_agent_propose_search_space done;
feat_pr_metric_confidence[&quot;pr metric confidence&quot;]
class feat_pr_metric_confidence done;
feat_study_target_judgment_mismatch_guard[&quot;study target judgment mismatch guard&quot;]
class feat_study_target_judgment_mismatch_guard done;
infra_uv_sync_drops_precommit[&quot;uv sync drops precommit&quot;]
class infra_uv_sync_drops_precommit done;
feat_study_lifecycle --&gt; feat_digest_proposal
Expand Down Expand Up @@ -1783,8 +1784,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
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_study_target_judgment_mismatch_guard[&quot;study target judgment mismatch guard&quot;]
class feat_study_target_judgment_mismatch_guard plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -1897,6 +1896,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_agent_propose_search_space done;
feat_pr_metric_confidence[&quot;pr metric confidence&quot;]
class feat_pr_metric_confidence done;
feat_study_target_judgment_mismatch_guard[&quot;study target judgment mismatch guard&quot;]
class feat_study_target_judgment_mismatch_guard done;
infra_uv_sync_drops_precommit[&quot;uv sync drops precommit&quot;]
class infra_uv_sync_drops_precommit done;
feat_study_lifecycle --&gt; feat_digest_proposal
Expand Down
Loading