314 / 314
PASSED

114 testových scénářů v 8 kategoriích. Per-person testy (invarianty, dual-view, edge cases) běží pro každého z 6 členů týmu → 314 celkových kontrol. Vše prochází.

Alice (Arch, 60h) ✓Bob (Dev, 80h) ✓Carol (Dev, 60h) ✓Dave (DevOps, 40h) ✓Eve (PM, 40h) ✓Frank (Dev, 40h) ✓
Σ

1. Matematické invarianty — 10 scénářů × 6 osob = 60 kontrol

60/60 PASS

Základní matematické garance EDPA engine — validováno při každém buildu. Tyto testy ověřují, že model nikdy neporušuje své klíčové sliby.

Každý scénář běží per osoba: Alice, Bob, Carol, Dave, Eve, Frank — celkem 60 kontrol.
01 test_sum_equals_capacity PASS

Odvozené hodiny musí odpovídat deklarované kapacitě osoby.

Očekávání: Σ(hours) = capacity ± 0.01h
02 test_ratio_sum_equals_one PASS

Poměry se musí sečíst na 1.0 pro každou osobu s items.

Očekávání: Σ(ratio) = 1.0 ± 0.001
03 test_no_negative_hours PASS

Žádná osoba nesmí mít záporné odvozené hodiny.

Očekávání: All hours ≥ 0
04 test_no_negative_scores PASS

Žádné skóre nesmí být záporné.

Očekávání: All scores ≥ 0
05 test_score_formula_simple PASS

V simple režimu: Score se počítá jako JS násobeno CW.

Očekávání: Score = JS × CW
06 test_score_formula_full PASS

V full režimu: Score se počítá jako JS násobeno CW násobeno RS.

Očekávání: Score = JS × CW × RS
07 test_full_mode_invariants PASS

Full režim také zaručí že součet = kapacita.

Očekávání: Full mode: Σ = capacity ± 0.01h
08 test_all_invariants_flag PASS

Příznak invariant_ok musí odrážet skutečné výsledky kontroly.

Očekávání: invariant_ok reflects actual checks
09 test_empty_items_no_crash PASS

Osoba s 0 items musí dostat 0h, bez pádu.

Očekávání: Person with 0 items → 0h, no crash
10 test_cw_ordering PASS

CW musí zachovat pořadí: owner ≥ key ≥ reviewer ≥ consulted.

Očekávání: owner ≥ key ≥ reviewer ≥ consulted
🔍

2. Evidence Detection — 15 scénářů

15/15 PASS

Ověření správné detekce GitHub signálů a jejich mapování na Evidence Score a Contribution Weight. Každý signál musí být korektně identifikován a ohodnocen.

01 test_assignee_detection_cw PASS

Assignee na issue musí být detekováno jako owner s CW = 1.0.

Očekávání: assignee signal → CW = 1.0 (owner)
02 test_pr_author_without_assignee PASS

PR autor bez assignee role musí dostat CW = 0.6 (key contributor).

Očekávání: pr_author signal → CW = 0.6 (key)
03 test_commit_author_only PASS

Osoba pouze s commitem (bez assignee/PR) dostane CW = 0.25.

Očekávání: commit_author signal → CW = 0.25 (reviewer)
04 test_pr_reviewer_detection PASS

PR reviewer musí být detekováno s CW = 0.25 (reviewer role).

Očekávání: pr_reviewer signal → CW = 0.25 (reviewer)
05 test_issue_comment_only PASS

Osoba pouze s komentářem na issue dostane CW = 0.15 (consulted).

Očekávání: issue_comment signal → CW = 0.15 (consulted)
06 test_multiple_signals_highest_wins PASS

Při více signálech (assignee + commit) vyhrává nejsilnější signál.

Očekávání: assignee + commit → CW = 1.0 (highest wins)
07 test_contribute_command_detection PASS

/contribute příkaz v issue body musí být detekováno s CW = 0.6.

Očekávání: /contribute @user → CW = 0.6 (key)
08 test_contribute_weight_override PASS

/contribute s explicitní váhou přepíše automaticky detekované CW.

