From 1f35d7c917c62904afdefbadb4a6eb23f8ae7eb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Urb=C3=A1nek?= Date: Mon, 20 Jul 2026 18:54:06 +0200 Subject: [PATCH 1/2] chore(release): v2.21.0 Version stamps + CHANGELOG entry for the CC-scoped escape prefixes (D-79). Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Ei925tQjBZS9gcaURGcnya --- .edpa/engine/VERSION | 2 +- .edpa/engine/templates/edpa.yaml.tmpl | 2 +- CHANGELOG.md | 33 +++++++++++++++++++++++++++ README.md | 12 +++++----- docs/RUNBOOK.md | 2 +- docs/mcp.md | 2 +- docs/methodology.md | 2 +- docs/playbook.md | 4 ++-- plugin/.claude-plugin/plugin.json | 2 +- plugin/edpa/templates/edpa.yaml.tmpl | 2 +- web/package-lock.json | 4 ++-- web/package.json | 2 +- 12 files changed, 51 insertions(+), 18 deletions(-) diff --git a/.edpa/engine/VERSION b/.edpa/engine/VERSION index 7329e21c..db65e216 100644 --- a/.edpa/engine/VERSION +++ b/.edpa/engine/VERSION @@ -1 +1 @@ -2.20.0 +2.21.0 diff --git a/.edpa/engine/templates/edpa.yaml.tmpl b/.edpa/engine/templates/edpa.yaml.tmpl index e7d9ef73..819047c6 100644 --- a/.edpa/engine/templates/edpa.yaml.tmpl +++ b/.edpa/engine/templates/edpa.yaml.tmpl @@ -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//.md contributes structural credit # (create / block_add / list_grow / scalar_change / lines_volume / diff --git a/CHANGELOG.md b/CHANGELOG.md index 822dfdf4..bf36bfb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/README.md b/README.md index 4d38f26e..3015a8b9 100644 --- a/README.md +++ b/README.md @@ -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) @@ -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 ---------------------------------------------------------------------- @@ -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 @@ -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 @@ -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 ---------------------------------------------------------------------- @@ -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) | diff --git a/docs/RUNBOOK.md b/docs/RUNBOOK.md index c41022d4..7f54ecde 100644 --- a/docs/RUNBOOK.md +++ b/docs/RUNBOOK.md @@ -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 diff --git a/docs/mcp.md b/docs/mcp.md index fc5c693c..42709ea7 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -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. diff --git a/docs/methodology.md b/docs/methodology.md index b4462f71..84c38e6a 100644 --- a/docs/methodology.md +++ b/docs/methodology.md @@ -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** --- diff --git a/docs/playbook.md b/docs/playbook.md index f145edb1..ebf848f6 100644 --- a/docs/playbook.md +++ b/docs/playbook.md @@ -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 --- @@ -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). diff --git a/plugin/.claude-plugin/plugin.json b/plugin/.claude-plugin/plugin.json index a0c7cb65..34a1e009 100644 --- a/plugin/.claude-plugin/plugin.json +++ b/plugin/.claude-plugin/plugin.json @@ -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", diff --git a/plugin/edpa/templates/edpa.yaml.tmpl b/plugin/edpa/templates/edpa.yaml.tmpl index e7d9ef73..819047c6 100644 --- a/plugin/edpa/templates/edpa.yaml.tmpl +++ b/plugin/edpa/templates/edpa.yaml.tmpl @@ -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//.md contributes structural credit # (create / block_add / list_grow / scalar_change / lines_volume / diff --git a/web/package-lock.json b/web/package-lock.json index db33563c..87041e6b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "edpa-web", - "version": "2.20.0", + "version": "2.21.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "edpa-web", - "version": "2.20.0", + "version": "2.21.0", "dependencies": { "@astrojs/sitemap": "^3.7.3", "@vercel/analytics": "^2.0.1", diff --git a/web/package.json b/web/package.json index 10576bb2..b6a59b5d 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "edpa-web", "type": "module", - "version": "2.20.0", + "version": "2.21.0", "private": true, "scripts": { "dev": "astro dev", From 5a2141a89ec1c802cb980b1b7898e314ff4a079a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Urb=C3=A1nek?= Date: Mon, 20 Jul 2026 18:54:06 +0200 Subject: [PATCH 2/2] chore(evidence): D-79 from 1f35d7c Auto-generated by local_evidence.py post-commit hook. Source commit: 1f35d7c917c62904afdefbadb4a6eb23f8ae7eb8 --- .edpa/backlog/defects/D-79.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.edpa/backlog/defects/D-79.md b/.edpa/backlog/defects/D-79.md index a8d3ed4f..4dc75b39 100644 --- a/.edpa/backlog/defects/D-79.md +++ b/.edpa/backlog/defects/D-79.md @@ -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