Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ The format follows Keep a Changelog, and this project follows Semantic Versionin

## [Unreleased]

## [0.2.1] - 2026-05-21

### Corrected

- Corrected the false v1.0.0 release label after the independent CivicSuite release-integrity audit found CivicZone does not meet the Section 2 FINISHED and SHIPPING bar.
- Set the honest current label to v0.2.1 and superseded the mistaken v1.0.0 posture without deleting the historical record.
- Current classification: scaffold with partial persistence/workflow plumbing; no real AI layer, full frontend, real municipal data/search, or public-use gate.
- CivicZone must not be described as finished, shipping, city-ready, product-ready, or public-use ready until a future independent audit signs off against the full Section 2 gate.

## [1.0.0] - 2026-05-21

### Release note
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

CivicZone is CivicSuite's parcel-aware zoning and land-use Q&A module.

Current state: **CivicZone v1.0.0 public-use module release**. This repo contains a FastAPI service, health/root endpoints, documentation gates, canonical zoning schema models, Alembic migrations, deterministic parcel/zone lookup, cited use-rule lookup, cited dimensional-rule prechecks, resident Q&A with refusal and escalation rules, optional database-backed parcel/rule, resident-question ledger, and staff-workflow records through `CIVICZONE_PARCEL_RULE_DB_URL`, staff-only precedent protection, a browser-usable resident UI at `/civiczone`, a staff workflow shell at `/civiczone/staff`, adversarial local integration mocks, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment. See [docs/release-recovery-status.md](docs/release-recovery-status.md) for historical recovery context and current release evidence.
Current state: **v0.2.1 corrective demotion state - scaffold with partial persistence/workflow plumbing; no real AI layer, full frontend, real municipal data/search, or public-use gate. The previous v1.0.0 release was published in error and is superseded by this honest sub-1.0.0 label.**. This repo contains a FastAPI service, health/root endpoints, documentation gates, canonical zoning schema models, Alembic migrations, deterministic parcel/zone lookup, cited use-rule lookup, cited dimensional-rule prechecks, resident Q&A with refusal and escalation rules, optional database-backed parcel/rule, resident-question ledger, and staff-workflow records through `CIVICZONE_PARCEL_RULE_DB_URL`, staff-only precedent protection, a browser-usable resident UI at `/civiczone`, a staff workflow shell at `/civiczone/staff`, adversarial local integration mocks, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment. See [docs/release-recovery-status.md](docs/release-recovery-status.md) for historical recovery context and current release evidence.

## Product Boundaries

Expand Down
2 changes: 1 addition & 1 deletion README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ CivicZone

CivicZone is CivicSuite's parcel-aware zoning and land-use Q&A module.

Current state: CivicZone v1.0.0 public-use module release. This repo contains a FastAPI service, health/root endpoints, documentation gates, canonical zoning schema models, Alembic migrations, deterministic parcel/zone lookup, cited use-rule lookup, cited dimensional-rule prechecks, resident Q&A with refusal and escalation rules, optional database-backed parcel/rule, resident-question ledger, and staff-workflow records through CIVICZONE_PARCEL_RULE_DB_URL, staff-only precedent protection, a browser-usable resident UI at /civiczone, a staff workflow shell at /civiczone/staff, adversarial local integration mocks, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment. See docs/release-recovery-status.md for historical recovery context and current release evidence.
Current state: CivicZone v0.2.1 corrective demotion state. This repo contains a FastAPI service, health/root endpoints, documentation gates, canonical zoning schema models, Alembic migrations, deterministic parcel/zone lookup, cited use-rule lookup, cited dimensional-rule prechecks, resident Q&A with refusal and escalation rules, optional database-backed parcel/rule, resident-question ledger, and staff-workflow records through CIVICZONE_PARCEL_RULE_DB_URL, staff-only precedent protection, a browser-usable resident UI at /civiczone, a staff workflow shell at /civiczone/staff, adversarial local integration mocks, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment. See docs/release-recovery-status.md for historical recovery context and current release evidence.

Product boundaries:

Expand Down
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Security

CivicZone Current version: 1.0.0. Deploy it behind the city's trusted access layer, set `CIVICZONE_STAFF_TRUSTED_PROXY_CIDRS` for the reverse proxy allowed to inject staff headers, review local parcel/rule data with planning staff, and route official zoning determinations to municipal staff.
CivicZone Current version: 0.2.1. The previous v1.0.0 release was published in error and does not prove public-use readiness. Deploy it only for local scaffold evaluation behind the city's trusted access layer, set `CIVICZONE_STAFF_TRUSTED_PROXY_CIDRS` for the reverse proxy allowed to inject staff headers, review local parcel/rule data with planning staff, and route official zoning determinations to municipal staff.

Report suspected vulnerabilities privately to the project maintainer. Do not open public issues containing exploit details, secrets, or sensitive municipal data.
2 changes: 1 addition & 1 deletion USER-MANUAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

CivicZone answers routine parcel-aware zoning questions with citations. It is not a zoning determination tool, not legal advice, and not a replacement for planner review.

Current state: CivicZone v1.0.0 public-use module release. The package, health endpoints, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger records, staff workflow records, citation-grounded resident Q&A, staff-only precedent protection, local adversarial integration mocks, a browser-usable resident UI at `/civiczone`, a staff workflow shell at `/civiczone/staff`, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment exist. CivicZone does not call live external systems by default, does not provide legal advice, and does not make official zoning determinations. See `docs/release-recovery-status.md` for historical recovery context and current release evidence.
Current state: CivicZone v0.2.1 corrective demotion state. The package, health endpoints, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger records, staff workflow records, citation-grounded resident Q&A, staff-only precedent protection, local adversarial integration mocks, a browser-usable resident UI at `/civiczone`, a staff workflow shell at `/civiczone/staff`, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment exist. CivicZone does not call live external systems by default, does not provide legal advice, and does not make official zoning determinations. See `docs/release-recovery-status.md` for historical recovery context and current release evidence.

The resident UI shows a pre-filled parcel lookup for `123 Main St`, zone context, use and dimensional-rule cards, citation-grounded Q&A, visible loading/success/empty/error/partial state guidance, and planner-escalation guidance. It is informational only: it is not legal advice, not a zoning determination, and not a replacement for municipal planning staff.

Expand Down
2 changes: 1 addition & 1 deletion USER-MANUAL.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

CivicZone answers routine parcel-aware zoning questions with citations. It is not a zoning determination tool, not legal advice, and not a replacement for planner review.

Current state: CivicZone v1.0.0 public-use module release. The package, health endpoints, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger records, staff workflow records, citation-grounded resident Q&A, staff-only precedent protection, local adversarial integration mocks, a browser-usable resident UI at /civiczone, a staff workflow shell at /civiczone/staff, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment exist. CivicZone does not call live external systems by default, does not provide legal advice, and does not make official zoning determinations. See docs/release-recovery-status.md for historical recovery context and current release evidence.
Current state: CivicZone v0.2.1 corrective demotion state. The package, health endpoints, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger records, staff workflow records, citation-grounded resident Q&A, staff-only precedent protection, local adversarial integration mocks, a browser-usable resident UI at /civiczone, a staff workflow shell at /civiczone/staff, trusted-proxy staff access validation, and CivicCore v1.1.0 release-wheel dependency alignment exist. CivicZone does not call live external systems by default, does not provide legal advice, and does not make official zoning determinations. See docs/release-recovery-status.md for historical recovery context and current release evidence.

The resident UI shows a pre-filled parcel lookup for `123 Main St`, zone context, use and dimensional-rule cards, citation-grounded Q&A, visible loading/success/empty/error/partial state guidance, and planner-escalation guidance. It is informational only: it is not legal advice, not a zoning determination, and not a replacement for municipal planning staff.

