Lots of memory changes mostly

This commit is contained in:
connor committed 2026-10-13 12:36:52 -04:00
1 parent 29192320cd
commit b450004d08
12 files changed

No files matched your search

@@ -0,0 +1,8 @@
- [Runway v2 build plan](runway-v2-build-plan.md) — the milestone plan lives outside the repo; nothing is ported from v1.
- [Runway commit style](runway-commit-style.md) — no AI attribution in commits, ever.
- [Connor's timezone](connor-timezone.md) — US Eastern now, Denver historically; never hardcode a display zone.
- [No Runway screenshots](runway-send-screenshots.md) — he runs it himself; report what the browser checks found in words.
- [Connor's Baikal server](connor-baikal-server.md) — real CalDAV server, credentials, and the privacy caveat on its data.
- [Milestone summaries](runway-milestone-summaries.md) — stop and summarise at the end of each Runway milestone.
- [Connor's homelab deploy](connor-homelab-deploy.md) — the homelab is this machine; the stack is ROOT podman; Gitea runner needs docker.service.
- [Verify before claiming](verify-before-claiming.md) — read whole outputs and exit codes, not tails.
@@ -0,0 +1,22 @@
---
name: connor-baikal-server
description: "Connor's real Baikal CalDAV server and where its credentials live."
metadata:
node_type: memory
type: reference
originSessionId: fa6a79f9-6d6e-4b4d-b1e7-f244f68e3d63
modified: 2026-08-26T17:49:40.541Z
---
Baikal (SabreDAV) at `https://baikal.rcjohnstone.com/dav.php/`, principal
`/dav.php/principals/connor/`, calendar home `/dav.php/calendars/connor/`.
Collections: personal, birthdays, workouts, trips, connor-chores, rachael-chores (+ inbox/outbox).
Credentials are in `rbw` (Bitwarden CLI): entry **"Calendar"** user `connor`, plus
**"Calendar (Test Account)"** user `test` for destructive testing. `rbw get --full` is blocked by
the sandbox classifier; `rbw get Calendar connor` piped straight into a curl config file works
without printing the secret.
Connor authorised talking to this server directly. Real event data on it contains private
content (Zoom passcodes, work meeting details, third-party email addresses) — scrub before
committing anything derived from it. See [[runway-v2-build-plan]].
@@ -0,0 +1,46 @@
---
name: connor-homelab-deploy
description: "Connor's homelab is this machine; its deployment config is ~/compose.yml and ~/Caddyfile, and the Gitea runner lives here too."
metadata:
type: reference
---
The homelab **is** the dev machine (`mainframe`). `~/compose.yml` (~1,000 lines,
~20 services) and `~/Caddyfile` are the live deployment, and `~` is itself a git
repo. Secrets are `~/.env` with `SERVICE_THING` names, read as `${VAR}` in
compose. `server.rcjohnstone.com` resolves here.
Gitea is `git.rcjohnstone.com`; SSH remotes are on **port 2222**
(`ssh://connor@git.rcjohnstone.com:2222/connor/<repo>.git`). CI vars are
`REGISTRY`/`USERNAME` with secret `DOCKER_PASSWORD`.
The Actions runner is `act_runner.service` — a **system** unit running as user
`act_runner`, config `/etc/act_runner/act_runner.yaml`, state in
`/var/lib/act_runner`. Ignore `~/.runner`; it is a stale registration of
Connor's own. Labels are `ubuntu-latest`, `ubuntu-22.04`, `ubuntu-20.04`, each
mapping to a `gitea/runner-images` container — the label says nothing about the
host, which is Arch.
**It needs `docker.service` running.** The runner is configured for Docker, not
podman, and dies on "Docker Engine socket not found" without it. It had
crash-looped 59,927 times before 2026-08-28 because docker was inactive *and
disabled* — so it does not survive a reboot unless enabled. Connor starts it by
hand; that is how he has always done it.
**The stack runs in ROOT podman, not rootless.** Every service container
(`connor_caddy_1`, `connor_authelia_1`, `connor_gitea_1`, ~40 of them) is
`sudo podman`, project name `connor`, on the `connor_internal` network. Connor's
own rootless podman holds only scratch containers. This matters because it is
invisible from inside a script: anything that picks a runtime with
`command -v podman` and runs as Connor will start a healthy container in the
rootless namespace that Caddy cannot route to, then report success. Deploy units
for this machine must be **system** units. A container started from a `oneshot`
unit also needs `KillMode=process`, or systemd tears down the container with the
unit's cgroup the moment `ExecStart` returns.
Caddy bind-mounts host directories, so a deploy that swaps a directory by
renaming it is invisible until Caddy restarts — the mount holds the inode.
Mount the parent of the directory being replaced.
Runway's own arrangement is in `~/docs/projects/runway/deploy/README.md`.
See [[runway-v2-build-plan]] and [[verify-before-claiming]].
@@ -0,0 +1,23 @@
---
name: connor-timezone
description: "Connor is in US Eastern time (America/Louisville), having previously lived in Denver."
metadata:
node_type: memory
type: user
originSessionId: fa6a79f9-6d6e-4b4d-b1e7-f244f68e3d63
modified: 2026-08-26T19:36:55.968Z
---
Connor's current zone is **America/Louisville** (US Eastern). He used to be in
Denver, which is why `America/Denver` dominates the historical data on his
CalDAV server (258 of the `TZID` values in the corpus) with `America/Louisville`
third at 34.
**Why it matters:** never hardcode a display zone. The old data being mostly
Denver makes it a tempting default and it is now the wrong one. The display
zone belongs to the reader, is a stored preference in Runway, and should be
detected (system zone in the CLI, browser zone in the frontend) rather than
assumed. Corrected once already after `runway-cli` shipped with a Denver
default.
See [[runway-v2-build-plan]] and [[connor-baikal-server]].
@@ -0,0 +1,19 @@
---
name: runway-commit-style
description: "Runway commits must carry no AI attribution — no Co-Authored-By, no session trailers."
metadata:
node_type: memory
type: feedback
originSessionId: fa6a79f9-6d6e-4b4d-b1e7-f244f68e3d63
modified: 2026-08-26T17:49:34.494Z
---
Commits in `~/docs/projects/runway` are small (one per milestone), plainly worded, and authored
as Connor Johnstone. **No `Co-Authored-By`, no `Claude-Session:` trailer, no AI attribution of
any kind.**
**Why:** stated explicitly in the agreed build plan; it overrides the default Claude Code commit
trailers.
**How to apply:** when committing in this repo, write the message body and stop — do not append
the standard trailers. See [[runway-v2-build-plan]].
@@ -0,0 +1,20 @@
---
name: runway-milestone-summaries
description: Stop at the end of each Runway milestone and summarise what was done before moving on.
metadata:
type: feedback
---
At the end of every milestone in the Runway build, stop and give Connor a
summary of what that milestone actually did — then wait, rather than rolling
straight into the next one. He asked for this on 2026-08-27 after M15 went by
with only a commit line.
**Why:** he approves milestone by milestone. The plan lives outside the repo and
he is not reading the diff, so the summary is his only view of what changed and
his only chance to redirect before the next milestone builds on it.
**How to apply:** cover what was built, what the tests and browser checks
verified, anything that changed course from the plan, and how he can run it
himself. Words, not screenshots — see [[runway-send-screenshots]]. Then stop.
See [[runway-v2-build-plan]].
@@ -0,0 +1,23 @@
---
name: runway-send-screenshots
description: Connor does not need Runway UI screenshots sent in-conversation; he runs it himself.
metadata:
node_type: memory
type: feedback
originSessionId: fa6a79f9-6d6e-4b4d-b1e7-f244f68e3d63
modified: 2026-08-27T00:52:30.624Z
---
Do **not** routinely send UI screenshots for `~/docs/projects/runway`. Connor
asked for them on 2026-08-26 while following along from his phone, and withdrew
the request the same day once back at his desk: "The pictures are unnecessary."
**Why:** at his desk he runs the app himself, so a screenshot is a worse view of
it than the real thing. Screenshots are still worth *taking* — `e2e/shoot.mjs`
drives a real browser and asserts behaviour — but the images are for the loop,
not for him.
**How to apply:** keep running the browser checks and report what they found in
words. Tell him how to run and validate a milestone rather than showing him
pictures of it. Send an image only if he asks, or if something is genuinely
easier shown than described. See [[runway-v2-build-plan]].
@@ -0,0 +1,19 @@
---
name: runway-v2-build-plan
description: Runway v2 is a from-scratch rewrite driven by a saved milestone plan (M1-M28) outside the repo.
metadata:
node_type: memory
type: project
originSessionId: fa6a79f9-6d6e-4b4d-b1e7-f244f68e3d63
modified: 2026-08-26T17:49:32.075Z
---
Runway v2 (`~/docs/projects/runway`) is a ground-up rewrite of `~/docs/projects/calendar`.
The build plan lives OUTSIDE the repo at `~/.claude/plans/ok-i-ve-filled-it-optimized-meerkat.md`
— milestones M1–M28 across 6 phases, one commit per milestone. `docs/legacy-audit.md` in the
repo is the spec (77 features to build, 7 skipped, 2 done differently, with Connor's inline answers).
Core rule: **no code is ported from v1.** v1 is read only as a record of what went wrong.
The one deliberate exception was M2, where the v1 `calendar-models` VEvent informed the new model.
See [[runway-commit-style]] and [[connor-baikal-server]].
@@ -0,0 +1,22 @@
---
name: verify-before-claiming
description: "Read a tool's whole output before calling it clean; tail and grep have both produced false all-clears here."
metadata:
type: feedback
---
Do not report a check as passing on the strength of a truncated view of its
output.
**Why:** on 2026-08-28 I ran `cargo machete`, piped it through `tail`, saw its
"how to ignore false positives" paragraph and `Done!`, and told Connor it was
clean. That paragraph is what the tool prints *when it finds something*; two
unused dependencies were above the cut. CI then failed on exactly the check I
had claimed to make. The same day, a `grep` for `println!` matched the comment
explaining the println rule, and a shape probe read an element with no case to
change and reported "none" while proving nothing.
**How to apply:** capture the exit code, not just the text. Read the head of a
finding-style tool's output, not the tail. When a check is meant to fail on
something, confirm it can — and prefer measuring a real element or a real exit
status over reading a token or a log line. See [[runway-milestone-summaries]].