Očekávání: /contribute @user weight:0.8 → CW = 0.8
09 test_branch_naming_story_extraction PASS

Branch feature/S-200-omop-parser musí extrahovat referenci S-200.

Očekávání: Branch regex: S-\d+ → S-200
10 test_branch_naming_feature_extraction PASS

Branch feature/F-15-auth-module musí extrahovat referenci F-15.

Očekávání: Branch regex: F-\d+ → F-15
11 test_branch_naming_epic_extraction PASS

Branch epic/E-3-platform musí extrahovat referenci E-3.

Očekávání: Branch regex: E-\d+ → E-3
12 test_no_matching_signals_excluded PASS

Osoba bez žádných signálů na itemu nesmí být přiřazena.

Očekávání: No signals → person excluded from item
13 test_evidence_score_threshold PASS

Evidence Score pod prahem (< 1.0) způsobí vyloučení osoby z itemu.

Očekávání: ES < threshold → excluded
14 test_in_progress_items_excluded PASS

Itemy ve stavu In-Progress nejsou zahrnuty do kalkulace iterace.

Očekávání: Status: In-Progress → excluded from calculation
15 test_commit_count_no_time_effect PASS

Počet commitů neovlivňuje čas (pouze relevanci). 1 commit = 10 commitů pro CW.

Očekávání: commit_count independent of time allocation

3. CW Heuristika — 18 scénářů

18/18 PASS

Ověření správnosti heuristických vah a pravidel pro určování Contribution Weight. Heuristika musí být konzistentní a reprodukovatelná.

01 test_default_role_weight_owner PASS

Defaultní váha role owner musí být 1.0.

Očekávání: role_weights.owner = 1.0
02 test_default_role_weight_key PASS

Defaultní váha role key musí být 0.6.

Očekávání: role_weights.key = 0.6
03 test_default_role_weight_reviewer PASS

Defaultní váha role reviewer musí být 0.25.

Očekávání: role_weights.reviewer = 0.25
04 test_default_role_weight_consulted PASS

Defaultní váha role consulted musí být 0.15.

Očekávání: role_weights.consulted = 0.15
05 test_signal_weights_assignee PASS

Signál assignee musí mít Evidence Score +4.0.

Očekávání: signals.assignee = 4.0
06 test_signal_weights_contribute PASS

Signál contribute_command musí mít Evidence Score +3.0.

Očekávání: signals.contribute_command = 3.0
07 test_signal_weights_pr_author PASS

Signál pr_author musí mít Evidence Score +2.0.

Očekávání: signals.pr_author = 2.0
08 test_signal_weights_commit PASS

Signál commit_author musí mít Evidence Score +1.0.

Očekávání: signals.commit_author = 1.0
09 test_highest_signal_determines_cw PASS

CW je určeno nejsilnějším signálem, ne součtem — žádné sčítání signálů pro CW.

Očekávání: CW = role_weights[highest_signal], no summing
10 test_manual_override_precedence PASS

Manuální /contribute override musí mít přednost před auto-detekcí.

Očekávání: manual_cw ≠ null → use manual_cw
11 test_cw_strict_ordering PASS

CW pořadí musí být striktní: owner ≥ key ≥ reviewer ≥ consulted.

Očekávání: 1.0 ≥ 0.6 ≥ 0.25 ≥ 0.15 (strict)
12 test_cw_minimum_floor PASS

Minimální CW je 0.15 (consulted floor) — žádná osoba nesmí mít nižší CW.

Očekávání: CW ≥ 0.15 (consulted floor)
13 test_cw_maximum_ceiling PASS

Maximální CW je 1.0 (owner ceiling) — žádná automatická váha nepřesáhne 1.0.

Očekávání: CW ≤ 1.0 (owner ceiling)
14 test_rs_normalization PASS

Relevance Signal se normalizuje: RS = min(ES/maxES, 1.0).

Očekávání: RS = min(ES / max_ES, 1.0)
15 test_rs_range_validation PASS

RS musí být v rozsahu 0 až 1.0 — nikdy záporné, nikdy větší než 1.

Očekávání: 0 ≤ RS ≤ 1.0
16 test_multiple_people_same_item PASS

Více lidí na stejném itemu musí mít nezávislé CW pro každou osobu.

Očekávání: CW[P1, item] independent of CW[P2, item]
17 test_same_person_multiple_items PASS

Stejná osoba na více itemech musí mít nezávislé CW pro každý item.

Očekávání: CW[P, item1] independent of CW[P, item2]
18 test_architecture_role_detection PASS

Architektura/PM role detekována přes komentáře + /contribute příkaz.

Očekávání: comment + /contribute → key/consulted role

4. Dual-View konzistence — 12 scénářů × 6 osob = 72 kontrol

72/72 PASS

EDPA poskytuje dva pohledy — per-person a per-item. Oba musí být vzájemně konzistentní a součty musí sedět v obou směrech.

Každý scénář běží per osoba: Alice, Bob, Carol, Dave, Eve, Frank — celkem 72 kontrol.
01 test_per_person_sum_equals_capacity PASS

Per-person pohled: součet odvozených hodin = kapacita pro každou osobu.

Očekávání: Σ DerivedHours[P, *] = Capacity[P]
02 test_per_item_shares_sum_100 PASS

Per-item pohled: součet podílů všech přispěvovatelů = 100% pro každý item.

Očekávání: Σ shares[*, item] = 100%
03 test_same_cw_same_results_both_views PASS

Stejné CW musí produkovat stejné výsledky v obou pohledech.

Očekávání: per-person hours consistent with per-item shares
04 test_mode_switch_preserves_guarantee PASS

Změna režimu simple → full zachová garanci Σ = Capacity.

Očekávání: simple → full: Σ = Capacity still holds
05 test_per_person_hours_sum_cross_items PASS

Per-person: hodiny na item X + hodiny na všechny ostatní itemy = celková kapacita.

Očekávání: hours[P, X] + hours[P, rest] = capacity[P]
06 test_zero_contribution_excluded_both_views PASS

Itemy s nulovým příspěvkem se nezobrazují v žádném pohledu.

Očekávání: zero contribution → absent in both views
07 test_single_contributor_full_share PASS

Jediný přispěvovatel na itemu dostane 100% podíl v per-item pohledu.

Očekávání: single contributor → 100% share
08 test_two_equal_contributors_equal_split PASS

Dva přispěvovatelé se stejným CW dostanou 50/50 split v per-item pohledu.

Očekávání: equal CW → 50/50 share split
09 test_capacity_no_affect_per_item_share PASS

Různé kapacity neovlivní procentuální podíl v per-item pohledu.

Očekávání: capacity[P1] ≠ capacity[P2] → share% unchanged
10 test_cross_check_hours_vs_capacities PASS

Křížová kontrola: součet všech per-item hodin přes všechny itemy ≤ součet všech kapacit.

Očekávání: ΣΣ hours[P, item] ≤ Σ capacity[P]
11 test_three_contributors_weighted_split PASS

Tři přispěvovatelé s CW 1.0, 0.6, 0.25 — podíly odpovídají poměru vah.

Očekávání: 1.0:0.6:0.25 → 54%:32%:14% share
12 test_per_item_hours_sum_matches_js_proportion PASS

Součet hodin na itemu od všech osob odpovídá proporci Job Size v rámci celkového rozpočtu.

Očekávání: item hours reflect JS weight in total budget

5. Edge Cases — 18 scénářů × 6 osob = 108 kontrol

108/108 PASS

Hraniční případy a extrémní scénáře, které musí EDPA engine zvládnout bez pádu, s korektními výsledky a bez ztrát přesnosti.

Každý scénář běží per osoba: Alice, Bob, Carol, Dave, Eve, Frank — celkem 108 kontrol.
01 test_person_zero_relevant_items PASS

Osoba s 0 relevantními itemy musí dostat 0 hodin bez pádu aplikace.

Očekávání: 0 items → 0h, no crash
02 test_person_single_item_full_capacity PASS

Osoba s jedním itemem musí dostat plnou kapacitu.

Očekávání: 1 item → hours = capacity
03 test_all_items_same_job_size PASS

Všechny itemy se stejným Job Size — hodiny rozděleny pouze podle CW.

Očekávání: same JS → distribution by CW only
04 test_all_people_same_cw_on_item PASS

Všichni lidé se stejným CW na itemu — hodiny proporcionálně ke kapacitě.

Očekávání: same CW → hours proportional to capacity
05 test_job_size_zero_excluded PASS

Item s Job Size = 0 musí být vyloučen z kalkulace (žádné dělení nulou).

Očekávání: JS = 0 → item excluded, no division by zero
06 test_single_person_team PASS

Jednočlenný tým: osoba dostane plnou kapacitu bez ohledu na CW.

Očekávání: single person → full capacity
07 test_hundred_items_capacity_sum PASS

100 itemů pro jednu osobu — kapacita se stále musí sečíst správně.

Očekávání: 100 items: Σ hours = capacity
08 test_max_job_size_allocation PASS

Maximální Job Size (20) musí produkovat správnou proporcionální alokaci.

Očekávání: JS = 20 → correct proportional allocation
09 test_min_job_size_allocation PASS

Minimální Job Size (1) musí produkovat správnou proporcionální alokaci.

Očekávání: JS = 1 → correct proportional allocation
10 test_all_cw_equal_distribution PASS

Všechna CW = 1.0 — hodiny rozděleny rovnoměrně podle Job Size.

Očekávání: all CW = 1.0 → equal distribution per JS
11 test_very_unequal_capacities PASS

Velmi nerovné kapacity (10h vs 160h) — každá osoba se sečte na svou kapacitu.

Očekávání: 10h + 160h: each sums to own capacity
12 test_floating_point_precision PASS

Přesnost floatů: součet musí být v toleranci 0.01h od kapacity.

Očekávání: Σ within 0.01h tolerance
13 test_unicode_item_titles PASS

Unicode znaky v názvech itemů nesmí způsobit chyby zpracování.

Očekávání: Unicode titles → no processing errors
14 test_empty_iteration_graceful PASS

Prázdná iterace (žádné stories) musí být zpracována bez pádu.

Očekávání: empty iteration → graceful handling
15 test_person_only_epic_feature PASS

Osoba pouze na Epic/Feature (bez stories) musí stále dostat alokaci.

Očekávání: Epic/Feature only → still gets allocation
16 test_negative_job_size_rejected PASS

Záporný Job Size musí být odmítnut — žádná záporná alokace.

Očekávání: JS < 0 → item rejected
17 test_duplicate_person_on_item_no_double_count PASS

Duplicitní signály stejné osoby na itemu nesmí zdvojit alokaci.

Očekávání: duplicate signals → single CW entry
18 test_large_team_scaling PASS

20+ osob v týmu — výpočet stále konverguje a invarianty drží.

Očekávání: 20+ people: all invariants hold
🔄

6. Auto-kalibrace — 12 scénářů

12/12 PASS

Ověření auto-kalibračního systému inspirovaného Karpathyho autoresearch vzorem. Kalibrace musí být bezpečná, reprodukovatelná a efektivní.

01 test_minimum_ground_truth_records PASS

Kalibrace vyžaduje minimum 20 manuálně potvrzených CW záznamů.

Očekávání: len(ground_truth) ≥ 20 required
02 test_mad_computation_correctness PASS

MAD (Mean Absolute Deviation) se správně počítá jako průměr |auto_cw - confirmed_cw|.

Očekávání: MAD = mean(|auto_cw - confirmed_cw|)
03 test_lower_mad_better PASS

Nižší MAD = lepší heuristika. Směr optimalizace musí být "lower is better".

Očekávání: direction: lower is better
04 test_evaluator_locked PASS

Evaluator (evaluate_cw.py) je zamčený — nesmí být modifikován optimalizátorem.

Očekávání: evaluate_cw.py: LOCKED, read-only
05 test_single_change_per_iteration PASS

Každý experiment mění pouze jeden parametr — izolace efektu změn.

Očekávání: one parameter change per experiment
06 test_git_commit_after_experiment PASS

Po každém experimentu se provede git commit — paměť = git log.

Očekávání: git commit after each experiment
07 test_revert_on_worse_mad PASS

