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-22**. Click a release na

| Release | Theme | Progress | Status |
|---|---|---|---|
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 58 / 59 scoped done · 7 remaining | **In progress** |
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 59 / 59 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-22** (latest mtime of any planned

## Next up

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

> Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the registry in FK-safe order at the end of the

Plan approved; run /impl-execute to ship

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

## MVP1 Progress

| Metric | Value |
|---|---|
| Scoped items done | **58 / 59** (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 | **1** unblocking / paying daily cost |
| Scoped items done | **59 / 59** (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 | **0** unblocking / paying daily cost |
| → P1 | **6** high-value, ready when P0 clears |
| → P2 (default) | 6 important to file, not blocking |
| → Backlog | 1 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 (70)
### Done (71)

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
Expand Down Expand Up @@ -78,6 +72,7 @@ Plan approved; run /impl-execute to ship
| [chore_data_table_columnvisibility_tanstack](implemented_features/2026_05_19_chore_data_table_columnvisibility_tanstack/idea.md) | Chore | Complete | — | Complete |
| [chore_detail_page_shell_primitive](implemented_features/2026_05_19_chore_detail_page_shell_primitive/idea.md) | Chore | Complete | — | Complete |
| [chore_digest_worker_narrow_except](implemented_features/2026_05_14_chore_digest_worker_narrow_except/idea.md) | Chore | Complete | — | Complete |
| [chore_e2e_test_rows_isolation](implemented_features/2026_05_21_chore_e2e_test_rows_isolation/feature_spec.md) | Chore | Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the reg | — | [PR #186](https://github.com/SoundMindsAI/relyloop/pull/186) merged 2026-05-21 |
| [chore_env_guard_extend_deny_pattern](implemented_features/2026_05_13_chore_env_guard_extend_deny_pattern/idea.md) | Chore | Complete | — | Complete |
| [chore_extract_shadcn_select_test_mock](implemented_features/2026_05_19_chore_extract_shadcn_select_test_mock/idea.md) | Chore | Complete | — | Complete |
| [chore_form_dropdown_guide_screenshot_refresh](implemented_features/2026_05_19_chore_form_dropdown_guide_screenshot_refresh/idea.md) | Chore | Complete | — | Complete |
Expand Down Expand Up @@ -112,11 +107,9 @@ Plan approved; run /impl-execute to ship

_None._

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

| Priority | Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|---|
| P0 | [chore_e2e_test_rows_isolation](../02_product/planned_features/chore_e2e_test_rows_isolation/feature_spec.md) | Chore | Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the reg | — | [PR #182](https://github.com/SoundMindsAI/relyloop/pull/182) |
_None._

### Spec (0)

Expand Down Expand Up @@ -151,8 +144,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_e2e_test_rows_isolation["e2e test rows isolation"]
class chore_e2e_test_rows_isolation plan;
infra_foundation["foundation"]
class infra_foundation done;
feat_study_lifecycle["study lifecycle"]
Expand Down Expand Up @@ -255,6 +246,8 @@ graph LR
class feat_create_study_search_space_builder done;
feat_create_study_target_autocomplete["create study target autocomplete"]
class feat_create_study_target_autocomplete done;
chore_e2e_test_rows_isolation["e2e test rows isolation"]
class chore_e2e_test_rows_isolation done;
chore_guide_01_screenshot_refresh_target_filter["guide 01 screenshot refresh target filter"]
class chore_guide_01_screenshot_refresh_target_filter done;
chore_guide_06_screenshot_refresh_target_picker["guide 06 screenshot refresh target picker"]
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">58 / 59 scoped done · 7 remaining</div>
<div class="progress">59 / 59 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 @@
# Implementation Plan — chore_e2e_test_rows_isolation

**Date:** 2026-05-21
**Status:** Draft
**Status:** Complete (PR #186 squash `a444b94`, merged 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), spec §19 Decision log

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,16 @@
- Critical cycle-3 findings: parse failures didn't count toward `failed` invariant (now do); stdout log misstated `entries.length` vs distinct-resource count.

## Implementation
- Status: Not started
- Status: Complete
- Date: 2026-05-21
- PR: #186 (squash `a444b94`, merged into `main` 2026-05-21)
- Branch: `chore/e2e-test-rows-isolation` (deleted post-merge)
- Stories shipped: 2 of 2 (1.1 backend 6 DELETE endpoints + 20 integration cases + 6 env-guard contract + 11 strictly-new error-code source-presence + 7 OpenAPI tuples; 1.2 frontend per-worker JSONL registry + globalSetup/Teardown + cleanup-reporter + 29 vitest cases)
- CI: green on final HEAD (5/5 jobs incl. smoke 70/70 Playwright)
- Reviews: Gemini Code Assist 3 Medium findings (all rejected with SQLAlchemy AsyncSession-concurrency counter-evidence at `backend/app/api/v1/_test.py:269/353/415`); GPT-5.5 final review 1 High finding (rejected — truncated-diff false positive at `backend/app/db/repo/__init__.py:38–42`).
- Post-merge fix: one follow-up commit on the same branch added `testMatch: ['**/*.spec.ts']` to `ui/playwright.config.ts` after the smoke job tried to load vitest `.test.ts` files as Playwright specs.
- Tangential capture: `chore_e2e_seed_acme_helper_dead/idea.md` — `seedAcmeProductsChain` is dead code (Backlog).

## Done
- Status: Merged
- Date: 2026-05-21
65 changes: 33 additions & 32 deletions docs/00_overview/mvp1_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -382,38 +382,38 @@ <h1>RelyLoop MVP1 Dashboard</h1>
<main>

<section>
<div class="next-up">
<div class="eyebrow">Next up — Chore, currently in <strong>Plan</strong></div>
<div class="title"><a href="../../docs/02_product/planned_features/chore_e2e_test_rows_isolation/feature_spec.md">E2E Test Rows Isolation</a></div>
<div class="one-liner">Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the registry in FK-safe order at the end of the</div>
<div class="stage-hint">Plan approved; run /impl-execute to ship</div>
<code class="cmd">/impl-execute docs/02_product/planned_features/chore_e2e_test_rows_isolation/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">58 / 59</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">59 / 59</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 ">
<div class="label">Open bugs</div>
<div class="value">0</div>
<div class="sub">tracked bug_* idea files</div>
</div>
<div class="kpi warn">
<div class="kpi ">
<div class="label">P0 — do next</div>
<div class="value">1</div>
<div class="value">0</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 chore" data-prefix="chore" data-priority="P0">
<div class="name"><a href="../../docs/02_product/planned_features/chore_e2e_test_rows_isolation/feature_spec.md">E2E Test Rows Isolation</a></div>
<div class="meta">
<span class="badge chore">Chore</span>
<span class="badge priority" data-priority="P0">P0</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/182">PR #182</a>
</div>
<div class="one-liner">Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the reg</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">70</span></h3>
<h3>Done <span class="count">71</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 @@ -1198,6 +1186,19 @@ <h3>Done <span class="count">70</span></h3>
</div>


<div class="card chore" data-prefix="chore" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_21_chore_e2e_test_rows_isolation/feature_spec.md">E2E Test Rows Isolation</a></div>
<div class="meta">
<span class="badge chore">Chore</span>

<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/186">PR #186</a><span>merged 2026-05-21</span>
</div>
<div class="one-liner">Every Playwright spec that creates rows registers them against a file-based cleanup registry (per-worker JSONL files); a `globalTeardown` hook in `playwright.config.ts` reads + merges + drains the reg</div>


</div>


<div class="card chore" data-prefix="chore" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_13_chore_env_guard_extend_deny_pattern">Env Guard Extend Deny Pattern</a></div>
<div class="meta">
Expand Down Expand Up @@ -1587,8 +1588,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;
chore_e2e_test_rows_isolation[&quot;e2e test rows isolation&quot;]
class chore_e2e_test_rows_isolation plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -1691,6 +1690,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_create_study_search_space_builder done;
feat_create_study_target_autocomplete[&quot;create study target autocomplete&quot;]
class feat_create_study_target_autocomplete done;
chore_e2e_test_rows_isolation[&quot;e2e test rows isolation&quot;]
class chore_e2e_test_rows_isolation done;
chore_guide_01_screenshot_refresh_target_filter[&quot;guide 01 screenshot refresh target filter&quot;]
class chore_guide_01_screenshot_refresh_target_filter done;
chore_guide_06_screenshot_refresh_target_picker[&quot;guide 06 screenshot refresh target picker&quot;]
Expand Down Expand Up @@ -1798,8 +1799,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;
chore_e2e_test_rows_isolation[&quot;e2e test rows isolation&quot;]
class chore_e2e_test_rows_isolation plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -1902,6 +1901,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_create_study_search_space_builder done;
feat_create_study_target_autocomplete[&quot;create study target autocomplete&quot;]
class feat_create_study_target_autocomplete done;
chore_e2e_test_rows_isolation[&quot;e2e test rows isolation&quot;]
class chore_e2e_test_rows_isolation done;
chore_guide_01_screenshot_refresh_target_filter[&quot;guide 01 screenshot refresh target filter&quot;]
class chore_guide_01_screenshot_refresh_target_filter done;
chore_guide_06_screenshot_refresh_target_picker[&quot;guide 06 screenshot refresh target picker&quot;]
Expand Down
8 changes: 5 additions & 3 deletions state.md

Large diffs are not rendered by default.