Last updated 12 August 2026
This page exists for one reason: so you can see whether the product is still being worked on before you put a job’s records in it. Dated, newest first, and only things you would actually notice.
No version numbers. Changes ship when they are ready rather than in numbered releases, so entries are dated instead. Sparky QC’s first release was 28 July 2026 — it is a new product, and the honest way to show that is to date everything rather than imply a longer history.
12 August 2026
The Reports tab now totals the crew timesheet: straight, overtime and double time for the job, then split by employee and by cost code. That is the part everybody asked for, and it is the less interesting half.
The other half is a table nobody asks for and every job needs. The man-hours a foreman wrote on the daily report, against the sum of that day's timesheet rows. Neither number is derived from the other — different people, different moments — so they are free to disagree, and when they do it is worth knowing while somebody still remembers the day. A foreman high means hours were claimed that nobody booked. A foreman low means hours were worked that the daily report never reported. Those are different conversations and the sign tells you which one you are having.
Two limits are on the page rather than buried. The hours columns are text, deliberately — a number box silently blanks anything it will not accept, and “6 (2 crews)” is a thing a foreman writes. So an entry with no number in it at all is not read as zero and quietly folded into the total; it is excluded and counted on screen, because a total that drops rows without saying so cannot be checked. And only dates carrying both a daily report and timesheet rows are compared, with the rest counted, so a crew using one tab and not the other does not get every single day flagged as a discrepancy.
It totals hours. It does not calculate pay, apply a rate, or file anything. And it is not in the turnover job book, same as the timesheets it comes from — who worked how long is yours.
11 August 2026
A new tab under Setup, holding the activity list the job is run against: activity ID and name, WBS or phase, area, system and discipline, baseline, planned and actual dates side by side, duration, float, whether it is on the critical path, predecessor, percent complete, who owns it, and a variance reason on the row that moved.
What it deliberately is not is a scheduling tool. Nothing here computes. There is no Gantt bar, no critical path worked out from the logic, and no date that moves when a predecessor slips. Primavera P6 and MS Project do that, most contractors asking for this already run one, and a CPM engine rebuilt badly is worse than none at all. Three pairs of dates and a typed critical-path flag are facts copied off the schedule that produced them — which is why they are entered rather than derived, and why the app never pretends to have worked them out.
The half those tools cannot do is the reason this is worth having: the plan sitting beside the records. Sparky QC knows C-1001 is pulled, terminated, torqued to spec and meggered. P6 knows what somebody typed into it on Friday. So the columns use the same area, system and discipline vocabulary as the record tabs, and percent complete on an activity can be read against work that was actually signed off rather than reported.
It takes a CSV import, which matters more here than anywhere else in the app: nobody types a schedule in twice. Export from P6 or MS Project, map the columns once, and the activity list lands. A schedule tab without an import is a schedule tab that stays empty.
It prints as a log — Print Log on the tab lays nineteen activities onto a landscape sheet, planned against actual with percent complete and an owner, and carries on to a second page beyond nineteen. It is a sheet to walk down and mark up, which is why baseline and float are on the record but not on the paper: baseline belongs in a variance report, and float is recalculated by whichever tool owns the logic, so a stale one written in pen is worse than none. The blank is in the free form pack, now thirteen.
Two new tabs under Field Data, alongside the weather log. Both record the day rather than the work: what happened on site, who was there, and what stopped them.
The daily report carries crew count and man-hours, work performed, equipment and materials, visitors and inspections, the toolbox topic, and — the part that matters two years later — a delay cause from a fixed list with the hours lost against it. Free text is useless here: “weather”, “Weather” and “rain” are three different delays to anything that has to add them up, and the question always asked afterwards is how many days a given cause cost. Its work-status list is deliberately the same four words the weather log uses, so a report claiming a weather delay against a log saying normal work is visible rather than buried under two vocabularies.
The crew timesheet is one person, one day — not one crew, one week. A weekly sheet is what a foreman fills in, but it is the wrong thing to store: hours by employee, by cost code and by week all need the person-day underneath, and a week rolled into one row cannot be taken apart again. Straight, overtime and double time are separate, against a cost code and area, with the signed sheet attachable. Employee names come off your qualification records rather than being typed, so one person cannot end up as two spellings splitting their own total.
Two things are stated rather than implied. Timesheets are kept out of the turnover job book — who worked how many hours is yours, and it reaches a client through a claim if at all, not as an appendix nobody chose to send. Daily reports are in the book, because that is normally what a client is owed. And nothing totals hours yet: the daily report’s man-hours figure is typed by the foreman and can disagree with that date’s timesheet rows. A rollup is a reporting view and it is not built. This is a record of the day, not a scheduling or payroll product.
Timesheets accept a CSV import, since a week of them is usually transcribed from a sheet or a payroll export. Daily reports deliberately do not — bulk-creating those is backfilling, which is the one thing a daily report must not be.
Both print, and they print differently because they are different shapes. A daily report is one day to a sheet, so it opens in Form View as the printed page itself, filled in from the record. A timesheet is a log — eighteen rows to a landscape page, and Print Log on the tab lays your records onto it and carries on to a second sheet when there are more than eighteen. Both sheets also joined the free blank form pack, which is now twelve, so they can be printed empty and filled in with a pen by anyone, account or not.
The timesheet totals with a pen. The ST, OT and DT total boxes at the bottom are print-only and carry no field behind them — the same reason there is no total column in the app.
3 August 2026
Compile a job book and it lands in Downloads. Somebody attaches it to an email, it bounces at the size limit, so it goes up to a shared folder instead. Then an NCR closes out, you recompile, and there are three copies of the same turnover package carrying different closure dates — with the client reading whichever one reached them first.
Pick a folder once under Export Folder in the sidebar and every export — CSV, project snapshot, compiled job book — is written there instead. Point it at a folder OneDrive, SharePoint, Google Drive or Dropbox already syncs and the file is up there, shared with whoever that folder is shared with, seconds later. One copy, and it is the current one.
It is a folder and not an integration on purpose: there is no account to connect and nobody grants us access to anything. The file is written to your own machine and your sync client does the rest.
The trade is stated in the interface rather than discovered. It needs the File System Access API, so Chrome or Edge on a desktop. Everywhere else falls back to a normal download, exactly as before.
A third-party inspector works for several contractors almost by definition — which made this worst for exactly the people the free auditor seat is aimed at. If you belonged to two companies, the app loaded one of them, and not reliably the same one twice. A paying member of one company, shown as an auditor in another, was refused buttons the database would have let them press.
To be precise about what this was: not a data exposure. Access was always enforced per project by the database and stayed correct throughout. It was the interface disagreeing with it, which shows up as buttons that vanish or fail rather than as anything anyone should not have seen.
Now every accepted membership loads, sorted so the order is stable, and your choice is remembered and re-checked on each load — being removed from a company cannot strand the app pointing at it. The switcher only appears if you are in two or more.
An auditor can now raise findings against a project, the crew works them, and the auditor is told when the last one is closed.
It is a separate list from the contractor’s punch list, deliberately, because closure belongs to different people: a contractor signs off their own snags, an auditor accepts the correction of theirs. The statuses carry the whole trip — Open and In Progress are the crew’s, Corrected is the crew saying it is done, Verified is the auditor accepting it, and Withdrawn is the auditor conceding the finding was wrong.
The all-clear notification is decided on the server, not by the app. It re-reads the list and refuses to send while anything is still open, because an all-clear is the message most likely to be believed and least likely to be checked.
A megger result that cannot say which one-line the circuit is on makes the reader go and find out. Every Installation, Equipment and Testing module now carries a drawing reference — 22 tabs, from the cable schedule through to phase rotation.
The blank form pack has been up since 28 July. None of it needs an account.
1 August 2026
Send selected punch items to a sub or an inspector who has no seat. They get a link, no account, read only.
This is the only place in the product where a URL is the credential, because the recipient has no identity to check. Links get forwarded, pasted into group chats, and left in inboxes that outlive the job, so the token is stored hashed and shown to you exactly once — a link that can be re-displayed is one somebody can retrieve later. Links can be revoked.
A pin button in the brand row collapses the sidebar to an icon rail and opens it again on hover or keyboard focus. Remembered per browser rather than per account, because it is a property of the screen you are sat at, not of who you are.
28–30 July 2026
Sparky QC went live on 28 July 2026 with the record sections, the audit, the turnover job book and the blank form pack. What changed during that first week:
The cable schedule arrives as a spreadsheet off the engineer’s drawing package, and re-keying eight hundred cables by hand was the largest data-entry cost in the product. Seven installation tabs now take a CSV, each with a template to download.
It is a dry run first — nothing is written until you have seen the row count and every rejection. A row with any problem is refused whole rather than imported partially, because a cable record with the voltage class quietly dropped is worse than one that was never created: nobody goes back and checks the ones that worked.
The JSA was already in the blank pack; what it could not do was be filled in. It is now its own module, bound to the sheet the same way the megger and loop check reports are — fill it in the app, print it for the tailgate.
Its own module rather than a scan attached to a Safety record, because filed as a scan none of the arc flash data, the permits or the step rows are searchable — and “which JSAs covered energized work” is a question that gets asked after an incident.
On the strict reading it does not belong in that list: 480V is a system voltage and every other entry is an insulation class, since a 480V circuit is properly run in 600V-class cable. It goes in anyway, because 480V is what is printed on the drawing, what the electrician says, and what gets typed into the box. A field that refuses the word teaches people the field is broken rather than teaching them the distinction — and it was rejecting whole rows on import.
Only user-visible change is listed — something you could notice using the product, or a resource we published. Off the list: infrastructure, documentation, test work, mail and DNS setup, brand assets, and internal refactoring that changed no behaviour. There has been a lot of all of it.
Saying so matters, because a changelog that filters silently reads as a complete history when it is not. If you want to know whether something specific shipped or is planned, ask — info@sparkyqc.com.
See also how Sparky QC works, including what it deliberately does not do.
Release notes — sparkyqc.com/release-notes