Artist management · build status

ShowLedger24

The sell side of the live deal: roster, offers, deal engine, settlement and commission. Generated from the build ledger.

generated 2026-08-03 19:22 UTC tree c30847c (uncommitted changes present) 33 slices from docs/BUILD-LEDGER.md

Overall

82%complete
27 complete1 in progress5 not started 33 total

Phases

Phase 0 — Foundation

S1 – S4 · 4 slices

4 complete

Phase 1 — The roster

S5 – S9 · 5 slices

5 complete

Phase 2 — The Offer Desk

S10 – S13 · 4 slices

4 complete

Phase 3 — The Deal Engine

S14 – S17 · 4 slices

4 complete

Phase 4 — Production and the road

S18 – S21 · 4 slices

4 complete

Phase 5 — Money

S22 – S25 · 4 slices

4 complete

Phase 6 — Clearance

S26 – S27 · 2 slices

1 complete · 1 in progress

Phase 7 — Reach

S28 – S32 · 5 slices

5 not started

Further slices

S9.5 · 1 slice

1 complete

Every module

SliceNameStatusThe ledger’s note
Phase 0 — Foundation
S1Repository scaffold and design tokenscompletetokens.css, base.css, verify-tokens.sh, 7 site pages, 7 console screens
S2Database foundation, RLS harness, migration toolingcomplete17 isolation assertions, 5 gates in verify-S2.sh
S3Identity, sessions, RBACcomplete29 identity assertions + a runtime R10 probe
S4Console shell and audit spinecomplete9 atomicity assertions, 12 payload-guard tests, derived notification tray
Phase 1 — The roster
S5Artist recordcompletearchive not delete; export in one call
S6The artist as a productcomplete27 db assertions + 22 runtime; overlap refused by exclusion constraint
S7People, line-up and personnelcomplete22 erasure assertions + 20 runtime; the Article 17 path works end to end
S8Management agreementcomplete25 db + 21 runtime; permissions now enforced INSIDE policies
S9Roster dashboard and artist assignmentcompleteR7 enforced; a CROSS-TENANT VIEW LEAK found and closed
Phase 2 — The Offer Desk
S10Calendar and availability
6b4cd42 · 2026-08-03
completederived on read; a CROSS-TENANT WRITE found and closed in 0016
S11Enquiry capture
a5855d8 · 2026-08-03
completethe first anonymous write; the link token is the credential
S12Hold ladder and challenge protocol
d4564bd · 2026-08-03
completesignature module. H1–H7 in constraints and triggers; the API cannot accept a timestamp
S13Offer builder and offer tracking
ac151cf · 2026-08-03
completeaccepted offers immutable; a counter is a new row
Phase 3 — The Deal Engine
S14Deal components and the calculator
937e887 · 2026-08-03
completesignature module. §2.3 reproduced exactly; two engines cross-checked
S15Deal memo
16c5f84 · 2026-08-03
completeappend-only, snapshotted; found an 11-slice audit-payload defect
S16Show record and confirmation
f93cc6a · 2026-08-03
completeone transaction or nothing; the radius clause names the show
S17Tours, routing and tour budget
f4f46de · 2026-08-03
completethe P&L identity, over 20 generated tours. Phase 3 closed
Phase 4 — Production and the road
S18Riders, stage plot and input list
583df4d · 2026-08-03
completesuperseding never repoints an advanced show; the plot is data
S19Advance pack, two-way
e67edc4 · 2026-08-03
completethe token resolves to exactly one advance; differences derived on read
S20Itinerary, day sheet, run sheet
722b6c7 · 2026-08-03
completea door time is a local time, not an instant — deliberately not timestamptz
S21Settlement capture and reconciliation
f31e3f0 · 2026-08-03
completethe ten §2.4 checks derived on read; no findings table, asserted structurally
Phase 5 — Money
S22Ledger primitives
fb23c3c · 2026-08-03
completean event pins its own FX rate; the rate table is only a lookup
S23Commission engine
dd135a6 · 2026-08-03
completesignature module. §3.2 worked example reproduced exactly, sunset tail included
S24Invoicing and receivables
ac86832 · 2026-08-03
completeno total column at all; a totalMinor sent anyway is refused, not ignored
S25Artist statement and splits
a0d9bee · 2026-08-03
completeD-021's three safety properties each enforced by test
Phase 6 — Clearance
S26Clearance rules and requirements
a9dcb98 · 2026-08-03
completesignature module. a requirement is a row carrying its rule version
S27Visas, Schengen and carnetsin progresscounter + document vault done and tested; no API, no screen, no carnet yet
Phase 7 — Reach
S28Notificationspending
S29Artist portalpending
S30Merch, releases and campaignspending
S31Ecosystem bridgependingre-measure sibling repos first
S32Reporting, import and offlinepending
Further slices
S9.5Console connection (inserted)completepassword sign-in, HttpOnly cookie, live roster + artist

