Skip to content

Releases: chippingway/chipping-orchestrator

v0.12.0

Choose a tag to compare

@geserdugarov geserdugarov released this 15 Sep 06:31
v0.12.0

The 0.12.0 release adds explicit operator control over oversized publications and lifetime agent spending. An oversized single verdict now waits for human authorization before publication, and a durable per-issue run budget bounds agent launches across every role and stage.

Authorized size exemptions can follow orchestrator-owned squashes and clean rebases when the complete contribution remains unchanged. This release also recovers interrupted rewrites from durable records, reclaims finished issues’ worktrees and branches, improves failure diagnostics, and extends CI to Python 3.14.

Highlights

  • Required human approval before publishing an oversized candidate adjudicated as single. The verdict must explain why no safe split exists; the committed work and any existing pull request remain held while the issue waits.
  • Added /orchestrator authorize-oversized <commit> for one exact candidate. Authorization records the full commit ID, base, contribution fingerprint, measured additions, threshold, and operator comment. Publication retries preserve the decision; renewed adjudication requires a new one.
  • Carried authorized size exemptions through approval squashes, clean base-refresh rebases, and clean conflict rebases only when canonical fingerprints prove the complete contribution unchanged. Descendants, additional fixes, documentation changes, and split children receive ordinary cumulative measurement.
  • Added durable recovery for interrupted squashes and rebases, including pushes that landed before their receipts were recorded. Recovery verifies the recorded commits, pull request, remote base, and lease before completing publication; uncertain evidence parks for a human.
  • Bound publication receipts to the pull request they describe and refused pushes onto pull requests that have already merged or closed.
  • Required every proposed late-split child to own its implementation, tests, and documentation and declare an all-path added-line estimate strictly below the frozen ceiling. Estimates survive crashes and appear on child issues; actual publication still depends on measuring each child’s complete diff.
  • Added MAX_AGENT_RUNS_PER_ISSUE, defaulting to 50, with durable accounting before every agent launch. Fresh runs, resumes, replacement sessions, timeouts, crashes, and interrupted runs spend the same lifetime allowance. Stage resets and issue-cycle restarts never return spent runs.
  • Made exhausted daily retry budgets remain parked until a trusted /orchestrator continue grants one fresh attempt. A new day, edited requirements, or a changed configuration no longer silently lifts these parks.
  • Retried transient base-read and fetch failures quietly for three consecutive misses before the fourth requests human intervention. Measurement failures now identify the failed step and include scrubbed diagnostics, while repeated polls suppress duplicate notices for the same cause.
  • Added daily cleanup of eligible worktrees and local and remote branches belonging to finished issues, plus --cleanup-terminal-artifacts for an on-demand pass. Cleanup requires a quiet host, closed terminal issues, no open pull requests, preserved commits, and clean inactive checkouts; ignored and untracked files prevent removal.
  • Fixed completed splits being mistaken for unfinished measurements, allowing umbrella issues to release their children and clear stale measurement parks.
  • Added agent_run_budget and late_transfer records to both observability sinks and terminal_artifact_cleanup results to analytics. Expanded regression coverage for budget enforcement, publication recovery, and guarded artifact removal.
  • Refactored large modules into focused components, modernized Python syntax, and removed broad structural lint exemptions. Extended CI to Python 3.14 and preserved retention-probe warnings on that interpreter.
  • Updated locked versions to PyGithub 2.10.0, Ruff 0.16.5, wemake-python-styleguide 1.8.0, and Streamlit 1.62.0. The runtime dependency list is unchanged.

Migration notes

Workflow labels are unchanged, and new pinned-state fields are additive. Existing recorded manifests without split explanations or child estimates remain readable; no bulk issue-state migration is required.

Review MAX_AGENT_RUNS_PER_ISSUE before upgrading. Its default is 50, and existing issue_agent_runs values seed the lifetime ledger, so an active issue may reach the limit immediately after upgrade. Set 0 for unlimited runs; accounting continues while enforcement is disabled. Once parked at agent_run_limit, only a trusted /orchestrator add-agent-runs N, with N from 1 to 50, grants more allowance. The new issue-specific ceiling becomes exactly runs already spent plus N.

Daily retry_cap parks now require a trusted /orchestrator continue for each additional fresh attempt. This command does not override the lifetime run limit.

An older size exemption without operator authorization no longer supplies permission for an oversized publication. If the candidate remains oversized, follow the park’s /orchestrator authorize-oversized <commit> instruction. Post the command as the entire comment, after the park notice, using the full commit ID. Exemptions without a complete contribution fingerprint cannot transfer through rewrites. DECOMPOSE=off continues to bypass new candidates while completing work already recorded by the gate.

Automatic artifact cleanup runs every 86400 seconds by default. Adjust TERMINAL_ARTIFACT_CLEANUP_INTERVAL_SECONDS to change the interval; it must be positive. The on-demand command defers while another polling process holds the host:

uv run python -m orchestrator --cleanup-terminal-artifacts

Analytics Compose now requires its bind-source directories to exist. New deployments must have the operator create analytics-db/data/; existing deployments must retain their current data directory. Recreate the container to apply the bind configuration, particularly after moving the checkout; restarting alone retains its saved mount paths.

New analytics fields use the existing extras storage, so no database schema migration or historical backfill is required. Custom event consumers should accept the new event families and measurement diagnostics.

CI now includes ci (3.14) alongside ci (3.12) and ci (3.13). Update branch-protection requirements accordingly.

Upgrade in place with:

uv sync --locked

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1 and psycopg[binary]>=3.3.4
  • Fine-grained GitHub token with Contents, Issues, and Pull requests read/write plus Metadata read access
  • Repository rules permitting refs/orchestrator/late-split/…
  • Authenticated codex and/or claude CLI for configured roles
  • Authenticated DECOMPOSE_AGENT when decomposition is enabled
  • Optional dashboard: uv sync --group dashboard
  • Optional skill telemetry: TRACK_SKILL_TRIGGERS=on
  • Optional trajectory recording: configure TRAJECTORY_LOG_PATH

v0.11.1

Choose a tag to compare

@geserdugarov geserdugarov released this 31 Aug 17:14

The 0.11.1 patch release closes the remaining gap in the 0.11.0 size gate. Every orchestrator-owned update to an existing pull request is now measured cumulatively against its frozen remote base before publication, preventing a branch from growing past MAX_ADDED_LINES through a sequence of smaller fixes, rebases, conflict resolutions, squashes, or documentation commits.

Oversized updates remain local while the existing pull request is held for adjudication. Accepted work returns to its originating stage; split work is preserved on an immutable snapshot and handed to child issues. This release also renames the project to chipping-orchestrator, improves provider-outage recovery and skill analytics, and strengthens CI.

Highlights

  • Applied the size gate to every publication onto an existing pull request, including fixes, recovery pushes, rebases, conflict resolutions, approval squashes, and final documentation.
  • Measured the complete prospective pull request rather than only the latest commit. A candidate exactly at MAX_ADDED_LINES still publishes normally.
  • Froze the candidate, base, source stage, pull request, and published head before acting. Named pushes and force-with-lease checks prevent moved worktrees or concurrent pushes from substituting different work.
  • Routed oversized updates to workflow:decomposing without pushing them, while preserving review counters, feedback bookmarks, documentation completion, and conflict-round state.
  • Added a durable “do not merge” hold for implementation pull requests under adjudication, preserving their original descriptions and avoiding overwrites of human edits.
  • Made single verdicts publish the accepted commit back to the same pull request and resume its original stage. A split verdict preserves the work under refs/orchestrator/late-split/…, closes the superseded pull request, creates child issues, and converts the parent to an umbrella.
  • Extended crash, cancellation, and cleanup recovery across measurement, holds, publication, pull-request supersession, child activation, and snapshot reclamation.
  • Added pre_publication / post_publication provenance to all late-split telemetry families, with source-stage, pull-request, and prior-head context for post-publication records.
  • Recognized transient provider refusals such as API Error: 529 Overloaded as retryable failures. Developer runs can be retried with /orchestrator continue; reviewer outages recover automatically instead of requesting human adjudication.
  • Improved skill analytics by resolving unclassified skills against the repository catalog when exactly one source level matches.
  • Expanded CI to Python 3.12 and 3.13, cancelled superseded pull-request runs, smoke-tested the built wheel in isolation, and added explicit job timeouts.
  • Renamed the distribution and console command from agent-orchestrator to chipping-orchestrator, moved canonical repository references to chippingway/orchestrator, and updated the default agent commit identity.
  • Updated Ruff to 0.16.3 and expanded regression coverage. No runtime dependency was added.

Migration notes

No manual issue-state migration is required, and workflow labels are unchanged. Existing late generations without publication provenance continue to be treated as pre-publication records.

With DECOMPOSE=on, the cumulative gate automatically applies to future updates of existing pull requests. Review MAX_ADDED_LINES before upgrading. DECOMPOSE=off bypasses the gate for new candidates but still completes generations already recorded.

Update scripts from agent-orchestrator to chipping-orchestrator; run.sh and python -m orchestrator remain valid. Installations relying on the default repository should use chippingway/orchestrator and the corresponding token path:

~/.config/chippingway/orchestrator/token

CI now reports ci (3.12) and ci (3.13) instead of ci. Update branch-protection rules to require both checks.

Late-event consumers should accept the new publication field and the additional post-publication context. Historical analytics records require no migration or backfill.

Do not roll back to 0.11.0 while post-publication adjudication or its publication receipts remain active.

Upgrade in place with:

uv sync --locked

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1 and psycopg[binary]>=3.3.4
  • Fine-grained GitHub token with Contents, Issues, and Pull requests read/write plus Metadata read access
  • Repository rules permitting refs/orchestrator/late-split/…
  • Authenticated codex and/or claude CLI for configured roles
  • Authenticated DECOMPOSE_AGENT when decomposition is enabled
  • Optional dashboard: uv sync --group dashboard
  • Optional skill telemetry: TRACK_SKILL_TRIGGERS=on
  • Optional trajectory recording: configure TRAJECTORY_LOG_PATH

v0.11.0

Choose a tag to compare

@geserdugarov geserdugarov released this 26 Aug 11:20

The 0.11.0 feature release of agent-orchestrator adds a publication-time size gate and a recovery-safe path for breaking oversized implementation candidates into reusable child issues. With decomposition enabled, clean committed work is measured before any push or pull request; work over the configured ceiling remains unpublished while the decomposer accepts it as one coherent change, requests guidance and remeasures a revision, or preserves it on an immutable snapshot and splits it. The release also closes the lifecycle around cancellation, cleanup, restart, and race-safe publication while strengthening CI and supply-chain security.

Highlights

  • Added MAX_ADDED_LINES, defaulting to 4000, as the global ceiling for lines a candidate adds relative to its frozen remote base. The comparison is strictly greater than, so a candidate exactly at the limit publishes normally.
  • Made measurement deterministic across every path with no generated, vendored, lockfile, migration, or fixture exemptions. Binary content contributes no lines, moved files count at their destination, and repository-controlled attributes cannot silently change the result.
  • Routed every clean committed publication path through the size gate, including normal agent completion, timeout recovery, and commits recovered after an interrupted tick.
  • Persisted the exact candidate and base commits before measurement. Failed or incomplete readings park with their evidence intact instead of publishing an unmeasured candidate or re-running the developer unnecessarily.
  • Kept oversized candidates unpublished and returned them from workflow:implementing to workflow:decomposing for a dedicated late adjudication using the configured DECOMPOSE_AGENT.
  • Added structured single, question, and split outcomes. A single verdict exempts only the exact adjudicated commit; human guidance resumes the developer and remeasures the revision; recursive splitting stops at the lineage-depth bound and asks for human direction.
  • Held reusable plan pull requests while adjudication is active, preserving their descriptions and restoring or superseding them only after the outcome is durably settled.
  • Preserved split candidates under lease-protected custom refs in refs/orchestrator/late-split/… before creating children. Each child receives lineage, the exact snapshot commit, and instructions for reusing the committed work.
  • Made split publication crash-safe across snapshot creation, child creation, parent conversion to workflow:umbrella, branch and worktree supersession, notices, and eventual reclamation. Snapshot refs remain available until every recorded direct consumer has ended.
  • Hardened the final publication handoff by naming the exact approved commit and verifying both the checkout head and tree before and after the push, preventing moved or newly dirtied worktrees from reaching review unmeasured.
  • Added closed-owner cancellation and cleanup. A cancelled cycle reaches rejected only after its plan PR, superseded branch, snapshot, and other recorded obligations are settled; reopening the issue and removing rejected starts a fresh cycle.
  • Added seven correlated late-split telemetry families to both audit and analytics streams: late_measurement, late_verdict, late_failure, late_snapshot, late_cleanup, late_cancellation, and late_restart.
  • Pinned GitHub Actions to full commit SHAs, added CodeQL, OpenSSF Scorecard, scheduled whole-lockfile vulnerability scanning, test coverage reporting, and a private vulnerability-reporting policy.
  • Updated the locked development toolchain, adding pytest-cov, upgrading Ruff and wemake-python-styleguide, and updating the optional Streamlit dashboard dependency.
  • Expanded regression coverage across measurement, snapshot transport, adjudication, revision, splitting, recovery, cancellation, cleanup, restart, publication races, and security workflow configuration.

Migration notes

No manual state migration is required, and the workflow label vocabulary is unchanged. The release adds durable late_* pinned-state fields and new audit and analytics event kinds, so downstream consumers should tolerate these additive fields and families.

MAX_ADDED_LINES takes effect automatically with its default of 4000 when DECOMPOSE=on. Review the ceiling before upgrading. Setting DECOMPOSE=off keeps new candidates out of decomposition and the size gate, but any generation already recorded continues through adjudication and cleanup so committed work cannot bypass an outstanding decision.

Before enabling the gate in production, verify that the token and repository rulesets can create, fetch, protect from overwrite, and delete refs under refs/orchestrator/late-split/…. The existing Contents read/write token scope is sufficient, but catch-all ref rules can still block the namespace. The disposable capability check is documented in docs/configuration/snapshot-capability-check.md.

Do not roll back to 0.10.1 while a late generation or unsettled snapshot ledger remains. To drain safely, set DECOMPOSE=off, restart, then wait until no open issue carries late_cycle_id and no closed issue carries an unreconciled late_resources entry.

Existing installations can otherwise upgrade in place. Reinstall from the updated lockfile with uv sync --locked.

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • Fine-grained GitHub token with Contents, Issues, and Pull requests read/write plus Metadata read access
  • Repository rules permitting the snapshot-ref capability under refs/orchestrator/late-split/…
  • Authenticated codex and/or claude CLI for the configured agent role specs
  • An authenticated DECOMPOSE_AGENT backend for initial decomposition, late adjudication, and the question and discussion stages
  • Development checks: Ruff, WPS/Flake8, pytest, and pytest-cov, installed by the default development sync
  • Optional skill-adoption telemetry: set TRACK_SKILL_TRIGGERS=on
  • Optional trajectory recording: set TRAJECTORY_LOG_PATH; treat the resulting JSONL as repository-sensitive data and manage retention or rotation operationally
  • Optional analytics dashboard: uv sync --group dashboard, configure Postgres through ANALYTICS_DB_URL, then run uv run streamlit run orchestrator/apps/analytics_dashboard.py
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/apps/trajectory_dashboard.py

v0.10.1

Choose a tag to compare

@geserdugarov geserdugarov released this 20 Aug 10:10

The 0.10.1 patch release of agent-orchestrator improves recovery visibility and closes two edge cases that could leave work unpublished or a healthy worktree unreadable. Transient validation parks that heal automatically now close the loop on the issue, the fixing stage publishes clean stranded commits before returning to validation, and hardened Git operations correctly target worktrees when WORKTREES_DIR is relative.

Highlights

  • Added a Recovered automatically … No action needed. issue follow-up after successful recovery from failed pushes, timed-out dev runs, and failed or timed-out reviewers.
  • Applied recovery follow-ups to transient validation parks handled under both workflow:validating and workflow:fixing.
  • Made follow-ups crash-safe and at-most-once per park episode, without sending another @-mention.
  • Kept retries silent while a transient condition remains stuck, preserving the original park notification as the operator signal.
  • Published clean commits stranded by an interrupted or live-paused fixing run before a no-feedback bounce returns the issue to workflow:validating.
  • Updated review-round accounting only when the stranded commit actually reaches the PR, preserving the distinct validating- and in-review-route semantics.
  • Kept stranded-work recovery conservative: missing or dirty worktrees, failed probes, moved remote branches, and failed pushes do not claim successful publication.
  • Built hardened Git --work-tree arguments from absolute paths, fixing status, index, and reset operations when WORKTREES_DIR is configured relatively.
  • Expanded recovery, fixing-bounce, and relative-worktree regression coverage and documented the operator-visible behavior.

Migration notes

No migration or configuration change is required. Workflow labels, pinned-state fields, analytics payloads, and dependency constraints are unchanged from 0.10.0. Existing installations can upgrade in place, and relative WORKTREES_DIR configurations benefit from the fix automatically.

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • Fine-grained GitHub token with Contents, Issues, and Pull requests read/write plus Metadata read access
  • Authenticated codex and/or claude CLI, depending on the configured agent role specs
  • An authenticated DECOMPOSE_AGENT backend to use the question and discussion stages
  • Development checks: Ruff, WPS/Flake8, and pytest, installed by the default development sync
  • Optional skill-adoption telemetry: set TRACK_SKILL_TRIGGERS=on
  • Optional trajectory recording: set TRAJECTORY_LOG_PATH; treat the resulting JSONL as repository-sensitive data and manage retention or rotation operationally
  • Optional analytics dashboard: uv sync --group dashboard, configure Postgres through ANALYTICS_DB_URL, then run uv run streamlit run orchestrator/apps/analytics_dashboard.py
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/apps/trajectory_dashboard.py

v0.10.0

Choose a tag to compare

@geserdugarov geserdugarov released this 19 Aug 15:58

The 0.10.0 release of agent-orchestrator adds a decomposer-led architecture discussion workflow that turns an agreed design into a validated plan PR. It namespaces machine-driven GitHub labels to avoid collisions with repository vocabulary, expands Codex trajectory coverage and item accounting, and adds source-level provenance to skill analytics. It also reorganizes the documentation into a navigable operator guide and focused reference pages.

