From 94878b026ec568efaea8d5693007b0de1519ab10 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 17 May 2026 20:58:08 +0000 Subject: [PATCH] docs: finalize chore_data_table_primitive_followups items 1+2+4+6 (PR #132) - state.md: refresh Last updated + Branch lines; prepend the PR #132 entry to "Most recent meaningful changes" capturing the 4-of-6 item resolution + Gemini adjudication outcomes. Chore folder stays in planned_features/ because items 3 + 5 remain open in its idea.md per impl-execute Step 8.6 (do not move when phase idea files exist). --- state.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/state.md b/state.md index a7f9ccc1..0be136fc 100644 --- a/state.md +++ b/state.md @@ -2,13 +2,13 @@ > Read this first. Snapshots the active branch, what just shipped, what's in flight, what's queued, and where the project currently sits in the MVP1 → GA roadmap. Updated whenever a feature lands or a priority shifts. -**Last updated:** 2026-05-17 (after `infra_e2e_seed_completed_study` merged as PR #130 — dev-only `POST /api/v1/_test/studies/seed-completed` endpoint + `seedStudyCompletedWithDigest` Playwright helper enabling deterministic E2E coverage of completed-study surfaces. Strict env guard returns 404 outside `ENVIRONMENT=development`. 2 commits-of-followup captured `infra_e2e_wire_seed_helper_into_studies_spec/idea.md` for the deferred Playwright tests that broke the smoke lane on first push). +**Last updated:** 2026-05-17 (after `chore_data_table_primitive_followups` items 1+2+4+6 of 6 merged as PR #132 — test mock helper extraction + `useLocalStorageSet` docstring lock + `?limit=` allowlist coercion + URL-state validation in `useDataTableUrlState`. Items 3 + 5 remain open per the chore's idea file. UI vitest **368 passing across 56 files** — +11 cases. Defense-in-depth: direct URLs with `?status=invented` or `?sort=garbage:asc` now hydrate as empty matchers instead of being sent to the backend and 422-ing). --- ## Current branch / execution context -- **Branch:** `main` (post-merge of PR #130 squash commit `13b3383` 2026-05-17). Finalization docs PR off `docs/finalize-e2e-seed-completed-study`. Prior squashes: PR #128 `73459d2` 2026-05-17 (bug_cursor_decode_value_validation), PR #126 `d6115b3` 2026-05-16 (feat_data_table_primitive). `v0.1.0` annotated tag still on `main` commit `d099536` 2026-05-13; GitHub Release at https://github.com/SoundMindsAI/relyloop/releases/tag/v0.1.0. +- **Branch:** `main` (post-merge of PR #132 squash commit `ee4c8d4` 2026-05-17). Finalization docs PR off `docs/finalize-data-table-followups`. Prior squashes: PR #130 `13b3383` 2026-05-17 (infra_e2e_seed_completed_study), PR #128 `73459d2` 2026-05-17 (bug_cursor_decode_value_validation), PR #126 `d6115b3` 2026-05-16 (feat_data_table_primitive). `v0.1.0` annotated tag still on `main` commit `d099536` 2026-05-13; GitHub Release at https://github.com/SoundMindsAI/relyloop/releases/tag/v0.1.0. - **Active feature:** none in flight. **Three PRs shipped 2026-05-15:** PR #122 (Phase 1, 16th MVP1 feature — Tooltip primitive + 26 placements on create-study modal + study detail), PR #123 (Phase 1 finalization docs), PR #124 (Phases 2 + 3 — 17th MVP1 feature; 21 additional tooltips on judgments + proposals + cluster registration + 2 new first-run components: chat ExamplePrompts strip + Stripe-style StartHereChecklist on home page). The original "MVP1 Phase 1 only" scope-lock was reversed mid-day: operator decided to ship Phases 2 + 3 together with a Stripe-style design call rather than wait for MVP2. PR #124 took 2 hours from idea-folder reuse to merge. 47 total tooltip placements + 2 new first-run components live in `main`. **PR #122 shipped 2026-05-15 morning** — `feat_contextual_help` Phase 1 (16th MVP1 feature). Adds the first Tooltip primitive (`@radix-ui/react-tooltip@~1.2.8` + shadcn-style wrapper at `ui/src/components/ui/tooltip.tsx`), two glossary-backed wrappers (`InfoTooltip` standalone + asChild modes; `HelpPopover` click-to-open with `react-markdown` safety filter), and a 49-key glossary source-of-truth at `ui/src/lib/glossary.ts` (8 enum groups parity-tested against `enums.ts`). 26 tooltip placements across the create-study modal (Step 1 target + Step 3 template + 9 Step 5 inputs), study-header (status badge dynamic key + Best metric + Trials), trials-table (5 column headers + Sort label), and digest panel (5 section labels + Open PR enabled + Open PR disabled). The disabled Open PR button refactored from native `disabled` to `aria-disabled="true"` so it stays focusable and the tooltip reveals on focus (AC-11). Gemini Code Assist: 2 findings (1 accepted + fixed, 1 rejected with cited counter-evidence). Final GPT-5.5 review: 1 Medium accepted-framing-but-deferred. Spec converged at GPT-5.5 cycle 3 (24 findings, 23 accepted + 1 rejected); plan converged at cycle 2 (12 findings, 10 accepted + 1 rejected + 1 spec patch). UI vitest now **279 passing across 48 files** (was 249 across 45 — +3 new test files, +30 cases). Playwright E2E **8 passing** (was 5 — +3 new contextual-help tests). One follow-up filed: `infra_e2e_seed_completed_study/idea.md` tracks the E2E gap for digest-panel triggers + AC-11 (cross-subsystem helper for seeding a completed study with digest + proposal; component-level coverage is in place). Phases 2 + 3 deferred to MVP2 via `feat_contextual_help_mvp2/` (judgments + proposals tooltips; chat + cluster + home onboarding; the home-page "Start here" panel is the only product-design-shaped item). **Earlier — seven PRs shipped 2026-05-14:** `feat_judgments_periodic_resume_sweep` (PR #104, 14th MVP1 feature), `bug_query_inline_crud_since_filter_uuidv7_ms_collision` (PR #106 — UUIDv7 ms-collision test flake), `infra_dashboard_regen_pre_commit_conflict §2+§4` (PR #108 — dashboard regen idempotency + relative-link rewriting), `infra_make_targets_split_backend_only` (PR #110 — `make backend-fmt/lint/typecheck` + symmetric `ui-fmt` so Node-18 contributors aren't blocked), `chore_digest_worker_narrow_except` (PR #112 — narrowed `except Exception` allowlist to `(ValueError,)` + ERROR-level `digest_importance_failed_unexpected` event), `infra_structlog_test_helpers` (PR #114 — factored the two structlog test-assertion patterns into `backend/tests/_log_helpers.py`), and `chore_chat_last_message_preview` (PR #117 — `last_message_preview` + `last_message_at` on `ConversationSummary` via LATERAL JOIN; frontend shows preview under title + swaps displayed timestamp from `created_at` to `last_message_at`). Plus PR #116 dropped `chore_studies_ui_shadcn_polish` as won't-do (forward-compat audit on NavigationMenu primitive + ClusterFilterSelect precedent on native `