A park's until conflates "expected to resume" with "about to give up"
4d4f52f (#591) made waiting_until real: an engine_limit park now records the instant it expects to resume, and work-report.ts:127 renders it as "expected to resume in …".
The human handoff deliberately does not set it, and that was the right call — its 15-minute deadline is a give-up, not a resume. Rendering a give-up time under "expected to resume" would tell an owner to wait for something that is about to stop waiting for them.
So the field is correct today only because one of its two producers abstains. That is a gap held open by omission, not by design.
The promise is now half-true, in two places
Why this misleads
The two deadlines demand opposite actions. "Resuming at 16:00" means do nothing. "Giving up at 16:00" means intervene now. A single field rendered with a single verb cannot carry both, and the owner cannot tell which they are looking at.
Acceptance criteria
- A deadline that is a give-up is distinguishable from one that is a resume — a second field, or a reason-aware renderer. State which and why.
- The human handoff's 15-minute deadline becomes visible. It is currently knowable only by not being there.
composition.ts:255 and RUN_HEALTH_LEGEND state what is true for every park reason, not the best case.
- A guard asserts every park reason's deadline is rendered with the verb matching its kind, denominator over all park reasons per ADR 0002.
- Red demonstrated: a human-handoff deadline must not render as "expected to resume".
Verified vs inferred
- Verified:
work-report.ts:127's clause; that the human path passes no until; both legend strings; coding.ts:170.
- Inferred: nothing. The abstention is deliberate and was reported as such by the agent that implemented it.
A park's
untilconflates "expected to resume" with "about to give up"4d4f52f(#591) madewaiting_untilreal: anengine_limitpark now records the instant it expects to resume, andwork-report.ts:127renders it as "expected to resume in …".The human handoff deliberately does not set it, and that was the right call — its 15-minute deadline is a give-up, not a resume. Rendering a give-up time under "expected to resume" would tell an owner to wait for something that is about to stop waiting for them.
So the field is correct today only because one of its two producers abstains. That is a gap held open by omission, not by design.
The promise is now half-true, in two places
composition.ts:255— "waiting(deliberately parked —waitNotesays what for and until when)". True forengine_limit, false forhuman.RUN_HEALTH_LEGEND(added by the concurrent The server-side health verdict reports 'working' for all 89 finished runs — the enum has no member for a closed run #588/subordinate_status and the console still read the raw status column — a supervisor waits on an agent the platform knows has stopped #589 work) carries the same promise with the same status.coding.ts:170) remains the accurate one.Why this misleads
The two deadlines demand opposite actions. "Resuming at 16:00" means do nothing. "Giving up at 16:00" means intervene now. A single field rendered with a single verb cannot carry both, and the owner cannot tell which they are looking at.
Acceptance criteria
composition.ts:255andRUN_HEALTH_LEGENDstate what is true for every park reason, not the best case.Verified vs inferred
work-report.ts:127's clause; that the human path passes nountil; both legend strings;coding.ts:170.