Reports
EDPA — Evidence-Driven Proportional Allocation. Derive hours from Git evidence. No timesheets.
npx -y skills add technomaton/edpa --skill reportsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate EDPA timesheets and PI summaries by invoking the vendored reports script (.edpa/engine/scripts/reports.py). Renders per-person timesheet-<person>.md files and the timesheet-team.md rollup from engine results, plus pi-summary-<PI>.md aggregation in --pi mode. Use when user asks for "reports", "výkazy", "timesheets", or "PI summary". Requires /edpa:engine results (edpa_results.json) as input.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.4 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
EDPA Reports — Timesheet & PI Summary Generation
What this does
Renders the human-readable EDPA artifacts from engine results by
running the deterministic reports script. Per ADR-003 ("heavy compute /
file generation → directly script"), this skill is a thin wrapper: it
resolves the argument, shells out to .edpa/engine/scripts/reports.py,
and summarizes what was written. It never hand-renders a timesheet —
the script's Markdown is stable and diffable across reruns.
Arguments
$ARGUMENTS = iteration ID (e.g., "PI-2026-1.3"), or "pi <PI-ID>" for PI-level aggregation.
Argument resolution (when $ARGUMENTS is empty)
If $ARGUMENTS is empty, blank, or "help":
- Call MCP tool
edpa_iterations(or read.edpa/iterations/*.yamldirectly). PI/iteration timeline data is reconstructed at runtime from those per-PI and per-iteration YAML files —edpa.yamlno longer carriespis[]. - Check which iterations already have results in
.edpa/reports/iteration-<ID>/edpa_results.json. - Present options:
Available iterations: PI-2026-1.1 [closed] 2026-04-06–2026-04-17 results: yes PI-2026-1.2 [closed] 2026-04-20–2026-05-01 results: yes PI-2026-1.3 [closed] 2026-05-04–2026-05-15 results: yes PI-2026-1.4 [active] 2026-05-18–2026-05-29 results: no (run engine first) Other options: "pi <PI-ID>" PI-level aggregation across that PI's iterations with results - Default suggestion: the latest
closediteration that hasedpa_results.json. - Ask user: "Generate reports for which iteration? [suggested-id]"
- If
.edpa/does not exist, inform user to run/edpa setupfirst.
Prerequisites
.edpa/reports/iteration-<ID>/edpa_results.jsonexists (run/edpa:engine <iteration-id>first)
Run the script
Per-iteration timesheets:
python3 .edpa/engine/scripts/reports.py <iteration-id>
PI-level aggregation:
python3 .edpa/engine/scripts/reports.py --pi <PI-ID>
Options: --edpa-root <path> (default .edpa), --out <dir> to
override the output directory.
Never hand-render. Do not read edpa_results.json and write
timesheet Markdown yourself — the script is the single canonical
renderer (stable columns, capacity-override annotations, role
projection). Hand-rendered output drifts and breaks diff checks.
Output artifacts
Iteration mode → .edpa/reports/iteration-<ID>/
timesheet-<person>.md— one per person in the results: iteration, methodology (version stamped by the engine), capacity (with baseline/override detail when a capacity override was recorded), derived hours, invariant status, and an item table (Item | Level | Role | JS | CW | Score | Ratio | Hours). The Role column is a display-time projection from evidence signal types (owner / key / reviewer / consulted).timesheet-team.md— team rollup: methodology, planning factor, team capacity vs. team derived, one row per person (an Override column appears only when at least one override was applied).
The script prints every file it wrote with per-person derived hours — relay that list to the user.
PI mode → .edpa/reports/pi-<PI-ID>/
pi-summary-<PI-ID>.md— per-person capacity/derived totals across all iterations of the PI that have results, plus a per-iteration breakdown (team totals, invariants).
Related artifacts (produced by /edpa:engine, not this skill)
edpa-results.xlsx(Team Summary + Item Costs tabs) — per-item cost allocation lives in the Item Costs tab.- Frozen snapshot
.edpa/snapshots/<ID>.json— immutable, content-hashed; changed engine reruns create<ID>_rev<N>.jsonrevisions instead of overwriting.
For a "who paid for item X" question, use the Item Costs XLSX tab, or:
python3 .edpa/engine/scripts/engine.py --edpa-root .edpa \
--iteration <iteration-id> --explain <person-id> --explain-item <item-id>
Flow metrics
For lightweight analytics without a full engine run, use the edpa_flow_metrics MCP tool. It computes cycle time (median days from created_at to closed_at), throughput (items closed per week), and open-item age from the timestamp fields populated by sync. No edpa_results.json required — it reads backlog YAML directly.
Error handling
- Missing
edpa_results.json→ the script exits with an error; run/edpa:engine <iteration-id>first. --pifinds noiteration-<PI>.*results directories → run the engine for at least one iteration of that PI first.Invariant: FAILon a timesheet → the engine recorded an invariant violation for that person; re-run/edpa:engineand investigate with--explainbefore distributing timesheets.- Nothing is auto-committed. Commit the generated timesheets (and PI summary) as part of the iteration-close batch.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.