Part of #3665 (split): an agent run's log says where its time went, as deploys already do with timing: from src/apps/timing.ts. Two attempts (pulls #3689 and #3776) did everything in one change, across the runner, early.ts, the stand-in helper and a shared class, and went red. This is one piece of it.
Done:
[ ] Stopwatch.line in src/apps/timing.ts takes an optional since phrase, defaulting to "the deploy started". Every existing deploy line is byte-for-byte unchanged, and an existing deploy timing test proves it.
[ ] With since: "the run started", the line reads timing: run ended 12.0s after the run started — clone 1.0s · brief 0.5s · …. A test with a fake clock asserts that exact text.
[ ] No change to src/crew/ in this issue.
Files: src/apps/timing.ts, its test (e.g. test/apps-timing-line.test.ts).
Risk: none; the deploy wording must not change.
Part of #3665 (split): an agent run's log says where its time went, as deploys already do with
timing:fromsrc/apps/timing.ts. Two attempts (pulls #3689 and #3776) did everything in one change, across the runner,early.ts, the stand-in helper and a shared class, and went red. This is one piece of it.Done:
Stopwatch.lineinsrc/apps/timing.tstakes an optionalsincephrase, defaulting to"the deploy started". Every existing deploy line is byte-for-byte unchanged, and an existing deploy timing test proves it.since: "the run started", the line readstiming: run ended 12.0s after the run started — clone 1.0s · brief 0.5s · …. A test with a fake clock asserts that exact text.src/crew/in this issue.Files: src/apps/timing.ts, its test (e.g. test/apps-timing-line.test.ts). Risk: none; the deploy wording must not change.