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

| Release | Theme | Progress | Status |
|---|---|---|---|
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 75 / 75 scoped done · 12 remaining | **In progress** |
| [MVP1 / v0.1](MVP1_DASHBOARD.md) | The Loop | 75 / 75 scoped done · 11 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
17 changes: 8 additions & 9 deletions docs/00_overview/MVP1_DASHBOARD.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@ Pull from the Idea backlog or capture a new feature spec.
| Metric | Value |
|---|---|
| Scoped items done | **75 / 75** (100%) — feat_/infra_/chore_/epic_ past idea stage |
| Pending work | **16** items (every not-done feat/infra/chore/bug across all priorities) |
| Pending work | **15** items (every not-done feat/infra/chore/bug across all priorities) |
| → P0 — do next | **0** unblocking / paying daily cost |
| → P1 | **1** high-value, ready when P0 clears |
| → P1 | **0** high-value, ready when P0 clears |
| → P2 (default) | 14 important to file, not blocking |
| → Backlog | 1 captured for record, not planned |
| Open bugs | 5 |
| Legacy "Path to MVP1" | 12 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) |
| Open bugs | 4 |
| Legacy "Path to MVP1" | 11 items — scoped-not-done + bugs + chore-ideas only (excludes feat/infra ideas) |
| Backlog ideas | 4 idea-only feat/infra (not yet scoped into MVP1) |
| In flight | 0 feature(s) actively shipping |

## Pipeline

### Done (92)
### Done (93)

| Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|
Expand Down Expand Up @@ -119,6 +119,7 @@ Pull from the Idea backlog or capture a new feature spec.
| [bug_get_schema_unhandled_connect_error](implemented_features/2026_05_20_bug_get_schema_unhandled_connect_error/idea.md) | Bug | `ElasticAdapter.get_schema()` at [`backend/app/adapters/elastic.py:399-416`](../../backend/app/adapters/elastic.py#L399-L416) calls `_request(..., translate_errors=False)` and maps HTTP status codes e | — | 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 | 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 | — | Complete |
| [bug_judgment_template_default_params_contract](implemented_features/2026_05_13_bug_judgment_template_default_params_contract/idea.md) | Bug | The `query_templates` API endpoint stores `declared_params` as `dict[str, str]` (per [`backend/app/api/v1/schemas.py:202`](../../backend/app/api/v1/schemas.py) — `declared_params: dict[str, str] = Fie | — | Complete |
| [bug_openai_capability_check_incapable_on_valid_key](implemented_features/2026_05_24_bug_openai_capability_check_incapable_on_valid_key/feature_spec.md) | Bug | `/healthz` exposes which probe failed (specifically: surfaces `models_endpoint` status) and, when the failure was an HTTP error, the status code that triggered it (e.g., 401 → bad key; 429 → quota). | — | [PR #234](https://github.com/SoundMindsAI/relyloop/pull/234) merged 2026-05-24 |
| [bug_pr_reconciler_blocked_by_closed_fallback](implemented_features/2026_05_23_bug_pr_reconciler_blocked_by_closed_fallback/idea.md) | Bug | The GitHub webhook receiver at [`backend/app/api/webhooks/github.py:181-209`](../../backend/app/api/webhooks/github.py#L181-L209) handles the eventual-consistency case where GitHub delivers `pull_requ | — | 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 | The test ([`test_query_sets_router_queries.py:202-231`](../../backend/tests/integration/test_query_sets_router_queries.py#L202-L231)) seeds 5 queries via `_seed_set(5)`… | — | Complete |
| [bug_test_smoke_requires_env_vars](implemented_features/2026_05_13_bug_test_smoke_requires_env_vars/idea.md) | Bug | `backend/tests/unit/test_smoke.py::test_app_import` fails when run without `DATABASE_URL_FILE` and `POSTGRES_PASSWORD_FILE` env vars in the test environment: | — | Complete |
Expand All @@ -128,11 +129,9 @@ Pull from the Idea backlog or capture a new feature spec.

_None._

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

| # | Priority | Feature | Type | One-liner | Depends on | Status |
|---|---|---|---|---|---|---|
| 1 | P1 | [bug_openai_capability_check_incapable_on_valid_key](../02_product/planned_features/bug_openai_capability_check_incapable_on_valid_key/feature_spec.md) | Bug | `/healthz` exposes which probe failed (specifically: surfaces `models_endpoint` status) and, when the failure was an HTTP error, the status code that triggered it (e.g., 401 → bad key; 429 → quota). | — | [PR #232](https://github.com/SoundMindsAI/relyloop/pull/232) |
_None._

### Spec (0)

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">75 / 75 scoped done · 12 remaining</div>
<div class="progress">75 / 75 scoped done · 11 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 — OpenAI capability check: surface `models_endpoint` status in `/healthz`

**Date:** 2026-05-24
**Status:** Draft
**Status:** Complete (PR #234, merged 2026-05-24 as squash commit `d69189db`)
**Primary spec:** [feature_spec.md](feature_spec.md)
**Policy source(s):** [CLAUDE.md](../../../../CLAUDE.md) Absolute Rules #6 (`/healthz` unauthenticated), #10 (never log/expose secrets), #11 (`/healthz` per-probe 200ms budget); [llm-orchestration.md §"Capability check at startup"](../../../01_architecture/llm-orchestration.md).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,16 @@
- Phases covered: single phase (no deferred phases)

## Implementation
- Status: Not started
- Status: Complete
- Date: 2026-05-24
- PR: [#234](https://github.com/SoundMindsAI/relyloop/pull/234) (squash-merged as `d69189db`, admin-merged)
- CI in-scope jobs: all green (backend lint+typecheck+tests+coverage, frontend lint+typecheck+tests+build, docker buildx, fast-lane unit)
- CI smoke gate: pre-existing failure from [`bug_demo_clusters_unreachable_in_healthz`](../../planned_features/bug_demo_clusters_unreachable_in_healthz/idea.md) (same failure on `main` at commits `791642e0` + `ad6ff826`; admin-merge precedent set by PR #232 + PR #228). Out of scope for this PR.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The relative link to bug_demo_clusters_unreachable_in_healthz is broken. Since this folder was moved from docs/02_product/planned_features/ to docs/00_overview/implemented_features/, the relative path needs to ascend three levels to reach the docs root before navigating to the 02_product directory. Additionally, the admin-merge precedent list has been updated to match the PR description for completeness.

Suggested change
- CI smoke gate: pre-existing failure from [`bug_demo_clusters_unreachable_in_healthz`](../../planned_features/bug_demo_clusters_unreachable_in_healthz/idea.md) (same failure on `main` at commits `791642e0` + `ad6ff826`; admin-merge precedent set by PR #232 + PR #228). Out of scope for this PR.
- CI smoke gate: pre-existing failure from [bug_demo_clusters_unreachable_in_healthz](../../../02_product/planned_features/bug_demo_clusters_unreachable_in_healthz/idea.md) (same failure on main at commits 791642e0 + ad6ff826; admin-merge precedent set by PR #228 / PR #232 / PR #233 / PR #234). Out of scope for this PR.

- Stories completed: 4/4 (1.1 CapabilityResult field + 1.2 probe refactor + cache-layer tests + 1.3 /healthz response + endpoint tests + contract tests + 1.4 architecture doc)
- Tests: +15 new/updated cases across 4 test files (7 in test_capability_check.py + 5 in test_health.py + 1 in test_probes.py + 2 in test_health_contract.py)
- Phase-gate review: GPT-5.5 — 3 findings (F1 Medium + F3 Low accepted in commit `3a40ec1a`; F2 Low rejected with counter-evidence — dashboard regen is the auto-run pre-commit hook)
- Final cross-model review: GPT-5.5 — 1 Low finding (test-helper type hints) deferred as non-regression follow-up (matches existing file convention; `make typecheck` is green)
- Gemini Code Assist: clean review, zero line-level findings

## Branch
- `bug/openai-capability-check-models-endpoint-observability`
- `bug/openai-capability-check-models-endpoint-observability` (deleted post-merge)
37 changes: 19 additions & 18 deletions docs/00_overview/mvp1_dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -403,12 +403,12 @@ <h2>MVP1 Progress</h2>
</div>
<div class="kpi warn">
<div class="label">Pending work</div>
<div class="value">16</div>
<div class="value">15</div>
<div class="sub">every not-done feat/infra/chore/bug across all priorities</div>
</div>
<div class="kpi bug">
<div class="label">Open bugs</div>
<div class="value">5</div>
<div class="value">4</div>
<div class="sub">tracked bug_* idea files</div>
</div>
<div class="kpi ">
Expand All @@ -420,7 +420,7 @@ <h2>MVP1 Progress</h2>
<div class="kpi-row">
<div class="kpi">
<div class="label">P1</div>
<div class="value">1</div>
<div class="value">0</div>
<div class="sub">high-value, ready when P0 clears</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">12</div>
<div class="value">11</div>
<div class="sub">scoped not-done + bugs + chore-ideas only (excludes feat/infra ideas)</div>
</div>
</div>
Expand Down Expand Up @@ -667,19 +667,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 bug" data-prefix="bug" data-priority="P1">
<div class="name"><a href="../../docs/02_product/planned_features/bug_openai_capability_check_incapable_on_valid_key/feature_spec.md">Openai Capability Check Incapable On Valid Key</a></div>
<div class="meta">
<span class="badge bug">Bug</span>
<span class="badge priority" data-priority="P1">P1</span>
<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/232">PR #232</a>
</div>
<div class="one-liner">`/healthz` exposes which probe failed (specifically: surfaces `models_endpoint` status) and, when the failure was an HTTP error, the status code that triggered it (e.g., 401 → bad key; 429 → quota).</div>


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

</div>

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

<div class="col done">
<h3>Done <span class="count">92</span></h3>
<h3>Done <span class="count">93</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 @@ -1835,6 +1823,19 @@ <h3>Done <span class="count">92</span></h3>
</div>


<div class="card bug" data-prefix="bug" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_24_bug_openai_capability_check_incapable_on_valid_key/feature_spec.md">Openai Capability Check Incapable On Valid Key</a></div>
<div class="meta">
<span class="badge bug">Bug</span>

<a class="pr" href="https://github.com/SoundMindsAI/relyloop/pull/234">PR #234</a> <span>merged 2026-05-24</span>
</div>
<div class="one-liner">`/healthz` exposes which probe failed (specifically: surfaces `models_endpoint` status) and, when the failure was an HTTP error, the status code that triggered it (e.g., 401 → bad key; 429 → quota).</div>


</div>


<div class="card bug" data-prefix="bug" data-priority="P2">
<div class="name"><a href="../../docs/00_overview/implemented_features/2026_05_23_bug_pr_reconciler_blocked_by_closed_fallback">Pr Reconciler Blocked By Closed Fallback</a></div>
<div class="meta">
Expand Down
5 changes: 3 additions & 2 deletions state.md

Large diffs are not rendered by default.