Skip to content

rename: drop nebelhaus — decision 10, §11, and the workshop half - #372

Merged
JulienMartel merged 4 commits into
mainfrom
worktree-compressed-skipping-axolotl
Aug 15, 2026
Merged

rename: drop nebelhaus — decision 10, §11, and the workshop half#372
JulienMartel merged 4 commits into
mainfrom
worktree-compressed-skipping-axolotl

Conversation

@JulienMartel

@JulienMartel JulienMartel commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

What

Decision 10 — the name nebelhaus is dropped. The desktop becomes hacker; every other surviving nebelhaus becomes haus. This PR is the plan of record plus the workshop's own half; the other two are hausfold/haus#364 and hausfold/hausfold.co#47.

It also closes §10, which turned out to be further along than the note claimed.

§11 — the plan

The word has 1,125 hits across the family and three different answers, so §11.0's table is the load-bearing part rather than the step list:

sense becomes why
the desktop hacker it is one of four peers — blank, minimal, everyday — three of which say who they are for, and one of which was a private joke about fog
the layer, still wearing the old coat haus mkNebelhaus, 19 NEBELHAUS_* env vars, four state dirs, share/, activation-script names. A HACKER_FLAKE env var would be nonsense; these were never the desktop's
must not move stays the dead github.com/nebelhaus org (shipped pounce/perch update checks live on its redirects), holt's Go module path, nebelhaus.com, modules/renamed.nix's namespace aliases, org.nebelhaus.* bundle ids, nebelhaus#NNN citations

Two design notes the note carries because they're the difference between a flag day and none:

  • The state move is by SYMLINK. That collapses perch's install-marker contract — written by haus, read by a shipped signed app — from a three-release coordination into no coordination at all. Old binaries resolve through the link.
  • The site already planned for this. worker.js's own comment predicted the desktop losing the name and prescribed the shape: new row, old row stays. The trap it doesn't mention is the alias's pin, which is now written down.

The workshop's own half

  • web/worker.js — the three rows landing on hausfold.co's desktop page re-pointed to /desktops/hacker/. The keys keep the old spelling (a redirect source is a fact about the past); the destinations moved rather than chaining onto hausfold.co's own row, because one hop is what §5.2 paid for.
  • bench — the release audience for haus.
  • AGENTS.md — the terminology table's "nebelhaus bare … stays, forever (§6)" row is struck through and re-pointed at §11. The flake-input row got sharper: §11.2 moves the input to haus, but that name and bench's OVERRIDABLE are one edit, because Nix doesn't hard-fail an override for an unknown input.
  • README.md — the "when can this be turned off" paragraph argued from §6 that the domain outlives the desktop's name. The argument survives the reversal; it's now made without the citation.

§10, closed

