Skip to content

A corpus of deliberately awkward apps in CI — every blocking defect in the last field export would have been caught by one #891

Description

@divshekhar

This is the meta-finding of the 2026-09-08 feedback export, and the reporter who spent four hours driving a real CAD/CFD app named it as the single highest-leverage change we could make:

The single highest-leverage change would be a corpus of deliberately awkward real apps in CI — file upload, >20s endpoint, WebGL canvas, 401-refresh-retry, noisy localStorage, unnamed icon buttons. Every blocking defect I hit would have been caught by one of those before release, and the pattern of failures suggests the current test surface is simpler than the apps you are aiming at.

Their overall verdict, which is worth quoting because it is the map: "the observation layer is genuinely very good; the automation and replay layer is not production-ready. A good instrument bolted to a weak robot." Reading state, reading network bodies, and grading honestly are the hard, valuable parts and they are strong. Driving an app and replaying journeys need breadth of real-world exposure, and they read like they have been exercised against simple demo apps.

The split was not random. Every single thing that broke was a property of a real application:

property what it broke
a file upload recorder wrote {path}, replayer only took {name, content, type} — a recorded upload could never replay
a 22-second model-backed endpoint replay's fixed 4s wait called a pending request an absent one
a WebGL canvas invisible to every observation channel; with default sourceMapping it crashed the app outright
a 401-refresh-retry two false-red contradictions on a standard auth path
an app writing localStorage in a loop starved the buffer; the verdict then reported net.total: 0 as a fact
an icon-only button with no accessible name undriveable

None of those is exotic. The five fixes above shipped, and none of them would have needed a field report if a corpus like this existed.

Why nothing we have covers it

Every app under apps/ is one we wrote, and each was written to exercise a feature. They are honest fixtures and they are all cooperative. apps/atlas is the closest thing to an adversarial one and it is still ours. The sibling reticle-fixtures repo installs into pristine upstream apps, which covers install COMPLEXITY — a different question from runtime hostility.

What would close this

Start with one app carrying two or three of these properties, wired into pnpm test:e2e. A corpus is the goal; a corpus is not the first PR. Good candidates, cheapest first:

  • an endpoint that takes >20s (a setTimeout in apps/api — nearly free, and it covers the replay-timeout class)
  • a localStorage write loop (a few lines; covers the buffer-starvation class)
  • an icon-only button with no accessible name
  • a 401-then-refresh-then-retry path in apps/api
  • a file upload
  • a WebGL canvas subtree

Please read apps/README.md first — it says what belongs under apps/ and why — and docs/gates.md for which gate a new fixture should join. pnpm test:e2e is ~8 minutes.

Related

#130 (a standing false-green gate against third-party apps we did not write) is the same instinct aimed at apps we do not control. This one is about apps we DO control that are deliberately hostile, which is cheaper to start and easier to keep green.

Activity

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

    2.14.0Scoped for the v2.14.0 releaseagent-reportedFiled from an AI agent's reticle_feedback report. Title is prefixed [agent].enhancementNew feature or requestfixed-pending-releaseFixed on the unreleased release branch; closes when that version shipshelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions