1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
---
name: workspace-git-remotes
description: "Every /workspace repo now has a `local` remote on git.terst.org, and two machines push to them — fetch before starting work"
metadata:
node_type: memory
type: project
originSessionId: 08c1f89c-4d24-4fb2-9488-0fe155872388
modified: 2026-09-24T09:01:57.575Z
---
**As of 2026-09-24 every active repo has a bare remote at `/site/git.terst.org/repos/<name>.git`.**
Created this session: `listen.git`, `feedreader.git`, `devtools.git`, `podkit.git`. Already
existed: `doot.git`, `claudomator.git`, `nav.git`, `modal-shell.git`, `claude-memory.git`.
**Two machines push to these — tungsten and Peter's Fedora laptop.** Listen went from 18 to 19
commits while this session sat idle. **`git fetch` before starting work on any repo**, and
expect to fast-forward rather than assuming your local HEAD is current. A SHA-equality check is
not a divergence check: use `git merge-base --is-ancestor` before calling something diverged
(I reported a clean fast-forward as a divergence by comparing SHAs alone).
**Convention, copied from the pre-existing `doot.git`:**
- bare, `--shared=group`, but **no setgid** — doot is plain `775`, and `--shared=group` leaves
`2775`, so clear it with `chmod -R g-s`
- owned `www-data:www-data`, dirs `775`, files `664`
- a one-line `description` file (some web UIs display it)
- `HEAD` points at *that repo's own* branch — `listen`/`devtools`/`podkit` use `main`,
`feedreader`/`doot` use `master`. Don't normalise one to the other.
**Pushing as root leaves root-owned files behind.** `chown -R www-data:www-data <repo>.git`
after every push. `doot.git` has ~339 files with this drift already; harmless at `775` because
everything is group-readable, but it will bite if a web UI ever runs as another user.
**Git refuses these paths with a "dubious ownership" error** because the bare repos are
www-data-owned and sessions run as root. `safe.directory` entries already exist for `doot.git`
and `claude-memory.git`; adding one for a new repo follows that established policy rather than
deciding anything. Still check `git config --global --get-all safe.directory` first — see
[[feedback_verify_before_asserting_root_cause]] — because silencing the error blind is how a
real permissions problem gets papered over.
**The memory tree itself is one of these repos.** `/root/.claude/projects/-workspace/memory` is
a git checkout with remote `terst`. It diverges in both directions routinely: commit local
changes, `git merge terst/main`, resolve `MEMORY.md` (the conflict is always both sides
appending index lines — keep both), verify every `](file.md)` link resolves, then push.
See [[workspace-layout]] and [[fedora-android-build-setup]].
|