orchestrator-workflow 0.22.0 → 0.24.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/CHANGELOG.md +121 -0
- package/INSTALL-AGENT.md +4 -3
- package/assets/agents/reviewer.md +5 -0
- package/assets/agents-md-section.md +22 -10
- package/assets/skill/SKILL.md +22 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,127 @@ All notable changes to `orchestrator-workflow` are documented here.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.24.0] - 2026-08-24
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **Moved org-, machine-, and point-in-time-bound evidence out of the kit's
|
|
13
|
+
reusable instruction files; rule text is unchanged.** Public,
|
|
14
|
+
tool-agnostic kit files (`SKILL.md`, `agents-md-section.md`) now carry
|
|
15
|
+
rules and procedures only; the measurements, dates, sample sizes, task
|
|
16
|
+
ids, and incident tallies that used to sit inline are recorded here in
|
|
17
|
+
the changelog instead, with a one-line pointer left in prose.
|
|
18
|
+
- `SKILL.md` step 6 ("Delegate implementation"): the parenthetical
|
|
19
|
+
`(2026-08-24 A/B measurement, n=8: implementer-low reached accept a
|
|
20
|
+
median 320 seconds slower, p=0.016, with 9 high-plus-critical review
|
|
21
|
+
findings against 1 and 8 fix rounds against 1)` is now `(anchored by an
|
|
22
|
+
A/B measurement; see CHANGELOG 0.23.0)`. The full numbers already live
|
|
23
|
+
in the 0.23.0 entry below.
|
|
24
|
+
- `agents-md-section.md`'s Scaling delegation bullet: the paragraph
|
|
25
|
+
naming the A/B's `n=8`, the median slowdown, `p=0.016`, the
|
|
26
|
+
high-plus-critical finding count, the fix-round count, the Haiku 4.5
|
|
27
|
+
model detail, and agent-tasks task `7f38899d` is replaced by "This rule
|
|
28
|
+
is anchored by an A/B measurement; the data and the model caveat are
|
|
29
|
+
recorded in the orchestrator-workflow CHANGELOG (0.23.0)." Same data,
|
|
30
|
+
same 0.23.0 entry.
|
|
31
|
+
- `SKILL.md`'s "Subagent misfire rule": the incident tally `(four so
|
|
32
|
+
far)` and the whole reviewer/model-correlation passage ("So far this
|
|
33
|
+
signal has only been observed for the reviewer role ...", including the
|
|
34
|
+
0.21.0 advisor remark and the pointer to the per-role model
|
|
35
|
+
preferences) are removed. The rule itself (the signal definition, the
|
|
36
|
+
contract-parse and near-instant detection signals, the
|
|
37
|
+
resume-over-respawn preference and its reasoning, the respawn fallback,
|
|
38
|
+
the watchdog-stall exception, the `03-decisions.md` record requirement,
|
|
39
|
+
and "a misfired review is not a review") is unchanged. The removed
|
|
40
|
+
passage, verbatim, for the durable record: "Every incident of this
|
|
41
|
+
exact signal (a return within seconds, zero tool calls, harness or
|
|
42
|
+
system boilerplate instead of the output contract) whose outcome was
|
|
43
|
+
recorded (four so far) has resolved on the first resume attempt; fall
|
|
44
|
+
back to a fresh respawn only if the resume attempt itself misfires the
|
|
45
|
+
same way. So far this signal has only been observed for the reviewer
|
|
46
|
+
role, a role whose default model differs from explorer's,
|
|
47
|
+
task-slicer's, and implementer's (since 0.21.0 the advisor shares the
|
|
48
|
+
reviewer's default model too; the advisor has had no spawns yet, so it
|
|
49
|
+
contributes no evidence either way; see the per-role model
|
|
50
|
+
preferences); treat that correlation as an open lead worth watching as
|
|
51
|
+
more incidents accumulate, not as a confirmed cause." Of the four
|
|
52
|
+
resume outcomes recorded for that signal, three were on 2026-07-16 and
|
|
53
|
+
one was on 2026-07-20. The watchdog-stall exception's removed sentence,
|
|
54
|
+
also verbatim: "This resume-over-respawn preference does not extend to
|
|
55
|
+
a structurally different misfire class: a mid-run watchdog stall (the
|
|
56
|
+
subagent goes idle partway through a run rather than returning
|
|
57
|
+
near-instantly) did not resolve on resume in the one measured incident
|
|
58
|
+
of that class, it stalled a second time, and only a fresh, explicitly
|
|
59
|
+
constrained respawn produced a contract-valid review; treat a watchdog
|
|
60
|
+
stall as outside this preference."
|
|
61
|
+
- `SKILL.md`'s Run state paragraph: "see the grounding-mcp 0.6.0 docs for
|
|
62
|
+
the full consumer semantics" is now "see the consuming gate's
|
|
63
|
+
documentation (grounding-mcp) for the full consumer semantics", dropping
|
|
64
|
+
the pinned version number.
|
|
65
|
+
|
|
66
|
+
### Added
|
|
67
|
+
|
|
68
|
+
- **Reviewer placement check.** `reviewer.md`'s "Check, at minimum" list
|
|
69
|
+
gains a check for org-, machine-, or point-in-time-bound evidence (dates,
|
|
70
|
+
sample sizes, task ids, home paths, incident tallies) leaking into a
|
|
71
|
+
reusable instruction file (a skill, an agent prompt, an AGENTS.md
|
|
72
|
+
section, a template); the fix it recommends is moving the evidence to the
|
|
73
|
+
changelog, the run files, or the consuming workspace and leaving a
|
|
74
|
+
one-line pointer.
|
|
75
|
+
- **Hand-off placement check.** `SKILL.md` step 9 ("Hand off") gains one
|
|
76
|
+
sentence for the orchestrator: check before handing off that no such
|
|
77
|
+
evidence was added to a reusable instruction file.
|
|
78
|
+
- **`placement-guard` CI job.** A dedicated job in agent-dx's
|
|
79
|
+
`.github/workflows/ci.yml`, separate from the package matrix, builds
|
|
80
|
+
`slop-detector` and runs its opt-in `placement-slop` pack against the
|
|
81
|
+
monorepo's instruction files (`packages/orchestrator-workflow/assets/**`
|
|
82
|
+
and `packages/agentic-coding-playbook/**`, configured via the repo-root
|
|
83
|
+
`slop.config.yml`), failing on block-level violations.
|
|
84
|
+
- **Root `slop.config.yml`.** Opts the `placement-slop` pack in for the CI
|
|
85
|
+
job, configures the `LanNguyenSi` org marker with `allow` entries for its
|
|
86
|
+
two legitimate repo links (`github.com/LanNguyenSi/`,
|
|
87
|
+
`raw.githubusercontent.com/LanNguyenSi/`, both anchored to a full
|
|
88
|
+
`https://` URL), widens the pack's instruction-file globs to cover this
|
|
89
|
+
package's `assets/` tree and the `agentic-coding-playbook` package, and
|
|
90
|
+
overrides `placement-slop/dated-evidence`, `placement-slop/tally-phrase`,
|
|
91
|
+
and `placement-slop/opaque-id` from their pack default of `warn` to
|
|
92
|
+
`block`, so the CI job actually fails on a leaked date, tally phrase, or
|
|
93
|
+
opaque id instead of only warning (a home path or an unlisted org marker
|
|
94
|
+
was already `block` by pack default). `packages/github-api-tool/SKILL.md`
|
|
95
|
+
carries two pre-existing dated examples that this severity change would
|
|
96
|
+
now block; it is `ignorePaths`-excluded pending a follow-up cleanup of
|
|
97
|
+
that unrelated package.
|
|
98
|
+
Known limit of the pack, unchanged here: an `allow` match suppresses
|
|
99
|
+
every placement rule on that line, so a home path or a date that shares
|
|
100
|
+
a line with an allowed repo URL is not reported; a span-scoped allow is
|
|
101
|
+
a slop-detector follow-up.
|
|
102
|
+
|
|
103
|
+
## [0.23.0] - 2026-08-24
|
|
104
|
+
|
|
105
|
+
### Changed
|
|
106
|
+
|
|
107
|
+
- **Tightened the `implementer-low` tier rule from discretion to a checkable
|
|
108
|
+
gate on the task contract.** `agents-md-section.md`'s Scaling delegation
|
|
109
|
+
bullet and `SKILL.md` step 6 ("Delegate implementation") no longer say
|
|
110
|
+
`-low` "fits mechanical, narrowly scoped tasks" for the implementer;
|
|
111
|
+
`implementer-low` is now spawned only when none of the following hold: an
|
|
112
|
+
acceptance criterion demands a test, typecheck, lint, or build run; the task
|
|
113
|
+
assignment names mutation probes to run; or the task slicer's
|
|
114
|
+
`suggested_tests` came back non-empty. A task with any of those, including a
|
|
115
|
+
bugfix that looks mechanical, runs on the unsuffixed implementer or higher.
|
|
116
|
+
When it is unclear whether a criterion demands a run, exclude
|
|
117
|
+
`implementer-low`. The explorer and the task-slicer keep the prior
|
|
118
|
+
discretionary `-low` guidance unchanged, since no equivalent measurement
|
|
119
|
+
exists for those roles. Operator decision 2026-08-24 after a Tier-A/B
|
|
120
|
+
measurement of implementer-low as installed (Haiku 4.5) against the default
|
|
121
|
+
implementer (Sonnet 5, effort medium) (agent-tasks task 7f38899d), blinded,
|
|
122
|
+
n=8, identical tasks in both tiers: implementer-low reached accept a median
|
|
123
|
+
320 seconds slower (p=0.016), drew 9 high-plus-critical review findings
|
|
124
|
+
against 1, and needed 8 fix rounds against 1. The A/B's implementer-low ran
|
|
125
|
+
on Haiku 4.5, which does not support the `effort` parameter, so the harness
|
|
126
|
+
ignores the pinned `effort: low` on that model; the measurement compared
|
|
127
|
+
Haiku 4.5 without effort control against Sonnet 5 at `effort: medium`.
|
|
128
|
+
|
|
8
129
|
## [0.22.0] - 2026-08-20
|
|
9
130
|
|
|
10
131
|
### Changed
|
package/INSTALL-AGENT.md
CHANGED
|
@@ -198,12 +198,13 @@ steps in the repository you were asked to install into.
|
|
|
198
198
|
```
|
|
199
199
|
- `.ai/workflow/manifest.json`, exactly this shape (harnesses MUST be an
|
|
200
200
|
array, `profile` is `"minimal"` or `"full"`, models keyed by role,
|
|
201
|
-
version = the kit version you installed
|
|
201
|
+
version = the kit version you installed, read from this kit's own
|
|
202
|
+
`packages/orchestrator-workflow/package.json` `version` field):
|
|
202
203
|
|
|
203
204
|
```json
|
|
204
205
|
{
|
|
205
206
|
"kit": "orchestrator-workflow",
|
|
206
|
-
"version": "
|
|
207
|
+
"version": "<kit version you installed>",
|
|
207
208
|
"harnesses": ["claude", "opencode"],
|
|
208
209
|
"profile": "full",
|
|
209
210
|
"tiers": false,
|
|
@@ -215,7 +216,7 @@ steps in the repository you were asked to install into.
|
|
|
215
216
|
"advisor": "opus"
|
|
216
217
|
},
|
|
217
218
|
"files": {},
|
|
218
|
-
"installedAt": "
|
|
219
|
+
"installedAt": "<ISO 8601 timestamp of this install>"
|
|
219
220
|
}
|
|
220
221
|
```
|
|
221
222
|
|
|
@@ -21,6 +21,11 @@ Check, at minimum:
|
|
|
21
21
|
- Test adequacy: are the new or changed behaviors covered, and would the new
|
|
22
22
|
tests actually fail if the change were reverted? Flag inert tests.
|
|
23
23
|
- Maintainability: naming, dead code, needless abstraction, doc drift.
|
|
24
|
+
- Placement: does the change add org-, machine-, or point-in-time-bound
|
|
25
|
+
evidence (dates, sample sizes, task ids, home paths, incident tallies) to a
|
|
26
|
+
reusable instruction file (a skill, an agent prompt, an AGENTS.md section, a
|
|
27
|
+
template)? Report it; the fix is to move the evidence to the changelog, the
|
|
28
|
+
run files, or the consuming workspace and leave a one-line pointer.
|
|
24
29
|
|
|
25
30
|
Rules:
|
|
26
31
|
|
|
@@ -50,16 +50,28 @@ default, not a ritual.
|
|
|
50
50
|
changes whose risk or size warrants an independent skeptical pass. Either
|
|
51
51
|
way, review is never skipped.
|
|
52
52
|
- When tier variants are installed (manifest `tiers: true`), the orchestrator
|
|
53
|
-
picks the effort tier per task by complexity and risk, at its own
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
picks the effort tier per task by complexity and risk, at its own judgment.
|
|
54
|
+
The unsuffixed default subagent is the normal case; `-high`/`-xhigh` fit
|
|
55
|
+
high-risk changes, hard problems, or repeated failed attempts. For the
|
|
56
|
+
implementer specifically, `-low` is spawned only when none of the following
|
|
57
|
+
hold: an acceptance criterion demands a test, typecheck, lint, or build run;
|
|
58
|
+
the task assignment names mutation probes to run; or the task slicer's
|
|
59
|
+
`suggested_tests` came back non-empty. This is checkable against the task
|
|
60
|
+
contract rather than a judgment about how hard the task looks: any one of
|
|
61
|
+
those three excludes `implementer-low`, and the task runs on the unsuffixed
|
|
62
|
+
implementer or higher, even when the change looks mechanical (a bugfix
|
|
63
|
+
included); when it is unclear whether a criterion demands a run, exclude
|
|
64
|
+
`implementer-low`. This rule is anchored by an A/B measurement; the data and
|
|
65
|
+
the model caveat are recorded in the orchestrator-workflow CHANGELOG
|
|
66
|
+
(0.23.0). For the explorer and the task-slicer, a `-low` variant still suits
|
|
67
|
+
narrowly scoped, mechanical work; no equivalent measurement exists for those
|
|
68
|
+
two roles, so their rule is unchanged. Not every role gets every tier:
|
|
69
|
+
`-xhigh` exists only for the implementer, the reviewer, and the advisor. The
|
|
70
|
+
reviewer's downshift is `-medium` rather than `-low`, since its default
|
|
71
|
+
already sits at high. The advisor has no downshift at all: its default `high`
|
|
72
|
+
is already its only non-`-xhigh` tier. Spawn only variants that are actually
|
|
73
|
+
installed. Tier choice is a conscious decision, not a ritual; when unsure,
|
|
74
|
+
use the default.
|
|
63
75
|
- Every unsuffixed default subagent carries its own pinned default effort
|
|
64
76
|
baked into its own file, not inherited from the orchestrator session:
|
|
65
77
|
medium for the explorer, the task-slicer, and the implementer; high for
|
package/assets/skill/SKILL.md
CHANGED
|
@@ -90,8 +90,8 @@ run-completeness readers, not an acceptance verdict, and it fails open:
|
|
|
90
90
|
left as `TODO` it does not block anything, the reader just falls back to a
|
|
91
91
|
tolerant day-granular date heuristic. The recorded base must resolve in the
|
|
92
92
|
repo, be an ancestor of HEAD, and must not lie behind the fork point of the
|
|
93
|
-
change (the merge-base with the remote default branch); see the
|
|
94
|
-
grounding-mcp
|
|
93
|
+
change (the merge-base with the remote default branch); see the consuming
|
|
94
|
+
gate's documentation (grounding-mcp) for the full consumer semantics.
|
|
95
95
|
|
|
96
96
|
## Workflow
|
|
97
97
|
|
|
@@ -141,7 +141,14 @@ directory and the subagents.
|
|
|
141
141
|
installed `implementer-<tier>` subagents, if any) by the task's
|
|
142
142
|
complexity and risk, at your own judgment, defaulting to the unsuffixed
|
|
143
143
|
subagent when unsure; record a non-default tier choice with a
|
|
144
|
-
one-line reason in `03-decisions.md` when the task is non-trivial.
|
|
144
|
+
one-line reason in `03-decisions.md` when the task is non-trivial.
|
|
145
|
+
`implementer-low` is spawned only when none of the following hold: an
|
|
146
|
+
acceptance criterion demands a test, typecheck, lint, or build run; the
|
|
147
|
+
task assignment names mutation probes to run; or the task slicer's
|
|
148
|
+
`suggested_tests` came back non-empty. Any one of those three excludes
|
|
149
|
+
`implementer-low`, even for a change that looks mechanical (a bugfix
|
|
150
|
+
included) (anchored by an A/B measurement; see CHANGELOG 0.23.0). When it is
|
|
151
|
+
unclear whether a criterion demands a run, exclude `implementer-low`. When a
|
|
145
152
|
task's acceptance rests on a test that must fail without the change, name
|
|
146
153
|
the mutation probes to run in the task assignment; the implementer reports
|
|
147
154
|
each one in the output contract's `mutation_probes` field (apply the mutant
|
|
@@ -204,7 +211,10 @@ directory and the subagents.
|
|
|
204
211
|
validator when one is available (for example `okf-kit check`). Repos
|
|
205
212
|
without a bundle are unaffected. Then fill `06-handoff.md` and report to the
|
|
206
213
|
operator: what changed, why, how it was verified, known risks, accepted
|
|
207
|
-
waivers, suggested next step.
|
|
214
|
+
waivers, suggested next step. Before handing off, check that no org-,
|
|
215
|
+
machine-, or point-in-time-bound evidence was added to a reusable
|
|
216
|
+
instruction file; such evidence belongs in the changelog, the run files,
|
|
217
|
+
or the consuming workspace, with a pointer left behind.
|
|
208
218
|
|
|
209
219
|
When finalizing `05-review-findings.md` and `06-handoff.md`, replace the `TODO`
|
|
210
220
|
in each `<!-- solution-acceptance: ... = TODO -->` marker with the chosen enum
|
|
@@ -442,22 +452,14 @@ explicitly repeats the original assignment rather than a generic retry,
|
|
|
442
452
|
since resume keeps the subagent's prior turn in context while a fresh spawn
|
|
443
453
|
starts cold and risks the same misfire again. Every incident of this exact
|
|
444
454
|
signal (a return within seconds, zero tool calls, harness or system
|
|
445
|
-
boilerplate instead of the output contract) whose outcome was recorded
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
worth watching as more incidents accumulate, not as a confirmed cause. This
|
|
454
|
-
resume-over-respawn preference does not extend to a structurally different
|
|
455
|
-
misfire class: a mid-run watchdog stall (the subagent goes idle partway
|
|
456
|
-
through a run rather
|
|
457
|
-
than returning near-instantly) did not resolve on resume in the one
|
|
458
|
-
measured incident of that class, it stalled a second time, and only a
|
|
459
|
-
fresh, explicitly constrained respawn produced a contract-valid review;
|
|
460
|
-
treat a watchdog stall as outside this preference. Record every misfire in
|
|
455
|
+
boilerplate instead of the output contract) whose outcome was recorded has
|
|
456
|
+
resolved on the first resume attempt; fall back to a fresh respawn only if
|
|
457
|
+
the resume attempt itself misfires the same way. This resume-over-respawn
|
|
458
|
+
preference does not extend to a structurally different misfire class: a
|
|
459
|
+
mid-run watchdog stall (the subagent goes idle partway through a run rather
|
|
460
|
+
than returning near-instantly) did not resolve on resume; only a fresh,
|
|
461
|
+
explicitly constrained respawn produced a contract-valid review; treat a
|
|
462
|
+
watchdog stall as outside this preference. Record every misfire in
|
|
461
463
|
`03-decisions.md`. This matters most for review: a misfired review is not a
|
|
462
464
|
review and never satisfies the review gate, since review is never skipped.
|
|
463
465
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orchestrator-workflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.0",
|
|
4
4
|
"description": "Installer for an orchestrator-led agent workflow: .ai/ run state, an AGENTS.md policy section, and per-harness subagent definitions for Claude Code, OpenAI Codex, and opencode",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|