orchestrator-workflow 0.23.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,101 @@ 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
+
8
103
  ## [0.23.0] - 2026-08-24
9
104
 
10
105
  ### Changed
@@ -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
 
@@ -61,25 +61,17 @@ default, not a ritual.
61
61
  those three excludes `implementer-low`, and the task runs on the unsuffixed
62
62
  implementer or higher, even when the change looks mechanical (a bugfix
63
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 of
65
- implementer-low as installed (Haiku 4.5) against the default implementer
66
- (Sonnet 5, effort medium) (2026-08-24, n=8, identical tasks in both tiers,
67
- blinded reviews, agent-tasks task 7f38899d): implementer-low reached accept
68
- a median 320 seconds slower (p=0.016), drew 9 high-plus-critical review
69
- findings against 1, and needed 8 fix rounds against 1. The A/B's
70
- implementer-low ran on Haiku 4.5, which does not support the `effort`
71
- parameter (per Anthropic's model reference), so the harness ignores the
72
- pinned `effort: low` on that model; the measurement compared Haiku 4.5
73
- without effort control against Sonnet 5 at `effort: medium`. For the
74
- explorer and the task-slicer, a `-low` variant still suits narrowly scoped,
75
- mechanical work; no equivalent measurement exists for those two roles, so
76
- their rule is unchanged. Not every role gets every tier: `-xhigh` exists
77
- only for the implementer, the reviewer, and the advisor. The reviewer's
78
- downshift is `-medium` rather than `-low`, since its default already sits at
79
- high. The advisor has no downshift at all: its default `high` is already its
80
- only non-`-xhigh` tier. Spawn only variants that are actually installed.
81
- Tier choice is a conscious decision, not a ritual; when unsure, use the
82
- default.
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.
83
75
  - Every unsuffixed default subagent carries its own pinned default effort
84
76
  baked into its own file, not inherited from the orchestrator session:
85
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
 
@@ -147,10 +147,8 @@ directory and the subagents.
147
147
  task assignment names mutation probes to run; or the task slicer's
148
148
  `suggested_tests` came back non-empty. Any one of those three excludes
149
149
  `implementer-low`, even for a change that looks mechanical (a bugfix
150
- included) (2026-08-24 A/B measurement, n=8: implementer-low reached accept
151
- a median 320 seconds slower, p=0.016, with 9 high-plus-critical review
152
- findings against 1 and 8 fix rounds against 1). When it is unclear
153
- whether a criterion demands a run, exclude `implementer-low`. When a
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
154
152
  task's acceptance rests on a test that must fail without the change, name
155
153
  the mutation probes to run in the task assignment; the implementer reports
156
154
  each one in the output contract's `mutation_probes` field (apply the mutant
@@ -213,7 +211,10 @@ directory and the subagents.
213
211
  validator when one is available (for example `okf-kit check`). Repos
214
212
  without a bundle are unaffected. Then fill `06-handoff.md` and report to the
215
213
  operator: what changed, why, how it was verified, known risks, accepted
216
- 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.
217
218
 
218
219
  When finalizing `05-review-findings.md` and `06-handoff.md`, replace the `TODO`
219
220
  in each `<!-- solution-acceptance: ... = TODO -->` marker with the chosen enum
@@ -451,22 +452,14 @@ explicitly repeats the original assignment rather than a generic retry,
451
452
  since resume keeps the subagent's prior turn in context while a fresh spawn
452
453
  starts cold and risks the same misfire again. Every incident of this exact
453
454
  signal (a return within seconds, zero tool calls, harness or system
454
- boilerplate instead of the output contract) whose outcome was recorded
455
- (four so far) has resolved on the first resume attempt; fall back to a
456
- fresh respawn only if the resume attempt itself misfires the same way. So
457
- far this signal has only been observed for the reviewer role, a role whose
458
- default model differs from explorer's, task-slicer's, and implementer's
459
- (since 0.21.0 the advisor shares the reviewer's default model too; the
460
- advisor has had no spawns yet, so it contributes no evidence either way; see
461
- the per-role model preferences); treat that correlation as an open lead
462
- worth watching as more incidents accumulate, not as a confirmed cause. This
463
- resume-over-respawn preference does not extend to a structurally different
464
- misfire class: a mid-run watchdog stall (the subagent goes idle partway
465
- through a run rather
466
- than returning near-instantly) did not resolve on resume in the one
467
- measured incident of that class, it stalled a second time, and only a
468
- fresh, explicitly constrained respawn produced a contract-valid review;
469
- 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
470
463
  `03-decisions.md`. This matters most for review: a misfired review is not a
471
464
  review and never satisfies the review gate, since review is never skipped.
472
465
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchestrator-workflow",
3
- "version": "0.23.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",