Re-measured against the machine and the org rather than the note, and found two of three items already done: bench relocate-haus had run and its shim was retired (workshop#331, 2026-08-12); zero family locks record "repo": "hausfold"; no repo in the org describes itself as nebelhaus. The gate re-runs green.

Verify

cd web && npx vitest run          # 15/15
shellcheck bench                  # clean
bats test/bench.bats              # 75/75

Watch out

  • Merge order: haus#364hausfold.co#47 → this. hausfold.co deploys on push to main and its docs publish flakes calling mkHaus, which doesn't exist on haus main yet. This PR is docs-and-redirects only, so it's safe anywhere, but its web/ destinations assume /desktops/hacker exists — until fix: bench pull also freshens the workshop checkout #47 lands they'd 404, which is why the two should land together.
  • bench's --override-input nebelhaus/… is deliberately unchanged, and ~/.config/nix still names its input nebelhaus. Renaming either alone silently makes bench try build the pinned desktop while reporting your branch. §11.2 flags it as the one edit in the arc that can't be half-done — it's yours, on a 👤 file.
  • The assurance pass on this branch caught one over-claim in §10's gate paragraph (AGENTS.md:48 is prose, not a PR citation, so the six hausfold/hausfold hits are two allowed kinds, not one). Fixed.
  • §11's own gate is not green yet by construction — it wants all three PRs merged, a haus release, and a machine that has activated once. It's written down at the end of §11.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QiRMS2Hcpo5svDKK9hpZa9

JulienMartel and others added 4 commits August 14, 2026 17:15
Re-measured the rename's tail against the machine and the org rather than
against the note, and found §10 further along than it claimed:

- 10.3: `bench relocate-haus` had run (layer at ./haus) AND its compatibility
  shim was retired by workshop#331 on 2026-08-12 — no command, no repo_dir
  fallback, no status nudge, no bats cases survive in bench.
- 10.4: zero family locks still record `"repo": "hausfold"`, and no repo in the
  org still describes itself as nebelhaus. Both bullets closed.
- §10's gate re-runs green; all six `hausfold/hausfold` hits are on the
  allow-list §10.2 wrote.

One rename item survives: ~/.config/nix/flake.nix:7 still names the old slug.
It is one fix with the consumer's lock, not two — a lock's `original` is copied
from the flake ref, so the lock cannot correct itself first.

The night handoff also answers the question asked at the end of the arc in full:
nebelhaus is NOT dropped, and the four live senses each stay for a different
reason (the desktop, the flake input name, the dead org's update-check
redirects, the state paths).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QiRMS2Hcpo5svDKK9hpZa9
The assurance pass caught the enumeration mis-splitting them: AGENTS.md:48 is
not a PR citation, so "every one is on §10.2's allow-list" over-claimed. Three
are historical PR links; three are sentences that quote the old slug in order to
say it's gone — which is a second allowed kind, written after the allow-list was.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QiRMS2Hcpo5svDKK9hpZa9
The desktop becomes `hacker`; everything else still wearing the word becomes
`haus`. Reverses §6's first two paragraphs, struck through in place rather than
deleted — the reasoning there protected the PAGE, not the word, and every bit of
it survives as `/desktops/hacker`.

§11 carries the walkthrough. Its §11.0 table is the load-bearing part: 1,125
hits, three different answers, and most of them "leave it alone" — the dead org
(update checks), holt's Go module path, nebelhaus.com's 301 map, and 110 lines
of option aliases all stay.

Two design notes worth having before the code:

- The site already planned for this. worker.js's own comment predicted the
  desktop losing the name and prescribed the shape: new row, old row stays as an
  alias. The trap is the alias's PIN — re-point it to `hacker` or it 200s at the
  Worker and fails inside bootstrap.
- The state-path move is by SYMLINK, which collapses perch's two-repo marker
  contract from a three-release coordination into none: old binaries resolve
  through the link and keep working.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QiRMS2Hcpo5svDKK9hpZa9
Decision 10 (notes/hausfold-rename.md §11): the desktop is `hacker`.

- web/worker.js: the three rows landing on hausfold.co's desktop page now point
  at /desktops/hacker/. The KEYS keep the old spelling — a redirect source is a
  fact about the past — but the destinations were re-pointed rather than left to
  chain onto hausfold.co's own /desktops/nebelhaus row. One hop is this file's
  whole reason to exist (§5.2); a chain is how it quietly becomes two again.
- bench: the release audience for `haus` is hausfold.co/hacker.sh.
- AGENTS.md: the terminology table's "nebelhaus bare … stays, forever (§6)" row
  is struck and re-pointed at §11, and the flake-input row got sharper rather
  than weaker — §11.2 moves the input to `haus`, but the input name and bench's
  OVERRIDABLE are ONE edit, because Nix doesn't hard-fail an override for an
  unknown input.
- README: the "when this can be turned off" paragraph leaned on §6 to argue the
  domain outlives the desktop's name. The argument survives the reversal intact
  and is now made without it.

Verified: web vitest 15/15, shellcheck bench clean, bats test/bench.bats 75/75.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QiRMS2Hcpo5svDKK9hpZa9
@JulienMartel JulienMartel changed the title notes: §10 closes, and "drop nebelhaus" is the one thing §6 forbids rename: drop nebelhaus — decision 10, §11, and the workshop half Aug 15, 2026
@JulienMartel
JulienMartel merged commit e12c5de into main Aug 15, 2026
6 checks passed
@JulienMartel
JulienMartel deleted the worktree-compressed-skipping-axolotl branch August 15, 2026 10:06
JulienMartel added a commit that referenced this pull request Aug 15, 2026
… the code

Three published nebelhaus.com URLs have been redirecting onto a 404 since
#372 deployed at 10:06Z: /start/what-is-nebelhaus, /start/first-run and
/reference/keybindings all pointed at hausfold.co/desktops/hacker/, which is
the desktop's old path with its new name substituted in. hausfold.co had
retired that tree into the docs hours earlier (hausfold.co#47) — /desktops/
hacker/ is a 404, /desktops/nebelhaus/ is itself a 301 into
/docs/haus/desktops/hacker/, and the #keys fragment the keybindings row
carried does not exist on any page any more (the ids are what-it-turns-on,
first-moves, making-it-yours, where-to-go-next).

So: the two desktop rows land on /docs/haus/desktops/hacker/, keeping the
#first-moves fragment which is real there. Keybindings follows the ruling
hausfold.co already made for the same URL — the keys were a shortened reprint
of the windows room and the port deliberately didn't copy them, so it lands on
the page that has them rather than on a fragment of the desktop's sheet.

The suite stayed green throughout, which is the part worth keeping: it proves
the map is complete and points at hausfold.co, and nothing in it fetches, so a
destination that 404s is invisible to it. Two tests now pin the renamed rows by
hand, and one fails any future row pointing under hausfold.co/desktops/ — that
prefix is either a 404 or the second hop this file exists to avoid.

Separately, README.md and AGENTS.md picked up "new installs scaffold `haus`" in
#372. They don't — haus's bootstrap.sh:567 writes inputs.nebelhaus.url for a
fresh install, so a new machine spells it exactly as this one does. That claim
is the §11.2 trap dressed as progress: believing the input has half-moved is
what leads to finishing it by editing bench's OVERRIDABLE alone, which is the
edit that makes every --override-input silently no-op while reporting success.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkTBtapKcZTCeTqfhRZEJ7
JulienMartel added a commit that referenced this pull request Aug 15, 2026
… the code

Three published nebelhaus.com URLs have been redirecting onto a 404 since
#372 deployed at 10:06Z: /start/what-is-nebelhaus, /start/first-run and
/reference/keybindings all pointed at hausfold.co/desktops/hacker/, which is
the desktop's old path with its new name substituted in. hausfold.co had
retired that tree into the docs hours earlier (hausfold.co#47) — /desktops/
hacker/ is a 404, /desktops/nebelhaus/ is itself a 301 into
/docs/haus/desktops/hacker/, and the #keys fragment the keybindings row
carried does not exist on any page any more (the ids are what-it-turns-on,
first-moves, making-it-yours, where-to-go-next).

So: the two desktop rows land on /docs/haus/desktops/hacker/, keeping the
#first-moves fragment which is real there. Keybindings follows the ruling
hausfold.co already made for the same URL — the keys were a shortened reprint
of the windows room and the port deliberately didn't copy them, so it lands on
the page that has them rather than on a fragment of the desktop's sheet.

The suite stayed green throughout, which is the part worth keeping: it proves
the map is complete and points at hausfold.co, and nothing in it fetches, so a
destination that 404s is invisible to it. Two tests now pin the renamed rows by
hand, and one fails any future row pointing under hausfold.co/desktops/ — that
prefix is either a 404 or the second hop this file exists to avoid.

Separately, README.md and AGENTS.md picked up "new installs scaffold `haus`" in
#372. They don't — haus's bootstrap.sh:567 writes inputs.nebelhaus.url for a
fresh install, so a new machine spells it exactly as this one does. That claim
is the §11.2 trap dressed as progress: believing the input has half-moved is
what leads to finishing it by editing bench's OVERRIDABLE alone, which is the
edit that makes every --override-input silently no-op while reporting success.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkTBtapKcZTCeTqfhRZEJ7
JulienMartel added a commit that referenced this pull request Aug 15, 2026
…01s onto a 404 (#375)

* ci, notes: enumerate the account — four leaked previews, two still serving the ?ref= hole

§5.3 closed with a *look* rather than a step: the Cloudflare dashboard's
Workers ▸ Routes for both zones, "since nothing in either repo enumerates what
is actually deployed". Taking it turned up two things.

It never needed the dashboard. The wrangler OAuth token already on the machine
carries account:read and workers_scripts, so two REST calls list every Worker
and every zone route — a check something can run rather than a thing to
remember.

And the sheet wasn't clean. Four PR-preview Workers leaked from PRs closed
2026-08-11/12, all of them workers_dev=true and publicly reachable. Two predate
the 301 map, so they are copies of the old site Worker: /init.sh answers 200,
and ?ref=<a real 40-hex sha> answers 200 with the bootstrap from that ref —
the fork-network hole §5.3 recorded as closed. Deleting nebelhaus-init closed
the path it was on, not the code; the code lives on in every preview upload of
that era, each with its own hostname.

preview-web.yml's cleanup job is not at fault — both leaks are its trigger
failing to fire, which no pull_request-triggered job can fix. The paths filter
is evaluated against the PR's whole diff, so a PR that touched web/** early and
not finally deploys a preview and never fires `closed` (nebelhaus-pr-321). And
a PR closed in the same operation that deletes its head branch gets no `closed`
run at all (nebelhaus-pr-341).

So ask the other question, from state: preview-sweep.yml lists the account's
Workers daily, asks GitHub whether each <prefix>-pr-<n>'s PR is still open, and
deletes the ones that aren't. Anchored name match, so neither production Worker
can match; workflow_dispatch takes a dry_run. Verified by driving the extracted
job body against the live account in dry-run — it named those four and nothing
else — and shellcheck-clean.

One thing no merge can fix, left 👤 in §5.3: an api.hausfold.co route pointing
at the nebelhaus.com 301 map, declared in no config in either repo, dormant
only because that subdomain has no DNS record.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkTBtapKcZTCeTqfhRZEJ7

* web: the desktop rows 301 onto a 404, and two docs claims that outran the code

Three published nebelhaus.com URLs have been redirecting onto a 404 since
#372 deployed at 10:06Z: /start/what-is-nebelhaus, /start/first-run and
/reference/keybindings all pointed at hausfold.co/desktops/hacker/, which is
the desktop's old path with its new name substituted in. hausfold.co had
retired that tree into the docs hours earlier (hausfold.co#47) — /desktops/
hacker/ is a 404, /desktops/nebelhaus/ is itself a 301 into
/docs/haus/desktops/hacker/, and the #keys fragment the keybindings row
carried does not exist on any page any more (the ids are what-it-turns-on,
first-moves, making-it-yours, where-to-go-next).

So: the two desktop rows land on /docs/haus/desktops/hacker/, keeping the
#first-moves fragment which is real there. Keybindings follows the ruling
hausfold.co already made for the same URL — the keys were a shortened reprint
of the windows room and the port deliberately didn't copy them, so it lands on
the page that has them rather than on a fragment of the desktop's sheet.

The suite stayed green throughout, which is the part worth keeping: it proves
the map is complete and points at hausfold.co, and nothing in it fetches, so a
destination that 404s is invisible to it. Two tests now pin the renamed rows by
hand, and one fails any future row pointing under hausfold.co/desktops/ — that
prefix is either a 404 or the second hop this file exists to avoid.

Separately, README.md and AGENTS.md picked up "new installs scaffold `haus`" in
#372. They don't — haus's bootstrap.sh:567 writes inputs.nebelhaus.url for a
fresh install, so a new machine spells it exactly as this one does. That claim
is the §11.2 trap dressed as progress: believing the input has half-moved is
what leads to finishing it by editing bench's OVERRIDABLE alone, which is the
edit that makes every --override-input silently no-op while reporting success.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkTBtapKcZTCeTqfhRZEJ7

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant