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
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:
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
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
All five tracked issues closed.
pnpm -r build, pnpm test, uv run pytest, uv run lint-imports, uv run mypy src/visionset and the Playwright suites green.
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.
Tag v0.0.1-beta.2, VERSION → 0.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.
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.
0.0.1-beta.1shipped on 2026-07-31 (tagv0.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:
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
/favicon.ico404sDeliberately 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
pnpm -r build,pnpm test,uv run pytest,uv run lint-imports,uv run mypy src/visionsetand the Playwright suites green.v0.0.1-beta.2,VERSION→0.0.1b2,CHANGELOG.mdupdated.Standing constraints
FORMAT_VERSIONstays 12. A migration appearing here is the signal that a fix went deeper than a fix.openapi.jsonmoves 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 andfrontend/ui-core/src/generated/api.tstogether, and never hand-edit either.confirm=,allow_destructive=,allow_lossy=) stay separate.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.