Chat: Git Devops Wiring (Snow Globe Harvard Spheres)

**Chat log** from Bead: Snow Globe Harvard Spheres · [canonical source](https://redfish.acequia.io/guerin/.agents/6a8f0a99-c255-4a5c-9c4a-9097d0ee9cd8/2026-06-12/chats/2026-06-12-git-devops-wiring.md) · session 2026-06-12 · discussion: Talk: Snow Globe Harvard Spheres *Verbatim chat log: immutable provenance. The bead's copy is ground truth; wiki edits here are a fork, never the record.*

Session: Claude (CE / Claude Code extension, VS Code) with Stephen. Continuation of the 2026-06-11 thread ([chat](../../2026-06-11/chats/2026-06-11-snow-globe-bead-start.md)).

**Stephen (verbatim):** > lets use devops and git on this project **Claude (summary):** - Created git repo `c:/Users/steph/Documents/src/sphere-apps/` (precedent: sibling `incident-viewer` repo; local identity `Stephen Guerin <Stephen@redfish.com>`; branch `main`; **no remote configured** — GitHub-or-not left as an open question for Stephen in decision 0002). - Imported the `dev/` blackboard (STATE / WORK-QUEUE / journal / decisions / step-01) and the `greg-faces/` code (sphere-faces.js + harmonics pilot) into the repo; bead-relative links in STATE/WORK-QUEUE rewritten to absolute bead URIs. - Initial commit `046f034` — "Import sphere-apps workshop: dev blackboard + greg-faces step-01 pilot". - Decision 0002 (in repo `dev/decisions/`): repo = build workshop (code + versioned blackboard); bead = concept workshop (notes/chats) + staged-offer surface (`artifacts/`); flow = repo → artifacts snapshot → Stephen binds into namespace. Git not initted at the bead root because `/bead-sync` has no excludes and would push `.git/` onto the public commons. - Bead `dev/` slimmed to pointer stubs (README.md + STATE.md); note 06's dev-links updated; `sphere-apps-repo` added to names.json. - Carry-over: step-01 verification (live two-window sync, spec AC2–AC5) still pending.

**Stephen (verbatim):** > look at devops on how do do git according to beads. this was a recent discussion in a bead an hour ago. make a git repo for this in your bead **Claude (summary):** - Found the discussion: bead `d9dfa5e4` [notes/git-and-beads.md](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/2026-06-11/notes/git-and-beads.md) (+ its chat `2026-06-11-git-repos-with-beads.md`), which surveys #devops COA D ("mount real git in the browser") and `c38c1239`'s git-and-learning-from-repos duality (WebDAV = live surface / git = provenance ledger). Stephen's ratified rule: **ecology-owned, self-contained app source lives in the bead** (`repo/` per #devops Phase-1, or bead-as-repo); vendor clones + build-coupled siblings stay at `Documents/src/` as mounted pointers; the bead-CDN frame (N-replicated history face) answers the sync-weight objection I'd used in decision 0002. - Moved the repo into the bead: `mv Documents/src/sphere-apps → <bead>/repo/` (history intact), decision 0003 written (supersedes 0002 placement), relocation committed (`f346dc3`), `git gc` → single packfile (24 objects) as the pre-bead-sync mitigation. Bead `dev/` stubs, `names.json` (`sphere-apps-repo` → canonical `repo/` URI; `git-and-beads` binding added), about.md updated. This repo is the pilot named in the note's Status section.

**Stephen (verbatim, mid-task):** > update devops agent.md and agent.json of having default to store git in its bead. and then other beads can fork it and do pull requests **Claude (summary):** - `#devops` (`64be6d29`) had no agent-face — authored [agent.md](https://redfish.acequia.io/guerin/.agents/64be6d29-d133-4ade-9dce-f62701003e37/agent.md) + [agent.json](https://redfish.acequia.io/guerin/.agents/64be6d29-d133-4ade-9dce-f62701003e37/agent.json) per the 5595c7f1 prototype, carrying four **policy defaults**: (1) git lives in the authoring bead (`repo/` or bead-as-repo; vendor/coupled clones excepted; gc-before-sync hygiene; pilot = sphere-apps); (2) fork = clone upstream into your own bead's `repo/` with an `upstream` names.json binding (every fork is a CDN replica); (3) PR = `git request-pull` envelope into the upstream bead's `uploads/` dock, merge authority stays with the owning bead; (4) serving substrate = acequia-git. Session-log line added to its about.md.

**Stephen (verbatim, mid-task):** > start-bead acequia-git that as an agent can serve as a node in a decentralized git-hub **Claude (summary):** - Hatched bead **acequia-git** `ab96c2ea-c036-4163-bf09-ab228c7252b4` with agent-face from birth ([about](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/about.md) / agent.md / agent.json / names / keywords / dock / hatch chat). Charter: six verbs — serve (dumb-HTTP clone straight off WebDAV), replicate (demand-driven N, every clone a replica), gate pushes (JWT writePaths + signed attestations), fork, route PRs, advertise (route registry). Design note maps GitHub functions onto acequia primitives; liveness ladder static→SW(isomorphic-git)→OS animator; MVP = `update-server-info` + anonymous clone of the sphere-apps pilot repo. Design only — no node running.

**Stephen (verbatim):** > cool do it **Claude (summary):** - Ran the MVP. `git update-server-info` in the pilot repo; first `/bead-sync` of this bead + acequia-git (+ devops agent-face files) after MKCOL of the two new roots; **finding: webdav-sync skips dot-directories**, so `.git/` was PUT explicitly (MKCOLs + HEAD/config/packed-refs/info/refs/objects/info/packs/pack+idx — gc had packed the refs, so `packed-refs` is required). - **Verified: anonymous `git clone https://redfish.acequia.io/guerin/.agents/6a8f0a99…/repo/.git` works** — full history, intact tree. Then exercised the re-publish cycle for real: journal commit `44ec91c` → gc (new pack `df2fe1e4`) → update-server-info → PUT deltas + DELETE old pack → fresh anonymous clone shows all 3 commits; test clone removed after verification. - Recipe + findings recorded as acequia-git's first skill: [serve-bead-repo-dumb-http.md](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/2026-06-12/skills/serve-bead-repo-dumb-http.md); acequia-git status → **rung-1 live**; both beads re-synced. The dot-dir skip is noted as *accidental per-face sync* — the heavy history face only replicates where explicitly placed, exactly the bead-CDN behavior.

**Stephen (verbatim):** > do we already have an acequia-git bead. i want it also to serve github-like functions **Claude (summary):** - Confirmed exactly one acequia-git bead exists — `ab96c2ea`, hatched earlier this same session, rung-1 serve already live (surveyed `.agents/` for duplicates first). - Extended its charter with six **hub verbs** — browse (hub.html: README/tree/file + isomorphic-git log/diff in-browser), issues (`<bead>/issues/NNNN-slug.md` + meta — dock messages with permanent addresses), review (PR-envelope diff view; merge stays the owner's headgate), release (signed tags + artifacts URIs + releases.json), notify (`observe(info/refs)` = push events to docks; stars = inbound links), index (keywords.json + registry; profiles = agent faces, orgs = namespaces). Note: [01-github-like-functions.md](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/2026-06-12/notes/01-github-like-functions.md); agent.md/agent.json updated. - Key reading: most of GitHub is rung 1–2 (static store + in-browser git); only merge/CI/smart-push want the animator. Dogfood rule queued: hub.html develops in acequia-git's own `repo/`, served by the mechanism it fronts.

**Stephen (verbatim):** > so i added greg's spherical-harmonics-faces. > https://harvardviz.live/greg/sphere-harmonics.html?role=viewer&group=sphere-control&itemId=harmonics-faces > > that shows view and controller. I expected it to be just viewer with role=viewer. and role=controller i expected just the controller. do i misunderstand **Claude (summary):** - No misunderstanding — diagnosis: live `greg/sphere-harmonics.html` was still Greg's original (no shim tag) and `sphere-faces.js` was 404; the converted files were staged in the bead only (binding was Stephen's move per decision 0001). Stephen had bound the gallery item, so CE completed the file binding: verified live == local-mirror base (no clobber risk), PUT `sphere-faces.js` + converted `sphere-harmonics.html` via `harvardviz.live:2078` (both 201), verified live script tag + JS MIME. Local mirror updated to match production. Journal commit `c09edb5`; history face re-published (new pack `17814a7a`, old deleted). - step-01's live AC2–AC5 verification = Stephen's reload of the two role URLs.

## References (bead cross-links) - Bead: Agentify Bead · [canonical](https://redfish.acequia.io/guerin/.agents/d9dfa5e4-3c92-4216-bd53-13b520c59a5e/) - Bead: Devops · [canonical](https://redfish.acequia.io/guerin/.agents/64be6d29-d133-4ade-9dce-f62701003e37/) - Bead: Acequia Git · [canonical](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/)