Skip to content

Releases: technomaton/edpa

EDPA 1.4.0-beta

05 May 21:09

Choose a tag to compare

EDPA 1.4.0-beta Pre-release
Pre-release

EDPA 1.4.0-beta — 2026-05-05

Minor release. Default cadence flips to AI-native for fresh
installs only — existing projects keep their explicit settings.
Bundles every accumulated Unreleased change since
v1.3.2-beta.

Changed (BREAKING for fresh installs only)

  • Default cadence is now AI-native: 1-week iterations, 5-week PI
    (4 delivery + 1 IP).
    The IP iteration absorbs leftover work,
    debt, prioritization, and PI planning itself — compressible to a
    single day with AI-assisted ceremonies. Classic SAFe (2-week /
    10-week) is still fully supported; set cadence.iteration_weeks: 2
    and cadence.pi_weeks: 10 in people.yaml to opt out.
  • Default capacity_per_iteration values in the template halved
    accordingly: 0.5 FTE Arch → 20h, 1.0 FTE Dev → 40h (was 40h /
    80h for 2-week iter). The template comments show the math both ways.

Added (since 1.3.2)

  • tests/test_mcp_integration.py — 16 live JSON-RPC stdio roundtrip
    tests against a spawned mcp_server.py subprocess.
  • sync add-iteration <ID> subcommand — appends a new iteration
    option to the GitHub Project Iteration field after setup, drops the
    TBD placeholder when the first real iteration is added. Idempotent.
  • README "First 5 minutes" guided walkthrough — install → seed → close
    → reports, copy-pasteable, all output blocks captured live.
  • docs/E2E-SKILLS-TEST-PLAN.md Příloha D — testing strategies for
    skill flows: side-effects via claude -p, prompts via live
    walkthrough, MCP dispatch via stderr inspection, regression via
    recorded transcripts.
  • TODO.md v1.5 entry: claude -p skill harness with concrete
    acceptance criteria.

Performance

  • mcp_server.load_yaml mtime-keyed LRU cache (cap 64 entries).
    50× speedup on repeated tools/call against an unchanged
    backlog (28.17 ms cold → 0.56 ms warm on a 100-item fixture).

Fixed (hardening pass — backport of v1.3 MCP rigor)

  • engine.py, sync.py, evaluate_cw.py, pi_close.py
    load_yaml / load_json helpers return None on failure with
    stderr WARNING instead of letting exceptions bubble up. Specific
    exceptions only; KeyboardInterrupt / SystemExit propagate.
  • validate_on_save.sh hook — dropped trailing 2>&1 that was
    rendering validation errors as if they were tool output.
  • Two except Exception blocks in engine.py replaced with
    specific types.

Test count

161 tests pass (was 139 in 1.3.2). 6 e2e deselected by design.

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

Fresh installs get the new AI-native default. Re-running the installer
on an existing project does not change people.yaml (templates only
seed when missing).

Migration from 1.3.x

No action required for engine, sync, MCP, or reports — those remain
byte-compatible. The cadence default change affects only new projects.

If you want to flip an existing project to AI-native:

# .edpa/config/people.yaml
cadence:
  iteration_weeks: 1
  pi_weeks: 5
  delivery_iterations_per_pi: 4
  ip_iterations_per_pi: 1

people:
  - id: ...
    capacity_per_iteration: 40    # halve from previous 2-week value

Then re-run iteration close to verify invariants still pass.

See CHANGELOG.md for the full diff.

EDPA 1.3.2-beta

05 May 20:11

Choose a tag to compare

EDPA 1.3.2-beta Pre-release
Pre-release

EDPA 1.3.2-beta — 2026-05-05

Surface fixes for edpa_status post-setup output. Tag-only patch — engine, sync, and reports are byte-identical to v1.3.1-beta.

Fixed

  • F3 — edpa_status always reported \"project\": \"unknown\". _handle_status read project.name from people.yaml, but no shipped people.yaml.tmpl has ever had a project: section. Now reads from edpa.yaml (where the setting actually lives); legacy v0.x bundled configs still work via fallback.
  • F4 — edpa_status reported \"iterations_total\": 0 immediately after setup. project_setup.py persisted sync.field_ids / sync.option_ids on step 9 but never wrote pis[] to edpa.yaml. Iteration YAMLs sat on disk unread until someone hand-edited the config. Setup now derives pis[] from .edpa/iterations/*.yaml in the same persistence pass.
  • Bonus: project_setup.py writes project.name from --project-title when the template placeholder is still in place; respects a name the user set by hand.

Both fixes were caught in the synthetic skill-driven E2E run as findings F3 and F4 (see docs/E2E-SKILLS-TEST-PLAN.md).

Verified live

Against technomaton/edpa-e2e-test sandbox with two iteration YAMLs (PI-2026-1.1 active, PI-2026-1.2 planned):

  • MCP edpa_statusproject: 'EDPA-F3F4-...', current_pi: 'PI-2026-1', iterations_total: 2, active_iteration: 'PI-2026-1.1'
  • No "unknown" fallbacks anywhere in the output.

Migration from 1.3.1-beta

Existing edpa.yaml files keep working unchanged — the fixes only affect new setups and the read path. If your existing project shows "project": "unknown" and you'd like it fixed without a re-setup:

# .edpa/config/edpa.yaml
project:
  name: "Your Project Name"

