diff --git a/CHANGELOG.md b/CHANGELOG.md index 016853e..8600b53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,17 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -Post-v1.2.0 commits on `master`. No version bump yet. +No commits beyond v1.3.0 yet. ### Added -- New external dependency on `civiccore`, now pinned to the versioned `v0.1.0` GitHub release wheel rather than a Git SHA. -- Backend migrations now run the `civiccore` shared-schema baseline before records' own chain via `backend/alembic/env.py`. See [ADR-0003](https://github.com/CivicSuite/civicsuite/blob/main/docs/architecture/ADR-0003-civiccore-alembic-baseline-strategy.md) for the rationale and gate contract. -- 3 migration gate tests at `backend/tests/test_civiccore_migration_gates.py` covering fresh-install, v1.2.x upgrade, and reapplication idempotency scenarios. + +### Changed + +### Deprecated + +### Removed + +### Fixed + +### Security + +## [1.3.0] - 2026-04-25 + +Phase 1 CivicCore extraction release. Records now consumes `civiccore` v0.1.0 as a versioned dependency, two-layer Alembic migration order is in place, and the release-gate scaffolding (verify-release.sh, ADR-0003 migration gates, .dockerignore build hardening) is wired into CI. + +### Added +- Phase 1 CivicCore extraction landed: `civiccore` v0.1.0 is now a declared dependency (release wheel, not source). Shared models (User, Role, Department, audit_log) and migrations now live in civiccore and are consumed via the shim layer. +- Two-layer migration order: civiccore migrations run first via `civiccore.migrations.runner.upgrade_to_head()`, then records-side migrations run as before. Fresh installs and upgrades both tested. +- Migration idempotency guards: 14 records-side migrations carry guards for shared-table ops (create_table, add_column, alter_column, create_index, create_foreign_key, create_unique_constraint, create_check_constraint) so they no-op when civiccore has already created the objects. +- CI merge bar hardened: 3 ADR-0003 migration gate tests (fresh install, v1.2.x upgrade, civiccore-first install) are standing required-pass checks on every PR. +- `scripts/verify-release.sh` added: 6-step release gate (pytest, ruff, version lockstep, doc presence, build, fresh-virtualenv wheel install). +- Build context hardening: `.dockerignore` added at the repo root. Frontend build context dropped from 241.93 MB to 0.88 MB (-99.6%) and now completes on a clean clone (was failing on transient `node_modules/.bin/.` symlinks). Api build context dropped from 2.41 MB to 1.22 MB (-49%). `backend/tests/fixtures/` is intentionally NOT excluded — the v1.2.0 schema fixture lives there and must remain in the api build context. (PR #29, master `fe5d7e3`.) ### Changed - `Dockerfile.backend` no longer installs `git`; the backend now resolves `civiccore` from a versioned wheel URL and no longer needs Git at image-build time. - 14 records migrations updated to use `civiccore.migrations.guards.idempotent_*` helpers, making them safe to re-apply on databases where the civiccore baseline has already created the shared tables (users, service_accounts, audit_log, data_sources, documents, document_chunks, model_registry, exemption_rules, connector_templates, departments, system_catalog, city_profile, notification_templates, prompt_templates, sync_run_log, sync_failures). -- Build performance: added `.dockerignore` at repo root to exclude `.git`, `node_modules`, `__pycache__`, virtualenvs, and other dev artifacts from docker build context. Image build size and time reduced — see PR description for exact delta. Frontend build also fixed: without `.dockerignore`, transient npm `.bin/.` symlinks in `node_modules` could fail the BuildKit "load build context" step with `invalid file request`. ## [1.2.0] - 2026-04-23 diff --git a/README.md b/README.md index f1b90fd..c66337d 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,8 @@ Service accounts with hashed API keys enable instance-to-instance federation acc ## Status +**v1.3.0** — 2026-04-25 release. Phase 1 CivicCore extraction landed: `civiccore` v0.1.0 is now consumed as a release-wheel dependency. Two-layer migration order — civiccore migrations run first via subprocess, then records-side. No API or UI changes (infrastructure only). See [CHANGELOG](CHANGELOG.md) and the v1.3.0 release notes for operator upgrade guidance. + **v1.2.0** — 2026-04-23 release. Tier 5 (installer + onboarding + seeding + model picker + portal mode) and Tier 6 (at-rest encryption, ENG-001 closed) ship together. CI green on `d556904` (run 24853147133). Backend 617/617 pytest, frontend 36/36 vitest, unsigned Windows installer produced on tag push. **v1.1.0** — Phase 2 release with department access controls, 50-state exemption rules, and compliance templates. @@ -241,4 +243,4 @@ Service accounts with hashed API keys enable instance-to-instance federation acc | **Phase 3** | Public portal | Public homepage, search, guided request wizard, request tracker, help pages | Partial — T5D minimal surface shipped (landing + resident-registration + authenticated submission); published-records search, resident dashboard, and track-my-request remain Planned | | **Phase 4** | Transparency layer | Open records library, reporting dashboards, public archive, federation | Planned (v2.0) | -*Note: Version numbers (semver) track release history. Phase numbers track design completeness per the canonical spec. They are separate systems. Current build (v1.2.0) includes backend work from Phases 0-2 and partial Phase 3 (T5D minimal public portal surface), but has not completed the full scope of any phase. See [canonical spec](docs/UNIFIED-SPEC.md) for complete requirements and [reconciliation](docs/RECONCILIATION-2026-04-13.md) for current gap analysis.* +*Note: Version numbers (semver) track release history. Phase numbers track design completeness per the canonical spec. They are separate systems. Current build (v1.3.0) includes backend work from Phases 0-2 and partial Phase 3 (T5D minimal public portal surface), but has not completed the full scope of any phase. See [canonical spec](docs/UNIFIED-SPEC.md) for complete requirements and [reconciliation](docs/RECONCILIATION-2026-04-13.md) for current gap analysis.* diff --git a/README.txt b/README.txt index 020d3e5..f7d1aa4 100644 --- a/README.txt +++ b/README.txt @@ -181,6 +181,8 @@ Service accounts with hashed API keys enable instance-to-instance federation acc ## Status +**v1.3.0** — 2026-04-25 release. Phase 1 CivicCore extraction landed: `civiccore` v0.1.0 is now consumed as a release-wheel dependency. Two-layer migration order — civiccore migrations run first via subprocess, then records-side. No API or UI changes (infrastructure only). See [CHANGELOG](CHANGELOG.md) and the v1.3.0 release notes for operator upgrade guidance. + **v1.2.0** — 2026-04-23 release. Tier 5 (installer + onboarding + seeding + model picker + portal mode) and Tier 6 (at-rest encryption, ENG-001 closed) ship together. CI green on `d556904` (run 24853147133). Backend 617/617 pytest, frontend 36/36 vitest, unsigned Windows installer produced on tag push. **v1.1.0** — Phase 2 release with department access controls, 50-state exemption rules, and compliance templates. @@ -235,4 +237,4 @@ Service accounts with hashed API keys enable instance-to-instance federation acc | **Phase 3** | Public portal | Public homepage, search, guided request wizard, request tracker, help pages | Partial — T5D minimal surface shipped (landing + resident-registration + authenticated submission); published-records search, resident dashboard, and track-my-request remain Planned | | **Phase 4** | Transparency layer | Open records library, reporting dashboards, public archive, federation | Planned (v2.0) | -*Note: Version numbers (semver) track release history. Phase numbers track design completeness per the canonical spec. They are separate systems. Current build (v1.2.0) includes backend work from Phases 0-2 and partial Phase 3 (T5D minimal public portal surface), but has not completed the full scope of any phase. See [canonical spec](docs/UNIFIED-SPEC.md) for complete requirements and [reconciliation](docs/RECONCILIATION-2026-04-13.md) for current gap analysis.* +*Note: Version numbers (semver) track release history. Phase numbers track design completeness per the canonical spec. They are separate systems. Current build (v1.3.0) includes backend work from Phases 0-2 and partial Phase 3 (T5D minimal public portal surface), but has not completed the full scope of any phase. See [canonical spec](docs/UNIFIED-SPEC.md) for complete requirements and [reconciliation](docs/RECONCILIATION-2026-04-13.md) for current gap analysis.* diff --git a/backend/app/config.py b/backend/app/config.py index 3d6f609..b30aadc 100644 --- a/backend/app/config.py +++ b/backend/app/config.py @@ -3,7 +3,7 @@ from pydantic import field_validator, model_validator from pydantic_settings import BaseSettings -APP_VERSION = "1.2.0" +APP_VERSION = "1.3.0" _INSECURE_SECRETS = {"CHANGE-ME", "CHANGE-ME-generate-with-openssl-rand-hex-32", ""} diff --git a/backend/pyproject.toml b/backend/pyproject.toml index cecd4bd..595b70c 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "civicrecords-ai" -version = "1.2.0" +version = "1.3.0" description = "Open-source AI-powered open records support for American cities" requires-python = ">=3.12" license = "Apache-2.0" diff --git a/docs/SUPERVISOR.md b/docs/SUPERVISOR.md index edf278b..e451cb8 100644 --- a/docs/SUPERVISOR.md +++ b/docs/SUPERVISOR.md @@ -24,7 +24,7 @@ Red flag if any of these disagree with each other. Ask Claude to reconcile befor 2. **Run the sovereignty check yourself before a push.** `bash scripts/verify-sovereignty.sh`. No `verify-release.sh` exists in this repo — do not accept a claim that one was run. 3. **Check lint + types on touched code.** `cd backend && ruff check app tests`. `cd frontend && npx tsc --noEmit`. `cd frontend && npm run build` is the integrated check. 4. **Watch OpenAPI drift.** If backend schemas changed, `docs/openapi.json` must be regenerated and `frontend/src/generated/api.ts` refreshed via `npm run generate:types`. Zero-diff regen is the Tier-6 standard. -5. **Verify version lockstep before any push.** `backend/pyproject.toml` `version = "1.2.0"` must equal `frontend/package.json` `"version": "1.2.0"` must equal the top `[x.y.z]` entry in `CHANGELOG.md` must equal the "Current release" line in `docs/UNIFIED-SPEC.md`. A mismatch is a dealbreaker — no push. +5. **Verify version lockstep before any push.** `backend/pyproject.toml` `version = "1.3.0"` must equal `frontend/package.json` `"version": "1.3.0"` must equal the top `[x.y.z]` entry in `CHANGELOG.md` must equal the "Current release" line in `docs/UNIFIED-SPEC.md`. A mismatch is a dealbreaker — no push. --- diff --git a/docs/UNIFIED-SPEC.md b/docs/UNIFIED-SPEC.md index 598a91f..de6e555 100644 --- a/docs/UNIFIED-SPEC.md +++ b/docs/UNIFIED-SPEC.md @@ -8,7 +8,7 @@ April 13, 2026 | Status | Canonical — verified against repository at commit head | | Supersedes | All prior spec versions (v2.0, v2.2, v3.0, v3.0.1) | | Repository | github.com/scottconverse/civicrecords-ai | -| Current release | v1.2.0 (April 23, 2026) — versions aligned across all files | +| Current release | v1.3.0 (April 24, 2026) — versions aligned across all files | | Test suite | 617 automated backend tests + 36 frontend tests — all passing; GitHub Actions CI-verified (run 24853147133 on commit `d556904`) | | Method | GitHub API crawl of repo structure, README, CHANGELOG, config files, module directories, and in-repo RECONCILIATION doc | @@ -19,11 +19,11 @@ This is the single source of truth for CivicRecords AI. It merges comprehensive When narrative claims and repository evidence disagree, repository evidence wins. This document replaces all prior spec versions. ### 1.1 Version Alignment (Resolved) -As of v1.2.0, version numbers are aligned across all four authoritative files: -backend/app/config.py: APP_VERSION = "1.2.0" -backend/pyproject.toml: version = "1.2.0" -frontend/package.json: version = "1.2.0" -CHANGELOG.md: [1.2.0] - 2026-04-23 +As of v1.3.0, version numbers are aligned across all four authoritative files: +backend/app/config.py: APP_VERSION = "1.3.0" +backend/pyproject.toml: version = "1.3.0" +frontend/package.json: version = "1.3.0" +CHANGELOG.md: [1.3.0] - 2026-04-24 The version drift documented in prior spec versions has been resolved and remains resolved. The CHANGELOG now covers four releases: 0.1.0 (foundation), 1.0.0 (design system + core features), 1.1.0 (department scoping, compliance, and feature sprint), and 1.2.0 (Tier 5 installer/onboarding/seeding/model-picker/portal-mode + Tier 6 at-rest encryption ENG-001 closure). ## 2. Product Summary diff --git a/docs/admin-manual-it.html b/docs/admin-manual-it.html index be12f8e..37abc55 100644 --- a/docs/admin-manual-it.html +++ b/docs/admin-manual-it.html @@ -3,11 +3,11 @@ -CivicRecords AI — IT Administrator Manual v1.2.0 +CivicRecords AI — IT Administrator Manual v1.3.0