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ů.

Role weights
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.

Srovnání metod

Kritérium EDPA v1.0.0 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.