Files
taskgraph_ts/tasks/implementation/cost-benefit/ev-calculation.md
glm-5.1 6016e81162 feat(cost-benefit): implement calculateTaskEv pure function
Implement the core EV calculation: EV = p*C_success + (1-p)*C_fail
where C_success = scopeCost*impactWeight, C_fail = scopeCost*impactWeight + fallbackCost + timeLost*expectedRetries.

- expectedRetries = (1-p)/p when p>0, else 0 (geometric series)
- Caps expectedRetries at config.retries when retries > 0
- Multiplies final EV by config.valueRate when non-zero
- 30 unit tests covering formula, edge cases, and Python research model values
2026-04-27 11:51:59 +00:00

2.2 KiB
Raw Blame History

id, name, status, depends_on, scope, risk, impact, level
id name status depends_on scope risk impact level
cost-benefit/ev-calculation Implement calculateTaskEv pure function completed
schema/numeric-methods-and-defaults
schema/result-types
narrow low component implementation

Description

Implement calculateTaskEv(p, scopeCost, impactWeight, config?): EvResult in src/analysis/cost-benefit.ts. This is the pure math function — takes numeric inputs, returns EV result. No graph dependency.

Per cost-benefit.md:

EV = P_success × C_success + (1 - P_success) × C_fail

Where C_fail = scopeCost + fallbackCost + timeLost × expectedRetries.

Acceptance Criteria

  • calculateTaskEv(p: number, scopeCost: number, impactWeight: number, config?: EvConfig): EvResult
  • Returns EvResult: { ev, pSuccess, expectedRetries }
  • expectedRetries = (1 - p) / p when p > 0, else 0 (geometric series)
  • C_fail = scopeCost * impactWeight + fallbackCost + timeLost * expectedRetries (impactWeight scales the cost)
  • EV = p * scopeCost * impactWeight + (1-p) * C_fail
  • When config.retries is provided and > 0, caps expectedRetries at retries
  • When config.valueRate is non-zero, multiplies the final EV
  • Edge cases: p = 0 (guaranteed failure), p = 1 (guaranteed success), default config (all zeros)
  • Unit tests: known calculations from the Python research model, boundary values, config variations

References

  • docs/architecture/cost-benefit.md — EV formula, EvConfig parameters, EvResult
  • docs/architecture/api-surface.md — calculateTaskEv signature
  • docs/architecture/schemas.md — EvConfig, EvResult schemas

Notes

All acceptance criteria verified via 30 unit tests covering formula correctness, edge cases, config variations, and known Python research model values.

Summary

Implemented calculateTaskEv pure function in src/analysis/cost-benefit.ts.

  • Modified: src/analysis/cost-benefit.ts — full implementation of calculateTaskEv
  • Modified: test/cost-benefit.test.ts — 30 comprehensive unit tests
  • Tests: 30, all passing (286 total across suite)
  • Lint: clean (tsc --noEmit passes)