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 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": "0.5.0",
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": "2026-06-12T00:00:00.000Z"
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
- judgment. The unsuffixed default subagent is the normal case; a `-low`
55
- variant fits mechanical, narrowly scoped tasks; `-high`/`-xhigh` fit
56
- high-risk changes, hard problems, or repeated failed attempts. Not every
57
- role gets every tier: `-xhigh` exists only for the implementer, the
58
- reviewer, and the advisor. The reviewer's downshift is `-medium` rather
59
- than `-low`, since its default already sits at high. The advisor has no
60
- downshift at all: its default `high` is already its only non-`-xhigh`
61
- tier. Spawn only variants that are actually installed. Tier choice is a
62
- conscious decision, not a ritual; when unsure, use the default.
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
@@ -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 0.6.0 docs for the full consumer semantics.
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. When a
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
- (four so far) has resolved on the first resume attempt; fall back to a
447
- fresh respawn only if the resume attempt itself misfires the same way. So
448
- far this signal has only been observed for the reviewer role, a role whose
449
- default model differs from explorer's, task-slicer's, and implementer's
450
- (since 0.21.0 the advisor shares the reviewer's default model too; the
451
- advisor has had no spawns yet, so it contributes no evidence either way; see
452
- the per-role model preferences); treat that correlation as an open lead
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.22.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",