You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
CI overhaul (4/9): excise the screenshot-feedback apparatus and slim the retry shells #68
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.
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:
CI overhaul (3/9): add the RNTL drag render-path backstop #67 lands after, not before — the compensating RNTL render-path backstop is the immediate follow-up PR. Until it merges, the broken-render-wiring regression class is covered only by Detox per-test videos, the dogfooding-caught risk class ADR 0006's 2026-09-01 amendment already accepted.
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.
Candidate passes on main with approve-candidate gating only on surviving jobs: three consecutive green runs — 33951437527 (push 9a2bcbb), 33953330578 (nightly 9a2bcbb), 33962748103 (push 9a50e91), all 2026-09-05.
Exit-75 retry chain intact: contract-vs-infrastructure classification untouched (release-policy and consumer-script suites green); the run on e15ad0a (33912402913) exercised the whole-job retry path exactly as before.
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.
Activity
ci: excise the screenshot-feedback apparatus
thiagobrez commentedon Sep 4, 2026
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:
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 workflowis a required check onmainand gates oncontract+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:
feedbackjob and itsapprove-candidateedge) tripped none of the eight YAML change-detector tests, soci-fixtures.test.mjsis untouched and CI overhaul (2/9): delete the YAML-regex change-detector tests, keep the script-execution tests #66 remains as specified.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 onmainwithapprove-candidategating 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.thiagobrez commentedon Sep 5, 2026
All acceptance criteria are now met — closing.
grep -ri "feedback\|ISSUE39_FEEDBACK" scripts/ e2e/ .github/returns nothing (verified at merge of PR ci: route iOS 26 pointer scenarios through Detox and excise the screenshot-feedback apparatus #87, commit c6331e5).approve-candidategating only on surviving jobs: three consecutive green runs — 33951437527 (push9a2bcbb), 33953330578 (nightly9a2bcbb), 33962748103 (push9a50e91), all 2026-09-05.ios26.auto-fallbackjob ran 35m11s on PR ci: route iOS 26 pointer scenarios through Detox and excise the screenshot-feedback apparatus #87's first run with the sampling apparatus; the two green push runs completed it in ~26m and ~20m, single attempt.e15ad0a(33912402913) exercised the whole-job retry path exactly as before.Delivered ahead of plan order inside PR #87 (see the earlier comment for why the gate deadlock forced the pull-forward). The
feedbackjob, 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.