Skip to content

Release: input-fidelity lane (retry budget, field verify, adaptive timeout, ensure state, app idle) v209-v213#441

Merged
JE-Chen merged 11 commits into
mainfrom
dev
Jun 25, 2026
Merged

Release: input-fidelity lane (retry budget, field verify, adaptive timeout, ensure state, app idle) v209-v213#441
JE-Chen merged 11 commits into
mainfrom
dev

Conversation

@JE-Chen

@JE-Chen JE-Chen commented Jun 25, 2026

Copy link
Copy Markdown
Member

Release — ROUND-15 input-fidelity lane

Five new headless features, each with a pure / injectable-seam core, full 5-layer wiring (facade → AC_* executor → ac_* MCP → Script Builder), headless tests, and EN/Zh docs. All merged to dev with CI green first try and zero Codacy issues.

Package stays Qt-free; all new logic unit-tested without the OS via injected seams.

JE-Chen added 11 commits June 26, 2026 05:41
resilience.RetryPolicy retries a fixed attempt count with plain
exponential backoff, but can't express a wall-clock deadline (give up
after N seconds total) or jitter (randomized backoff against thundering
herds). RetryBudget adds both, bounded by attempts and/or a deadline,
never sleeping past it; uniform/clock/sleep are injectable so every
delay and giveup decision is deterministic in tests.
…-batch

Add retry_budget: deadline + jitter over resilience retries
field_entry types and hopes — a slow IME, focus steal, input mask or
auto-format can silently drop characters and nothing reads the field
back. Distinct from action_effect (any near-target change) and
postcondition.text_present (text anywhere). compare_field_value is the
pure comparator (exact/trim/ci/normalized/contains); verify_field_value
reads via an injectable reader; fill_and_verify types, reads back and
retries until it matches.
…-batch

Add verify_field: read a field back and confirm the typed value
Hard-coded waits flake either way — too short races a slow machine, too
long makes every failure pay the full timeout. Learn the timeout from
how long the step actually takes: a high percentile scaled by a safety
factor, clamped to a sane band. recommend_timeout is the number to feed
a wait/GateConfig; timeout_stats exposes the percentiles and clamp flags.
Pure, reuses stats.percentile.
…eout-batch

Add adaptive_timeout: derive a wait timeout from observed durations
Acting unconditionally double-toggles an already-checked box or re-enters
an already-correct field and can't be safely re-run. ensure_state reads
first and only acts (then re-reads to verify) when the state differs;
ensure_toggle is the boolean flip specialization. A control already in
the desired state is left untouched, so the call is idempotent. Distinct
from idempotency (request-key cache) — this converges device state.
…-batch

Add ensure_state: idempotent read-compare-act-verify for control state
A click fired while the app is still churning (busy cursor up, dialog
mid-paint, long handler running) is dropped or mis-targeted. smart_waits
watches pixels settle; this watches the busy signal settle, reusing
settle_detector.SettleTracker over a 1.0-busy/0.0-idle series. The busy
probe (default Windows busy cursor) and clock/sleep are injectable, so
the settle gate is fully testable without an app.
Add app_idle: wait until the app's busy signal settles before acting
@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

🟢 Metrics 154 complexity · 2 duplication

Metric Results
Complexity 154
Duplication 2

View in Codacy

NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.

@JE-Chen JE-Chen merged commit 11d58ea into main Jun 25, 2026
31 checks passed
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant