Skip to content

v1.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Oct 04:11
· 493 commits to 6e262d21c2f2fedf7dc60320959d2c54714fc7f0 since this release

1.0.0 (2026-10-18)

⚠ BREAKING CHANGES

  • discordGuildId and discordWebhookUrl are no longer part of the market contract, and POST /markets/{id}/discord/notify-assignment no longer exists. Stored documents keep the keys harmlessly; nothing reads them.

Features

  • a deployment says whether it can serve a request (07ea9a3)
  • a seat's hint sits in its top right corner (aad143a)
  • a table-share request finds its partner (E27) (f365a32)
  • among equals, a vendor who will take fewer tiers is placed first (9f9e91f)
  • an answer naming several addresses pairs with the first applicant (dc4cd43)
  • applicant: the form asks dates and tiers as one grid (f09734c)
  • application: a vendor has a name (e9603a8)
  • assignment: assign runs in the assignment phase and nowhere else (211e58d)
  • assignment: pair vendors who ask to share a table (5853353)
  • assignment: say why a vendor has no table (dce7342)
  • assignment: the solver places around pinned vendors (052bd67)
  • check-in: make the check-in page work on a phone (2923d27)
  • checkin: the page names the market and says which day (f1464d2)
  • contract: tier preference is answered per date (a750bf1)
  • csv-proposal: hosted TypeSafe settles what the rules cannot (2ce5c3f)
  • csv-proposal: the file proposes the plan (79c8a89)
  • csv-proposal: the rules propose what each CSV column is (6db0726)
  • dialog: a dialog is a form, and the create-market dialog proves it (4893657)
  • dialog: every dialog is the same thing, and Enter means one thing (664d715)
  • dialog: manage organization stays open (84b216d)
  • E17-E20 - the workspace follows the phase, the real form, and one dialog (d7df80a)
  • E21 - the market frame, one market from the server, and named writes (5735e17)
  • E22 the assignment tab, E23 the plan uses its space (0f3d7ee)
  • E28 The details line up (81c20fb)
  • each market date is its own row, flowing in columns beside the calendar (64979ae)
  • essential: a vendor's preferred name (5660117)
  • find a market on the Markets page (E25) (314e7a7)
  • fixtures: anonymise a form export by who shares each value (68516a6)
  • forms: let a market declare a preference ordering unasked (5ecf9f8)
  • import: the form is fixed without leaving the import (720ca33)
  • import: the importer says what a single column cannot tell it (ddf5c1d)
  • lifecycle: the phase rail (66eadb0)
  • market-setup: start from a draft's Google Form responses (5eb6f94)
  • market: market dates are chosen on a calendar (966a29e)
  • markets: a market belongs to one organization, for good (018a58f)
  • markets: a run records what it was made from (25e6bc2)
  • markets: intake mode is an organizer choice (7dc6935)
  • markets: leaving draft is finalizing, and it is recorded (2c188b5)
  • markets: Market Setup is addressed by id and reads the one store (ba22588)
  • markets: nothing about a market is stored in the browser (689cb48)
  • markets: one store holds the open market, as the server has it (8eb6265)
  • markets: renaming is its own write, and only while a draft (b35de1d)
  • markets: search, sort and filter the Markets page (3325cf1)
  • markets: the application chip (46258cb)
  • markets: the assignment rules close with the assignment (131ebe8)
  • markets: the form lock is on the market, and nothing borrows it (2bbd082)
  • markets: the plan saves only the plan (f70b755)
  • markets: the whole-market PUT is gone (c00bbc8)
  • markets: Vendors, Import and the floorplan editor are addressed by id (2bcde91)
  • market: the applications surface says which phase it is in (bd6fd35)
  • market: the assignment surface (557b50a)
  • market: the plan is one ordered page (db59513)
  • market: the workspace opens the surface the phase is worked on (0ced4d1)
  • new-market: I already have a Google Form (a5e478a)
  • organizations: deleting an organization is safe (c4d9ad7)
  • phases: let a market return to draft before anyone has applied (74ce274)
  • phases: publishing lands in market_days, archived means finished (adfae56)
  • placements: a pin that cannot be honoured (84055d6)
  • placements: a placement has one writer (fd0062c)
  • placements: a trail for placements (cb3271c)
  • remove the Discord webhook (1c898ff)
  • review: decide one application at a time, with its answers in front of you (bdfa350)
  • review: the market says which answers a reviewer reads first (4100545)
  • review: the marks are changed from the queue, where the knowing is (9ff90e8)
  • start-from-csv: one confirm writes it all (6c0f2e4)
  • start-from-csv: the organizer corrects the proposal (d118a1d)
  • start-from-csv: the proposal ledger (9485a08)
  • tables: place and swap on the Tables view (6a9e8e2)
  • the door on market day knows who is missing (E29) (52f91e0)
  • the door on market day knows who is missing (E29) (854bbc2)
  • the form started from a CSV (E24) (59677cf)
  • the month arrows and the current dots are centred (5866316)
  • the priority rules table is drawn from the primitives (10a631b)
  • the table counts filter the tables to their status (7f2dabc)
  • the vendors page filters as the tables page does (15f952f)
  • ui: every market page has its own address, and one bar reaches them (601e7f2)
  • ui: every market screen is one width (7485da2)
  • ui: every vendor surface shows the name (9c698ab)
  • ui: one add-row control, owned by the primitive layer (ad9b27a)
  • ui: one design language - E15 corrections and E16 migration (8c90fc7)
  • ui: plan cards share a row, by one written rule (ea6228c)
  • ui: Tables, Attendance and Vendors stand in the frame (a952f6b)
  • ui: the assignment rules read as settled after the assignment (38d3535)
  • ui: the Assignment tab has three pages (6a7a22e)
  • ui: the drag handle reads as a handle (292de34)
  • ui: the market dates are listed by month beside their calendar (2f912a1)
  • ui: the market frame stays put (3a6f0a7)
  • ui: the primitive layer (cba83c2)
  • ui: the Result page is the assignment, read and changed (a3aeb59)
  • ui: the result says when it is out of date (89f28de)
  • ui: the scale, written down (eaee9a4)
  • ui: the statistics open under the result (b31131c)
  • ui: the top bar never scrolls away (72875cd)

