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
2 changes: 1 addition & 1 deletion .github/workflows/cleanroom.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ on:

jobs:
cleanroom:
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
timeout-minutes: 90
permissions:
contents: read
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-preflight.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ on:

jobs:
preflight-release-provenance:
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
permissions:
contents: read
defaults:
Expand Down
13 changes: 8 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
release_tag:
description: "Published release tag to rehearse from cold caches"
required: true
default: "v1.0.3"
default: "v1.0.4"

permissions:
contents: write
Expand Down Expand Up @@ -104,7 +104,7 @@ jobs:
preflight:
name: Preflight release provenance fixtures
if: github.event_name == 'push'
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
defaults:
run:
working-directory: civicclerk-release-${{ github.run_id }}
Expand All @@ -130,7 +130,7 @@ jobs:

verify-build:
if: github.event_name == 'push'
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
needs: preflight
defaults:
run:
Expand All @@ -144,6 +144,9 @@ jobs:
- uses: actions/setup-python@v6
with:
python-version: "3.11"
- uses: actions/setup-node@v5
with:
node-version: "22"
- name: Install CivicCore freeze release wheel
run: python -m pip install https://github.com/CivicSuite/civiccore/releases/download/v1.2.0/civiccore-1.2.0-py3-none-any.whl
- name: Install package and test dependencies
Expand Down Expand Up @@ -213,7 +216,7 @@ jobs:
name: Create draft GitHub Release
if: github.event_name == 'push'
needs: [verify-build]
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
defaults:
run:
working-directory: civicclerk-release-${{ github.run_id }}
Expand Down Expand Up @@ -381,7 +384,7 @@ jobs:
name: Publish GitHub Release
if: github.event_name == 'push'
needs: [release-cleanroom-rehearsal]
runs-on: [self-hosted, linux, x64]
runs-on: ubuntu-latest
steps:
- name: Publish release after cleanroom rehearsal
env:
Expand Down
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,36 @@ All notable changes to CivicClerk are documented here.

## [Unreleased]

## [1.0.4] - 2026-06-13

### Added
- Added the live CivicCode handoff emitter for adopted ordinance/resolution
handoffs. When `CIVICCODE_INTAKE_URL` and the suite bearer handoff value are
configured, successful local handoff creation posts the existing CivicCode
intake contract with bearer authorization, records delivered/failed/
unconfigured status on the local handoff record, and exposes a manual retry
endpoint for operator-controlled recovery.
- Added Persistence Phase 1 for the public-meeting legal record: motions,
votes, action items, minutes drafts, public archive records, and resident
comments can now persist through the configured database-backed repositories,
with an HTTP-level restart-survival test covering the full record path.

### Changed
- Staff bearer mode now accepts CivicCore suite session bearer tokens for
`/staff/session` while preserving the legacy configured-token path.
- Integration-depth readiness metadata now distinguishes live-wire or
in-process boundary validation from supplemental adversarial mock checks.
- Moved CivicClerk CI, cleanroom, release-preflight, and release publication
jobs to GitHub-hosted `ubuntu-latest` runners; release frontend verification
now pins Node 22 and installs only the Playwright headless Chromium shell.

### Fixed
- Isolated the static staff workflow UI test from process-local meeting outcome
records so the full release gate verifies the empty-state contract reliably.
- Serialized audit-chain writes across the persistence repositories, appended
events only after database commits, normalized blank DB URL environment
values to in-memory fallback, and gated public comment intake on database
truth instead of caller-supplied snapshots.

## [1.0.3] - 2026-05-23

Expand Down
18 changes: 9 additions & 9 deletions README.md

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions README.txt

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions USER-MANUAL.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# CivicClerk User Manual

Status: CivicClerk v1.0.3 runtime foundation label is provisional during release recovery
Version: `1.0.3`
Status: CivicClerk v1.0.4 runtime foundation label is provisional during release recovery
Version: `1.0.4`

## Release Recovery Notice