Highlights

  • Namespaced machine-driven workflow labels under workflow:, including workflow:decomposing, workflow:implementing, workflow:validating, and workflow:community_contribution.
  • Preserved the bare spelling of human-facing labels and controls: in_review, question, discussion, done, rejected, backlog, and paused.
  • Added automatic startup migration from legacy bare labels, including in-place renames that carry open, closed, backlogged, and paused issues across.
  • Retained compatibility reads for legacy labels in issue routing, community-contribution detection, and closed-issue sweeps.
  • Kept analytics rows, audit events, and agent-session stage identifiers unprefixed, preserving their existing payload contract.
  • Added the operator-applied discussion stage, driven by the configured DECOMPOSE_AGENT even when ordinary decomposition is disabled.
  • Added multi-round architecture conversations with numbered questions, recommendations, trusted-reply filtering, and pinned agent/session identity.
  • Allowed a confirmed discussion to commit exactly one regular Markdown plan at plans/issue-<number>.md; the orchestrator validates the change before pushing it and opening a plan PR.
  • Added crash-safe plan publication, existing-PR recovery, remote-tip verification, lease-protected pushes, and durable recovery markers.
  • Made the plan PR the discussion verdict: merging it finalizes the issue as done, closing it unmerged finalizes it as rejected, and an open plan PR remains an intentional no-op even if the issue itself is closed.
  • Added a safe handoff from discussion to workflow:implementing, preserving the reviewed PR head, reusing the plan PR and branch, and rewriting its body once implementation commits land.
  • Generalized the read-only relabel guard across question and discussion, preventing dirty, unverified, or interrupted conversation work from being mistaken for an implementation.
  • Expanded Codex trajectories to capture MCP calls, web searches, patch/file-change activity, todo-list lifecycles, assistant messages, and terminal tool outcomes.
  • Added bounded per-item Codex accounting through source_items, source_item_counts, and source_items_truncated, classifying every identified item as stored, unsupported, deliberately excluded, or empty. Hidden reasoning content remains excluded.
  • Added metadata-only placeholders for unsupported Codex item types so new or unrecognized stream items are visible instead of silently disappearing.
  • Classified discovered Codex skills by source level: project, user, or harness; unclassified and Claude-reported skills remain unknown rather than being guessed.
  • Added skill_levels provenance to analytics events and repository skill-catalog records without requiring a Postgres schema migration.
  • Keyed skill adoption and trigger read models by both skill name and source level, preventing same-named project and global skills from being blended together.
  • Added sortable Level columns and separate project-, user-, harness-, and unclassified-skill sections to the dashboard.
  • Folded invocation-level skill-trigger diagnostics above the primary session-level adoption view and added a 30D dashboard date preset.
  • Consolidated expected missing legacy-label reports into one repository-qualified log line per sweep.
  • Reworked the README into an end-to-end operator guide, added docs/README.md as the documentation landing page, and split architecture, workflow, state-machine, configuration, and observability material into focused pages.
  • Added repository checks for documentation links and expanded coverage for label migration, discussion recovery and publication, plan handoff, Codex trajectories, item accounting, and skill provenance.
  • Updated Plotly to 6.9.0, Streamlit to 1.59.2, and astral-sh/setup-uv to 8.3.2.

Migration notes

Machine-driven labels now use these spellings:

  • decomposing, ready, blocked, umbrella, implementing, validating, documenting, fixing, and resolving_conflictworkflow:<name>
  • community_contributionworkflow:community_contribution

At the next process start, the label bootstrap renames a legacy label in place when only its old spelling exists. If both spellings already exist, it leaves the legacy repository label intact; legacy routing remains supported, and subsequent workflow writes normalize affected issues individually.

The migration requires the GitHub token to have Issues: Read and write. External automations, saved searches, and scripts that inspect GitHub label strings should be updated to the namespaced spellings. Analytics and audit consumers do not need to change their stage filters: stage values remain bare, such as implementing and validating.

To move an agreed discussion plan into implementation, explicitly relabel the issue to workflow:implementing while the plan PR is still open. Merging the plan PR accepts the design and completes the issue; merely removing discussion can expose the issue to ordinary unlabeled pickup.

Trajectory JSON consumers should tolerate the additive source_items, source_item_counts, and source_items_truncated fields, the unsupported_item step kind, and the newly normalized Codex tool names.

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • Fine-grained GitHub token with Contents, Issues, and Pull requests read/write plus Metadata read access
  • Authenticated codex and/or claude CLI, depending on the configured agent role specs
  • An authenticated DECOMPOSE_AGENT backend to use the question and discussion stages
  • Development checks: Ruff, WPS/Flake8, and pytest, installed by the default development sync
  • Optional skill-adoption telemetry: set TRACK_SKILL_TRIGGERS=on
  • Optional trajectory recording: set TRAJECTORY_LOG_PATH; treat the resulting JSONL as repository-sensitive data and manage retention or rotation operationally
  • Optional analytics dashboard: uv sync --group dashboard, configure Postgres through ANALYTICS_DB_URL, then run uv run streamlit run orchestrator/apps/analytics_dashboard.py
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/apps/trajectory_dashboard.py

