Apply Development Effort Calculator to real pilot candidates (WP-0010-T03)

Adds since/until date-range scoping to cluster_commit_hours() and
workplan_task_counts() (threaded through calculate_target_basis()),
needed whenever a candidate is one bounded workplan within a repo
whose overall history spans much more (net-kingdom, railiance-apps)
rather than the whole repo being the candidate (vergabe-teilnahme,
info-tech-canon).

Fixes a real bug found along the way: workplan_task_counts() only
scanned the top level of workplans/, missing net-kingdom's
workplans/archived/ convention entirely - silently reported zero
finished workplans for NK-WP-0002, which lives there. Fixed to scan
recursively; added a regression test.

Updates all three draft pilot-candidate manifests with calculator-
derived target_basis/initial_target values, replacing the hand-picked
placeholders:
  net-kingdom-local-identity:      200,000 -> 10,000 EUR (floor + sanity warnings)
  railiance-vergabe-teilnahme:   3,500,000 -> 648,800 EUR (no warnings)
  info-tech-canon-service-surface: 2,500,000 -> 141,800 EUR (sanity warning)

history/260730-EffortCalculator-CandidateApplication.md records full
derivation, warnings, and the judgment calls made explicit rather than
silently picked (date-scoping windows; measuring vergabe-teilnahme's
own repo rather than railiance-apps' deployment-only wiring, with both
figures shown). Still draft/non-binding - WP-0008-T05 unaffected.

5 new tests (20 -> now covering since/until scoping and the
archived-subdirectory fix). Full suite: 84 passing offline.
This commit is contained in:
tegwick 2026-07-30 13:29:06 +02:00
parent 78a5e72bbf
commit 6eec4f6634
9 changed files with 405 additions and 25 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Development Effort Calculator"
domain: infotech
repo: target-revenue
status: active
status: finished
owner: claude
topic_slug: infotech
created: "2026-07-30"
@ -153,7 +153,7 @@ new hard dependency (stdlib + existing `pathlib`/`subprocess`/`re` only).
```task
id: TREV-WP-0010-T03
status: todo
status: done
priority: medium
state_hub_task_id: "74a3db97-1b66-4514-895a-bb9c385008aa"
```
@ -167,3 +167,31 @@ illustrative figures currently in `examples/pilot-candidates/*/manifest.json`.
This remains draft/non-binding — updating a draft manifest's numbers is
not a Phase declaration, and does not touch
`workplans/TREV-WP-0008-governance-and-pilot-rollout.md` T05's own gate.
**Result:** All three draft manifests updated with calculator-derived
`target_basis`/`initial_target` values; full derivation and warnings in
`history/260730-EffortCalculator-CandidateApplication.md`.
`net-kingdom-local-identity`: date-scoped to `NK-WP-0002`'s own window
(`net-kingdom` has since grown far beyond that one workplan) — hit the
1-day floor *and* the sanity-check warning; Initial Target 200,000 → 10,000
EUR. `railiance-vergabe-teilnahme`: measured against the `vergabe-teilnahme`
application repo itself (not `railiance-apps`, which only holds
deployment wiring — a judgment call recorded explicitly, with the
alternative repo's figure shown too) — no warnings; Initial Target
3,500,000 → 648,800 EUR. `info-tech-canon-service-surface`: whole-repo
history — sanity-check warning fired (12 finished workplans/51 tasks
against 1.42 raw days) even though above the 1-day floor; Initial Target
2,500,000 → 141,800 EUR. Every calculator-derived figure came out
materially lower than the earlier hand-picked placeholders, as expected
since those were never reasoned from a real measurement.
**Bug found and fixed along the way:** `workplan_task_counts()` only
scanned the top level of `workplans/`, missing `net-kingdom`'s
`workplans/archived/` convention entirely (silently reporting zero
finished workplans for `NK-WP-0002`, which lives there). Fixed to scan
recursively; added a regression test
(`test_workplan_task_counts_scans_archived_subdirectory`). Also added
`since`/`until` date-range scoping to both `cluster_commit_hours()` and
`workplan_task_counts()` (threaded through `calculate_target_basis()`),
needed for this task and reusable for any future candidate that's one
workplan within a larger repo.