What “done” means here

Done means a verification script exited zero on the committed tree. Not that somebody opened the screen and it looked right, and not that an agent reported success. Every slice marked complete above has a script named scripts/verify-S<n>.sh that exits 0 against the code as committed; a slice whose script has not exited 0 in a single run is not complete here, whatever else was built. S27 is in progress and says so: the counter and document vault are tested, but there is no API, no screen and no carnet yet.

Run every gate at once:
for f in scripts/verify-S*.sh; do bash "$f" local || { echo "FAILED: $f"; break; }; done

Run it locally

# 1 · API worker
cd ~/Documents/artist-management-site/api && npm run dev   # :8792
# 2 · console
cd ~/Documents/artist-management-site/web && npm run dev   # :5273
# prove a slice on the committed tree
cd ~/Documents/artist-management-site && bash scripts/verify-S23.sh local

The console holds its route in React state, so there are no deep links — open the root and use the left nav. Screens come in two kinds and the nav labels them: LIVE screens read the database, FIXTURE screens render a frozen sample.

Screens with data

Screen
Open at
What is on it
Sign in
entry point
http://localhost:5273/
Password sign-in, HttpOnly cookie. Everything else is behind it
Roster
LIVE · data
left nav → Roster
Live artist roster; R7 enforced, a cross-tenant view leak was found and closed here
Calendar
LIVE · data
left nav → Calendar
Availability derived on read; a cross-tenant write was found and closed in 0016
Enquiries
LIVE · data
left nav → Enquiries
The first anonymous write; the link token is the credential
★ Offer Desk
LIVE · signature
left nav → Offer Desk
Hold ladder and challenge protocol. H1–H7 in constraints and triggers
★ Deal Engine
LIVE · signature
left nav → Deal Engine
§2.3 reproduced exactly; two engines cross-checked against each other
Advance
LIVE · data
left nav → Advance
Two-way advance pack; the token resolves to exactly one advance
Day sheet
LIVE · data
left nav → Day sheet
A door time is a local time, not an instant — deliberately not timestamptz
Settlement
LIVE · data
left nav → Settlement
The ten §2.4 reconciliation checks, derived on read
Money
LIVE · data
left nav → Money
Ledger primitives; an event pins its own FX rate
Invoicing
LIVE · data
left nav → Invoicing
No total column at all; a totalMinor sent anyway is refused, not ignored
Artist statement
LIVE · signature
left nav → Artist statement
★ Commission engine and splits; D-021's three safety properties each enforced by test
Clearance
LIVE · signature
left nav → Clearance
★ A requirement is a row carrying its rule version
Roster / Offer Desk / Deal Engine / Settlement / Money / Clearance (fixtures)
FIXTURE · no DB
left nav → the (fixtures) entries
Six frozen-sample twins of the live screens. They render without a database and are how the design is reviewed
Visas & carnets
in progress
does not exist yet
S27 in progress — no screen exists yet. Counter and vault are tested at the database level only