Daily build report · Tuesday 11 August 2026

An unfinished form has been running Chad’s phone for a fortnight

Today was mostly about things that looked finished and were not connected. A form collecting answers nobody read. A draft nobody submitted deciding what Josh says to real callers. And two answers of my own I had to take back. Everything below is merged and on the live site.

This page is the purchase → onboarding → booking half of today. Josh, Parker, James and the Inspector Portal ran in a separate session.

4faults found
2releases merged
20tests written
179tests passing
2answers I took back

If you read one paragraph Chad has never pressed Submit on the onboarding form. His record says “draft” and always has — and that unfinished form has been Josh’s brain for two weeks. Nothing ever checked whether a form was finished, so it went live from the first keystroke. Separately, the email schedule was reaching nobody: the form saved it under one name and the part that reads it was looking for another. And the Overview button is now aligned and live — the cause was a class name, not a margin.

The short version


1 · A form nobody submitted was already the source of truth. Ken asked for a flow where the finished form becomes Brain 2. It turned out we were doing that far too early — from the moment an inspector started typing.

2 · The email schedule went nowhere. Two sessions built that section on the same day. The one that shipped saves under emailSchedule; the part that carries it to the person building the account was reading emailEvents. No error. No answer reached anybody.

3 · Overview is aligned, and live. Merged this afternoon. The cause was a generic class name behaving like a global.

4 · There is no Telnyx port-out kit. Confirmed a second time, independently. Parker still promises one in five answers.

5 · A page is drafted for inspectors who want to leave and take their number. Not published — two blanks on it need answers first.

6 · I took back two of my own answers. Both mattered, and both are below.

7 · Three days of finished work went live. Ted’s agreement, the part that sends an agreement after a booking, and the invoice link that shows a customer their real fee. All merged this afternoon.

Part one — the form was live before it was finished

Ken: “after the inspector filled the onboarding form it should be considered a source of truth.”


It already was. That is the problem.

The onboarding form saves as you type. Nothing ever looked at whether the inspector had finished. So from the first keystroke, whatever sat in the boxes is what Josh told real callers.

Fill in three rows of your price table and go to lunch, and Josh quotes from three rows. Type your company name, then correct it, and the wrong version was live in between.

Checked against the live accounts, not assumed

GC: status draft. No submitted date at all. Chad has never pressed Submit, and that form has been Josh’s brain for a fortnight.

Quality: status active — a third state nobody wrote down — carrying nine answers. Most of what Josh knows about Ted comes from a file we wrote by hand.

What was built, and why it is switched off

A record only becomes Josh’s brain when it is submitted. A draft is ignored, and says so — ignoring it quietly is how somebody spends a day wondering why their prices are not being quoted.

Then Ken said something that turned the fix into a fault: “we haven’t talked to Chad and Ted that this exists, that the onboarding exists.”

So Chad’s draft is not Chad failing to finish. Nobody has told him the form is there. Switching the gate on would have dropped his prices to a fallback that carries none, and the only way back would be a conversation that has not happened.

What ships, and what waits

And the fallback was made safe first

Part two — the email schedule was reaching nobody

Collected correctly. Read by nothing.


Two sessions built the follow-up-email section on the same day, without knowing about each other. Theirs shipped, and it is the better one — short dropdowns instead of asking an inspector to type a number of hours, which is exactly what Ken said they cannot answer.

But the two halves were never joined. The form saves the schedule under one name. The part that writes those answers onto the customer’s record — so the person building the account can read them — was looking for a different name. Mine.

Everything ran. Nothing errored. An inspector’s timings reached nobody.

Ken, on exactly this shape of fault: “Collecting an answer nothing uses is safe. Saying it works when it does not is how something sits broken for a month.”

Fixed, and locked

Part three — Overview, and a class name behaving like a global


Ken: “make the overview margin same as the others. right now its right aligned. we need them to be uniform including the spacing.”

