You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit d5adb04
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,8 @@
1
1
# Changelog — ChannelGate
2
2
3
+
- Automatically link conversations sharing a working folder to one live setup, show the source in settings, and keep harness/model choices independent.
4
+
5
+
3
6
- Show configured effort and a compact live activity phase beside the running model in Slack’s native Stop label.
4
7
5
8
ChannelGate was formerly *Claude Gateway for Slack*; entries below the rename keep their original
Copy file name to clipboardExpand all lines: FEATURES.md
+9-11Lines changed: 9 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,11 @@
1
1
# ChannelGate — Features
2
2
3
+
## Linked working-folder setup
4
+
5
+
- Conversations assigned to an existing folder follow its established owner live: skills/template and scoped catalog skills, memory, instructions, access, connectors/channel secrets, VPN service metadata, mode/Auto/Lean/network and Drive setup. Shared edits direct users to the source; harness/model/effort/authentication and personal grants remain independent.
6
+
- Admin and Slack settings identify the source; the folder picker explains linking. Durable files use owner identity/platform; cross-platform turns receive actual surface capabilities separately. Drive sync has one owner. Unlinking retains the effective setup; owner departure promotes a remaining conversation with its saved setup.
7
+
8
+
3
9
Slack’s native running/Stop label shows the resolved model and explicitly configured effort, plus compact live phases (Thinking, Using tools, Writing, Waiting, Queued, Coordinating agents). Engine fallback replaces both model and effort; unset effort is omitted rather than guessed.
-**Shared-folder conversations link automatically:** incompatible initial skills/memory adopt the established source setup. Settings identify the source, and divergent metadata edits explain where to edit. Engine/model choices stay local. → TEST-PLAN: Linked working-folder setup acceptance.
1107
1109
1108
1110
-**Read/search account routing:** unrestricted information requests may search either or both
1109
1111
available Composio identities without an account-selection interruption. Explicit account and
@@ -5380,12 +5382,8 @@ are retired, bullet by bullet; everything else stands.
5380
5382
mirror remains current. Bundled source skills live in `src/gateway/skills/bundled/`.
5381
5383
- Skills admin saves refresh existing workspaces immediately. Boot and a five-second daemon
5382
5384
reconciliation pass refresh changed catalog/template/grant state, including MCP changes. Failed
5383
-
writes are reported and retried; conflicting selections for a shared folder are reported.
5384
-
- The Admin UI makes shared-folder assignments visible before they break a run. Every channel or
5385
-
DM whose effective working folder is assigned to another conversation gets a red warning row in
5386
-
Conversations. The working-folder browser shows a red, named warning whenever the directory being
5387
-
viewed is already assigned elsewhere, before **Use this folder** can create another shared
5388
-
assignment. Both views use the runtime's resolved path logic rather than raw string comparison.
5385
+
writes are reported and retried; shared folders follow one linked owner setup.
5386
+
- The Admin UI shows shared-folder conversations with a linked marker. The folder picker names existing assignments and explains inheritance; the editor opens the source conversation and locks inherited settings. Both views use the runtime's resolved path logic rather than raw strings.
5389
5387
- Runtime settings provide **Reset to default** beside **Browse**. It clears only the custom
5390
5388
working folder through the normal Save/Discard flow; the default remains
5391
5389
`~/ChannelGate/<platform>/<slug>/`. Existing files stay in their original location.
Copy file name to clipboardExpand all lines: TEST-PLAN.md
+10-1Lines changed: 10 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,12 @@
1
1
# ChannelGate — Test Plan
2
2
3
+
## Linked working-folder setup acceptance
4
+
5
+
Automated: `test/skills-workspace-sync.test.js`, `test/code-channels.test.js`, `test/workspace-conflict-reply.test.js`, `test/workspace-conflict-admin.test.js`, `test/workdir-boundary.test.js`. Verify automatic inheritance instead of skills/memory refusal, live source edits, owner-scoped skills, model independence, shared-write rejection, operator service secret filtering, established-owner selection, owner departure and explicit unlinking. `test/drivesync.test.js` covers sync selection; linked rows must never create a second bisync job.
6
+
7
+
Live fixture (pending, run once with Claude and once with Codex): disposable private channels `cg-qa-linked-source` and `cg-qa-linked-follower`, same empty project directory, harmless test skill and memory sentinel. Set source Worker/network on; give follower different initial skills/memory. Select source folder from follower in Admin UI. Confirm source label/button, inherited controls, no conflict error, equal durable skill tree and source-scoped skill. Prompt follower: “Report your configured engine/model and the available shared test skill; add a test memory fact.” Change source skill/memory, retry, then change follower harness/model and confirm only runtime changes. Reject follower shared-setting edits with source guidance. Open an approved code channel from source and confirm it starts. Unlink follower and verify independent settings resume. Record message links, settings screenshots and engine evidence; no live PASS is claimed by automated checks. Restore/delete disposable fixtures. Cross-platform fixture: share a source with a Teams/Google Chat follower and verify actual-surface preamble while owner guide bytes remain stable. Drive fixture: valid disposable Drive folder, one scheduled job and one state directory, follower manual sync resolves to owner.
8
+
9
+
3
10
Running label acceptance (Claude and Codex): in a Slack agent thread with chat:write.customize, select an explicit effort using /model, then ask “Read README.md and explain the startup flow.” Confirm Stop shows the selected model (effort), transitions through live tool/writing phases, and becomes active without an activity suffix after completion or Stop. Repeat with each engine and a different effort; verify fallback replaces model/effort. Pass only with observed Slack evidence. Live execution pending; automated coverage: test/slack-progress.test.js native Stop effort/phase test and test/slack-stop-progress.test.js late-event cancellation fixtures.
4
11
5
12
## User-linked dashboard access (2026-10-25)
@@ -3882,7 +3889,9 @@ observed tool/process/filesystem evidence, and verdict. A missing, skipped, or b
3882
3889
is not a pass. Maintain the private QA registry alongside these reusable public instructions.
3883
3890
3884
3891
3885
-
## Shared-folder conflict detection and warnings
3892
+
## Shared-folder conflict detection and warnings (historical)
3893
+
3894
+
Superseded by **Linked working-folder setup acceptance** at the top of this plan. The old rejection/red-warning expectations below describe historical behavior, not current acceptance gates.
Copy file name to clipboardExpand all lines: documentation/src/content/docs/features/shared-folder-conflicts.md
+8-4Lines changed: 8 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,13 +16,17 @@ A Git branch alone does not isolate working files. Use a distinct worktree for e
16
16
17
17
The gateway's per-thread queue orders requests within that thread. It does not lock every project file against work in another thread or an authorized developer session.
18
18
19
-
## Align conversations sharing one folder
19
+
## Linked folder setup
20
20
21
-
A working folder also contains gateway-managed instructions, shared skill materialization, and portable memory files. Two conversations pointed at that folder cannot safely impose incompatible managed selections.
21
+
Selecting a folder already assigned to another conversation links to that conversation's shared setup automatically. The established folder owner remains the source even when an older conversation joins later. Existing duplicate assignments resolve to the first stored conversation.
22
22
23
-
ChannelGate checks compatible shared skill grants and memory settings before workspace synchronization. A conflict refuses provisioning with guidance to separate the folders or align the selections. It does not silently replace the other conversation's managed setup. The conflict notice does not disclose another conversation's identity or private folder path.
23
+
Skills (including owner-scoped catalog skills), templates, memory settings and files, instructions, access policy, connectors, channel secrets, mode, Auto, Lean, network and Drive configuration follow the source live. Edit shared settings in the source conversation; attempts to create conflicting selections in a follower explain where to edit. Personal accounts and grants stay personal. Harness, model, effort, engine authentication and sessions remain independent.
24
24
25
-
An administrator should identify every conversation assigned to the folder, compare direct grants, template-derived grants, organization grants, and memory settings, then either align them or assign separate paths. Separate paths are usually easier to reason about for unrelated projects.
25
+
The conversation list shows a linked-folder marker. The folder picker explains inheritance before selection; the conversation editor names the source and provides an Open source conversation button. Slack Settings also identifies the source. One owner runs Drive synchronization; follower sync requests use that same job and state.
26
+
27
+
Changing the working folder unlinks the conversation, retaining the last effective setup as its starting point. When the owner leaves, the first remaining conversation becomes the source using its saved setup. The gateway still refuses its private runtime/configuration trees and parent folders that would expose multiple workspaces. Folder assignment remains an administrator operation.
28
+
29
+
A shared folder keeps the owner's operating guide stable; a follower on another chat platform receives its actual surface capabilities in each turn's prompt.
{id: "template",label: "Template skills",slugs: template?.resolved||[],note: template ? `Included by ${template.name}. Edit the template in Skills → Templates.` : "Choose a template above to include its skills."},
2105
2105
...(section.length ? [{id: "section",label: "Conversation skills",slugs: section,note: "Included from this conversation’s repository section."}] : []),
notice.textContent=`Linked folder setup: ${meta.workspaceLink.name}. Skills, templates, memory, instructions, mode, network and Drive sync follow this source. Edit shared settings there; choose a separate folder to unlink. Harness and model remain independent.`;
linked.textContent=`Shared setup linked to ${dm.meta.workspaceLink.name}. Edit shared settings in that source conversation; harness, model and effort remain independent.`;
2922
+
head.after(linked);
2923
+
}
2886
2924
2887
2925
constcustomBox=document.createElement("div");
2888
2926
customBox.className="dm-custom";
@@ -2891,7 +2929,13 @@ function renderDmDetail(id) {
conflict.textContent=`Already assigned to ${names.join(", ")}. Selecting it here will share one working folder between conversations.`;
4670
+
conflict.textContent=`Already assigned to ${names.join(", ")}. Selecting it links this conversation to the existing folder setup: skills, memory, instructions, mode, network and Drive sync. Harness and model stay independent.`;
0 commit comments