Startup commands: how office, project-reset and board decide the machine and the session
Host resolution order, the local-machine check, the address table, when the host is remembered, why --host appears twice when starting from scratch, the three rebuild levels, and the six traps that produced every startup fault so far.
This commit is contained in:
@@ -794,3 +794,107 @@ Committed as `d2cf643` and pushed to Gitea.
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Paperclip Harness: docs published to Outline, Obsidian note updated, repo pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-link-2026-11-11-21-45-49|Rich discovery: link. 2026-11-11 21:45:49]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|link.]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-11 23:32:18)
|
||||
|
||||
## Rich discovery update (2026-11-11 23:32:18)
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Source paths observed
|
||||
|
||||
- `home/sam/paseo/projects/paperclip-harness/bin/office`
|
||||
- `home/sam/paseo/projects/email_agent`
|
||||
- `nix/store/lslq5ihfblb905y8jazs15isad5zh97z-source/home.nix`
|
||||
- `HOME/.cargo/bin`
|
||||
- `nix/store/34mc2s7mv2gp2zahqi25ssqj2ajcyakb-zstd-1.5.7-dev`
|
||||
- `nix/store/b136dy5k1l4bv6b7vcb7asqdbriwir05-zstd-1.5.7-man`
|
||||
- `nix/store/mqkxl25hjsc6qjalgrv804jys7945nyp-zvbi-0.2.46`
|
||||
- `nix/store/s2px6whypbb9s66jhr8arx7z94rxvkgq-zvbi-0.2.46`
|
||||
- `nix/store/9c0jqdv2wbm7nnhqxc19kppjc9pfpkfg-zxing-cpp-3.1.1`
|
||||
- `NixOS/nixpkgs/f4a03c008967841f2a0b3cb7c436fc6fc31671f6`
|
||||
- `tmp/dryrun-alpha/.harness/harness.toml`
|
||||
- `gitea.lab.audasmedia.com.au/sam/paperclip-harness.git`
|
||||
- `paseo/projects/paperclip-harness`
|
||||
- `paseo/projects/email_agent`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 84%
|
||||
- Reason: Update component/repository context with detailed discovered structure and configuration
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-11 23:32:18 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|home-manager zsh option rename: initExtra → initContent]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Fixed --dry session-creation bug in bin/office; committed 9631cdd and pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-sessions-across-hosts-initextra-initcontent-|Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-11-23-32-18|Rich discovery: home 2026-11-11 23:32:18]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|home]]
|
||||
|
||||
@@ -979,3 +979,92 @@ Follow-up flagged but not performed: bumping Pi `pi-coding-agent` Nix package on
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Paperclip Harness: docs published to Outline, Obsidian note updated, repo pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-link-2026-11-11-21-45-49|Rich discovery: link. 2026-11-11 21:45:49]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|link.]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-11 23:32:18)
|
||||
|
||||
In the paperclip-harness repo (`gitea.lab.audasmedia.com.au/sam/paperclip-harness`), fixed a bug where `bin/office --dry` still created a TUIOS session (`dryrun-alpha`); dry run now prints intended actions (create project, write `<folder>/.harness/harness.toml`, create/reuse session and build eight panes) and writes nothing. Added `--remote <host>` to run office over ssh on another machine (dry-ran on `.13`; cross-host use needs ssh key trust). `bin/office` adopt behavior: writes only `<folder>/.harness/harness.toml`, never overwrites existing folders, adopts (never creates) an existing Paperclip project record, and remembers the machine so the flag is stated once. Committed as `9631cdd` (range 08a4b4e..9631cdd) on `main` and pushed to gitea.
|
||||
|
||||
## Detailed deliverable from completed turn
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 85%
|
||||
- Reason: Completed code fix with commit hash and behavioral contract for future work.; enriched with final-answer detail because persistence should be reusable
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-11 23:32:18 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|home-manager zsh option rename: initExtra → initContent]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Fixed --dry session-creation bug in bin/office; committed 9631cdd and pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-sessions-across-hosts-initextra-initcontent-|Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-11-23-32-18|Rich discovery: home 2026-11-11 23:32:18]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|home]]
|
||||
|
||||
@@ -4032,3 +4032,273 @@ Committed as `08a4b4e` and pushed. Which of the three for Pi, and do you want me
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-harness-new-existing-dry-runs-clean-test-plan-pi-v|paperclip-harness: --new/--existing dry runs, clean test plan, Pi version dry-run on .13/.27]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-root-2026-11-11-22-37-01|Rich discovery: root 2026-11-11 22:37:01]]
|
||||
- context: [[packs/paperclip-harness/20-context/paperclip-harness|root]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-11 23:32:18)
|
||||
|
||||
When bumping nixpkgs/home-manager past the version in use (lock 2026-07-29 → 2026-11-07), the assertion fails: "The option definition `programs.zsh.initExtra' in `.../home.nix' no longer has any effect; please remove it. Use `programs.zsh.initContent` instead." The zsh block in /etc/nixos/home.nix (imported by flake.nix as `./home.nix`) at ~line 17 uses `initExtra = ''...''` containing PATH export, optional `~/.secrets` source, and p10k instant-prompt hook. Rename `initExtra` to `initContent` to fix. Confirmed 0 remaining occurrences after edit in dry-run copy.
|
||||
|
||||
## Detailed observations from completed turn
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 90%
|
||||
- Reason: Concrete, recurring upgrade gotcha with exact option and file location.; enriched with final-answer detail because persistence should be reusable
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-11 23:32:18)
|
||||
|
||||
After bumping flake.lock (nixpkgs, home-manager) and renaming zsh initExtra→initContent:
|
||||
- `.13` (nixos-desktop): dry-run build PASSES; Pi 1.5.0. Ready to switch.
|
||||
- `.27`: dry-run build FAILS with an eval error inside the new nixpkgs — `head` builtin called at nixpkgs lib/attrsets.nix:1711 (if length values == 1 || pred here (elemAt values 1) (head values)). Needs investigation before upgrading.
|
||||
- `.51`: lock not yet bumped; still on Pi 0.87.1. Would need the bump to reach 1.5.0.
|
||||
All tests done in `/tmp/nixos-dryrun` copies; no real system or `/etc/nixos` lock modified.
|
||||
|
||||
## Detailed observations from completed turn
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 85%
|
||||
- Reason: Per-host status and a specific eval-error signature are durable upgrade context.; enriched with final-answer detail because persistence should be reusable
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Update (2026-11-11 23:32:18)
|
||||
|
||||
## Structural/configuration observations (2026-11-11 23:32:18)
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Source paths observed
|
||||
|
||||
- `home/sam/paseo/projects/paperclip-harness/bin/office`
|
||||
- `home/sam/paseo/projects/email_agent`
|
||||
- `nix/store/lslq5ihfblb905y8jazs15isad5zh97z-source/home.nix`
|
||||
- `HOME/.cargo/bin`
|
||||
- `nix/store/34mc2s7mv2gp2zahqi25ssqj2ajcyakb-zstd-1.5.7-dev`
|
||||
- `nix/store/b136dy5k1l4bv6b7vcb7asqdbriwir05-zstd-1.5.7-man`
|
||||
- `nix/store/mqkxl25hjsc6qjalgrv804jys7945nyp-zvbi-0.2.46`
|
||||
- `nix/store/s2px6whypbb9s66jhr8arx7z94rxvkgq-zvbi-0.2.46`
|
||||
- `nix/store/9c0jqdv2wbm7nnhqxc19kppjc9pfpkfg-zxing-cpp-3.1.1`
|
||||
- `NixOS/nixpkgs/f4a03c008967841f2a0b3cb7c436fc6fc31671f6`
|
||||
- `tmp/dryrun-alpha/.harness/harness.toml`
|
||||
- `gitea.lab.audasmedia.com.au/sam/paperclip-harness.git`
|
||||
- `paseo/projects/paperclip-harness`
|
||||
- `paseo/projects/email_agent`
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 82%
|
||||
- Reason: Captured factual repo structure/configuration patterns from rich discovery
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-11 23:32:18 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|home-manager zsh option rename: initExtra → initContent]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Fixed --dry session-creation bug in bin/office; committed 9631cdd and pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-sessions-across-hosts-initextra-initcontent-|Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-11-23-32-18|Rich discovery: home 2026-11-11 23:32:18]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|home]]
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
type: session
|
||||
id: session.paperclip-harness.paperclip-tuios-sessions-across-hosts-initextra-initcontent-
|
||||
title: Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs
|
||||
status: active
|
||||
source_of_truth: false
|
||||
freshness: current
|
||||
last_reviewed: 2026-11-11
|
||||
tags:
|
||||
- pack/paperclip-harness
|
||||
- agent-memory/session
|
||||
- paperclip-harness
|
||||
- tuios
|
||||
- nixos
|
||||
- sessions
|
||||
- home-manager
|
||||
- dry-run
|
||||
---
|
||||
|
||||
# Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs
|
||||
|
||||
Sanitized discovery snapshot from the paperclip-harness turn.
|
||||
|
||||
Sessions model (TUIOS): a session lives on a daemon which runs on one machine; the session's working directory is where its panes run, not where the session is started. Created sessions tonight: `fresh-project-2026-11-11` (from `bin/office` adopting a test folder; killed during cleanup), `dryrun-alpha` (accidentally created by a bug where `--dry` still created the session; fixed, then killed), `harness-repo` (not created yet). The working session `paperclip-harness` was never restarted; `R` rebuilds panes only.
|
||||
|
||||
`email_agent` adoption recipe:
|
||||
- Folder `/home/sam/paseo/projects/email_agent` is on host `.13` (nixos-desktop).
|
||||
- Paperclip project "Email Agent" exists (id prefix `b4edee39-…`), workspace `local_path` at that folder.
|
||||
- Session must live on `.13`'s daemon because panes run there.
|
||||
- From `.27`: either (A) `tuios new --host nixos-desktop email-agent`, then in a pane: `cd ~/paseo/projects/paperclip-harness && bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch` (`--no-switch` prevents a second session and client move); or (B) `bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent` (requires ssh key trust; self-ssh from `.13` failed auth). Final step needs the user: TUIOS session switcher or `tuios attach --host nixos-desktop email-agent`. Daemon correctly refuses `switch-session` from a pane.
|
||||
|
||||
NixOS dry-run (Test 3) in `/tmp/nixos-dryrun` copies; no system or `/etc/nixos` lock changed:
|
||||
- `.13`: lock 2026-07-29 → 2026-11-07, `programs.zsh.initExtra` → `initContent` in home.nix; dry-run build passes; Pi 1.5.0. Ready to rebuild: `nix flake update nixpkgs home-manager` then `sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop`.
|
||||
- `.27`: lock bumped, initContent applied, dry-run build FAILS with eval error inside new nixpkgs.
|
||||
- `.51`: lock not yet bumped; Pi 0.87.1 today.
|
||||
|
||||
The home.nix zsh block lives at `/nix/store/...-source/home.nix` (source `/etc/nixos/home.nix`), imported via `./home.nix` in flake.nix.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 85%
|
||||
- Reason: Rich cross-host discovery snapshot with concrete recipes and per-host status.
|
||||
|
||||
## Related
|
||||
|
||||
- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]]
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-11 23:32:18 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|home-manager zsh option rename: initExtra → initContent]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Fixed --dry session-creation bug in bin/office; committed 9631cdd and pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-sessions-across-hosts-initextra-initcontent-|Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-11-23-32-18|Rich discovery: home 2026-11-11 23:32:18]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|home]]
|
||||
@@ -0,0 +1,123 @@
|
||||
---
|
||||
type: session
|
||||
id: session.paperclip-harness.rich-discovery-home-2026-11-11-23-32-18
|
||||
title: Rich discovery: home 2026-11-11 23:32:18
|
||||
status: active
|
||||
source_of_truth: false
|
||||
freshness: current
|
||||
last_reviewed: 2026-11-11
|
||||
tags:
|
||||
- pack/paperclip-harness
|
||||
- agent-memory/session
|
||||
- autolearn
|
||||
- rich-discovery
|
||||
- repo/home
|
||||
---
|
||||
|
||||
# Rich discovery: home 2026-11-11 23:32:18
|
||||
|
||||
Sanitized rich discovery snapshot captured automatically from the completed turn.
|
||||
|
||||
|
||||
## Source paths observed
|
||||
|
||||
- `home/sam/paseo/projects/paperclip-harness/bin/office`
|
||||
- `home/sam/paseo/projects/email_agent`
|
||||
- `nix/store/lslq5ihfblb905y8jazs15isad5zh97z-source/home.nix`
|
||||
- `HOME/.cargo/bin`
|
||||
- `nix/store/34mc2s7mv2gp2zahqi25ssqj2ajcyakb-zstd-1.5.7-dev`
|
||||
- `nix/store/b136dy5k1l4bv6b7vcb7asqdbriwir05-zstd-1.5.7-man`
|
||||
- `nix/store/mqkxl25hjsc6qjalgrv804jys7945nyp-zvbi-0.2.46`
|
||||
- `nix/store/s2px6whypbb9s66jhr8arx7z94rxvkgq-zvbi-0.2.46`
|
||||
- `nix/store/9c0jqdv2wbm7nnhqxc19kppjc9pfpkfg-zxing-cpp-3.1.1`
|
||||
- `NixOS/nixpkgs/f4a03c008967841f2a0b3cb7c436fc6fc31671f6`
|
||||
- `tmp/dryrun-alpha/.harness/harness.toml`
|
||||
- `gitea.lab.audasmedia.com.au/sam/paperclip-harness.git`
|
||||
- `paseo/projects/paperclip-harness`
|
||||
- `paseo/projects/email_agent`
|
||||
|
||||
## Final answer snapshot
|
||||
|
||||
## What I did with sessions, plainly
|
||||
|
||||
A **session lives on a daemon, and a daemon runs on one machine**. A session is not "started in a directory" — the directory is where its *panes* run. That is the source of the confusion.
|
||||
|
||||
Tonight I created three sessions, none of them by restarting anything:
|
||||
|
||||
- `fresh-project-2026-11-11` — from `bin/office` adopting a test folder. I killed it during cleanup.
|
||||
- `dryrun-alpha` — created by a bug: `--dry` still created the session. Fixed, then killed.
|
||||
- `harness-repo` — not created yet; that is Test 2, which you have not run.
|
||||
|
||||
Your working session `paperclip-harness` was never restarted. `R` rebuilds its panes; it does not touch the sessions list.
|
||||
|
||||
**For your `email_agent` case**, the chain is:
|
||||
|
||||
1. The folder `/home/sam/paseo/projects/email_agent` is on `.13`.
|
||||
2. The Paperclip project exists: **Email Agent**, id `b4edee39-…`, workspace `local_path` at that folder.
|
||||
3. A session must live on `.13`'s daemon, because the panes run there.
|
||||
|
||||
From `.27`, the two ways:
|
||||
|
||||
**A — create the session from `.27`, then adopt on `.13`:**
|
||||
|
||||
```sh
|
||||
# on .27, creates the session on .13's daemon and attaches you
|
||||
tuios new --host nixos-desktop email-agent
|
||||
|
||||
# then, in a pane of that session (which runs on .13):
|
||||
cd ~/paseo/projects/paperclip-harness
|
||||
bin/office ~/paseo/projects/email_agent --project "Email Agent" --session email-agent --no-switch
|
||||
```
|
||||
|
||||
`--no-switch` matters: it stops `office` from trying to create a second session, and it does not try to move your client.
|
||||
|
||||
**B — one command from `.27`, if ssh reaches `.13`:**
|
||||
|
||||
```sh
|
||||
bin/office --remote 192.168.20.13 /home/sam/paseo/projects/email_agent --project "Email Agent" --session email-agent
|
||||
```
|
||||
|
||||
`--remote` runs `office` on the other machine over ssh, so the session and its panes are created there. I added it tonight and it dry-ran on `.13`; from `.27` it needs your ssh key to be accepted (the attempt I made from `.13` to itself failed on ssh auth, which is expected for a self-connection).
|
||||
|
||||
Either way the last step is yours: TUIOS's session switcher, or `tuios attach --host nixos-desktop email-agent`. A program cannot move your client — the daemon refuses `switch-session` from a pane, and that refusal is correct.
|
||||
|
||||
## Test 3 — dry runs
|
||||
|
||||
Two changes are needed together: bump the lock, and rename the one home-manager option.
|
||||
|
||||
| | lock bumped | `initExtra` → `initContent` | dry-run build | Pi |
|
||||
|---|---|---|---|---|
|
||||
| `.13` | 2026-07-29 → 2026-11-07 | applied | **passes** | **1.5.0** |
|
||||
| `.27` | same | applied | **fails**, eval error inside the new nixpkgs | 1.5.0 |
|
||||
| `.51` | not yet done | not checked | — | 0.87.1 today |
|
||||
|
||||
So `.13` is ready to rebuild; `.27` needs its eval error looked at before it can go anywhere; `.51` would also need the bump to reach the same version. All of this was done in `/tmp/nixos-dryrun` copies — no system was touched and no lock was changed in `/etc/nixos`.
|
||||
|
||||
The `.13` rebuild, when you want it:
|
||||
|
||||
```sh
|
||||
# in /etc/nixos: nix flake update nixpkgs home-manager
|
||||
# then in home.nix: initExtra = -> initContent =
|
||||
sudo nixos-rebuild switch --flake /etc/nixos#nixos-desktop
|
||||
```
|
||||
|
||||
I can apply those two edits to `/etc/nixos` on `.13` now so the rebuild is one command, if you want. For `.27` I would rather find the eval error first — do you want me to chase it, or leave `.13` aligned and the other two where they are for now?
|
||||
|
||||
Committed as `9631cdd` and pushed.
|
||||
|
||||
## Evidence
|
||||
|
||||
- Confidence: 86%
|
||||
- Reason: Preserve full sanitized discovery detail from a rich investigation turn
|
||||
|
||||
## Related
|
||||
|
||||
- [[packs/paperclip-harness/00-system/pi-agent/memory-manifest|Memory Manifest]]
|
||||
|
||||
## Related learned memories <!-- same-turn-2026-11-11 23:32:18 -->
|
||||
|
||||
- observation: [[packs/paperclip-harness/60-observations/tmp-repository-structure-and-configuration-patterns|home-manager zsh option rename: initExtra → initContent]]
|
||||
- action: [[packs/paperclip-harness/40-actions/2026-11-10-wrote-docs-ui-layout-md-and-three-live-layout-mockups|Fixed --dry session-creation bug in bin/office; committed 9631cdd and pushed]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/paperclip-tuios-sessions-across-hosts-initextra-initcontent-|Paperclip/TUIOS sessions across hosts, initExtra→initContent fix, and dry-runs]]
|
||||
- session: [[packs/paperclip-harness/80-sessions/rich-discovery-home-2026-11-11-23-32-18|Rich discovery: home 2026-11-11 23:32:18]]
|
||||
- context: [[packs/paperclip-harness/20-context/home|home]]
|
||||
@@ -87,6 +87,10 @@ Do not start the Go program until that passes.
|
||||
|
||||
## Operating rules
|
||||
|
||||
`docs/STARTUP-COMMANDS.md` explains how a project is opened: how the machine, the session and
|
||||
the screens are chosen, why `--host` is sometimes stated twice, and the traps (ssh to
|
||||
yourself, colour codes in names, workspace numbers, pages with no permanent pane).
|
||||
|
||||
`docs/OPERATING-RULES.md` is not optional reading. It has nine rules: the project folder
|
||||
convention, how a task is judged finished (a command agreed beforehand), approvals being
|
||||
content-bound, untrusted text being data, how secrets are handled, `ocr` review and
|
||||
|
||||
@@ -13,6 +13,7 @@ it is a pointer and should be deleted or replaced.
|
||||
| `CHECKLIST.md` | project root | the next session, step by step, with tick boxes |
|
||||
| `docs/OPERATING-RULES.md` | this project | the nine rules: project folder, how work is judged, approvals, untrusted text, secrets, review and merge, one project per machine, cost, existing commands |
|
||||
| `docs/TUIOS-RUNBOOK.md` | this project | how TUIOS works, the three machines, how to start a session, how to drive panes |
|
||||
| `docs/STARTUP-COMMANDS.md` | this project | how `office`, `project-reset` and `board` decide the machine, the session and the screens, and the traps behind each rule |
|
||||
| `docs/MOUSE-1-NOTES.md` | this project | the decision model: how to call it, the cold start, and the four places it helps and the five it must not be used |
|
||||
| `docs/PLAN.md` | this project | the plan: four screens, five milestones, who owns what |
|
||||
| `docs/ENVIRONMENT-FACTS.md` | this project | ids, installed tools, the unproven heartbeat step |
|
||||
|
||||
117
docs/STARTUP-COMMANDS.md
Normal file
117
docs/STARTUP-COMMANDS.md
Normal file
@@ -0,0 +1,117 @@
|
||||
# The startup commands: how the system is opened, and why they look like this
|
||||
|
||||
The previous attempt produced four commands. They work. This explains what each does, the
|
||||
decisions behind them, and the traps — so a new session does not redesign them from scratch.
|
||||
|
||||
## The four commands
|
||||
|
||||
```
|
||||
office <folder> open a project on this machine
|
||||
office <folder> --host nixos-desktop open a project that lives on another machine
|
||||
project-reset <folder> start a project again from nothing
|
||||
board create any missing screen in the current session
|
||||
```
|
||||
|
||||
They live in `~/paseo/harness/bin` and are installed as small wrappers in `~/.local/bin`,
|
||||
so they work from any directory. They are **wrappers, not symlinks**: a symlink made the
|
||||
scripts think they lived in `~/.local/bin`, which broke every sibling command they call.
|
||||
|
||||
## What `office` decides, in order
|
||||
|
||||
1. **The folder.** Made absolute, `~` expanded, created if missing. Everything else hangs
|
||||
off this.
|
||||
2. **The session name.** `--session` if given, otherwise the folder's own name. One project,
|
||||
one session. Not one session with many projects.
|
||||
3. **Which machine.** In this order:
|
||||
- `--host NAME` if given;
|
||||
- otherwise the host remembered in `<folder>/.harness/host`;
|
||||
- otherwise this machine.
|
||||
4. **Is that machine this one?** If the name resolves to this machine's hostname or one of
|
||||
its own addresses, it runs **locally** and says `host: nixos-desktop (this machine)`.
|
||||
This check exists because the first version tried to `ssh` to the machine it was already
|
||||
running on, which is refused, and looked like a login problem.
|
||||
5. **If it really is another machine**, it tests the login first (`ssh -o BatchMode=yes
|
||||
<address> true`) and, only if that works, runs the same command there, then prints the
|
||||
attach lines for both a graphical and a terminal client.
|
||||
|
||||
Host names map to addresses that ssh can actually reach:
|
||||
|
||||
| Name you type | Address used |
|
||||
|---|---|
|
||||
| `nixos-desktop`, `.13` | `192.168.20.13` |
|
||||
| `sam-4screen-desktop`, `.27` | `192.168.20.27` |
|
||||
| `sam-thinkpad`, `.51` | `192.168.20.51` |
|
||||
|
||||
The first version mapped names to the literal strings `.13`, `.27`, `.51`, which ssh cannot
|
||||
resolve. That is why `office` used to fail with "Could not resolve hostname .13".
|
||||
|
||||
**The host is only remembered when it is genuinely remote.** A local project never gets a
|
||||
`.harness/host` file, because a stale "remote" entry is how a project starts rebuilding
|
||||
itself on the wrong machine.
|
||||
|
||||
## The rule that matters for the person
|
||||
|
||||
> The session and the folder live on the same machine.
|
||||
> If you are typing inside the session, on the machine that owns the folder, you type
|
||||
> `office <folder>` and nothing else.
|
||||
|
||||
`--host` exists for one case only: the folder is on a different machine from the one your
|
||||
shell is on. It is stated once, then remembered.
|
||||
|
||||
## Why `--host` is stated twice when starting from scratch
|
||||
|
||||
Because two separate things are being created, by two different tools:
|
||||
|
||||
1. `tuios new --host nixos-desktop cookie` — TUIOS creates the **session** on that machine.
|
||||
2. `office ~/src/cookie --host nixos-desktop` — the harness prepares the **folder** there.
|
||||
|
||||
Neither tool can do the other's job. TUIOS cannot create a folder project; `office` cannot
|
||||
create a session (measured: `tuios new` fails with "Standard output is not a terminal" when
|
||||
run from anything but a real terminal). Once the folder has been prepared there, `office`
|
||||
remembers the host and the second flag is never needed again.
|
||||
|
||||
## What happens after the host is settled
|
||||
|
||||
1. **Adopt the folder.** `new-project` writes only what is missing: the project settings,
|
||||
the role files, one page note per screen, a to-do list, the verify command, the plan
|
||||
stubs. It never overwrites a file that exists, so running it twice is safe.
|
||||
2. **Check the session exists.** The session table is colour-coded, so names are matched
|
||||
after stripping escape sequences. A plain ` name ` match fails on a live session and
|
||||
made a running session look absent.
|
||||
3. **Build the screens.** Pages are created in a fixed order, and each pane is claimed in a
|
||||
workspace **by name**, never by number. TUIOS deletes a workspace whose last pane closes
|
||||
and renumbers the rest, so a remembered number is always wrong eventually.
|
||||
4. **Every page keeps one pane that never exits** (its notes pane). Without it, a page
|
||||
disappears when its work finishes, which is exactly what made the factory seem to
|
||||
restart.
|
||||
|
||||
## The three rebuild levels
|
||||
|
||||
```
|
||||
board create what is missing; close nothing
|
||||
board --replace rebuild every page, in order
|
||||
board --reset empty the session first, then rebuild (~20 s for 26 panes)
|
||||
```
|
||||
|
||||
`--reset` lists the panes, closes each by id, **waits until the session reports zero panes**,
|
||||
clears every workspace name, then builds. It exists because `--replace` on a half-built
|
||||
session ran out of workspace slots and left pages short.
|
||||
|
||||
In a running panel, `R` repairs every page (it runs `board`) and then restarts itself with
|
||||
the code on disk. `q` exits and leaves the pane.
|
||||
|
||||
## Traps, in short
|
||||
|
||||
- A pane's own command must carry the project, or `board` rebuilds the wrong one.
|
||||
- Compare host names against the machine's own addresses before ssh, or you will try to log
|
||||
in to yourself.
|
||||
- Strip colour codes before matching anything TUIOS prints.
|
||||
- Never store a workspace number.
|
||||
- A page with no permanent pane will vanish.
|
||||
- A repair that does not carry the project name silently does nothing.
|
||||
|
||||
## Relationship to the new project
|
||||
|
||||
The four screens in `docs/PLAN.md` replace most of what `office` builds today. What survives
|
||||
and must be kept: the host resolution above, the "same machine for folder and session" rule,
|
||||
the wrapper-not-symlink detail, resolve-by-name, and the permanent notes pane per page.
|
||||
Reference in New Issue
Block a user