Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ are independent git repos.
> | spelling | what it is | this rename |
> |---|---|---|
> | `haus.<option>` | the option namespace | ✅ **already renamed** (nebelhaus#261). `nebelhaus.*` still evaluates via `modules/renamed.nix`, with a warning — never write it. Options that later moved *within* `haus.*` (the `claude` room → `agents`, 2026-08-11) are aliased in `modules/moved.nix` instead; same warning, different file, and that one has no deletion condition. |
> | **nebelhaus** bare | one **desktop** built on `haus` | **stays**, forever (§6) |
> | **nebelhaus** bare | ~~one **desktop** built on `haus`~~ | 🔄 **renamed to `hacker`, 2026-08-14** (§11, decision 10) — this row said "**stays**, forever (§6)" and §11 is the reversal. A bare `nebelhaus` in prose now means the desktop *under its old name*, and belongs in a sentence about the past or nowhere. |
> | `github.com/nebelhaus/*`, `GH_ORG` | the org and its repos | ✅ **already renamed** — every *family* repo is `github.com/hausfold/*` (§3, 2026-08-09). The archived Messages client stayed behind (§3.4), and the dead org is kept alive forever regardless: shipped copies of pounce and perch hit `api.github.com/repos/nebelhaus/<app>` for their update check and only a live org redirects them. |
> | `--override-input nebelhaus/…` in `bench`, `nebelhaus.url` | the consumer's flake **input name** | **not renamed** — it names the desktop, not the org (§3.3's flake-input-paths box). Nix doesn't hard-fail an override for an unknown input, so renaming these makes `bench try` build the pinned desktop while reporting your branch. Whether the consumer's own input gets renamed is a still-open 👤 call on a 👤 file. |
> | `--override-input nebelhaus/…` in `bench`, `nebelhaus.url` | the consumer's flake **input name** | **still not renamed here**, and the reason got sharper rather than weaker. §11.2 moves it to `haus` — new installs scaffold that already — but the input name and `bench`'s `OVERRIDABLE` are ONE edit: Nix doesn't hard-fail an override for an unknown input, so changing either alone makes `bench try` build the pinned desktop while reporting your branch. It is a 👤 call on a 👤 file (§3.3's flake-input-paths box), and `~/.config/nix` still says `nebelhaus`. |
> | `nebelhaus.com` | the domain | **§5**, with the 301s |
>
> **And since 2026-08-10, `haus` carries five senses of its own** (decision 8):
Expand Down Expand Up @@ -74,13 +74,13 @@ an `@AGENTS.md` import — put rules in the former, never the latter).
| colors / palette / how a tool is themed | `./nebelung` |
| the pounce app (UI, ranking) or a generic command script | `./pounce` |
| the perch notch file shelf (UI, staging, drag/drop) | `./perch` |
| the rice: macOS defaults, tiling (prowl), bar (sill), shell (hearth), Touch ID (collar), pounce wiring | `./haus` — the repo that holds **`haus`**, the nix-darwin layer (`hausfold/haus`; the repo is named for the layer, the org is what's in front of the slash — decision 8, applied to the slug by §10). **The directory was `./nebelhaus` until 2026-08-09 and `./hausfold` until 2026-08-11**; each time the repo moved, the checkout followed. The *rice* is still called nebelhaus (§6) — the directory is named for its repo, not for the rice. |
| the desktop: macOS defaults, tiling (prowl), bar (sill), shell (hearth), Touch ID (collar), pounce wiring | `./haus` — the repo that holds **`haus`**, the nix-darwin layer (`hausfold/haus`; the repo is named for the layer, the org is what's in front of the slash — decision 8, applied to the slug by §10). **The directory was `./nebelhaus` until 2026-08-09 and `./hausfold` until 2026-08-11**; each time the repo moved, the checkout followed. The desktop it ships is **`hacker`** — renamed from `nebelhaus` on 2026-08-14 (§11); the directory is named for its repo, not for the desktop it carries. |
| the org's GitHub front page | `./org-profile` — the checkout of the `hausfold/.github` repo (`bench clone` maps the alias `org-profile` to it, which is why the dir isn't named `.github`; this repo's own `./.github` is the workshop's CI) |
| the **trill** notification compositor (quiet banners, rules, `trill` CLI) | `./trill` — its own repo now ([hausfold/trill](https://github.com/hausfold/trill)), ejected from the incubator 2026-08-09. Called **flick** until 2026-08-08. **Deliberately not a family repo**: it is not in `bench`'s `FAMILY` and carries no lock edge (§9 of `notes/hausfold-rename.md` — that name must never appear there), so `bench status`/`ship` don't see it. It IS in `DOCS_REPOS`, `bench clone` and `bench pull` (like `hausfold.co`): docs coverage and lock coverage are different lists, and a repo the daily sweep can't open is one it reports clean forever. The rice will consume it as a leaf overlay, which is not the same thing as joining the ripple chain. |
| holt — the worktree-lifecycle substrate (a Go rewrite of the rice's old bash `wt.sh`) | `./holt` — its own repo now ([hausfold/holt](https://github.com/hausfold/holt)), ejected from the incubator 2026-08-03 with all 79 acceptance tests green. The rice takes it as a flake input and ships it on PATH; ⌘A runs `holt new` ([nebelhaus#200](https://github.com/hausfold/hausfold/pull/200)) and the Claude Code `WorktreeCreate`/`WorktreeRemove` hooks in `~/.claude/settings.json` are repointed at `holt hook create` / `holt hook remove`, so **holt is the live path end to end**. `wt.sh` has since been retired entirely ([nebelhaus#245](https://github.com/hausfold/hausfold/pull/245)) — there is no fallback to roll back to. |
| this machine's apps / identity / secrets | `~/.config/nix` (not in this dir) |
| the cross-repo workflow itself (`bench`, this README) | here |
| **the install one-liner** — the URL, which desktop it resolves, the ref pinning | `./hausfold.co`'s `worker.js`, since 2026-08-14, and **only there now**. It is `curl -fsSL https://hausfold.co/nebelhaus.sh \| bash`; `nebelhaus.com/init.sh` is a 301 onto it ([§5.2](notes/hausfold-rename.md#52--the-move--and-the-salvage-list)), so there is no second copy of the logic to keep in step — verified on the zone 2026-08-14, after an orphaned route from the installer's first Worker turned out to have been shadowing that path since 2026-07-08 ([§5.3](notes/hausfold-rename.md#53--dns--verification)). A change to the *script* belongs in `./haus`'s `bootstrap.sh` and to neither site |
| **the install one-liner** — the URL, which desktop it resolves, the ref pinning | `./hausfold.co`'s `worker.js`, since 2026-08-14, and **only there now**. It is `curl -fsSL https://hausfold.co/hacker.sh \| bash` (and `/nebelhaus.sh`, the desktop's pre-2026-08-14 name, keeps its own row forever); `nebelhaus.com/init.sh` is a 301 onto it ([§5.2](notes/hausfold-rename.md#52--the-move--and-the-salvage-list)), so there is no second copy of the logic to keep in step — verified on the zone 2026-08-14, after an orphaned route from the installer's first Worker turned out to have been shadowing that path since 2026-07-08 ([§5.3](notes/hausfold-rename.md#53--dns--verification)). A change to the *script* belongs in `./haus`'s `bootstrap.sh` and to neither site |
| `nebelhaus.com` — any URL on it | `./web`, which is the **301 map** to hausfold.co and nothing else since 2026-08-14. One `worker.js`, one row per page the old site published, no build. Adding a redirect is the only kind of change it takes; the pages themselves are `./hausfold.co`'s. ⚠️ **The Astro/Starlight tree that used to be here is deleted** — don't go looking for a docs page in this repo, and don't re-add one |
| the hausfold.co site | `./hausfold.co` — **its own repo**, [hausfold/hausfold.co](https://github.com/hausfold/hausfold.co), **public**. ⚠️ **Note the `.co`, and keep the name spelled in full.** Between 2026-08-09 and 2026-08-11 the layer sat at `./hausfold`, one dot away, and site work sent to the short name silently edited the desktop instead. §10 moved the layer to `./haus`, so the two no longer collide — the rule survives its trap. Split out of here 2026-08-06 as the private `hausfold/website`, then recreated public on 2026-08-08 because that repo's history couldn't be made safe ([§5.1](notes/hausfold-rename.md#51--decided-2026-08-08--one-site-repo-hausfoldhausfoldco)); `hausfold/website` is archived and stays private. Hand-written HTML on a Cloudflare Worker, deployed by CI on push to its `main`. `bench clone` fetches it; it is **not** a flake input and not part of `FAMILY`. |
| the hausfold **name register** — a handle, an account, a claimed namespace | [hausfold/ops](https://github.com/hausfold/ops), **private**, `PRESENCE.md`. Moved out of the site repo 2026-08-08 so the site repo could go public. ⚠️ **Never copy it, or a summary of it, into this repo** — the workshop is public, and **which names are *free* is the sensitive half**, because a list of what nobody has claimed hands it to whoever reads it first. That cuts both ways: *trademark* findings are public register records and are fine here (`notes/hausfold-rename.md` §0.2); *availability* findings are not, whichever name they're about. `ops` is in no `bench` list — `gh repo clone hausfold/ops ~/code/workshop/ops` by hand when you need it; the dir is `.gitignore`d so the clone doesn't dirty this tree. |
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ downstream.** A one-hex-digit colour tweak in nebelung reaches your Mac only
after three lock files move behind it.

Never walk that by hand. `./bench ship` does it in order; `./bench status`
names every pin that's fallen behind. (Those are repo names — in
`~/.config/nix`, the layer's flake input is still spelled `nebelhaus`.)
names every pin that's fallen behind. (Those are repo names. The consumer's flake INPUT is its own name for the
same thing — `~/.config/nix` still spells it `nebelhaus`, and new installs
scaffold `haus`; both work, and renaming it means renaming `bench`'s
`--override-input` in the same edit or every override silently stops applying.)

## start

Expand Down Expand Up @@ -60,7 +62,7 @@ something works, and `main` never holds code nobody has felt.

Five repos share the lock chain above:

- 🏠 [**haus**](https://github.com/hausfold/haus) — the whole desktop, one Nix flake: the nix-darwin layer, plus **nebelhaus**, the desktop built on it. **start here.**
- 🏠 [**haus**](https://github.com/hausfold/haus) — the whole desktop, one Nix flake: the nix-darwin layer, plus **hacker**, the desktop built on it. **start here.**
- 🐾 [**pounce**](https://github.com/hausfold/pounce) — a keyboard-first command palette. every command is a file.
- 🪺 [**perch**](https://github.com/hausfold/perch) — a file shelf that grows out of the notch.
- 🌫️ [**nebelung**](https://github.com/hausfold/nebelung) — the silver-mist palette underneath all of it.
Expand Down
4 changes: 2 additions & 2 deletions bench
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ ensure_perch_dev_app() {
}

# Release bookkeeping. Releases are what users actually consume — pounce via
# the Homebrew tap, the desktop via hausfold.co/nebelhaus.sh (which serves the
# the Homebrew tap, the desktop via hausfold.co/hacker.sh (which serves the
# LATEST RELEASE's bootstrap, not main) — so a tag that falls behind main is
# every bit as stale as a lock edge, just invisible without this.
latest_tag() { # latest_tag <repo> — newest v* tag by version order, "" if none
Expand Down Expand Up @@ -646,7 +646,7 @@ cmd_status() {
case "$name" in
pounce) audience="brew installs" ;;
perch) audience="brew + the rice's flake pin" ;;
haus) audience="hausfold.co/nebelhaus.sh (the desktop)" ;;
haus) audience="hausfold.co/hacker.sh (the desktop)" ;;
# holt is the only one whose release lands OUTSIDE our own infrastructure:
# five SDKs on npm/PyPI/crates/SwiftPM/the Go proxy. The rice pins holt's
# main, so this machine sees a holt commit via the lock edge above — but
Expand Down
Loading
Loading