cad-babysit: a focused human-in-the-loop skill for working CAD's stuck queue #31

Closed
opened 2026-08-28 10:39:09 +00:00 by mathias · 2 comments
Owner

Proposed 2026-08-28. Companion to mathias/cad#14 (the cad-stuck query surface).

What this is

A skill for a deliberately narrow session: pick up whatever CAD has run into trouble on, work it with a human present, and stop. Not an autonomous supervisor — a babysitter with a person in the room.

Why a human-in-the-loop session rather than an unattended one

An unattended supervisor reproduces the exact failure it exists to catch. dispatch ran dead for eight weeks because it exited 0 and nobody noticed; a long-running watcher process that dies quietly has the same property one level up, and manufactures false confidence while doing it.

With a human present, the human is the liveness check. That removes the objection entirely and needs no new machinery.

The empirical case: on 2026-08-27/28, six real defects were found — an executor routing that fails open, shared turn ceilings starving the sovereign path, an agent able to edit the file that authorises it, no context management, a well-written issue steering an agent into a policy wall, and a committed plist that never parsed. Every one came from a human and an agent reading transcripts together. Zero came from a metric.

The skill's real content is the diagnostic ORDER

The findings are not the valuable part — the sequence is, because each step below corresponds to a mistake actually made:

  1. Read the issue's own comments before anything else. A confident wrong root cause was produced from pod logs while the correct diagnosis sat in cad-atlas#10's comments from nine days earlier. The rule "read issue comments before working" was already written down and was not followed.
  2. Then the Actions job logs — GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs returns 200 with full text, secrets masked. A prior note claiming this endpoint 404s was wrong and cost a diagnosis; find the run id via /actions/runs and match on run_number.
  3. Separate infrastructure fault from task outcome. A run that died before turn 1 says nothing about the issue. Four claim labels were burned this way and the tracker recorded them as handled.
  4. Re-read after every write. Two labels were silently dropped by Gitea in one session — an executor: label and a status:redispatch — each returning 200. Unknown label names are dropped without error.
  5. Verify by exit code, never by grepped output. A go build && head chain printed "build ok" after a failed build in this very session.

Output contract — hold it to the gates it enforces

  • Every finding cites a locator: run id, commit sha, or log line. A finding without one is not actionable and should not be emitted.
  • Never closes an issue. Closing is the human gate; a reviewer that can close has no independent check.
  • Never dispatches or arms a label. Review is not control.
  • Anything that is the human's call surfaces as DECISION NEEDED (question / options / recommendation / blocks) rather than being decided.

State lives in Gitea, not in the session

The skill's first move is always re-derive, never recall. Sessions get compacted and lose exactly the cross-run history that makes this valuable, so the session must be disposable: invoke it cold, it reconstructs the stuck queue from labels, comments and Actions runs.

Honest limitation

A skill encodes the repeatable patterns. The novel findings this session produced came from unhurried reading with full context, and a checklist will not reproduce that. Expect it to catch the known eight states reliably and to miss the next new failure mode — which is fine, provided nobody mistakes a clean run for "nothing is wrong".

Depends on

mathias/cad#14 for the query surface. The skill is the ritual around it; without the query it would be a checklist with no input.