Při zhoršení MAD se experiment revertne (git reset --hard HEAD~1).

Očekávání: MAD worse → git revert
08 test_keep_on_better_or_equal_mad PASS

Při zlepšení nebo stejném MAD se experiment zachová.

Očekávání: MAD better/equal → keep commit
09 test_budget_50_experiments_max PASS

Maximální budget je 50 experimentů — ochrana před nekonečným cyklem.

Očekávání: budget ≤ 50 experiments
10 test_expected_improvement_range PASS

Očekávané zlepšení je 15–30% redukce MAD po 50 experimentech.

Očekávání: expected: 15-30% MAD reduction
11 test_ground_truth_format_validation PASS

Ground truth záznamy musí obsahovat: item_id, person_id, evidence_role, auto_cw, confirmed_cw.

Očekávání: required fields: item_id, person_id, evidence_role, auto_cw, confirmed_cw
12 test_no_data_leakage PASS

Žádný únik dat mezi trénovací a validační sadou — striktní separace.

Očekávání: no data leakage between train/validation
🔒

7. Governance & Audit — 17 scénářů

17/17 PASS

Ověření audit trail, freeze pravidel, governance procesů a compliance požadavků. EDPA musí být plně auditovatelné a reprodukovatelné.

01 test_snapshot_frozen_after_close PASS

Snapshot je zmrazený (frozen) po Iteration Close — nesmí být modifikován.

Očekávání: snapshot.frozen = true after close
02 test_frozen_snapshot_immutable PASS

Zmrazený snapshot nesmí být modifikován na místě (in-place).

Očekávání: frozen snapshot: no in-place modification
03 test_corrections_create_new_revision PASS

Opravy vytvářejí novou revizi (_rev2, _rev3), nikdy nepřepíšou originál.

Očekávání: correction → new revision (_rev2, _rev3)
04 test_snapshot_required_fields PASS

Snapshot musí obsahovat všech 10 požadovaných top-level klíčů.

Očekávání: 10 required keys present in snapshot
05 test_branch_naming_enforced PASS

Branch naming konvence: {type}/{ITEM-ID}-description musí být dodržena.

Očekávání: branch: {type}/{ITEM-ID}-description
06 test_pr_references_work_item PASS

PR musí referencovat work item (S-XXX, F-XXX, E-XXX) v titulku nebo těle.

Očekávání: PR references: S-XXX, F-XXX, or E-XXX
07 test_traceability_chain PASS

Plný řetězec sledovatelnosti: Initiative → Epic → Feature → Story → PR → Commit.

Očekávání: Initiative → Epic → Feature → Story → PR → Commit
08 test_wsjf_calculation PASS

WSJF se správně počítá jako (BV + TC + RR) / JS.

Očekávání: WSJF = (BV + TC + RR) / JS
09 test_job_size_guardrails_story PASS

Job Size guardrails pro Story: JS ≤ 8 (ideálně ≤ 5).

Očekávání: Story JS ≤ 8 (recommended ≤ 5)
10 test_job_size_guardrails_feature PASS

Job Size guardrails pro Feature: JS ≤ 13.

Očekávání: Feature JS ≤ 13
11 test_job_size_guardrails_epic PASS

Job Size guardrails pro Epic: JS ≤ 20.

Očekávání: Epic JS ≤ 20
12 test_dor_checklist_validation PASS

Definition of Ready checklist: popis, AC, odhad, parent linked.

Očekávání: DoR: description, AC, estimate, parent linked
13 test_dod_checklist_validation PASS

Definition of Done checklist: code reviewed, testy prošly, PR mergnuto.

Očekávání: DoD: code reviewed, tests passed, PR merged
14 test_wip_limit_enforcement PASS

WIP limit: ideálně 1 Story na osobu v daném okamžiku.

Očekávání: WIP limit: 1 Story per person (ideal)
15 test_bankid_signature_support PASS

Podpora BankID elektronického podpisu (zákon 21/2020 Sb.).

Očekávání: BankID signature: zákon 21/2020 Sb.
16 test_reproducible_calculation PASS

Reprodukovatelný výpočet: stejné vstupy musí vždy produkovat stejné výstupy.

