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 CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ If you slip and a stub leaks into a committed file, capture it as a `bug_<slug>`
| 5 | [`feat_llm_judgments`](docs/00_overview/implemented_features/2026_05_11_feat_llm_judgments/) | **Complete (PR #35, merged 2026-05-11)** |
| 6 | [`feat_digest_proposal`](docs/00_overview/implemented_features/2026_05_11_feat_digest_proposal/) | **Complete (PR #41, merged 2026-05-11)** |
| 7 | [`feat_github_pr_worker`](docs/00_overview/implemented_features/2026_05_12_feat_github_pr_worker/) | **Complete (PR #45, merged 2026-05-12)** |
| 8 | [`feat_github_webhook`](docs/02_product/planned_features/feat_github_webhook/) | Implementation complete (all 10 stories), pending push + CI + merge on `feature/feat-github-webhook` |
| 8 | [`feat_github_webhook`](docs/00_overview/implemented_features/2026_05_12_feat_github_webhook/) | **Complete (PR #56, merged 2026-05-12)** |
| 9 | [`feat_studies_ui`](docs/00_overview/implemented_features/2026_05_12_feat_studies_ui/) | **Complete (PR #50, pending merge)** |
| 10 | [`feat_chat_agent`](docs/02_product/planned_features/feat_chat_agent/) | Spec approved, plan pending |
| 11 | [`feat_proposals_ui`](docs/02_product/planned_features/feat_proposals_ui/) | Spec approved, plan pending |
Expand Down
31 changes: 15 additions & 16 deletions docs/00_overview/MVP1_DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,36 @@ _Reflects feature-folder state as of **2026-05-12** (latest mtime of any planned

## Next up

**[feat_github_webhook](../02_product/planned_features/feat_github_webhook/feature_spec.md)** — Feature, currently in **Plan**
**[feat_proposals_ui](../02_product/planned_features/feat_proposals_ui/feature_spec.md)** — Feature, currently in **Spec**

> GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`.
> Two routes — `/proposals` (filterable list) and `/proposals/{id}` (config diff + metric delta + "Open PR" button + post-open PR-state mirror) — plug into the existing `feat_studies_ui` Next.js app.

Plan approved; run /impl-execute to ship
Spec exists; run /pipeline to generate the implementation plan + ship

```bash
/impl-execute docs/02_product/planned_features/feat_github_webhook/implementation_plan.md --all
/pipeline docs/02_product/planned_features/feat_proposals_ui --auto
```

## MVP1 Progress

| Metric | Value |
|---|---|
| Features done | **9 / 13** (69%) |
| Path to MVP1 | **19** items remaining (features + bugs + chores) |
| Features done | **10 / 13** (77%) |
| Path to MVP1 | **18** items remaining (features + bugs + chores) |
| Open bugs | 4 |
| Open chores | 11 (idea-stage debt) |
| Backlog ideas | 4 idea-only feat/infra (not yet scoped into MVP1) |
| In flight | 0 feature(s) actively shipping |

## Pipeline

### Done (9)
### Done (10)

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
| [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 |
| [feat_github_webhook](implemented_features/2026_05_12_feat_github_webhook/feature_spec.md) | Feature | GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`. | `infra_foundation` `infra_adapter_elastic` `feat_github_pr_worker` | [PR #56](https://github.com/SoundMindsAI/relyloop/pull/56) merged 2026-05-12 |
| [feat_llm_judgments](implemented_features/2026_05_11_feat_llm_judgments/feature_spec.md) | Feature | A relevance engineer selects a query set + cluster + target + rubric and the system runs the current template to fetch top-K hits per query, asks OpenAI to rate each (query, doc) on a 0–3 scale with r | `infra_foundation` `infra_adapter_elastic` `feat_study_lifecycle` | [PR #35](https://github.com/SoundMindsAI/relyloop/pull/35) merged 2026-05-11 |
| [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, judgm | `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 |
Expand All @@ -45,11 +46,9 @@ Plan approved; run /impl-execute to ship

_None._

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

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
| [feat_github_webhook](../02_product/planned_features/feat_github_webhook/feature_spec.md) | Feature | GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`. | `infra_foundation` `infra_adapter_elastic` `feat_github_pr_worker` | [PR #50](https://github.com/SoundMindsAI/relyloop/pull/50) |
_None._

### Spec (3)

Expand Down Expand Up @@ -98,8 +97,6 @@ graph LR
class chore_tutorial_polish spec;
feat_chat_agent["chat agent"]
class feat_chat_agent spec;
feat_github_webhook["github webhook"]
class feat_github_webhook plan;
feat_proposals_ui["proposals ui"]
class feat_proposals_ui spec;
infra_foundation["foundation"]
Expand All @@ -116,6 +113,8 @@ graph LR
class feat_llm_judgments done;
feat_github_pr_worker["github pr worker"]
class feat_github_pr_worker done;
feat_github_webhook["github webhook"]
class feat_github_webhook done;
feat_studies_ui["studies ui"]
class feat_studies_ui done;
infra_frontend_stack_refresh["frontend stack refresh"]
Expand Down Expand Up @@ -143,9 +142,6 @@ graph LR
infra_foundation --> feat_chat_agent
infra_frontend_stack_refresh --> feat_chat_agent
infra_optuna_eval --> feat_chat_agent
infra_foundation --> feat_github_webhook
infra_adapter_elastic --> feat_github_webhook
feat_github_pr_worker --> feat_github_webhook
feat_studies_ui --> feat_proposals_ui
feat_digest_proposal --> feat_proposals_ui
feat_github_pr_worker --> feat_proposals_ui
Expand All @@ -159,6 +155,9 @@ graph LR
infra_adapter_elastic --> feat_github_pr_worker
feat_study_lifecycle --> feat_github_pr_worker
feat_digest_proposal --> feat_github_pr_worker
infra_foundation --> feat_github_webhook
infra_adapter_elastic --> feat_github_webhook
feat_github_pr_worker --> feat_github_webhook
infra_foundation --> feat_studies_ui
feat_study_lifecycle --> feat_studies_ui
feat_digest_proposal --> feat_studies_ui
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Implementation Plan — feat_github_webhook

**Date:** 2026-05-12 (Review & Patch cycle 2026-05-12 — see §11 patch log)
**Status:** Draft (cross-model reviewed)
**Status:** Complete (PR #56, merged 2026-05-12; squash commit `9805f3e`)
**Primary spec:** [feature_spec.md](feature_spec.md) (Approved 2026-05-12 after Review & Patch cycle)
**Policy sources:**
- [`CLAUDE.md`](../../../../CLAUDE.md) — absolute rules, conventions, MVP1 stack
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,11 @@
- Next action: `/impl-execute docs/02_product/planned_features/feat_github_webhook/implementation_plan.md --all` (when MVP1 sequencing reaches this feature — `feat_studies_ui` PR #50 is the current blocker per `state.md`).

## Implementation
- Status: Not started
- Status: Complete
- Date: 2026-05-12
- PR: [#56](https://github.com/SoundMindsAI/relyloop/pull/56) (squash commit `9805f3e`)
- Stories shipped: 10 of 10 (Epic 1: 5 / Epic 2: 1 / Epic 3: 1 / Epic 4: 3)
- CI: green on cycle 4 (`25737327542`) — backend lint + typecheck + tests + 80.18% coverage; frontend; docker buildx.
- Cross-model review: GPT-5.5 final review — 3 findings, 2 accepted + applied (non-dict JSON guard + merged-without-merged_at fallback), 1 rejected with cited counter-evidence (Settings validator + `_poll_cron_kwargs` fallback are both plan-mandated belt-and-suspenders).
- Gemini Code Assist: not installed on this repo (consistent with prior PRs #25/#23/#18/#16/#4).
- Tangential captured: [`bug_test_smoke_requires_env_vars`](../bug_test_smoke_requires_env_vars/idea.md).
65 changes: 33 additions & 32 deletions docs/00_overview/mvp1_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -314,11 +314,11 @@ <h1>RelyLoop MVP1 Dashboard</h1>

<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_github_webhook/feature_spec.md">Github Webhook</a></div>
<div class="one-liner">GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`.</div>
<div class="stage-hint">Plan approved; run /impl-execute to ship</div>
<code class="cmd">/impl-execute docs/02_product/planned_features/feat_github_webhook/implementation_plan.md --all</code>
<div class="eyebrow">Next up — Feature, currently in <strong>Spec</strong></div>
<div class="title"><a href="../../docs/02_product/planned_features/feat_proposals_ui/feature_spec.md">Proposals Ui</a></div>
<div class="one-liner">Two routes — `/proposals` (filterable list) and `/proposals/{id}` (config diff + metric delta + &quot;Open PR&quot; button + post-open PR-state mirror) — plug into the existing `feat_studies_ui` Next.js app.</div>
<div class="stage-hint">Spec exists; run /pipeline to generate the implementation plan + ship</div>
<code class="cmd">/pipeline docs/02_product/planned_features/feat_proposals_ui --auto</code>
</div>
</section>

Expand All @@ -328,13 +328,13 @@ <h2>MVP1 Progress</h2>
<div class="kpi-row">
<div class="kpi ">
<div class="label">Features done</div>
<div class="value">9 / 13</div>
<div class="sub">69% of scoped MVP1 features</div>
<div class="bar"><span style="width:69%"></span></div>
<div class="value">10 / 13</div>
<div class="sub">77% of scoped MVP1 features</div>
<div class="bar"><span style="width:77%"></span></div>
</div>
<div class="kpi warn">
<div class="label">Path to MVP1</div>
<div class="value">19</div>
<div class="value">18</div>
<div class="sub">items left = features + bugs + chores</div>
</div>
<div class="kpi bug">
Expand Down Expand Up @@ -644,18 +644,7 @@ <h3>Spec <span class="count">3</span></h3>
</div>

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

<div class="card feat" data-prefix="feat">
<div class="name"><a href="../../docs/02_product/planned_features/feat_github_webhook/feature_spec.md">Github Webhook</a></div>
<div class="meta">
<span class="badge feat">Feature</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/50">PR #50</a>
</div>
<div class="one-liner">GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`.</div>

<div class="deps">depends on: <span class="dep-chip">infra_foundation</span><span class="dep-chip">infra_adapter_elastic</span><span class="dep-chip">feat_github_pr_worker</span></div>
</div>
<h3>Plan <span class="count">0</span></h3>

</div>

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

<div class="col done">
<h3>Done <span class="count">9</span></h3>
<h3>Done <span class="count">10</span></h3>

<div class="card feat" data-prefix="feat">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_11_feat_digest_proposal/feature_spec.md">Digest Proposal</a></div>
Expand All @@ -691,6 +680,18 @@ <h3>Done <span class="count">9</span></h3>
</div>


<div class="card feat" data-prefix="feat">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_12_feat_github_webhook/feature_spec.md">Github Webhook</a></div>
<div class="meta">
<span class="badge feat">Feature</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/56">PR #56</a><span>merged 2026-05-12</span>
</div>
<div class="one-liner">GitHub posts to `POST /webhooks/github` with HMAC-SHA256 signature; the receiver verifies the signature, looks up the proposal by `pr_url`, updates `pr_state` and `pr_merged_at`.</div>

<div class="deps">depends on: <span class="dep-chip">infra_foundation</span><span class="dep-chip">infra_adapter_elastic</span><span class="dep-chip">feat_github_pr_worker</span></div>
</div>


<div class="card feat" data-prefix="feat">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_11_feat_llm_judgments/feature_spec.md">Llm Judgments</a></div>
<div class="meta">
Expand Down Expand Up @@ -791,8 +792,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class chore_tutorial_polish spec;
feat_chat_agent[&quot;chat agent&quot;]
class feat_chat_agent spec;
feat_github_webhook[&quot;github webhook&quot;]
class feat_github_webhook plan;
feat_proposals_ui[&quot;proposals ui&quot;]
class feat_proposals_ui spec;
infra_foundation[&quot;foundation&quot;]
Expand All @@ -809,6 +808,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_llm_judgments done;
feat_github_pr_worker[&quot;github pr worker&quot;]
class feat_github_pr_worker done;
feat_github_webhook[&quot;github webhook&quot;]
class feat_github_webhook done;
feat_studies_ui[&quot;studies ui&quot;]
class feat_studies_ui done;
infra_frontend_stack_refresh[&quot;frontend stack refresh&quot;]
Expand Down Expand Up @@ -836,9 +837,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
infra_foundation --&gt; feat_chat_agent
infra_frontend_stack_refresh --&gt; feat_chat_agent
infra_optuna_eval --&gt; feat_chat_agent
infra_foundation --&gt; feat_github_webhook
infra_adapter_elastic --&gt; feat_github_webhook
feat_github_pr_worker --&gt; feat_github_webhook
feat_studies_ui --&gt; feat_proposals_ui
feat_digest_proposal --&gt; feat_proposals_ui
feat_github_pr_worker --&gt; feat_proposals_ui
Expand All @@ -852,6 +850,9 @@ <h2>Dependency graph (feat_ + infra_)</h2>
infra_adapter_elastic --&gt; feat_github_pr_worker
feat_study_lifecycle --&gt; feat_github_pr_worker
feat_digest_proposal --&gt; feat_github_pr_worker
infra_foundation --&gt; feat_github_webhook
infra_adapter_elastic --&gt; feat_github_webhook
feat_github_pr_worker --&gt; feat_github_webhook
infra_foundation --&gt; feat_studies_ui
feat_study_lifecycle --&gt; feat_studies_ui
feat_digest_proposal --&gt; feat_studies_ui
Expand All @@ -867,8 +868,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class chore_tutorial_polish spec;
feat_chat_agent[&quot;chat agent&quot;]
class feat_chat_agent spec;
feat_github_webhook[&quot;github webhook&quot;]
class feat_github_webhook plan;
feat_proposals_ui[&quot;proposals ui&quot;]
class feat_proposals_ui spec;
infra_foundation[&quot;foundation&quot;]
Expand All @@ -885,6 +884,8 @@ <h2>Dependency graph (feat_ + infra_)</h2>
class feat_llm_judgments done;
feat_github_pr_worker[&quot;github pr worker&quot;]
class feat_github_pr_worker done;
feat_github_webhook[&quot;github webhook&quot;]
class feat_github_webhook done;
feat_studies_ui[&quot;studies ui&quot;]
class feat_studies_ui done;
infra_frontend_stack_refresh[&quot;frontend stack refresh&quot;]
Expand Down Expand Up @@ -912,9 +913,6 @@ <h2>Dependency graph (feat_ + infra_)</h2>
infra_foundation --&gt; feat_chat_agent
infra_frontend_stack_refresh --&gt; feat_chat_agent
infra_optuna_eval --&gt; feat_chat_agent
infra_foundation --&gt; feat_github_webhook
infra_adapter_elastic --&gt; feat_github_webhook
feat_github_pr_worker --&gt; feat_github_webhook
feat_studies_ui --&gt; feat_proposals_ui
feat_digest_proposal --&gt; feat_proposals_ui
feat_github_pr_worker --&gt; feat_proposals_ui
Expand All @@ -928,6 +926,9 @@ <h2>Dependency graph (feat_ + infra_)</h2>
infra_adapter_elastic --&gt; feat_github_pr_worker
feat_study_lifecycle --&gt; feat_github_pr_worker
feat_digest_proposal --&gt; feat_github_pr_worker
infra_foundation --&gt; feat_github_webhook
infra_adapter_elastic --&gt; feat_github_webhook
feat_github_pr_worker --&gt; feat_github_webhook
infra_foundation --&gt; feat_studies_ui
feat_study_lifecycle --&gt; feat_studies_ui
feat_digest_proposal --&gt; feat_studies_ui
Expand Down
Loading
Loading