Deep Space (Platform)Aug 25, 2026

What Got Shipped Today - 25/8/26 - Tender Sets issue in sections, Award carries the documents, acknowledging stops closing

25 August 2026 Thirty pull requests merged today, and the theme is a tender that survives contact with the subcontract. Tender Sets now issue in sections and produce a printable record of exactly what went out, and when you award, that record follows the documents onto the subcontract. Alongside it: acknowledging a notice stops closing it, a lookahead can be published as a link, portal users land on their projects, and a run of dashboard numbers that disagreed with their own registers now agree. Features Tender Sets issue in document-class sections, with a Tender Issue Sheet as the record User story As an Estimator, I issued a tender as one long undifferentiated list of files and had nothing afterwards that proved what went out at that revision, so I can now issue in named sections and hand over an index of exactly what was in it. Before. A Tender Set was a flat list. Fifty drawings, four specification sections, a scope of works and a clarification all sat in one run, in whatever order they were picked. Subcontractors pricing off it had to work out for themselves which parts were drawings and which were scope. And when the set was superseded, nothing recorded what had been in the previous revision beyond the set itself, which had moved on. After. Creating a Tender Set now has a second step that assigns every document to a section: Scope of Works, Specifications, Drawings, Schedules, Clarifications, Addenda, Other. Defaults are inferred per document and you can override them, and the section structure and its order freeze into the same immutable snapshot the set has always used. Sectioned sets render grouped everywhere: the builder view, the subcontractor portal, and the portal’s Download all zip, which mirrors your sections as folders. Every issue also produces a Tender Issue Sheet: the one-page issue record most builders keep in a spreadsheet today. Project, package, Set Rev X, issue date, then the full document schedule grouped by section with revisions, ready to Print or Save as PDF from either the builder side or the portal. The live view marks any document superseded since issue. The frozen PDF never carries that marker, because it is the record of what was issued. Impact. This is the difference between "we sent you the documents" and "here is the document that says what we sent you, at Rev C, on this date". Six months later, when a subcontractor claims a variation on a drawing they say was never in the tender, the issue sheet is the thing you put in front of them.IMGThe second step in creating a Tender Set: every document is assigned to a section, so subcontractors receive the issue grouped the way you built it. The second step in creating a Tender Set: every document is assigned to a section, so subcontractors receive the issue grouped the way you built it. Award and Convert carries the tender documents onto the subcontract User story As a Contract Administrator, I awarded a package and then rebuilt the contract documents schedule by hand from whatever the estimator had issued, so I can now have the awarded tender set frozen onto the subcontract automatically. Before. The tender lived in Preconstruction and the subcontract lived in Commercial, and the bridge between them was a person retyping a schedule. The subcontract's Contract Documents schedule was assembled after the fact, from memory or from a folder, and it routinely disagreed with what the subcontractor had actually priced. Addenda and clarifications were the first things to fall off. After. Award and Convert now freezes the awarded Tender Set at its revision, plus its addenda and clarifications, onto the subcontract as the Contract Documents schedule. It also renders into the subcontract agreement PDF as an Annexure, Contract Documents, through a new template variable, so the schedule is part of the executed document rather than a screen. Re-issuing documents after award is a variation, never a silent swap. Impact. The documents the subcontractor priced and the documents named in their contract are now the same documents, provably, without anybody transcribing a list. That is the single most common source of a variation argument, closed by construction rather than by discipline. Publish a lookahead window as a shareable read-only link User story As a Project Manager, I could publish the construction programme as a link but had to export the lookahead to PDF and email it, so I can now share a live four-week window the same way. Before. Publish was a Construction Programme action only. The lookahead, which is the view a site team and a subcontractor actually care about, had no equivalent. Sharing it meant an export, an attachment and a version that was wrong the moment something moved. After. Lookahead Planning has the same Publish action. The published view renders Monday-aligned week columns matching the Gantt headers, with bars clipped to the lookahead window and the task's real dates kept in the Start and Duration columns. Each period length keeps its own link, so publishing the four week view does not overwrite the two week one. Impact. The people who need the next month rather than the whole programme get a link instead of an attachment. Two week and four week windows can run side by side to different audiences. A portal home page that opens on your projects User story As a subcontractor using the portal, I landed on a tab page and had to find a small project dropdown in the corner to get anywhere, so I can now land on a page of my projects and click the one I want. Before. Portal users arrived at a tab, not at a choice. Switching project meant a small dropdown in the top corner that only became clickable once the right left-menu item was selected. For an occasional user, the first thirty seconds in the portal were spent working out where they were. After. The portal now opens on a home page listing every assigned project as a large tile. One click to enter. Home sits in all three portal menus and is never filtered out by feature flags, so every portal user keeps a way back to their tiles. Existing deep links still resolve straight through to the tab they name. Impact. The portal stops requiring an explanation. For builders rolling the portal out across a subcontractor base, that is most of the onboarding problem gone. Acknowledging a notice no longer closes it User story As a subcontractor, I pressed Acknowledge to confirm I had received a notice and then found I could not comment on it, because acknowledging had closed it, so I can now acknowledge receipt and still have the conversation. Before. On seven notice types, including Notice to Show Cause, Contract Instructions, Notices of Delay, Site Instructions and variation notices, the response transition was configured to move the notice straight from issued to closed. So a subcontractor confirming receipt closed the notice, and a closed notice refused comments. The person had done the correct thing and been locked out of the thread for it. After. Acknowledge is now its own action with its own state. The notice records that it was acknowledged, by whom, and stays open for comment and for whatever the notice actually requires. Acknowledgement is always made as yourself, never on behalf of another party. Reopening remains available to the issuer and to administrators. Impact. Acknowledgement and closure were doing the same job, and they are opposite things: one says "I have this", the other says "this is finished". Separating them means the acknowledgement audit trail is now real, and the notice thread stays usable while the matter is live. Improvements Set a workspace default for where Tender Set documents come from, and lock it User story As a Commercial Manager, I had no way to make the document register the mandatory source for tender issues across the business, so I can now set the default and lock it. Before. Every Tender Set began with a choice between browsing the CDE Explorer and pulling from the Document Register, made by whoever happened to be creating it. A builder who had invested in a controlled register still had estimators issuing from folders, one set at a time, with nothing enforcing the standard. After. Workspace managers can now set the default Tender Set document source and optionally lock issues to the Document Register. With the lock on, the Explorer tab is greyed out with the policy named in its tooltip, and the server independently rejects unregistered documents. It is governance, not a hidden tab. Impact. Document control stops being a per-user habit and becomes a workspace rule. For anyone chasing ISO alignment or a client's document management requirement, this is the setting that makes the claim defensible. Filter the Notices register by status, and dashboard links that actually land User story As a Contract Administrator, I clicked an Issued count on the Delivery Dashboard and landed on an unfiltered register showing zero rows, so I can now click a count and see exactly those records. Before. The unified Notices register had no status filter at all. Status was expressed only through the tab strip, which buckets by ball in court, not by state. So every dashboard count that deep-linked with a status was a silent no-op: the link opened the register on its default tab, ignored the status entirely, and often showed nothing. The parameter survived in the address bar and was read by nobody. After. The Notices register gains a status facet, and the type-locked register pages now read a status deep link and apply it. A count on the dashboard and the rows behind it are the same set. Impact. Dashboard counts become navigation again instead of decoration. The gap had been live since the RFI and Site Instruction registers moved onto the notice platform, and went unnoticed only because the cards were still counting the old sources. Site Instructions on the Delivery Dashboard now read the Notice Platform User story As a Project Manager, my Site Instructions count said thirteen while the register showed one, and the Create Site Instruction button wrote a record no register displayed, so I can now trust both. Before. The Site Instructions KPI card counted legacy records across every workspace, while the URL it linked to had been rendering the notice-backed register for months. The quick action was worse: it opened the old composer, which had no notice reference, no sender or recipient organisation, and no instruction type. A site instruction created that way could be invisible to the person who issued it. After. The card and the quick action both follow whichever register that workspace is actually on. Where the workspace is on the notice platform, the count reads notices and the button opens the notice composer with sender, recipient and instruction type in place. Impact. The dashboard stops reporting on a register nobody is looking at, and the fastest way to raise a site instruction stops producing records that go nowhere. The Roles page shows who is on each role, and deleting one reassigns rather than orphans User story As a Software Champion, I deleted a role without knowing who was on it and left users with no permissions, so I can now see the count first and move them somewhere before the role goes. Before. The Roles page listed roles and nothing else. No count of who held each one, no way to find out short of opening the user list and reading it. Deleting a role was a one-click action with an invisible blast radius. After. Each role now carries an assigned-user count, with the names on hover, loaded in one request rather than one per hover. Deleting a role that still has users assigned is refused, and the refusal offers to switch those users to another role instead of dead-ending. Reassignment is restricted to roles of the same kind, so a platform user cannot be moved onto a portal role or the reverse. Impact. Role cleanup becomes something an administrator can do on a Tuesday afternoon without a support ticket behind it. Fixes Compare Bids: a pending recommendation now locks award and draft subcontract creation User story As a Commercial Manager, a package could be awarded while a bid recommendation was still sitting unapproved, so I can now rely on the recommendation gate holding. Before. The recommendation approval and the award action were not talking to each other. A pending recommendation did not prevent an award, and it did not prevent a draft subcontract being created from the tender. The governance step existed and could be walked straight past. After. While a recommendation sits in approval, every Award button locks behind an amber awaiting approval notice, and draft subcontract creation is blocked. It is enforced on the server as well, so the API refuses until the approval is decided. Impact. The approval gate is now a gate. For anyone whose delegation of authority framework depends on a recommendation being signed before a package is committed, that framework is now enforced by the platform rather than by convention. The amber notice that now sits above Compare Bids while a recommendation is in approval. Award is locked, and the server refuses it too, not just the button. Subcontract Revised Sum where variations changed the scope of an existing line User story As a Contract Administrator, my subcontract showed the same figure for Original Sum and Revised Sum despite two approved variations, so I can now see the original and the movement separately. Before. When an approved variation modifies the scope of an existing schedule line, the platform folds the delta into that line, by design, so no separate variation-flagged row exists. The register's Original Sum was calculated as the sum of non-variation lines, which meant it silently absorbed the approved variation value and read equal to the Revised Sum. The contract looked like nothing had changed on it. After. Original Sum now deducts approved modify-scope impacts, so original, approved movement and revised read as three distinct figures. Provisional lines on variations that are still only submitted are excluded from the Revised Sum, so a revised figure never includes something nobody has approved. Impact. The underlying data was always intact, so no correction is needed on existing contracts. The numbers on screen now describe what happened. Opportunity values on the Preconstruction Dashboard read in real money User story As a Director, my open pipeline card read ten billion million dollars, so I can now look at the dashboard and see a number I recognise. Before. Opportunity values are stored in millions, but nothing enforced that at any write path, so records reached production holding plain dollars. Every consumer that scaled them published a figure a million times too large. Worse, Convert to Tender multiplies by a million on the way through, so the bad figures had already propagated into the Tender Register as tenders worth trillions. After. A single compact currency formatter now scales off the raw dollar amount and carries through millions into billions and trillions, so a suffix is never appended without the division that earns it. The four separate abbreviation helpers that had drifted apart are gone. Impact. Pipeline figures are readable and comparable again. Worth a look at your Tender Register for any converted opportunity that carries an obviously wrong value, since those records were written before the fix. Dashboard cards now agree with the registers behind them User story As a Site Manager, my HSEQ cards counted records from other projects, changed their answer between page loads, and showed zero for records I could see in the register, so I can now read the card and the register as the same number. Before. Three separate faults, all with the same symptom. Dashboard cards still fetched through the older data path while the registers had moved to a newer one, and that older path dropped the project filter whenever a scoped query came back empty, so a card counted every project on the workspace while its register counted one. The same path allowed each card exactly one attempt per page load and never retried, so a card that missed its window rendered zero with no error, and the same project's Quality Defects card could read one, then zero, then one again across three loads with unchanged data. And a record saved with no status set was rendered by the register under the form's default status while the counting logic filed it under no status at all, so it appeared in the table and in no total. After. Every card now reads through the same query path as its register, resolving the same project field, sharing one request where several were firing, and retrying properly. A blank status now falls back to the form's default status, which fixes it for Quality Defects, Inspection and Test Plans, workforce directory records, worker assignments and individual labour hours at once, and stops the next form type added without an explicit setting from repeating it silently. Impact. The dashboard becomes something you can quote in a meeting. This also removes a stack of duplicate requests on a page with a history of hitting rate limits, so it loads faster as well as truthfully. Register columns read the field names your sub-forms actually use User story As an HSEQ Manager, my Site Inductions register showed a dash for Full Name, Company and First Aid Certificate on almost every record, so I can now see the values that were filled in. Before. Where records come from a sub-form submission, the sub-form names its fields differently to the parent register. The register resolved one alias per column, so any column whose sub-form spelling differed rendered as a dash. On one live register, sixteen of seventeen records showed only Role and Status, because those were the two fields both form types happened to name the same way. After. A column can now declare fallback field names and the register resolves them in order, requesting them all in one query. Filtering, sorting and CSV export go through the same resolver, so they follow rather than diverging from what is on screen. The record drawer reads the same way. Impact. Registers fed by DS Site sub-form submissions now display, filter and export their real content. If you have a register showing dashes where you know data exists, this is likely what it was. Drawing previews in the promote review no longer freeze the browser User story As a Document Controller, opening the review step on a batch of drawings gave me a blank white pane for the better part of a minute and a Chrome "Page Unresponsive" warning, so I can now see the preview render. Before. The review extracted metadata step mounted a full document preview for every row the moment it opened, each one rasterising on the main thread, with a text layer processing tens of thousands of glyph runs on a CAD sheet for a text selection the preview never offered. The viewer also kept the canvas hidden until the whole page had rendered, so the wait was a blank box with no indication anything was happening. On a four drawing batch that was roughly fifty seconds and a browser warning. After. The preview shows a rendering state instead of a white pane, and the work that was blocking the main thread has been taken off it. Impact. Promoting a batch of drawings stops looking like a crash. Server-side preview generation is being worked separately, so expect this to get faster again. Have something you want to see in the platform? Tell us through the feedback portal in Deep Space and it goes straight onto the roadmap.

How do you feel about this update?

Tap a face to rate