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

| Release | Theme | Progress | Status |
|---|---|---|---|
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 81 / 83 scoped done · 19 remaining | **In progress** |
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 82 / 83 scoped done · 18 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** |
Expand Down
21 changes: 10 additions & 11 deletions docs/00_overview/MVP1_DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,20 @@ Implementation in progress — resume to finish

| Metric | Value |
|---|---|
| Scoped items done | **81 / 83** (98%) — feat_/infra_/chore_/epic_ past idea stage |
| Pending work | **19** items (every not-done feat/infra/chore/bug across all priorities) |
| Scoped items done | **82 / 83** (99%) — feat_/infra_/chore_/epic_ past idea stage |
| Pending work | **18** 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) | 18 important to file, not blocking |
| → P2 (default) | 17 important to file, not blocking |
| → Backlog | 1 captured for record, not planned |
| Open bugs | 9 |
| Legacy "Path to MVP1" | 19 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) |
| Legacy "Path to MVP1" | 18 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) |
| Backlog ideas | 0 idea-only feat/infra (not yet scoped into MVP1) |
| In flight | 1 feature(s) actively shipping |

## Pipeline

### Done (100)
### Done (101)

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
Expand Down Expand Up @@ -80,6 +80,7 @@ Implementation in progress — resume to finish
| [infra_per_trial_timeout](implemented_features/2026_05_13_infra_per_trial_timeout/idea.md) | Infra | `Settings.studies_default_timeout_s` (Story 1.5) is defined but never consumed at runtime. The intended semantic is: when `studies.config.trial_timeout_s` is absent, the worker should still bound the | — | Complete |
| [infra_structlog_test_helpers](implemented_features/2026_05_14_infra_structlog_test_helpers/idea.md) | Infra | The repo currently has two distinct, half-overlapping patterns for asserting structlog events from tests: | — | Complete |
| [infra_study_preflight_real_engine_integration](implemented_features/2026_05_25_infra_study_preflight_real_engine_integration/feature_spec.md) | Infra | Replace AC-1 through AC-4b with real-engine variants that (a) seed `judgments.doc_id` rows for a representative query, (b) bulk-index a controlled subset of those `doc_id` values into the ES service-c | — | [PR #255](https://github.com/SoundMindsAI/relyloop/pull/255) merged 2026-05-22 |
| [infra_test_worktree_missing_integration_envs](implemented_features/2026_05_26_infra_test_worktree_missing_integration_envs/feature_spec.md) | Infra | `scripts/run-tests-in-worktree.sh` propagates `POSTGRES_PASSWORD_FILE` unconditionally (fail-loud if `$MAIN_REPO/secrets/postgres_password` is missing — mirroring the existing `DATABASE_URL_FILE` prer | — | [PR #257](https://github.com/SoundMindsAI/relyloop/pull/257) merged 2026-05-26 |
| [infra_uv_sync_drops_precommit](implemented_features/2026_05_21_infra_uv_sync_drops_precommit/idea.md) | Infra | Complete | — | Complete |
| [chore_chat_last_message_preview](implemented_features/2026_05_14_chore_chat_last_message_preview/idea.md) | Chore | The `/chat` list page renders each conversation row as `title + relative timestamp (created_at) + count` via [`ui/src/components/chat/conversation-list.tsx:30-49`](../ui/src/components/chat/conversati | — | Complete |
| [chore_ci_gitignore_paths_ignore_gap](implemented_features/2026_05_13_chore_ci_gitignore_paths_ignore_gap/idea.md) | Chore | `.github/workflows/pr.yml` has a `paths-ignore` filter that skips the entire workflow when *every* changed path matches: | — | Complete |
Expand Down Expand Up @@ -144,11 +145,9 @@ Implementation in progress — resume to finish
|---|---|---|---|---|---|---|
| 1 | P2 | [infra_agent_sibling_worktree_isolation](../02_product/planned_features/infra_agent_sibling_worktree_isolation/feature_spec.md) | Infra | Add a tight "Working in sibling worktrees" section to `CLAUDE.md` between `## Common Pitfalls` and `## Bug Fix Protocol` that catalogs which host paths are bind-mounted by the Compose stack (and there | — | [PR #249](https://github.com/SoundMindsAI/relyloop/pull/249) merged 2026-05-25 |

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

| # | Priority | Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|---|---|
| 1 | P2 | [infra_test_worktree_missing_integration_envs](../02_product/planned_features/infra_test_worktree_missing_integration_envs/feature_spec.md) | Infra | `scripts/run-tests-in-worktree.sh` propagates `POSTGRES_PASSWORD_FILE` unconditionally (fail-loud if `$MAIN_REPO/secrets/postgres_password` is missing — mirroring the existing `DATABASE_URL_FILE` prer | — | [PR #255](https://github.com/SoundMindsAI/relyloop/pull/255) merged 2026-05-25 |
_None._

### Spec (0)

Expand Down Expand Up @@ -189,8 +188,6 @@ graph LR
classDef idea fill:#f1f5f9,stroke:#334155,color:#334155;
infra_agent_sibling_worktree_isolation["agent sibling worktree isolation"]
class infra_agent_sibling_worktree_isolation implement;
infra_test_worktree_missing_integration_envs["test worktree missing integration envs"]
class infra_test_worktree_missing_integration_envs plan;
infra_foundation["foundation"]
class infra_foundation done;
feat_study_lifecycle["study lifecycle"]
Expand Down Expand Up @@ -353,6 +350,8 @@ graph LR
class feat_study_clone_narrow_bounds done;
infra_study_preflight_real_engine_integration["study preflight real engine integration"]
class infra_study_preflight_real_engine_integration done;
infra_test_worktree_missing_integration_envs["test worktree missing integration envs"]
class infra_test_worktree_missing_integration_envs done;
feat_study_lifecycle --> feat_digest_proposal
feat_llm_judgments --> feat_digest_proposal
infra_foundation --> feat_llm_judgments
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">81 / 83 scoped done · 19 remaining</div>
<div class="progress">82 / 83 scoped done · 18 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 — Propagate `POSTGRES_PASSWORD_FILE` + optional `CLUSTER_CREDENTIALS_FILE` to `make test-worktree`

**Date:** 2026-05-25
**Status:** Ready for Execution
**Status:** Complete (PR #257, merged 2026-05-26 as squash commit `4ffc83a5`)
**Primary spec:** [`feature_spec.md`](feature_spec.md)
**Policy source(s):** [`CLAUDE.md` §"Absolute Rules" #2 (secrets via mounted files)](../../../../CLAUDE.md), [`docker-compose.yml`](../../../../docker-compose.yml) (canonical env-var → mount-path source-of-truth)

Expand Down Expand Up @@ -455,16 +455,18 @@ All work lands in one PR titled per the conventional-commit convention: `infra(t

### Current sprint

- [ ] Story 1.1 — Patch script + smoke tests
- [ ] Story 1.2 — Sync CLAUDE.md + runbook
- [x] Story 1.1 — Patch script + smoke tests
- [x] Story 1.2 — Sync CLAUDE.md + runbook

### Blocked items

None.

### Done this sprint

(populated by `impl-execute` as stories complete)
- [x] Story 1.1 — `scripts/run-tests-in-worktree.sh` patched + `backend/tests/unit/scripts/test_run_tests_in_worktree.py` extended; 13/13 smoke tests pass; operator-path verification ran 43 integration tests via `make test-worktree` (43 passed, 0 skipped — pre-PR baseline was all 43 skipping). Commits: `e2dde338` (initial), `309a8080` (Gemini Windows-portability fix on the unreadable test subcase).
- [x] Story 1.2 — `CLAUDE.md` recipe + `docs/03_runbooks/parallel-worktrees.md` synced with the new propagation behavior; FR-7 regression test from `infra_agent_sibling_worktree_isolation` Phase 1 still passes (5/5). Commits: `45339a3b` (initial), `309a8080` (Gemini docker-compose mapping fix in spec + idea), `e5629e90` (final-review CLAUDE.md mapping fix).
- [x] Tangential discoveries captured: `chore_db_session_skip_reason_disambiguation/idea.md` (commit `b88d93fd`) + `bug_smoke_followup_clone_e2e_flakes/idea.md` (commit `de2aad10`).

## 10) Story-by-Story Verification Gate

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Pipeline Status — Propagate POSTGRES_PASSWORD_FILE + optional CLUSTER_CREDENTIALS_FILE to make test-worktree

## Idea
- Status: Complete (preflighted 2026-05-25)
- File: [`idea.md`](idea.md)

## Spec
- Status: Approved
- Date: 2026-05-25
- File: [`feature_spec.md`](feature_spec.md)
- Cross-model review: GPT-5.5 passed (3 cycles, 9 findings — 5/2/2 — descending severity Medium → Medium+Low → Low; zero rejections)
- Phases: 1 (single-phase delivery per D-5; no deferred phases)

## Plan
- Status: Approved
- Date: 2026-05-25
- File: [`implementation_plan.md`](implementation_plan.md)
- Cross-model review: GPT-5.5 passed (3 cycles, 5 findings — 4/1/0 — descending severity High→High→clean; zero rejections)
- Stories: 2 stories across 1 epic (Story 1.1 — script + smoke tests; Story 1.2 — docs sync)
- Phases covered: single-phase (per spec D-5)

## Implementation
- Status: Complete
- Date: 2026-05-26
- PR: [#257](https://github.com/SoundMindsAI/relyloop/pull/257) merged 2026-05-26 (squash commit `4ffc83a5`)
- CI: 6/7 jobs green (smoke red on documented pre-existing flakes from `bug_dashboard_banner_dismiss_persistence_flake`, `bug_smoke_dashboard_demo_state_locator_missing`, and newly-captured `bug_smoke_followup_clone_e2e_flakes`; same failures observed on main commit `9928d763`, not a PR #257 regression)
- Stories completed: 2/2 (Story 1.1 — script + smoke tests; Story 1.2 — CLAUDE.md + parallel-worktrees runbook sync)
- Gemini Code Assist review: 3 Medium findings, all accepted + applied (Windows portability of the unreadable test mode + inverted docker-compose service↔line mapping in 2 docs files)
- Final GPT-5.5 cross-model review: 1 Medium accepted cycle 1 (CLAUDE.md mapping fix — third instance of the same Gemini-caught error); 2 hallucinations rejected with cited counter-evidence cycle 2 (claimed script + runbook were missing from a diff that demonstrably contained both)
- Tangential discoveries captured: 2 idea files (`chore_db_session_skip_reason_disambiguation` from spec D-7; `bug_smoke_followup_clone_e2e_flakes` from CI watch)
- Operator-path verification: `make test-worktree CMD="pytest backend/tests/integration/test_studies_api.py"` ran 43 tests to completion (43 passed, 0 skipped) from a sibling worktree — pre-PR baseline was all 43 skipping with the misleading "Postgres not reachable" reason

## Done
- Status: Merged to main
- Date: 2026-05-26
- PR: [#257](https://github.com/SoundMindsAI/relyloop/pull/257)
- Release: pending next tag (post-MVP1 / `v0.1.x` line)
49 changes: 25 additions & 24 deletions docs/00_overview/mvp1_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -397,13 +397,13 @@ <h2>MVP1 Progress</h2>
<div class="kpi-row">
<div class="kpi ">
<div class="label">Scoped items done</div>
<div class="value">81 / 83</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">82 / 83</div>
<div class="sub">99% of feat_/infra_/chore_/epic_ items past idea stage</div>
<div class="bar"><span style="width:99%"></span></div>
</div>
<div class="kpi warn">
<div class="label">Pending work</div>
<div class="value">19</div>
<div class="value">18</div>
<div class="sub">every not-done feat/infra/chore/bug across all priorities</div>
</div>
<div class="kpi bug">
Expand All @@ -425,7 +425,7 @@ <h2>MVP1 Progress</h2>
</div>
<div class="kpi">
<div class="label">P2 (default)</div>
<div class="value">18</div>
<div class="value">17</div>
<div class="sub">important to file, not blocking</div>
</div>
<div class="kpi">
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">19</div>
<div class="value">18</div>
<div class="sub">scoped not-done + bugs + chore-ideas only (excludes feat/infra ideas)</div>
</div>
</div>
Expand Down Expand Up @@ -693,19 +693,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 infra" data-prefix="infra" data-priority="P2">
<div class="name"><a href="../../docs/02_product/planned_features/infra_test_worktree_missing_integration_envs/feature_spec.md">Test Worktree Missing Integration Envs</a></div>
<div class="meta">
<span class="badge infra">Infra</span>
<span class="badge priority" data-priority="P2">P2</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/255">PR #255</a> <span>merged 2026-05-25</span>
</div>
<div class="one-liner">`scripts/run-tests-in-worktree.sh` propagates `POSTGRES_PASSWORD_FILE` unconditionally (fail-loud if `$MAIN_REPO/secrets/postgres_password` is missing — mirroring the existing `DATABASE_URL_FILE` prer</div>


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

</div>

Expand All @@ -727,7 +715,7 @@ <h3>Implementing <span class="count">1</span></h3>
</div>

<div class="col done">
<h3>Done <span class="count">100</span></h3>
<h3>Done <span class="count">101</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 @@ -1288,6 +1276,19 @@ <h3>Done <span class="count">100</span></h3>
</div>


<div class="card infra" data-prefix="infra" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_26_infra_test_worktree_missing_integration_envs/feature_spec.md">Test Worktree Missing Integration Envs</a></div>
<div class="meta">
<span class="badge infra">Infra</span>

<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/257">PR #257</a> <span>merged 2026-05-26</span>
</div>
<div class="one-liner">`scripts/run-tests-in-worktree.sh` propagates `POSTGRES_PASSWORD_FILE` unconditionally (fail-loud if `$MAIN_REPO/secrets/postgres_password` is missing — mirroring the existing `DATABASE_URL_FILE` prer</div>


</div>


<div class="card infra" data-prefix="infra" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_21_infra_uv_sync_drops_precommit">Uv Sync Drops Precommit</a></div>
<div class="meta">
Expand Down Expand Up @@ -2043,8 +2044,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
classDef idea fill:#f1f5f9,stroke:#334155,color:#334155;
infra_agent_sibling_worktree_isolation[&quot;agent sibling worktree isolation&quot;]
class infra_agent_sibling_worktree_isolation implement;
infra_test_worktree_missing_integration_envs[&quot;test worktree missing integration envs&quot;]
class infra_test_worktree_missing_integration_envs plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -2207,6 +2206,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_study_clone_narrow_bounds done;
infra_study_preflight_real_engine_integration[&quot;study preflight real engine integration&quot;]
class infra_study_preflight_real_engine_integration done;
infra_test_worktree_missing_integration_envs[&quot;test worktree missing integration envs&quot;]
class infra_test_worktree_missing_integration_envs done;
feat_study_lifecycle --&gt; feat_digest_proposal
feat_llm_judgments --&gt; feat_digest_proposal
infra_foundation --&gt; feat_llm_judgments
Expand Down Expand Up @@ -2262,8 +2263,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
classDef idea fill:#f1f5f9,stroke:#334155,color:#334155;
infra_agent_sibling_worktree_isolation[&quot;agent sibling worktree isolation&quot;]
class infra_agent_sibling_worktree_isolation implement;
infra_test_worktree_missing_integration_envs[&quot;test worktree missing integration envs&quot;]
class infra_test_worktree_missing_integration_envs plan;
infra_foundation[&quot;foundation&quot;]
class infra_foundation done;
feat_study_lifecycle[&quot;study lifecycle&quot;]
Expand Down Expand Up @@ -2426,6 +2425,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_study_clone_narrow_bounds done;
infra_study_preflight_real_engine_integration[&quot;study preflight real engine integration&quot;]
class infra_study_preflight_real_engine_integration done;
infra_test_worktree_missing_integration_envs[&quot;test worktree missing integration envs&quot;]
class infra_test_worktree_missing_integration_envs done;
feat_study_lifecycle --&gt; feat_digest_proposal
feat_llm_judgments --&gt; feat_digest_proposal
infra_foundation --&gt; feat_llm_judgments
Expand Down

This file was deleted.

4 changes: 3 additions & 1 deletion state.md

Large diffs are not rendered by default.