Files
DiunDashboard/.planning/STATE.md
Jean-Luc Makiola 7004e7fb3e docs(02-02): complete Server struct refactor and test isolation plan
- Add 02-02-SUMMARY.md: Server struct methods, NewTestServer pattern, per-test in-memory databases
- Update STATE.md: advance plan to 2/2, record metrics and decisions
- Update ROADMAP.md: Phase 2 Backend Refactor complete (2/2 plans)
- Update REQUIREMENTS.md: mark REFAC-02 complete (REFAC-01 and REFAC-03 already marked)
2026-03-24 08:39:29 +01:00

3.7 KiB

gsd_state_version, milestone, milestone_name, status, stopped_at, last_updated, progress
gsd_state_version milestone milestone_name status stopped_at last_updated progress
1.0 v1.0 milestone Ready to execute Completed 02-02-PLAN.md (Server struct refactor, test isolation with NewTestServer) 2026-03-24T07:39:15.372Z
total_phases completed_phases total_plans completed_plans
4 2 4 4

Project State

Project Reference

See: .planning/PROJECT.md (updated 2026-03-23)

Core value: Reliable, persistent visibility into which services need updating — data never disappears, and the dashboard is the one place you trust to show the full picture. Current focus: Phase 02 — backend-refactor

Current Position

Phase: 02 (backend-refactor) — EXECUTING Plan: 2 of 2

Performance Metrics

Velocity:

  • Total plans completed: 0
  • Average duration: —
  • Total execution time: —

By Phase:

Phase Plans Total Avg/Plan
- - - -

Recent Trend:

  • Last 5 plans: —
  • Trend: —

Updated after each plan completion | Phase 01 P01 | 2 | 2 tasks | 2 files | | Phase 01-data-integrity P02 | 7 | 2 tasks | 2 files | | Phase 02-backend-refactor P01 | 7min | 2 tasks | 7 files | | Phase 02-backend-refactor P02 | 3min | 2 tasks | 4 files |

Accumulated Context

Decisions

Decisions are logged in PROJECT.md Key Decisions table. Recent decisions affecting current work:

  • Fix SQLite bugs before any other work — data trust is the #1 priority; bug-fix tests become the regression suite for the refactor
  • Backend refactor must be behavior-neutral — all existing tests must pass before PostgreSQL is introduced
  • No ORM or query builder — raw SQL per store implementation; 8 operations across 3 tables is too small to justify a dependency
  • DATABASE_URL present activates PostgreSQL; absent falls back to SQLite with DB_PATH — no separate DB_DRIVER variable
  • [Phase 01]: Use named-column UPSERT (ON CONFLICT DO UPDATE) to preserve tag_assignments child rows on re-insert
  • [Phase 01]: Enable PRAGMA foreign_keys = ON in InitDB() before DDL to activate ON DELETE CASCADE for tag deletion
  • [Phase 01-data-integrity]: Use MaxBytesReader + errors.As(*http.MaxBytesError) per-handler (not middleware) for request body size limiting — consistent with no-middleware architecture
  • [Phase 01-data-integrity]: Oversized body tests need valid JSON prefix so decoder reads past 1MB limit; all-x bytes fail at byte 1 before MaxBytesReader triggers
  • [Phase 02-backend-refactor]: Store interface with 9 methods is the persistence abstraction; SQLiteStore holds *sql.DB and sync.Mutex as struct fields (not package globals)
  • [Phase 02-backend-refactor]: golang-migrate v4.19.1 database/sqlite sub-package confirmed to use modernc.org/sqlite (no CGO); single 0001 baseline migration uses CREATE TABLE IF NOT EXISTS for backward compatibility
  • [Phase 02-backend-refactor]: Option B for test store access: internal helpers in export_test.go (TestUpsertEvent, TestGetUpdatesMap) instead of exported Store() accessor - keeps store field unexported
  • [Phase 02-backend-refactor]: NewTestServer pattern: each test gets its own in-memory SQLite DB (RunMigrations + NewSQLiteStore + NewServer) - eliminates shared global state between tests

Pending Todos

None yet.

Blockers/Concerns

  • Phase 3: Verify pgx/v5/stdlib import path against pkg.go.dev before writing PostgreSQL query strings
  • Phase 3: Re-confirm golang-migrate v4.19.1 database/sqlite sub-package uses modernc.org/sqlite (not mattn/go-sqlite3) at implementation time

Session Continuity

Last session: 2026-03-24T07:39:15.370Z Stopped at: Completed 02-02-PLAN.md (Server struct refactor, test isolation with NewTestServer) Resume file: None