CivicClerk is not product-ready for public promotion while the CivicSuite
release recovery is active. The current `v1.0.3` recovery patch is the supported release
release recovery is active. The current `v1.0.4` recovery patch is the supported release
until the repo passes the recovery gates: full backend tests, frontend tests,
tracked Playwright user-flow tests, WSL runtime install proof, consistency
gates, security scans, docs-source parity, and explicit separation between
Expand Down Expand Up @@ -64,7 +64,7 @@ minutes drafting, ordinance/resolution extraction, closed-session safe
refusal, and public plain-language meeting explanation,
local-first connector imports for Granicus, Legistar, PrimeGov, and
NovusAGENDA, no-network vendor live-sync readiness plus durable source/run
ledgering, accessibility/browser QA gates, provisional CivicClerk v1.0.3 release
ledgering, accessibility/browser QA gates, provisional CivicClerk v1.0.4 release
artifacts, CivicCore 1.2.0 freeze-backed packet export bundles, a database-backed
agenda intake queue with clerk readiness review, database-backed meeting
records with lifecycle audit entries, database-backed packet assembly records
Expand Down Expand Up @@ -371,14 +371,14 @@ is the Windows PowerShell path:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install dist/civicclerk-1.0.3-py3-none-any.whl
python -m pip install dist/civicclerk-1.0.4-py3-none-any.whl
$env:CIVICCLERK_STAFF_AUTH_MODE="protected"
python -m uvicorn civicclerk.main:app --host 127.0.0.1 --port 8776
```

Then verify these first-run checks:

- `GET /health` returns `{"status":"ok","service":"civicclerk","version":"1.0.3","civiccore":"1.2.0"}`
- `GET /health` returns `{"status":"ok","service":"civicclerk","version":"1.0.4","civiccore":"1.2.0"}`
- `GET /staff/auth-readiness` returns `mode: "protected"` and explains that anonymous staff writes are denied until OIDC, bearer, or trusted-header deployment is configured
- `GET /staff` renders the first workflow shell without console errors

Expand Down Expand Up @@ -429,7 +429,7 @@ wheel, source distribution, checksums, current docs, trusted-header reference,
installer-readiness helper, enterprise signing-readiness helper, and install rehearsal helpers. After
`bash scripts/verify-release.sh` has built `dist/`, rerun without `-PrintOnly`
or `--print-only` to create
`dist/civicclerk-1.0.3-release-handoff.zip`. If that zip already exists, the
`dist/civicclerk-1.0.4-release-handoff.zip`. If that zip already exists, the
helpers stop instead of overwriting it.

After the handoff zip exists, verify the installer input contract:
Expand Down Expand Up @@ -761,7 +761,7 @@ provenance and actionable errors, without requiring outbound runtime calls.
Milestone 11 adds browser QA evidence and a CI gate for loading, success,
empty, error, and partial states plus keyboard navigation, focus states,
contrast, and console checks. Milestone 12 synchronizes version surfaces,
builds release artifacts and checksums, and publishes CivicClerk v1.0.3.
builds release artifacts and checksums, and publishes CivicClerk v1.0.4.
CC-7 extends browser QA to every named spec page through
`node scripts/capture-cc7-browser-qa.mjs`; the verification script requires the
resulting 200-case ledger before browser-visible changes can merge.
Expand Down
16 changes: 8 additions & 8 deletions USER-MANUAL.txt
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# CivicClerk User Manual

Status: CivicClerk v1.0.3 runtime foundation label is provisional during release recovery
Version: `1.0.3`
Status: CivicClerk v1.0.4 runtime foundation label is provisional during release recovery
Version: `1.0.4`

## Release Recovery Notice

CivicClerk is not product-ready for public promotion while the CivicSuite
release recovery is active. The current `v1.0.3` recovery patch is the supported release
release recovery is active. The current `v1.0.4` recovery patch is the supported release
until the repo passes the recovery gates: full backend tests, frontend tests,
tracked Playwright user-flow tests, WSL runtime install proof, consistency
gates, security scans, docs-source parity, and explicit separation between
Expand Down Expand Up @@ -64,7 +64,7 @@ minutes drafting, ordinance/resolution extraction, closed-session safe
refusal, and public plain-language meeting explanation,
local-first connector imports for Granicus, Legistar, PrimeGov, and
NovusAGENDA, no-network vendor live-sync readiness plus durable source/run
ledgering, accessibility/browser QA gates, provisional CivicClerk v1.0.3 release
ledgering, accessibility/browser QA gates, provisional CivicClerk v1.0.4 release
artifacts, CivicCore 1.2.0 freeze-backed packet export bundles, a database-backed
agenda intake queue with clerk readiness review, database-backed meeting
records with lifecycle audit entries, database-backed packet assembly records
Expand Down Expand Up @@ -371,14 +371,14 @@ is the Windows PowerShell path:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install dist/civicclerk-1.0.3-py3-none-any.whl
python -m pip install dist/civicclerk-1.0.4-py3-none-any.whl
$env:CIVICCLERK_STAFF_AUTH_MODE="protected"
python -m uvicorn civicclerk.main:app --host 127.0.0.1 --port 8776
```

