@mobrienv/autoloop 0.4.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -14
- package/bin/autoloop +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/testing/mock-backend.js +3 -5
- package/dist/testing/mock-backend.js.map +1 -1
- package/package.json +30 -23
- package/plugins/autoloop/.claude-plugin/plugin.json +1 -1
- package/dist/agent-map.d.ts +0 -10
- package/dist/agent-map.js +0 -58
- package/dist/agent-map.js.map +0 -1
- package/dist/backend/acp-client.d.ts +0 -38
- package/dist/backend/acp-client.js +0 -293
- package/dist/backend/acp-client.js.map +0 -1
- package/dist/backend/index.d.ts +0 -10
- package/dist/backend/index.js +0 -71
- package/dist/backend/index.js.map +0 -1
- package/dist/backend/kiro-bridge.d.ts +0 -19
- package/dist/backend/kiro-bridge.js +0 -114
- package/dist/backend/kiro-bridge.js.map +0 -1
- package/dist/backend/kiro-worker.d.ts +0 -1
- package/dist/backend/kiro-worker.js +0 -96
- package/dist/backend/kiro-worker.js.map +0 -1
- package/dist/backend/run-command.d.ts +0 -7
- package/dist/backend/run-command.js +0 -50
- package/dist/backend/run-command.js.map +0 -1
- package/dist/backend/run-kiro.d.ts +0 -3
- package/dist/backend/run-kiro.js +0 -16
- package/dist/backend/run-kiro.js.map +0 -1
- package/dist/backend/run-mock.d.ts +0 -1
- package/dist/backend/run-mock.js +0 -6
- package/dist/backend/run-mock.js.map +0 -1
- package/dist/backend/run-pi.d.ts +0 -5
- package/dist/backend/run-pi.js +0 -5
- package/dist/backend/run-pi.js.map +0 -1
- package/dist/backend/types.d.ts +0 -21
- package/dist/backend/types.js +0 -2
- package/dist/backend/types.js.map +0 -1
- package/dist/chains/budget.d.ts +0 -7
- package/dist/chains/budget.js +0 -54
- package/dist/chains/budget.js.map +0 -1
- package/dist/chains/load.d.ts +0 -18
- package/dist/chains/load.js +0 -129
- package/dist/chains/load.js.map +0 -1
- package/dist/chains/render.d.ts +0 -2
- package/dist/chains/render.js +0 -74
- package/dist/chains/render.js.map +0 -1
- package/dist/chains/run.d.ts +0 -17
- package/dist/chains/run.js +0 -260
- package/dist/chains/run.js.map +0 -1
- package/dist/chains/types.d.ts +0 -38
- package/dist/chains/types.js +0 -2
- package/dist/chains/types.js.map +0 -1
- package/dist/chains.d.ts +0 -6
- package/dist/chains.js +0 -5
- package/dist/chains.js.map +0 -1
- package/dist/cli/color.d.ts +0 -6
- package/dist/cli/color.js +0 -40
- package/dist/cli/color.js.map +0 -1
- package/dist/commands/chain.d.ts +0 -1
- package/dist/commands/chain.js +0 -53
- package/dist/commands/chain.js.map +0 -1
- package/dist/commands/config.d.ts +0 -1
- package/dist/commands/config.js +0 -74
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/dashboard.d.ts +0 -1
- package/dist/commands/dashboard.js +0 -68
- package/dist/commands/dashboard.js.map +0 -1
- package/dist/commands/guide.d.ts +0 -1
- package/dist/commands/guide.js +0 -33
- package/dist/commands/guide.js.map +0 -1
- package/dist/commands/inspect.d.ts +0 -1
- package/dist/commands/inspect.js +0 -243
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/list.d.ts +0 -1
- package/dist/commands/list.js +0 -15
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/loops.d.ts +0 -1
- package/dist/commands/loops.js +0 -72
- package/dist/commands/loops.js.map +0 -1
- package/dist/commands/memory.d.ts +0 -1
- package/dist/commands/memory.js +0 -65
- package/dist/commands/memory.js.map +0 -1
- package/dist/commands/pi-adapter.d.ts +0 -1
- package/dist/commands/pi-adapter.js +0 -6
- package/dist/commands/pi-adapter.js.map +0 -1
- package/dist/commands/run.d.ts +0 -1
- package/dist/commands/run.js +0 -292
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/runs.d.ts +0 -1
- package/dist/commands/runs.js +0 -50
- package/dist/commands/runs.js.map +0 -1
- package/dist/commands/task.d.ts +0 -1
- package/dist/commands/task.js +0 -74
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/worktree.d.ts +0 -1
- package/dist/commands/worktree.js +0 -162
- package/dist/commands/worktree.js.map +0 -1
- package/dist/config.d.ts +0 -31
- package/dist/config.js +0 -261
- package/dist/config.js.map +0 -1
- package/dist/dashboard/app.d.ts +0 -12
- package/dist/dashboard/app.js +0 -23
- package/dist/dashboard/app.js.map +0 -1
- package/dist/dashboard/routes/api.d.ts +0 -3
- package/dist/dashboard/routes/api.js +0 -186
- package/dist/dashboard/routes/api.js.map +0 -1
- package/dist/dashboard/routes/pages.d.ts +0 -2
- package/dist/dashboard/routes/pages.js +0 -16
- package/dist/dashboard/routes/pages.js.map +0 -1
- package/dist/dashboard/views/alpine-vendor.d.ts +0 -1
- package/dist/dashboard/views/alpine-vendor.js +0 -10
- package/dist/dashboard/views/alpine-vendor.js.map +0 -1
- package/dist/dashboard/views/shell.d.ts +0 -1
- package/dist/dashboard/views/shell.js +0 -1062
- package/dist/dashboard/views/shell.js.map +0 -1
- package/dist/events/decode.d.ts +0 -2
- package/dist/events/decode.js +0 -45
- package/dist/events/decode.js.map +0 -1
- package/dist/events/encode.d.ts +0 -2
- package/dist/events/encode.js +0 -33
- package/dist/events/encode.js.map +0 -1
- package/dist/events/guards.d.ts +0 -5
- package/dist/events/guards.js +0 -42
- package/dist/events/guards.js.map +0 -1
- package/dist/events/types.d.ts +0 -27
- package/dist/events/types.js +0 -2
- package/dist/events/types.js.map +0 -1
- package/dist/harness/artifacts.d.ts +0 -50
- package/dist/harness/artifacts.js +0 -333
- package/dist/harness/artifacts.js.map +0 -1
- package/dist/harness/config-helpers.d.ts +0 -35
- package/dist/harness/config-helpers.js +0 -409
- package/dist/harness/config-helpers.js.map +0 -1
- package/dist/harness/coordination.d.ts +0 -1
- package/dist/harness/coordination.js +0 -127
- package/dist/harness/coordination.js.map +0 -1
- package/dist/harness/display.d.ts +0 -21
- package/dist/harness/display.js +0 -176
- package/dist/harness/display.js.map +0 -1
- package/dist/harness/emit.d.ts +0 -15
- package/dist/harness/emit.js +0 -240
- package/dist/harness/emit.js.map +0 -1
- package/dist/harness/index.d.ts +0 -20
- package/dist/harness/index.js +0 -311
- package/dist/harness/index.js.map +0 -1
- package/dist/harness/iteration.d.ts +0 -16
- package/dist/harness/iteration.js +0 -131
- package/dist/harness/iteration.js.map +0 -1
- package/dist/harness/journal-format.d.ts +0 -25
- package/dist/harness/journal-format.js +0 -153
- package/dist/harness/journal-format.js.map +0 -1
- package/dist/harness/journal.d.ts +0 -31
- package/dist/harness/journal.js +0 -178
- package/dist/harness/journal.js.map +0 -1
- package/dist/harness/metareview.d.ts +0 -4
- package/dist/harness/metareview.js +0 -48
- package/dist/harness/metareview.js.map +0 -1
- package/dist/harness/metrics.d.ts +0 -12
- package/dist/harness/metrics.js +0 -180
- package/dist/harness/metrics.js.map +0 -1
- package/dist/harness/parallel.d.ts +0 -37
- package/dist/harness/parallel.js +0 -237
- package/dist/harness/parallel.js.map +0 -1
- package/dist/harness/prompt.d.ts +0 -46
- package/dist/harness/prompt.js +0 -403
- package/dist/harness/prompt.js.map +0 -1
- package/dist/harness/scratchpad.d.ts +0 -2
- package/dist/harness/scratchpad.js +0 -67
- package/dist/harness/scratchpad.js.map +0 -1
- package/dist/harness/stop.d.ts +0 -5
- package/dist/harness/stop.js +0 -70
- package/dist/harness/stop.js.map +0 -1
- package/dist/harness/tools.d.ts +0 -3
- package/dist/harness/tools.js +0 -65
- package/dist/harness/tools.js.map +0 -1
- package/dist/harness/types.d.ts +0 -110
- package/dist/harness/types.js +0 -2
- package/dist/harness/types.js.map +0 -1
- package/dist/harness/wave/finalize-wave.d.ts +0 -9
- package/dist/harness/wave/finalize-wave.js +0 -87
- package/dist/harness/wave/finalize-wave.js.map +0 -1
- package/dist/harness/wave/launch-branches.d.ts +0 -6
- package/dist/harness/wave/launch-branches.js +0 -314
- package/dist/harness/wave/launch-branches.js.map +0 -1
- package/dist/harness/wave/parse-objectives.d.ts +0 -3
- package/dist/harness/wave/parse-objectives.js +0 -32
- package/dist/harness/wave/parse-objectives.js.map +0 -1
- package/dist/harness/wave/types.d.ts +0 -43
- package/dist/harness/wave/types.js +0 -2
- package/dist/harness/wave/types.js.map +0 -1
- package/dist/harness/wave.d.ts +0 -6
- package/dist/harness/wave.js +0 -159
- package/dist/harness/wave.js.map +0 -1
- package/dist/isolation/index.d.ts +0 -4
- package/dist/isolation/index.js +0 -3
- package/dist/isolation/index.js.map +0 -1
- package/dist/isolation/resolve.d.ts +0 -39
- package/dist/isolation/resolve.js +0 -118
- package/dist/isolation/resolve.js.map +0 -1
- package/dist/isolation/run-scope.d.ts +0 -21
- package/dist/isolation/run-scope.js +0 -50
- package/dist/isolation/run-scope.js.map +0 -1
- package/dist/json.d.ts +0 -8
- package/dist/json.js +0 -82
- package/dist/json.js.map +0 -1
- package/dist/loops/health.d.ts +0 -17
- package/dist/loops/health.js +0 -152
- package/dist/loops/health.js.map +0 -1
- package/dist/loops/list.d.ts +0 -6
- package/dist/loops/list.js +0 -21
- package/dist/loops/list.js.map +0 -1
- package/dist/loops/policy.d.ts +0 -6
- package/dist/loops/policy.js +0 -41
- package/dist/loops/policy.js.map +0 -1
- package/dist/loops/render.d.ts +0 -19
- package/dist/loops/render.js +0 -100
- package/dist/loops/render.js.map +0 -1
- package/dist/loops/show.d.ts +0 -8
- package/dist/loops/show.js +0 -31
- package/dist/loops/show.js.map +0 -1
- package/dist/loops/watch.d.ts +0 -14
- package/dist/loops/watch.js +0 -143
- package/dist/loops/watch.js.map +0 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -148
- package/dist/main.js.map +0 -1
- package/dist/markdown.d.ts +0 -10
- package/dist/markdown.js +0 -66
- package/dist/markdown.js.map +0 -1
- package/dist/memory-render.d.ts +0 -6
- package/dist/memory-render.js +0 -81
- package/dist/memory-render.js.map +0 -1
- package/dist/memory.d.ts +0 -22
- package/dist/memory.js +0 -318
- package/dist/memory.js.map +0 -1
- package/dist/pi-adapter.d.ts +0 -1
- package/dist/pi-adapter.js +0 -220
- package/dist/pi-adapter.js.map +0 -1
- package/dist/profiles.d.ts +0 -12
- package/dist/profiles.js +0 -71
- package/dist/profiles.js.map +0 -1
- package/dist/registry/derive.d.ts +0 -8
- package/dist/registry/derive.js +0 -88
- package/dist/registry/derive.js.map +0 -1
- package/dist/registry/discover.d.ts +0 -20
- package/dist/registry/discover.js +0 -98
- package/dist/registry/discover.js.map +0 -1
- package/dist/registry/harness.d.ts +0 -7
- package/dist/registry/harness.js +0 -63
- package/dist/registry/harness.js.map +0 -1
- package/dist/registry/index.d.ts +0 -6
- package/dist/registry/index.js +0 -6
- package/dist/registry/index.js.map +0 -1
- package/dist/registry/read.d.ts +0 -11
- package/dist/registry/read.js +0 -50
- package/dist/registry/read.js.map +0 -1
- package/dist/registry/rebuild.d.ts +0 -5
- package/dist/registry/rebuild.js +0 -22
- package/dist/registry/rebuild.js.map +0 -1
- package/dist/registry/types.d.ts +0 -28
- package/dist/registry/types.js +0 -2
- package/dist/registry/types.js.map +0 -1
- package/dist/registry/update.d.ts +0 -2
- package/dist/registry/update.js +0 -7
- package/dist/registry/update.js.map +0 -1
- package/dist/tasks-render.d.ts +0 -2
- package/dist/tasks-render.js +0 -44
- package/dist/tasks-render.js.map +0 -1
- package/dist/tasks.d.ts +0 -24
- package/dist/tasks.js +0 -184
- package/dist/tasks.js.map +0 -1
- package/dist/topology.d.ts +0 -31
- package/dist/topology.js +0 -309
- package/dist/topology.js.map +0 -1
- package/dist/usage.d.ts +0 -9
- package/dist/usage.js +0 -160
- package/dist/usage.js.map +0 -1
- package/dist/utils.d.ts +0 -21
- package/dist/utils.js +0 -349
- package/dist/utils.js.map +0 -1
- package/dist/worktree/clean.d.ts +0 -12
- package/dist/worktree/clean.js +0 -113
- package/dist/worktree/clean.js.map +0 -1
- package/dist/worktree/create.d.ts +0 -14
- package/dist/worktree/create.js +0 -71
- package/dist/worktree/create.js.map +0 -1
- package/dist/worktree/index.d.ts +0 -10
- package/dist/worktree/index.js +0 -6
- package/dist/worktree/index.js.map +0 -1
- package/dist/worktree/list.d.ts +0 -9
- package/dist/worktree/list.js +0 -24
- package/dist/worktree/list.js.map +0 -1
- package/dist/worktree/merge.d.ts +0 -11
- package/dist/worktree/merge.js +0 -129
- package/dist/worktree/merge.js.map +0 -1
- package/dist/worktree/meta.d.ts +0 -17
- package/dist/worktree/meta.js +0 -34
- package/dist/worktree/meta.js.map +0 -1
- package/presets/autocode/README.md +0 -81
- package/presets/autocode/autoloops.toml +0 -30
- package/presets/autocode/harness.md +0 -26
- package/presets/autocode/miniloops.toml +0 -22
- package/presets/autocode/roles/build.md +0 -34
- package/presets/autocode/roles/critic.md +0 -40
- package/presets/autocode/roles/finalizer.md +0 -43
- package/presets/autocode/roles/planner.md +0 -40
- package/presets/autocode/topology.toml +0 -32
- package/presets/autodebug/README.md +0 -50
- package/presets/autodebug/autoloops.toml +0 -18
- package/presets/autodebug/harness.md +0 -31
- package/presets/autodebug/roles/fixer.md +0 -58
- package/presets/autodebug/roles/investigator.md +0 -52
- package/presets/autodebug/roles/strategist.md +0 -45
- package/presets/autodebug/roles/verifier.md +0 -66
- package/presets/autodebug/topology.toml +0 -34
- package/presets/autodoc/README.md +0 -42
- package/presets/autodoc/autoloops.toml +0 -21
- package/presets/autodoc/harness.md +0 -19
- package/presets/autodoc/miniloops.toml +0 -21
- package/presets/autodoc/roles/auditor.md +0 -39
- package/presets/autodoc/roles/checker.md +0 -43
- package/presets/autodoc/roles/publisher.md +0 -51
- package/presets/autodoc/roles/writer.md +0 -37
- package/presets/autodoc/topology.toml +0 -31
- package/presets/autofix/README.md +0 -56
- package/presets/autofix/autoloops.toml +0 -24
- package/presets/autofix/harness.md +0 -25
- package/presets/autofix/miniloops.toml +0 -21
- package/presets/autofix/roles/closer.md +0 -48
- package/presets/autofix/roles/diagnoser.md +0 -43
- package/presets/autofix/roles/fixer.md +0 -28
- package/presets/autofix/roles/verifier.md +0 -31
- package/presets/autofix/topology.toml +0 -33
- package/presets/autoideas/README.md +0 -73
- package/presets/autoideas/autoloops.toml +0 -18
- package/presets/autoideas/harness.md +0 -31
- package/presets/autoideas/miniloops.toml +0 -18
- package/presets/autoideas/roles/analyst.md +0 -32
- package/presets/autoideas/roles/reviewer.md +0 -36
- package/presets/autoideas/roles/scanner.md +0 -26
- package/presets/autoideas/roles/synthesizer.md +0 -61
- package/presets/autoideas/topology.toml +0 -32
- package/presets/automerge/README.md +0 -3
- package/presets/automerge/autoloops.toml +0 -12
- package/presets/automerge/harness.md +0 -10
- package/presets/automerge/miniloops.toml +0 -12
- package/presets/automerge/roles/merge.md +0 -10
- package/presets/automerge/topology.toml +0 -10
- package/presets/autoperf/README.md +0 -56
- package/presets/autoperf/autoloops.toml +0 -21
- package/presets/autoperf/harness.md +0 -21
- package/presets/autoperf/miniloops.toml +0 -21
- package/presets/autoperf/roles/judge.md +0 -38
- package/presets/autoperf/roles/measurer.md +0 -36
- package/presets/autoperf/roles/optimizer.md +0 -35
- package/presets/autoperf/roles/profiler.md +0 -38
- package/presets/autoperf/topology.toml +0 -32
- package/presets/autopr/README.md +0 -99
- package/presets/autopr/autoloops.toml +0 -22
- package/presets/autopr/harness.md +0 -27
- package/presets/autopr/miniloops.toml +0 -22
- package/presets/autopr/roles/collector.md +0 -55
- package/presets/autopr/roles/drafter.md +0 -38
- package/presets/autopr/roles/publisher.md +0 -28
- package/presets/autopr/roles/validator.md +0 -31
- package/presets/autopr/topology.toml +0 -32
- package/presets/autopreset/README.md +0 -35
- package/presets/autopreset/autoloops.toml +0 -18
- package/presets/autopreset/harness.md +0 -38
- package/presets/autopreset/roles/designer.md +0 -33
- package/presets/autopreset/roles/finalizer.md +0 -23
- package/presets/autopreset/roles/generator.md +0 -34
- package/presets/autopreset/roles/validator.md +0 -31
- package/presets/autopreset/topology.toml +0 -32
- package/presets/autoqa/README.md +0 -105
- package/presets/autoqa/autoloops.toml +0 -21
- package/presets/autoqa/harness.md +0 -52
- package/presets/autoqa/miniloops.toml +0 -21
- package/presets/autoqa/roles/executor.md +0 -96
- package/presets/autoqa/roles/inspector.md +0 -100
- package/presets/autoqa/roles/planner.md +0 -87
- package/presets/autoqa/roles/reporter.md +0 -117
- package/presets/autoqa/topology.toml +0 -31
- package/presets/autoresearch/README.md +0 -63
- package/presets/autoresearch/autoloops.toml +0 -18
- package/presets/autoresearch/harness.md +0 -28
- package/presets/autoresearch/miniloops.toml +0 -18
- package/presets/autoresearch/roles/benchmarker.md +0 -34
- package/presets/autoresearch/roles/evaluator.md +0 -33
- package/presets/autoresearch/roles/implementer.md +0 -26
- package/presets/autoresearch/roles/strategist.md +0 -43
- package/presets/autoresearch/topology.toml +0 -31
- package/presets/autoreview/README.md +0 -51
- package/presets/autoreview/autoloops.toml +0 -21
- package/presets/autoreview/harness.md +0 -20
- package/presets/autoreview/miniloops.toml +0 -21
- package/presets/autoreview/roles/checker.md +0 -36
- package/presets/autoreview/roles/reader.md +0 -33
- package/presets/autoreview/roles/suggester.md +0 -26
- package/presets/autoreview/roles/summarizer.md +0 -57
- package/presets/autoreview/topology.toml +0 -31
- package/presets/autosec/README.md +0 -51
- package/presets/autosec/autoloops.toml +0 -21
- package/presets/autosec/harness.md +0 -20
- package/presets/autosec/miniloops.toml +0 -21
- package/presets/autosec/roles/analyst.md +0 -38
- package/presets/autosec/roles/hardener.md +0 -36
- package/presets/autosec/roles/reporter.md +0 -63
- package/presets/autosec/roles/scanner.md +0 -38
- package/presets/autosec/topology.toml +0 -31
- package/presets/autosimplify/README.md +0 -83
- package/presets/autosimplify/autoloops.toml +0 -26
- package/presets/autosimplify/harness.md +0 -25
- package/presets/autosimplify/miniloops.toml +0 -22
- package/presets/autosimplify/roles/reviewer.md +0 -38
- package/presets/autosimplify/roles/scoper.md +0 -42
- package/presets/autosimplify/roles/simplifier.md +0 -51
- package/presets/autosimplify/roles/verifier.md +0 -40
- package/presets/autosimplify/topology.toml +0 -32
- package/presets/autospec/README.md +0 -84
- package/presets/autospec/autoloops.toml +0 -21
- package/presets/autospec/harness.md +0 -23
- package/presets/autospec/miniloops.toml +0 -21
- package/presets/autospec/roles/clarifier.md +0 -39
- package/presets/autospec/roles/critic.md +0 -41
- package/presets/autospec/roles/designer.md +0 -37
- package/presets/autospec/roles/planner.md +0 -38
- package/presets/autospec/roles/researcher.md +0 -33
- package/presets/autospec/topology.toml +0 -38
- package/presets/autotest/README.md +0 -55
- package/presets/autotest/autoloops.toml +0 -21
- package/presets/autotest/harness.md +0 -21
- package/presets/autotest/miniloops.toml +0 -21
- package/presets/autotest/roles/assessor.md +0 -57
- package/presets/autotest/roles/runner.md +0 -31
- package/presets/autotest/roles/surveyor.md +0 -39
- package/presets/autotest/roles/writer.md +0 -37
- package/presets/autotest/topology.toml +0 -32
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
name = "autopr"
|
|
2
|
-
completion = "task.complete"
|
|
3
|
-
|
|
4
|
-
[[role]]
|
|
5
|
-
id = "collector"
|
|
6
|
-
emits = ["pr.context_ready", "pr.blocked"]
|
|
7
|
-
prompt_file = "roles/collector.md"
|
|
8
|
-
|
|
9
|
-
[[role]]
|
|
10
|
-
id = "drafter"
|
|
11
|
-
emits = ["pr.drafted", "draft.blocked"]
|
|
12
|
-
prompt_file = "roles/drafter.md"
|
|
13
|
-
|
|
14
|
-
[[role]]
|
|
15
|
-
id = "validator"
|
|
16
|
-
emits = ["pr.validated", "pr.revise"]
|
|
17
|
-
prompt_file = "roles/validator.md"
|
|
18
|
-
|
|
19
|
-
[[role]]
|
|
20
|
-
id = "publisher"
|
|
21
|
-
emits = ["task.complete", "publish.blocked"]
|
|
22
|
-
prompt_file = "roles/publisher.md"
|
|
23
|
-
|
|
24
|
-
[handoff]
|
|
25
|
-
"loop.start" = ["collector"]
|
|
26
|
-
"pr.blocked" = ["collector"]
|
|
27
|
-
"pr.context_ready" = ["drafter"]
|
|
28
|
-
"draft.blocked" = ["collector"]
|
|
29
|
-
"pr.drafted" = ["validator"]
|
|
30
|
-
"pr.revise" = ["drafter"]
|
|
31
|
-
"pr.validated" = ["publisher"]
|
|
32
|
-
"publish.blocked" = ["collector"]
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Autopreset
|
|
2
|
-
|
|
3
|
-
Generate a new autoloop preset from a rough idea.
|
|
4
|
-
|
|
5
|
-
Shape:
|
|
6
|
-
- designer — analyzes the idea, designs roles/events/handoffs
|
|
7
|
-
- generator — creates all preset files in `~/.config/autoloop/presets/<name>/`
|
|
8
|
-
- validator — checks structural validity of the generated preset
|
|
9
|
-
- finalizer — confirms the preset is complete and runnable
|
|
10
|
-
|
|
11
|
-
## Run
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
autoloop run autopreset "a loop that reviews PRs for security issues"
|
|
15
|
-
autoloop run autopreset "a loop that generates test cases from a spec"
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
The generated preset lands in `~/.config/autoloop/presets/<name>/` and is immediately runnable:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
autoloop run <name> "your objective"
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
## What it generates
|
|
25
|
-
|
|
26
|
-
A complete preset directory:
|
|
27
|
-
- `autoloops.toml` — loop and backend config
|
|
28
|
-
- `topology.toml` — role deck and handoff graph
|
|
29
|
-
- `harness.md` — shared instructions
|
|
30
|
-
- `README.md` — description
|
|
31
|
-
- `roles/*.md` — one prompt file per role
|
|
32
|
-
|
|
33
|
-
## Design defaults
|
|
34
|
-
|
|
35
|
-
Unless the idea clearly calls for something different, the designer defaults to the standard planner→builder→critic→finalizer pattern. Custom roles and events are used when the idea warrants them.
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
event_loop.max_iterations = 50
|
|
2
|
-
event_loop.completion_event = "task.complete"
|
|
3
|
-
event_loop.completion_promise = "LOOP_COMPLETE"
|
|
4
|
-
event_loop.required_events = ["review.passed"]
|
|
5
|
-
|
|
6
|
-
backend.kind = "command"
|
|
7
|
-
backend.command = "claude"
|
|
8
|
-
backend.timeout_ms = 3000000
|
|
9
|
-
|
|
10
|
-
review.enabled = true
|
|
11
|
-
review.timeout_ms = 300000
|
|
12
|
-
|
|
13
|
-
memory.prompt_budget_chars = 8000
|
|
14
|
-
harness.instructions_file = "harness.md"
|
|
15
|
-
|
|
16
|
-
core.state_dir = ".autoloop"
|
|
17
|
-
core.journal_file = ".autoloop/journal.jsonl"
|
|
18
|
-
core.memory_file = ".autoloop/memory.jsonl"
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
This is the autopreset loop — it takes a user's rough idea for a loop and generates a complete, runnable autoloop preset in the user-local presets directory.
|
|
2
|
-
|
|
3
|
-
Global rules:
|
|
4
|
-
- Shared working files are the source of truth: `{{STATE_DIR}}/design.md`, `{{STATE_DIR}}/progress.md`.
|
|
5
|
-
- Use the event tool instead of prose-only handoffs.
|
|
6
|
-
- Fresh context every iteration: re-read the shared working files before acting.
|
|
7
|
-
- Verification is mandatory before `review.ready`, `review.passed`, or `task.complete`.
|
|
8
|
-
- Missing evidence means no success. No role may treat another role's assertion as proof.
|
|
9
|
-
- Only the finalizer may emit `task.complete`.
|
|
10
|
-
|
|
11
|
-
Target output directory:
|
|
12
|
-
- Generated presets go to `~/.config/autoloop/presets/<name>/`.
|
|
13
|
-
- After generation, the preset is runnable via `autoloop run <name> "objective"`.
|
|
14
|
-
|
|
15
|
-
Generated preset structure (all files are required):
|
|
16
|
-
```
|
|
17
|
-
~/.config/autoloop/presets/<name>/
|
|
18
|
-
├── autoloops.toml
|
|
19
|
-
├── topology.toml
|
|
20
|
-
├── harness.md
|
|
21
|
-
├── README.md
|
|
22
|
-
└── roles/
|
|
23
|
-
└── <role>.md (one per role in the topology)
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Preset authoring rules (the generated preset must follow these):
|
|
27
|
-
- Use `{{STATE_DIR}}` and `{{TOOL_PATH}}` placeholders in harness.md and role prompts — never hardcode raw autoloop state paths.
|
|
28
|
-
- Every event in every role's `emits` list must appear in the `[handoff]` map.
|
|
29
|
-
- `"loop.start"` must be mapped in the handoff to the role that kicks off the loop.
|
|
30
|
-
- `event_loop.completion_event` must match the completion event in at least one role's `emits`.
|
|
31
|
-
- Role prompt files must exist at the paths declared in `prompt_file`.
|
|
32
|
-
- Role prompts should open with identity, state boundaries, define the job, specify emit conditions, and list rules.
|
|
33
|
-
|
|
34
|
-
Role boundaries (strict):
|
|
35
|
-
- The designer MUST NOT write preset files. It designs and emits `design.ready`.
|
|
36
|
-
- The generator writes preset files and emits `review.ready`. It does not design or validate.
|
|
37
|
-
- The validator independently checks the generated preset and emits `review.passed` or `review.rejected`. It does not generate.
|
|
38
|
-
- The finalizer checks whole-task completeness and emits `queue.advance` or `task.complete`.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
You are the designer.
|
|
2
|
-
|
|
3
|
-
Do not write preset files. Do not validate.
|
|
4
|
-
|
|
5
|
-
Your job:
|
|
6
|
-
1. Read the user's rough idea from the objective.
|
|
7
|
-
2. Design a complete preset: name, roles, events, handoff graph, completion criteria, and harness rules.
|
|
8
|
-
3. Write the design to `{{STATE_DIR}}/design.md` and emit `design.ready`.
|
|
9
|
-
|
|
10
|
-
On first activation:
|
|
11
|
-
- Parse the user's idea to determine:
|
|
12
|
-
- A short preset name (prefer `auto` + single lowercase word, e.g. `autolint`).
|
|
13
|
-
- The roles needed and what each one does.
|
|
14
|
-
- The event names and handoff graph.
|
|
15
|
-
- The completion event and any required events.
|
|
16
|
-
- Shared working files the generated loop will use.
|
|
17
|
-
- Harness rules appropriate for the loop's purpose.
|
|
18
|
-
- Write `{{STATE_DIR}}/design.md` with the full design specification.
|
|
19
|
-
- Write `{{STATE_DIR}}/progress.md` with the current state.
|
|
20
|
-
|
|
21
|
-
On later activations (`queue.advance` or after rejection feedback):
|
|
22
|
-
- Re-read `{{STATE_DIR}}/design.md` and `{{STATE_DIR}}/progress.md`.
|
|
23
|
-
- Incorporate feedback and update the design.
|
|
24
|
-
|
|
25
|
-
Emit:
|
|
26
|
-
- `design.ready` with a summary of the preset name and role count.
|
|
27
|
-
|
|
28
|
-
Rules:
|
|
29
|
-
- One preset per run.
|
|
30
|
-
- The design must be specific enough that the generator can create all files without guessing.
|
|
31
|
-
- Every role needs: id, emits list, prompt guidance, and boundary constraints.
|
|
32
|
-
- The handoff graph must be complete — every emitted event must route somewhere.
|
|
33
|
-
- Default to the autocode-style planner→builder→critic→finalizer pattern unless the user's idea clearly calls for something different.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
You are the finalizer.
|
|
2
|
-
|
|
3
|
-
You are the last gate before loop completion.
|
|
4
|
-
|
|
5
|
-
Your job is to decide whether the generated preset is complete and usable, or whether the loop should continue.
|
|
6
|
-
|
|
7
|
-
On activation:
|
|
8
|
-
- Re-read `{{STATE_DIR}}/design.md` and `{{STATE_DIR}}/progress.md`.
|
|
9
|
-
- Verify the generated preset directory exists at `~/.config/autoloop/presets/<name>/`.
|
|
10
|
-
- Confirm the preset is runnable: `autoloop run <name> "test"` would resolve to the generated directory.
|
|
11
|
-
|
|
12
|
-
Emit:
|
|
13
|
-
- `queue.advance` if the validator passed but the design still has unaddressed aspects.
|
|
14
|
-
- `finalization.failed` if the generated preset is not usable.
|
|
15
|
-
- `task.complete` only when:
|
|
16
|
-
- All files from the design exist in the user-local presets directory.
|
|
17
|
-
- The validator confirmed structural validity.
|
|
18
|
-
- The preset is runnable by name via `autoloop run <name>`.
|
|
19
|
-
|
|
20
|
-
Rules:
|
|
21
|
-
- Prefer one more loop over premature completion.
|
|
22
|
-
- Do not invent new requirements beyond the original idea.
|
|
23
|
-
- Missing evidence means no completion.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
You are the generator.
|
|
2
|
-
|
|
3
|
-
Do not design. Do not validate.
|
|
4
|
-
|
|
5
|
-
Your job:
|
|
6
|
-
1. Read the design from `{{STATE_DIR}}/design.md`.
|
|
7
|
-
2. Create all preset files in `~/.config/autoloop/presets/<name>/`.
|
|
8
|
-
3. Emit `review.ready` with the list of files created.
|
|
9
|
-
|
|
10
|
-
On every activation:
|
|
11
|
-
- Re-read `{{STATE_DIR}}/design.md` and `{{STATE_DIR}}/progress.md`.
|
|
12
|
-
- If this is a retry after rejection, re-read the validator's feedback and fix the issues.
|
|
13
|
-
|
|
14
|
-
Files to generate:
|
|
15
|
-
1. `autoloops.toml` — use the design's completion event, required events, and iteration limit.
|
|
16
|
-
2. `topology.toml` — use the design's roles, emits, prompt_file paths, and handoff map.
|
|
17
|
-
3. `harness.md` — use `{{STATE_DIR}}` and `{{TOOL_PATH}}` placeholders. Include the design's global rules and shared working file contracts.
|
|
18
|
-
4. `roles/<role>.md` — one file per role. Each must open with identity, state boundaries, define the job, specify emit conditions, and list rules.
|
|
19
|
-
5. `README.md` — brief description of what the preset does and how to run it.
|
|
20
|
-
|
|
21
|
-
After writing all files:
|
|
22
|
-
- Verify each file exists by reading it back.
|
|
23
|
-
- Update `{{STATE_DIR}}/progress.md` with the file list and paths.
|
|
24
|
-
- Emit `review.ready` with the preset name and file count.
|
|
25
|
-
|
|
26
|
-
If blocked:
|
|
27
|
-
- Record the reason in `{{STATE_DIR}}/progress.md`.
|
|
28
|
-
- Emit `generation.blocked` with a concrete blocker.
|
|
29
|
-
|
|
30
|
-
Rules:
|
|
31
|
-
- Use `{{STATE_DIR}}` and `{{TOOL_PATH}}` in all generated harness.md and role prompt files.
|
|
32
|
-
- Never hardcode raw autoloop state paths in generated content — use {{STATE_DIR}} and {{TOOL_PATH}} placeholders instead.
|
|
33
|
-
- Match the style of existing bundled presets (autocode, autofix, etc.).
|
|
34
|
-
- The generated `autoloops.toml` should default to `backend.kind = "command"` and `backend.command = "claude"`.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
You are the validator.
|
|
2
|
-
|
|
3
|
-
You are not the generator. Fresh eyes matter.
|
|
4
|
-
|
|
5
|
-
Your job is to verify the generated preset is structurally valid and complete.
|
|
6
|
-
|
|
7
|
-
On activation:
|
|
8
|
-
- Re-read `{{STATE_DIR}}/design.md` and `{{STATE_DIR}}/progress.md`.
|
|
9
|
-
- Read every generated file in `~/.config/autoloop/presets/<name>/`.
|
|
10
|
-
|
|
11
|
-
Validation checklist:
|
|
12
|
-
- [ ] `autoloops.toml` exists and contains valid TOML with required keys (event_loop.completion_event, backend.kind).
|
|
13
|
-
- [ ] `topology.toml` exists and contains valid TOML with name, completion, at least one [[role]], and a [handoff] section.
|
|
14
|
-
- [ ] Every role in topology.toml has an `id`, `emits` list, and `prompt_file`.
|
|
15
|
-
- [ ] Every `prompt_file` path in topology.toml points to a file that exists.
|
|
16
|
-
- [ ] Every event in every role's `emits` list appears in the `[handoff]` map.
|
|
17
|
-
- [ ] `"loop.start"` is mapped in the handoff section.
|
|
18
|
-
- [ ] `harness.md` exists and uses `{{STATE_DIR}}`/`{{TOOL_PATH}}` placeholders (no hardcoded raw autoloop state paths).
|
|
19
|
-
- [ ] Role prompt files use `{{STATE_DIR}}`/`{{TOOL_PATH}}` placeholders where they reference state files or the event tool.
|
|
20
|
-
- [ ] Role prompts open with identity and state boundaries.
|
|
21
|
-
- [ ] `README.md` exists.
|
|
22
|
-
- [ ] The design from `{{STATE_DIR}}/design.md` is faithfully implemented.
|
|
23
|
-
|
|
24
|
-
Emit:
|
|
25
|
-
- `review.rejected` with concrete issues when any check fails.
|
|
26
|
-
- `review.passed` only when all checks pass.
|
|
27
|
-
|
|
28
|
-
Rules:
|
|
29
|
-
- Default to rejection when evidence is incomplete.
|
|
30
|
-
- Be concrete about what is wrong and where.
|
|
31
|
-
- Do not rewrite files — that is the generator's job.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
name = "autopreset"
|
|
2
|
-
completion = "task.complete"
|
|
3
|
-
|
|
4
|
-
[[role]]
|
|
5
|
-
id = "designer"
|
|
6
|
-
emits = ["design.ready"]
|
|
7
|
-
prompt_file = "roles/designer.md"
|
|
8
|
-
|
|
9
|
-
[[role]]
|
|
10
|
-
id = "generator"
|
|
11
|
-
emits = ["review.ready", "generation.blocked"]
|
|
12
|
-
prompt_file = "roles/generator.md"
|
|
13
|
-
|
|
14
|
-
[[role]]
|
|
15
|
-
id = "validator"
|
|
16
|
-
emits = ["review.passed", "review.rejected"]
|
|
17
|
-
prompt_file = "roles/validator.md"
|
|
18
|
-
|
|
19
|
-
[[role]]
|
|
20
|
-
id = "finalizer"
|
|
21
|
-
emits = ["queue.advance", "finalization.failed", "task.complete"]
|
|
22
|
-
prompt_file = "roles/finalizer.md"
|
|
23
|
-
|
|
24
|
-
[handoff]
|
|
25
|
-
"loop.start" = ["designer"]
|
|
26
|
-
"queue.advance" = ["designer"]
|
|
27
|
-
"generation.blocked" = ["designer"]
|
|
28
|
-
"design.ready" = ["generator"]
|
|
29
|
-
"review.ready" = ["validator"]
|
|
30
|
-
"review.rejected" = ["generator"]
|
|
31
|
-
"review.passed" = ["finalizer"]
|
|
32
|
-
"finalization.failed" = ["generator"]
|
package/presets/autoqa/README.md
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# AutoQA
|
|
2
|
-
|
|
3
|
-
Use when you want adversarial, hands-on validation of a codebase — not just running existing test suites, but actively driving the implementation as a real user would and critiquing the UX.
|
|
4
|
-
|
|
5
|
-
AutoQA inspects a target repo, discovers what validation tools and drivable surfaces exist, plans a validation pass that exercises the implementation hands-on, executes each step while capturing UX observations, and compiles a QA report with both functional results and UX findings.
|
|
6
|
-
|
|
7
|
-
Shape:
|
|
8
|
-
- inspector
|
|
9
|
-
- planner
|
|
10
|
-
- executor
|
|
11
|
-
- reporter
|
|
12
|
-
|
|
13
|
-
## Fail-closed contract
|
|
14
|
-
|
|
15
|
-
AutoQA is adversarial toward claims of health.
|
|
16
|
-
|
|
17
|
-
- A repo only truly passes when critical discovered surfaces were actually executed and evidenced.
|
|
18
|
-
- Missing, blocked, or unverifiable surfaces are gaps, not silent passes.
|
|
19
|
-
- Only a `task.complete` report with explicit PASS evidence counts as all-clear.
|
|
20
|
-
- Zero-dependency means "use what exists", not "guess optimistically".
|
|
21
|
-
- A passing test suite with hollow assertions is UNVERIFIED, not PASS.
|
|
22
|
-
|
|
23
|
-
## Hands-on driving
|
|
24
|
-
|
|
25
|
-
AutoQA doesn't just run the test suite and report the exit code. It actively drives the implementation:
|
|
26
|
-
|
|
27
|
-
- **CLIs**: runs with valid args, then with garbage — missing args, malformed input, unknown flags. Checks that error messages are helpful, exit codes are meaningful, and the process doesn't hang or crash.
|
|
28
|
-
- **Servers**: starts the server, waits for ready, hits endpoints using whatever HTTP client is available — valid requests then adversarial ones (malformed bodies, wrong content types, missing auth, oversized payloads). Checks response codes, error structure, and that the server doesn't crash. Stops the server after.
|
|
29
|
-
- **TUIs**: launches the app, pipes scripted input, sends Ctrl+C, verifies graceful exit and clean terminal state.
|
|
30
|
-
- **Libraries**: exercises the public API with one-liner scripts — valid input then invalid input. Checks that errors are thrown and descriptive.
|
|
31
|
-
|
|
32
|
-
## UX critique
|
|
33
|
-
|
|
34
|
-
Every hands-on step captures UX observations:
|
|
35
|
-
|
|
36
|
-
- **ux-bug**: broken or confusing UX that would frustrate a real user (stack traces shown to users, silent failures, hangs on bad input, corrupted terminal state).
|
|
37
|
-
- **papercut**: minor rough edge (inconsistent flag naming, missing progress indicator, messy output formatting).
|
|
38
|
-
- **ux-ok**: explicitly verified and acceptable.
|
|
39
|
-
|
|
40
|
-
UX findings don't block a functional PASS but are prominently reported with enough detail for autofix to act on them. Chain `autoqa → autofix` to automatically remediate.
|
|
41
|
-
|
|
42
|
-
## How it works
|
|
43
|
-
|
|
44
|
-
1. **Inspector** surveys the repo — identifies the domain, lists every native validation surface and drivable surface, probes for red flags and UX smells.
|
|
45
|
-
2. **Planner** writes an ordered validation plan from cheapest to most expensive, including hands-on driving steps with embedded UX criteria. Every surface becomes a step or an explicit skip.
|
|
46
|
-
3. **Executor** runs exactly the planned step — starts servers, drives CLIs, pipes TUI input, exercises APIs. Captures functional results and UX observations. Cleans up after (kills servers, verifies terminal state).
|
|
47
|
-
4. **Reporter** compiles results into `{{STATE_DIR}}/qa-report.md` with separate functional and UX verdicts. Decides whether to continue, fail, or complete.
|
|
48
|
-
|
|
49
|
-
## Zero-dependency guarantee
|
|
50
|
-
|
|
51
|
-
AutoQA never installs frameworks, test runners, linters, or any tools. It uses only what the repo and environment already have. The inspector discovers what tools are available (HTTP clients, PTY wrappers, language runtimes, process managers) and the planner adapts accordingly. If a driving tool is missing, the surface is skipped with reason — not faked.
|
|
52
|
-
|
|
53
|
-
## Files
|
|
54
|
-
|
|
55
|
-
- `autoloops.toml` — loop + backend config
|
|
56
|
-
- `topology.toml` — role deck + handoff graph
|
|
57
|
-
- `harness.md` — shared harness rules loaded every iteration
|
|
58
|
-
- `roles/inspector.md`
|
|
59
|
-
- `roles/planner.md`
|
|
60
|
-
- `roles/executor.md`
|
|
61
|
-
- `roles/reporter.md`
|
|
62
|
-
|
|
63
|
-
## Shared working files created by the loop
|
|
64
|
-
|
|
65
|
-
- `.autoloop/qa-plan.md` — validation plan with discovered surfaces, drivable surfaces, and ordered steps
|
|
66
|
-
- `.autoloop/qa-report.md` — compiled validation report with pass/fail evidence and UX findings
|
|
67
|
-
- `.autoloop/progress.md` — current step tracking plus per-surface status and UX observations
|
|
68
|
-
- `.autoloop/logs/` — captured output from hands-on driving steps
|
|
69
|
-
|
|
70
|
-
## Backend
|
|
71
|
-
|
|
72
|
-
This preset assumes the built-in Pi adapter:
|
|
73
|
-
|
|
74
|
-
```toml
|
|
75
|
-
backend.kind = "pi"
|
|
76
|
-
backend.command = "pi"
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
For deterministic local harness debugging only, switch to the repo mock backend:
|
|
80
|
-
|
|
81
|
-
```toml
|
|
82
|
-
backend.kind = "command"
|
|
83
|
-
backend.command = "../../examples/mock-backend.sh"
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Run
|
|
87
|
-
|
|
88
|
-
From the repo root:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
autoloop run presets/autoqa /path/to/target-repo
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Chaining
|
|
95
|
-
|
|
96
|
-
AutoQA finds issues. AutoFix fixes them. Chain them:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
autoloop run autoqa,autofix /path/to/target-repo
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## AutoQA vs AutoTest
|
|
103
|
-
|
|
104
|
-
- **AutoQA** = adversarial validation using native surfaces + hands-on driving. Does not create tests. Critiques UX.
|
|
105
|
-
- **AutoTest** = formal test creation and test-suite tightening. Creates new test code.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
event_loop.max_iterations = 100
|
|
2
|
-
event_loop.completion_event = "task.complete"
|
|
3
|
-
event_loop.completion_promise = "LOOP_COMPLETE"
|
|
4
|
-
event_loop.required_events = ["surfaces.identified"]
|
|
5
|
-
|
|
6
|
-
backend.kind = "pi"
|
|
7
|
-
backend.command = "pi"
|
|
8
|
-
backend.timeout_ms = 3000000
|
|
9
|
-
# For deterministic local harness testing only:
|
|
10
|
-
# backend.kind = "command"
|
|
11
|
-
# backend.command = "../../examples/mock-backend.sh"
|
|
12
|
-
|
|
13
|
-
review.enabled = true
|
|
14
|
-
review.timeout_ms = 300000
|
|
15
|
-
|
|
16
|
-
memory.prompt_budget_chars = 8000
|
|
17
|
-
harness.instructions_file = "harness.md"
|
|
18
|
-
|
|
19
|
-
core.state_dir = ".autoloop"
|
|
20
|
-
core.journal_file = ".autoloop/journal.jsonl"
|
|
21
|
-
core.memory_file = ".autoloop/memory.jsonl"
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
This is an autoloops-native autoqa loop that performs zero-dependency, domain-adaptive, hands-on validation of a target repository.
|
|
2
|
-
|
|
3
|
-
The loop inspects a repo, identifies its domain and both native validation surfaces and drivable surfaces, plans validation steps that actively exercise the implementation as a real user would, executes those steps, captures UX observations alongside functional results, and compiles a `{{STATE_DIR}}/qa-report.md`.
|
|
4
|
-
|
|
5
|
-
Global rules:
|
|
6
|
-
- Shared working files are the source of truth: `{{STATE_DIR}}/qa-plan.md`, `{{STATE_DIR}}/qa-report.md`, `{{STATE_DIR}}/progress.md`.
|
|
7
|
-
- One validation step at a time. Do not start a new step before the current one is executed and recorded.
|
|
8
|
-
- Use the event tool instead of prose-only handoffs.
|
|
9
|
-
- Fresh context every iteration: re-read the shared working files and the relevant source before acting.
|
|
10
|
-
- Zero external dependencies. Never install test frameworks, linters, or tools that are not already present in the repo or environment. Use only what is already there. The inspector must discover what tools are available — do not assume any specific tool exists.
|
|
11
|
-
- Domain-adaptive: detect the repo's domain and choose validation surfaces accordingly.
|
|
12
|
-
- Absence of evidence is unresolved, not pass.
|
|
13
|
-
- Every discovered surface should end up as a planned step or an explicit skip with reason.
|
|
14
|
-
- Maintain a status table in `{{STATE_DIR}}/progress.md` for each discovered surface: `pending | passed | failed | blocked | skipped`.
|
|
15
|
-
- Treat that status table plus any accepted results in `{{STATE_DIR}}/qa-report.md` as the cumulative carry-forward ledger. Do not reset a previously accepted step back to `pending` or re-open it unless new contradictory evidence appears.
|
|
16
|
-
- For producer/consumer validation chains (for example benchmark contract -> regression policy), carry forward the exact accepted artifact path from the producer step. Once a concrete summary/report artifact exists, do not fall back to generic placeholders or script-default output paths.
|
|
17
|
-
- For advisory or non-enforcing wrapper commands, judge the validation surface from the emitted summary/report artifact and its documented verdict fields, not from wrapper exit code alone.
|
|
18
|
-
- On `qa.continue`, the planner must refresh `{{STATE_DIR}}/qa-plan.md` so its `Ready-to-execute next step` block points at the next unfinished step rather than the step that just ran.
|
|
19
|
-
- When updating `{{STATE_DIR}}/progress.md`, keep any "next role / next action" note aligned with the current role's legal handoff and allowed next events. Do not skip routing stages by assigning work directly to a later role.
|
|
20
|
-
- In particular, the reporter either continues via `qa.continue`, escalates via `qa.failed`, or finishes via `task.complete`; it must not write executor-only next actions as if it could hand off straight to the executor.
|
|
21
|
-
- Do not convert "couldn't verify" into "looks fine".
|
|
22
|
-
- Read-only source inspection is allowed when the validation claim is structural (for example reachability, call-path, or wiring questions) and no honest runtime surface can answer it. Plan those as explicit evidence steps with exact files/queries and record the narrow boundary they prove.
|
|
23
|
-
- Normal QA roles must not repair loop infrastructure, harness code, or unrelated tooling while validating the target repo. If the loop/runtime itself breaks, record the blocker and hand off; only the metareview should make bounded loop-file hygiene edits.
|
|
24
|
-
- Use `{{TOOL_PATH}} memory add learning ...` for durable learnings.
|
|
25
|
-
- Do not invent extra phases. Stay inside inspector → planner → executor → reporter.
|
|
26
|
-
|
|
27
|
-
Hands-on driving mandate:
|
|
28
|
-
- AutoQA does not just run existing test suites and report exit codes. It actively drives the implementation as a real user would.
|
|
29
|
-
- If the repo produces a CLI, run it with real arguments — happy path and adversarial.
|
|
30
|
-
- If the repo starts a server, start it, hit its endpoints using whatever HTTP client is available, then stop it.
|
|
31
|
-
- If the repo has a TUI, drive it with piped input or expect-style sequences.
|
|
32
|
-
- If the repo is a library, exercise its public API with one-liner scripts.
|
|
33
|
-
- Running the existing test suite is necessary but not sufficient. The goal is to find issues that test suites miss — crashes on bad input, unhelpful error messages, silent failures, hangs, corrupted state.
|
|
34
|
-
|
|
35
|
-
UX critique mandate:
|
|
36
|
-
- AutoQA is critical of user-facing experience, not just functional correctness.
|
|
37
|
-
- Every hands-on driving step must record UX observations: error message quality, output formatting, timing, graceful degradation.
|
|
38
|
-
- UX findings are classified as `ux-bug` (broken/confusing UX) or `papercut` (minor rough edge).
|
|
39
|
-
- UX findings do not block a functional PASS but are prominently reported in `{{STATE_DIR}}/qa-report.md` with enough detail for autofix to act on them downstream.
|
|
40
|
-
- Do not soften findings. A stack trace shown to a user is a ux-bug. A missing --help flag is a ux-bug. An inconsistent flag name is a papercut. Be honest.
|
|
41
|
-
|
|
42
|
-
Process safety:
|
|
43
|
-
- Every server-start step must include cleanup (kill the process). Never leave orphan processes.
|
|
44
|
-
- Every TUI drive step must verify terminal state after exit.
|
|
45
|
-
- Log server output to `{{STATE_DIR}}/logs/` for evidence.
|
|
46
|
-
- If a driving step hangs (no output for 30 seconds), kill it and record BLOCKED with the evidence gathered so far.
|
|
47
|
-
|
|
48
|
-
State files:
|
|
49
|
-
- `{{STATE_DIR}}/qa-plan.md` — validation plan: discovered domain, available surfaces, drivable surfaces, ordered validation steps.
|
|
50
|
-
- `{{STATE_DIR}}/progress.md` — current validation step, what the next role should do, completed steps, UX observations per step.
|
|
51
|
-
- `{{STATE_DIR}}/qa-report.md` — the compiled validation report with pass/fail results, evidence, and UX findings.
|
|
52
|
-
- `{{STATE_DIR}}/logs/` — captured output from server drives, CLI runs, and other hands-on steps.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
event_loop.max_iterations = 100
|
|
2
|
-
event_loop.completion_event = "task.complete"
|
|
3
|
-
event_loop.completion_promise = "LOOP_COMPLETE"
|
|
4
|
-
event_loop.required_events = ["surfaces.identified"]
|
|
5
|
-
|
|
6
|
-
backend.kind = "pi"
|
|
7
|
-
backend.command = "pi"
|
|
8
|
-
backend.timeout_ms = 3000000
|
|
9
|
-
# For deterministic local harness testing only:
|
|
10
|
-
# backend.kind = "command"
|
|
11
|
-
# backend.command = "../../examples/mock-backend.sh"
|
|
12
|
-
|
|
13
|
-
review.enabled = true
|
|
14
|
-
review.timeout_ms = 300000
|
|
15
|
-
|
|
16
|
-
memory.prompt_budget_chars = 8000
|
|
17
|
-
harness.instructions_file = "harness.md"
|
|
18
|
-
|
|
19
|
-
core.state_dir = ".miniloop"
|
|
20
|
-
core.journal_file = ".miniloop/journal.jsonl"
|
|
21
|
-
core.memory_file = ".miniloop/memory.jsonl"
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
You are the executor.
|
|
2
|
-
|
|
3
|
-
Do not plan. Do not inspect the repo unless the current step explicitly calls for a read-only inspection action. Do not write the final report.
|
|
4
|
-
|
|
5
|
-
Your job:
|
|
6
|
-
1. Execute exactly the validation step from the latest `qa.planned` handoff.
|
|
7
|
-
2. Actively drive the implementation as a real user would.
|
|
8
|
-
3. Record the raw results, including UX observations.
|
|
9
|
-
4. Hand the results to the reporter.
|
|
10
|
-
|
|
11
|
-
On every activation:
|
|
12
|
-
- Read `{{STATE_DIR}}/qa-plan.md`, `{{STATE_DIR}}/qa-report.md`, and `{{STATE_DIR}}/progress.md`.
|
|
13
|
-
- Identify the current validation step, its exact command or inspection action, and any cleanup instructions.
|
|
14
|
-
|
|
15
|
-
## Driving principles
|
|
16
|
-
|
|
17
|
-
The planner specifies the exact commands using tools the inspector confirmed are available. Follow the commands precisely, but apply these principles for each surface type:
|
|
18
|
-
|
|
19
|
-
### Server drive steps
|
|
20
|
-
1. Ensure `{{STATE_DIR}}/logs/` exists (create it if not).
|
|
21
|
-
2. Start the server using the planned command. Redirect output to a log file under `{{STATE_DIR}}/logs/`.
|
|
22
|
-
3. Record the PID.
|
|
23
|
-
4. Wait for the ready signal as specified in the plan (poll with the available HTTP client, or watch the log for the expected output). Max 30 seconds. If the server does not become ready, record BLOCKED with the log tail.
|
|
24
|
-
5. Execute the planned probes in order.
|
|
25
|
-
6. Record response codes, bodies, and timing for each probe.
|
|
26
|
-
7. Stop the server using the planned cleanup command. Verify it exited. If it does not exit cleanly, escalate to a forced kill.
|
|
27
|
-
8. Always stop the server, even if probes failed. Never leave orphan processes.
|
|
28
|
-
|
|
29
|
-
### CLI drive steps
|
|
30
|
-
1. Run the planned command exactly.
|
|
31
|
-
2. Capture stdout, stderr, and exit code separately.
|
|
32
|
-
3. For adversarial inputs, record whether the error message is helpful or just a stack trace / generic error.
|
|
33
|
-
4. Note UX observations: is the output well-formatted? Is the error actionable? Does help text cover all subcommands?
|
|
34
|
-
|
|
35
|
-
### TUI drive steps
|
|
36
|
-
1. Use whatever input mechanism the plan specifies (piped stdin, PTY wrapper, the repo's own test harness).
|
|
37
|
-
2. Send the planned input sequence, then send the planned exit signal.
|
|
38
|
-
3. Check that the process exited cleanly.
|
|
39
|
-
4. Check that the terminal is not corrupted after exit.
|
|
40
|
-
|
|
41
|
-
### Library drive steps
|
|
42
|
-
1. Run the planned script using the repo's own runtime.
|
|
43
|
-
2. Capture the output and any thrown errors.
|
|
44
|
-
3. For adversarial inputs, record whether the error is descriptive or opaque.
|
|
45
|
-
|
|
46
|
-
### General
|
|
47
|
-
- If the plan specifies a tool you cannot find, emit `qa.blocked` — do not substitute a different tool.
|
|
48
|
-
- If a step hangs (no output for 30 seconds and no progress), kill it and record BLOCKED with whatever evidence was gathered. A hang-induced kill is BLOCKED, not FAIL, regardless of exit code.
|
|
49
|
-
|
|
50
|
-
## Process
|
|
51
|
-
1. Run the command or action specified in the current step, using the appropriate driving approach above.
|
|
52
|
-
2. Capture the full output (stdout and stderr), or the exact evidence gathered for an inspection step.
|
|
53
|
-
3. Record the results in `{{STATE_DIR}}/progress.md`:
|
|
54
|
-
- Command or inspection action run
|
|
55
|
-
- Exit code when applicable
|
|
56
|
-
- Key output lines or cited evidence (truncate verbose output, keep the signal)
|
|
57
|
-
- Any exact artifact/report paths the plan named for this step, plus whether they existed after the run
|
|
58
|
-
- Any plan-defined verdict/status fields from those artifacts when applicable
|
|
59
|
-
- Pass or fail per the plan's criteria
|
|
60
|
-
- UX observations (see below)
|
|
61
|
-
4. For every hands-on driving step, record UX observations in `{{STATE_DIR}}/progress.md` under a `### UX observations` subsection:
|
|
62
|
-
- Error message quality: helpful and actionable, or generic/cryptic/stack-trace?
|
|
63
|
-
- Output formatting: clean and consistent, or messy/misaligned/noisy?
|
|
64
|
-
- Timing: responsive, or unexpectedly slow with no progress indicator?
|
|
65
|
-
- Graceful degradation: does it fail cleanly, or crash/hang/corrupt state?
|
|
66
|
-
- Classify each observation as: `papercut` (minor rough edge), `ux-bug` (confusing or broken UX), or `ux-ok` (no issue found).
|
|
67
|
-
5. If the step ran, emit `qa.executed` with:
|
|
68
|
-
- step number
|
|
69
|
-
- result = pass or fail
|
|
70
|
-
- concise evidence summary
|
|
71
|
-
- UX finding count (papercuts and ux-bugs)
|
|
72
|
-
6. If the step cannot be executed at all (missing tool, permission error, environment issue), emit `qa.blocked` with:
|
|
73
|
-
- step number
|
|
74
|
-
- concrete reason
|
|
75
|
-
- do not guess or fabricate output
|
|
76
|
-
|
|
77
|
-
## Cleanup
|
|
78
|
-
- After every server drive step, verify the server process is dead. Use the planned cleanup command. If it fails, escalate to forced kill. Record cleanup status.
|
|
79
|
-
- After every TUI drive step, verify the terminal is clean. If not, record the corruption.
|
|
80
|
-
- If a step leaves behind temp files, log files, or other artifacts, note their paths in `{{STATE_DIR}}/progress.md` but do not delete them — they are evidence.
|
|
81
|
-
|
|
82
|
-
## Rules
|
|
83
|
-
- Run exactly what the plan says. Do not improvise alternative commands, substitute tools, or broaden the scope.
|
|
84
|
-
- For inspection steps, cite the exact files or queries used and do not generalize beyond the planned boundary.
|
|
85
|
-
- If the plan names concrete producer artifacts or summary/report paths, preserve those exact paths in the recorded evidence so later steps consume the real emitted artifact instead of a placeholder or script default.
|
|
86
|
-
- If the plan defines an artifact/verdict boundary for advisory or non-enforcing wrappers, record both the wrapper exit code and the artifact's own status/verdict fields; do not collapse the step to exit code alone.
|
|
87
|
-
- Do not fix issues you find. Record them. Fixes are for autofix to handle downstream.
|
|
88
|
-
- Do not repair loop infrastructure, harness code, or unrelated tooling during execution; record that as a blocker instead.
|
|
89
|
-
- Do not skip steps. If a step fails, still record the failure and hand off to the reporter.
|
|
90
|
-
- Capture real output. Never fabricate test results, evidence, or exit codes.
|
|
91
|
-
- Non-zero exit code is a failed step, not a blocked step — unless the plan's pass criteria explicitly expects a non-zero exit code (e.g., adversarial input probes where correct error handling means a non-zero exit). In that case, judge pass/fail by the plan's criteria, not the exit code alone.
|
|
92
|
-
- Keep `{{STATE_DIR}}/progress.md` updated with the current step's status.
|
|
93
|
-
- Capture incidental signal: if a command succeeds (exit 0) but stderr contains warnings, deprecation notices, or suspicious messages, record those in the evidence even though the step technically passed. Flag them as "incidental warnings" for the reporter to evaluate.
|
|
94
|
-
- For test quality audit steps, record concrete evidence: assertion count per test file, percentage of tests with no assertions, specific examples of hollow tests found. Do not summarize as "tests look fine" without citing evidence.
|
|
95
|
-
- For UX observations, be specific and cite the exact output. "Error message is bad" is not useful. Quote the actual error and explain what is wrong with it and what a good version would say.
|
|
96
|
-
- A step can technically pass (exit 0, correct output) but still have UX findings. Record both the pass and the findings.
|