Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .edpa/backlog/defects/D-79.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,14 @@ evidence:
weight: 1.0
ref: commit/0238d06/agent/claude-opus-4-8-(1m-context)
at: '2026-07-20T18:52:38+02:00'
- type: commit_author
person: urbanek
weight: 0
raw_weight: 4.0
ref: commit/1f35d7c
at: '2026-07-20T18:54:06+02:00'
tags:
- referenced
- type: commit_author
person: urbanek
weight: 4.0
Expand Down
2 changes: 1 addition & 1 deletion .edpa/engine/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.20.0
2.21.0
2 changes: 1 addition & 1 deletion .edpa/engine/templates/edpa.yaml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ project:

governance:
# Auto-stamped to the installed plugin version by install.sh / project_setup.py.
methodology: "EDPA 2.20.0"
methodology: "EDPA 2.21.0"
# v1.14: single calculation path. v1.17: yaml_edit signals — every
# commit on .edpa/backlog/<typ>/<id>.md contributes structural credit
# (create / block_add / list_grow / scalar_change / lines_volume /
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# Changelog

## 2.21.0 — 2026-07-20

The commit-msg escape hatch now works in repos that enforce Conventional
Commits — which is to say, in the repos EDPA's own work rules describe.

### Fixed

- **Escape prefixes were not valid Conventional Commits (D-79).** EDPA's work
rules mandate CC, yet every escape it accepted (`no-ticket:`, `WIP:`,
`[no-ticket]`) fails a conventional-commit gate. In a repo running one, a
non-trivial ticket-less change had **no** message that passed both gates:

| Subject | EDPA | CC gate |
|---|---|---|
| `no-ticket: fix typo` | pass | reject |
| `chore(no-ticket): fix typo` | reject | pass |
| `chore: fix typo` | reject | pass |

