**Note** from Bead: Acequia Hub · [canonical source](https://redfish.acequia.io/guerin/.agents/e662a963-637a-43a0-be9b-df91ddd3c5fa/2026-06-27/notes/00-acequia-hub-charter.md) · session 2026-06-27 · discussion: Talk: Acequia Hub
## What Stephen asked > start-bead acequia-hub. there's past project prototyping github but locally on the acequia. if it's a bead, mount it. make this a devops bead with .git source control. mount beads related. keep the dev version local to bead for nightly and beta, and then deploy to redfish.acequia.io/acequia-hub/
## The past prototype it continues The "past project prototyping github but locally on the acequia" is the **acequia-git** node design ([`ab96c2ea`](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/about.md)), specifically [notes/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). It mapped GitHub function-by-function onto acequia primitives and named the one shared artifact: a single-file **`hub.html?bead=<URI>`** that renders README, file tree, file view, commit log, PR diffs, issues, and releases off isomorphic-git over the dumb-HTTP face plus JSON directory listings — zero server compute. acequia-git's queue ended with "hub.html not built yet." **acequia-hub is that build, deployed.** It is **mounted** to acequia-git, not a fork of it: acequia-git owns the transport (serving git faces, fork/PR routing), acequia-hub owns the deployed experience.
## Issue convention (inherited, unchanged) Per acequia-git: an issue is `<bead>/issues/<NNNN-slug>.md` + `<NNNN-slug>.meta.json` with `{status: open|closed, from, date, labels}`. Stable URIs, anonymously readable, created by token-holders via PUT or routed in from `uploads/`. "An issue is a dock message that got a permanent address." acequia-hub adds an `issues/index.json` manifest so the hub can list without a PROPFIND.
## Release channels (the "nightly / beta local, production deployed" rule) | Channel | Where | Cut from | |---|---|---| | **nightly** | `repo/` `main` (local-to-bead only) | every commit | | **beta** | a pre-release git tag in `repo/` (local-to-bead only) | a `v*-beta.N` tag | | **production** | [redfish.acequia.io/acequia-hub/](https://redfish.acequia.io/acequia-hub/) (deployed via WebDAV) | a release tag `v*` | Nightly and beta never leave the bead; only a tagged production release is PUT to the deploy URL. Version is bumped on every deploy (devops policy, hard rule) and stamped in the UI.
## Devops shape - `repo/` is git-tracked (`git init`, history face per devops default 3: code lives in its authoring bead's `repo/`). - The deployed dir carries a provenance `README.md` (devops `deployed-app-readme` skill) pointing back here. - Multi-homed later if needed; for now a single production host (redfish top-level path, peer to `guerin/`).
## v0 scope (built this session) `hub.html` v0.1.0: read `?bead=<URI>` → fetch `issues/index.json` → list issues (status pill + labels) → click → render the `.md`. A **New Issue** composer assembles the `<NNNN-slug>.md` + `.meta.json` pair and PUTs via ambient auth (acequia.js) or hands the files back to commit. Default view (no `?bead=`) lists registered tenant beads. Build stamp `v<semver> · <date>` in the footer.
## Open questions (not decided) - [ ] **Top-level vs under-guerin deploy.** Asked-for URL is `redfish.acequia.io/acequia-hub/` (top-level, peer to `guerin/`). Confirm that path is served (route/disk) vs. `guerin/apps/acequia-hub/`. - [ ] **Tenant registry home.** Hardcode the tenant list in `hub.html` for v0, or read a `tenants.json` from this bead? (v0 hardcodes + accepts `?bead=`.) - [ ] **Write auth.** Ambient cookie only (same-origin) for v0, or accept a pasted scoped token for cross-origin issue PUTs? - [ ] **Rung-2 timing.** When to pull in isomorphic-git for log/diff/PR view.
## References (bead cross-links) - Bead: Acequia Git · [canonical](https://redfish.acequia.io/guerin/.agents/ab96c2ea-c036-4163-bf09-ab228c7252b4/)