Tags

Tags give the ability to mark specific points in history as being important
  • v5.0.0

    **Release date**: TBD (human cuts the tag — INV-9: no auto-publish).
    **Tag annotation**: see `git tag -a v5.0.0 -F docs/release-notes/v5.0.0.md`.
    
    ---
    
    > One command brings up the backend, Postgres, Redis, pgAdmin, Prometheus, and Grafana. Adopter data migrates SQLite → Postgres in one script with row-count + sample equality checks. The framework is now self-hostable as a containerized stack with a managed systemd service.
    
    | Phase | What | MR |
    |---|---|---|
    | A | 5 ADRs + master plan in `docs/migrations/postgres-2026-05.md` | !62 |
    | D | `Containerfile` + `compose.yaml` + `Makefile` (still SQLite) | !63 |
    | B | SQLAlchemy 2.0 async facade + Alembic baseline (`0001_baseline`) | !64 |
    | C | Postgres parity via `DATABASE_URL` toggle, CI matrix `[sqlite, postgres]` | !65 |
    | E | Redis cache for 8 dashboard endpoints (30 s TTL, fail-open) | !66 |
    | F.1 | `make backup` / `make restore` + `/health` dependency probes (503 on degrade) | !67 |
    | F.2 | `obs` profile — Prometheus + Grafana with auto-provisioned dashboard | !68 |
    | G | `scripts/migrate_sqlite_to_pg.py` + `make migrate-from-sqlite` | !69 |
    
    Plus this release-prep MR: `docs/install-podman.md`, `infra/systemd/soviet-chess{,.user}.service`, this release notes draft.
    
    - **`make up`** — single-command bring-up (auto-detects podman-compose / docker compose). See `docs/install-podman.md`.
    - **`make up-obs`** — same plus Prometheus + Grafana with the auto-provisioned **Soviet Chess — Analytics overview** dashboard (6 panels, all 5 emitted metrics).
    - **`make backup` / `make restore TS=<ts>` / `make list-backups`** — ops basics for the Compose stack.
    - **`make migrate-from-sqlite SOURCE=<path>`** — adopter migration tool. Validates row-count parity + sampled column equality per table; refuses to overwrite non-empty target without `--force`.
    - **`/health`** now reports per-dep status when `DATABASE_URL` and/or `REDIS_URL` are set; HTTP 503 on degrade so orchestrators react.
    - **`infra/systemd/soviet-chess.service`** (rootful) and **`soviet-chess.user.service`** (rootless) — systemd units that wrap the Compose stack; auto-restart on failure, journalctl-friendly logs.
    - **Dashboard cache (Phase E)** — `/dashboard/api/{overview,gauges,trends,pareto,rl,anomalies_breakdown,danger,recommendations}` cached for 30 s in Redis. Steady-state p50 drops from ~80–150 ms → <2 ms on hit.
    
    - The 7 runtime pages (`/`, `/command`, `/wiki`, `/library`, `/graph`, `/sessions/{id}/view`, `/projects/{name}/analyses/view`) are served from `frontend/dist/` (Astro 5 + Svelte 5 + Tailwind 4). First run requires `cd frontend && pnpm install && pnpm build`. Without the build, page routes return **HTTP 503**; `/api/*` JSON endpoints continue to work regardless.
    - Legacy templates `service/static/{analyses,dashboard,graph,index,library,session-detail,wiki}.html` and the supporting JS/CSS were removed in v4.0.0. `service/static/wiki_static_template.html` is kept (server-side Markdown→HTML export by `scripts/wiki_regen.py`).
    
    - **Schema source of truth migrates** from `service/db.py:SCHEMA + AUTH_SCHEMA` strings to `service/models.py` declarative classes + Alembic revisions. Adopters who run `alembic upgrade head` get the new schema; adopters who don't see no change (the legacy `init_db()` still runs at startup, idempotent).
    - **`STATIC_DIR` removed** from `service/config.py` (Phase 4.d cleanup carried into v5.0.0).
    - **New required system deps for the containerized path**: Podman 4.4+ (or Docker 23+) + GNU Make. Bare-metal install path's prerequisites unchanged.
    
    - Routes still use the legacy `get_db()` raw `sqlite3` connection. **`DATABASE_URL=sqlite:///…` remains the runtime default**; setting it to Postgres activates the SQLAlchemy facade, Alembic, the cache, and `/health` probes — but the route handlers themselves still need their `SOVIET_CHESS_DB` SQLite. Per-route migration to async SQLAlchemy is incremental work in v5.x (Phase B.2+).
    - Public API surface (`/dashboard/api/*`, `/users`, `/sessions`, …) is wire-compatible with v4.x.
    - Bare-metal install (`uvicorn` directly) is fully supported.
    
    For an existing v4.x adopter upgrading to v5.0.0:
    
    - [ ] `git pull origin main` (and `git tag --list` shows `v5.0.0`).
    - [ ] Decide: stay bare-metal (existing flow works), or switch to containers (`make up` flow).
    - [ ] If containers: install Podman 4.4+ or Docker 23+, then `cp .env.example .env`, edit ports if needed, `make up`. See [`docs/install-podman.md`](../install-podman.md).
    - [ ] If migrating data: run the 3-step runbook in `docs/install-podman.md` ("Optional: switch backend from SQLite to PostgreSQL").
    - [ ] If installing as a managed service: copy `infra/systemd/soviet-chess.user.service` to `~/.config/systemd/user/`, enable.
    - [ ] Run the obs profile if you want graphs: `make up-obs`, login to Grafana (`admin / soviet_dev`).
    
    - **Phase B.2+**: convert the 22 dashboard / auth / sessions / wiki / library / analyses routes off `get_db()` raw sqlite3 to `get_async_session()` (AsyncSession). Once landed, `DATABASE_URL` becomes a true runtime switch and Postgres is a full first-class deploy target.
    - **GPG-signed backup bundles** in `make backup` (the framework already has GPG infra for `service/manage.py` SQLite backups).
    - **Structured JSON logging** in the backend (`logging.config.dictConfig`).
    - **Loki integration** for adopters who want centralised logs.
    - **Auth session HOT path in Redis** (HSET token; deferred from Phase E because of revocation correctness traps — needs explicit dual-store invalidation tests).
    
    Architecture + execution: ♚ Rey, ♜ Torre, ♝ Alfil, ♞ Caballo, ♟ Peón across 8 MRs over ~50 hours of focused work. Schema decisions captured in `docs/adr/ADR-001..ADR-005`.
    
    Reference blueprint: [GuerrillaSolidaria / Crisol](https://gitlab.com/pineiden/GuerrillaSolidaria) — the compose pattern this framework adopted (postgres:17-alpine + redis:7-alpine + backend with embedded dist/ + Makefile single-command bring-up).
  • v3.1.2

    release v3.1.2
    
    - Pieces (Torre/Alfil/Caballo/Reina/Peón) as real subagents + blackboard MCP (BREAKING)
    - Service v2.11: Command Center dashboard + /blackboard/api/*
    - Smoke-6 audit-trail endpoint suite
    - Council (four-voice deliberation skill)
    - Gateguard (pre-edit fact-forcing hook)
    - Rey model escalator
    - chore: enable 4 soviet MCP servers in local settings
    
    Reina gate: PASS · 3 P2 follow-ups (dashboard.html LOC, create_session refactor, missing Task-ID on 9bb0e75)
  • v3.1.1

    Soviet Chess Dev Framework v3.1.1
    
    Operational fixes from first live smoke:
    
    - MCP packaging: schema.sql inlined as Python constant in store.py so
      uv tool install picks it up; fixes "claude mcp list" Failed to connect
      on fresh installs.
    - Agent INV-16 reinforcement (5 agent files): bb.put MANDATORY before
      any return text, INV-16 cited in step body, fallback verdict_error on
      bb.put failure.
    - v3-smoke-test.sh: static check for "MANDATORY" + "INV-16" markers in
      agent files, catching prompt regressions before live runs.
    - Security: rotated admin API key (auth_users.id=1), removed hardcoded
      fallback in 2 hook scripts, both now require SOVIET_CHESS_API_KEY env.
    - Calibration baseline (informational): Reina (sonnet) ~3.8 min,
      Caballo (haiku) ~5 min, parallel wall-clock = slower agent.
    
    See CHANGELOG.md for details.