The gap
The batch-view redesign asked for an Assign bulk action: select some frames, then hand them to
somebody or something. There is no domain concept for it, on either reading of what "assign"
could mean.
Reading one, assign to a job. Jobs are cut exactly once, at approval, by partition_assets,
and that partition is exact — the jobs are disjoint and their union is the batch. There is no
move-an-asset-between-jobs operation in JobService, and adding one means first deciding what
happens to work already recorded against the asset in its old job.
Reading two, assign to a person. There is no person. VisionSet has no user model at all. The
nearest thing to an identity is a named API token issued by TokenService, which is a credential
rather than an assignee, and AnnotationJob has no owner column.
What has to be decided before anything is built
- Which reading is wanted. They are different features with different costs, and only the
second is what "assign" usually means in an annotation tool.
- If it is to a person: does VisionSet grow an identity model, and is that the same decision
as multi-user workspaces? That is a founder call rather than a design detail — it reaches
auth, the workspace boundary, and every audit record in the product.
- If it is to a job: what a reassignment does to annotations already written under the old
job, and whether TaskGroup rounds — one round of work per batch, with a review round as a
second group beside the first — are the mechanism, rather than something new.
Why it is parked rather than planned
Both readings land in the same neighbourhood as the other unmilestoned post-beta tracks: the
AI-assist substrate with its review loop (#81), and annotation versioning, which is the design's
main dropdown and its Merge action (#127). Whichever of those is answered first probably
decides the shape of this one, and answering this one in isolation risks building a second
mechanism for the same thing.
The issue was filed out of the batch-view redesign, where Assign was cut for having nothing
behind it.
The gap
The batch-view redesign asked for an
Assignbulk action: select some frames, then hand them tosomebody or something. There is no domain concept for it, on either reading of what "assign"
could mean.
Reading one, assign to a job. Jobs are cut exactly once, at approval, by
partition_assets,and that partition is exact — the jobs are disjoint and their union is the batch. There is no
move-an-asset-between-jobs operation in
JobService, and adding one means first deciding whathappens to work already recorded against the asset in its old job.
Reading two, assign to a person. There is no person. VisionSet has no user model at all. The
nearest thing to an identity is a named API token issued by
TokenService, which is a credentialrather than an assignee, and
AnnotationJobhas no owner column.What has to be decided before anything is built
second is what "assign" usually means in an annotation tool.
as multi-user workspaces? That is a founder call rather than a design detail — it reaches
auth, the workspace boundary, and every audit record in the product.
job, and whether
TaskGrouprounds — one round of work per batch, with a review round as asecond group beside the first — are the mechanism, rather than something new.
Why it is parked rather than planned
Both readings land in the same neighbourhood as the other unmilestoned post-beta tracks: the
AI-assist substrate with its review loop (#81), and annotation versioning, which is the design's
maindropdown and its Merge action (#127). Whichever of those is answered first probablydecides the shape of this one, and answering this one in isolation risks building a second
mechanism for the same thing.
The issue was filed out of the batch-view redesign, where
Assignwas cut for having nothingbehind it.