Arc Forge Labs Docs v2026.10.53

Job board moves

A person moves a job on the Jobs board by dragging its card to another lane with a mouse or pen (server/ui/jobs.js). What the move changes depends on what the board is grouped by. A lane that takes the card lights up while the card is over it; Escape stops the drag. On a phone, touch keeps scrolling the board, so the job's panel has the same moves: its Fields section sets each custom field, and its stage section has "Move to…" and, for a waiting move, "Open in Seazona" and "Take back". The panel also serves a keyboard.

Grouped by A move changes Where it is written
A Flow custom field (dropdown, person, checkbox) The job's value for that field Flow only (docs/CUSTOM_FIELDS.md)
Status (the work system's stage, Seazona) The job's stage in that system The work system, through its adapter's moveWork
Invoice stage, client, practitioner Nothing: cards cannot be dropped —

Group by a custom field is saved with the person's view as field:<id> (server/ui/job-view.js). Its lanes are "Not set" first, then the options in their order (people A to Z for a person field; No and Yes for a checkbox). An archived option that a job still has gets its own lane, which takes no cards.

Custom field moves

PUT /api/custom-fields/values with expectedUpdatedAt. A move never writes to Seazona or Xero. When someone changed the value since the person saw it, nothing changes and the board shows the current value (409), with a short note.

Stage moves

POST /api/work/moves { sourceSystem, sourceJobRef, toStatus }. The adapter answers what happens. Seazona's API cannot change a stage, so the Seazona adapter answers a hand-off: Flow records the move, the person makes it in Seazona, and the card shows "Waiting for Seazona" until the sync reads the new status, or a day passes (docs/SEAZONA.md, "Stage moves"). A card dropped back in its own Seazona lane takes the waiting move back. POST /api/work/moves/cancel takes a waiting move back. VISION.md: where the case system cannot take a change through its API, the change becomes a short checklist for a person.

Before a stage move, the board shows what to do in Seazona. Its first step links to the order in Seazona's web app: the order itself when the Seazona "Order address" is set, else the lab's Seazona home page (docs/SEAZONA.md, SEAZONA_ORDER_URL). The job's panel has the same link. A person can tick "Don't ask again". That is their own setting inside the Seazona integration ("Ask before stage moves", GET and PUT /api/work/my-settings), shown under Your settings on the Seazona integration screen.

sequenceDiagram
  participant P as Person
  participant B as Jobs board
  participant F as Flow
  participant S as Seazona
  P->>B: drag card to a Seazona stage
  B->>P: what to do in Seazona (unless "Don't ask again")
  B->>F: POST /api/work/moves
  F-->>B: hand-off, card waits in new lane
  P->>S: change the status in Seazona
  F->>S: next sync reads the order
  F-->>B: move done, chip clears