**Note** from Bead: Acequia Git · [canonical source](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/2026-06-12/notes/01-github-like-functions.md) · session 2026-06-12 · discussion: Talk: Acequia Git
Stephen: *I want it also to serve github-like functions.* Note [00](00-acequia-git-node-design.md) mapped GitHub's functions onto acequia primitives; this note upgrades that mapping from "has a primitive home" to **"the node serves it"** — the hub *experience*, not just the transport.
## The hub surface, function by function | GitHub function | How an acequia-git node serves it | Rung | |---|---|---| | **Repo browsing** (file tree, file view) | The working tree is *already* GET-able at the repo's canonical URI (`repo/...`); directory listings via Nephele's `X-Directory-As-JSON`. A single-file **`hub.html`** renders tree + files + syntax highlighting. | 1 | | **README rendering** | Nephele directory listings already render `README.md` (the bead front-door convention covers the repo too). `hub.html` does it richer. | 1 | | **Commit log / history / blame / diffs** | **isomorphic-git in the browser** over the dumb-HTTP face: shallow read-only clone into memory/OPFS, then log/diff/blame are client-side. No server changes — the UI rides the same static store. | 2 | | **Issues** | `<bead>/issues/<NNNN-slug>.md` + `.meta.json` (`{status: open|closed, from, date, labels}`) — stable URIs, listable, anonymously readable; created by token-holders via PUT or routed in from the `uploads/` dock. An issue is a dock message that got a permanent address. | 1 | | **Pull requests (view + review)** | The request-pull envelope (policy default 3) is the PR record; `hub.html` fetches base + fork refs via isomorphic-git and renders the diff for review. **Merge stays a headgate action** — the owning bead's animator merges; the node only pre-flights (applies cleanly? base current?). | 2–3 | | **Releases** | **Signed git tags** (sovereign PS256 = the attestation) + assets staged at stable URIs in the bead's `artifacts/`; a `releases.json` index next to the repo. | 1 | | **Stars / watchers** | Already native: an inbound `names.json` binding or note link **is** a star — polarized links are the charge that drives replication N. Watching = `observe()` on the refs path. | 1–2 | | **Webhooks / notifications** | Paths-as-event-bus: `observe(repo/.git/info/refs)` — a ref change *is* the push event; deliveries land in subscriber beads' `uploads/` docks. | 2 | | **Actions / CI** | The devops file-state machine (Phases 0–5), triggered by ref-change observations. Not this bead's to own — it *invokes* #devops. | 3 | | **Profiles / orgs** | `agent.md`/`agent.json` = profile; the namespace (`guerin/`) = org; the `.agents/` dashboard already renders bead cards. | 1 | | **Search / explore** | `keywords.json` index surfaces + the route registry; the dashboard's PROPFIND sweep extended to flag beads carrying `repo/` faces. | 2 | The striking column is the rung: **most of GitHub is rung 1–2** — static files plus an in-browser git implementation. Only merge execution, CI, and gated smart-push genuinely want the animator.
## `hub.html` — the one artifact most functions share A single-file app (dashboard.html lineage): point it at any bead — `hub.html?bead=<URI>` — and it renders README, file tree, file view, commit log, PR diffs, issues list, releases. Read operations all come from isomorphic-git over the dumb-HTTP face + JSON directory listings; zero server-side compute. Served from acequia-git's own namespace and N-replicated like anything else. **Dogfood rule:** `hub.html`'s source is ecology-owned, self-contained → per the #devops policy it lives in **this bead's own `repo/`**, served by the very mechanism it fronts. acequia-git becomes its own first hub tenant (after the sphere-apps pilot).
## What stays decentralized on purpose - **No global account system** — identity = keys + capability chains; "who can open an issue here" = `writePaths` over the bead's `issues/`. - **No central index** — explore/search composes from per-bead `keywords.json` + the registry mesh; an index is itself just another bead that crawls. - **No platform lock on social signals** — stars are links in the open commons; the graph is GET-able by anyone, owned by no one.
## Queue (not built yet) 1. `git init` this bead's own `repo/`; move `hub.html` development there (dogfood). 2. `hub.html` v0: README + tree + file view (rung 1 only). 3. v1: isomorphic-git log/diff; PR-envelope viewer. 4. `issues/` convention pilot on the sphere-apps bead (first real issue: step-01 verification).