Skip to content

Commit 0c6c866

Browse files
committed
chore(release): publish v0.4.3
1 parent 1051d74 commit 0c6c866

File tree

6 files changed

+122
-4
lines changed

6 files changed

+122
-4
lines changed

desktop/src-tauri/capabilities/default.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"permissions": [
77
"core:default",
88
"core:event:default",
9-
"core:window:allow-close",
109
"core:window:allow-start-dragging",
1110
"opener:default",
1211
"notification:default",

desktop/src-tauri/src/lib.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,21 @@ fn toggle_panel_window(window: tauri::WebviewWindow, state: State<'_, RuntimeSta
9898
manager.toggle_panel_window(window.app_handle(), group_id)
9999
}
100100

101+
#[tauri::command]
102+
fn close_pet_window(window: tauri::WebviewWindow, state: State<'_, RuntimeState>) -> Result<(), String> {
103+
let label = window.label().to_string();
104+
let group_id = label
105+
.strip_prefix("pet-")
106+
.ok_or_else(|| format!("unsupported pet window label {}", label))?;
107+
108+
let manager = state
109+
.window_manager
110+
.lock()
111+
.map_err(|_| "window manager mutex poisoned".to_string())?;
112+
manager.hide_pet_window_ui(window.app_handle(), group_id);
113+
Ok(())
114+
}
115+
101116
#[tauri::command]
102117
fn resize_panel_window(
103118
window: tauri::WebviewWindow,
@@ -172,6 +187,7 @@ pub fn run() {
172187
.invoke_handler(tauri::generate_handler![
173188
open_cccc_web,
174189
toggle_panel_window,
190+
close_pet_window,
175191
resize_panel_window,
176192
get_panel_data,
177193
])

desktop/src/ipc.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ closeBtn.addEventListener("pointerup", (event) => {
5858
event.preventDefault();
5959
event.stopPropagation();
6060
if (window.__TAURI__) {
61-
const win = window.__TAURI__.window.getCurrentWindow();
62-
void win.close();
61+
const { invoke } = window.__TAURI__.core;
62+
void invoke("close_pet_window");
6363
} else {
6464
console.log("[IPC] Close button clicked (demo mode)");
6565
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# CCCC v0.4.3 Release Notes
2+
3+
`v0.4.3` is a major refinement release over `v0.4.2`.
4+
It tightens the core collaboration model, reduces prompt and control-plane drift, hardens Windows and runtime integration, and makes long-running group operation more predictable across Web, MCP, IM, and Group Space workflows.
5+
6+
## Highlights
7+
8+
## 1) Prompt, help, and role guidance were re-layered
9+
10+
The guidance stack was simplified so stable startup rules, live runtime guidance, and actor-specific notes no longer compete with each other.
11+
12+
Key changes:
13+
14+
- the startup prompt is slimmer and more focused on durable operating rules
15+
- live runtime guidance now belongs to `cccc_help`, so optional capability-specific instructions appear only when actually relevant
16+
- actor role notes are now canonically stored in the group help document `@actor` blocks instead of leaking into working-state fields
17+
- agent working stance and role guidance are now more clearly separated, which reduces confusion between long-term role intent and current execution context
18+
19+
## 2) Context and task authority semantics were hardened
20+
21+
Several core collaboration boundaries were tightened so the system behaves more predictably under real multi-actor usage.
22+
23+
This includes:
24+
25+
- `task.restore` now follows a clear archived-only precondition and matches the same authority model as the other task-mutating operations
26+
- peers can no longer mutate arbitrary unassigned tasks; task control is limited to the actor actually responsible for the work
27+
- actor-owned `agent_state` semantics are now aligned across docs, daemon behavior, MCP tooling, and Web expectations
28+
- system-driven task-to-working-state synchronization remains in place where it materially reduces manual upkeep cost
29+
30+
## 3) Group Space and memory workflows became more coherent
31+
32+
`v0.4.3` significantly improves the operational behavior of notebook-backed workflows.
33+
34+
Key improvements:
35+
36+
- work-lane and memory-lane status now track the current binding more accurately instead of leaking stale sync residue after unbind/rebind cycles
37+
- NotebookLM-related runtime guidance is injected only when the relevant capability is actually active
38+
- the login, bind, use, unbind, and disconnect flow is cleaner from both the daemon and Web state-model perspective
39+
- memory and daily-memory coordination stays intentionally connected, but the surrounding guidance and runtime status are now clearer
40+
41+
## 4) Runtime support and Windows robustness were strengthened
42+
43+
This release continues the push toward a more disciplined and supportable runtime surface.
44+
45+
Highlights:
46+
47+
- Windows MCP reliability was hardened, including runtime-context resolution and stdio/encoding robustness
48+
- the officially supported runtime surface was narrowed and clarified to the runtimes CCCC can set up and operate reliably
49+
- standalone Web startup now follows the same local-first binding model as the main CLI entrypoint
50+
- release verification was tightened to better match the project's claimed Linux, macOS, and Windows support surface
51+
52+
## 5) Operator-facing surfaces saw broad stabilization
53+
54+
A large amount of polish landed across the everyday control surfaces used by operators and agent teams.
55+
56+
Notable areas:
57+
58+
- user-scoped actor profiles now work end to end across daemon, Web, and MCP paths
59+
- IM integration continued to improve, especially around DingTalk sender identity, revoke behavior, `@` targeting, and streaming fallback behavior
60+
- blueprint export/import portability was fixed so round-trips keep the intended portable fields
61+
- Web settings, modal behavior, overflow handling, context presentation, and translation coverage were substantially cleaned up
62+
- global browser surfaces were trimmed so scoped users see less irrelevant machine-global data by default
63+
64+
## Validation Summary
65+
66+
The `0.4.3` line was stabilized through multiple release candidates and targeted regression work across the highest-risk areas, including:
67+
68+
- context and task authority rules
69+
- role-notes source-of-truth handling
70+
- Group Space bind/unbind status correctness
71+
- Windows MCP stability
72+
- scoped actor profiles and permission boundaries
73+
- IM bridge revoke and delivery behavior
74+
- blueprint round-trip portability
75+
76+
## Upgrade Notes
77+
78+
From `v0.4.2`, this is still a drop-in minor upgrade for most deployments.
79+
No explicit data migration step is required.
80+
81+
Recommended post-upgrade checks:
82+
83+
1. restart the daemon and Web once to ensure all runtime surfaces are on the new prompt/help/control-plane behavior
84+
2. if you use custom help or prompt overrides, re-check your local overrides against the new guidance layering
85+
3. if you use Group Space or NotebookLM workflows, verify current lane bindings and status after the upgrade
86+
4. if you use scoped users, actor profiles, or remote/browser access, verify one non-admin path end to end

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 = "cccc-pair"
7-
version = "0.4.3rc4"
7+
version = "0.4.3"
88
description = "Global multi-agent delivery kernel with working groups, scopes, and an append-only collaboration ledger"
99
readme = { file = "README.md", content-type = "text/markdown" }
1010
requires-python = ">=3.9"

tests/test_web_group_settings_desktop_pet.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,23 @@ def test_launch_token_endpoint_returns_current_scoped_token(self) -> None:
131131
finally:
132132
cleanup()
133133

134+
def test_launch_token_endpoint_allows_empty_token_when_no_access_tokens_exist(self) -> None:
135+
from cccc.ports.web.app import create_app
136+
137+
_, cleanup = self._with_home()
138+
try:
139+
group_id = self._create_group()
140+
app = create_app()
141+
client = TestClient(app)
142+
143+
resp = client.get(f"/api/v1/groups/{group_id}/desktop_pet/launch_token")
144+
self.assertEqual(resp.status_code, 200)
145+
body = resp.json()
146+
self.assertTrue(body.get("ok"))
147+
self.assertEqual((body.get("result") or {}).get("token"), "")
148+
finally:
149+
cleanup()
150+
134151
def test_launch_token_endpoint_respects_group_scope(self) -> None:
135152
from cccc.kernel.access_tokens import create_access_token
136153
from cccc.ports.web.app import create_app

0 commit comments

Comments
 (0)