docs: finalize feat_home_first_run_demo_nudge post-PR-188 merge#189
Conversation
PR #188 squash 2132543 merged 2026-05-22 — 25th MVP1 feature shipped. - Moves planned_features/feat_home_first_run_demo_nudge → implemented_features/2026_05_22_feat_home_first_run_demo_nudge. - Splits the deferred phase2_idea.md out to its own planned folder at planned_features/feat_home_demo_reseed_endpoint/idea.md (renamed + origin pointer + relative paths updated to resolve from new location) so the deferred reseed endpoint surfaces in /pipeline --status. - Updates implementation_plan.md status: Draft → Complete (PR #188). - Updates pipeline_status.md: adds ## Done block. - Updates state.md: in-flight entry → merged-feature entry; Last-updated header, Branch, Active-feature fields updated. - Regenerates MVP1 dashboard (89 features across 2 releases). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Code Review
This pull request updates the project dashboards and state files to mark the "Home-page first-run demo nudge" feature as complete, signifying the 25th shipped MVP1 feature. It also introduces a new idea specification for a deferred reseed endpoint. Review feedback correctly identified several broken relative paths in the documentation and a regression in the dashboard's dependency resolution logic that incorrectly linked the new idea to completed features.
| **Status:** Complete (PR #188, merged 2026-05-22 as squash `21325432`) | ||
| **Primary spec:** [`feature_spec.md`](feature_spec.md) | ||
| **Deferred-phase tracking:** [`phase2_idea.md`](phase2_idea.md) (Phase 2 = reseed endpoint + UI button; not in this plan) | ||
| **Deferred-phase tracking:** Originally `phase2_idea.md` in this folder; split out at finalization (2026-05-22) to [`feat_home_demo_reseed_endpoint/idea.md`](../../planned_features/feat_home_demo_reseed_endpoint/idea.md) so the reseed-endpoint work surfaces in `/pipeline --status` as its own planned feature. |
There was a problem hiding this comment.
The relative path to the deferred idea is incorrect. ../../ from this directory resolves to docs/00_overview/, but the planned_features folder is located in docs/02_product/.
| **Deferred-phase tracking:** Originally `phase2_idea.md` in this folder; split out at finalization (2026-05-22) to [`feat_home_demo_reseed_endpoint/idea.md`](../../planned_features/feat_home_demo_reseed_endpoint/idea.md) so the reseed-endpoint work surfaces in `/pipeline --status` as its own planned feature. | |
| **Deferred-phase tracking:** Originally `phase2_idea.md` in this folder; split out at finalization (2026-05-22) to [`feat_home_demo_reseed_endpoint/idea.md`](../../../02_product/planned_features/feat_home_demo_reseed_endpoint/idea.md) so the reseed-endpoint work surfaces in `/pipeline --status` as its own planned feature. |
| - CI: green (5/5 jobs: backend lint+typecheck+pytest+coverage, backend unit fast lane, frontend lint+typecheck+vitest+build, docker buildx, operator-path smoke) | ||
| - Stories completed: 12 (1 in Epic 1, 4 in Epic 2, 4 in Epic 3, 3 in Epic 4) | ||
| - Cross-model review: Gemini Code Assist 3 Medium (2 accepted in `cb0bdc4` — `useClusters({ enabled })` + parity-guard regex broadening; 1 rejected with counter-evidence — `useMemo` would save nothing given React's render model + early-return). Final GPT-5.5: 0 High / 0 Medium / 2 Low (1 fixed in `2cdc44a` — banner-comment accuracy; 1 deferred to this finalization step). | ||
| - Phase 2 (reseed endpoint + UI): split out at finalization to a new planned folder [`feat_home_demo_reseed_endpoint`](../feat_home_demo_reseed_endpoint/idea.md) so it surfaces in `/pipeline --status`. |
There was a problem hiding this comment.
The relative path to the new planned folder is incorrect. It should point to docs/02_product/planned_features/.
| - Phase 2 (reseed endpoint + UI): split out at finalization to a new planned folder [`feat_home_demo_reseed_endpoint`](../feat_home_demo_reseed_endpoint/idea.md) so it surfaces in `/pipeline --status`. | |
| - Phase 2 (reseed endpoint + UI): split out at finalization to a new planned folder [`feat_home_demo_reseed_endpoint`](../../../02_product/planned_features/feat_home_demo_reseed_endpoint/idea.md) so it surfaces in `/pipeline --status`. |
| |---|---|---|---|---| | ||
| | [feat_agent_propose_search_space](implemented_features/2026_05_21_feat_agent_propose_search_space/feature_spec.md) | Feature | A new read-only agent tool `propose_search_space(template_id, cluster_id, judgment_list_id?, prior_study_id?) → SearchSpace JSON` that emits a deterministic, code-generated search space using the same | — | [PR #175](https://github.com/SoundMindsAI/relyloop/pull/175) merged 2026-05-21 | | ||
| | [feat_chat_agent](implemented_features/2026_05_12_feat_chat_agent/feature_spec.md) | Feature | A chat surface at `/chat/{conversation_id}` streams OpenAI completions via SSE. | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #60](https://github.com/SoundMindsAI/relyloop/pull/60) merged 2026-05-12 | | ||
| | [feat_chat_agent](implemented_features/2026_05_12_feat_chat_agent/feature_spec.md) | Feature | A chat surface at `/chat/{conversation_id}` streams OpenAI completions via SSE. | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_demo_reseed_endpoint` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #60](https://github.com/SoundMindsAI/relyloop/pull/60) merged 2026-05-12 | |
There was a problem hiding this comment.
The addition of feat_home_demo_reseed_endpoint to the dependencies of feat_chat_agent (which is already merged and 'Done') is incorrect. Ideas should not be listed as dependencies for completed features, as it breaks the 'Done' status logic in the dependency graph and is chronologically inconsistent. This likely indicates a bug in the dashboard regeneration script's dependency resolution logic.
| | [feat_chat_agent](implemented_features/2026_05_12_feat_chat_agent/feature_spec.md) | Feature | A chat surface at `/chat/{conversation_id}` streams OpenAI completions via SSE. | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_demo_reseed_endpoint` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #60](https://github.com/SoundMindsAI/relyloop/pull/60) merged 2026-05-12 | | |
| | [feat_chat_agent](implemented_features/2026_05_12_feat_chat_agent/feature_spec.md) | Feature | A chat surface at `/chat/{conversation_id}` streams OpenAI completions via SSE. | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #60](https://github.com/SoundMindsAI/relyloop/pull/60) merged 2026-05-12 | |
| | [chore_test_both_engines](implemented_features/2026_05_13_chore_test_both_engines/idea.md) | Chore | Complete | — | Complete | | ||
| | [chore_trial_summary_single_query](implemented_features/2026_05_13_chore_trial_summary_single_query/idea.md) | Chore | Complete | — | Complete | | ||
| | [chore_tutorial_polish](implemented_features/2026_05_12_chore_tutorial_polish/feature_spec.md) | Chore | The release tag `v0.1.0` is pushed with: a worked tutorial at `docs/08_guides/tutorial-first-study.md`, sample data (50-query set + sample ES index of ~1,000 docs from the Amazon ESCI subset), README | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_chat_agent` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #64](https://github.com/SoundMindsAI/relyloop/pull/64) merged 2026-05-12 | | ||
| | [chore_tutorial_polish](implemented_features/2026_05_12_chore_tutorial_polish/feature_spec.md) | Chore | The release tag `v0.1.0` is pushed with: a worked tutorial at `docs/08_guides/tutorial-first-study.md`, sample data (50-query set + sample ES index of ~1,000 docs from the Amazon ESCI subset), README | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_chat_agent` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_demo_reseed_endpoint` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #64](https://github.com/SoundMindsAI/relyloop/pull/64) merged 2026-05-12 | |
There was a problem hiding this comment.
Similar to feat_chat_agent, chore_tutorial_polish should not depend on the feat_home_demo_reseed_endpoint idea.
| | [chore_tutorial_polish](implemented_features/2026_05_12_chore_tutorial_polish/feature_spec.md) | Chore | The release tag `v0.1.0` is pushed with: a worked tutorial at `docs/08_guides/tutorial-first-study.md`, sample data (50-query set + sample ES index of ~1,000 docs from the Amazon ESCI subset), README | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_chat_agent` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_demo_reseed_endpoint` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #64](https://github.com/SoundMindsAI/relyloop/pull/64) merged 2026-05-12 | | |
| | [chore_tutorial_polish](implemented_features/2026_05_12_chore_tutorial_polish/feature_spec.md) | Chore | The release tag `v0.1.0` is pushed with: a worked tutorial at `docs/08_guides/tutorial-first-study.md`, sample data (50-query set + sample ES index of ~1,000 docs from the Amazon ESCI subset), README | `feat_agent_propose_search_space` `feat_auto_followup_studies` `feat_chat_agent` `feat_cluster_target_filter` `feat_config_repo_baseline_tracking` `feat_contextual_help` `feat_contextual_help_mvp2` `feat_create_study_search_space_builder` `feat_create_study_target_autocomplete` `feat_data_table_primitive` `feat_digest_executable_followups` `feat_digest_proposal` `feat_fts_rank_ordering_mvp2` `feat_github_pr_worker` `feat_github_webhook` `feat_home_first_run_demo_nudge` `feat_judgments_periodic_resume_sweep` `feat_llm_judgments` `feat_orchestrator_zero_streak_abort` `feat_pr_metric_confidence` `feat_proposals_ui` `feat_query_inline_crud` `feat_studies_ui` `feat_study_clone_from_previous` `feat_study_lifecycle` `feat_study_preflight_overlap_probe` `feat_study_target_judgment_mismatch_guard` `infra_adapter_elastic` `infra_arq_subprocess_test_mvp2` `infra_ci_smoke_makeup` `infra_dashboard_regen_pre_commit_conflict` `infra_e2e_seed_completed_study` `infra_e2e_wire_seed_helper_into_studies_spec` `infra_foundation` `infra_frontend_stack_refresh` `infra_make_targets_split_backend_only` `infra_nvmrc` `infra_optuna_eval` `infra_per_trial_timeout` `infra_structlog_test_helpers` `infra_uv_sync_drops_precommit` | [PR #64](https://github.com/SoundMindsAI/relyloop/pull/64) merged 2026-05-12 | |
…190) The phase2_idea.md was left behind inside the finalized implemented_features/2026_05_21_feat_pr_metric_confidence/ folder when feat_pr_metric_confidence shipped as PR #180 on 2026-05-21, so the deferred baseline-trial work did not surface in /pipeline --status. Moves to docs/02_product/planned_features/feat_study_baseline_trial/idea.md. - Title: refreshed. - Origin pointer + relative paths resolve from the new location. - Added a still-needed verification block (4 grep-based checks against main HEAD on 2026-05-22 confirming the bug is unfixed: baseline_metric column exists but is never written; ComparisonAgainst Literal declares "baseline" but only "runner_up" is emitted; baseline_trial_id column doesn't exist on the Study model; digest worker reads baseline_metric and passes NULL to the LLM prompt). - Priority: P2. - Regenerates MVP1 dashboard (89 → 90 features across 2 releases). No code changes. Mirrors the split-out pattern just used for phase2_idea.md inside feat_home_first_run_demo_nudge (PR #189). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Standard finalization PR for
feat_home_first_run_demo_nudge(merged 2026-05-22 as PR #188 squash21325432— the 25th MVP1 feature).planned_features/feat_home_first_run_demo_nudgetoimplemented_features/2026_05_22_feat_home_first_run_demo_nudge(spec + plan + idea + pipeline_status all travel together).phase2_idea.mdinside the feature folder) out to its own planned folder atdocs/02_product/planned_features/feat_home_demo_reseed_endpoint/idea.md— renamedphase2_idea.md→idea.md, origin pointer + relative paths updated to resolve from the new location. This makes the deferred reseed-endpoint work surface in/pipeline --statusas its own planned feature.implementation_plan.mdstatus:Draft→Complete (PR #188, merged 2026-05-22 squash 21325432).pipeline_status.md: adds a## Doneblock and fills the## Implementationblock with PR number, CI status, story count, cross-model review counts, and Phase 2 split-out pointer.state.md: replaces the in-flight entry with the merged-feature entry; refreshesLast updatedheader,Branch, andActive featurefields.feat_home_demo_reseed_endpointfolder).Test plan
implemented_features/2026_05_22_feat_home_first_run_demo_nudge/has 4 files;planned_features/feat_home_demo_reseed_endpoint/has 1; original folder gone.🤖 Generated with Claude Code