Skip to content

Commit 6ddf835

Browse files
committed
Merge chore/scrub-deployment-names — no deployment nicknames in the published tree
2 parents 0a688e3 + 8d39138 commit 6ddf835

7 files changed

Lines changed: 12 additions & 12 deletions

File tree

‎FEATURES.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2149,7 +2149,7 @@ are retired, bullet by bullet; everything else stands.
21492149
- **Gateway-to-gateway sources** (`src/gateway/skills/peer-sync.js`): a source of kind `gateway`
21502150
(a peer's URL + a token with the `sync` scope, stored write-only) pulls the peer's organization
21512151
skills through that endpoint — staged in review mode, active in auto mode, tombstoned when the
2152-
peer drops them, last-good kept on failure — so a second gateway (Atlas following Xavier) shares
2152+
peer drops them, last-good kept on failure — so a second gateway (a follower gateway tracking a primary one) shares
21532153
one library with nothing but a URL and a token. All source kinds (git / folder / gateway) sync
21542154
through one dispatcher on the interval, from the UI and from chat.
21552155
→ TEST-PLAN: Skills platform (round two).

‎TEST-PLAN.md‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2546,7 +2546,7 @@ are the v0.8 production deployment gate and are executed in the QA loop that fol
25462546
mask create args work; the `agent` user sees every channel folder and memory, every repo and the
25472547
gateway logs, can write, and `~/.local/share/containers` is an empty tmpfs while the host store
25482548
is untouched.
2549-
- [ ] Manual (Xavier, both engines): switch on → an admin author in a Full-access channel lists
2549+
- [ ] Manual (production gateway, both engines): switch on → an admin author in a Full-access channel lists
25502550
another channel's `MEMORY.md` under `~/ChannelGate/slack/<slug>/` and a repo under `~/Code/`
25512551
with Read/Bash (Claude) and the shell (Codex); `podman inspect` shows the home bind + the
25522552
tmpfs mask; a Worker channel's container shows neither; switch off → the admin container is
@@ -2574,7 +2574,7 @@ are the v0.8 production deployment gate and are executed in the QA loop that fol
25742574
- [x] Unit: `parseInspectLine` reads the tenth `cg.mounts` field, maps `<no value>` to empty, and
25752575
still parses a nine-field line from a container created before the label existed — an unknown
25762576
mount fingerprint counts as CHANGED, not as matching (automated).
2577-
- [ ] Manual (Xavier): point a channel's `workDir` at a subfolder, send a turn (the container is
2577+
- [ ] Manual (production gateway): point a channel's `workDir` at a subfolder, send a turn (the container is
25782578
created with that folder bind-mounted), restore `workDir` to the default and delete the
25792579
subfolder, then send another turn. Pass when the container is rebuilt before the turn runs
25802580
and the answer arrives normally; fail on `Append system prompt file not found` or any reply
@@ -3137,8 +3137,8 @@ are the v0.8 production deployment gate and are executed in the QA loop that fol
31373137
create a skill from chat, confirm the commit lands and the skill shows as owned by that source
31383138
after the next sync; push a change to a source repository with the webhook configured and
31393139
confirm the sync runs within seconds.
3140-
- [ ] Live (two gateways): mint a `sync` token on Xavier, add Xavier as a gateway source on Atlas in
3141-
review mode, approve a staged skill there, and use it in an Atlas channel.
3140+
- [ ] Live (two gateways): mint a `sync` token on the primary gateway, add it as a gateway source on the
3141+
second gateway in review mode, approve a staged skill there, and use it in one of that gateway's channels.
31423142

31433143
## Security checks
31443144
- [ ] **Retired 2026-09-03 (Linux + containers only):** the sandbox wording — inside the container `~/.ssh` and sibling channel folders do not exist at

‎src/gateway/skills/peer-sync.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// that gateway's MCP endpoint (/mcp/skills) with an access token carrying the `sync` scope. The
33
// peer's organization skills arrive as synced (owner git, this source) revisions — staged in
44
// review mode, active in auto mode — with the same tombstone/conflict rules as a git source. A
5-
// second gateway on the same host (Atlas following Xavier) needs nothing more than the URL and a
5+
// second gateway on the same host (a follower tracking a primary) needs nothing more than the URL and a
66
// token minted on the peer.
77
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
88
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

‎src/runtimes/container/names.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Container, volume and label naming — the one home for "what is this channel's container called".
22
//
3-
// Two gateways can share one host under different users (this box runs @xavier under `management`
4-
// and @atlas under `tby`) and, with a rootful daemon, they would share ONE container namespace. So
3+
// Two gateways can share one host under different users (one bot per Linux account, each
4+
// with its own user systemd unit) and, with a rootful daemon, they would share ONE container namespace. So
55
// every name carries the install id: sha256 of the runtime root's real path, not the per-boot
66
// instanceId, so a restart finds its own containers again. Discovery is by NAME and then VERIFIED
77
// by the `cg.install` label — a container that happens to answer to our name but carries a foreign

‎src/slack/progress.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { describeSilence } from "../engines/watchdog.js";
1212
// Live feedback: while Claude runs, edit the placeholder every ~1.5s (Slack's chat.update rate
1313
// limit) with the streamed text + a cursor, falling back to an activity line before any text.
1414
// Slack Assistant working UI in an AI-app / assistant thread
15-
// (assistant.threads.setStatus). `status` drives the compact "atlas is using…" activity line;
15+
// (assistant.threads.setStatus). `status` drives the compact "<bot> is using…" activity line;
1616
// `loading_messages` drives the separate, prominent loading copy above the composer. It no-ops
1717
// gracefully outside an assistant thread or without the required scope. Pass "" to clear.
1818
// Threads where setStatus has already been refused (not an assistant thread, missing

‎test/health-liveness.test.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ function getHealth(headers = {}) {
4949
}
5050

5151
test("a connected daemon says so to a caller with no session", async () => {
52-
snapshot = { status: "connected", connected: true, user: "atlas", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null };
52+
snapshot = { status: "connected", connected: true, user: "gatewaybot", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null };
5353
const body = await getHealth();
5454
assert.deepEqual(body.slack, { status: "connected", connected: true }, "the connection state, exactly — nothing that names the workspace");
5555
assert.equal(body.ok, true);
@@ -78,7 +78,7 @@ test("a manager with no state yet answers disconnected instead of omitting the f
7878

7979
test("a caller who cannot identify itself still gets no engine or filesystem detail", async () => {
8080
// The liveness widening is exactly one field wide: everything the narrowing was for stays shut.
81-
snapshot = { status: "connected", connected: true, user: "atlas", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null };
81+
snapshot = { status: "connected", connected: true, user: "gatewaybot", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null };
8282
const body = await getHealth({ "x-cg-secret": "not-the-secret" });
8383
assert.deepEqual(Object.keys(body).sort(), ["instanceId", "ok", "slack"]);
8484
});

‎test/run-api.test.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const KEY = process.env.CG_API_KEY;
1616

1717
const { createWebApp } = await import("../src/web/app.js");
1818

19-
const slackStub = { snapshot: () => ({ status: "disconnected", connected: false, user: "atlas", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null }), getClient: () => null };
19+
const slackStub = { snapshot: () => ({ status: "disconnected", connected: false, user: "gatewaybot", team: "Make it Future", teamId: "T0BB", botUserId: "U0BB", error: null }), getClient: () => null };
2020
let updateSmokeCalls = 0;
2121
let updateStartResult = {
2222
ok: true,

0 commit comments

Comments
 (0)