Then verify these first-run checks:

- `GET /health` returns `{"status":"ok","service":"civicclerk","version":"1.0.3","civiccore":"1.2.0"}`
- `GET /health` returns `{"status":"ok","service":"civicclerk","version":"1.0.4","civiccore":"1.2.0"}`
- `GET /staff/auth-readiness` returns `mode: "protected"` and explains that anonymous staff writes are denied until OIDC, bearer, or trusted-header deployment is configured
- `GET /staff` renders the first workflow shell without console errors

Expand Down Expand Up @@ -429,7 +429,7 @@ wheel, source distribution, checksums, current docs, trusted-header reference,
installer-readiness helper, enterprise signing-readiness helper, and install rehearsal helpers. After
`bash scripts/verify-release.sh` has built `dist/`, rerun without `-PrintOnly`
or `--print-only` to create
`dist/civicclerk-1.0.3-release-handoff.zip`. If that zip already exists, the
`dist/civicclerk-1.0.4-release-handoff.zip`. If that zip already exists, the
helpers stop instead of overwriting it.

After the handoff zip exists, verify the installer input contract:
Expand Down Expand Up @@ -761,7 +761,7 @@ provenance and actionable errors, without requiring outbound runtime calls.
Milestone 11 adds browser QA evidence and a CI gate for loading, success,
empty, error, and partial states plus keyboard navigation, focus states,
contrast, and console checks. Milestone 12 synchronizes version surfaces,
builds release artifacts and checksums, and publishes CivicClerk v1.0.3.
builds release artifacts and checksums, and publishes CivicClerk v1.0.4.
CC-7 extends browser QA to every named spec page through
`node scripts/capture-cc7-browser-qa.mjs`; the verification script requires the
resulting 200-case ledger before browser-visible changes can merge.
Expand Down
2 changes: 1 addition & 1 deletion civicclerk/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""CivicClerk runtime package."""

__version__ = "1.0.3"
__version__ = "1.0.4"
2 changes: 1 addition & 1 deletion docs/api/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -1496,7 +1496,7 @@
"info": {
"summary": "Runtime foundation for CivicClerk municipal meeting workflows.",
"title": "CivicClerk",
"version": "1.0.3"
"version": "1.0.4"
},
"openapi": "3.1.0",
"paths": {
Expand Down
Binary file added docs/browser-qa-v1.0.4-release-desktop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/browser-qa-v1.0.4-release-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 5 additions & 5 deletions docs/browser-qa/release-evidence.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"page": "docs/index.html",
"page_sha256": "c9200d663c22a23de8f85eb1fe44889f7cbce73e792ca32c93fb3e6213617631",
"reviewed_at": "2026-06-11T07:48:00Z",
"page_sha256": "f249e21e4accf977572353a714a23259af1a5cbb30fc3fbc87953af0f7443b99",
"reviewed_at": "2026-06-13T00:21:46Z",
"screenshots": {
"desktop": "docs/browser-qa-v1.0.3-release-desktop.png",
"mobile": "docs/browser-qa-v1.0.3-release-mobile.png"
"desktop": "docs/browser-qa-v1.0.4-release-desktop.png",
"mobile": "docs/browser-qa-v1.0.4-release-mobile.png"
},
"version": "1.0.3"
"version": "1.0.4"
}
Loading