Bug Fixes

  • a deep link to any page of conventioner.io opens that page (6c68dea)
  • a locked intake choice is legible, and drawer answers link (706ee9e)
  • a pair always shares, and a blank half-table share assigns (0ae069f)
  • a ranked answer's hover band has room around its rank (de75d88)
  • a settled market's rules read one answer to a line (0a9343a)
  • a settled market's rules read one answer to a line (9944f16)
  • a11y: a priority rule's controls are named, and its removes are buttons (edece8b)
  • a11y: every control is named, and menus, tabs and dialogs are what they look like (98e7a17)
  • applicants: a returning vendor changes their answers, signed in (a94e4d9)
  • applicants: a vendor reads their verdict after applications close (101d2c1)
  • applicants: a vendor who has never applied can apply online (c1636c8)
  • applicants: a vendor's saved application is a bounded read, and a failed one says so (64486a6)
  • application-form: a switched-off Section preference stays off (b1729d4)
  • assignment: a blank ceiling runs, and the options look like fields (74b45c5)
  • assignment: plans without tiers assign (3aeeae0)
  • assignment: the payoff screen reads (be150a3)
  • auth,nav: the drawer's rows and the password pages line up (73ae468)
  • auth: authorize every route against the session, not a header (685cebc)
  • auth: move the identity seam where the blueprints can reach it (beca98d)
  • auth: require a session to delete an account (df3e61d)
  • auth: reset and verification links work signed out (d655836)
  • auth: the sign-in screen reads (9678a52)
  • blockers: a resolution link names the tab that holds the fix (ea5e90d)
  • blockers: the orphaned-pin guard pointed at a tab holding neither remedy (1d9bdfd)
  • check-in: a vendor is sent to the seat stored for them (176f9c2)
  • check-in: an archived market that ran keeps its page, as a record (6be7b1b)
  • check-in: the email field keeps its height on a phone (aaff313)
  • checkin: the vendor page stops scrolling past a window it already fits (90b706b)
  • copy: what each screen and email says is true (4db6088)
  • csv-proposal: review findings on the column proposal (3612e91)
  • csv-proposal: review findings on the plan proposal (b36f600)
  • csv-proposal: send TypeSafe only what its threshold was measured on (0ee2c10)
  • csv: detect a grid whose question spans several lines (60c177f)
  • csv: store a submission timestamp as a moment (036f77e)
  • dashboard: the first screen asks the server whether you have a market (65278b8)
  • dashboard: the offline card, the contradicted comment, the borrowed count (7b6aa0f)
  • dates: every market date prints its year once (e7649d6)
  • db: every field a document is looked up by is indexed (5831a6b)
  • db: every field a document is looked up by is indexed (616d8ec)
  • deps: update the back end's flagged packages (2ce50d7)
  • deps: update the packages Dependabot flags (c2d5e39)
  • dev: reset_database clears every collection it claims to (7a44bbc)
  • docs: reopen the stall story - it recurred on CI with evidence (e480ef1)
  • e14: the second-walk corrections that carry no decision (b6402f3)
  • e2e: a member of one organization has no organization to choose (5a9205c)
  • e2e: a NodeList is not iterable under the e2e tsconfig (e8faad8)
  • e2e: the create-market dialog spec makes its own choice of organizations (2e5831e)
  • fixtures: key stand-ins on the source and tighten the leak check (dc5ff46)
  • floorplan: the beta places the tables it is asked for (7ad0bfa)
  • frame: every page of a market puts its frame in the same place (3254eaa)
  • import: a day written in words is the market day it names (d10ac17)
  • import: a file with no rows previews no rows (b1c3ed3)
  • import: a form that never asked how many days imports (cf0a17b)
  • import: an ignored answer and a blank row say what happened (df4e3db)
  • import: an option with a comma of its own is one answer (b48afb6)
  • import: headings, grids and choices line up in the import and the proposal (9c7d736)
  • import: the import flow sizes itself like every other screen (9fbb6e0)
  • import: the import reports what it does (9b290e3)
  • import: ticked Google checkboxes and table sizes import (0eb2d8d)
  • import: value decisions stay on the page, to be changed (6c07070)
  • import: write only the rows the preview imports (c086ec1)
  • lists: market and organization rows read cleanly (edf3cfb)
  • manage-market: the dialog's controls, refusals and delete hold together (871f9e4)
  • market-setup: one plan edit is one save (1be4550)
  • markets: a market PUT refuses an organization creation would refuse (1a22489)
  • markets: a market remembers where it has been (525d153)
  • markets: a market's records go with it (f7b21c3)
  • markets: a public address belongs to one market (59a8953)
  • markets: an archived market is a record, and cannot change (00eb8b0)
  • markets: code review of E21 (ed8261c)
  • markets: each person is offered only what their role lets them do (dd4835e)
  • markets: review findings on the market finder (65b6497)
  • markets: whoever creates a market owns it (69f4b12)
  • modals: every modal holds the page inert, not just the vendor drawer (88f494c)
  • modals: the shape the CSS rule could not see, and the drawer that never closed (e90330a)
  • placements: a hand change says every answer it overrides (328a3da)
  • placements: an orphaned pin is marked, and holds Publish back (1819ff4)
  • production builds, serves deep links and reports its health (dccfbbb)
  • proposal: keep every applicant's answer, and whole labels (9f1ee9f)
  • result,review: seats, sizes, verdicts and chips read cleanly (4b19fc9)
  • review: a web address in an answer is a link (902cac9)
  • review: Publish Results follows intake mode (ce64d78)
  • setup: row controls look like controls and reach the keyboard (a934d4e)
  • setup: saving says it saved, and clamping says why (3103578)
  • start-from-csv: review findings on the confirm (0b24c41)
  • start-from-csv: review findings on the corrections (9a1a0b1)
  • start-from-csv: review findings on where it starts (854cf0b)
  • table-share pairs hold at the edges the review found (cf32a84)
  • tables: a count of zero loses its colour (1c7fd54)
  • tables: prove the amber, which the first test did not (1b092a9)
  • the back end builds on Vercel again (13f98cc)
  • the check-in card says the table in words (c8ae0f4)
  • the screens the real market reads say what is true (e3f27a4)
  • the screens the real market reads say what is true (7378232)
  • the user flows hold (E26) (dd1a3a7)
  • ui: a market tab stays readable under the pointer (8500912)
  • ui: a screen without a market says so instead of pretending (3b8ef41)
  • ui: a short market surface starts at the top (bb517e4)
  • ui: buttons are button-sized (46018cb)
  • ui: code review of E22 and E23 (7139464)
  • ui: every colour the product paints has a name (ce7bfbf)
  • ui: every control renders in the product's own typeface (5541874)
  • ui: every overlay has a way out (d6e1664)
  • ui: every page has a way onward (7ae7c46)
  • ui: hints describe the state the market is actually in (bc15e06)
  • ui: layout holds at every laptop size, and controls say what they do (04215fc)
  • ui: links sit on their line, native controls are green, and Full name asks for the official name (00ad160)
  • ui: load the weights the product asks for, and stop inheriting line-height (6d4dc15)
  • ui: make the setup screens say and show what they mean (bd30cd6)
  • ui: one date format, and it includes the year (785f30e)
  • ui: one list row, and Open stops landing on a 404 (79ff9d1)
  • ui: one name per concept (ad00b10)
  • ui: one sizing model for an organizer screen (9310ae1)
  • ui: panels hold their content, and one thing scrolls per page (caf7fa3)
  • ui: plan-card headings and values share one grid (6b4cbf8)
  • ui: plan-card rows render whole (cc0b45d)
  • ui: screens say what they mean, not what they store (803b4ec)
  • ui: the application form tab reads clearly (4599406)
  • ui: the Assignment Options card shows both options (f271916)
  • ui: the machine decides which transitions confirm, and publish says what it does (3f91e59)
  • ui: the market's fourth tab is called Assignment (9c47fe1)
  • ui: the palette meets AA, and a test keeps it there (f69774f)
  • ui: things meant to line up, do (aaab77c)
  • ui: three spacing corrections (56f70e2)
  • ui: three text colours the sweep could not see (1f1d97d)
  • vendors: reach the drawer and the card by testid, and hold inert across nested modals (7bb856c)
  • vendors: the list is vendors, and a limit is a reason (54f3d5d)
  • vendors: the page behind the vendor drawer is inert, not merely dimmed (f05a582)