Docs / Plugins

🎩 Deliver with Conductor (structupath.conductor)

Attended Stage 3 delivery. Conductor 0.4.0 coordinates task-bound builders, validators, and reviewers as visible Herdr agent panes, then supports an explicitly approved fast-forward of one local ref. An operator drives every transition and records each approval receipt. It requires exactly Herdr 0.7.5, protocol 17, API schema 1; it is not an authenticated approval system, suite adapter, unattended pipeline, general automatic recovery service, cryptographic attestation system, or same-user security boundary.

Repo: StructuPath/herdr-conductor · Detailed reference: the repo README

Pinned evidence

Field Value
Plugin release 0.4.0
Minimum Herdr 0.7.5
Explicitly tested Herdr 0.7.5
Evidence commit ad170ee8e00be8979a7e1ae20bc6375e5e6f94d3
Manifest SHA-256 b8898d549216485c2bd599a101808030ce534b9c32625b6e6bdc51da04644672

The retained Stage 2 source manifest and installed-Herdr live contract report remain historical compatibility evidence. The pinned commit requires exactly 0.7.5; local development changes do not revise its release claim or evidence.

A separate developer smoke on 2026-09-14 exercised all seven installed actions on a running Herdr 0.7.5 server, including Stage 3 preview, approval refusal, attended single-ref apply, replay, and completed stand-down. It found and fixed the omitted stand-down reason after apply. The smoke used synthetic local worker sessions and operator-produced deterministic reports, not a real model agent. This bounded observation is not independent-human review, formal release attestation, live crash-recovery proof, or broader production certification.

Unreleased dual-runtime development candidate

The local Conductor checkout now retains the exact 0.7.5/protocol 17/schema 1 path and adds an exact 0.9.3/protocol 22/schema 1 path gated by a healthy, matching running server and the required API request/response shape. An isolated 0.7.5 server passed the retained runtime gate; the existing 0.7.5 installed-action smoke above remains the completed-lifecycle evidence for that version. This is not a release-pin change or a claim about 0.8.2.

On an isolated named 0.9.3 server with its own temporary HOME, XDG state, socket, and plugin registry, all seven Conductor actions registered. A fresh disposable-repository run completed installed assemble, status, board, producer report/harvest, exact-SHA validator report/harvest, preview, refusal to apply without a receipt, recorded attended approval, one local-ref apply CAS, apply replay, stand-down of two worker panes, and stand-down replay. The 0.9.3 macOS Apple-silicon runtime asset SHA-256 was 5173a3e0ae42d5d1ab7ebfa5d5e6329f7c3d23f8e1a3677c7ce3231da2884157. The development smoke retained its private synthetic repository/state for inspection and removed its temporary shell profiles, plugin link, and workspace. Earlier synthetic startup attempts stopped in needs_attention; their failed journals were not replayed or treated as approval.

These are bounded developer observations using a local shell impersonating Pi and unauthenticated synthetic worker assertions. They do not validate real Pi/model integration, external review, broad crash recovery, or formal release readiness. Keep the proven 0.7.5 Conductor path and the reviewed release pin until separate release evidence and operator selection exist. To roll back a test, unlink only the isolated candidate plugin, close only its disposable workspace, and stop only its named test server; leave the default 0.8.2 server and 0.7.5 runtime untouched. Never point an older CLI at a newer default server and infer compatibility from the CLI's version alone.

All seven actions

Action ID Attended behavior
structupath.conductor.assemble Bind the exact repository/workspace, publish immutable producer tasks and private report outboxes, create run-unique worktrees/refs, then start task-bound panes and agents.
structupath.conductor.board Print one passive lifecycle snapshot for the invoking repository/workspace; it does not open, focus, or mutate a pane.
structupath.conductor.status Print context-bound task, report, integration, gate, and exact live-identity status.
structupath.conductor.harvest Collect terminal reports, reject invalid committed reports durably, perform deterministic zero-or-one-CAS integration, and dispatch reviewer/validator tasks at the exact observed integration SHA.
structupath.conductor.preview Journal the proposed local-ref fast-forward, exact integration and target observations, and gate assertions; return the exact approval command.
structupath.conductor.apply Consume a matching operator approval receipt once, then perform or resolve the attempt's single local-ref compare-and-swap.
structupath.conductor.stand-down Revalidate each complete live pane/agent tuple before close, archive strict authority, and retain all worktrees, branches, tasks, reports, outboxes, gate sources, recordings, logs, artifacts, and Guard files.

Conductor owns this lifecycle. It does not invoke Swarm or provide an automatic Conductor→Swarm pipeline. Supported composition remains human-selected and sequential.

Attended quickstart

Use Herdr exactly 0.7.5, Node.js 20 or current LTS, Python 3.11+, and Git with 40-hex SHA-1 object IDs. Create .herdr-conductor.json in a clean Git repository. This first-run example explicitly disables apply:

{
  "version": 3,
  "apply": null,
  "state_root": { "kind": "default" },
  "worktree_root": ".conductor-worktrees",
  "roles": [
    {
      "name": "builder",
      "contract_role": "builder",
      "kind": "pi",
      "mode": "write",
      "assignment": {
        "title": "Implement the owned change",
        "mission": "Complete only the attended task.",
        "acceptance_criteria": [
          { "id": "behavior", "text": "The requested behavior is verified." }
        ],
        "owned_paths": ["src"],
        "forbidden_paths": ["secrets"],
        "required_commands": [
          { "id": "test", "command": "npm test" }
        ]
      },
      "validator_artifacts": []
    },
    {
      "name": "validator",
      "contract_role": "validator",
      "kind": "pi",
      "mode": "gated",
      "assignment": {
        "title": "Validate the exact integration",
        "mission": "Run the attended exact-SHA gate.",
        "acceptance_criteria": [],
        "owned_paths": [],
        "forbidden_paths": [],
        "required_commands": []
      },
      "validator_artifacts": []
    }
  ]
}

Commit .herdr-conductor.json before assembly so the repository is clean, then explicitly drive the lifecycle from that Herdr workspace:

herdr plugin action invoke assemble --plugin structupath.conductor
herdr plugin action invoke status --plugin structupath.conductor
herdr plugin action invoke board --plugin structupath.conductor
# Complete the published task and pipe canonical report JSON to the returned publisher command.
herdr plugin action invoke harvest --plugin structupath.conductor
# Complete exact-SHA gate tasks, publish their reports, and harvest again.
herdr plugin action invoke harvest --plugin structupath.conductor
herdr plugin action invoke stand-down --plugin structupath.conductor

assemble returns exact task paths, source roots, outbox slots, and task-bound publisher commands. Reports are closed canonical JSON supplied through bounded stdin. Producer collection and exact-SHA gate collection may require separate attended harvest invocations. Harvest and stand-down are mutating attended actions. Failed or uncertain external effects become needs_attention and are never silently replayed.

Optional attended apply

To enable apply for a new run, set apply to { "target_ref": "refs/heads/release" } before assembly. The named local branch must already exist, differ from the integration branch, be checked out in no worktree, and remain exactly at the run's integration base. The proposed change must be a nonempty, rename-free fast-forward. Configuration v2 remains supported with apply disabled; do not edit a run-bound configuration mid-run.

After producer and gate collection, use this sequence instead of standing down immediately:

  1. Invoke herdr plugin action invoke preview --plugin structupath.conductor.
  2. Review the exact target, diff, gate assertions, and preview entry digest.
  3. Follow the exact npm run apply:approve command returned by preview and provide the operator's canonical approve or reject receipt through stdin. Do not manufacture a receipt from a generic example or treat a worker's approve report as operator consent.
  4. Invoke herdr plugin action invoke apply --plugin structupath.conductor only for the reviewed, approved attempt.
  5. Inspect status, then invoke stand-down when finished.

The receipt is consumed durably before any Git effect and cannot be reused. A moved target records an unapplied outcome with zero target changes. Only the attended apply action can resolve an uncertain apply publication from an exact target-SHA observation; other ambiguous operations remain refused. Rejected or voided attempts permit a fresh preview, up to eight attempts. Apply never pushes, tags, publishes, deploys, or updates multiple refs.

Trust and completion limits