Most of 14.5.0 is about the distance between a thing being built and a person being able to use it. A drawing was being measured correctly and drawn wrongly. A contract could be deleted by the server and by nothing on the screen. A whole module was installed, routed and permissioned with no menu entry pointing at it. None of those look like defects from the inside, which is why they lasted.
What is new in version 14.5.0
- A drawing matches the file it came from, at the sheet it belongs to and at the text height it was authored at.
- Three finished features became reachable: deleting a draft contract, the credentials register, and the pipelines page.
- Contract securities are held against the contract, each with its own type, status, amount and dates.
- Three statutory modules ship for e-invoicing clearance, tax withholding and payment deadlines, with no screens yet.
- Around 320 interface strings translated into each of the 29 languages.
A drawing that matches its file
The drawing arrived looking nothing like the source, and reloading showed it briefly right before it changed. That is two defects rather than one. The scene being framed was every sheet at once, because the sheet a reader has not picked yet was settled by an effect that runs after the first frame is already on screen. Model space and paper space share neither origin nor scale, so a box drawn around both frames neither: an 18 m building and a 400 mm title block fitted together collapse the title block to a speck drawn over the plan. The sheet on screen is derived now rather than corrected afterwards, so the first painted frame and the frame after somebody touches the sheet strip are the same frame.
The second defect is that text was clamped into a readable band, and it shipped twice: the clamp was removed during 14.4.0 and put back five hours later, and both changes are inside that tag, so that release described the fix and shipped without it. Nothing in the test suite could tell, because every drawing it covered was small enough that the band never bound. A label now reaches the screen at its authored height times the zoom, so a drawing carrying an 800 to 1 range of text sizes arrives with that range rather than flattened to 9 to 1. Text size is a reader preference as well now, applied to the authored height rather than to a clamped result, which could only ever move every label together.
Three features that nothing led to
A contract still in draft can be deleted from the screen it lives on. The rule permitting it has been in the service layer for as long as the feature has existed, refusing anything that has left draft and saying why, and the client function that calls the endpoint was exported and typed. Nothing called it. From outside the product, a working endpoint with no button and a deliberate refusal look exactly the same, and it was reported as a refusal. The control sits beside Sign in the contract drawer, appears only while the contract is in draft, and asks for confirmation by naming what the deletion takes with it rather than asking whether you are sure.
The credentials register can be opened from inside the product. The module was installed, routed on the server, permissioned and complete, and no screen led to it, so the only way in was to know the URL. It has a route now, a project scoped one beside it, and an entry under People and Assets next to the resources whose qualifications it tracks. It answers what the crew is licensed to do and what the project demands of them. The pipelines page is the third: the sidebar has linked to it since that module landed and the page, canvas, store and templates were all complete, but the route itself was never declared, so the menu entry went nowhere.
The securities that make a contract enforceable
Bonds, bank guarantees, retention and parent company guarantees were kept alongside the system that knows the contract dates rather than in it, which is how an expiry passes unnoticed. Each security now carries its own type, status, amount and dates rather than one field per contract, because a contract commonly holds several at once and they expire on different days. They are read back on the contract itself, so the instrument and the obligation it secures are on one screen.
Three statutory modules, and what they do not have yet
Invoices can be filed in countries where an invoice is not valid until the government says so. Three regimes that look alike from the outside are kept apart: under clearance the authority's identifier is what makes the document legally valid, under reporting the invoice was already valid and the filing is either on time or late, and on a network there is no authority at all. That is why there are nine statuses rather than eight. A routed network document is delivered, never cleared, because calling it cleared would tell a reader that a tax authority answered for it when none exists. No government adapter ships; the reference one is offline, deterministic, and refuses a profile that is not marked sandbox.
Statutory withholding is deducted the way the governing statute defines it rather than the way one country's rule does. The taxable base is where a plausible shortcut goes wrong: gross minus materials minus tax reads like the rule because it is the rule in the United Kingdom, while under section 48 EStG the deduction is taken from the Gegenleistung, which includes the tax and carves nothing out for materials. A flat rule would under-withhold on every German payment. Five schemes and four reverse charge rules ship as data, and none installs itself: a fresh deployment has an empty regime table until somebody chooses the rates, because a stale rate that arrived on its own is worse than an empty table somebody has to fill.
A payment deadline is treated the way the statute treats it. In the United Kingdom, Ireland, Australia, New Zealand, Singapore and Malaysia the dates around a payment application are fixed by law rather than agreed between the parties, and missing one has a defined legal consequence: silence past the payment notice deadline makes the sum applied for the notified sum, and the payer owes it. A register that stores a due date as a plain field cannot express that, because the interesting value is not the date, it is what happens when nobody answers by it. Eight regimes ship as data, so a jurisdiction can be corrected without a schema change.
All three answer over the API and have no screens yet. A module that is installed, routed and permissioned with nothing in the product leading to it is the exact shape of the credentials gap described above, and naming it is the difference between work in progress and a feature that quietly is not one. Their screens are the next wave.
A catalogue that stops charging a click for nothing
Every top level category in the shipped cost catalogue had exactly one child, an unspecified sentinel holding the entire parent count, because that data carries no department level at all. Opening it changed nothing on screen and cost a click, and there are 129 such nodes standing in front of 14,967 rows. The tree lifts the grandchildren one level up when the sentinel is an only child, and the label, which read "(Uncategorized)" of an item classified at three of its four depths, now reads "(Not specified)" in all 29 languages. Drilling into a category whose next level is empty also returns the rows it counted, where it used to say no cost items were found while the node itself displayed a count.
Also in this release
Clicking an element in the BIM viewer to see the defects and inspections attached to it works on PostgreSQL; it raised a server error on every deployment since the filter was added. Approving a timesheet no longer fails because of the daywork sheet written afterwards, which was meant to be best effort and on PostgreSQL was not, taking the accepted hours down with it. A firm can write its own guided cases rather than only reading the 144 shipped ones, starting from a blank case or from a copy of any shipped one, and the pins that curate the hub moved from one browser's local storage onto the account. The rate limit in front of the AI rule builder now stands in front of the endpoint the product actually calls rather than a route nothing called. The sidebar reads in the order the work happens. Opening a link from the desktop menu no longer puts a black command window on screen ahead of the browser.
What is not fixed here
The same report that brought the drawing defects also says navigation in that viewer is slow, and this release does not address it. The viewer stops repainting while nothing is happening, which removes idle cost and says nothing about how it behaves under a hand on the mouse, so it is not offered as a fix for that. The rendering half was verified against the exact build the reporter tested rather than against our own description of it. The performance half stays open.
A separate report of the macOS build failing to start on 14.4.0 is not settled either, and this release does not claim it is. The build was taken apart member by member rather than reasoned about from the error text: all 402 embedded binaries are signed ad-hoc with no team identity at all, in that build and in two later ones, so nothing inside the archive can disagree with the operating system about an identity none of them carries. Whatever supplies one on the affected machine comes from outside the file. Every macOS build now reads that property and fails if a member ever does arrive carrying a vendor identity, which is a tripwire for the day a dependency changes rather than a cure for the report that prompted it.
By the numbers
320
interface strings translated into each of the 29 languages.
3
finished features that had no way in from the product, now reachable.
129
empty category levels lifted out of the way, standing in front of 14,967 rows.
8
security of payment regimes shipped as data, correctable without a schema change.
Install or upgrade
pip install --upgrade openconstructionerp
Desktop installers for Windows, macOS and Linux are on
openconstructionerp.com/download.
If you run an external PostgreSQL through DATABASE_URL,
nothing about that connection changes. Questions or trouble upgrading,
write to
info@datadrivenconstruction.io.
Try v14.5.0 today.
Live demo in your browser, or self-host in five minutes. AGPL-3.0, no signup required.