Skip to content

Commit 05ca393

Browse files
authored
Rename root-facing downstream services and files (#29)
Update compose/general to load root.scm and pin the merged sync-records root rename. Rename gateway admin routes and configuration from /api/v1/control/* and CONTROL_* to /api/v1/root/* and ROOT_*. Rename the file-system operational namespace from /control/pin to /root/pin, including the SMB projection, tests, and smoke script. Refresh downstream docs and workbench examples so the root terminology matches the merged sync-records runtime layout.
1 parent 325d184 commit 05ca393

File tree

26 files changed

+323
-321
lines changed

26 files changed

+323
-321
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Monorepo for the Synchronic journal compose stack plus two web UIs:
66
- `workbench` for developer-oriented journal queries
77
- `gateway` for versioned web-native API routes and Swagger docs over journal interfaces
88
- `router` for edge routing and optional TLS termination
9-
- `file-system` for SMB projection of `/stage`, `/ledger`, and `/control`
9+
- `file-system` for SMB projection of `/stage`, `/ledger`, and `/root`
1010

1111
## Quick Start
1212

compose/general/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FROM ghcr.io/sandialabs/sync-journal/journal-sdk:1.2.0
22

3-
ARG LISP_REPOSITORY=https://raw.githubusercontent.com/sandialabs/sync-records/dfc252b60778946e20105f01af551d8c43b60b3e/lisp/
3+
ARG LISP_REPOSITORY=https://raw.githubusercontent.com/sandialabs/sync-records/e40403783592c09ffa31a7af63d2838b72bfcc31/lisp/
44
ARG CUSTOM_SETUP=""
55

66
RUN set -eu; \
@@ -11,7 +11,7 @@ RUN set -eu; \
1111
rm -f /tmp/custom-setup.sh; \
1212
fi
1313

14-
RUN wget "${LISP_REPOSITORY}/control.scm"
14+
RUN wget "${LISP_REPOSITORY}/root.scm"
1515
RUN wget "${LISP_REPOSITORY}/standard.scm"
1616
RUN wget "${LISP_REPOSITORY}/log-chain.scm"
1717
RUN wget "${LISP_REPOSITORY}/linear-chain.scm"

compose/general/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ This compose stack runs one journal with gateway, explorer, workbench, router, a
2727

2828
Gateway note:
2929
- `ALLOW_ADMIN_ROUTES` is enabled by default in `compose/general/docker-compose.yml`.
30-
- Public/client-facing API traffic should go to `gateway` under `/api/v1/general/*` and `/api/v1/control/*`.
30+
- Public/client-facing API traffic should go to `gateway` under `/api/v1/general/*` and `/api/v1/root/*`.
3131
- The raw `/interface` endpoint is still present for direct journal transport use and bridge-oriented internals.
32-
- The journal's periodic scheduler uses the raw control-step call `(*step* "<secret>")`, which depends on the merged `sync-records` control-step pipeline.
32+
- The journal's periodic scheduler uses the raw root-step call `(*step* "<secret>")`, which depends on the merged `sync-records` root-step pipeline.
3333

3434
## TLS Behavior
3535

@@ -104,7 +104,7 @@ LOCAL_LISP_DIRECTORY=/absolute/path/to/lisp ./tests/local-compose.sh smoke
104104
```
105105

106106
`LOCAL_LISP_DIRECTORY` must contain:
107-
- `control.scm`
107+
- `root.scm`
108108
- `standard.scm`
109109
- `log-chain.scm`
110110
- `linear-chain.scm`

compose/general/docker-compose.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ networks:
44

55
services:
66
journal:
7-
image: ghcr.io/sandialabs/sync-services/general:1.2.2
7+
image: ghcr.io/sandialabs/sync-services/general:1.2.3
88
container_name: journal
99
networks:
1010
- docker
@@ -34,7 +34,7 @@ services:
3434
SYNC_WORKBENCH_ENDPOINT: /interface
3535

3636
gateway:
37-
image: ghcr.io/sandialabs/sync-services/gateway:1.1.1
37+
image: ghcr.io/sandialabs/sync-services/gateway:1.1.2
3838
container_name: gateway
3939
networks:
4040
- docker
@@ -45,8 +45,8 @@ services:
4545
PORT: 80
4646
JOURNAL_JSON_ENDPOINT: http://journal/interface/json
4747
JOURNAL_SCHEME_ENDPOINT: http://journal/interface
48-
CONTROL_JSON_ENDPOINT: http://journal/interface/json
49-
CONTROL_SCHEME_ENDPOINT: http://journal/interface
48+
ROOT_JSON_ENDPOINT: http://journal/interface/json
49+
ROOT_SCHEME_ENDPOINT: http://journal/interface
5050
REQUEST_TIMEOUT_MS: ${REQUEST_TIMEOUT_MS:-30000}
5151
ALLOW_ADMIN_ROUTES: "1"
5252

@@ -72,7 +72,7 @@ services:
7272
- "${HTTPS_PORT:-443}:443"
7373

7474
file-system:
75-
image: ${FILE_SYSTEM_IMAGE:-ghcr.io/sandialabs/sync-services/file-system:1.1.1}
75+
image: ${FILE_SYSTEM_IMAGE:-ghcr.io/sandialabs/sync-services/file-system:1.1.2}
7676
container_name: file-system
7777
depends_on:
7878
- journal

compose/general/run.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@ resolve_lisp_file() {
3535

3636
run_startup() {
3737
clear_flag="$1"
38-
control=$( cat "$(resolve_lisp_file control.scm)" )
38+
root=$( cat "$(resolve_lisp_file root.scm)" )
3939
standard=$( cat "$(resolve_lisp_file standard.scm)" )
4040
chain=$( cat "$(resolve_lisp_file log-chain.scm)" )
4141
tree=$( cat "$(resolve_lisp_file tree.scm)" )
4242
ledger=$( cat "$(resolve_lisp_file ledger.scm)" )
4343
interface=$( cat "$(resolve_lisp_file interface.scm)" )
44-
expr="($interface $clear_flag \"$SECRET\" \"$SECRET\" $WINDOW $control '$standard '$chain '$tree '$ledger)"
44+
expr="($interface $clear_flag \"$SECRET\" \"$SECRET\" $WINDOW $root '$standard '$chain '$tree '$ledger)"
4545
if [ "$clear_flag" = "#f" ]; then
4646
expr="(*eval* \"$SECRET\" $expr)"
4747
fi

compose/general/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.2.2
1+
1.2.3

services/explorer/change.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ The explorer UI should be organized around:
3030
- `stage`
3131
- `ledger`
3232

33-
There should be no explorer-side `control` namespace.
34-
In the file-system service, `control` exists as a workaround for non-filesystem operations.
33+
There should be no explorer-side `root` namespace.
34+
In the file-system service, `root` exists as a workaround for non-filesystem operations.
3535
In the explorer, those behaviors already belong in explicit UI actions such as pin/unpin, so they should not be represented as a browsable tree.
3636

3737
This stage/ledger split should become the primary browsing model in the UI.
@@ -143,7 +143,7 @@ This should follow the same semantics already used by the file-system layer in:
143143
- `services/file-system/src/FileSystem.Server/JournalPathMapper.cs`
144144

145145
The explorer should not literally call the file-system service, but it should mimic its namespace and path semantics.
146-
It should also intentionally omit the file-system service's `control` namespace.
146+
It should also intentionally omit the file-system service's `root` namespace.
147147

148148
### 5. Internal Representation Boundary
149149

services/file-system/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ The loader now supports journal-style entries for:
4646
The projected namespace now exposes three top-level areas:
4747
- `/stage`
4848
- `/ledger`
49-
- `/control`
49+
- `/root`
5050

51-
The current control-plane feature is:
52-
- `/control/pin`
53-
- a single synthetic UTF-8 text control file
51+
The current root-plane feature is:
52+
- `/root/pin`
53+
- a single synthetic UTF-8 text root file
5454
- reads are discovery-based and render lines like `pinned /ledger/...` or `unpinned /ledger/...`
5555
- writes accept explicit directives in the same form
5656
- only `/ledger/...` paths are valid in this file
@@ -79,7 +79,7 @@ The fixture model now also supports symlink entries:
7979

8080
Directory metadata lives behind the scenes on hidden `*directory*` marker entries in the backing model. That marker is not exposed to filesystem users as a projected `.directory` file.
8181
Projected writes are currently allowed only under `/stage`; `/ledger/...` is treated as read-only in the local mock model.
82-
Pin/unpin is the current exception: it is exposed through `/control/pin`, not through file metadata or sidecars in the content tree.
82+
Pin/unpin is the current exception: it is exposed through `/root/pin`, not through file metadata or sidecars in the content tree.
8383
The current `json` backend now runs through a mock gateway abstraction shaped like `POST /api/v1/general/get` and `POST /api/v1/general/set`, so the SMB projection path already matches the real gateway contract more closely.
8484

8585
Try connecting with `smbclient` after the container starts:
@@ -111,7 +111,7 @@ Targeted local SMB integration checks:
111111
./tests/smbclient-smoke.sh
112112
./tests/json-projection-smoke.sh
113113
./tests/symlink-smoke.sh
114-
./tests/pin-control-smoke.sh
114+
./tests/pin-root-smoke.sh
115115
./tests/symlink-smoke.sh
116116
```
117117

services/file-system/ai-spec.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Expose journal-backed records as a network-mounted filesystem using a native SMB
77

88
### Authority and persistence
99
- Journal is authoritative.
10-
- SMB service is a projection/control layer.
10+
- SMB service is a projection/root layer.
1111
- No local durable mirror of journal content.
1212

1313
### Access path
@@ -18,7 +18,7 @@ Expose journal-backed records as a network-mounted filesystem using a native SMB
1818
- Root exposes exactly three top-level namespaces:
1919
- `/stage`: local mutable working tree
2020
- `/ledger`: immutable recursive committed-ledger view
21-
- `/control`: explicit non-content operational surface
21+
- `/root`: explicit non-content operational surface
2222
- Any ledger peer view exposes exactly three structural children:
2323
- `/state`: committed document tree for that ledger peer view
2424
- `/peer/<name>`: related ledger peer
@@ -31,8 +31,8 @@ Expose journal-backed records as a network-mounted filesystem using a native SMB
3131
- Everything under `/ledger` is immutable for content mutation.
3232
- Immutable ledger paths may still expose first-class journal properties such as pin state where supported.
3333
- Pin/unpin is in-scope for MVP as a first-class filesystem capability, but it must map directly to journal pin state rather than any synthetic metadata sidecar.
34-
- Control namespace:
35-
- `/control/pin` is a synthetic control file for pin/unpin.
34+
- Root namespace:
35+
- `/root/pin` is a synthetic root file for pin/unpin.
3636
- `/stage` is never pinnable through the filesystem surface.
3737

3838
### Empty directory convention
@@ -66,7 +66,7 @@ Expose journal-backed records as a network-mounted filesystem using a native SMB
6666
- `*file-system/file*` should only be introduced when non-default file metadata must be persisted.
6767

6868
### Content-kind derivation
69-
- `content-kind` is not stored as separate filesystem control metadata.
69+
- `content-kind` is not stored as separate filesystem root metadata.
7070
- It is derived from the actual journal content representation:
7171
- byte-vector payload => `bytes`
7272
- any non-byte typed value => `expression`
@@ -149,13 +149,13 @@ Expose journal-backed records as a network-mounted filesystem using a native SMB
149149
- Delete => `set!(..., ["nothing"])`.
150150
- `mkdir` => create `*directory*` marker value.
151151
- Pin/unpin, where exposed, must map directly to first-class journal pin/unpin behavior.
152-
- `/control/pin` writes map to gateway `pin` / `unpin`, not `set!`.
152+
- `/root/pin` writes map to gateway `pin` / `unpin`, not `set!`.
153153

154154
### Read-only rules
155155
- Content mutation outside `/stage` => `EROFS`.
156156
- First-class journal properties such as pin state are not mutated through any directory sidecar.
157157
- Pin/unpin may still be supported on immutable ledger paths because it is not a content mutation.
158-
- `/control/pin` is writable only as a whole-file control surface for replacing the desired pinned set.
158+
- `/root/pin` is writable only as a whole-file root surface for replacing the desired pinned set.
159159

160160
### Write buffering
161161
- Per-handle in-memory buffer for `/stage` writes.
@@ -210,32 +210,32 @@ Write rules:
210210
## 6) Pin Control Namespace
211211

212212
### Namespace shape
213-
- `/control/pin` is a single synthetic UTF-8 text file.
213+
- `/root/pin` is a single synthetic UTF-8 text file.
214214
- It is the only user-facing pin/unpin surface in the filesystem.
215215
- The pin namespace must never mirror `/stage/...`.
216216

217217
### Read behavior
218-
- Reading `/control/pin` returns newline-delimited pin-state records for ledger paths the filesystem has already discovered by reading those ledger entries.
218+
- Reading `/root/pin` returns newline-delimited pin-state records for ledger paths the filesystem has already discovered by reading those ledger entries.
219219
- Each line is one canonical projected ledger path prefixed by either `pinned` or `unpinned`.
220220
- The file is discovery-based rather than globally complete:
221221
- reading ledger files and directories may add entries to the current rendered view
222-
- directory listing alone does not need to enumerate the full ledger into `/control/pin`
222+
- directory listing alone does not need to enumerate the full ledger into `/root/pin`
223223
- Blank lines are allowed but ignored on parse.
224224
- The rendered file should be canonicalized:
225225
- normalized projected `/ledger/...` paths only
226226
- sorted deterministically
227227
- duplicates removed
228228

229229
### Write behavior
230-
- Writing `/control/pin` applies explicit pin-state directives rather than replacing a globally complete set.
230+
- Writing `/root/pin` applies explicit pin-state directives rather than replacing a globally complete set.
231231
- The file content is parsed as UTF-8 newline-delimited directives:
232232
- `pinned /ledger/...`
233233
- `unpinned /ledger/...`
234234
- Only canonical `/ledger/...` paths are allowed.
235235
- `/stage/...` paths are invalid in this file.
236236
- Invalid lines reject the whole write with `EINVAL`.
237237
- Repeated directives for the same path are resolved by last-line-wins within that write.
238-
- Rename and sidecar control files are not part of the pin UX.
238+
- Rename and sidecar root files are not part of the pin UX.
239239

240240
### Journal mapping
241241
- Each listed projected `/ledger/...` path decompiles to the corresponding canonical ledger journal path.
@@ -266,8 +266,8 @@ Write rules:
266266
- invalid path/envelope/value => `EINVAL`
267267
- invalid hidden directory-marker data => `EINVAL`
268268
- read-only content mutation => `EROFS`
269-
- unsupported/disallowed control metadata op => `EOPNOTSUPP`
270-
- unsupported operation inside `/control/pin/...` (for example rename or file-content write) => `EOPNOTSUPP`
269+
- unsupported/disallowed root metadata op => `EOPNOTSUPP`
270+
- unsupported operation inside `/root/pin/...` (for example rename or file-content write) => `EOPNOTSUPP`
271271
- upstream timeout/transport failure => `EIO`
272272

273273
## 9) Deployment and Runtime
@@ -356,7 +356,7 @@ No secrets or full payload content by default.
356356

357357
### Interop expectations
358358
- `/ledger/...` content remains read-only.
359-
- Directory metadata is stored behind the scenes on hidden `*directory*` marker entries rather than projected control files.
359+
- Directory metadata is stored behind the scenes on hidden `*directory*` marker entries rather than projected root files.
360360
- Case sensitivity rules must avoid ambiguous collisions.
361361
- Hidden directory markers do not mirror first-class journal properties like pin state or derived content classification.
362362
- Hidden directory markers do not mirror metadata about child entries.

0 commit comments

Comments
 (0)