Skip to content

chore(release): 0.0.1b2 — the beta corrected (#164) - #170

Merged
JArmandoAnaya merged 1 commit into
mainfrom
chore/beta2-close-out
Aug 1, 2026
Merged

chore(release): 0.0.1b2 — the beta corrected (#164)#170
JArmandoAnaya merged 1 commit into
mainfrom
chore/beta2-close-out

Conversation

@JArmandoAnaya

Copy link
Copy Markdown
Contributor

Closes #164. The 0.0.1-beta.2 close-out: version bump, changelog, and the exit criteria checked against the artifact.

The milestone

0.0.1b1 shipped with every gate green and three defects a manual pass over the built wheel found within an hour. Five issues fixed, in the order the epic froze:

#158 the export report said polygons were not carried while YOLO and VOC wrote them as boxes #165 4523ccb
#160 the annotator was unreachable from the UI #166 5b390c4
#159 the gallery rendered one tile per row at every width #167 54e4cdc
#162 the schema editor's swatch contradicted its own dot #168 66c19ff
#161 /favicon.ico 404'd — the only console error in a clean load #169 be09e25

All three major defects were the same shape: a claim verified against itself rather than against the artifact. So each fix landed with the guard that was missing, and each guard was verified by mutation — reintroducing the defect turns a named test red, checked one at a time.

Standing constraints, all held

FORMAT_VERSION 12 throughout. No migration added by any task — one would have meant a fix that went deeper than a fix.
openapi.json moved once for a contract change, in #158, and once here for info.version. The generated client is byte-identical after this bump, which docs/releasing.md already documents as correct rather than suspicious.
the three gate words confirm=, allow_destructive=, allow_lossy= still separate; #158 added a fourth state to the report and moved none of them.
kernel purity / annotator boundary lint-imports 2 contracts kept, 0 broken.
one runnable example per milestone none added — this milestone adds no capability.

What this commit does

VERSION0.0.1b2, carried to the three frontend packages as 0.0.1-beta.2 by pnpm version:sync. tests/test_versioning.py's pin moves with it, which is what makes a bump a deliberate edit in two places. CHANGELOG.md becomes a released section; CONTRIBUTING.md's version table gains a row; docs/releasing.md's runbook shows the version being cut, while the #69 argument above it stays historical.

Exit criterion 3 — the artifact, not the tree

  • bash scripts/build_dist.shvisionset-0.0.1b2-py3-none-any.whl (589 KB), with _static/index.html and the new _static/favicon.svg inside it.
  • VISIONSET_REQUIRE_WHEEL=1 uv run pytest tests/packaging — 11 passed.
  • Installed into a clean venv; visionset --version0.0.1b2, _static/ carries 5 files.
  • The whole browser cycle driven against that installation: token → project → schema → ingest → the draft batch's inert tiles → the grid re-flowing at two viewport widths → a tile click landing on the clicked asset → back to the gallery → three annotations → complete → promote → publish → verify → export → download → clean console. 1 passed.
  • formats: the export report says polygons are not carried while YOLO and VOC write them as bounding boxes #158's own reproduction replayed through the installed distribution — 3 boxes, 2 lane polygons, 1 weather tag, exported to yolo, voc and coco, with the report compared against the rows actually on disk:
yolo  held=6 on-disk=5 excluded=1 degraded=2 -> AGREES
      lane        degraded  yolo writes a polygon as its bounding box; the shape is lost
      weather     dropped   yolo cannot place a classification_tag and drops it
voc   held=6 on-disk=5 excluded=1 degraded=2 -> AGREES
coco  held=6 on-disk=5 excluded=1 degraded=0 -> AGREES

The issue reported excluded_annotations: 3 and found four label rows where two were expected. It now reports 1 and writes 5 of 6.

Every gate, locally

uv run pytest exit 0
uv run lint-imports exit 0
uv run mypy src/visionset exit 0
uv run ruff check / ruff format --check exit 0
pnpm -r build / pnpm -r lint / pnpm -r typecheck exit 0
pnpm test 711 annotator + 123 ui-core vitest, 25 node:test
pnpm --filter @visionset/app e2e 76 passed
pnpm --filter @visionset/app cycle 1 passed (source), 1 passed (installed wheel)

After the merge

v0.0.1-beta.2 is tagged on the merge commit. Publishing to PyPI needs credentials this repository does not holddocs/releasing.md step 4 — so it stays a human step, as it was for 0.0.1b1.

`0.0.1b1` shipped with every CI gate green and three defects a manual pass over
the **built wheel** found within an hour. This closes the milestone that fixed
them, and the shape of the gap is the part worth keeping.

All three were the same thing: **a claim verified against itself rather than
against the artifact.** The export tests asserted the counts the code intended to
write, never the counts in the bytes on disk. The gallery's own docstring called
its one-column fallback "correct-but-slow rather than wrong", so its unit tests
asserted precisely the broken value. Every screen was tested in isolation and
nothing walked the app the way a person does.

So each fix landed with the guard that was missing, and each guard was verified by
mutation — reintroducing the defect turns a *named* test red:

- #158 an export report is checked against the annotations actually written into
  the label files, XML documents and COCO JSON, for **every** installed format;
- #160 the product is walked end to end by **clicking**, and the helper that let a
  spec type a job URL is deleted;
- #159 the gallery's column count is measured in a real browser at two widths;
- #162 the swatch's payload is asserted, not its appearance;
- #161 the built document's icon href is asserted after Vite's base rewrite.

`VERSION` → `0.0.1b2`, carried to the three frontend packages as `0.0.1-beta.2`.
`openapi.json` moves by exactly one line because it embeds `info.version`; the
generated TypeScript client does **not**, because it holds only `paths`,
`components` and `operations` — `docs/releasing.md` already says so.

`FORMAT_VERSION` stayed **12** across the whole milestone, and no migration was
added: a correction that needed one would have been a fix that went deeper than a
fix.

Checked against the artifact rather than the tree, which is the point:

- `bash scripts/build_dist.sh` → `visionset-0.0.1b2-py3-none-any.whl`, with
  `_static/favicon.svg` and `_static/index.html` inside it;
- installed into a clean venv, `visionset --version` reports `0.0.1b2`;
- the whole browser cycle driven against **that installation** — token, project,
  schema, ingest, the draft batch's inert tiles, the grid re-flowing at two
  viewport widths, a tile click landing on the clicked asset, the return to the
  gallery, three annotations, complete, promote, publish, verify, export,
  download, and a clean console;
- #158's own reproduction replayed through the installed distribution: 3 boxes, 2
  polygons and 1 tag, exported to yolo, voc and coco, with the report compared
  against the rows on disk. `excluded=1, degraded=2` against 5 of 6 annotations
  written — where the issue reported 3 excluded and found 4 rows.

Closes #164
@JArmandoAnaya
JArmandoAnaya merged commit 88b39fa into main Aug 1, 2026
12 checks passed
@JArmandoAnaya
JArmandoAnaya deleted the chore/beta2-close-out branch August 1, 2026 00:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

1 participant