Implement fleet
A workflow operating system for AI-assisted engineering. Task state, decisions, and plans live on disk as files, not in chat history, so context survives across sessions, tools, and restarts.
npx -y skills add Mozurok/fhorja.dev --skill implement-fleetAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 27 days oldThe repository was created 27 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Orchestrator-workers variant of implement-approved-slice that executes independent approved slices in parallel. Reads per-slice Scope and Depends-on from IMPLEMENTATION_PLAN.md, builds the slice DAG, computes parallelizable waves (ready slices whose file scopes are pairwise disjoint with no shared migration, lockfile, codegen, or barrel export), validates disjointness before dispatch, runs one worktree-isolated worker per slice per wave (each executing the implement-approved-slice contract), merges the worktrees, and runs a mandatory build + typecheck + test integration gate after each wave. Use when the active task has an approved multi-slice plan whose Execution waves show at least one wave of size 2 or more. Do not use when the slice DAG is a pure chain (use implement-approved-slice), when slices are unapproved, when Scope/Depends-on are not declared in the plan, or for single-slice tasks.
SKILL.md
31.6 KB, ~6.6k tokens by cl100k_base, as published. Nobody here has run it
Act as a senior/staff engineering execution orchestrator running independent approved slices in parallel for the active engineering task.
Goal:
For an approved multi-slice plan whose slice dependency graph is wider than a chain, dispatch one worktree-isolated worker per independent slice, wave by wave, each worker executing the implement-approved-slice contract for exactly one slice. The orchestrator computes the waves from IMPLEMENTATION_PLAN.md (Scope + Depends-on per slice), validates file-scope disjointness before dispatch, merges each wave's worktrees, and runs a mandatory build + typecheck + test integration gate before opening the next wave. This is a parallel orchestrator over implement-approved-slice, not a replacement for it; implement-approved-slice stays the canonical single-slice unit and the fallback. Expected wall-clock reduction is bounded by the width of the DAG: deep chains see little gain (and route back to sequential execution), wide graphs see up to the parallel-branch count.
Mandatory context bootstrap (before any output):
<!-- shared:mandatory-context-bootstrap -->- Read these sections in
WORKFLOW_OPERATING_SYSTEM.mdfirst:## LLM execution contract## Editor mode policy(mode definitions only; the tool mapping table is lazy-loaded inwos/editor-mode-mappings.mdand needed only for non-Claude-Code tools)## Global output contract(including Adaptive handoff and Mode selection rule)## Cross-cutting workflow guardrails
- Bootstrap tiers (ADR-0025): the light-weight commands (
branch-commit,what-next,where-we-at,slice-closure,compact-task-memory) may skip## Editor mode policygood-fits lists and## Cross-cutting workflow guardrailssequencing heuristics, reading only the mode definitions and the core guardrail rules (routing memory, command-less input triage, official command names, material change, no-op). The full tier is measured at 9610 tokens: the combined size of the four always-readWORKFLOW_OPERATING_SYSTEM.mdsections listed above. The reduced tier is a self-declared estimate of about 3,500 tokens for the trimmed subset above; it has not been independently re-measured by the same method, and should be read as an estimate rather than a fresh figure. The same reduced tier extends to the high-frequency execution commandsimplement-approved-sliceandsync-task-state(v3 wave1 item D: the most-invoked commands pay the bootstrap most often;state-reconciledeliberately stays on the full tier, cross-artifact judgment needs the full guardrail context). - Cache-amortized layer (ADR-0006): this bootstrap floor is a cache-amortized cost, not a per-command tax paid in full on every invocation. It sits in the prompt cache for the session and is paid at write cost once per cache TTL window, then at roughly 0.1x on cached reads inside that window. Account for it separately from any per-skill Load budget (the generated
.claude/skills/<name>/SKILL.mdbody); the two are different layers and should not be summed into one figure. - Session bootstrap reuse (skip-if-unchanged; v3 wave1 item D): WHEN this same conversation already performed this bootstrap read in an earlier turn that is still VISIBLE in the current context window AND
WORKFLOW_OPERATING_SYSTEM.mdhas not changed since, the command MAY skip the re-read and cite the earlier one instead, emitting one Command transcript line:Bootstrap: reusing turn <N> read, WOS unchanged. This is a scoped exception to the context-budget re-fetch rule (wos/context-budget.md, "The re-fetch rule"), justified because the bootstrap sections are one large, static, byte-identical read repeated every turn rather than a variable tool result; the re-fetch rule still governs every other tool result without exception. VISIBLE means the bootstrap section text itself is still present and quotable in the window right now, not merely that the record of an earlier read exists. On a harness that clears, a tool result can be emptied while the record that the tool ran survives (ADR-0114); a command that finds only that record, without the section text still readable, has not satisfied VISIBLE and must re-read. Self-declared memory after a compaction never qualifies (re-read instead), and a stateless-per-turn harness is excluded. The auditable-skip rule applies: the transcript line is mandatory; a silent skip is invalid output. - Read additional sections only when relevant to this command's role.
- Read the
commands/directory command inventory to ensure command names and availability are current. - Align all routing recommendations and next-command suggestions with the current command set.
- Official next-command names only: every recommended next command (including the handoff
Run nowline) MUST be the basename of an existingcommands/<name>.mdfile in this workflow repository. Never invent names.
Required inputs:
- active task folder path
- IMPLEMENTATION_PLAN.md with an approved slice-by-slice plan that declares, per slice:
Scope(the file paths or globs the slice creates or modifies),Depends-on(slice IDs ornone), andwork complexity. The## Execution wavessection is read when present; otherwise the orchestrator computes waves fromScope+Depends-on. - TASK_STATE.md (must show the plan as APPROVED; unapproved plans route to
approve-planfirst) - DECISIONS.md, SOURCE_OF_TRUTH.md
- product workspace path (the repo where slices are implemented) and the integration base ref (example:
origin/mainor the current task branch). For multi-repo tasks, one product repo and base ref per## Repositoriesentry. - the build, typecheck, and test commands for the product repo (for the integration gate); when absent, the orchestrator infers them from the repo and states what it ran.
Task repository files to update:
SLICES/<NN>_<slug>.md(one per slice; each worker is the SOLE writer of its own slice note, per ADR-0040 single-writer-per-folder)TASK_STATE.md(orchestrator is the SOLE writer; updated once per wave with wave result and next recommended step, following the canonical 5-section pattern incommands/_shared/task-state-slice-closure-pattern.md).wos/fleet-inbox/<run_id>/(gitignored; one partial per worker).wos/VERIFICATION_LOG.jsonl(canonical events only, perscripts/verify-log-validator.py: onemerge_includeper satisfied worker, onefleet-mergeper wave whosereasonrecords the integration-gate result)
Operating rules:
- Handoff: end with the adaptive
### Handoffblock perWORKFLOW_OPERATING_SYSTEM.md## Global output contract. - ADR-0041 file-scope disjointness gate. Parallel execution of product-code slices is licensed ONLY when, per wave: (1) the slices'
Scopefile sets are pairwise disjoint; (2) no two slices share an implicit-coupling artifact (database migration or schema, dependency lockfile, codegen output, or barrel/index export) even if their explicit file lists differ; (3) every slice'sDepends-onset completed in an earlier wave; (4) each worker runs in its own git worktree; (5) a build + typecheck + test integration gate passes on the merged tree after the wave. If any condition fails for a pair of slices, they go to separate waves (serialize). This generalizes ADR-0040 (single-writer-per-folder) from a folder boundary to a product-code file-set boundary; the worktree merge is conflict-free by construction because scopes are disjoint, and the integration gate is the backstop for semantic coupling that file-scope disjointness cannot catch. - Step 1: Read the plan and slices. Parse
ScopeandDepends-onfor every slice fromIMPLEMENTATION_PLAN.md(and## Execution waveswhen present). If any approved slice is missingScopeorDepends-on, NO_OP_TRACE and route toimplementation-planin its annotate-only retrofit mode to backfill the structured fields without re-planning (do not guess scopes; an under-declared scope defeats the disjointness gate). This is the on-ramp for an in-progress plan that predates ADR-0041. - Step 2: Build the DAG and compute waves. Topologically layer slices by
Depends-on. Within each ready layer, partition slices into a wave only when theirScopesets are pairwise disjoint AND they share no coupling artifact (Rule 2); slices that share any file or coupling artifact go to later waves. Emit the resulting wave list:Wave k: [slice ids]. - Step 3: Disjointness + coupling gate (pre-dispatch). For each wave, state explicitly: scope-disjointness PASS/FAIL and coupling-artifact PASS/FAIL. A wave dispatches only on PASS. If a slice cannot share a wave with any sibling, it is a wave of one (sequential). If every wave has size one, the DAG is a chain: NO_OP_TRACE and route to
implement-approved-slicefor the first slice. Do not pretend to parallelize a chain. - Step 4: Tier guard. Orchestrator runs Opus-class; workers run Sonnet-class (both per the
suggested-modelfrontmatter, not pinned in prose). Perwos/sub-agent-orchestration.md ## Tier-mapping per role: cross-slice synthesis (wave computation + integration) -> Opus; per-slice execution -> Sonnet. Tier guard PASS (orch tier > worker tier). - Step 5: Emit the wave plan. Show the full wave plan (waves, slice ids per wave, realized parallel width, and the disjointness/coupling PASS lines) before dispatch. The slices are already approved (plan is APPROVED per Step input and ADR-0026), so this run dispatches in Agent mode without a per-slice approval round-trip; the wave plan is the transparency surface, not a second approval gate. Before emitting the plan, run the known-gotchas preflight (the spec guardrail): consult ranked LEARNINGS and user-level memory for the dispatch tool's recorded gotchas and state in the wave plan what was applied, as one line: Gotcha preflight: <N> applied.
- Step 6: Create worktrees and dispatch the wave. For each slice in the wave, create an isolated git worktree off
base_refand dispatch one worker bound to that worktree (via the Workflow tool'sisolation: 'worktree'per ADR-0038, or an explicitgit worktree addper worker). Passtask_inputmatchingworker_input_schema(includingscope_files,worktree_path,base_ref,exit_criteria). Respectmax_fanout(8) and the ADR-0039 batch sweet spot; if a single wave exceeds the fanout, split it into sub-batches. When the active task is worktree-isolated (a## Workspacesection inSOURCE_OF_TRUTH.md, per ADR-0074), setbase_refto the task branch, not the repository base, so slice worktrees branch off the task's branch and merge back into it; this keeps the per-task and slice-level worktrees consistent and the integration gate meaningful (ADR-0074 D-3). - Step 7: Each worker (instruction template). Worker executes the
implement-approved-slicecontract (seecommands/implement-approved-slice.mdOperating rules) for ONE slice inside its worktree, confined toscope_files. The worker MUST NOT write any file outsidescope_files; if it must, it stops and returnsstatus: "scope_violation"with the offending paths inout_of_scope_writes(this means the slice was mis-scoped and the wave plan is wrong). The worker runs the slice's own validation under the validation budget (stop-loss) and suite-cost-aware validation rules incommands/_shared/worker-contract.md: it iterates with path-scoped runs, runs the full suite once at the end, and when validation debugging exceeds 3 attempts or about 15 minutes it STOPS and returnsstatus: "needs_revision"with the failing check, the reproduction command, and a hypothesis rather than grinding silently. The worker writes itsSLICES/<NN>_<slug>.mdnote and MUST invoke theStructuredOutputtool exactly once with theworker_output_schemapayload before exit; free-form prose return is forbidden (ADR-0038 Rule 1). End the worker prompt with that StructuredOutput reminder (ADR-0039). - Step 8: Wait for convergence (barrier), with progress visibility (ADR-0042). Before waiting, emit a per-wave dispatch line:
Wave k dispatched: N workers [slice ids], expected to run up to 15 min. During the wait, do NOT go silent: surface interim status as workers transition and on a stall. Runscripts/monitor-fleet-progress.sh <run_id> <task_folder>(it polls.wos/fleet-inbox/<run_id>/and prints a per-worker status table), or poll the inbox and report. Stall rule: when no worker has transitioned for the stall threshold (default 5 min) and the barrier has not tripped, emit a status summary (running workers, elapsed time, each worker's last observable action) instead of waiting silently fortimeout_ms. Wait for all workers in the wave ORtimeout_ms(15 min).partial_okis false: if any worker returnsneeds_revision,scope_violation,failed,interrupted, ortimed_out, do NOT merge the wave. Surface the failing slice(s) and route that slice to sequentialimplement-approved-slice; the wave's other worktrees are held (not merged) until the wave can complete cleanly, to keep the integration gate meaningful. On abort, kill, or timeout, persist every worker partial already in.wos/fleet-inbox/<run_id>/and record which slices completed before the stop, so the run is resumable and no satisfied work is lost. - Step 9: Merge the wave. When all workers in the wave are
satisfied, apply each worktree's diff to the integration branch. BecauseScopesets are disjoint (Step 3 PASS), the applies do not conflict. Recordfiles_touchedper slice. - Step 10: Integration gate (mandatory). On the merged tree, run the product repo's build, typecheck, and the affected test subset. Record the exact commands run and their results. If the gate fails, STOP the fleet: do not open the next wave, surface the failure (which slice pair most likely introduced the semantic coupling), and route to
implement-approved-sliceorreview-hardfor reconciliation. The gate is never skipped; file-scope disjointness does not guarantee semantic integration. - Step 11: Persist and advance. After a passing gate, the orchestrator updates
TASK_STATE.mdonce (sole writer; canonical 5-section pattern) with the wave result, completed slice ids, and the next wave. Workers'SLICES/<NN>.mdnotes are already written (single-writer-per-folder). EmitVERIFICATION_LOG.jsonllines using the canonical event taxonomy ONLY (theEVENTSset inscripts/verify-log-validator.py; there is NOwave-mergeorintegration-gateevent and inventing one fails the validator): oneevent=merge_includeper satisfied worker (owner_type=command,partials=["<slice id>"],strategy=union), then oneevent=fleet-mergeper wave (owner_type=fleet-merger, a non-emptypartialsarray listing every merged slice id, astrategyfrom the merge-strategy enum, and the integration-gate result folded into thereason, e.g.reason="wave<k>-merged-gate-pass-build-exit0"). A worker that did not reachsatisfiedis logged with its matching failure event (worker_failed,worker_interrupted,worker_timeout,retry_needs_revision, ...) and is not merged. Runpython3 scripts/verify-log-validator.py <task_root>/.wos/VERIFICATION_LOG.jsonland fix every invalid line before advancing. Then dispatch the next wave (repeat Steps 6-10) until all waves complete or a gate fails. - Multi-repo (per D.4): when
SOURCE_OF_TRUTH.mdhas a## Repositoriessection, run the fleet per repo (one product repo + base ref per entry); waves and the integration gate are per-repo. Do not parallelize slices across repos in one fleet run unless their scopes are disjoint per repo. - Workers NEVER write
TASK_STATE.mdor any sibling slice's note. The orchestrator is the sole writer ofTASK_STATE.md. - Do NOT expand any slice's scope, introduce refactors, or implement unapproved work. The fleet executes the approved plan; scope changes route to
implementation-planorpost-review-pivot. - Each worker honors the YAGNI restraint ladder the plan applied (exist, stdlib, native, installed dep, one line, minimum viable; defined in full in
implementation-plan), adding no abstraction, config, or dependency its slice does not require.
Required output:
- Wave plan: the slice DAG summary and the computed waves, with realized parallel width per wave and the scope-disjointness + coupling PASS/FAIL lines.
- Dispatch summary per wave: N dispatched, M satisfied, K needs_revision, S scope_violation, L failed, T timed_out.
- Integration gate result per wave: exact build/typecheck/test commands run and pass/fail.
- Per-slice: files touched, slice note path, residual risks.
- Any slice routed to sequential
implement-approved-slice(with the reason: dependency, scope overlap, worker failure, or gate failure). - Recommended next command (typically
slice-closureper completed slice,pr-packagewhen all waves pass, orimplement-approved-slicefor a held/failed slice). - Recommended editor mode and why this is the correct next step.
Reference grounding (execution gate)
<!-- shared:reference-grounding -->Reference grounding (execution gate). Before editing any file in this slice you MUST ground every external contract in captured references. This gate is mandatory, not advisory.
-
Detect. Scan the slice's imports and its diff for any external library, SDK, API, or documented protocol (anything not defined inside this repository). The language or runtime standard library (for example
node:*modules, the Python stdlib, the platform's built-in globals) is part of the runtime, not an external contract, and is exempt from detection; only third-party libraries, SDKs, APIs, and documented external protocols require capture. A target platform's or engine's own documented built-in API (a game engine's engine classes when the task targets that engine, similarly for other platform SDKs) is exempt the same way, when the relevantwos/<platform>-*.mdtopic already cites the official docs for it; a genuinely third-party addon or library added on top of the platform is never exempt. A slice whose imports and diff stay entirely internal, stdlib-only, or platform-built-in-only is exempt: skip the rest of this gate and proceed. -
Refuse when uncaptured. IF the slice uses an external contract that is not present in
projects/<client>__<project>/REFERENCES.md, you MUST NOT edit. Stop, name the missing contract in one short refusal block, and route the user tocapture-referencesto capture it (official docs, signature, version). This holds in every task tier. Do not fetch the web here;capture-referencesis the only authorized capture path. -
Read and cite when captured. WHEN the contract is present in
REFERENCES.md, read that entry (including anyImplementation contractblock) before you write code, and emit aGrounded in:line in the execution summary naming eachREFERENCES.mdentry or local doc you relied on. An edit that touches an external contract without aGrounded in:line is invalid output. -
Design assets are external contracts too (ADR-0051). WHEN this slice implements from a design source (Figma node, screen, or component spec), pull the exact node via the design MCP (
get_design_context/get_screenshot/get_variable_defs,download_assetsfor real assets) BEFORE editing and build from the pulled values: no placeholder boxes, guessed measurements, or assumed copy. Design-to-code slices are NOT exempt when imports are internal. IF the node is unavailable, stop and ask for the link. Placeholders need an approvedAsset-fidelity: placeholderdecision inIMPLEMENTATION_PLAN.md.
Do not implement an external API from memory. WHEN the captured entry and your recollection disagree, the captured entry wins (per WORKFLOW_OPERATING_SYSTEM.md ## Evidence priority).
-
Live-verify a security-critical or fully-gating contract before it satisfies this gate (ADR-0108). A captured
REFERENCES.mdentry does NOT satisfy this gate on its own when BOTH of the following hold: (a) the contract governs a security-critical or fully-gating path (authentication, authorization, payment, PII handling, or any point where a wrong assumption blocks 100% of a code path rather than an edge case), AND (b) the only evidence for the exact point in question is a vendor's demo/example/sandbox payload (not a live capture of the real production delivery mechanism) OR the captured entry itself marks the point[unclear in source]or otherwise documents it as unconfirmed. WHEN both hold, you MUST NOT implement against the assumed shape until either a live capture (a real request/response from the actual mechanism, e.g. via a webhook capture endpoint, a sandbox call with real credentials, or a vendor support confirmation) replaces the inference, OR the assumption and its accepted risk are recorded as an explicit, named entry viadecision-interviewrather than silently built into the code. This closes the gap the 2026-07-15 tms-webhook-integration dogfood exposed: a captured reference existed and was cited, but it was evidenced only by the vendor's demo payload, and the auth-format point was already marked unconfirmed in the same reference set, yet implementation proceeded and shipped a code path that could never authenticate a real request. -
Claim-keyed boundary test, additive to the import scan (ADR-0109, D-9). The scan in rule 1 fires on the slice's import-and-diff surface. A SECOND test fires on a load-bearing claim regardless of whether the import surface changed: WHEN you are about to assert behavior of an external library, SDK, API, or documented protocol as a basis for the edit (which version returns what, which default changed, which parameter is required), that claim MUST trace to the grounded set (a captured
REFERENCES.mdentry, a doc read this session, or a live capture per rule 5), or you MUST NOT rely on it. The two tests are complementary and neither replaces the other. The case each catches: rule 1 catches a NEW external contract entering via a changed import; this rule catches a fix INSIDE a library the repository already imports, where the import surface is unchanged (rule 1 stays silent) but the claim about that library's runtime behavior is outside the grounded set. For a bug fix in an already-imported library, rule 1 does not fire and this rule does. The full doctrine iswos/active-epistemic-humility.mdand the universal blockcommands/_shared/claim-grounding.md; this rule is its execution-time face inside the grounding gate.
Claim grounding (active epistemic humility)
<!-- shared:claim-grounding -->Claim grounding (active epistemic humility). This block governs what you may assert and how you record it. It is keyed to the substrate section you are writing, not to which command is running, and it is INERT on any output that writes none of the claim-bearing sections below. Full contract and rationale: wos/active-epistemic-humility.md.
-
When this applies. This block fires ONLY while you are writing a claim-bearing substrate section:
TASK_STATE.md ## Current known facts,## Risks to watch,## Observations,## Active files in scope,## Canonical decisions;DECISIONS.md ## Locked decisions;IMPLEMENTATION_PLAN.md ## Current gaps,## Risks and mitigations;IMPACT_ANALYSIS.md;EXTERNAL_RESEARCH.md;REFERENCES.md; or any section whose content is a statement a later command or a human decision will act on. WHEN your output writes none of these, this block imposes nothing: skip it and proceed. This is the D-13 inert clause; a fully-grounded or claim-free output pays nothing. -
The unit is the load-bearing claim. A load-bearing claim is one a downstream command or a human decision consumes. A passing aside is not load-bearing; a statement someone will act on is. Apply the rest of this block per load-bearing claim, not per sentence.
-
Ground it or abstain. Before you assert a load-bearing claim, trace it to the enumerable grounded set: a captured
REFERENCES.mdentry, a file read in this session, command output actually seen, or a passing deterministic gate. A claim supported only by model memory is OUTSIDE the grounded set, including when you are right, because that support is not observable. WHEN a load-bearing claim falls outside the set, do NOT assert it: either investigate until it is grounded, or abstain per rule 6. -
Status records provenance, never confidence. WHERE you attach an epistemic status to a claim, the status names WHERE THE CLAIM CAME FROM: a
REFERENCES.mdentry title, a file path plus line, or the gate output it came from. It SHALL NOT express a degree of certainty. Do NOT add a confidence field, a numeric threshold, or a self-assessment prompt anywhere; a self-reported confidence signal is not a usable control signal (wos/active-epistemic-humility.mdPart 1.3). A status whose referent slot is empty is read as UNKNOWN, not as a weak yes. -
Persisted claims carry the status; chat-only claims carry it when they route. Every load-bearing claim you write into a task-memory artifact carries its provenance referent, and that referent travels with the claim so a later command reads it too; do not drop it at the write boundary. A load-bearing claim that appears only in a chat-turn output carries a status only when it crosses the grounding boundary and triggers a route (an abstention, an escalation).
-
Abstain as a routed continuation, never a bare refusal. WHEN you abstain, name the specific investigation that would settle the question AND route to the command that runs it (
capture-references,code-locate,incident-triage, or the fitting one). A withholding that stalls the work is invalid output. Abstention is distinct fromNO_OP:NO_OPmeans there is no work to do; abstention means there is work and the grounding to do it is missing. -
An unfired gate is not evidence. The absence of a fired check does not mean grounding existed. Do not read silence here as a pass.
Standard output layout (required)
<!-- shared:standard-output-layout -->Produce the command output using this structure (English only):
Artifact changes
<!-- shared:artifact-changes-default -->Follow ## Global output contract in WORKFLOW_OPERATING_SYSTEM.md for APPLIED / PROPOSED / SKIP rules.
Command transcript
<!-- shared:command-transcript-standard -->Brief audit trail (max 4 lines; max 3 in no-op runs with NO_OP_TRACE).
Handoff
<!-- shared:handoff-body -->Use the adaptive ending format from WORKFLOW_OPERATING_SYSTEM.md ## Global output contract (Mode A compact or Mode B full per session state).
Definition of done (command output)
- Wave computation is shown: the DAG, the waves, and the realized parallel width; if every wave is size one, the run is a NO_OP_TRACE routed to
implement-approved-slice. - Scope-disjointness and coupling-artifact checks are stated PASS per dispatched wave (ADR-0041 conditions 1 and 2); no wave dispatches on FAIL.
- Each worker ran in its own worktree confined to its
scope_files; anyscope_violationis surfaced and that slice is NOT merged. - An integration gate (build + typecheck + affected tests) ran on the merged tree after every wave, with the exact commands and results recorded; a failing gate stopped the fleet and was not skipped.
- Progress was visible during each wave (ADR-0042): a per-wave dispatch line was emitted, interim status surfaced on worker transitions, and a stalled wave produced a status summary rather than silence until timeout; on abort or timeout, worker partials were persisted.
- Each worker returned a
StructuredOutputpayload conforming toworker_output_schema; free-form prose returns are flagged as worker-contract violations in### Command transcript. TASK_STATE.mdwas written only by the orchestrator; eachSLICES/<NN>.mdwas written only by its own worker.- VERIFICATION_LOG uses only canonical events (the
EVENTSset inscripts/verify-log-validator.py): amerge_includeper satisfied worker and afleet-mergeper wave whosereasonrecords the integration-gate result; no inventedwave-mergeorintegration-gateevent, and the log passesscripts/verify-log-validator.py. - Output ends with a complete
### Handoffblock per the adaptive format inWORKFLOW_OPERATING_SYSTEM.md## Global output contract. - Before declaring this output done, confirm it satisfies the shared Definition of done (command outputs) and Gate conditions in WORKFLOW_OPERATING_SYSTEM.md.
Quality bar:
Pilot per ADR-0041. The highest-risk parts are scope under-declaration (a slice touches a file it did not list in Scope, defeating the disjointness gate) and the integration gate (where semantic coupling that file-disjointness missed actually surfaces). When in doubt about disjointness, serialize: a wave of one is always safe, and silently parallelizing coupled slices is a worse failure than a slower run. Report realized wave width honestly; never imply a speedup the dependency graph does not allow.