From f2d8aa4f9e01ce5a7df8541d69f75bbd443476e9 Mon Sep 17 00:00:00 2001 From: Frank Date: Thu, 29 Oct 2026 12:22:39 -0700 Subject: [PATCH] live: heartbeat sync 2026-10-29T12:22:39-07:00 (Refs #11) --- agent/config.yml | 2 +- .../agenttrash-purger-invocation/SKILL.md | 28 +++++++++++++++++++ .../SKILL.md | 24 ++++++++++++++++ .../state.json | 2 +- .../state.json | 2 +- .../.local/state/noctalia/settings.toml | 8 +++--- 6 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 agent/managed-skills/agenttrash-purger-invocation/SKILL.md create mode 100644 agent/managed-skills/correct-stale-todo-before-next-turn/SKILL.md diff --git a/agent/config.yml b/agent/config.yml index 630a08d..5cc7328 100644 --- a/agent/config.yml +++ b/agent/config.yml @@ -96,7 +96,7 @@ compaction: experimentalContextManagement: false interruptMode: immediate defaultThinkingLevel: xhigh -hideThinkingBlock: true +hideThinkingBlock: false proseOnlyThinking: false terminal: showProgress: true diff --git a/agent/managed-skills/agenttrash-purger-invocation/SKILL.md b/agent/managed-skills/agenttrash-purger-invocation/SKILL.md new file mode 100644 index 0000000..73ec5a5 --- /dev/null +++ b/agent/managed-skills/agenttrash-purger-invocation/SKILL.md @@ -0,0 +1,28 @@ +--- +name: agenttrash-purger-invocation +description: "Invoke the .AGENTTRASH purger (scripts/purge-agenttrash.sh) to clear staged deletions, and diagnose its guaranteed exit 1 on hosts whose find is uutils (Rust) rather than GNU." +--- + +# Purging .AGENTTRASH — invocation and the uutils-find trap + +`scripts/purge-agenttrash.sh` (serverAppConfigs, merged in PR #79 `fad87aa`) is the tool form of the fleet's deletion policy: files land in `.AGENTTRASH`, and an approved purge runs this instead of being improvised per session. + +## Invoke + +```sh +sh scripts/purge-agenttrash.sh # plan only — prints, deletes nothing +sh scripts/purge-agenttrash.sh --execute # perform the plan +sh scripts/purge-agenttrash.sh --execute /some/root # scope to one root (default: $HOME) +``` + +- `--quiet` silences per-line output; errors and the summary still print. `--log PATH` overrides the default `~/.AGENTTRASH-cleanup.log` (one dated line per run — written even for a dry run, so pass a scratch `--log` when you only want to look). +- Every printable line is fixed at plan time in `$HOME/.agenttrash-purge.lock/plan`, so dry-run and `--execute` output cannot drift. Exit `0` ok · `1` any refusal or failure · `2` usage. +- Rule: a root's own `.AGENTTRASH` is *emptied* (the directory survives); deeper `.AGENTTRASH` trees are *removed*; symlinked or foreign-owned candidates are refused, never followed; `/` is refused outright. + +## The trap: uutils find makes it exit 1 on the dev box + +On the workstation, `sh scripts/purge-agenttrash.sh` reports `refused /home/blank (find failed)` and exits 1 **even though the plan is correct** — and an `--execute` there acts on the recorded plan while still reporting failure. + +- Cause: `find --version` reports `find 0.8.0` (Rust **uutils**, errors as `Error: : Permission denied (os error 13)`), not GNU findutils. It exits 1 whenever any directory under the root is unreadable — and `~/.local/share/containers/storage/**` (podman overlay layers, mode 0700 dirs) is unreadable. `collect_root` turns any nonzero find status into a root refusal. +- Proved by: `find /home/blank -xdev -name .AGENTTRASH >/dev/null 2>&1; echo $?` → `1`, while `find /home/blank/.omp -xdev ...` → `0`. +- Fix, if it ever comes up (don't invent it): treat unreadable-directory errors as warnings, or accept find's partial output and reserve refusal for a hard find failure. Note `bash -n` is not the gate — shellcheck / `sh -n` is. diff --git a/agent/managed-skills/correct-stale-todo-before-next-turn/SKILL.md b/agent/managed-skills/correct-stale-todo-before-next-turn/SKILL.md new file mode 100644 index 0000000..58d415c --- /dev/null +++ b/agent/managed-skills/correct-stale-todo-before-next-turn/SKILL.md @@ -0,0 +1,24 @@ +--- +name: correct-stale-todo-before-next-turn +description: "Recover from marking a todo done on an inferred outcome instead of the verified one: rm the wrong entry, re-append with the true state, and state the correction before continuing." +--- + +## When this applies + +You reported a task as finished (or told the user an outcome) from the *expected* result of a script or plan, while the evidence you had already fetched in the same turn says otherwise. Common shape: a chain script documents `rm -f FILE` "on success", you read the docs, announce the file gone — and the same output also contains `ls -l FILE` (file present) plus the gate line `... kept (recordings incomplete)`. + +Never let the script's intent outrank the captured output. An error you noticed yourself is fixed mechanically, not narrated later: the tool record and the transcript are both verifiable, so a wrong `done` is corrected on the next turn, in the same message as the next real action. + +## Procedure + +1. **Re-read your own claim against the evidence** you already have (the exact `ls -l`, `df`, log tail line, rc file). Quote the contradicting line to yourself before deciding. +2. `todo op:rm task:` — do not re-append over a `done` item, and do not edit it in place with a new phase. +3. `todo op:append` the same work with its **true** state in the text, so the list itself carries the reason: `Purge X (still on disk: the chain's gate kept it because ;