rename: civiccore -> townlight-core (CivicSuite -> Townlight rebrand) - #70
Open
scottconverse wants to merge 2 commits into
Open
rename: civiccore -> townlight-core (CivicSuite -> Townlight rebrand)#70scottconverse wants to merge 2 commits into
scottconverse wants to merge 2 commits into
Conversation
Renames the package to match the approved townlight org rename (CivicSuite org and its repos moved to townlight on 2026-08-12): - Package directory civiccore/ -> townlight_core/; civiccore-ui/ -> townlight-core-ui/ (kept kebab-case: it's a frontend CSS/HTML asset dir, not a Python package). - pyproject.toml: name "civiccore" -> "townlight-core"; description, authors, keywords, and [project.urls] updated to Townlight/townlight-core. - All internal imports/references in code, tests, CI workflows, Dockerfiles, and cleanroom configs updated to the new package path. - README.md, USER-MANUAL.md/.txt/.docx/.pdf, docs/index.html rebranded in prose (USER-MANUAL.docx/.pdf regenerated via scripts/gen-user-manual.py). - CHANGELOG.md: added an [Unreleased] entry describing the rename; historical entries are untouched. Left unchanged, intentionally (see CHANGELOG [Unreleased] "Notes" and inline code comments for the full rationale): - The Alembic version table name (alembic_version_civiccore), the three shipped migration revision IDs/files, the civiccore_local_tasks table name, and the consumer_app='civiccore' / CIVICCORE_DEFAULT_APP prompt-template DB default — all already persisted in every consuming module's database. - release_provenance.py's default --repo and User-Agent string, and the v0.22.1 cleanroom-harness verification path — pinned to match real, already-published release identity and tests/test_release_provenance.py. - Historical/evidence content: docs/audits/, docs/ops/, docs/evidence/, docs/qa/, docs/adr/, sprint-phase2-evidence/, dated release artifacts, and pre-existing CHANGELOG entries. - civiccore/catalog, exemptions, scaffold placeholder __init__.py docstrings, which are pinned verbatim by tests/test_placeholder_adrs.py against the (also unchanged) frozen ADR docs. Also renamed, as part of the same breaking-change surface: the CIVICCORE_* env vars (CIVICCORE_SUITE_SESSION_SECRET, etc.), the civiccore_version/civiccore_min_version/civiccore_locked manifest contract fields, and CI/cleanroom tag and artifact naming conventions (civiccore-*-freeze -> townlight-core-*-freeze, civiccore-dist -> townlight-core-dist, civicsuite-cleanroom docker labels -> townlight-cleanroom). None of these are persisted database state, so renaming them does not corrupt or orphan any existing deployment; they just need the next release before downstream consumers adopt them. Verified locally: full pytest suite green (265 passed, 37 skipped for missing local Docker — same skip set as pre-rename), ruff issue count unchanged from pre-rename baseline (196 -> 197, all pre-existing style lints), `python -m build` produces townlight_core-1.2.1-py3-none-any.whl. Signed-off-by: CivicCast Test Beelink <sconverse@gmail.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The longer townlight_core.ingest.models import path (vs civiccore.*) pushed this single-line import past the 100-char line-length limit, which ruff's isort integration (I001) flags for reflow. This is the one net-new ruff finding introduced by the rename (verified by diffing `ruff check` output at the exact CI-pinned ruff version, 0.16.2, between this branch and pre-rename main: both now sit at 172 pre-existing findings unrelated to this PR). Signed-off-by: CivicCast Test Beelink <sconverse@gmail.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Author
CI statusBoth checks ( Evidence:
This pre-existing lint debt is out of scope for a packaging/branding rename PR to silently absorb via a mass |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Renames this repo's Python packaging from the pre-rename
civiccorebrand to the approvedtownlight-core/townlight_corescheme, following the CivicSuite org and repo move to thetownlightorg on 2026-08-12.civiccore/->townlight_core/;civiccore-ui/->townlight-core-ui/(kept kebab-case — it's a frontend CSS/HTML asset directory, not a Python package, and has no.pyfiles).pyproject.toml:name = "civiccore"->"townlight-core"; description/authors/keywords/[project.urls]updated to Townlight.ci.yml,release.yml,cleanroom.yml), the cleanroom Dockerfile, and cleanroom/orchestrator scripts updated to the new package path.README.md,USER-MANUAL.md/.txt,docs/index.htmlrebranded in prose.USER-MANUAL.docx/.pdfregenerated viascripts/gen-user-manual.pyso all four manual formats stay consistent.CHANGELOG.md: added a new[Unreleased]entry describing the rename (including the "intentionally not renamed" list below); pre-existing dated entries are untouched.Intentionally left unchanged (and why)
Persisted database state — renaming these would silently break every already-deployed consuming module's database, since this package's migrations run inside the same Postgres database as consumer apps, before their own migrations:
alembic_version_civiccore(townlight_core/migrations/alembic.ini,env.py,runner.py).civiccore_0001_baseline_v1.py,civiccore_0002_llm.py,civiccore_0003_local_task_queue.py) — only theirfrom civiccore...importlines were updated so they still execute; revision/down_revision strings, table names, and column defaults are untouched (Alembic migrations are immutable once shipped, independent of branding).civiccore_local_taskstable name (townlight_core/platform/task_queue.py).consumer_app='civiccore'/CIVICCORE_DEFAULT_APPprompt-template DB default (townlight_core/llm/templates/{resolver,models,schemas,overrides,exceptions}.py) — this literal string is already stored in every consuming module'sprompt_templatesrows.Cryptographically/historically pinned identity:
townlight_core/release_provenance.py's default--repovalue andUser-Agentstring, plus the pinnedCivicSuite/civiccore,civiccore-<version>-py3-none-any.whl, andv0.22.1references inscripts/cleanroom/townlight-core-cleanroom-runner.shandtests/test_release_provenance.py. These match the real, already-published release history — the Sigstore certificate identity embedded in those existing signatures literally saysCivicSuite/civiccore, so verifying them against a renamed identity would fail. Only the source repo clone URL (a separate concept from "which release is being verified") was updated totownlight/core.Historical/evidence content, matching the task's stated policy:
docs/audits/,docs/ops/,docs/evidence/,docs/qa/,docs/adr/,sprint-phase2-evidence/,tests/fixtures/release_provenance/, dated diagram/screenshot artifacts (docs/diagrams/civiccore-extraction-map.*,docs/browser-qa-*),docs/release-recovery-status.md,docs/github-discussions-seed.md, and pre-existing CHANGELOG entries.Verifier-pinned strings:
civiccore/catalog,exemptions,scaffoldplaceholder__init__.pydocstrings are pinned verbatim (including the phrase "versioned CivicCore release artifact") bytests/test_placeholder_adrs.pyagainst the frozen ADR docs — left unchanged rather than partially edited into an inconsistent state.scripts/check-tier1-ledger.pyis pinned bytests/test_tier1_retrofit_ledger.pyand validates a frozen ledger doc whose own"repo"field saysCivicSuite/civiccore— left unchanged.docs/SUPERVISOR.mdwas also left untouched: it's a self-described point-in-time snapshot card (references v0.2.0 and specific line numbers already stale relative to v1.2.1), not a currently-accurate living doc, so a branding-only edit would leave it still wrong.Also renamed (breaking change, but not a data-corruption risk)
CIVICCORE_*env vars (CIVICCORE_SUITE_SESSION_SECRET,CIVICCORE_SUITE_SESSION_REVOCATION_FILE,CIVICCORE_TASK_HANDLER_MODULES) ->TOWNLIGHT_CORE_*.civiccore_version/civiccore_min_version/civiccore_lockedmanifest contract fields (townlight_core/connectors/manifest.py,townlight_core/platform/modules.py) ->townlight_core_version/ etc.civiccore-*-freeze->townlight-core-*-freeze, build artifact nameciviccore-dist->townlight-core-dist, docker labelscivicsuite-cleanroom=1->townlight-cleanroom=1.None of these are persisted database state — they're env var names, JSON/manifest contract field names, and CI-internal naming — so renaming them doesn't corrupt anything that already exists. They do mean any future release (and any consumer that upgrades to it) needs to adopt the new names; this is called out in the CHANGELOG
[Unreleased]entry.Sibling-repo dependency mechanism (investigation, no other repos modified)
Consumers pin
civiccorevia a PEP 508 direct-reference dependency to a GitHub Release wheel asset, not a git URL and not vendoring:Confirmed in
townlight/code,townlight/meetings,townlight/access,townlight/notice(each pins a specific historical version — 1.2.1, 1.2.1, 1.2.0, 1.2.0 respectively — with a per-version sha256). One outlier,townlight/boards, has a bareciviccore==0.3.0pin with no index configured, which won't resolve viapip installas-is — a pre-existing issue in that repo, unrelated to this rename.Implications for follow-up work in sibling repos (out of scope here, not touched):
gh apiconfirms release assets forv1.2.1etc. already resolve athttps://github.com/townlight/core/releases/download/...(the GitHub org/repo rename already redirects/relocated them), so existing pins likely still work today.townlight_core-<version>-py3-none-any.whl(normalized from thetownlight-coredistribution name) with a new sha256 — every sibling repo's dependency line will need updating to the new URL/filename/hash before it can upgrade pastv1.2.1.townlight/boards's existingciviccore==0.3.0pin is already broken independent of this rename (no configured index) and should be flagged separately.Verification
pytest tests/— 265 passed, 37 skipped (all skips are pre-existing "Docker daemon not reachable" skips for testcontainers-based tests; same skip set before and after this rename). CI'subuntu-latestrunners have Docker, so these should run in CI.ruff check .— 197 errors after vs. 196 before this rename (pre-existing style lints —I001/RUF022/UP035/BLE001etc. — unrelated to this change; verified by diffing ruff output against the pre-renamemainbranch).python -m build— producestownlight_core-1.2.1-py3-none-any.whl/.tar.gzas expected.USER-MANUAL.docx/.pdfviascripts/gen-user-manual.pyso all manual formats matchUSER-MANUAL.md.Known follow-up (not blocking this PR)
workflow_dispatch"cleanroom-rehearsal" job inrelease.ymldefaultsrelease_tagtov1.2.1(the real latest release) but now expects the newtownlight_core-<version>-py3-none-any.whlnaming — it won't successfully rehearsev1.2.1specifically until a new townlight-core-branded release exists. This is an expected transitional state, not a bug.Test plan
pytest tests/green locallypython -m buildproduces correctly-named artifacts