Spec #136: Finished belongs to the Series — owner-owned poll gate, Lifecycle bucket dropped #163
Reference in New Issue
Block a user
Delete Branch "spec-136"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #136.
Spec #136 end to end:
finishedbecomes a fact about the Series, written only by the owner, and the reader-facing Lifecycle bucket is gone.What landed
series.finished_at bigint NOT NULL DEFAULT 0plus the migration whose statement order is load-bearing (seed from the buckets, then flip them); both Lane queries lose theHAVING COUNT(*) FILTER (WHERE b.status <> 'finished')clause and gate onfinished_at = 0instead, with the due-query/eligible-count force asymmetry kept deliberate and commented;StatusFinished, its API special-case 400, the web tab and the templates' Finished bucket deleted.Store.SetSeriesFinished, the two routes behind the owner gate, and the state displayed on the list row without offering the control there.finishedbool on the flat Bookmark (s.finished_at > 0), rendered as a text-only label in both userscripts and on the web card; read-only inbound by omission fromUpsert's explicitseriescolumn list, same mechanism that already protectscover.finishedjoins the admin filter vocabulary (predicatefinished_at > 0, labelFinished, own aggregate count, figure last in the stats block as informational); the four clock-driven hygiene predicates (stale, never-checked, no-cover, no-chapter) exclude finished Series while unpollable, orphan and sighting-raised deliberately do not.Verification
go vet ./...andgo test ./...green on the merged branch (Docker-backed, throwawaypostgres:17-alpineper package). Each ticket also passed a two-axis review (spec + standards) on its own branch before merge.