v0.9.0

Choose a tag to compare

@geserdugarov geserdugarov released this 10 Aug 14:48

The 0.9.0 release of agent-orchestrator completes the migration to responsibility-owned packages and establishes one canonical home for each runtime API. It adds first-class CLI entrypoints, retires the legacy flat compatibility tree, aligns the tests and documentation with the new architecture, and includes targeted trajectory-viewer and test-discovery fixes.

Highlights

  • Added a Hatchling-backed package build and the installed agent-orchestrator console script.
  • Added python -m orchestrator as the canonical module launch form; both entrypoints converge on orchestrator.cli:main.
  • Updated run.sh to launch through the canonical module entrypoint while preserving its self-update, restart, signal, and exit-code behavior.
  • Moved configuration, agent backends and process management, GitHub access, scheduling, skills, and runtime polling into focused domain packages with narrow APIs.
  • Split Git operations into explicit authentication, command, lock, worktree, verification, publication, and base-synchronization owners.
  • Rebuilt the workflow tree around typed state, engine services, and one package per stage: decomposition, implementation, validation, documentation, review, fixing, conflict resolution, and question handling.
  • Consolidated analytics recording, queries, synchronization, retention, trajectories, usage parsing, dashboard rendering, and trajectory viewing under orchestrator.observability.
  • Added canonical Streamlit app entrypoints under orchestrator/apps/.
  • Removed legacy flat modules, forwarding facades, export manifests, dynamic export resolvers, compatibility stubs, and duplicate root-level dashboard and trajectory trees.
  • Reduced the root orchestrator package to version metadata and launch composition; orchestrator.__init__ now exports only __version__.
  • Preserved workflow labels, pinned-state fields, comment markers, configuration behavior, and event and analytics payload contracts across the source-layout migration.
  • Fixed the trajectory viewer so the “Skills triggered” row is always visible and explicitly displays none when a run triggered no skills.
  • Restricted pytest discovery to tests/ and explicitly ignored the operator-owned analytics-db/data/ volume, preventing permission errors during bare pytest runs.
  • Reorganized the test suite to mirror the production package layout and added repository checks for package inventory, import layering, export identity, test collection, and metadata-only roots.
  • Updated CI and the lockfile, including Actions Checkout 7, Cryptography 50.0.0, GitPython 3.1.54, pytest 9.1.1, Ruff 0.15.21, Streamlit 1.59.1, and Hatchling 1.31.0.
  • Refreshed the architecture, workflow, state-machine, configuration, observability, security, contributor, and operator documentation for the canonical paths and ownership boundaries.

Migration notes

The source-layout compatibility facades retained in 0.8.0 have been removed. Update operator commands as follows:

  • python -m orchestrator.mainpython -m orchestrator
  • python -m orchestrator.analytics.syncpython -m orchestrator.observability.analytics.sync.cli
  • streamlit run orchestrator/dashboard.pyuv run streamlit run orchestrator/apps/analytics_dashboard.py
  • streamlit run orchestrator/trajectory_dashboard.pyuv run streamlit run orchestrator/apps/trajectory_dashboard.py

Downstream tests or tools importing legacy flat modules must import the canonical owner modules documented in docs/architecture.md.

Requirements

  • Linux, Git, Python 3.12+, and uv
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • GitHub token configured through the process environment or ~/.config/<owner>/<repo>/token
  • Authenticated codex and/or claude CLI, depending on the configured agent role specs
  • Development checks: Ruff, WPS/Flake8, and pytest, installed by the default development sync
  • Optional skill-adoption telemetry: set TRACK_SKILL_TRIGGERS=on
  • Optional analytics dashboard: uv sync --group dashboard, Postgres via ANALYTICS_DB_URL, then run uv run streamlit run orchestrator/apps/analytics_dashboard.py
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/apps/trajectory_dashboard.py

v0.8.0

Choose a tag to compare

@geserdugarov geserdugarov released this 23 Jul 12:54

The 0.8.0 release of agent-orchestrator focuses on session-aware skill-adoption analytics, hardened Git operations around agent-writable worktrees, and a compatibility-preserving modular refactor across the runtime, observability stack, and tests.

