cce workspace root: member list, lockfile and dependency pins
git clone https://git.lucas.co/cce.git
Pins, patch keys and the guide follow origin to GitHub
git.lucas.co is a read-only hourly mirror of GitHub now, not a
publishing step, and the ~/git bare repos are gone. The [patch] keys
and bump-revs.sh match the crates' new GitHub pins; the guide no longer
describes the bare-repo chain.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
CLAUDE.md | 6 ++++--
Cargo.toml | 17 +++++++++++------
bump-revs.sh | 12 ++++++------
3 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/CLAUDE.md b/CLAUDE.md
index 367e9eb..6ded5e2 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -24,8 +24,10 @@ of them before reading the guide does damage that is annoying to undo:
changes inside the relevant crate — the root repo tracks only the workspace
files listed above, and its `.gitignore` keeps every crate out. Remember that
**committing is not publishing** —
- `origin` is a pushable bare repo under `~/git/`, and gitsite mirrors from
- there, so an unpushed commit is not on the site.
+ every crate's `origin` is GitHub (`github.com/lsgalante/<crate>`), and a
+ post-commit hook pushes each commit there; git.lucas.co is only an hourly
+ mirror of GitHub. A commit that did not push (hook missing, network down)
+ is on no remote at all.
- **`ccebuild` is the build/install entry point** (`ccebuild install`,
`restart`, `status`, `prune`). Do not hand-roll a loop over the crates, and
never add a binary name to a Makefile — `cargo metadata` already knows it, and
diff --git a/Cargo.toml b/Cargo.toml
index 0662569..869ed55 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -34,15 +34,20 @@ members = [
]
# Every app declares cce-ui (and cce-compositor also cce-window-manager) as a git
-# dependency so a standalone clone of one app resolves without sibling
-# checkouts -- that is what makes a single app installable on its own. Inside
-# this workspace those git sources are redirected back to the local crates, so
+# dependency on GitHub -- the crates' origin, the one place a push lands -- so a
+# standalone clone of one app resolves without sibling checkouts; that is what
+# makes a single app installable on its own. (Until 2026-09-21 the pins named
+# git.lucas.co, which is only an hourly mirror of GitHub now: a rev pinned right
+# after a push was not fetchable from there for up to an hour.) Inside this
+# workspace those git sources are redirected back to the local crates, so
# workspace builds compile the working tree and cross-crate edits stay live.
# The pinned revs only affect builds that happen outside this workspace, which
# means they can go stale without any build here failing: after pushing cce-ui
-# or cce-window-manager, bump the rev in the crates that depend on them.
-[patch."https://git.lucas.co/cce-ui.git"]
+# or cce-window-manager, run ./bump-revs.sh to repin the crates that depend on
+# them. The patch keys must match the pins' URL exactly, or the patch is unused
+# and every crate silently builds a fetched copy of the toolkit.
+[patch."https://github.com/lsgalante/cce-ui.git"]
cce-ui = { path = "cce-ui" }
-[patch."https://git.lucas.co/cce-window-manager.git"]
+[patch."https://github.com/lsgalante/cce-window-manager.git"]
cce-window-manager = { path = "cce-window-manager" }
diff --git a/bump-revs.sh b/bump-revs.sh
index ffbf0ff..c473e0b 100755
--- a/bump-revs.sh
+++ b/bump-revs.sh
@@ -2,7 +2,7 @@
# Bump the pinned revs that let a single crate be installed on its own.
#
# Each app declares its workspace-internal dependencies as git dependencies on
-# git.lucas.co, pinned to an exact rev, while the workspace root patches those
+# GitHub (the crates' origin), pinned to an exact rev, while the workspace root patches those
# sources back to the local crates. That split is what lets one app be cloned
# and built alone -- and it is also exactly why the pins rot silently: inside
# this workspace the [patch] block always wins, so a stale rev never fails a
@@ -25,9 +25,9 @@
# An origin ahead of the work tree is fine and is pinned as-is -- it is what
# others can actually fetch.
#
-# The pins themselves name git.lucas.co, which mirrors GitHub hourly, so a rev
-# pinned immediately after a push is correct but not yet fetchable from the
-# site. That resolves itself and is not an error.
+# The pins name GitHub directly (since 2026-09-21; before that git.lucas.co,
+# which only mirrors GitHub hourly, so a fresh pin was unfetchable for up to an
+# hour), so a rev pinned right after a push resolves at once.
#
# A manifest that should have changed but did not fails the run. Silently
# skipping is what let 21 repos sit unpushed for a day; the same rule applies
@@ -63,7 +63,7 @@ say() { printf '%s\n' "$*"; }
pins() {
for m in "$ROOT"/*/Cargo.toml; do
crate=$(basename "$(dirname "$m")")
- sed -n 's|^\([a-z0-9-]*\) = { git = "https://git\.lucas\.co/\1\.git", rev = "\([0-9a-f]\{40\}\)" }$|'"$crate"' \1 \2|p' "$m"
+ sed -n 's|^\([a-z0-9-]*\) = { git = "https://github\.com/lsgalante/\1\.git", rev = "\([0-9a-f]\{40\}\)" }$|'"$crate"' \1 \2|p' "$m"
done
}
@@ -151,7 +151,7 @@ for t in $TARGETS; do
m="$ROOT/$crate/Cargo.toml"
say " $crate"
if [ -z "$DRY" ]; then
- sed -i "s|^$dep = { git = \"https://git.lucas.co/$dep.git\", rev = \"$old\" }$|$dep = { git = \"https://git.lucas.co/$dep.git\", rev = \"$new\" }|" "$m"
+ sed -i "s|^$dep = { git = \"https://github.com/lsgalante/$dep.git\", rev = \"$old\" }$|$dep = { git = \"https://github.com/lsgalante/$dep.git\", rev = \"$new\" }|" "$m"
grep -q "rev = \"$new\"" "$m" || {
say "!! $crate: manifest did not change -- pin format drifted?"; exit 1; }
else