Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
4dd4d21
chore: open 0.19.0-alpha.1 on develop
dkackman Nov 2, 2026
1f1cc32
fix(skill): #1154 - series-episodes keeps cast portraits with an exte…
dkackman Nov 2, 2026
b0ab10d
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Nov 2, 2026
d185ef3
feat: update SKILL documentation and add reference files for ltx-2.5,…
dkackman Nov 2, 2026
c7d00dc
fix(plugin): #1157 - sitcom-multicam master sets camera_move: static
dkackman Nov 2, 2026
285b537
feat(plugin): #1142 - one light phrase per value in the LTX-2.5, H3 a…
dkackman Nov 2, 2026
d425647
Merge feat/1141-A-light-sentences (#1142)
dkackman Nov 2, 2026
b96ccf1
fix(plugin): #1157 - sitcom-multicam master uses the vocabulary's mov…
dkackman Nov 2, 2026
6f8e12e
fix(tasks): #1144 - stills_to_video: silent track so the clip scores,…
dkackman Nov 2, 2026
2c371a1
Merge feat/1141-C-stills-silent-track (#1144)
dkackman Nov 2, 2026
0bf7d99
fix(tasks): #1161 - stills_to_video's silent track raises no near_sil…
dkackman Nov 2, 2026
725c581
Merge fix/1161-stills-silent-warnings (#1161)
dkackman Nov 2, 2026
18dd939
feat(plugin): #1148 - measure six named moves per video family
dkackman Nov 2, 2026
82d4acf
Merge feat/1141-G-move-trial (#1148)
dkackman Nov 2, 2026
bd90252
fix(assess): #1162 - shot_dead_air skips silent_by_design shots
dkackman Nov 2, 2026
531c87b
Merge fix/1162-dead-air-silent (#1162)
dkackman Nov 2, 2026
44cc7e0
feat(media): #1158 - pcm_sha256 in audio get_gallery_metadata media
dkackman Nov 2, 2026
710a0e8
Merge feat/1139-A-pcm-sha256 (#1158)
dkackman Nov 2, 2026
94a0d18
docs(proposals): #1141 - close-out record for cinematic controls
dkackman Nov 2, 2026
1b35bf9
Merge docs/1141-closeout-cinematic-controls (#1141)
dkackman Nov 2, 2026
c4c74bb
fix(audio): #1163 - no near-silent job warning on a cut whose shots a…
dkackman Nov 2, 2026
bce0c37
Merge fix/1163-silent-cut-warning (#1163)
dkackman Nov 2, 2026
dece403
feat(loras): #1159 - h3-antiburn catalog entry (trial) from the A/B/C…
dkackman Nov 2, 2026
adff495
Merge feat/1151-A-antiburn-probe (#1159)
dkackman Nov 2, 2026
416d32b
docs(proposals): #1139 - close-out record for pcm_sha256
dkackman Nov 2, 2026
4646903
Merge docs/1139-closeout-pcm-sha256 (#1139)
dkackman Nov 2, 2026
a27968a
refactor(audio_qc): #1163 - one silent-by-design predicate, assess.py…
dkackman Nov 2, 2026
35985dd
feat(media_compare): #1160 - texture bands on compare_outputs
dkackman Nov 2, 2026
5e8396d
feat(ui): #1160 - regenerate the OpenAPI document and UI schema for t…
dkackman Nov 2, 2026
f25bc63
feat(media_compare): #1160 - texture band tests, guide subsection and…
dkackman Nov 2, 2026
eeaca52
Merge feat/1152-A-texture-bands (#1160)
dkackman Nov 2, 2026
4f1d392
docs(proposals): #1151 - design record for the H3 anti-burn continuat…
dkackman Nov 2, 2026
1676c53
Merge docs/1151-complete-h3-antiburn (#1151)
dkackman Nov 2, 2026
55819d2
fix(guides): #1160 - Texture bands is a #### heading get_guide reache…
dkackman Nov 2, 2026
768400d
Merge feat/1152-A-texture-bands-heading (#1160)
dkackman Nov 2, 2026
c121d01
docs(proposals): #1152 - design record for texture-band drift measure…
dkackman Nov 2, 2026
06f08f3
Merge docs/1152-complete-texture-bands (#1152)
dkackman Nov 2, 2026
b77ea8e
docs(proposals): #1141 - record fix-forward #1164 (C-F647 amended by …
dkackman Nov 2, 2026
8630acd
Merge docs/1141-fixforward-record (#1141)
dkackman Nov 2, 2026
5e8460f
docs: update README and SERVER documentation; add new images and scre…
dkackman Nov 2, 2026
83610fc
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Nov 2, 2026
bec9cbe
feat(tasks): #1165 - face_drift shot index, frames and times in measu…
dkackman Nov 2, 2026
eb8d142
Merge feat/1141-E-face-drift-times (#1165)
dkackman Nov 2, 2026
98acfff
docs: link the HTTP API's OpenAPI spec and the workflow schema
dkackman Nov 2, 2026
4542a14
fix(schema): workflow schema $id names this repo, not diffusers-helper
dkackman Nov 2, 2026
954ddbc
docs: #1141 - record fix-forward #1165 in the cinematic-controls desi…
dkackman Nov 2, 2026
0702f40
Merge docs/1141-fixforward-1165 (#1141)
dkackman Nov 2, 2026
7d1e121
docs: #1167 - chains.md drift guidance from community reports
dkackman Nov 2, 2026
3de1506
fix(flux3): #1168 - load only Klein's four components, not the repo's…
dkackman Nov 2, 2026
342bc46
test: #1168 - re-pin the Klein templates' step cache keys after names
dkackman Nov 2, 2026
bdad134
docs: accuracy and concision pass over every guide; page screenshots
dkackman Nov 2, 2026
a6eae10
fix(templates): controlnet's Canny thresholds sit beside image, not i…
dkackman Nov 2, 2026
49def20
fix(assess): shot_span_overrun findings use severity "warn"
dkackman Nov 2, 2026
b1a0052
docs: #1168 - proposal for skipping Klein's prompt-upsampler block
dkackman Nov 2, 2026
15e881f
fix(check-script): #1172 - closed/open compounds don't cost line simi…
dkackman Nov 2, 2026
7d8e9db
fix(skill): #1178 - script-to-video face-drift reference and action, …
dkackman Nov 2, 2026
72af5de
feat(h3): #1173 - latent_anchor and chain.anchor segment_1
dkackman Nov 2, 2026
fb46e9d
feat(h3): #1173 - latent anchor tests, docs and attribution
dkackman Nov 2, 2026
0bd0644
Merge feat/1166-1-latent-anchor: #1173 H3 latent statistics anchor
dkackman Nov 2, 2026
98bdc94
feat(h3): #1173 - ruff format
dkackman Nov 2, 2026
1ae1f0d
Merge feat/1166-1-latent-anchor: #1173 ruff format
dkackman Nov 2, 2026
d1f41ec
fix(klein): #1168 - configuration.remove_blocks, dropped prompt_upsam…
dkackman Nov 2, 2026
eb3338a
Merge fix/1168-remove-blocks: #1168
dkackman Nov 2, 2026
b936337
feat(h3): #1173 - latent_anchor asks the guides step rule; refuse ref…
dkackman Nov 2, 2026
3a7d54b
Merge feat/1166-1-latent-anchor: #1173 anchor refuses references
dkackman Nov 2, 2026
c73d0fc
fix(klein): #1168 - remove_blocks pops _blocks, not the deepcopy the …
dkackman Nov 2, 2026
f5bd946
fix(assess): #1179 - seam_hole not in rules_applied when skipped on e…
dkackman Nov 2, 2026
e71920c
Merge fix/1179-seam-hole-applied: #1179
dkackman Nov 2, 2026
e9e8efa
feat(h3): #1173 - chain.anchor of any type refused naming the values;…
dkackman Nov 2, 2026
f6a5dca
Merge feat/1166-1-anchor-type-message: #1173
dkackman Nov 2, 2026
571bc7d
feat(locations): #1173 - latent_anchor meets the media location polic…
dkackman Nov 2, 2026
5921be2
Merge feat/1166-1-anchor-location-gate: #1173
dkackman Nov 2, 2026
3dbf8a0
feat(h3): #1174 - guide_noise: cosine-tapered paired-encode noise on …
dkackman Nov 2, 2026
9363e97
feat(h3): #1174 - guide_noise tests and docs (WORKFLOW_GUIDE, ARCHITE…
dkackman Nov 2, 2026
bdbe472
Merge feat/1166-2-guide-noise: #1174
dkackman Nov 2, 2026
f63fe50
feat(workspace): enhance workspace handling with dynamic refetching a…
dkackman Nov 2, 2026
5e0ffc0
docs(proposals): #1166 - design record for H3 guide-chain drift counters
dkackman Nov 2, 2026
180881b
Merge docs/1166-closeout: #1166
dkackman Nov 2, 2026
ed2b576
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Nov 2, 2026
502dca2
feat(flow): implement support for chained segments in workflow proces…
dkackman Nov 2, 2026
65e7e02
Merge branch 'develop' of https://github.com/dkackman/diffusers-workf…
dkackman Nov 2, 2026
85e4c39
feat(h3): #1181 - log the latent anchor when applied, nothing when unset
dkackman Nov 2, 2026
b5cf0fa
Merge feat/1166-1181-anchor-log: #1181
dkackman Nov 2, 2026
44f385c
feat(h3): #1181 - narrator names the anchor block only when set, but …
dkackman Nov 2, 2026
05ffa7e
Merge feat/1166-1181-anchor-log-r2: #1181
dkackman Nov 2, 2026
576f139
feat(docs): #1184 - record H3 dialogue pacing probes (split, split+ac…
dkackman Nov 2, 2026
70939b4
Merge feat/1180-A-pacing-probe: #1184
dkackman Nov 2, 2026
340a898
docs(proposals): #1166 - record fix-forward #1181 in the design record
dkackman Nov 2, 2026
ebec2c1
Merge docs/1166-closeout-fix-forward: #1166
dkackman Nov 2, 2026
be098c7
docs(proposals): #1184 - per-clip suspect handling and the judged rat…
dkackman Nov 2, 2026
35498b8
Merge feat/1180-A-pacing-probe-r2: #1184
dkackman Nov 2, 2026
6af8490
docs(proposals): #1184 - C s1001 action placement is a borderline yes…
dkackman Nov 3, 2026
8f37b2a
Merge feat/1180-A-pacing-probe-r3: #1184
dkackman Nov 3, 2026
b32a1c1
feat(plugin): #1185 - minimax-h3: splitting a short line into two <d>…
dkackman Nov 3, 2026
260442f
Merge feat/1180-B-h3-pacing-skill-lines: #1185
dkackman Nov 3, 2026
4064344
docs(proposals): #1180 - design record for H3 dialogue pacing; todo e…
dkackman Nov 3, 2026
ef9a8ef
Merge docs/1180-closeout-h3-dialogue-pacing: #1180
dkackman Nov 3, 2026
03f6359
fix(h3): #1174 - guide_noise encodes the noised guide once; the paire…
dkackman Nov 3, 2026
2662639
fix(tasks): face_drift loop no longer shadows the shot index; compoun…
dkackman Nov 3, 2026
8b21b25
refactor(h3): ratchet - anchor statistics in h3_anchor_stats so the b…
dkackman Nov 3, 2026
98daa4b
refactor(h3): ratchet - the H3 argument wrappers move to pipeline_h3 …
dkackman Nov 3, 2026
4ace3b4
docs: 0.19.0 release notes draft
dkackman Nov 3, 2026
32f7f81
refactor(chain): ratchet - the segment spill moves to chain_spill; ru…
dkackman Nov 3, 2026
e39ef9d
refactor(ui): ratchet - chain summary moves to flowChain.ts
dkackman Nov 3, 2026
b93c7f2
refactor(ui): ratchet - segment chips move to FlowSegments.svelte
dkackman Nov 3, 2026
a8b937e
fix(ui): workspace refetch failure keeps the listing
dkackman Nov 3, 2026
c0fc44e
refactor(components): ratchet - load_component hands the post-load as…
dkackman Nov 3, 2026
1a1907c
refactor(server): ratchet - gallery_metadata reads a file's provenanc…
dkackman Nov 3, 2026
87eb009
docs(architecture): ratchet - rows name h3_anchor_stats, pipeline_h3 …
dkackman Nov 3, 2026
151106b
style: ratchet - ruff format on h3_anchor
dkackman Nov 3, 2026
a551f9d
test(shots): ratchet - the chain's AudioVideo site is _stitched
dkackman Nov 3, 2026
ede5fda
Merge fix/0.19.0-ratchet-backend: ratchet splits for 0.19.0
dkackman Nov 3, 2026
6120651
chore(ratchet): modules 237 -> 243 for 0.19.0
dkackman Nov 3, 2026
15a5b2e
Merge fix/0.19.0-ratchet-ui: UI ratchet splits and the workspace refe…
dkackman Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
413 changes: 192 additions & 221 deletions README.md

Large diffs are not rendered by default.

278 changes: 122 additions & 156 deletions docs/ACCELERATION.md

Large diffs are not rendered by default.

174 changes: 96 additions & 78 deletions docs/AGENT_LOOP.md
Original file line number Diff line number Diff line change
@@ -1,95 +1,113 @@
# Agent Loop

Some of the Issues in this repo are worked by an automated implementer/tester
agent loop, not a human. It lives in a separate repo
([`dkackman/iterate`](https://github.com/dkackman/iterate) — private) that
drives two Claude Code agents in strict alternation against this repo's
Issues. Nothing about running the loop lives here; this page exists so that
anyone who opens or comments on one of its Issues — a human, or another
agent joining in — knows how to act on it correctly.
Some Issues in this repo are worked by an automated agent loop, not a human.
The harness is [`dkackman/harnest`](https://github.com/dkackman/harnest); its
[ticket protocol](https://github.com/dkackman/harnest/blob/main/docs/harness/ticket-protocol.md)
is the full rule set this page summarizes, and `lib/classify.jq` there is the
authoritative map from labels to the session that acts next. Nothing about
running the loop lives here. This page is for anyone, human or agent, who
opens or comments on one of its Issues.

## The two roles

- **Implementer** — has this repo checked out and SSH access to the box
running the MCP server. Reproduces, fixes, deploys, and hands the ticket
- **Implementer**: has this repo checked out and SSH access to the box running
the MCP server. Triages, reproduces, fixes, deploys and hands the ticket
back. Never verifies its own fix.
- **Tester** — talks to the MCP server only as a protocol client (MCP tool
calls), no source checkout, no shell/SSH access to the server box. Its job
is independent verification: it re-runs the original repro over MCP and
either confirms the fix or bounces the ticket back.
- **Tester**: talks to the MCP server only as a protocol client, with no
source checkout and no shell on the server box. It re-runs the original
repro over MCP and either confirms the fix or bounces the ticket.

That asymmetry — the only role that can mark an issue verified is the one
with no ability to patch around a bug — is the entire point of the loop. A
human or third agent joining in should preserve it: don't fix and verify the
same ticket yourself.
The only role that can mark an issue verified is the one that cannot patch
around a bug. Preserve that: do not fix and verify the same ticket yourself.

A third, standalone **regression agent** periodically runs a growing suite
of scripted MCP calls (`regression-suite-*.md` in the `iterate` repo) against
the live server and files/comments on Issues for anything that regresses. It
doesn't participate in the implementer/tester handoff.
Other sessions in the harness:

- **Lead** (`owner:lead`): designs a feature with Don, turns an `idea` into a
feature or a single fix, or closes it.
- **Docs reviewer**: read-only; closes a `docs-review` ticket.
- **Regression agent**: runs the scripted MCP suites (`regression-suite-*.md`
in harnest) against the live server and files `regression` and
`performance` issues. It takes no part in the implementer/tester hand-off.

## Outside filings

The loop runs as one GitHub login (the repo owner's) and must not act
unattended on text filed by anyone else in this public repo. An issue filed
under a different login — including a `field-report` from someone else's
session — is relabelled `owner:don` + `status:needs-approval` before either
role works it, and is handed to the loop, or not, only after the maintainer
reviews it.
The loop runs as the repo owner's GitHub login and must not act unattended on
text anyone else filed in this public repo. An issue from another login,
including a `field-report` from someone else's session, is relabelled
`owner:don` + `status:needs-approval` before any role works it, and reaches
the loop only if the maintainer hands it back.

**Security findings are never public issues.** A boundary that did not hold
(a gate, a path, a URL, a disclosure, a destructive call without
acknowledgement) goes to a draft GitHub security advisory. No agent may add
the `security` label.

## Reading a ticket

Tickets use the **MCP agent-loop ticket** issue template. Two label
families carry all the state — check both before acting:

- **`owner:*`** — exactly one of `owner:implementer` / `owner:tester` /
`owner:don` at a time: whoever is expected to act on it next. If you're
not that owner, leave the issue alone beyond reading it (or the specific
handoff comment/label a role prompt allows).
- **`status:*`** — where the ticket is in its lifecycle:
- *(no status label)* — open, ready for the implementer to reproduce.
- `status:fixed-pending-verify` — implementer has fixed and deployed;
waiting on the tester to re-run the repro over MCP.
- `status:verified` — tester confirmed the fix over MCP; issue is closed
as `completed`.
- `status:needs-info` — a question bounce; whoever is asked needs to
answer before work continues.
- `status:needs-approval` (+ `owner:don`) — parked for the human. The
implementer uses this for anything beyond a rename-level change
(engine behavior, breaking syntax). Neither agent touches a parked
issue.

Two built-in GitHub labels close a ticket without a fix:

- **`wontfix`** — the implementer's call, with a reason in a comment; issue
closed as `not planned`. The tester may reopen once with new evidence; a
second `wontfix` is final.
- **`duplicate`** — closed as `not planned`, with a comment naming the
issue it duplicates (`duplicate of #NN`). A closed issue is still
canonical for duplicate detection — the implementer checks
`gh issue list --state all` before starting work, not just open issues.

`breaking-change` marks an Issue whose fix changed the MCP interface, so the
tester adjusts its calls instead of filing the change as a new bug.
Tickets use the **MCP agent-loop ticket** issue template (ideas use **MCP
agent-loop idea**). Two label families carry the state; check both before
acting.

**`owner:*`** is exactly one of `owner:implementer`, `owner:tester`,
`owner:lead` or `owner:don`: whoever acts next. If it is not you, leave the
issue alone beyond reading it. The owner label is the only signal: a status
addressed to Don is stale once he swaps the owner back.

**`status:*`** is where the ticket is:

| Label | Meaning |
| --- | --- |
| *(none)* | Open, ready for the implementer to reproduce |
| `status:fixed-pending-verify` | Fixed and deployed; the tester re-runs the repro over MCP |
| `status:verified` | The tester confirmed the fix over MCP; closed as `completed` |
| `status:reviewed` | A `docs-review` fix closed by the docs reviewer (never `status:verified`) |
| `status:needs-info` | A question bounce; whoever is asked answers before work continues |
| `status:needs-approval` | With `owner:don`: parked for the human, after a written proposal. Required for engine or syntax changes and anything breaking beyond a rename. Neither agent touches it |
| `status:plan-review` | A feature plan is posted and waiting for Don |
| `status:plan-approved` | Don approved the plan. Only Don adds it |
| `status:needs-spec` | The tester writes acceptance cases for the plan's stages |

Labels that close a ticket without a fix:

- **`wontfix`**: the implementer's call, with a reason in a comment; closed as
`not planned`. The tester may reopen once with new evidence; a second
`wontfix` is final.
- **`duplicate`**: closed as `not planned` with `duplicate of #NN` in a
comment. Closed issues count for duplicate detection
(`gh issue list --state all`). A verified issue that reproduces again is not
a duplicate: it becomes a new `regression` issue (`regression of #NN`), and
nobody reopens the old one.

Other labels:

| Label | Meaning |
| --- | --- |
| `docs-review` | A fix to text neither the server nor the plugin serves; the docs reviewer verifies it instead of the tester |
| `breaking-change` | The fix changed the MCP interface; the tester adjusts its calls rather than filing a new bug |
| `field-report` | Filed from Don's own dw sessions, not the harness |
| `regression`, `performance` | Filed by the regression agent |
| `idea` | An idea for the lead to assess |
| `feature`, `stage` | Work designed with Don and built in stages; a `stage` is a child issue of one feature |
| `lane:batch` | A plan review with no question of a kind Don decides, approved in a batch |
| `parked` | Deferred: on `owner:lead`, until every blocking issue closes; on `owner:don`, Don's |
| `release`, `release-blocker` | While an open `release` issue exists, only `release-blocker` issues move |
| `stabilization`, `arch-approved` | dw's stabilization freeze (in force while `docs/stabilization/FREEZE` exists on `develop`): work parked for it, and new surface Don approved during it |
| `arch-review` | A hand-off waiting on the architecture reviewer, who checks it against `docs/ARCHITECTURE.md` and passes or bounces it |
| `consolidation` | Filed weekly from `scripts/arch_report.py`; Don plans it (to `owner:lead`) or closes it |
| `backend:shared`, `backend:cuda`, `backend:mps` | What the bug is about |
| `target:lem`, `target:mini-ai`, `target:minid`, `target:local` | Which server's loop claims it; a non-lem target is for Don to triage |
| `verified-on:mps` | Verified on the Mac only; CUDA has not re-verified the fix |
| `priority:2`, `priority:3` | Backlog rank |

## If you want to participate

Whether you're a human or another agent:

- Only touch an issue that's currently owned by you (or, for a human, one
parked with `owner:don`).
- When you hand a ticket to the next owner, swap the `owner:*` label and
say what you did in a comment — the next actor has no memory of this
session, only the issue thread.
- Keep implementer and tester roles separate. If you're fixing code, don't
also close the issue as verified — that requires an independent MCP call
from someone who didn't write the patch.
- Reference the issue number in any commit that fixes it
(`fix(mcp): #42 - ...`), and work on a branch merged to `develop`, never
`master`.
- Only the tester (or an equivalently independent verifier) closes an issue
as `completed`/`status:verified`, and only after a real MCP call
reproduces the fix — not by reading the diff.

See the `iterate` repo's `CLAUDE.md` for the full protocol this is
summarized from, including how the automated loop itself is run.
- Only touch an issue owned by you (or, for a human, one parked with
`owner:don`).
- To hand a ticket on, swap the `owner:*` label and say what you did in a
comment. The next actor has no memory of your session, only the thread.
- Keep implementer and tester separate. Only the tester (or an equally
independent verifier) closes an issue as `completed` with
`status:verified`, and only after a real MCP call shows the fix, not by
reading the diff. The one exception is `docs-review`.
- Reference the issue in the commit that fixes it, with a scope
(`fix(mcp): #42 - ...`), on a branch merged to `develop`, never `master`.
Loading
Loading