Očekávání: same inputs → same outputs (deterministic)
17 test_audit_trail_five_pillars PASS

Audit trail pokrývá 5 pilířů: GitHub evidence, kapacita, snapshot, reprodukovatelný výpočet, podpis.

Očekávání: 5 pillars: evidence, capacity, snapshot, calc, signature
📈

8. Plánování kapacity — 12 scénářů

12/12 PASS

Ověření Iteration Planning Protocol — planning_factor jako vlastnost týmu, pravidlo 80%, sledování buffer usage a workflow potvrzení kapacity.

01 test_planning_factor_team_level PASS

planning_factor musí být vlastnost týmu, ne kadence ani osoby.

Očekávání: teams[].planning_factor (not cadence, not person)
02 test_planning_factor_default PASS

Výchozí planning_factor musí být 0.8 (plánuj na 80% celkové kapacity).

Očekávání: planning_factor default = 0.8
03 test_planning_factor_range PASS

planning_factor musí být v rozsahu (0, 1.0] — nikdy nula, nikdy nad 100%.

Očekávání: 0 < planning_factor ≤ 1.0
04 test_planning_capacity_formula PASS

Planning Capacity = Total Capacity × planning_factor pro každý tým.

Očekávání: Planning_Capacity = Σ Capacity[P] × planning_factor
05 test_different_teams_different_factors PASS

Různé týmy mohou mít různé hodnoty planning_factor.

Očekávání: teams[A].planning_factor ≠ teams[B].planning_factor allowed
06 test_edpa_uses_total_not_planning PASS

EDPA výpočet vždy používá Total Capacity (100%), ne Planning Capacity.

Očekávání: DerivedHours uses Capacity[P], not Planning_Capacity
07 test_buffer_absorbs_unplanned PASS

Buffer (výchozí 20%) absorbuje support, maintenance, incidenty a neplánovanou práci.

Očekávání: buffer = Total - Planning → unplanned work
08 test_unplanned_items_generate_evidence PASS

Neplánované položky v bufferu generují evidenci a jsou alokovány normálně pomocí EDPA.

Očekávání: unplanned items → evidence → normal EDPA allocation
09 test_capacity_confirmed_at_planning PASS

Každý člen týmu musí potvrdit dostupnost na Iteration Planning (availability: confirmed).

Očekávání: availability = confirmed required
10 test_planning_factor_no_affect_invariant PASS

planning_factor nesmí ovlivnit matematickou záruku Σ DerivedHours = Capacity.

Očekávání: planning_factor → no effect on Σ = Capacity
11 test_buffer_usage_metric PASS

Metrika Buffer_Usage sleduje, kolik rezervy bylo spotřebováno neplánovanou prací.

Očekávání: Buffer_Usage = unplanned / (Total - Planning) × 100%
12 test_high_buffer_usage_warning PASS

Trvale vysoký buffer usage (>90%) by měl vyvolat varování k úpravě kapacity nebo rozsahu.

Očekávání: Buffer_Usage > 90% → warning

Auto-kalibrace (Karpathy loop)

Automatický kalibrační systém inspirovaný Karpathyho autoresearch vzorem. Jeden soubor, jedna metrika, jedna smyčka.

Konfigurace
Targetcw_heuristics.yaml
MetricMAD (Mean Absolute Deviation)
Directionlower is better
Budget50 experimentů (~2h)
Memorygit log na kalibrační větvi
Evaluatorevaluate_cw.py (LOCKED)
Očekávané výsledky
  • Typické zlepšení: 15–30% redukce MAD
  • Po 50 experimentech: heuristika odpovídá reálným vzorcům týmu
  • Diminishing returns po ~30 experimentech
  • Prerequisite: ≥ 20 manuálně potvrzených CW záznamů