Proposed 2026-08-28. Companion to `mathias/cad#14` (the `cad-stuck` query surface). ## What this is A skill for a **deliberately narrow session**: pick up whatever CAD has run into trouble on, work it with a human present, and stop. Not an autonomous supervisor — a babysitter with a person in the room. ## Why a human-in-the-loop session rather than an unattended one An unattended supervisor reproduces the exact failure it exists to catch. `dispatch` ran dead for eight weeks because it exited 0 and nobody noticed; a long-running watcher process that dies quietly has the same property one level up, and manufactures false confidence while doing it. With a human present, **the human is the liveness check.** That removes the objection entirely and needs no new machinery. The empirical case: on 2026-08-27/28, six real defects were found — an executor routing that fails open, shared turn ceilings starving the sovereign path, an agent able to edit the file that authorises it, no context management, a well-written issue steering an agent into a policy wall, and a committed plist that never parsed. **Every one came from a human and an agent reading transcripts together.** Zero came from a metric. ## The skill's real content is the diagnostic ORDER The findings are not the valuable part — the sequence is, because each step below corresponds to a mistake actually made: 1. **Read the issue's own comments before anything else.** A confident wrong root cause was produced from pod logs while the correct diagnosis sat in `cad-atlas#10`'s comments from nine days earlier. The rule "read issue comments before working" was already written down and was not followed. 2. **Then the Actions job logs** — `GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs` returns 200 with full text, secrets masked. A prior note claiming this endpoint 404s was wrong and cost a diagnosis; find the run id via `/actions/runs` and match on `run_number`. 3. **Separate infrastructure fault from task outcome.** A run that died before turn 1 says nothing about the issue. Four claim labels were burned this way and the tracker recorded them as handled. 4. **Re-read after every write.** Two labels were silently dropped by Gitea in one session — an `executor:` label and a `status:redispatch` — each returning 200. Unknown label names are dropped without error. 5. **Verify by exit code, never by grepped output.** A `go build && head` chain printed "build ok" after a failed build in this very session. ## Output contract — hold it to the gates it enforces - Every finding **cites a locator**: run id, commit sha, or log line. A finding without one is not actionable and should not be emitted. - **Never closes an issue.** Closing is the human gate; a reviewer that can close has no independent check. - **Never dispatches or arms a label.** Review is not control. - Anything that is the human's call surfaces as `DECISION NEEDED` (question / options / recommendation / blocks) rather than being decided. ## State lives in Gitea, not in the session The skill's first move is always **re-derive**, never *recall*. Sessions get compacted and lose exactly the cross-run history that makes this valuable, so the session must be disposable: invoke it cold, it reconstructs the stuck queue from labels, comments and Actions runs. ## Honest limitation A skill encodes the *repeatable* patterns. The novel findings this session produced came from unhurried reading with full context, and a checklist will not reproduce that. Expect it to catch the known eight states reliably and to miss the next new failure mode — which is fine, provided nobody mistakes a clean run for "nothing is wrong". ## Depends on `mathias/cad#14` for the query surface. The skill is the ritual around it; without the query it would be a checklist with no input.
mathias added the risk/lowsize/stype/feat labels 2026-08-28 10:39:37 +00:00
Author
Owner

Closing out — built and shipped.

What shipped

skills:cad-babysit (mathias/skills@d40169f, auto-tagged v0.7.0, CI green — run #23,
tag job conclusion: success, plugin.json bumped to 0.7.0 to match).

Wraps mathias/cad#14's cad stuck — the skill is the ritual around that query, not a
replacement for it, per the dependency this issue names.