The dead end selects for the worst option available — `git commit
--no-verify`, which skips *every* hook including pre-commit ID safety and
leaves no trace in the message. The bypass-CC shape was deliberate ("to make
opt-outs visible in `git log --oneline`") but defeats itself in exactly the
repos that follow EDPA's own guidance.

`chore(no-ticket):` and `chore(wip):` are now accepted. They satisfy a CC gate
while keeping the escape visible and greppable in `git log --oneline` — what
the bare forms were for in the first place. The bare forms remain accepted for
back-compat, documented as usable only where no CC gate runs. Bare `chore:` is
deliberately **not** an escape: valid CC, but it says nothing about intent.

Docs present the scoped form as preferred: work rules (plugin + repo copy),
setup SKILL, playbook CZ, web playbook CZ + EN, hook purpose string.

## 2.20.0 — 2026-07-20

Lefthook `extends:` becomes the default registration path — EDPA wires it
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Derive hours from Git evidence. No timesheets.**

[![EDPA](https://img.shields.io/badge/EDPA-2.20.0-34d399)](docs/methodology.md)
[![EDPA](https://img.shields.io/badge/EDPA-2.21.0-34d399)](docs/methodology.md)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![GitHub](https://img.shields.io/badge/Made_for-GitHub-181717?logo=github)](https://github.com)

Expand All @@ -29,7 +29,7 @@ Monday morning: "What did I work on last week? Let me guess... 4h on S-200, mayb
```
$ python3 .edpa/engine/scripts/engine.py --edpa-root .edpa --iteration PI-2026-1.3

EDPA 2.20.0 — Iteration PI-2026-1.3
EDPA 2.21.0 — Iteration PI-2026-1.3
======================================================================
Person Role Capacity Derived Items OK
----------------------------------------------------------------------
Expand Down Expand Up @@ -94,7 +94,7 @@ Bootstrapping .edpa/ data tree...
Created .edpa/config/people.yaml (edit with your team)
Created .edpa/config/edpa.yaml (edit project.name + governance metadata)

EDPA 2.20.0 installed.
EDPA 2.21.0 installed.
```

The installer vendors the engine to `.edpa/engine/` (it installs no pip
Expand Down Expand Up @@ -137,7 +137,7 @@ python3 .edpa/engine/scripts/engine.py --status
```

```
EDPA 2.20.0 — Status
EDPA 2.21.0 — Status
========================================
✓ .edpa/ found at .edpa
✓ people.yaml — 2 members, 1.5 FTE, 60h/iteration
Expand Down Expand Up @@ -221,7 +221,7 @@ Snapshot frozen: .edpa/snapshots/PI-2026-1.1.json
Excel: .edpa/reports/iteration-PI-2026-1.1/edpa-results.xlsx

======================================================================
EDPA 2.20.0 — Iteration PI-2026-1.1
EDPA 2.21.0 — Iteration PI-2026-1.1
======================================================================
Person Role Capacity Derived Items OK
----------------------------------------------------------------------
Expand Down Expand Up @@ -449,7 +449,7 @@ python3 .edpa/engine/scripts/backlog.py add --type Story --title "..."

| Document | Description |
|----------|-------------|
| [Methodology](docs/methodology.md) | Full EDPA v2.20.0 specification |
| [Methodology](docs/methodology.md) | Full EDPA v2.21.0 specification |
| [Quick Start](docs/quick-start.md) | 10-minute setup guide |
| [Operational Runbook](docs/RUNBOOK.md) | Every `/edpa:*` command end to end — setup, close-iteration, capacity, autocalib, board |
| [Playbook](docs/playbook.md) | From empty repo to first closed PI — full operations guide (Czech) |
Expand Down
2 changes: 1 addition & 1 deletion docs/RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ engine + `.edpa/` tree.
**Expected output (last steps):**

```
[1] Vendor engine ✓ Vendored engine → .edpa/engine/ (49 scripts, VERSION 2.20.0)
[1] Vendor engine ✓ Vendored engine → .edpa/engine/ (49 scripts, VERSION 2.21.0)
[2] Directory tree ✓ Directory tree at .edpa/
[3] Config templates ✓ Seeded people.yaml, edpa.yaml, cw_heuristics.yaml
[4] ID counter ✓ id_counters.yaml seeded
Expand Down
2 changes: 1 addition & 1 deletion docs/mcp.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ read + write access to `.edpa/` project data — config, iterations, people,
backlog — over the standard MCP `stdio` transport. Any MCP-aware client
(Claude Code, Cursor, Codex CLI, custom Python/TS clients) can use it.

**Production-ready since v1.3.0-beta; current as of v2.20.0** (read + write
**Production-ready since v1.3.0-beta; current as of v2.21.0** (read + write
tools — see the tool tables below). Validated handlers, schema-checked
inputs, item-ID path-traversal guard, stderr logging, version-aware identity.

Expand Down
2 changes: 1 addition & 1 deletion docs/methodology.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

*Capacity derivation from delivery evidence*

**Version 2.20.0 — July 2026 — Jaroslav Urbanek, Lead Architect**
**Version 2.21.0 — July 2026 — Jaroslav Urbanek, Lead Architect**

---

Expand Down
4 changes: 2 additions & 2 deletions docs/playbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Kompletni prirucka pro nasazeni metodiky EDPA (Evidence-Driven Proportional Allo

EDPA V2 je **local-first**: zdrojem pravdy je `.edpa/backlog/**/*.md` (YAML frontmatter), git je audit trail. GitHub je **volitelny** -- zadny GitHub Project, zadne org Issue Types, zadny obousmerny sync.

**Verze:** EDPA 2.20.0
**Verze:** EDPA 2.21.0
**Posledni aktualizace:** 2026-07-20

---
Expand Down Expand Up @@ -207,7 +207,7 @@ project:

governance:
# Auto-razitkovano na verzi pluginu instalatorem.
methodology: "EDPA 2.20.0"
methodology: "EDPA 2.21.0"
# Jedina vypocetni cesta od v1.14 (zadny simple/full/gates mode selector,
# zadny audit_mode -- snapshoty vzdy nesou plny signals[] audit trail).

Expand Down
2 changes: 1 addition & 1 deletion plugin/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "edpa",
"version": "2.20.0",
"version": "2.21.0",
"description": "EDPA — Evidence-Driven Proportional Allocation. Derive hours from local git evidence (commits, yaml edits, status transitions). Zero timesheets, mathematical guarantee, Monte Carlo calibrated CW weights. Local-first: .edpa/backlog/ YAML as source of truth, git as the audit trail. GitHub Projects sync optional.",
"author": {
"name": "TECHNOMATON",
Expand Down
2 changes: 1 addition & 1 deletion plugin/edpa/templates/edpa.yaml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ project:

governance:
# Auto-stamped to the installed plugin version by install.sh / project_setup.py.
methodology: "EDPA 2.20.0"
methodology: "EDPA 2.21.0"
# v1.14: single calculation path. v1.17: yaml_edit signals — every
# commit on .edpa/backlog/<typ>/<id>.md contributes structural credit
# (create / block_add / list_grow / scalar_change / lines_volume /
Expand Down
4 changes: 2 additions & 2 deletions web/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion web/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "edpa-web",
"type": "module",
"version": "2.20.0",
"version": "2.21.0",
"private": true,
"scripts": {
"dev": "astro dev",
Expand Down
Loading