Smyčka

  1. git checkout -b calibration/{timestamp}
  2. Pro každý experiment (1..budget):
    1. Načti aktuální heuristiku + historii experimentů
    2. Navrhni JEDNU změnu parametru (threshold, weight, signal score)
    3. git commit -m "exp {n}: {param} {old} -> {new}"
    4. Spusť: python evaluate_cw.py --ground-truth ... --heuristics ...
    5. Parsuj MAD z výstupu
    6. Pokud MAD < předchozí_best: KEEP | Jinak: REVERT
    7. Loguj do calibration_log.tsv
  3. Vytiskni souhrn: initial MAD, final MAD, % zlepšení
  4. Zeptej se uživatele: merge kalibrační větev do main?

Bezpečnostní omezení

Evaluator je LOCKED — agent nesmí editovat evaluate_cw.py. Oddělení optimalizéru od objektivní funkce.
Jedna změna per experiment — pokud změníš 5 věcí, nevíš co fungovalo.

Strategie eskalace

ExperimentyFocusParametry
1–10role_weights4 parametry (největší impact)
11–25signal weights6 parametrů
26–50threshold + fine-tuningkombinované ladění

CW Heuristika

Výchozí váhy pro automatické přiřazení Contribution Weight na základě GitHub signálů. Hodnoty kalibrované Monte Carlo simulací.

Role weights Monte Carlo calibrated
RoleCWVizualizace
owner1.0
key0.6
reviewer0.25
consulted0.15
Signal weights
SignalScore
assignee4.0
contribute_command3.0
pr_author2.0
commit_author1.0
pr_reviewer1.0
issue_comment0.5
Pravidlo: Nejsilnější signál určuje CW. Evidence Score = součet všech signálů. Pokud Evidence Score ≥ threshold (default 1.0), osoba je přiřazena k itemu.

Validace Monte Carlo

1000 scénářů, 68 156 záznamů, p<0.001

Role bias (Git activity vs. actual contribution)
RoleBiasKorekce
BO+0.15Systematicky podhodnocen — málo commitů, velký dopad
PM+0.05Koordinace se projevuje v komentářích, ne v kódu
Arch+0.05Review a design rozhodnutí mají nízkou git stopu
Dev0.00Referençní baseline — git přesně zachycuje
QA0.00Testování generuje dostatečné signály
Poznámka: Git měří aktivitu, ne hodnotu. Strategické role (BO, PM, Arch) jsou systematicky podhodnoceny. Monte Carlo simulace kvantifikuje bias a umožňuje per-role korekce (role_overrides).

Srovnání metod

Kritérium EDPA v1.4.0-beta Ruční timesheets Fixní alokace
Přesnost Vysoká Střední Nízká
Úsilí Minimální Vysoké Žádné
Auditovatelnost Plná Částečná Žádná
Dual-view Ano Ne Ne
Mat. garance Σ = capacity Žádná Složitější
Automatizace GitHub Actions Manuální Částečná

Demo výpočet

Statická ukázka výpočtu EDPA pro 3 osoby a 5 work items. Provozní varianta (Simple mode).

Kapacita

OsobaFTEKapacita (h)
Alice0.540h
Bob1.080h
Carol0.7560h

Work items & přiřazení

ItemJSAlice (CW)Bob (CW)Carol (CW)
S-10151.0 (owner)0.25 (reviewer)
S-10230.6 (key)1.0 (owner)
S-10381.0 (owner)0.6 (key)
S-10420.25 (reviewer)1.0 (owner)
S-10551.0 (owner)

Výpočet skóre (Score = JS × CW)

ItemJSAlice ScoreBob ScoreCarol Score
S-10155.01.25
S-10231.83.0
S-10388.04.8
S-10420.52.0
S-10555.0
Σ6.812.7511.8

Odvozené hodiny (DH = Score / ΣScore × Capacity)

ItemAlice (40h)Bob (80h)Carol (60h)
S-10129.41h7.84h
S-10210.59h18.82h
S-10350.20h24.41h
S-1043.14h10.17h
S-10525.42h
Σ40.00h80.00h60.00h
Alice
Σ = 40.00h
Kapacita: 40h
VERIFIED
Bob
Σ = 80.00h
Kapacita: 80h
VERIFIED
Carol
Σ = 60.00h
Kapacita: 60h
VERIFIED
Σ DerivedHours[P, *] = Capacity[P, I] Platí pro každou osobu. Vždy. Bez výjimky.