Highlights

  • Added evidence-aware skill tracking: Claude skill loads are recorded as confirmed, direct Codex SKILL.md reads as inferred, and path-only inspections or writes as incidental references.
  • Aggregated skill adoption by logical agent session so repeated resumes do not inflate adoption counts.
  • Promoted session adoption to the dashboard’s primary skill metric, with sortable availability, adoption, invocation-load, and incidental-reference columns.
  • Retained per-invocation skill-trigger rates and the per-skill trigger matrix as detailed diagnostics.
  • Corrected skill-adoption invocation counts, availability metadata, legacy availability fallback, and reporting-window behavior.
  • Kept skill telemetry opt-in through TRACK_SKILL_TRIGGERS.
  • Correctly attributed reviewer-requested developer work to the fixing stage in analytics.
  • Hardened dirty-worktree probes and squash reset/rollback operations against agent-planted core.fsmonitor helpers.
  • Split workflow stages, runtime core, GitHub, agent, worktree, base-sync, publication, verification, analytics, dashboard, usage, and trajectory code into focused modules behind stable compatibility facades.
  • Preserved historical imports, re-export identities, patch points, workflow labels, and pinned-state contracts throughout the refactor.
  • Preserved python -m orchestrator.main execution through the new runtime facade.
  • Split large test suites and shared harnesses into focused modules, with expanded facade, export-surface, skill-adoption, and Git-hardening coverage.
  • Added wemake-python-styleguide as a required development dependency and CI gate, enabled the E741 lint rule, and completed repository-wide WPS remediation.
  • Updated pytest, Ruff, Plotly, GitPython, Pillow, and the GitHub Actions setup-uv integration through the committed lockfile.
  • Refreshed architecture, workflow, configuration, security, observability, contributor, and roadmap documentation for the new module boundaries and analytics behavior.

Requirements

  • Python 3.12+
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • GitHub token configured via environment or ~/.config/<owner>/<repo>/token
  • Authenticated codex and/or claude CLI, depending on configured agent role specs
  • Development checks: Ruff, WPS/Flake8, and pytest, installed by the default development sync
  • Optional skill-adoption telemetry: set TRACK_SKILL_TRIGGERS=on
  • Optional analytics dashboard: uv sync --group dashboard, plus Postgres via ANALYTICS_DB_URL
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/ trajectory_dashboard.py

v0.7.0

Choose a tag to compare

@geserdugarov geserdugarov released this 09 Jul 07:40

The 0.7.0 release of agent-orchestrator, focused on hardening public-repo trust boundaries, adding safer operator pause/continue controls, and expanding usage visibility across issues and trajectories.

Highlights

  • Hardened ALLOWED_ISSUE_AUTHORS into a full comment trust boundary for prompts, drift hashes, resume signals, PR feedback, fixing routes, and rebase retry-unpark flows.
  • Trusted only orchestrator-authored pinned state comments, preventing unrelated pinned comments from being treated as durable workflow state.
  • Rejected local HTTP proxy and TLS git config in authenticated git operations.
  • Added the paused control label, including mid-agent guards across implementing, validating, documenting, fixing, in-review, conflict, decomposer, and question stages.
  • Added /orchestrator continue retry handling beyond fixing, including session-failure parks and validating-route feedback anchoring.
  • Treated session-limit agent messages as retryable parks.
  • Added per-issue usage accumulation on pinned state and terminal usage verdict comments.
  • Added trajectory run usage, cost summaries, and Claude per-turn usage breakdowns to trajectory records and the viewer.
  • Improved skill analytics with Codex local skill catalog discovery, trigger-rate columns, and sortable per-skill trigger matrix views.
  • Surfaced decomposer context when an issue is classified as a single-task decision.
  • Made run.sh keep the orchestrator running when self-update fails.
  • Removed obsolete hold_base_sync gates and refactored stage handlers, scheduler/tick flow, dashboard reads, analytics ingest, cleanup, parser, and publication paths.
  • Added CI line-length enforcement and expanded tests for comment trust, paused routing, usage accumulation, pinned state, re-export surfaces, and transition graph liveness.
  • Updated README, configuration, security, observability, workflow, architecture, state-machine, and agent-skill docs for the new controls and behavior.

Requirements

  • Python 3.12+
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • GitHub token configured via environment or ~/.config/<owner>/<repo>/token
  • Authenticated codex and/or claude CLI, depending on configured agent role specs
  • Optional analytics dashboard: uv sync --group dashboard, plus Postgres via ANALYTICS_DB_URL
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/trajectory_dashboard.py

v0.6.0

Choose a tag to compare

@geserdugarov geserdugarov released this 30 Jun 09:33

The release of agent-orchestrator, focused on deeper agent-run observability, skill-trigger analytics, trajectory inspection, and safer shutdown/recovery behavior for long-running sessions.

