The Apple runner builds its TEXT_INPUT_COMMIT_NOT_OBSERVED hint from TextEntryTiming.recoveryDelayMilliseconds (apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift:36, value 80 at :114). The versioned help paragraph introduced in #3334 hard-codes the same number as --delay-ms 80 in src/commands/schema/cli-help-workflows.ts (website/docs/docs/commands.md mirrors it). TS cannot import a Swift constant, so the two can drift silently.
Required behavior: the number is stated once and both surfaces consume it — the cross-language golden tables under contracts/fixtures/ are the mechanism AGENTS.md already prescribes for shared cross-language rules; extend that pattern (or an equivalent single-source check under scripts/) so changing the Swift constant must fail a gate until the help text moves with it.
Completion condition: changing recoveryDelayMilliseconds in Swift without updating the help text fails pnpm check:affected (or a dedicated check), and the current value 80 appears in exactly one declared source plus the generated/pinned projection.
Found by review on #3334 (non-blocking); intentionally not fixed there to keep that PR inside the fill command family.
The Apple runner builds its
TEXT_INPUT_COMMIT_NOT_OBSERVEDhint fromTextEntryTiming.recoveryDelayMilliseconds(apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift:36, value 80 at :114). The versioned help paragraph introduced in #3334 hard-codes the same number as--delay-ms 80insrc/commands/schema/cli-help-workflows.ts(website/docs/docs/commands.mdmirrors it). TS cannot import a Swift constant, so the two can drift silently.Required behavior: the number is stated once and both surfaces consume it — the cross-language golden tables under
contracts/fixtures/are the mechanism AGENTS.md already prescribes for shared cross-language rules; extend that pattern (or an equivalent single-source check underscripts/) so changing the Swift constant must fail a gate until the help text moves with it.Completion condition: changing
recoveryDelayMillisecondsin Swift without updating the help text failspnpm check:affected(or a dedicated check), and the current value 80 appears in exactly one declared source plus the generated/pinned projection.Found by review on #3334 (non-blocking); intentionally not fixed there to keep that PR inside the fill command family.