The diagnostic order, as five phases

  1. Query — run cad stuck fresh, cold, every session. No carried-forward worklist.
  2. Read the issue's own comments FIRST. Named explicitly because it was skipped once and
    cost a session (the cad-atlas#10 mistake this issue describes).
  3. THEN Actions job logs — /actions/runs → match .run_number → /actions/jobs/{id}/logs.
    Documented as working (200, full text, secrets masked), with the note that a prior claim it
    404s was wrong.
  4. Separate infrastructure fault from task outcome — a zero-turn "could not start" run is
    not evidence about the issue.
  5. Decide, or say DECISION NEEDED — closed diagnoses get a DIAGNOSIS/CAUSE/LOCATOR/ACTION
    block; anything that's the operator's call gets DECISION NEEDED with question/options/
    recommendation/blocks, never decided on their behalf.

Output contract, enforced as Iron Laws

  • Read-only: no dispatch, no label writes (including status:redispatch), no close/reopen.
  • Every finding cites a locator — a comment permalink, run id, or log line.
  • Re-derive, never recall — the worked example in the skill file even calls out that this
    issue's own cited example (brain-gardener#190) stopped reproducing hours after it was
    written, and that's the design working, not a bug.

Honest limitation, kept in

Per this issue's own framing: the skill encodes the repeatable sequence and will reliably
catch the known taxonomy. It will not by itself reproduce the genuinely novel findings an
unhurried human+agent session produced (an agent editing the file that authorizes it, an issue
body recommending a forbidden command). Said explicitly in the skill file so a clean pass never
reads as "nothing is wrong" rather than "nothing on the known list is wrong."

Next

Moving to the third piece, mathias/cad-atlas#11 (stuck-state pipeline overlay), the last
consumer of cad#14's query surface.

Closing out — built and shipped. ## What shipped `skills:cad-babysit` (mathias/skills@d40169f, auto-tagged **v0.7.0**, CI green — run #23, `tag` job `conclusion: success`, plugin.json bumped to 0.7.0 to match). Wraps `mathias/cad#14`'s `cad stuck` — the skill is the ritual around that query, not a replacement for it, per the dependency this issue names. ## The diagnostic order, as five phases 1. **Query** — run `cad stuck` fresh, cold, every session. No carried-forward worklist. 2. **Read the issue's own comments FIRST.** Named explicitly because it was skipped once and cost a session (the `cad-atlas#10` mistake this issue describes). 3. **THEN Actions job logs** — `/actions/runs` → match `.run_number` → `/actions/jobs/{id}/logs`. Documented as working (200, full text, secrets masked), with the note that a prior claim it 404s was wrong. 4. **Separate infrastructure fault from task outcome** — a zero-turn "could not start" run is not evidence about the issue. 5. **Decide, or say `DECISION NEEDED`** — closed diagnoses get a `DIAGNOSIS/CAUSE/LOCATOR/ACTION` block; anything that's the operator's call gets `DECISION NEEDED` with question/options/ recommendation/blocks, never decided on their behalf. ## Output contract, enforced as Iron Laws - Read-only: no dispatch, no label writes (including `status:redispatch`), no close/reopen. - Every finding cites a locator — a comment permalink, run id, or log line. - Re-derive, never recall — the worked example in the skill file even calls out that this issue's own cited example (`brain-gardener#190`) stopped reproducing hours after it was written, and that's the design working, not a bug. ## Honest limitation, kept in Per this issue's own framing: the skill encodes the *repeatable* sequence and will reliably catch the known taxonomy. It will not by itself reproduce the genuinely novel findings an unhurried human+agent session produced (an agent editing the file that authorizes it, an issue body recommending a forbidden command). Said explicitly in the skill file so a clean pass never reads as "nothing is wrong" rather than "nothing on the known list is wrong." ## Next Moving to the third piece, `mathias/cad-atlas#11` (stuck-state pipeline overlay), the last consumer of `cad#14`'s query surface.
Author
Owner

Closing — verified live on main, not just reported.

  • skills/cad-babysit/SKILL.md present at mathias/skills@d40169f, still on main today (ls skills/cad-babysit → SKILL.md).
  • CI run #23 (id: 4755, head d40169f) conclusion: success; tag v0.7.0 exists and plugin.json matched it at the time.
  • The shipped-summary comment above already records the five-phase diagnostic order and the Iron Laws against the contract this issue set.

Left open only because nobody closed it. Nothing outstanding.

Closing — verified live on main, not just reported. - `skills/cad-babysit/SKILL.md` present at `mathias/skills@d40169f`, still on `main` today (`ls skills/cad-babysit` → `SKILL.md`). - CI run #23 (`id: 4755`, head `d40169f`) `conclusion: success`; tag `v0.7.0` exists and `plugin.json` matched it at the time. - The shipped-summary comment above already records the five-phase diagnostic order and the Iron Laws against the contract this issue set. Left open only because nobody closed it. Nothing outstanding.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mathias/skills#31