feat: add just watch for continuous clippy feedback - #9
Merged
Conversation
Add cargo-watch recipe and nix-rust skill so Claude Code can run clippy in the background during code-editing tasks for rapid feedback.
srid
marked this pull request as ready for review
March 20, 2026 20:32
This was referenced Apr 20, 2026
srid
added a commit
that referenced
this pull request
May 19, 2026
…te-aware Two structural sweeps in one commit since they touch the same surface. **`hostId` is now a concrete string on every persisted record.** `SavedTerminal.hostId` and `RecentRepo.hostId` default to `"local"` via Zod, so the codebase no longer has to mean two things by `hostId === undefined` (legacy "field missing" vs "explicit local"). Schema ladder bumped to **1.23.0** with an additive migration that backfills `recentRepos[].hostId = "local"` on read. New `isLocalHostId()` helper centralizes the sentinel check so callers don't compare strings inline. Test fixtures (`session.test.ts`, `state.test.ts`, `dockModel.test.ts`, `terminalDisplay.test.ts`) updated to carry the field. `meta/agent.ts`, `meta/github.ts`, and the iframe-preview route now resolve the host directly: `getHost(entry.meta.hostId)` instead of `entry.meta.hostId ? getHost(entry.meta.hostId) : undefined`. Same result for local + remote; one less branch each. **Reviewer #9 — Worktrees executor-aware.** `worktreeCreate` / `worktreeRemove` in `kolu-git/worktree.ts` rewritten without simple-git or `fs.existsSync` — every IO routes through the executor (`exec` for git invocations, `statMtimeMs` for existence probes, `readlink -f` through `exec` for canonicalizing `git-common-dir`). The contract schemas `WorktreeCreateInputSchema` / `WorktreeRemoveInputSchema` now require `hostId`. Server router picks executor by host. Client threads `hostId` from the worktree palette entry through `handleCreateWorktree` and into `client.git.worktreeCreate`. Recent repos are keyed by `{hostId, repoRoot}` — two hosts with the same on-disk repo path are distinct entries, and the palette disambiguates by showing the alias in the description. `getRecentRepos` only filesystem-checks local entries — a remote repo can't be sync-validated, and a transient SSH outage shouldn't expire the MRU.
This was referenced May 26, 2026
srid
added a commit
that referenced
this pull request
Jun 2, 2026
Paulg-method rewrite of the 14 panel-flagged passages. 11 applied after an adversarial skeptic confirmed each cleared the reader's stumble while preserving meaning, facts, the physics metaphors, and voice. 4 of the 11 are the skeptic's own endorsed fix (the rewriter's version was rejected and replaced). Headline fixes: - #1 "the invariant" now named ("the code's analogue of that frame-invariant interval") — was undefined-on-a-definite-article. - #6 "structural review has." -> "has become that." — elliptical gapping after a negative had inverted the meaning. - #4 lede "volatilities that got bound" -> "fast-moving and slow-moving parts coupled" — one reader had read "bound" as the opposite (good) meaning. - #12 moved "space-like" off the observer onto the slice/reading. - #3, #7, #8, #9, #10, #11, #14: see optimization log. 3 deliberate keeps (over-fix guard): #5 (the physics is fine as-is), #13 (gloss would steal the next paragraph's reveal), #2 (deferred to pass 2 — pass-1 rewrite contradicted the post's thesis). Behaviour gate: `just website::build` PASS.
srid
added a commit
that referenced
this pull request
Jun 6, 2026
#7 chord-arbitration (Family B, candidate): who owns a chord when a PTY tool stacks under the app (Ctrl+B/J); tested but hand-shifted. #8 capability-gate (Family B, extract-now): probe→degrade→notify scattered at 5+ sites; tryFeature seam. #9 terminal-probes (Family B, extract-now·partly-built): read volatile xterm/WebGL internals via null-safe thunks; harden the leaks.
srid
added a commit
that referenced
this pull request
Jun 7, 2026
- Sticky scroll-spy rail over the 7 guide sections (#quickstart…#faq) — the /welcome→home merge dropped the guide's TOC, leaving the long page with no way to orient. Dot rail (xl+), labels on hover/active, IntersectionObserver- free scroll-spy, hidden until a guide section is on screen. - Dedup: drop #power's "Export & record" how-to — it restated features #8 (transcript export) and #9 (recording) almost verbatim; the grid keeps them. - Perf/LCP: preload the hero poster (the LCP element) with fetchpriority=high, ship the video preload="none", and start playback only once it scrolls into view, so the 2.6MB webm never races the poster. No <img> on the page to lazy.
This was referenced Jun 11, 2026
srid
added a commit
that referenced
this pull request
Jul 17, 2026
…op dead export Code-police pass (rules + fact-check) findings, actioned: - fact-check: covers() stripped '/**' without keeping the slash, so a sibling path sharing the string prefix (docs/atlas/dist-staging) would false-match docs/atlas/dist/** — the drift pin could pass green on the exact silent-deploy-skip class it exists to catch. Slash-preserving prefix now. - prefer-focused-library: pages.yml is parsed with the yaml package (astro's transitive dep, resolved through its require context) instead of a brittle regex over structured data. - no-dead-code: astro-deps.mjs no longer exports requireFromAstro (no importer; internal only). Skipped (re-litigates ratified decision #9): deduplicating the createRequire dance + astroHighlight mirror across the two projects' tests — the projects pin DIFFERENT astro/shiki versions in separate lockfiles, so per-consumer copies resolving through each project's own astro are correct; forcing them into one shared copy would couple version-independent things and need another candidates/nix-copy dance for test-only code.
srid
added a commit
that referenced
this pull request
Jul 28, 2026
…cet vocabulary `OsfactsReading` stood for both `Snapshot` and `HostSnapshot`, so eleven of its eighteen fields were structurally always-empty at every call site and the parser accepted either grammar in either output. It splits along the split Rust already has. - lowy F3 ≡ hickey #6 — one type for two verbs; now `SnapshotReading` / `HostReading` with `parseSnapshotOutput` / `parseHostOutput`, each refusing the other's row tags loudly instead of returning a silently empty field. `HostReading.memory` can finally be named `memory`, matching the JSON face - lowy F4 ≡ hickey #7 — `mem` meant process RSS and host RAM in one flat union; the verb split takes the facet unions with it - lowy F5 ≡ hickey #9 — the flag→wire-name map is not mechanical (`procs` names `proc`; `ports` names three), so every consumer re-derived tool knowledge by hand; `snapshotFacetNames` exports it. It states fact, not policy: which named facet counts as blindness stays with the consumer - lowy F8 — `processIdentity` put the daemon supervisor's identity-gate policy inside the explicitly policy-free client, with zero consumers (verified by grep) and shaped for the OSF8 consumer this PR deliberately parked. Deleted, with the sync spawn that existed only to serve it - lowy F1 ≡ hickey #1 — `facets.test.ts` pins the three unions to `osfacts/facets.json`, out of `describeDaemon` so the fast local loop catches the drift too - lowy F10 — the zero-value reading was written out twice with nothing requiring the copies to agree - lowy F12 — `isTcpPort` is no longer exported; it is the parser's own guard Raised by the lowy ∥ hickey lens review. Not pushed or merged.
srid
added a commit
that referenced
this pull request
Jul 28, 2026
`SCANNED_FACETS` was a third hand-kept facet list, typed `readonly string[]`, restating in wire vocabulary what the same file already says in flag vocabulary. A typo compiled, and silently converted a should-be-fatal blindness into a tolerated one — the inverse of the sudo regression the file's own docstring commemorates. - lowy F5 ≡ hickey #9 — one `SCAN_ASK` is now both what is requested and, via the client's `snapshotFacetNames`, what the gates read. Typed, so a drifted facet name is a compile error, and the two vocabularies can no longer disagree - lowy F5 — `scanned(facet: string)` was applied to both `U` and `E` rows, conflating two different closed vocabularies; they are separate typed checks - lowy F12 — `classifyListeners` re-validated a port `parseSnapshotOutput` has already refused, so the second check was unreachable and the rule lived twice `ports_uid` joins `ports_unclaimed` as tolerated: darwin now reports that it cannot name a listener's owning uid, and treating that as blindness would black out port detection on the whole platform. Raised by the lowy ∥ hickey lens review. Not pushed or merged.
srid
added a commit
that referenced
this pull request
Aug 1, 2026
- hickey #3 — `openLazyDirs` carried three facts and two broke. A row that has no node right now (a search projection hid it) no longer retires the record, so a filter keystroke stops erasing the user's expansion; and a key the host no longer declares lazy is pruned, so an eye-toggle round trip reports afresh instead of showing an arbitrarily old cached level with no refetch path. - lowy #2 — a `lazyEpoch` prop clears the record when the host's loaded levels stop describing this tree (a repo / host switch), the wrapper's half of the invalidation the host already performs on its children cache. - lowy #6 — `onExpandLazyDirectory` may return a promise; on rejection the wrapper forgets the expansion, so a transient read failure no longer wedges the folder open-and-empty for the mount. - hickey #7 — the `tree.subscribe` callback runs under `safeApply`, so a throw can't escape into Pierre's emit loop and take other subscribers with it. - hickey #9 — "which directories should be open" is spelled once (`desiredExpandedPaths`) and used at both the constructor and `toOpen`. - hickey #8 — `expandPaths`' JSDoc no longer asserts an invariant `openLazyDirs` has made false. Raised by the lowy ∥ hickey lens review. Not pushed or merged.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #5
just watchrecipe: runscargo watch -x 'clippy --workspace --all-targets'for continuous compilation/lint feedback across all cratesjust watchin the background at the start of code-editing tasks, replacing the manual end-of-task clippy checknix-rustskill documenting the cargo-watch workflowTest plan
just watch, edit a.rsfile with an error, verify it's caught automaticallyjust --listshows the newwatchrecipe