Deep Space (Platform)Aug 11, 2026

What Got Shipped Today - 11/8/26

Published 11 August 2026 A commercial and precon day. Cash flow that finally tells you which tasks drive the money, tender sets that carry their register identity all the way to the subcontractor, a user directory you can actually clean up, and a supplier discount that no longer evaporates on the way to Xero. Features The Cash Flow programme pill now tells you which tasks drive the money User Story As a commercial manager, I could see that a cost code had a programme window but not what produced it, so I can now click the pill and read the tasks setting those dates. Before. Each cost code on the Cash Flow tab carried a purple pill reading something like "Programme: Jul 2026 to Aug 2026". It confirmed a window existed and said nothing else. Working out which task set the start, which set the end, and whether either had slipped meant leaving the page, opening Construction Programme, and hunting the cost code through dozens of rows. After. The pill now carries its task count, and reads its own provenance where the dates come from sub-codes ("Programme: Sep 2026 to Nov 2026 · 1 task via 1 sub-code"). Clicking it opens a list of every task the platform attributes to that code, each with WBS group, planned and actual dates, status, progress and duration, sorted by start date. The two tasks setting the boundaries are called out in bold. Every row deep links straight through to that task in Construction Programme, which now opens the task detail on arrival rather than just scrolling to it. Clicking the programme pill on a cost code opens the tasks driving its window, with planned and actual dates, status, progress and working days, plus a direct link into the Construction Programme. The header states the window and notes that the bold dates are the ones setting the boundaries. Impact. A distribution built on a delayed task used to look identical to one built on work that is tracking. Now the status sits on the screen next to the number, and checking a suspicious window takes one click instead of a five minute detour. Notes. The list shows a task's scheduled duration, not a recalculated working-day figure. The WBS column shows the group name rather than the full path. Tender Sets now carry the register identity of every document issued User Story As a contract administrator issuing a tender, my subcontractors received a flat list of raw filenames, so I can now issue a set that reads like the document register it came from. Before. A published Tender Set stored a file name and a version and nothing more. The builder's Tender Sets tab, the subcontractor tender portal, and the printable Tender Document Register all rendered the same flat list of filenames. For a drawing package that is close to unusable: no drawing number, no revision, no discipline, and no sense of which part of the set a file belonged to. Proving twelve months later exactly what was issued meant reconstructing it by hand. After. Every entry in a Tender Set now freezes the document's register identity at the moment of issue: number, title, revision, discipline, register status and register date, alongside the folder path it was issued from. All three surfaces display it, grouped by folder structure with register columns, the way Explorer and the Document Register already do. Documents picked from Explorer that were never registered store nulls and are flagged as unregistered, which is the honest answer and a visible reason to work from the register. What the subcontractor now sees in the tender portal. Documents are grouped by set revision and by the folder they were issued from, and each one reads as its register identity (drawing number, revision and title) rather than a raw filename. Anything picked from Explorer that was never registered is labelled Unregistered, so the gap is visible rather than silent. The printable Tender Document Register that goes out with the package. It now carries real register columns, Doc No, Doc Rev, Discipline, Status and the source folder, alongside the set revision and issue date for every document, so the sheet earns the name register. Impact. Frozen, not resolved live. A later re-register, supersede, rename or move cannot rewrite what a published set says it contained. The set becomes the pricing record it was always supposed to be, which is what a subcontractor pricing off it and a contract administrator reconciling a variation both need. Workspace admins can deactivate and reactivate users User Story As a workspace admin, a user added by mistake or a team member who left the company stayed in my directory forever, so I can now deactivate them and keep the directory honest. Before. Once a user existed in a workspace they existed permanently. A wrong email address on an invite had no undo. A site manager who finished the project and moved on kept their access. The directory filled with stale people, they kept appearing in assignment dropdowns, and there was no clean way to revoke access for someone who should no longer have it. After. A workspace admin can deactivate a user from the User Directory. Before you confirm, the platform spells out exactly what is about to happen, in order: the linked DS Site account is deactivated, project access is removed, workspace permissions are set back to none and saved, the Deactivated role is applied, and the user is marked inactive in the directory. External users who work in other workspaces keep their sign-in and simply lose access here. Every site diary, RFI, approval and piece of correspondence they touched stays attributed to them and intact. Reactivation restores the saved role from the same menu.Impact. No hard delete, because a hard delete breaks the audit trail and that is a non-starter under any construction contract. Being able to demonstrate who had access and when is basic project governance, and until today the platform could not answer the question. Choose when an approved cost becomes an actual User Story As a commercial manager, an invoice I approved today did not appear in the Budget Register for thirty days because that was when Xero said it was due, so I can now recognise the cost at approval. Before. Actuals keyed off the Xero payment or due date. An approved, unpaid invoice sat outside the Budget Register until Accounts processed it, and the related purchase order could read as zero or draft in the meantime. The project's cost position lagged the company's cashflow timing by weeks, which is backwards: the project owns the cost the moment it is approved, and when the company pays is a treasury question. After. A new company-level setting, Actuals recognition basis, sits under Company Settings alongside the existing Commercial Date Rules. On approval or push recognises the actual at the approval date, regardless of the Xero due or payment date. On bank reconciliation keeps today's behaviour and stays the default, so nothing changes for anyone who does not opt in.Impact. For builders who run the first basis, the Budget Register becomes a true statement of project cost rather than a lagging indicator of the company's payment run. Nobody approves their own payment schedule User Story As a commercial manager, the approval engine had no segregation of duties at all, so I can now be confident a payment schedule was assessed by someone other than the person who submitted it. Before. Nothing stopped the person who submitted a record from also approving it. On a single-approver step, or where the submitter happened to sit in the approver pool, the control existed on paper and not in the platform. After. The submitter is excluded from every step's effective approver pool, and the step routes to the next eligible approver automatically. Only where a step resolves to nobody after that exclusion can the highest authority override it, and that override demands a written comment which is logged on the record's timeline. The engine never dead-ends and never lets a self-approval pass silently.Impact. Built once in the approval engine rather than bolted onto one record type, because segregation of duties is a property of the engine. Live on payment schedules from today, with other record types staying as they are until we have walked customers through the change. Improvements The programme grid stays on screen while it refreshes User Story As a project manager editing a programme, every single change blanked the chart and threw away my scroll position, so I can now add and edit tasks without losing my place. Before. Adding a task, saving from the detail sidebar, editing inline or bulk editing all triggered a full refetch, and the Gantt replaced itself with a spinner while that ran. Scroll position, group expansion and selection were destroyed and rebuilt. On a large programme it felt like a page reload after every keystroke of work. After. The chart keeps rendering the data it already has while the refresh runs in the background, with a small non-blocking indicator to say it is working. When the new data lands it is diffed into place, so scroll, expansion and selection survive. The full spinner now appears only on the genuine first load of a project, and on a project switch, so you never see the previous project's data. Impact. Editing a programme starts to feel like editing a spreadsheet rather than submitting a form. Moving a tender between stages is now an obvious control User Story As an estimator, the stage pills in the tender drawer looked like status badges, so I can now see plainly that they are the way to move the tender forward. Before. The pills were clickable. Nothing about them said so. They rendered as status chips, and the most common question in a walkthrough was how a tender actually moves between stages. After. The bar carries a leading "Manually switch stage:" caption, mirroring the Outcome label opposite it. The steps read as a timeline with chevron connectors and state markers for done, current and next. The next reachable step gets a dashed outline and a hover highlight so it visibly invites the click, and every step carries a tooltip explaining what it does or why it is not available yet.Impact. No behaviour changed. The same permissions and the same gating apply. The affordance simply stopped being invisible. Company-level pages no longer show a dead project selector User Story As a user on the Opportunity Tracker or the WIP report, a greyed-out "My Company" pill took up the top bar for no reason, so I can now see a top bar that only shows controls that do something. Before. On workspace-level pages, Opportunity Tracker, Tender Register, Home, Client Directory, admin pages and the WIP report, the project selector rendered as a disabled pill roughly 400 pixels wide. Four hundred pixels of top bar that could not be clicked and did not mean anything. After. On those pages the selector is not rendered at all. It reappears the moment you land on a page that is actually scoped to a project.Impact. Small, and you will notice it every day. Fixes Cash Flow now reads the programme tasks tagged to your sub-codes User Story As a commercial manager, five of my eleven cost codes reported no programme link and spread their money flat, even though the programme had real dates for all of them, so I can now see the schedule drive the cash flow. Before. Cash Flow resolved a cost code's programme window from tasks tagged with exactly that code. Construction Programme tags tasks with granular sub-codes, while the Budget Register and Cash Flow work in parent codes. On one test project that meant twelve scheduled tasks were ignored outright. Structural steel carried a 295,000 forecast spread evenly across August, September and October when the programme had it supplied and erected between late June and the end of July: the single largest cost code in the job, two months out, on the number a commercial manager uses to plan working capital. Worse, it degraded as builders used the platform properly. The more carefully a programme was tagged, the more of the cash flow fell back to flat spread. After. A cost code's window now resolves from that code and every descendant beneath it in the cost code tree, taking the earliest start and the latest end across all of them. The same rule drives the distribution itself, not just the displayed window, so the money follows the schedule. Where a window comes only from children the label says so. A parent cost code picking up its dates from a task tagged to a child code. The label reads "1 task via 1 sub-code" so it is clear the window came from underneath rather than from a direct tag, and the budget and forecast rows now fall in the months the programme actually says the work happens. The cost code below it, with no tasks anywhere in its subtree, still reads honestly as no programme link and flat spread. Impact. Timing changed, values did not. The grand total still reconciles to estimate at completion. What changed is that the timing is now true. Supplier invoice discounts survive the push to Xero User Story As an accounts payable clerk, a supplier invoice with a trade discount landed in Xero hundreds of dollars higher than the invoice, so I can now trust that what I approved is what I pay. Before. Deep Space sent both the quantity and the unit rate on every line, and Xero's own arithmetic recalculated the line total from them. Any line whose total was not simply quantity multiplied by rate, so any trade discount, rebate or lump sum against a nominal quantity, arrived overstated because the discount never reached Xero. Xero also rounds unit rates to two decimals by default, so a three or four decimal supplier rate drifted by cents on top. One real invoice landed 310 dollars high and was caught only when the accounts team went to pay the bill. After. The push sends the stored line total directly and lets Xero derive the missing factor, and it asks Xero for four decimal precision on unit amounts. Both halves ship together, because the line total change on its own only moves the error rather than removing it. Per-line tax is now sent from the supplier's printed figure rather than being recomputed. Impact. An overstated bill inflates the actual against the cost code and the variance against the purchase order, silently, until someone reconciles by hand. Every Xero-connected workspace was exposed, not just the one that found it. The Cubit import keeps negative values User Story As an estimator importing from Cubit, negative lines came in positive and inflated my import total, so I can now import a file and trust the number that comes out. Before. The import ignored the sign on negative values and brought them in as positives, which inflated the imported total, in one case well beyond the true sell value. Nested section markup was lost in the same pass. After. Negative values and nested section markup are both preserved through the import. Impact. An estimate that imports wrong is worse than one that fails to import, because it looks finished. Project Settings no longer emails you an invitation to yourself User Story As a user opening Project Settings from a tender, I received a "You've been invited to a Deep Space project" email every single time I clicked, so I can now open the page without filling my own inbox. Before. Clicking Project Settings from an opportunity or tender drawer re-ran a full project invite unconditionally on every click, and the backend emailed a welcome notice each time. Two clicks a minute apart produced two emails. Every customer using those buttons was getting them, and a multi-second "Granting access" wait sat on top for people who already had access. After. The platform checks membership first and skips the grant entirely when you are already a member, which also removes the wait. Where a genuine self-grant is needed it is marked as one and sends no email. Adding a new person to a project from the Directory or Team flows still emails them exactly as before, and the resend invite action is untouched. Impact. No permission or data behaviour changed anywhere. Only the notification did, and only in the cases where it should never have fired. 5. Assigning a project role now grants the access to go with it User Story As a project manager setting up a job, naming someone to a role did not actually give them access to the project, so I can now assign the role and know they can get in. Before. Internal Project Roles and project access were two separate jobs. You would assign a contract administrator on the Team page, they would go looking for the job, and it would not be there. Nothing on the assignment screen told you access was missing, so the gap only surfaced when the person said they could not see anything. Fixing it meant a second trip through a different screen, and the picker itself was a plain list you had to scroll. After. The role picker searches by name or email, sorts, and marks every person who does not yet have access to this project with "No project access yet, will be granted" before you commit. Assigning them applies the role and grants the project access in the same action. What the screen says is going to happen is what happens.Impact. The Team page is where a job gets staffed, so it is the right place for access to be decided. Removing the silent gap between the two takes out one of the most common reasons a new starter's first day on a project stalls. Something here you would change, or something missing you need? Tell us through the feedback portal in the Deep Space web app. Every entry above started as someone telling us it was wrong.

How do you feel about this update?

Tap a face to rate