Deduction V2 — progress 2026-07-26
Delivery / Program Management — periodic status report.
health:carries the delivery-health status; the doc-lifecyclestatus:stays in the linter enum (active).
Progress
progress_done_days: 16.5 · progress_pct: 51 · progress_total_days: 32.5
No new milestone shipped since 2026-07-24; this entry records an M6 scope change (spec-only, no code yet). Effort and denominator unchanged: BE 23 · FE 3 · QA 6.5 = 32.5 md.
- M6 (BIF-9016, DED-S03 manual re-trigger) broadened. The manual "trigger settle daily"
moved from a single-company account-detail button to a modpanel Finance-menu tool that can
trigger a single CID, many CIDs, or all CIDs:
- Single / many → hub-service
POST /billings/settle_wa_holds(oauth2 :modpanel) withorganization_id/organization_ids[]→ hub-coreInteractors::Billings::TriggerWaHoldSettlementenqueuesSettleWaHoldsWorkerper eligible CID. - All → same endpoint with
all→ enqueues the existingSettleWaHoldsDispatcherWorker(the nightly fan-out) on demand. - Gating rule: a CID settles only when
wa_hold_settlement_enabled?is true — i.e. its per-companywa_hold_settlementflag is ON or the global flag is ON (Services::Billing::FeatureFlag; global ON → all CIDs, global OFF → onlypreference_unique_idsallow-listed CIDs). Ineligible CIDs in a single/many request are skipped and reported, never silently settled. - Placement: new item under
moderator-be_sidebar_finance.html.erb→ newBilling::WaHoldSettlementsControllerpage (form: single / many / all), gated by a newcan?permission; calls hub-service via the M5 HTTP client.
- Single / many → hub-service
Estimate held at BE 1.5 · FE 0.5 · QA 0.5 = 2.5 md — the single/many/all fan-out reuses the shipped
SettleWaHoldsDispatcherWorker + wa_hold_settlement_enabled?, so the extra scope is mostly a wider
contract and a Finance-menu form rather than new engine work.
Evidence
- M6 → BIF-9016 (Task, Epic BIF-8644, Sprint 21464); summary + description updated 2026-07-26 to the Finance-menu / single-many-all design.
- Task-breakdown M6 section rewritten with the new scope, gating rule, and implementation plan.
- Flag semantics:
documentations/wa_hold_settlement-flag-registration.md(wa_hold_settlement_enabled?= per-company flag ON ∨ global ON).
Lowlights & blockers
Unchanged from 2026-07-24: QA (6.5 md) not started; M0 edits shipped money-path
code; M4 (chat FE) unverified (hub repo not checked out); governance gate (RFC in-review →
approved, PRD refresh) still open, PM-owned, not blocking engineering. M6 depends on M1b (BIF-8958)
- M5's HTTP client (BIF-8887); both must land before M6 starts.