Skip to content

Releases: mad-core/mad-edge

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 15 Jul 16:22

v0.6.2 (2026-07-15)

Bug Fixes

  • config: Make post-run auto-sync opt-in (off by default) (2c1a6dd)

Flip DEFAULT_AUTO_SYNC from True to False: when nothing is configured, Mad no longer fires the post-run auto-sync run, so no mad/<session_id> branch and no PR are created unless a deployment, session, or task explicitly opts in. Publishing leftover work to a generic branch is the exception, not the norm — most tasks manage their own named branch/PR, and an unrequested second PR next to the real one is noise (issue #109).

The precedence chain is unchanged (task > session > MAD_AUTO_SYNC env > default); only the terminal default and the operator-facing framing flip from opt-out to opt-in. MAD_AUTO_SYNC=true (or a per-session/per-task auto_sync=true) restores the safety net. Tests updated to the new contract: default-behavior assertions now expect the launcher to run once with agent.autosync.skipped, and the tests that exercise the auto-sync path opt in explicitly.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Signed-off-by: Jose Salamanca jose.salamancacoy@gmail.com

  • http: Gate post-run auto-sync to stop duplicate PRs (db4b411)

Auto-sync fired a second agent run after every task and, blind to the branch the task was told to use, published to mad/<session_id> and opened a DUPLICATE PR next to the real one. Expose an auto_sync toggle on POST /v1/sessions, POST /v1/sessions/{id}/tasks and their MCP tools (resolution task > session > MAD_AUTO_SYNC > true): when it resolves False the second launcher run never starts, so no branch and no PR can be created — an agent.autosync.skipped event records the decision. Also surface the MAD_AUTO_SYNC operator default read-only on GET /v1/config, and harden the fallback prompt to adopt an existing branch/PR, check before creating, and never force-push. A mad-edge consumer can now let a task own its own branch/PR without Mad shadowing it.

Closes #109 Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Signed-off-by: Jose Salamanca jose.salamancacoy@gmail.com


Detailed Changes: v0.6.1...v0.6.2

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 04 Jul 21:19

v0.6.1 (2026-07-04)

Features

  • http: Add read-only GET /v1/config with mad_get_config MCP parity (ece94c4)

Expose the server's effective operational configuration for operators and agents. Builds on the centralized settings module (#97): the endpoint serializes the resolved Settings snapshot.

  • GET /v1/config returns a typed ConfigResponse (hard rule 9): each operational MAD_* tunable as {value, source} where source is env | default (agent timeout, sessions dir/retention, SSE heartbeat, MCP allowed hosts, workspace dir, hook socket, CLI bins). - Credentials are NEVER returned — not even masked. Only set/unset booleans appear under credentials (GITHUB_TOKEN/GH_TOKEN, ANTHROPIC_API_KEY, CLAUDE_CODE_OAUTH_TOKEN, AWS_ACCESS_KEY_ID) (hard rule 2). - Mirrored MCP tool mad_get_config calls the SAME GetConfigUseCase and returns the SAME ConfigResponse model (hard rule 13); the parity and drift tests stay green. - Read-only by design: no write path, no hot reload — the durable owner is the host .env (issue #107).

Use case core/config/use_cases/get_config.py reads the settings snapshot fresh through an injected provider (default load_settings), so the endpoint reflects the process environment at request time and stays testable.

Tests (eight heuristics): OpenAPI contract test + read-only 405 negative twin, env-source vs default-source twins, and an explicit property test asserting a real GITHUB_TOKEN / ANTHROPIC_API_KEY in the env never appears in the HTTP or MCP response body.

Closes #107

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Claude-Session: https://claude.ai/code/session_01GWHBALtjHVd176YddWc9YP

Signed-off-by: Jose Salamanca jose.salamancacoy@gmail.com


Detailed Changes: v0.6.0...v0.6.1

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 04 Jul 06:17

v0.6.0 (2026-07-04)

Features

  • cli: Rename distribution to mad-edge and console script to mad-edge (8c05c58)

Rename the published PyPI distribution from mad-bros to mad-edge and the console script from mad to mad-edge (mad-edge serve). The import package stays mad, so no source module moves. Updates packaging metadata, the Docker image (pip install + ENTRYPOINT), compose/.env examples, the release and TestPyPI-preview workflows, CLAUDE.md, operator-facing docs, and the CLI entry-point tests to match. The mad command is reassigned to the separate mad-cli operator tool.

BREAKING CHANGE: the PyPI distribution is now mad-edge and the console script is mad-edge (mad-edge serve). The import package remains mad. The mad command now belongs to the separate mad-cli operator tool.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Claude-Session: https://claude.ai/code/session_01GWHBALtjHVd176YddWc9YP

Signed-off-by: Jose Salamanca jose.salamancacoy@gmail.com

Breaking Changes

  • cli: The PyPI distribution is now mad-edge and the console script is mad-edge (mad-edge serve). The import package remains mad. The mad command now belongs to the separate mad-cli operator tool.

Detailed Changes: v0.5.26...v0.6.0

v0.5.26

Choose a tag to compare

@github-actions github-actions released this 04 Jul 05:02

v0.5.26 (2026-07-04)

Bug Fixes

  • Deprecate mad-bros distribution in favor of mad-edge (c5b334d)

The distribution is being renamed to mad-edge; this final mad-bros release carries the deprecation notice on the PyPI project page so consumers land on the new name. No further versions will be published under mad-bros.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com

Claude-Session: https://claude.ai/code/session_01GWHBALtjHVd176YddWc9YP

Signed-off-by: Jose Salamanca jose.salamancacoy@gmail.com


Detailed Changes: v0.5.25...v0.5.26

v0.5.25

Choose a tag to compare

@github-actions github-actions released this 27 Jun 15:37

v0.5.25 (2026-06-27)


Detailed Changes: v0.5.24...v0.5.25

v0.5.24

Choose a tag to compare

@github-actions github-actions released this 27 Jun 15:21

v0.5.24 (2026-06-27)

Features

  • http: Add POST/GET /v1/workflows for session chaining (54a3485)

Expose the workflow surface to consumers: POST /v1/workflows creates a workflow that chains sessions sequentially, propagating each step's produced branch to its dependents; GET /v1/workflows/{workflow_id} returns its current state. Both routes are mirrored as the mad_create_workflow / mad_get_workflow MCP tools calling the same use cases in-process (hard rule 13), keeping HTTP and MCP at parity. app.py wires the coordinator + read projection (with log bootstrap, hard rule 6) and the workflow exception handlers; dependencies/cli plumb the new read-model element through the composition root.

The HTTP/MCP parity and route tests verify the contract; ADR-0013 records the design. This is the consumer-facing slice of #90.

Closes #90 Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com


Detailed Changes: v0.5.23...v0.5.24

v0.5.23

Choose a tag to compare

@github-actions github-actions released this 27 Jun 15:18

v0.5.23 (2026-06-27)

Features

  • http: Add per-task effort with task > session > deployment precedence (aef916b)

A mad-bros consumer can now set an opaque reasoning-effort per task on POST /v1/sessions/{id}/tasks (and the mirrored mad_enqueue_task MCP tool), surfaced back on the task entries from GET. The value is forwarded verbatim to the launcher and never validated, mirroring per-task model. Resolution precedence is task > session > deployment, so one session's queue can mix a cheap docs task with a high-effort migration without opening a session per level.

Closes #81 Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com


Detailed Changes: v0.5.22...v0.5.23

v0.5.22

Choose a tag to compare

@github-actions github-actions released this 27 Jun 02:20

v0.5.22 (2026-06-27)

Features

  • sse: Emit task.git_result event after a task completes (357e2cf)

A consumer watching GET /v1/events/stream now receives a new task.git_result event immediately after task.completed, carrying the branch the work landed on and the commits the agent created since the dispatch baseline (base_sha..head_sha), plus dirty/pushed flags. This gives mad-bros per-task git traceability without parsing agent output — Mad observes the workspace's git state read-only (hard rule 1).

The dispatcher captures HEAD at task.dispatched and inspects the workspace after completion via a new read-only GitInspector port (SubprocessGitInspector adapter), kept out of mad.core per hard rule 4. Capture is best-effort: a non-git workspace or any git failure omits the event and never fails the task.

Closes #88 Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com


Detailed Changes: v0.5.21...v0.5.22

v0.5.21

Choose a tag to compare

@github-actions github-actions released this 27 Jun 02:17

v0.5.21 (2026-06-27)

Features

  • config: Source GitHub clone PAT from host env; deprecate inline PAT (72bd84f)

Consumer-visible surface of #89. The GitHub clone credential is now sourced from the host's GITHUB_TOKEN (or GH_TOKEN) environment variable rather than the request body. This establishes Mad's configuration principle for access to external services: credentials follow each ecosystem's conventional env-var name, while the MAD_* namespace stays reserved for operational tuning.

The inline ResourceRequest.authorization_token is marked deprecated in the schema (OpenAPI/MCP), removal targeted for v0.6.0, because passing a secret through the request body risks leaking it into client logs and MCP transcripts; when still supplied it takes precedence and emits a deprecation warning. A failed clone (e.g. a private repo with no host credential) now surfaces as a 502 with an actionable hint instead of a silent anonymous clone that 404s.

Docs (README, docker, cloudflare-tunnel) document the env-sourced credential and the inline deprecation; backlog records the Stage-2 removal milestone.

Closes #89

Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com


Detailed Changes: v0.5.20...v0.5.21

v0.5.20

Choose a tag to compare

@github-actions github-actions released this 27 Jun 02:08

v0.5.20 (2026-06-27)

Bug Fixes

  • agents: Don't re-run primary when auto-sync hits a rate limit (099e099)

A RateLimitError raised by the post-run auto-sync (#8) invocation — after the primary run had already succeeded — propagated through the dispatcher's retry loop and re-executed the already-completed primary prompt, wasting work and risking duplicate commits/branches/PRs.

Catch RateLimitError in the auto-sync block ahead of the broad except: surface a new non-terminal agent.autosync.rate_limited {reason} event instead of session.error, leave the primary task.completed, and do not re-raise. A consumer now observes a best-effort signal rather than a spurious terminal failure and a repeated run. Primary-run rate limits still retry cleanly; non-rate-limit auto-sync failures stay terminal.

Closes #87 Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com


Detailed Changes: v0.5.19...v0.5.20