Skip to content

CI overhaul (4/9): excise the screenshot-feedback apparatus and slim the retry shells #68

Closed

Description

@thiagobrez

Part of the CI overhaul execution plan (#59, map #53). Order: 4 of 9 — blocked by 2/9 (#66, YAML change detectors gone) and 3/9 (#67, compensating coverage in place).

Decisions: #55 (full excision; ADR 0006 already amended in PR #61) and #63 (shell slimming rides along).

Scope

Remove the screenshot-feedback proof end to end — gate, analyzers, producers, and IPC (~2,900 lines). Full excision, not demotion: no nightly tier, no non-gating screenshot artifacts. Detox per-test video/screenshot recording (.detoxrc.cjs) stays as the human-reviewable visual record. Simultaneously strip the dead feedback plumbing from the exit-75 retry shells; the infra-vs-contract exit protocol (0/75/1), per-attempt evidence isolation, per-scenario Detox ports, and the attempts-summary JSON all stay.

Files

  • .github/workflows/exact-package-candidate.yml — delete the feedback job and its edge in approve-candidate's needs/gate condition; drop feedback artifact paths.
  • Delete: scripts/analyze-device-feedback.swift, scripts/verify-device-feedback.mjs, e2e/contracts/feedback-specs.json, and their unit tests.
  • e2e/contracts/portable-contract.e2e.cjs — remove the mid-hold screenshot sampling loop (drags then hold only as long as the gesture needs).
  • scripts/run-agent-device-pointer.mjs — remove the mtime-poll IPC.
  • e2e/contracts/pointer-timing.json — remove the sampling constants.
  • scripts/run-device-contract-job.mjs, scripts/run-device-contract-isolated.mjs — remove feedbackRoot, the ISSUE39_FEEDBACK_DIR env var passed to both drivers, and the feedback publish/clear category.

Ruleset / required-check changes

None yet — the "Approve exact tarball for publication" required check keeps running on PRs until 6/9 and 7/9; this task only removes the feedback edge from its gate.

Acceptance criteria

  • grep -ri "feedback\|ISSUE39_FEEDBACK" scripts/ e2e/ .github/ returns nothing (excluding this issue's own references in docs).
  • The candidate workflow passes on main with approve-candidate gating only on the surviving jobs.
  • Device jobs are measurably faster (no mid-hold sampling extends the gesture hold).
  • Exit-75 retry chain (run-device-contract-job.mjs → run-device-contract-isolated.mjs → reset-device-contract-ios-simulator.mjs) still classifies infra vs contract: a contract failure must never retry.

Activity

  1. thiagobrez commented on Sep 4, 2026

    @thiagobrez
    OwnerAuthor

    Pulled forward into PR #87 (commit c6331e5), out of order and ahead of #66/#67, because of a gate deadlock discovered on that PR's first CI run:

    • CI overhaul (1/9): route iOS 26 device-contract pointer scenarios through Detox #65's Detox routing made all five iOS 26 pointer scenarios pass, but the job then failed inside this apparatus (drag released before feedback sampling) — and that assertion masked the real error: the drags held their destination for 8000ms, well past the ~4.9s sampling window, so the assert could only fire when the Detox gesture promise settled early, with the underlying rejection swallowed by the .catch.
    • Approve exact tarball for publication workflow is a required check on main and gates on contract + feedback + parity. While iOS 26 was red, nothing could merge — including this ticket's own PR. Deleting the apparatus in the same PR was the only unblocking path.

    Deviations from the plan's ordering, for the record:

    Acceptance criteria status: the grep (grep -ri "feedback\|ISSUE39_FEEDBACK" scripts/ e2e/ .github/) returns nothing; the exit-75 retry chain and its infra/contract classification are untouched (release-policy and ci-fixtures suites pass); the retained criteria — candidate passing on main with approve-candidate gating on surviving jobs, and measurably faster device jobs (the five drags drop their 8000ms hold for the 2000ms default) — are verifiable once PR #87 merges.

  2. thiagobrez commented on Sep 5, 2026

    @thiagobrez
    OwnerAuthor

    All acceptance criteria are now met — closing.

    Delivered ahead of plan order inside PR #87 (see the earlier comment for why the gate deadlock forced the pull-forward). The feedback job, Vision OCR analyzer, verifier, specs, fixtures, mid-hold sampling in both pointer runners, the mtime-poll IPC, and the sampling timing constants are all gone; Detox per-test video/screenshot recording remains the human-reviewable record.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agentFully specified, ready for an AFK agent

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions