diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 26589ea..f2bf96c 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Private security report
- url: https://github.com/apcar/model-council/security/advisories/new
+ url: https://github.com/apcar/CouncilLogic/security/advisories/new
about: Report suspected vulnerabilities privately.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index df88d25..cf2a5e0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -12,6 +12,9 @@ All notable public changes to CouncilLogic are recorded here.
### Changed
+- Replaced the fixed-member square logo with a provider-count-neutral
+ CouncilLogic mark and PageParcel-sized README header, and made the public
+ product framing independent of the current provider roster.
- The default live council now uses five proposals, five juries, and one
synthesis. Existing file-backed four-provider configurations remain
four-provider until they add an explicit `[providers.xai]` section.
diff --git a/CITATION.cff b/CITATION.cff
index e0238c0..5b3e141 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -1,12 +1,12 @@
cff-version: 1.2.0
message: "If you use this software, please cite it using the metadata below."
-title: "Model Council"
+title: "CouncilLogic"
type: software
authors:
- family-names: "Greene"
given-names: "Andrew"
version: 0.2.0a1
date-released: 2026-07-26
-url: "https://github.com/apcar/model-council"
-repository-code: "https://github.com/apcar/model-council"
+url: "https://github.com/apcar/CouncilLogic"
+repository-code: "https://github.com/apcar/CouncilLogic"
license: AGPL-3.0-only
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 6619aaa..acc300e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# Contributing
-Thank you for helping improve Model Council. This page is general information,
+Thank you for helping improve CouncilLogic. This page is general information,
not legal advice.
## Welcome now
diff --git a/LICENSING.md b/LICENSING.md
index 7b3f8b6..a99d55f 100644
--- a/LICENSING.md
+++ b/LICENSING.md
@@ -1,6 +1,6 @@
# Licensing
-Model Council is licensed under the GNU Affero General Public License
+CouncilLogic is licensed under the GNU Affero General Public License
version 3 only, using the exact SPDX identifier `AGPL-3.0-only`. The complete
license text is in [LICENSE](LICENSE).
diff --git a/README.md b/README.md
index d61d7d4..16fb066 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# CouncilLogic
-
+
@@ -11,11 +11,14 @@
-CouncilLogic is a local-first, auditable council of heterogeneous language
-models. OpenAI, Anthropic, Gemini, Mistral, and xAI's Grok independently
-propose answers, judge blinded candidates, contribute to a deterministic Borda
-aggregate, and produce a final synthesis. The complete run record is stored
-locally.
+**Send one question across models, blind their judgments, and keep the complete
+record.**
+
+CouncilLogic is a local-first, auditable orchestration and governance layer for
+heterogeneous language-model deliberation. It sends a question to configured
+providers independently, blinds and aggregates their judgments, synthesizes the
+result, and stores the complete run record locally. It currently ships with
+adapters for OpenAI, Anthropic, Gemini, Mistral, and xAI's Grok.
This repository is a **public alpha (`0.2.0a1`)**, not a production service or
a truth oracle. Multiple models can share the same error. Verify consequential
@@ -51,12 +54,11 @@ strong single model. Establishing that would require matched-cost baselines,
protocol ablations, and evaluation across additional users and task domains.
See [Research](docs/RESEARCH.md).
-## Four-stage council
+## How CouncilLogic works
-1. **Propose:** OpenAI, Anthropic, Gemini, Mistral, and xAI's Grok answer
- independently.
-2. **Judge:** each lineage ranks relabeled candidates without provider
- attribution; structured responses are validated locally.
+1. **Propose:** every configured lineage answers independently.
+2. **Judge:** each participating lineage ranks relabeled candidates without
+ provider attribution; structured responses are validated locally.
3. **Aggregate:** deterministic Borda scoring combines valid juries.
4. **Synthesize:** the selected lineage receives the candidates, aggregate,
and jury records and writes the final answer.
diff --git a/SUPPORT.md b/SUPPORT.md
index de5d854..4d98be8 100644
--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -1,6 +1,6 @@
# Support
-Model Council is a public alpha maintained on a best-effort basis. There is no
+CouncilLogic is a public alpha maintained on a best-effort basis. There is no
service-level agreement, guaranteed response time, or production support.
- Read the [README](README.md), [operations runbook](docs/OPERATIONS.md), and
diff --git a/assets/README.md b/assets/README.md
index 8723379..dfba238 100644
--- a/assets/README.md
+++ b/assets/README.md
@@ -1,11 +1,22 @@
# Assets
-`model-council-logo.png` is the full-resolution CouncilLogic source mark. It
-was generated using OpenAI image generation and retains its embedded provenance
-metadata.
-`model-council-icon.png` is an optimized 256 × 256 derivative for repository
-and application surfaces.
+`councillogic-mark.svg` is the provider-count-neutral CouncilLogic source mark.
+Its continuous chamber and flow represent governed deliberation; the central
+diamond represents the durable aggregate and audit record.
+
+`councillogic-icon.png` is a deterministic 256 × 256 raster derivative for
+repository and application surfaces.
+
+`../docs/assets/councillogic-header.svg` is the 1520 × 400 README header. It
+keeps the repository landing page compact while preserving a separate,
+reusable source mark.
+
+Regenerate the raster derivative from the repository root with:
+
+```bash
+rsvg-convert -w 256 -h 256 \
+ -o assets/councillogic-icon.png assets/councillogic-mark.svg
+```
Trademark treatment for the CouncilLogic name and mark is separate from the
-AGPL-licensed code. This provenance note does not invent or assert an
-additional copyright claim.
+AGPL-licensed code.
diff --git a/assets/councillogic-icon.png b/assets/councillogic-icon.png
new file mode 100644
index 0000000..c519b76
Binary files /dev/null and b/assets/councillogic-icon.png differ
diff --git a/assets/councillogic-mark.svg b/assets/councillogic-mark.svg
new file mode 100644
index 0000000..a4fc887
--- /dev/null
+++ b/assets/councillogic-mark.svg
@@ -0,0 +1,24 @@
+
diff --git a/assets/model-council-icon.png b/assets/model-council-icon.png
deleted file mode 100644
index 1a8589a..0000000
Binary files a/assets/model-council-icon.png and /dev/null differ
diff --git a/assets/model-council-logo.png b/assets/model-council-logo.png
deleted file mode 100644
index d60efc4..0000000
Binary files a/assets/model-council-logo.png and /dev/null differ
diff --git a/docs/OPERATIONS.md b/docs/OPERATIONS.md
index ec13777..a9dd2e0 100644
--- a/docs/OPERATIONS.md
+++ b/docs/OPERATIONS.md
@@ -152,8 +152,8 @@ council --mock --data-dir ./work/release-gate list
Before live use:
1. Review `council.example.toml` and select the intended data directory.
-2. Configure all five credentials through the environment or a tested external
- secret command.
+2. Configure credentials for every configured provider through the environment
+ or a tested external secret command.
3. Run `council --config ./council.toml doctor`.
4. Run `council --config ./council.toml providers` and verify every provider,
model, and lineage.
@@ -356,10 +356,10 @@ be completed.
### Rate limiting or provider server failure
The adapters perform bounded retries for explicit retryable HTTP responses such
-as `429` and selected `5xx` responses. Under the default quorum, a run may still
-complete with three healthy lineages when one provider is unavailable. Inspect
-failures and provider request IDs, wait for provider recovery, then resume
-using the same config.
+as `429` and selected `5xx` responses. Under the default five-provider topology
+and quorum, a run may still complete with three healthy lineages when up to two
+providers are unavailable. Inspect failures and provider request IDs, wait for
+provider recovery, then resume using the same config.
### Timeout or deadline exhaustion
@@ -459,8 +459,8 @@ intentionally written to the database.
2. Update the process environment or external secret resolver under the same
logical secret name.
3. Start a new shell/process and run `doctor`.
-4. Perform a low-risk live smoke run and confirm all five providers in the
- audit record and provider consoles. This incurs live usage.
+4. Perform a low-risk live smoke run and confirm every configured provider in
+ the audit record and provider consoles. This incurs live usage.
5. Revoke the old key.
6. Clear old shell environment values, terminal scrollback, and any temporary
operator notes containing the value.
diff --git a/docs/PORTABLE-SERVICE.md b/docs/PORTABLE-SERVICE.md
index 77bbbc2..999f5e4 100644
--- a/docs/PORTABLE-SERVICE.md
+++ b/docs/PORTABLE-SERVICE.md
@@ -3,7 +3,7 @@
## Status
This document describes the implemented `0.2.0a1` portable-service alpha for
-Model Council. It is a public reference deployment with deliberately narrow
+CouncilLogic. It is a public reference deployment with deliberately narrow
boundaries:
- one authenticated service on one active POSIX host;
diff --git a/docs/SECURITY.md b/docs/SECURITY.md
index 3219c52..1cd8abe 100644
--- a/docs/SECURITY.md
+++ b/docs/SECURITY.md
@@ -2,7 +2,7 @@
## Public-alpha posture
-Model Council `0.2.0a1` adds a hardened, governed service alpha to the
+CouncilLogic `0.2.0a1` adds a hardened, governed service alpha to the
single-user local CLI. The service is mock-only, loopback-only, and must not be
exposed as a public network daemon. It has application-level multi-principal
controls, but it is not a production identity, billing, or Internet-facing
@@ -331,7 +331,7 @@ If the database or an export may have been disclosed:
## Reporting a security issue
Use GitHub's **privately report a security vulnerability** feature for
-`apcar/model-council`. Do not open a public issue containing secrets, sensitive
+`apcar/CouncilLogic`. Do not open a public issue containing secrets, sensitive
prompts, raw provider responses, exploit details, or identifying data.
Include a concise description, affected version, reproduction conditions,
diff --git a/docs/adr/0001-single-active-sqlite.md b/docs/adr/0001-single-active-sqlite.md
index 85b49ba..ee7220d 100644
--- a/docs/adr/0001-single-active-sqlite.md
+++ b/docs/adr/0001-single-active-sqlite.md
@@ -2,11 +2,11 @@
- Status: Accepted for the portable-service pilot
- Date: 2026-07-25
-- Scope: Model Council service state and reference-host failover
+- Scope: CouncilLogic service state and reference-host failover
## Context
-Model Council already uses a local SQLite database for durable runs,
+CouncilLogic already uses a local SQLite database for durable runs,
invocations, events, hashes, and results. SQLite WAL mode, transactions, and
the per-run process lock provide a strong single-host foundation. They do not
provide distributed consensus between two independent files on two Macs.
diff --git a/docs/adr/0002-agpl-and-commercial-licensing.md b/docs/adr/0002-agpl-and-commercial-licensing.md
index d96a458..ed2071f 100644
--- a/docs/adr/0002-agpl-and-commercial-licensing.md
+++ b/docs/adr/0002-agpl-and-commercial-licensing.md
@@ -5,7 +5,7 @@
## Context
-Model Council is a portable, governed council control plane. The licensing
+CouncilLogic is a portable, governed council control plane. The licensing
choice should preserve software freedom for users of modified network-served
versions while leaving room for separately negotiated proprietary use where
the copyright holder has sufficient rights.
diff --git a/docs/assets/councillogic-header.svg b/docs/assets/councillogic-header.svg
new file mode 100644
index 0000000..6282719
--- /dev/null
+++ b/docs/assets/councillogic-header.svg
@@ -0,0 +1,39 @@
+
diff --git a/src/model_council/cli.py b/src/model_council/cli.py
index baf2db4..8e11d5f 100644
--- a/src/model_council/cli.py
+++ b/src/model_council/cli.py
@@ -319,7 +319,7 @@ def _markdown_export(
) -> str:
result = run.get("result") or {}
lines = [
- "# Model Council Run",
+ "# CouncilLogic Run",
"",
f"- Run: `{run['id']}`",
f"- Status: `{run['status']}`",
diff --git a/src/model_council/remote.py b/src/model_council/remote.py
index 0f70f84..67483fc 100644
--- a/src/model_council/remote.py
+++ b/src/model_council/remote.py
@@ -239,7 +239,7 @@ def _request(
def _parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
prog="council-remote",
- description="Submit work to a governed Model Council service.",
+ description="Submit work to a governed CouncilLogic service.",
)
parser.add_argument("--server", required=True, help="Council service base URL")
parser.add_argument(
diff --git a/src/model_council/run_lock.py b/src/model_council/run_lock.py
index df6afb0..29722a5 100644
--- a/src/model_council/run_lock.py
+++ b/src/model_council/run_lock.py
@@ -9,7 +9,7 @@
try:
import fcntl
except ImportError as exc: # pragma: no cover - the tomorrow beta targets macOS/Linux
- raise RuntimeError("Model Council run locking requires a POSIX host") from exc
+ raise RuntimeError("CouncilLogic run locking requires a POSIX host") from exc
class RunLock:
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 4d106e3..e2b8591 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -85,7 +85,7 @@ def test_mock_doctor_run_inspect_and_export(self) -> None:
)
self.assertEqual(code, 0, error)
exported = export_path.read_text(encoding="utf-8")
- self.assertIn("# Model Council Run", exported)
+ self.assertIn("# CouncilLogic Run", exported)
self.assertIn("## Council answer", exported)
self.assertEqual(stat.S_IMODE(export_path.stat().st_mode), 0o600)