— or run python3 .claude/edpa/scripts/sync.py setup-refresh to rebuild IDs (does not touch project name; that's a manual edit).

See CHANGELOG.md for the full diff.

EDPA 1.3.1-beta

05 May 20:02

Choose a tag to compare

EDPA 1.3.1-beta Pre-release
Pre-release

EDPA 1.3.1-beta — 2026-05-05

Installer hot-fix on top of v1.3.0-beta. Tag-only patch — engine, sync, MCP server, and reports are byte-identical to 1.3.0-beta. Only install.sh is materially different.

Fixed

  • install.sh now installs the mcp Python SDK alongside pyyaml. Without it the v1.3.0-beta MCP server failed to start on a fresh curl install.sh | sh against the system python3. The graceful import error in 1.3.0 said ERROR: 'mcp' package required and exited cleanly, but Claude Code clients silently fell back to Bash + grep because the MCP tools never advertised. Customers using the public installer would experience EDPA without the MCP layer — the very layer we just hardened in 1.3. Caught in the synthetic skill-driven E2E run as finding F1 (see docs/E2E-SKILLS-TEST-PLAN.md).
  • install.sh also installs openpyxl so the engine's Excel export and /edpa:reports produce item-costs.xlsx and pi-summary.xlsx out of the box. Without it the engine printed Excel export skipped on every iteration close.

Verified live

From a fresh /tmp install with system python3:

  1. pip3 install mcp openpyxl runs as part of installer.
  2. MCP server starts, completes JSON-RPC initializeserverInfo: {name: edpa, version: 1.3.0-beta}.
  3. tools/list returns 5 tools.

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

Migration from 1.3.0-beta

If you already installed 1.3.0-beta and have a working MCP server, no action needed. If import mcp fails on your machine:

pip3 install mcp openpyxl --break-system-packages  # or use a venv

— or simply re-run the installer; it's idempotent.

Notes

  • web/public/install.sh re-synced with the repo-root version. The two paths must stay byte-equal; permanent enforcement (symlink / build step / Vercel rewrite + CI byte-equality check) is filed in TODO.md.

See CHANGELOG.md for the full diff.

EDPA 1.3.0-beta

05 May 15:56

Choose a tag to compare

EDPA 1.3.0-beta Pre-release
Pre-release

EDPA 1.3.0-beta — 2026-05-05

Production-quality MCP server. The server has shipped since 1.0.0-beta as a prototype but had a relative plugin path, no input validation, no logging, and unversioned identity. v1.3 makes it usable as a real Claude Code / Cursor / Codex CLI tool surface against .edpa/ data.

See docs/mcp.md for the full operator and integrator guide.

Highlights

  • Portable plugin path${CLAUDE_PLUGIN_ROOT} instead of relative .claude/edpa/.... The server starts regardless of the client's working directory (was silently breaking when Claude Code launched from web/ or tools/...).
  • Stderr logging — every call_tool invocation is logged with name + arguments. EDPA_LOG_LEVEL and EDPA_LOG_FILE env vars control verbosity / file mirroring. stdout stays clean for JSON-RPC.
  • Server identity carries versionServer("edpa", version=…) reads plugin.json at startup. Live JSON-RPC handshake confirms serverInfo: {name: edpa, version: 1.3.0-beta}.
  • item_id regex guard — anything not matching ^[A-Z]-\\d{1,9}$ is rejected at the validator. {"item_id": "../etc/passwd"} returns ERROR: invalid item_id ... before any filesystem access.
  • Crash-safe dispatch — handler exceptions return TextContent ERROR: internal error ... instead of dropping the JSON-RPC session.
  • GitHub token via envplugin/.mcp.json reads ${GITHUB_PERSONAL_ACCESS_TOKEN} from the environment instead of shipping a literal empty placeholder.

Test count

Run 1.2.1-beta 1.3.0-beta
pytest -m \"not e2e\" 84 passed, 7 skipped, 1 collection error 139 passed, 0 skipped, 0 errors

+43 tests unlocked by adding jsonschema and mcp to requirements-dev.txt. +12 new tests in tests/test_mcp_server.py covering the hardening: TestItemIdValidation (6), TestCallToolErrorHandling (3), TestServerIdentity (2), TestLoggingSetup (1). The 6 e2e tests stay opt-in.

Live subprocess smoke (separate from unit tests) confirmed: initialize returns the version, tools/list enumerates 5 tools, tools/call edpa_status returns valid JSON, tools/call edpa_item with ../etc/passwd is rejected, stderr logs include the WARNING.

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

Migration from 1.2.1-beta

No action required for engine, sync, or reports — those are unchanged. If you have an existing .edpa/ project running on 1.2.1-beta:

  1. Re-run the installer to pick up the new MCP server and the updated plugin/.mcp.json.
  2. Restart any running MCP client (Claude Code, Cursor) so it picks up the new server identity.

If you don't use MCP, no action at all is needed.

See CHANGELOG.md for the full diff.

EDPA 1.2.1-beta

05 May 15:38

Choose a tag to compare

EDPA 1.2.1-beta Pre-release
Pre-release

EDPA 1.2.1-beta — 2026-05-05

Installer hot-fix on top of v1.1.0-beta. Tag-only patch — engine, sync, and reports are byte-identical to 1.1.0-beta. Skips v1.2.0; there is no body of work to bundle into a minor, just two installer bugs that need to ship before onboarding so curl install.sh | sh produces a clean install.

Fixed

  • install.sh seeds .edpa/config/edpa.yaml from project.yaml.tmpl alongside heuristics.yaml and people.yaml. Without it, engine --status on a fresh install printed ✗ edpa.yaml not found even though installation was otherwise fine. /edpa:setup would create the file later, so nothing was actually blocked, but the message read as a broken install.
  • install.sh resolves the latest release with prerelease awareness. GitHub's /releases/latest API and gh release download without --tag both skip prereleases. Every release so far is marked -beta, so the installer silently fell back to a main-branch clone instead of using the published asset. The gh path now uses gh release list --limit 1 to discover the most recent tag (any type); the curl path uses /releases (plural) and picks the first matching asset.

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

install.sh is served by Vercel from the repo's main branch — autodeploy picks up changes within a minute of merge.

Migration from 1.1.0-beta

No action needed. If you already have a working 1.1.0-beta install, this is a no-op for you. New installs benefit automatically.

See CHANGELOG.md for the full diff.

EDPA 1.1.0-beta

05 May 15:05

Choose a tag to compare

EDPA 1.1.0-beta Pre-release
Pre-release

EDPA 1.1.0-beta — 2026-05-05

Second public beta. Gates allocation as default, bidirectional GitHub Projects sync, three sync bugs fixed during E2E validation.

Highlights

  • Gates mode is now the default for engine.py and freshly initialized .edpa/config/edpa.yaml. Validated against technomaton/edpa-simulation-gates (8 iterations, 6-person virtual team, 156 git transitions, 30 Monte Carlo runs): avg MAD 7.8% vs ground truth, 0.3 pp spread under ±20% CW perturbation. Existing projects keep their explicit setting; pass --mode simple or set governance.calculation_mode: simple to opt out.
  • Bidirectional sync against real GitHub Projects. sync push creates issues, sets typed fields (NUMBER vs SINGLE_SELECT), mirrors → Done to gh issue close, and links parent/child via addSubIssue. sync pull reads per-level typed status fields (Initiative/Epic/Feature/Story Status) so SAFe transitions round-trip end-to-end.
  • sync setup-refresh rebuilds field_ids, option_ids, and issue_map.yaml from an existing GitHub Project — useful on a new machine, after manual GitHub edits, or when local state is lost.
  • docs/RUNBOOK.md covers every /edpa:* slash command with prerequisites, expected output, common failure modes, and a 5-minute end-to-end smoke test.
  • docs/E2E-TEST-PLAN.md — repeatable 13-phase real-run test plan (install → setup → push → pull → close → reports → cleanup) for validating against your own sandbox.

Fixed during E2E validation

  • project_setup.py skipped the Iteration field whenever .edpa/iterations/ was empty at setup time. Subsequent push then failed forever with no field_id for 'Iteration'. Fixed: the field is always created, with a TBD placeholder option when no iteration YAMLs exist yet.
  • sync pull cleared local iteration: values whenever the GitHub Project had no Iteration field for the item. Fixed: pull preserves local iteration when remote is missing/empty.
  • sync conflicts used max(last_pull, last_push) as the changelog cutoff and dropped any local change recorded between a push and the next pull. Fixed: per-side cutoffs (git_changes since last_push, github_changes since last_pull) so cross-side conflicts surface correctly.

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

The tarball asset (edpa-plugin.tar.gz) is what install.sh downloads; you can also fetch it manually and extract into .claude/.

Migration

No breaking changes vs 1.0.0-beta beyond the gates default. All 1.0.0-beta projects continue to work; if you do not want gates allocation, set governance.calculation_mode: simple in .edpa/config/edpa.yaml before running engine.py.

See CHANGELOG.md for the full diff.

EDPA 1.0.0-beta

30 Mar 16:47

Choose a tag to compare

EDPA 1.0.0-beta Pre-release
Pre-release

First public beta

Evidence-Driven Proportional Allocation — derive hours from Git delivery evidence. Zero timesheets, mathematical guarantee, Monte Carlo calibrated CW weights.

Highlights

  • Core engine with invariant validation (Score = JobSize × CW × RelevanceSignal)
  • 5 Claude Code skills: setup, engine, reports, auto-calibration, sync
  • Plugin-first distribution: install via curl -fsSL https://edpa.technomaton.com/install.sh | sh
  • MCP server with 20+ read-only endpoints
  • Website at edpa.technomaton.com (26 pages, CS+EN)
  • 96 tests, 100% passing
  • GitHub-native: branch naming CI, issue templates, project sync

Install

curl -fsSL https://edpa.technomaton.com/install.sh | sh

Or download the edpa-plugin.tar.gz asset and extract into .claude/ manually.

Full changelog

See CHANGELOG.md