PR 18142: workflow-member completion timestamps Current head: 110718766cea99800297920955e71bbb372698c0 Base: 1451e7cb23034d29774338608368a15d8845df36 Focused suites before consolidation: 333 passed (3 files). Focused suites after consolidation: 328 passed (3 files). Review fix: retain startedAt + durationMs estimate when older payloads omit completedAt. Post-review-fix client suite: 19 passed. Other 309 tests unchanged since full green run. Changed-file lint/format, scoped server/client/contracts typechecks and diff whitespace check passed. Four true regression cases failed with main production files and passed after restoring timestamp implementation: × apps/server/src/orchestration-v2/Adapters/claudeWorkflowProgress.test.ts > mergeClaudeWorkflowProgress > maps provider agent states and per-member metrics 15ms × apps/server/src/orchestration-v2/Adapters/claudeWorkflowProgress.test.ts > mergeClaudeWorkflowProgress > keeps other members and phase links when a sparse frame starts a new attempt 2ms × packages/client-runtime/src/state/subagentRuntime.test.ts > projectedSubagentsToRuntime workflow expansion > uses a settled member's wall-clock completion separately from its execution duration 9ms × apps/server/src/orchestration-v2/Adapters/ClaudeAdapterV2.test.ts > ClaudeAdapterV2 background wake turns > answers settled workflow members from a transcript, or the snapshot excerpt 95ms The earlier seven-case probe also included three assertions for changing the older-payload fallback. Review correctly rejected that behavior; those assertions now preserve main’s estimate, so they are not counted as regressions. Existing client coordinator-terminal cases cover both old-payload duration estimate (1.5s member) and missing start/duration fallback (9s coordinator). Reported wall-clock test prefers 4.432s despite 1.5s execution duration and 9s coordinator. App smoke: isolated worktree dev server started; paired web client rendered. No real Claude workflow timing or non-Linux platforms exercised.