Skip to content

Commit 919bd0d

Browse files
authored
chore(release): 2.129.2 — the hub's override switch (#179)
Cuts a release for #178 so the feature can actually reach the box. The hub imports from site-packages, not the checkout (`~/.c3/hub_start.py` sets _REPO to the site-packages path), so a merge to main is invisible to the running process and a restart alone re-imports the same tree. Verified rather than assumed this time: GET /api/hub/overrides/policy on the live hub returned 405 — it fell through to the POST-only <request_id> route, which is exactly what "the route does not exist in this process" looks like. Both version sites bumped in one pass. test_version_sync exists because v2.56.0 shipped with pyproject.toml and cli/c3.py disagreeing, and it passes here — run AFTER the changelog edit, not before, since the last edit and the last verification have to be the same tree. 811 passed across the areas this release touches. The single failure, test_mobile_clients::test_chat_poll_shares_the_credential_set (404 != 401), is PRE-EXISTING test-ordering pollution: it passes in isolation and by file, and fails identically on clean main with the same -k. Proven before this branch existed, not asserted. Claude-Session: https://claude.ai/code/session_013z6ZciSk628VGRbLDZqB2n
1 parent 2166b6e commit 919bd0d

3 files changed

Lines changed: 40 additions & 2 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,44 @@ All notable changes to Code Context Control (C3) are documented here.
44
The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [2.129.2] - 2026-09-10
8+
9+
### Added — the hub could decide override requests but not allow them
10+
11+
The Access screen already listed override requests and approved or denied
12+
them. Nothing exposed `override.enabled`, which decides whether a request
13+
may *exist* — so the hub answered a question the agent was never permitted
14+
to ask, and the only ways to change that were the mobile API or hand-editing
15+
`.c3/config.json`.
16+
17+
`GET`/`POST /api/hub/overrides/policy`, plus a **"May agents ask?"** panel
18+
between the costing strip and the request list: project picker, the enable
19+
toggle, the seven escalatable layers, and the two caveats a toggle screen
20+
must not let a reader forget — policy merges by *tightening only*, and the
21+
credential vault, `.c3/secrets.enc`, `.c3/cred_state.json`, the dispatcher
22+
fail-closed deny and the catastrophic shell blocks are never escalatable at
23+
any setting.
24+
25+
Widening — enabling the feature or turning a layer on — needs a typed
26+
confirmation; tightening never does, because making the guard stricter
27+
should always be one click. The panel asks in plain words before sending
28+
rather than surfacing a 400 afterwards, and the server refuses anyway if it
29+
does not.
30+
31+
### Changed — one implementation of "what counts as widening", not two
32+
33+
Validation, widening detection and the config write moved into
34+
`services/override_policy` (`apply_section`, `widenings`, `write_section`);
35+
`oracle/services/mobile_api` now delegates to them. Two copies would be two
36+
chances for one surface to quietly allow what the other refuses, and this is
37+
the check that decides whether an approval needs a challenge. The retired
38+
inline copy is kept as `_override_widenings_legacy` solely so a test can
39+
prove the move preserved behaviour rather than assert it.
40+
41+
`wake` stays asymmetric on purpose: refused from the phone, accepted from
42+
the hub. It names an argv this machine runs, and a bearer token is
43+
authentication, not physical presence.
44+
745
## [2.129.1] - 2026-09-10
846

947
### Fixed — the file watcher counted gitignored churn as source changes, and the MCP server's memory never came back

‎cli/c3.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
# Config
9292
CONFIG_DIR = ".c3"
9393
CONFIG_FILE = ".c3/config.json"
94-
__version__ = "2.129.1"
94+
__version__ = "2.129.2"
9595

9696

9797
def _compress_file_cli(compressor, path, mode="smart", **kw):

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "code-context-control"
7-
version = "2.129.1"
7+
version = "2.129.2"
88
description = "Local MCP code-intelligence for AI coding tools: surgical search/read/edit, agent-config version history, path-level access + masking guards, and a multi-project hub."
99
readme = "README.md"
1010
requires-python = ">=3.10"

0 commit comments

Comments
 (0)