It was not a margin. Overview had been given the class top — and there is a plain .top rule further down the same file, meant for the main page header, which pushes its contents to opposite ends. Overview alone inherited it.

BeforeAfterOther rows
Alignmentspace-betweennormalnormal
Gap12px10px10px
Icon24px26px26px
Labelfar right54px54px

The row now restates no padding and no alignment at all, so it inherits its shape from the same rule every other row uses. That is what keeps them matching in future rather than just today. Merged and live.

Part four — taking your number with you


There is no Telnyx port-out kit. Not a product, not a page, not a word they use. Searched again today; same answer Dil got on 10 August.

Parker still tells prospects one arrives, in five separate answers. The promise underneath — you can leave and take your number — is true and worth keeping. The mechanism is invented.

What came out of re-reading every source

Two “facts” that did not survive

And a page drafted for the customer

“Your number is yours” — the five steps, the two things that get transfers rejected, and what happens to their service on the day. It reads at a grade-5 level.

It is not published and nothing links to it. Two sections are deliberately blank: whose name goes on the form (one email to Telnyx settles it), and what it costs to leave (nobody has looked the fee up, and a client asking that deserves a real number rather than a guess).

The two answers I took back

Both would have cost something if they had been acted on.


1

“Jordan doesn’t enter this picture”

He does. Ken: “if James got technical issue then he will forward it to Jordan for a fix.” The support path has a third leg that was written down nowhere — James to Beth for what he cannot answer, James to Jordan when it is a bug. Now in the decisions log.

2

“Turn the e-sign on and take the alert off Beth’s phone”

Do either today and something breaks quietly. Take the alert off Beth and it reaches nobody — neither client has ticked a box they have never seen. Take the $1 link off and there is no payment link at all — real payments are already switched on and Chad has no Stripe connected.

Both stay exactly as they are until Chad and Ted are participants rather than people we are about to show something to. Show them first, ask them after.

Also shipped today — three days of work, now live

Built 9–11 August and sitting on a branch until this afternoon.


1

The agreement now actually sends

The e-sign was built, demoed and approved — and nothing in the booking path called it. A real booking sent nothing, while the confirmation email told the customer a contract was coming. It renders the document first and refuses if anything is missing, so a blank a person notices beats a wrong figure a customer signs.

Mergedswitch still off — it sends a real contract
2

Every booking was being treated as Chad’s

Nothing told the back office which inspector a booking belonged to, so it assumed GC every time. Ted’s customer would have got Chad’s company name in their email, Chad’s phone would have got the alert — and, once the e-sign went in, Chad’s contract.

Merged
3

Ted has his own agreement, and it is live

Built from the document Ken sent, word for word — a test walks every word of the source and fails if one is missing. Delaware law, his own arbitration service, his liability capped at twice the fee where Chad’s is capped at the fee. No initials, because his document asks for none and none were invented.

You can open it now: bookedsolidinspector.com/sign.html?b=demo-qhi — Chad’s is ?b=demo. Both are real agreements on invented bookings, and neither saves anything.

Live
4

The invoice carries the caller’s own fee

A fixed payment link says $1 whatever was quoted — that is what a payment link is. The invoice is raised per booking for the price Josh actually said. We were raising it correctly and throwing away the checkout link it hands back, leaving another company’s settings to decide whether a booking gets paid. It now goes in our own email with the amount beside it.

Mergedneeds Chad’s Stripe

What is switched off, and why that is not unfinished


Three settings are deliberately left as they are. None of them is work outstanding.

SettingWhy it stays
The e-signIt sends a real contract to a real customer. On the day we choose, not by default.
Alerts to BethTurn it off and alerts reach nobody — neither client has ticked a box they have never seen.
The $1 linkTurn it off and there is no payment link at all — real payments are already on and Chad has no Stripe.

What can be shown right now bookedsolidinspector.com/sign.html?b=demo — Chad’s agreement. ?b=demo-qhi — Ted’s. Both filled in and signable exactly as a customer sees them. The bookings are invented and nothing is saved. Sign them as many times as you like.