Expand Down
2 changes: 1 addition & 1 deletion civiczone/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""CivicZone package."""

__version__ = "1.0.0"
__version__ = "0.2.1"
2 changes: 1 addition & 1 deletion civiczone/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def root() -> dict[str, str]:
"version": __version__,
"status": "v1 parcel-aware zoning Q&A runtime",
"message": (
"CivicZone v1.0.0 provides deterministic parcel lookup, cited use-rule lookup, cited dimensional prechecks, "
"CivicZone v0.2.1 provides deterministic parcel lookup, cited use-rule lookup, cited dimensional prechecks, "
"resident zoning Q&A with refusal and escalation rules, staff workflow APIs, optional database-backed parcel/rule and question-ledger records, "
"canonical zoning schema migrations, adversarial local integration mocks, an accessible resident UI, and a staff workflow UI shell. "
"It does not make zoning determinations, give legal advice, replace planner review, or call live external systems by default."
Expand Down
2 changes: 1 addition & 1 deletion civiczone/public_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ def render_public_lookup_page() -> str:
<h1>CivicZone resident lookup</h1>
<p class="lede">Parcel zoning context, cited use rules, dimensional standards, and escalation paths for residents. CivicZone provides information only; planning staff make official determinations.</p>
</div>
<span class="badge">v1.0.0 public-use module</span>
<span class="badge">v0.2.1 corrective demotion state</span>
</header>
<main id="main" tabindex="-1">
<section class="panel workspace" aria-labelledby="lookup-title">
Expand Down
4 changes: 2 additions & 2 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ <h1>Zoning answers with citations, not guesses.</h1>
<p class="lede">CivicZone is the parcel-aware zoning and land-use module for CivicSuite. It helps residents and planners find routine zoning information while escalating actual determinations to staff.</p>

<section class="panel">
<span class="badge">v1.0.0 public-use module release</span>
<span class="badge">v0.2.1 corrective demotion state</span>
<h2>Current State</h2>
<p>CivicZone v1.0.0 includes the FastAPI service, root endpoint, health endpoint, documentation gates, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger, staff workflow records via <code>CIVICZONE_PARCEL_RULE_DB_URL</code>, citation-grounded resident Q&amp;A, staff-only precedent protection, local adversarial integration mocks, browser-usable resident UI, staff workflow shell, trusted-proxy staff access validation, and CivicCore v1.1.0 dependency alignment. CivicZone does not make official zoning determinations, provide legal advice, or call live external vendor systems by default.</p>
<p>CivicZone v0.2.1 includes the FastAPI service, root endpoint, health endpoint, documentation gates, canonical zoning schema, Alembic migrations, parcel/zone lookup API, use and dimensional rule APIs, optional database-backed parcel/rule lookup records, resident question ledger, staff workflow records via <code>CIVICZONE_PARCEL_RULE_DB_URL</code>, citation-grounded resident Q&amp;A, staff-only precedent protection, local adversarial integration mocks, browser-usable resident UI, staff workflow shell, trusted-proxy staff access validation, and CivicCore v1.1.0 dependency alignment. CivicZone does not make official zoning determinations, provide legal advice, or call live external vendor systems by default.</p>
</section>

<section class="panel">
Expand Down
18 changes: 18 additions & 0 deletions docs/release-integrity-correction-2026-05-21.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# CivicZone Release Integrity Correction - 2026-05-21

## Verdict

CivicZone is demoted to v0.2.1 after the independent CivicSuite release-integrity audit found the 2026-05-21 v1.0.0 release did not meet the FINISHED and SHIPPING bar.

## Current Honest State

- Version: 0.2.1
- Classification: scaffold with partial persistence/workflow plumbing; no real AI layer, full frontend, real municipal data/search, or public-use gate.

## Retraction

The previous v1.0.0 release was published in error. It did not prove the full CivicSuite Section 2 product-substance and public-use readiness requirements. The historical tag/release is retained for audit integrity and is superseded by this corrective demotion.

## Release Boundary

Do not describe CivicZone as finished, shipping, city-ready, product-ready, public-use ready, or v1.0.0 until a future independent audit of the actual code signs off against the full Section 2 gate.
4 changes: 2 additions & 2 deletions docs/release-recovery-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Repo: `CivicSuite/civiczone`
## Current Verdict

CivicZone has moved from the demoted `0.2.0` recovery posture to the active
`1.0.0` public-use module release path. The prior recovery pass remains
`1.0.0` corrective demotion state path. The prior recovery pass remains
historical context; current release evidence is recorded in the v1 release
evidence and browser QA files generated by the active run.

Expand Down Expand Up @@ -39,6 +39,6 @@ evidence and browser QA files generated by the active run.
## Sign-Off Boundary

This file is retained as the recovery-history pointer. Current `1.0.0` release
evidence must come from the active CivicZone v1.0.0 run, current release gate,
evidence must come from the active CivicZone v0.2.1 run, current release gate,
browser QA, GitHub CI, release artifacts, and suite installer/module-selection
truth.
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "civiczone"
version = "1.0.0"
version = "0.2.1"
description = "CivicZone runtime foundation for parcel-aware zoning and land-use Q&A."
readme = "README.md"
requires-python = ">=3.11"
Expand Down
10 changes: 5 additions & 5 deletions scripts/verify-release.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail

VERSION="1.0.0"
VERSION="0.2.1"

find_python() {
local candidates=()
Expand Down Expand Up @@ -40,7 +40,7 @@ ${PYTHON_BIN} - <<'PY'
from pathlib import Path
import tomllib

version = "1.0.0"
version = "0.2.1"
root = Path(".")
pyproject = tomllib.loads((root / "pyproject.toml").read_text(encoding="utf-8"))
assert pyproject["project"]["version"] == version, pyproject["project"]["version"]
Expand All @@ -56,7 +56,7 @@ for path in [
"SECURITY.md",
]:
text = (root / path).read_text(encoding="utf-8")
assert "1.0.0" in text, f"missing release version in {path}"
assert "0.2.1" in text, f"missing release version in {path}"
assert "0.1.0.dev0" not in text, f"stale dev version in {path}"
print("PASS: version surfaces synchronized")
PY
Expand All @@ -81,8 +81,8 @@ from pathlib import Path
import hashlib

dist = Path("dist")
wheel = dist / "civiczone-1.0.0-py3-none-any.whl"
sdist = dist / "civiczone-1.0.0.tar.gz"
wheel = dist / "civiczone-0.2.1-py3-none-any.whl"
sdist = dist / "civiczone-0.2.1.tar.gz"
assert wheel.exists(), f"missing {wheel}"
assert sdist.exists(), f"missing {sdist}"
lines = []
Expand Down
2 changes: 1 addition & 1 deletion tests/test_milestone_7_public_ui_accessibility.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def test_public_ui_route_returns_accessible_html() -> None:
assert '<a class="skip-link" href="#main">Skip to main content</a>' in text
assert '<main id="main" tabindex="-1">' in text
assert "aria-live=\"polite\"" in text
assert "v1.0.0 public-use module" in text
assert "v0.2.1 corrective demotion state" in text
assert '<button id="run" type="submit">Run lookup</button>' in text


Expand Down
8 changes: 4 additions & 4 deletions tests/test_runtime_foundation.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@


def test_package_version_is_100() -> None:
assert civiczone.__version__ == "1.0.0"
assert civiczone.__version__ == "0.2.1"


def test_pyproject_uses_published_civiccore_release_wheel() -> None:
Expand All @@ -33,7 +33,7 @@ def test_root_endpoint_states_runtime_boundary() -> None:
payload = response.json()

assert payload["name"] == "CivicZone"
assert payload["version"] == "1.0.0"
assert payload["version"] == "0.2.1"
assert payload["status"] == "v1 parcel-aware zoning Q&A runtime"
assert "optional database-backed parcel/rule" in payload["message"]
assert "staff workflow APIs" in payload["message"]
Expand All @@ -49,7 +49,7 @@ def test_health_endpoint_reports_versions() -> None:

assert payload["status"] == "ok"
assert payload["service"] == "civiczone"
assert payload["version"] == "1.0.0"
assert payload["version"] == "0.2.1"
assert payload["civiccore_version"] == "1.1.0"


Expand Down Expand Up @@ -82,5 +82,5 @@ def test_current_docs_mark_v1_label_as_recovered_without_product_release_overcla

for path, text in docs.items():
lowered = text.lower()
assert "1.0.0" in lowered, path
assert "0.2.1" in lowered, path
assert "provisional" not in lowered, path