Photograph capture
The client makes photographs in their own system a condition of payment. SplicePilot holds nothing of theirs; a crew's own photographs are evidence we could hold and do not yet.
Platform
Where a capability is a subset of what the plan asked for, the gap is stated. The list below is the project's own features document, not a brochure written beside it.
Source: docs/features.md · 9 September 2026
Sheets and drawings
Nine pilot packages, 387 pages, 216 plan sheets. Sheet space is the primary coordinate system: footage is measured through each sheet's own ground metric, read from its viewport or its printed scale.

Recording work
The crews work underground. A phone has no signal for most of a day and sometimes for a week, and everything recorded in that time is real work that must survive the gap.

Field client · offline first
0 on this phone·0 stored at the office
nothing held
on this device
Reached the office
The same batch, sent a second time. Three events already stored, three acknowledged, nothing inserted. The phone deletes nothing either way: its queue is the only copy of that work.
01 — No signal
A crew records work in a trench with nothing to send it to. Identifiers are minted on the device, so nothing waits for a server.
02 — Signal returns
The batch goes when the phone can go. Until then it is held, and the crew keeps working.
03 — The retry
The likeliest route to double billing is a phone that syncs, loses signal before the receipt, and sends again. An event already stored is acknowledged, not inserted.
Accountability
A correction is a new event. Nothing is edited or deleted, and a gap or an altered row breaks the chain.
One claim’s chain · forward only
sha256 chain
#1Claimed, 646 ft
Crew lead
sha256 9f2c…41ab
#2Four payable conditions attested
Crew lead
sha256 c740…8e19
#3Quantity amended, reason attached
Office
sha256 21d6…b0f5→ 4b7e…9911 does not match
#4Recorded on the crew's behalf, reason attached
Office
sha256 8a03…7c62
#5Outcome applied
Office
sha256 e5b1…2d84
There is no edit path and no delete path. A gap or an altered row breaks the chain, which is the point: the log is evidence rather than a view.
01 — Append only
Every claim carries its own chain, and each event in it carries the hash of the one before. Nothing is edited and nothing is deleted.
02 — Alter one row
Change a figure after the fact and its hash no longer matches, so every link after it stops verifying.
03 — Corrections are events
A correction is appended with a reason, and the record of what was claimed on the day survives it.
The daily report
DPR Form V2 is a fillable PDF with 232 fields. SplicePilot fills it exactly as a person does today, rather than asking the client to accept a new document.
Daily production report · DPR Form V2
0 / 4,476 ft claimed
| Unit code | SPAN 02sheet 09 | SPAN 03sheet 11 | SPAN 04sheet 12 | SPAN 05sheet 12 | SPAN 06sheet 14 |
|---|---|---|---|---|---|
| Fiber | 646 | 509 | 582 | — | — |
| LI_47 | — | — | — | 478 | — |
| LI_53 | — | — | — | — | 524 |
| Muletape | 646 | 509 | 582 | — | — |
Released
A named person, at a recorded time. A second report for the same day supersedes the first and says so.
Sent
Every report that left the building is listed, with its recipients and the mail id that proves it went.
01 — The client's own form
A matrix: a column per span with the sheet it sits on, unit codes down the side, the quantity in the cell. 232 fields, filled exactly as a person fills them.
02 — Released by a person
Nothing sends itself. A person releases the report, and who released it and when is recorded with it.
03 — Sent, and provable
The mail carries the plain text, a designed body and the filled form. Recipients, releaser and the mail id are all kept.
Release and delivery · supervisor to the client
the sender holds gmail.send only — it cannot read a mailbox
Console · today's report
DAILY REPORT FROM 9/9/26 SPRINGFIELD 2.04
/api/delivery is office-only. A crew or foreman account is refused at the door.
Inbox — construction manager
SplicePilot·DAILY REPORT FROM 9/9/26 SPRINGFIELD 2.04
16:41SplicePilot·Re: yesterday's figures
16:41DAILY REPORT FROM 9/9/26 SPRINGFIELD 2.04
| unit code | SPAN 02 | SPAN 03 | SPAN 04 |
|---|---|---|---|
| Fiber ft | 646 | 509 | 582 |
| LI_47 ft | 646 | — | 582 |
| Muletape ft | — | 509 | — |
daily-report.pdfthe filled form, attached as the document of record
message id 18f2c…a41b · thread 18f2c…a41b · recorded against the delivery
New mail · SplicePilot
DAILY REPORT FROM 9/9/26 SPRINGFIELD 2.04
01 — Nothing sends itself
The report is built and queued, but it sits there. Release is office-only: a crew or foreman account cannot reach it at all.
02 — A person releases it
One click by a named supervisor. Who released it and when are written down with the report, not inferred afterwards.
03 — It lands as mail
The subject is the client's own format, kept exactly, because it is the key their whole process turns on.
04 — And it is provable
The provider's message and thread ids come back and are stored, so every report that left the building can be shown to have left it.
Approvals
The client's answers are classified with a model built from what construction managers actually wrote. Handoffs, rejections and partial approvals are told apart from approvals; a keyword search cannot.
Reconciliation
Statement lines resolve through exact, alias, glyph-fold, rate-as-proof, then unresolved. 1,015 verified statement lines are loaded.
Reconciliation · the matching ladder
6 lines
Statement lines in
Five caught, one not. Every resolution records which rung caught it, so “matched” is never a bare assertion.
01Exact
the line names the span
02Alias
a known other name for the same area
03Glyph-fold
O for 0, l for 1, a stray space
04Rate-as-proof
the rate identifies the pay item
05Unresolved
recorded, never guessed
01 — Lines arrive
A statement is a list of lines. Nothing on it is guaranteed to name a span the way the drawing did.
02 — The ladder
Each line is dropped through the rungs in order, and the first one that catches it records how it caught it.
03 — What nothing catches
The last rung is not a failure state. An unresolved line is recorded as unresolved and stays on a list somebody answers for.
Policy and the clocks
Thresholds carry a validity range and the document they came from, so a number that changes is a new row rather than a code change nobody can date.
Standing checks
Each runs on demand and every morning. Empty is the goal, and a morning digest names every check with findings.
Not done
These are open. Nothing on this site counts them as delivered.
The client makes photographs in their own system a condition of payment. SplicePilot holds nothing of theirs; a crew's own photographs are evidence we could hold and do not yet.
The schema exists; nothing issues one. A crew lead who has signed in once keeps a thirty-day cookie.
Certificates, a keystore and Xcode are purchases and installs, not code.