aboutsummaryrefslogtreecommitdiff
path: root/inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-27 10:48:12 -0500
committerCraig Jennings <c@cjennings.net>2026-07-27 10:48:12 -0500
commit6c1ea8bbc3775fe7c481f41b4f30e0c0110a9339 (patch)
treed8607d3c7abaaa901678c89ad4e45cbc1eaca739 /inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md
parentf2609d9f9ad33486bef43211d753ba53e1e24181 (diff)
downloadrulesets-6c1ea8bbc3775fe7c481f41b4f30e0c0110a9339.tar.gz
rulesets-6c1ea8bbc3775fe7c481f41b4f30e0c0110a9339.zip
feat: add peer-reasoning contract and fix two silent probe defects
I added a Collaborative Peer Reasoning section to the interaction rules. It governs how an interpretation forms before any rule about presenting choices: infer first and clarify only at material forks, test a conclusion against its strongest alternative, let a correction update the downstream model instead of just the wording. The file's framing line widened to match. Two probes were failing silently. The startup KB nudge looked up the best-practices node by grepping file content for its slug. A roam node's slug lives in its filename, so the lookup always returned empty. The nudge pointed at nothing in every project and every session, for as long as it shipped. It matches the filename now, through find rather than a glob so zsh doesn't abort on no match. The browser rule told agents to open URLs with a form ending in &>/dev/null &. That discards the "Opening in existing browser session." line confirming the tab opened. Warm and cold start now split: foreground and read the confirmation when Chrome is already up, detach only when it isn't. The confirmation is on stdout, verified rather than assumed. I filed two tasks from handoffs. The sentry triage split needs a work-vs-personal classification mechanism before its wording can move, because the current rule excludes by category and category can't express that split. The publish-lock design is approved but carries three open gaps. The load-bearing one is a lock held across an unbounded human approval pause. I also swept the old processed handoffs out of inbox/. History keeps them.
Diffstat (limited to 'inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md')
-rw-r--r--inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md38
1 files changed, 0 insertions, 38 deletions
diff --git a/inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md b/inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md
deleted file mode 100644
index 03538af..0000000
--- a/inbox/PROCESSED-2026-07-06-1054-from-archsetup-off-workspace-captures-rule.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Proposal: never use the user's active workspace for agent windows/captures
-
-From an archsetup session (2026-07-06). Craig's request, verbatim intent: when I open an app or take a screenshot for my own verification, don't do it on his active workspace — put it somewhere that doesn't interrupt what he's doing. He then asked to make this a rule for everyone and send it to rulesets.
-
-## Why
-
-During the audio-panel work I repeatedly launched the GTK panel and `imv` on Craig's live desktop to screenshot and verify. Each one popped onto his current workspace and stole focus/attention mid-task. Agents doing visual verification on a user's live session shouldn't hijack the workspace the user is actively working in.
-
-## The rule (proposed text, ready to place)
-
-**Never open a window or take a screenshot on the user's active workspace.** When visual verification needs a real window on the user's live desktop, keep it off the workspace they're working in:
-
-- **Captures for your own verification** — render and grab the window off the user's physical screen, then tear it down. On Hyprland this is a virtual headless output (verified non-disruptive on ratio 2026-07-06 — the physical monitor stayed on its workspace, focused, throughout):
-
- ```sh
- hyprctl output create headless # virtual output on its own workspace
- setsid <app> >/tmp/x.log 2>&1 </dev/null &
- addr=$(hyprctl -j clients | python3 -c 'import json,sys; print(next((c["address"] for c in json.load(sys.stdin) if c.get("class")=="<CLASS>"), ""))')
- hyprctl dispatch movetoworkspacesilent "<ws-on-headless>,address:$addr" # silent = keeps the user's focus
- grim -o HEADLESS-<n> /tmp/shot.png # capture the virtual output only
- pkill -f '<app>$'; hyprctl output remove HEADLESS-<n> # tear down, restore the display
- ```
-
- Key constraint: `grim` captures a *visible output*, so a window merely parked on another Hyprland workspace can't be screenshotted — it must render on the headless (or another real) output. That's why a headless output, not just "another workspace," is the tool for self-captures. (A nested compositor — weston/cage/sway — is the alternative on non-Hyprland Wayland or when a headless output isn't available; it needs the compositor installed.)
-
-- **Showing the user something** — open it on a *separate* real workspace and tell them which one, so it never grabs their active workspace. They switch when ready. (Craig's viewer preference is `imv`; launch it through the compositor — `hyprctl dispatch exec "imv <files>"` — so it survives the agent's shell, not a bare `&` job that gets reaped.)
-
-- **Always clean up** — close the window and remove any headless output afterward; verify the user's display is restored (physical monitor back to its workspace, no orphan processes).
-
-The principle is environment-general (don't commandeer the user's active workspace for agent-side visual work); the recipe above is the Hyprland/Wayland implementation. Other environments implement the same principle with their own off-screen mechanism.
-
-## Placement suggestion (your call — "appropriate places")
-
-I'd lean toward a short standalone rule file (e.g. `claude-rules/desktop-capture.md`) since it's a distinct concern, cross-referenced from `verification.md` (it's part of how visual verification is done) and `interaction.md` (it's about not disrupting the user). It could instead be a section in `verification.md`. The `imv`/viewer preference and the "launch through the compositor" mechanic could also land wherever `emacs.md`'s screenshot note lives. Pick whatever fits the layer best.
-
-## Companion (local, already applied)
-
-Captured as archsetup auto-memory (`display-images-via-imv.md`) as the stopgap; this inbox note is the propagation to canonical per the cross-project rule for rulesets-owned changes.