AV production & rental · build status
Inventory, availability, maintenance and the feasibility gate for AV production. Generated from the build ledger, never hand-edited.
T1 – T4 · 4 slices
4 complete
T5 – T9 · 5 slices
5 complete
T10 – T15 · 6 slices
6 complete
T16 – T19 · 4 slices
4 complete
T20 – T21 · 2 slices
2 complete
T22 – T23 · 2 slices
1 complete · 1 in progress
T24 – T29 · 6 slices
6 complete
T30 – T32 · 3 slices
1 complete · 2 in progress
T18a · 1 slice
1 complete
| Slice | Name | Status | The ledger’s note |
|---|---|---|---|
| Phase 1 — Foundation | |||
| T1 | Scaffold, tokens, health fingerprint 657e9f1 · 2026-08-02 | complete | verify-T1.sh exits 0. Design system pinned at 12 files |
| T2 | Company, warehouse, audit 1786b78 · 2026-08-02 | complete | verify-T2.sh exits 0, 63 checks since T3 amended its API section. Independently confirmed by the coordinator. membership moved to T3 — D-030 |
| T3 | Authentication and authorisation 2e903ec · 2026-08-02 | complete | verify-T3.sh exits 0, 111 checks. membership landed here — D-030 |
| T4 | Taxonomy, configuration, demo fixture aae99dc · 2026-08-03 | complete | verify-T4.sh exits 0, 79 checks. Jurisdiction demo only — D-053, Q-001. Fixture is layered; later slices append — D-056 |
| Phase 2 — Inventory and the warehouse | |||
| T5 | Job, phases, client 4c8a25d · 2026-08-03 | complete | verify-T5.sh exits 0, 72 checks. The occupancy window is a stored range held equal to its phases by a deferred guard — D-064. Ladder seeded with the eight stated moves only — D-067, Q-023 |
| T6 | Catalogue ec2e175 · 2026-08-03 | complete | verify-T6.sh exits 0, 75 checks. 97 products, bulk 52 > serialised 45 — D-076. Rate history immutable once in force — D-077. Kit rates belong to T8 — D-078, Q-026 |
| T7 | Assets, bulk stock, warehouses see merge · 2026-08-03 | complete | verify-T7.sh exits 0. 476 units, 104 bulk lines · 7 196 units. Three distinct money figures — cost, book value (labelled estimate), declared at list. One hoist examination-overdue, two units firmware-unresolved, both deliberate fixture state for T12/T14. Slice built by an agent that hit the usage limit before the browser check and the ledger; the coordinator completed both |
| T8 | Kits, containers, dependencies a45f081 · 2026-08-03 | complete | verify-T8.sh exits 0, 103 checks. The worked example's two package rates land here — 82 000 and 14 000 — and with T6's five product lines reproduce the 1 263 000 equipment gross. A kit's price is not the sum of its parts — D-088, asserted as an inequality against the components' 138 040. Kits nest, cycles refused at write time, depth limits are configuration — D-093 |
| T9 | ★Prep screen, scanning, movements a291178 · 2026-08-03 | complete | verify-T9.sh exits 0, 92 checks. D-020 taken: the scan key is opaque and customer-supplied, and the GS1 identifier is an optional attribute that nothing in the scan path reads. 200 scans across a killed API, replayed from the start, land as exactly 200. The verdict lives in the DATABASE with the session locked — D-094, R12 |
| Phase 3 — The signature modules | |||
| T10 | ★M2 Venue Playbook d55ccc5 · 2026-08-03 | complete | verify-T10.sh exits 0, 133 checks. Validity is DERIVED, never stored — proved by hashing av.playbook_fact before and after a change event that voids 12 facts. All six lines of [03c §7](03c-playbook-addendum.md). The venue leg ships and is persisted; the gate is still T14's |
| T11 | ★Availability engine ed59d6e · 2026-08-03 | complete | verify-T11.sh exits 0, 124 checks. Two mechanisms, both raced for real: a serialised second write refused by commitment_no_double_book, a bulk second writer that waited on the row lock and refused by name. The fixture's competing job makes the trough real — 0 free swept against 2 at the endpoints. D-084 landed here — D-122. A shortfall is DATA, not an error — D-119, 0017 |
| T12 | ★M3 Maintenance and inspection e9bb034 · 2026-08-03 | complete | verify-T12.sh exits 0, 109 checks. The wedge holds end to end against the demo fixture: a blocking fault raised at Wednesday's check-in takes the cabinet out of Friday's supply (39 → 38), and a named exception is raised Thursday morning with 22 hours of notice — with the hold still firm and the job unmoved. Hungary seeded for real (Q-046). Two corrections found by the verification and shipped as 0020 and 0021 |
| T13 | Sub-rental, holds, suppliers, POs 641afc9 · 2026-08-03 | complete | verify-T13.sh exits 0, 108 checks. A2 is structural in three places: a foreign key, av.commitment_guard and av.subhire_guard — it takes three separately refused acts to make an unconfirmed sub-hire count. The fixture carries BOTH cases and the verification proves them against each other: the console enquiry contributes 0 and the job is short by 1, and accepting its purchase order inside a rolled-back transaction moves the number to 0. A1 ships as two columns — D-140. Q-045 ANSWERED, D-121 confirmed — D-138. The worked example's 117 000 / 158 400 / 41 400 / 2614 bp reproduces through av.subhire_margin |
| T14 | ★M1 Feasibility Gate c2bbad6 · 2026-08-04 | complete | Protected. verify-T14.sh exits 0, 106 or 107 checks. Four legs against ONE as-of, one named binding constraint plus the count of others at the same severity. G1 proved by construction: the equipment leg clears only from 2026-08-25 and the venue leg only before 2026-08-20, so each passes and neither passes when the other does — and the positive control shows the gate CAN answer feasible. 03b §1.1 asserted from one fixture: the same one-unit SD10 shortfall is feasible_with_subhire with the enquiry standing and feasible_with_conditions without it. Three defects found by exercising, none visible to any static check — 0033 (an R1 WITH CHECK cannot see a row inserted by its own statement, and the obvious repair would have broken G1 through two snapshots) and 0034 (the condition leg dropped every serialised commitment). And one I argued my way into: 0032 wrote a second copy of an ordering T4 had already seeded as effective-dated configuration — 0035 makes both ranking functions read av.taxonomy_term, D-197 struck through by D-212. Gate cost 1.1–1.4 s, uncached and recorded — D-209. G7's four automatic moments were NOT wired at T14 — Q-080, ANSWERED 2026-08-15 by run 27 |
| T15 | ★M4a Rate card and quote a280add · 2026-08-03 | complete | Protected. verify-T15.sh exits 0, 86 checks. D-100 landed: depreciation and service are allocated PER ASSET and the flat 8% is retired — 76 243 → 76 845, and the margin variance did not move. Q-012 ANSWERED. The Danube quote reproduces 1 953 340 / 527 402 / 2 480 742, cost 815 945, margin 1 137 395. Two pricing paths, sub-hire as a cost inside its line, the total asserted equal to the sum of the lines by a DEFERRABLE trigger. Q-054 ANSWERED — a 30 s client timeout over a 27.9 s sweep, not a race |
| Phase 4 — Crew | |||
| T16 | People, skills, certifications f505bfa · 2026-08-03 | complete | verify-T16.sh exits 0, 99 or 100 checks — 100 when it starts its own API, 99 when one is already on 8795, which is the one line that differs. L6 is live and paired: the rigger whose height ticket lapsed 2026-06-30 cannot fill the role that requires it, CAN fill the role that never asked, and COULD fill the first on 2026-05-01 (R14) — proved in SQL as truss_rw and again over HTTP. 0024 shipped av.erase_person unexecuted — person_id named both an OUT parameter and a column, which PL/pgSQL resolves at first execution, so the Article 17 path had never run; 0027 corrects it. Erasure leaves no name in any append-only table, scanned across every one discovered from the catalogue. Corrections found by this slice: 0025, 0026, 0027 and a context tail on verify-money.sh — D-164 |
| T17 | Availability, requirements, offers 145a32d · 2026-08-04 | complete | verify-T17.sh exits 0, 104 or 105 checks — 105 when it starts its own API, 104 when one is already on 8795. The clock is a PREDICATE, not a sweeper: the fixture carries an offer whose stored status is open and whose clock ran out 2026-07-27, and the state function is asked BEFORE the sweeper has ever touched it, then after — held, shortfall and shortfall_firm do not move. Two mechanisms, both raced: an exclusion constraint over (person_id, period) where status='accepted', and a select … for update on the requirement row for headcount — both losers WAITED. Two open offers on one person over the same hours SUCCEED (03a §2, one noun over). L6 refuses the offer at the date of the CALL, by name, with the date the ticket lapsed. 0029 corrects 0028: an accepted offer could never be released — found by this slice's own positive control, which could not run. Two repairs that are not T17's: translateError's commitment-race branch was unreachable, and verify-T4's ladder exemption had a literal ceiling — D-165 to D-176 |
| T18 | ★Labour rule engine 35b612d · 2026-08-04 | complete | Protected. verify-T18.sh exits 0. See the T18 run log below |
| T19 | Call sheets, timesheets, crew app b60ede2 · 2026-08-13 | complete | verify-T19.sh exits 0, 103 checks. L1 proved by PERTURBATION, not by agreement: the quote's crew cost and the timesheets' expectation are 573 300 either side, and moving the 2.0× overtime band to 3.0× moves both to 620 100. L7 is a trigger, refused by name, paired with an actual recording cleanly on a row the same trigger protects. The Danube overrun reproduces at 42 900 out of the engine, never written down. Three defects found by measuring: 0037 (the Playbook comparison could not fire), 0038 (a taxonomy code collided with a design-system tone and reddened nineteen screens), and an audit payload that 409'd every call — Q-084 |
| Phase 5 — Money and execution | |||
| T20 | ★M4b Settlement and variance 061dada · 2026-08-13 | complete | Protected. verify-T20.sh exits 0, 83 checks. The Danube settlement reproduces 1 137 395 planned / 1 056 595 actual / −80 800 variance, six attributions summing to it exactly — and not one money figure is typed, in the fixture or the suite: the oracle gained --emit and a final check greps the script for a worked-example figure. S1 proved by ENFORCEMENT: a settlement built, attributed exactly and closed, then rebuilt one unit short and refused BY NAME — with the residual asserted at −1 first. S5 is structural — the residual is derived and unattributed is refused as a cause (D-229); sabotaging the report to fold it into estimating_error fails by name. S7–S10 whole. P12 now reaches a persisted VERDICT (D-230). Three defects found by measuring: 0040 (an append-only child carried an ON DELETE CASCADE, and this slice's own check asserted the cascade was *refused* and passed — immutable-personal-data-test.sh found the real one), 0041 (0039's P12 fix minted a venue-leg evaluation per verdict, which broke T10 and pinned every fact the gate ever read) and a fixture that was not idempotent because a BEFORE INSERT trigger runs before ON CONFLICT |
| T21 | Form engine, guided procedures, QC 2b6648d · 2026-08-13 | complete | verify-T21.sh exits 0, 134 checks. This row said not started until T22 measured it — run 23 below recorded the slice and nobody updated the table, which is the ledger contradicting itself in the one place a fresh agent reads first. F23 proved by REPLACEMENT: one form engine, four consumers, all moved. 0044 declares the four as a _known structural ladder (D-237) |
| Phase 6 — The ecosystem | |||
| T22 | event.clinic couplings 529b73d · 2026-08-14 | partial | verify-T22.sh exits 0, 74 checks. BUILT: the app.event read, the job proposal with a derived occupancy window, the accept/reject decision, and the change-exception feed — O7 proved by PERTURBATION, with the job, its seven phases, its commitments, its quotes and its crew calls asserted byte-identical across a refresh that raised three named exceptions. NOT BUILT: anything reached through app.venue, app.space, app.tenant or app.company — module 5.14's published-spec ingest and 10.2's venue spine. WHY: as truss_rw those four raise, and app.event itself returns zero rows because Rigfold is not registered in app.supplier_principal. Closing it is three statements in event.clinic's database, specified in [09 §4](09-upstream-observations.md) and not applied — owner's decision, 2026-08-13. Q-013 re-measured and superseded |
| T23 | Technical requirement draft d55d124 · 2026-08-14 | complete | verify-T23.sh exits 0, 110 checks. Session format x room x attendance -> a proposal, labelled in the database (estimated_quantity), in the API (isProposal, proposalNotice, estimatedQuantity) and on the screen. Accepting is an attributed, reasoned act whose ABSENCE has a consequence: av.accepted_requirement() returns nothing for an unaccepted draft and exactly its lines afterwards, same job, same route, before and after. An input Rigfold does not have produces a NAMED GAP, never a plausible number — all four omission reasons occur on fixture data, and lines + gaps is CONSERVED across two as-of dates while lines fall. Forced red three times. No house-default sizing rule is seeded (D-243). Q-098, Q-099 and Q-100 raised |
| Phase 7 — Depth | |||
| T24 | Dashboards, transport, load lists, templates 04634b4 · 2026-08-14 | complete | verify-T24.sh exits 0, 138 checks. All five modules built — ops board (11.1), availability heat map (11.2), vehicle register (8.8), truck manifests with load lists (8.5) and recurring job templates (1.10). ONE availability engine, proved by REPLACEMENT: the sweep is swapped for a sentinel inside a rolled-back transaction, the replacement is asserted to have REACHED the sweep first, and the heat map then reports the sentinel — sabotaged with a real second implementation and it failed by name. A cell is a trough: every cell equals the min over the sweep's own segments, and a planted TWO-HOUR commitment lowers a WEEK-wide cell. A load line references only what the job committed, refused by name, with a positive control on each. Every weight is an estimate in the column's own name. Four defects found by measuring: 0048 (the "estimate is low" detector could never fire — weight_g is NOT NULL), 0049 (two term_binding rows with no require_term_kind guard, caught by verify-T5), T11's warehouse filter had never worked over HTTP since T11 (the postgres.js jsonb trap), and a test that PINNED that defect in place |
| T25 | Invoicing, currency, tax, signature 4ce682f · 2026-08-14 | complete | verify-T25.sh exits 0, 105 checks. The Danube invoice reproduces 1 953 340 / 527 402 / 2 480 742 exactly, and the two documents together bill the settlement's actual revenue — every figure read from the oracle, none typed. Tax rounds ONCE PER RATE, and the suite proves the difference is real: per-line summing gives 527 401 on this data, which would have missed 03 §7.5 by one minor unit. av.tax_on is now the ONE implementation and T15's guard calls it — D-251. The central claim is proved in four steps, not one: the money hash is shown SENSITIVE first, the added rate is shown to MOVE the proposer, and only then is the hash required to be unchanged. av.fx_rate is read by exactly one function in the whole schema. Two defects found by the shared gates within the minute — 0051 (a table with an erasure path is not append-only, D-254) and privilege-audit.sh could not see a column-scoped grant at all (D-256). Deposits (6.19) deferred — D-257, Q-109 |
| T26 | Asset P&L, utilisation, capex 96f080e · 2026-08-14 | complete | verify-T26.sh exits 0, 99 checks. UDX-0042 reproduces 03 §8 exactly — time 26.30%, dollar 38.82%, contribution 1 201 000, payback 4.15 years, 96/11/258 days, revenue 2 640 000, depreciation 1 200 000, service 185 000, insurance 54 000, 14 occasions at 117 000 — every figure read from worked-example-oracle.py --emit, none typed, and §13 greps this script for each and self-tests the grep. The four figures are proved DERIVED before they are compared: five inputs are perturbed inside rolled-back transactions and each must move, in the right DIRECTION (removing a sub-hire occasion must lengthen the payback, not shorten it). The two rounding rules are shown to DISAGREE first — two 2025 lines carry an odd net, so truncation gives 2 639 998 and rounding at the total gives a third answer, before half-up is asserted (D-258's shape, from T25). Depreciation is the fall in the unit's OWN book value, so it is method-agnostic and a method the dispatcher cannot compute reports not known with no figure and no zero — proved with a positive control. The flat 8% is deleted, not unread (D-262, Q-012 closed). Four defects found by the shared gates: 0052 left four functions EXECUTABLE BY PUBLIC, 0052 named a column after a taxonomy kind and the app then hard-coded eur/2 digits into every money figure (both caught by verify-T4/T5/T6/T7, fixed by 0054), T25's fx-reader check was a SUBSTRING match that called fx_rate_at a second reader, and the product could not record a job older than itself (D-259, 0053) |
| T27 | RFID, cross-hire, stocktake 669ead5 · 2026-08-14 | complete | verify-T27.sh exits 0, 94 checks. This row said not started until T28 read it — the same defect T21's row carried, in the same table, two slices later: the run log below was written and the summary table was not. A2 in reverse proved on four numbers off one product; an RFID tag and a barcode find the SAME unit while an SSCC in gs1_identifier finds none; a count is a measurement whose disagreements are attributed, never silently reconciled. D-263…D-267, Q-116…Q-119 |
| T28 | Import, export, onboarding, data quality ad2c2dd · 2026-08-14 | complete | verify-T28.sh exits 0, 105 checks. The dry run and the real run are ONE path — av.import_commit raises while any line is unjudged, so the preview is compulsory rather than merely available (D-268). A misdeclared number format is refused, not coerced: 1 234,56 declared point-decimal is refused by name, and the SAME line reads as usable once the file's real format is declared — the perturbation that proves the refusal is about the format and not about a broken row (D-269). The count of what landed is read back out of av.product — the product is deleted inside the same rollback and the count falls to 0 while the row still claims it committed. Nothing from a customer's file reaches a table with no erasure path: a tracer cell is found in av.import_row and in no av.audit_event payload. Onboarding is derived, never stored (D-271) and returns four unmet steps on a company with nothing in it — Q-093 not made worse. Every data-quality rule is perturbed into existence, and 14.3's "product with no category" is shipped as NO rule because the column is not null (D-272). Three defects found by measuring: 0062 (a record variable shadowed a table alias, so av.import_commit raised on EVERY call — 0056's class from the other side), 0063 (a zero-minor-digit currency broke the parser the guard said it accepted), and a probe that could not fail — 0063's first pin matched text 0061 already had, so the apply reported already present for a file that had never run. Forced red three times. D-268…D-273, Q-120…Q-123 |
| T29 | Safety, risk, travel, payroll export, clock see merge · 2026-08-14 | complete | verify-T29.sh exits 0, 102 checks. Q-003 IS STILL OPEN AND THIS SLICE DID NOT ANSWER IT. av.incident is on local ONLY — absent from Neon dev, absent from production, and it must not reach either until the owner answers with legal input. It has NO text column at all, measured from the catalogue so the check covers the column somebody adds next; the narrative lives in an av.form_response (the form engine's fifth consumer, which 0044 anticipated in so many words) and §2.6 measures the erasure rather than asserting it. incident_retention_years is configuration with no default — jsonb null, so every reader renders *not set*, and both suites grep for a ?? 3. D-274, D-275, assistant, pending owner. The payroll export is L1's third consumer: av.payroll_lines → av.timesheet_expected → av.labour_plan → av.labour_evaluate, proved by changing the engine and requiring the quote, the timesheet AND the export to move — with the perturbation asserting it reached its target first. The clock inherits L7 rather than restating it: one column, the same guard, a full cycle leaving planned_period byte-identical and a plan edit refused by name. The load aid has no memory (D-276) and returns unknown — never a number — when a weight is missing (0048) or a Playbook fact is stale (G3). Four defects found by measuring: the vocabulary was read by kind code (0066), two residual_* bindings had no trigger (0067), the fixture layer was not idempotent because a BEFORE INSERT trigger runs before ON CONFLICT, and two app literals were taxonomy codes. scripts/verify-T21.sh amended and disclosed — D-279 |
| Phase 8 — The suite | |||
| T30 | Procurevent inbound RFP, Estate coupling see merge · 2026-08-14 | partial | partial BY DESIGN — the roadmap has said so since T1, and the measurement is stronger than Q-005's original wording. verify-T30.sh exits 0, 59 checks. Measured 2026-08-14 after git fetch in both siblings: Procurevent emits NOTHING to an external system (the RFP body exists as request_versions.content_snapshot, behind its own RLS and its own Clerk portal route — no outbound route, no webhook, no export, no schema document), and Estate grants Rigfold nothing (0 of 72 relations, no schema USAGE). Neither is a defect in that product; both are specified in [docs/09 §5 and §6](09-upstream-observations.md) and nothing was applied to either repository or database. ★ The gate stands in front of the price and the DATABASE refuses — av.bid_request_submission_gate, four rules each raising its own sentence (wrong job, not_feasible G2/F35, an unknown leg G3, a superseded verdict G5), with the positive control landing. D-280. Adapter state is configuration on the bid_source term's own attributes, proved by perturbation — answering Q-005 is an UPDATE, not a release. D-282. The pack is held beside the Playbook, never merged into it; differs raises a discrepancy holding both values, stale_local raises none (G3 applied to a document), and the dry run and the commit are one call with one flag. D-283. Zero new permissions — quote.issue already draws the money-leaving-the-building line. D-281. Q-127 raised: Estate publishes an AV *vocabulary* and no AV *fields* — trim height, SWL, phase and dock dimension are prose in venue_feature.details, so a grant alone would not deliver a comparable pack. Five defects found, three in this suite's own first draft: 0070 (an OUT parameter shadowed the column it returned, on a path the self-check never executed), a backtick that EXECUTED in shell prose, grep -c || echo 0 printing two lines so a check could only fail, a join to a table the same statement's function had just written, and an AND that bound tighter than an OR and disabled an effective-date filter with no symptom any fixture could show. verify-T29.sh repaired and disclosed — Q-128 |
| T31 | Frameworks, accounting, ShowLedger24 and Verbunk see merge · 2026-08-14 | partial | partial for the same reason T22 and T30 are: neither sibling exposes anything to read, measured rather than assumed. verify-T31.sh exits 0, 89 checks, run twice with no residue, forced red three times. ★ ONE ENGINE. A framework agreement EXTENDS av.quote_price — dropped and recreated in place with av.agreement_volume_tier feeding the single discount computation that already existed, returning discount_source to say which rule answered. A band and a category discount do NOT stack: the client gets the greater, a tie goes to the category, and the suite measures the gap between max and sum. D-285. quote_line.discount_source is persisted, never re-derived — a band depends on the volume AT THE TIME. D-286. ★ THE RATE IS HELD. The accounting export looks up each document's rate at that document's own date, stamps it with its date and source, and freezes it at issue; a rate observed later is not reached forward for, a missing rate refuses the whole export naming the document, the pair and the date, and rounding is sign-symmetric at the line so a credit note converts to exactly the negative. D-287. Every money figure from worked-example-oracle.py --emit — the export's net IS revenue_actual, the main invoice's line IS the oracle's net and VAT. accounting.export is its own permission, from settlement.close. D-288. ★ NO VERBUNK TERM, and the suite asserts there is none: 06 §4.3 makes that coupling the individual's consent, and a flag would assert a route that does not exist. D-289. 0073: a DRAFT accounting export with lines could never be deleted — the cascade fires the line guard after the parent is gone; an EMPTY draft always worked, which is why nothing showed it, and what found it was this suite's own cleanup failing. Q-130 to Q-132 raised. ★ ShowLedger24's S31 and Rigfold's T31 are each waiting for the other to measure first — Q-131, and it is the cheapest coupling in the estate to unblock |
| T32 | Search and public API see merge · 2026-08-14 | complete | The last slice on the roadmap. verify-T32.sh exits 0, 99 checks, forced red four times. There is no search index and there will not be one — av.search is one SECURITY INVOKER function over nine base tables, and the verification reads the tables it touches OUT OF ITS OWN SOURCE and requires every one to force RLS. Made SECURITY DEFINER on purpose, the neighbouring company saw 17 of the demo company's rows — D-291. The public API is /api/v1, every route a GET, opened by a trk1 key bound to a membership so deactivating the person kills the key with no revocation step, measured over HTTP — D-292. R1 on STATE: the only permitted update is a revocation, and the un-revoke and the expiry-extension refuse in different shapes — D-294. 0075 renames two words verify-T4 §5 correctly refused — D-295. Q-134, Q-135, Q-136 |
| Further slices | |||
| T18a | Availability performance slice c4f9f3a · 2026-08-04 | complete | verify-T18a.sh exits 0, 45 or 46 checks — 46 when it starts its own API, 45 when one is already on 8795. The endpoint is 661 / 710 / 620 ms, against 22–29 s, and the answer is proved identical field by field across 1 708 compared fields at three levels — including all 93 sweep calls, which the endpoint does not cover because api/src/availability.ts:327 calls the sweep directly. The fix is two function arguments: (select as_of_date from cfg) is a SubPlan, which stops inline_set_returning_function inlining av.asset_condition, so every one of the 93 calls materialised all 512 of the company's condition rows to consume two — D-187, 0031. D-104 honoured: it is still a sweep, and the suite proves the segments tile the window with no hole. Q-057 ANSWERED, and two of its own claims corrected: RLS was not "the entire problem", and the missing 13 s was the 62 per_warehouse sweeps, not kit resolution — av.pull_sheet is 0.05% of the request |
scripts/verify-T<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.
T14 is UNBLOCKED as of 2026-08-04: T18 built the labour leg and T18a took its equipment leg's query from 22-29 s to 710 ms (D-019, D-103). Not yet built, and no leg is missing. A gate that silently omits a leg is worse than no gate.
for f in scripts/verify-T*.sh; do bash "$f" local || { echo "FAILED: $f"; break; }; done
# 1 · API worker cd ~/Documents/event-clinic-suite/rigfold/api && npm run dev # 127.0.0.1:8795 # 2 · console app cd ~/Documents/event-clinic-suite/rigfold/app && npm run dev # :5179 # prove a slice on the committed tree cd ~/Documents/event-clinic-suite/rigfold && bash scripts/verify-T13.sh local
Rigfold holds the current screen in React state, so the URL never changes and there are no deep links. Open the root and navigate in-app; a reload always returns to Overview. Worth fixing — a screen you cannot link to is a screen you cannot send to anyone.
demo only