Highlights

  • Added opt-in TRAJECTORY_LOG_PATH recording for redacted, truncated per-run agent trajectories, separate from the analytics sink and Postgres rollups.
  • Added a dedicated Streamlit trajectory viewer (orchestrator/trajectory_dashboard.py) for browsing recorded tool calls, tool results, text turns, outputs, and fixture-marked runs.
  • Added opt-in TRACK_SKILL_TRIGGERS support, including Claude and Codex skill-trigger parsers, agent_exit skill fields, and skill_triggered audit events.
  • Added per-tick repo skill-catalog analytics records and dashboard read models for a per-skill trigger matrix.
  • Expanded the analytics dashboard with skill trigger rates, the trigger matrix fold-out, 7-day default view, KPI/helper refactors, and split raw/rollup/dashboard read modules.
  • Added bounded SIGINT/SIGTERM shutdown via SHUTDOWN_GRACE_SECONDS, including process-group cleanup for in-flight agent and verify commands.
  • Classified shutdown-killed runs as interrupted and taught dev-resume stages to ignore partial results without mutating durable GitHub state.
  • Improved timeout recovery by publishing clean implementing commits stranded by late agent descendants after an agent_timeout.
  • Reduced GitHub API usage for multi-repo deployments by caching workflow label objects and adding CLOSED_ISSUE_SWEEP_EVERY_N_TICKS.
  • Hardened agent output handling, including truncated PR-body messages and safer Claude last-message fallback behavior.
  • Split large analytics and resolving-conflict test modules into focused suites, with expanded coverage for the new observability and shutdown paths.
  • Updated configuration, observability, architecture, workflow, and env-template docs for the new knobs and operator workflows.

Requirements

  • Python 3.12+
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • GitHub token configured via environment or ~/.config/<owner>/<repo>/token
  • Authenticated codex and/or claude CLI, depending on configured agent role specs
  • Optional analytics dashboard: uv sync --group dashboard, plus Postgres via ANALYTICS_DB_URL
  • Optional trajectory viewer: set TRAJECTORY_LOG_PATH, then run uv run streamlit run orchestrator/trajectory_dashboard.py

v0.5.0

Choose a tag to compare

@geserdugarov geserdugarov released this 23 Jun 03:51

The release of agent-orchestrator, focused on hardening long-running agent sessions, improving multi-repo agent context, preserving repo-local commit styles, and tightening recovery around fixing-stage edge cases.

Highlights

  • Added tracked-repos awareness for multi-repo deployments: fresh working-agent prompts can now list sibling repos, their local target_root, and base branch for read-only cross-repo reference.
  • Added EXPOSE_TRACKED_REPOS as a global kill switch; the feature is inert for single-repo hosts and caps listed repos to avoid prompt bloat.
  • Added DEV_SESSION_MAX_RESUMES to proactively retire long-lived dev sessions before repeated --resume calls grow into context-window failures.
  • Added immediate Claude context-overflow recovery for Prompt is too long / input-length resume failures, retrying once as a fresh re-grounded spawn.
  • Re-grounded transcript-less fresh respawns with issue body, recent comments, branch state, and tracked-repos context when applicable.
  • Updated commit-producing prompts to mirror each target repo's own recent commit style instead of assuming a fixed Conventional Commits prefix list.
  • Preserved repo-local prefixes in PR titles and squash commits, with fallback prefix inference from base-branch history.
  • Relaxed the final documentation pass so docs commits no longer have to use a hardcoded docs: prefix.
  • Added foreground-only instructions to commit-producing prompts so agents do not background builds, tests, or servers that die when the headless session exits.
  • Improved fixing recovery by publishing clean, stranded local fixes when HEAD is ahead of the remote PR branch but no new commit was made on resume.
  • Made the stranded-fix publish check outrank the fixing ACK fast path, preventing an in_review return while the PR branch is still missing a committed fix.
  • Excluded bot-authored PRs, such as Dependabot or Renovate, from the community_contribution sweep.
  • Expanded configuration, workflow, state-machine, architecture, security, and roadmap documentation for session rotation, tracked-repos awareness, and repo-local commit styles.
  • Refreshed the lockfile, including updates for cryptography, python-multipart, and starlette.

Requirements

  • Python 3.12+
  • PyGithub>=2.1
  • psycopg[binary]>=3.3.4
  • Dependencies installed from uv.lock with uv sync --locked
  • GitHub token configured via environment or ~/.config/<owner>/<repo>/token
  • Authenticated codex and/or claude CLI, depending on configured agent role specs
  • Optional analytics dashboard: uv sync --group dashboard, plus a Postgres database via ANALYTICS_DB_URL or the bundled analytics-db/ Docker Compose service