Skip to content

epic(beta.2): defects found by manual testing of the 0.0.1-beta.1 wheel #164

Description

@JArmandoAnaya

0.0.1-beta.1 shipped on 2026-07-31 (tag v0.0.1-beta.1, 5d2d5d9) with every CI gate green — 1900+ Python tests, 700 annotator vitest, 42 Playwright scenarios, the wheel job, and the 30-minute flow. A manual pass over the built wheel, driving the browser, the CLI and the REST API against a real workspace, then found three things that make the advertised flow wrong or unusable.

That gap is the useful finding, and it should shape what this milestone adds. Each defect sits precisely in a blind spot of an otherwise strong suite:

Defect Why every gate passed
#158 — the export report contradicts the export Tests assert the counts the code intends, never the counts against the bytes on disk
#159 — the gallery is stuck at one column Its own docstring calls the 1-column fallback "correct-but-slow rather than wrong" for jsdom, so the unit tests assert exactly the broken value, and no Playwright spec covers the screen
#160 — the annotator has no route into it Every screen is tested in isolation; nothing walks the app the way a person does

None of these is an oversight in a single PR. They are all the same shape: a claim verified against itself rather than against the artifact.

Tracked

Deliberately not here: #163 (a CLI compatibility report) is new capability, not a correction, and sits in 0.1.0 — and it depends on #158 settling what the report means.

Exit criteria

  1. All five tracked issues closed.
  2. pnpm -r build, pnpm test, uv run pytest, uv run lint-imports, uv run mypy src/visionset and the Playwright suites green.
  3. A manual pass over the built wheel repeats the flow this milestone opened with — install, init, ingest, annotate in a browser, publish, export — and finds the three defects gone. The whole point is that the artifact is checked, not only the source.
  4. Tag v0.0.1-beta.2, VERSION0.0.1b2, CHANGELOG.md updated.

Standing constraints

  • No migration. FORMAT_VERSION stays 12. A migration appearing here is the signal that a fix went deeper than a fix.
  • openapi.json moves only for formats: the export report says polygons are not carried while YOLO and VOC write them as bounding boxes #158, which changes a published model; regenerate it and frontend/ui-core/src/generated/api.ts together, and never hand-edit either.
  • The three gate words (confirm=, allow_destructive=, allow_lossy=) stay separate.
  • Kernel purity and the headless-annotator boundary are non-negotiable; if a fix fights a boundary, restructure the fix.
  • One runnable example per milestone is the standing rule — this milestone adds none, because it adds no capability.

The lasting fix

Two of the three defects would have been caught by one thing that does not exist yet: a test that walks the app end to end by clicking, and a test that reads back what an exporter actually wrote. Both are written into the acceptance criteria of #160 and #158 respectively rather than filed separately, so neither can be closed without leaving the guard behind.

Metadata

Metadata

Assignees

No one assigned

    Labels

    beta20.0.1-beta.2 — beta defect fixesepicMilestone/phase epic — tracks a group of issues

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions