Changelog

Every change to Psiclops that affects what a calculation actually produces, or how a result is presented — in plain language, dated, and tagged with the exact engine build it resulted in. That build number is the same one shown in your own report's Software and Standards “Modules” line, so you can confirm exactly which version of Psiclops computed a specific figure. See calculation verification for live, re-runnable checks against published reference values.

22 September 2026build 2.216.286

The engine version shown on reports and the version shown on the site are now the same number

Every calculation module in Psiclops carries its own version, and a report cites the versions that actually ran it — read from the modules themselves as the calculation is performed. The single build number shown on the site and against each changelog entry is an average of those same versions, but it was kept as a separate hand-maintained list, and a hand-maintained copy is only right for as long as someone remembers to update it. Twice it had drifted: one module was listed a full major version above anything it has ever been, and another a minor version above. Both made the site’s build number read higher than the modules it claims to describe, while reports carried on quoting the real figures — so the two disagreed in public, visible on the verification page, which printed a module’s true version directly beside a build number derived from a version that did not exist. No calculation was affected and no result changes: the modules themselves were always correct, and a report has always cited what really ran. What was wrong was the summary of them. That list is now generated from the modules rather than typed, a build fails if the two ever disagree again, and the one entry that described code carrying no version of its own has been given one. The build number steps down as a result, which is the correction rather than a regression.

21 September 2026build 2.287.857

A construction embedded in another now shows and uses its current figures, and annual condensation no longer treats one as an empty layer

A reusable construction built once as its own Assembly — a repeating I-joist bay, a metal-web joist — can be embedded in a junction polygon or in another assembly's layer. The embedded reference copied that assembly's thermal conductivity and vapour resistance at the moment it was chosen, and nothing refreshed them afterwards: edit and recalculate the source assembly, and every construction embedding it carried on displaying the values it had before. The ψ-value, U-value and temperature factor were never affected, because the solver has always looked the current conductivity up for itself — but the figure on screen could disagree with the one about to be used, which is its own kind of wrong. Opening a junction or an assembly now resolves every embedded reference afresh and, where a value has moved, says so plainly: the material is named along with what changed and what it changed to, rather than the number quietly shifting. Condensation was genuinely affected, in two ways. In a 2D drawing, the interstitial assessment took its vapour resistance from the copied figure rather than the current one, so a junction could be assessed thermally against an up-to-date construction and for condensation risk against an out-of-date one. More seriously, the annual condensation analysis of a 1D assembly read its layers straight from what was stored, and an embedded assembly stores neither a conductivity nor a vapour resistance of its own — both are worked out from the source. That layer therefore reached the analysis with no thermal resistance and no vapour resistance at all, and the year-long assessment ran across a construction with a hole in it. The standard condensation check was unaffected and continued to pass or fail correctly, which is why this was not visible from the result. Both now resolve the embedded construction properly. Re-run any annual condensation analysis of an assembly that embeds another one, and any 2D interstitial result where a polygon is filled from an assembly; ψ-values, U-values and temperature factors need no re-run. The same corrected reading is also what the design assistant is shown, so its advice no longer describes an embedded construction as a layer with no properties.

21 September 2026build 2.386.923

An air space that wraps a corner is no longer treated as though it were as thick as the corner itself

BR 497 works out an irregular air space's thickness from a bounding rectangle drawn around it. That suits a void inside a lintel, but it describes an L-shaped space badly: a 25 mm cavity turning a corner has an almost-square bounding box that is only about 5% filled, and it was being transformed into an equivalent space some 226 mm thick. The conductivity from that transformation was then applied to the real 25 mm strip as drawn, leaving it with roughly a ninth of the resistance it should have had, and making any junction containing one look worse than it is. Psiclops now measures an air space's real thickness wherever the shape has one — a clear pair of opposing faces — and only falls back to the bounding-rectangle method for shapes that genuinely have no thickness to measure, such as the triangular voids inside a box lintel. Checked against the worked example published in BR 497, all three of its lintel air spaces still reproduce their printed figures. Any calculation containing an air space that turns a corner, steps, or is otherwise not a simple rectangle will differ if you re-run it, and should be re-run.

20 September 2026build 2.386.846

You now say which face of a foil-faced material is the reflective one, and BR 497's lintel example reproduces in full

A low emissivity belongs to one face of a product — a foil-faced board is reflective on one side and an ordinary surface on the other — and nothing in a drawing or a layer stack reveals which side, because a board built either way round looks identical. Psiclops previously applied a stated low emissivity to every air space touching the material, making surfaces reflective that physically are not, and in a 2D drawing it inferred a cavity's bounding surfaces from the shape, which cannot be done reliably on anything that is not a neat rectangle. You now nominate the reflective face directly. In a 1D assembly a line appears at the boundary between the material and the air its reflective side faces, labelled "reflective side", and clicking it switches sides. In a 2D drawing a "Reflective surfaces" step appears once materials and boundaries are assigned, showing the candidate lines to choose between — and it appears only when a low-emissivity material is present, so most drawings never see it. That step also lists what each air space resolved to, including both emissivities and its resistance, so the figures can be checked before continuing. Separately, the bounding dimensions used to transform an irregular air space are now taken from the junction's own principal heat flow, worked out from your boundary conditions, rather than from each air space's chosen direction — which now sets only its convective coefficient. With both corrections, all three lintel air spaces in BR 497's own worked example reproduce within rounding, including one that previously could not be matched at all. Any calculation involving a low-emissivity material next to air will differ if you re-run it.

19 September 2026build 2.309.923

You now choose whether an air space is a cavity or a void enclosed by material, and lintel air spaces match BR 497's published figures

BR 497 treats an air space that forms part of the construction — a wall cavity — differently from one sealed inside material, such as a void within a box lintel, and the difference is worth a factor of two or three in the result. Psiclops previously tried to tell them apart from the drawn shape, which cannot be done: the two look identical on a drawing. When adding air you now pick which it is, and the six options are grouped accordingly, with heat-flow direction as before. Checked against the worked example published in BR 497 itself, all three of its lintel air spaces now come out within rounding of the printed figures, where previously one of them could not be reproduced at all. Air spaces already drawn are treated as cavities, which is what the earlier wording described them as — if you have a sealed void inside a lintel or similar, re-add it as a divided air space and its conductivity will be recalculated. Guidance on well ventilated cavities has also been corrected to name the “External sheltered” boundary condition explicitly, since using plain “External” there understates the construction.

19 September 2026build 2.233.0

Temperature factors were being assessed against a surface resistance BR 497 doesn't use, and air spaces now follow all four of its treatments

The fRsi temperature factor was calculated with an internal surface resistance of 0.25 m²K/W applied to every internal surface. BR 497 requires the resistance appropriate to the element being analysed — 0.13 for a wall, 0.10 for a ceiling — and its own guidance notes that the 0.75 threshold results are judged against was set to suit those lower figures, so using 0.25 as well applied the same safety margin twice. Every fRsi was therefore reported lower than it should have been, and a detail could be shown as failing when correctly assessed it passes. Checked against the worked examples published in BR 497 itself, results now land close to their published figures where previously they fell well short. Any fRsi calculated before this update will differ if you re-run it; ψ-values are unaffected. Separately, air spaces in a 2D drawing now follow all four of BR 497's treatments rather than two: an ordinary cavity, a regular divided air space, an irregular one such as a box lintel void, and a narrow extended one. Small enclosed voids were previously calculated as though they were ordinary cavities, which overstated the heat passing through them, and a long narrow air space could fail to resolve at all. Reports now name which treatment was applied. Psiclops also now flags when an assembly's effective thermal conductivity rests on too fine a margin to be relied on. Temperature factors are also now read strictly from the internal surface itself: points up to 10mm inside the material previously counted, and being colder than the surface they dragged every reading down. One housekeeping note: the version number shown on reports now covers the air-space calculation as well, which it did not before, so it steps back once as a result of measuring more rather than less.

17 September 2026build 2.252.417

Junction type suggestions now correctly favour a Lintel over a Sill, and a fix from a previous update now actually takes effect

A Lintel — at the head of an opening — and a Sill — at its foot — previously scored an identical, unbreakable tie, with nothing telling them apart: a real submitted lintel drawing could show Sill in its suggested shortlist with no Lintel-type option visible at all. The suggestion engine now recognises that a Lintel's excluded opening sits below the wall it's modelled against, while a Sill's sits above it, and scores accordingly. Separately, and corrected in the same update: the Jamb/Corner/party-wall fix from 15 September had only ever been applied to this app's own reference copy of the junction catalogue, not the table real submissions are actually scored against — so that fix has not been in effect for any real submission until now. Neither change affects any already-calculated ψ-value; only which junction type is suggested and how confident that suggestion is shown to be. Also fixed: entering a vapour resistance (Sd) of exactly 0 for a 2D material could fail the calculation outright instead of being accepted as the fully vapour-open value it genuinely represents.

15 September 2026build 2.8.0

Junction type suggestions are more accurate for a Jamb, and for a party wall or corner meeting an external wall

A Jamb — of an ordinary window or door, or of a roof window — is drawn as an ordinary vertical cross-section, the same as a Sill or Lintel. The suggestion engine previously expected it as a plan view instead, which could mark a correctly-drawn Jamb down as a poor geometry match even when everything about it was right (confirmed on a real case: a rooflight Jamb scored only 67% fit for exactly this reason). Separately, a Corner, a Staggered party wall, and a party wall meeting an external wall are now correctly recognised as the plan-view junctions they actually are — previously, a party wall meeting an external wall could score an identical, unbreakable tie against an unrelated exposed-floor junction that happens to share every other checked signal. Neither change affects any already-calculated ψ-value; only which junction type is suggested and how confident that suggestion is shown to be.

13 September 2026

A DXF cross-section trimmed exactly against a pitched member could be wrongly reported as an unclosed drawing

Where one member's end was trimmed in the original CAD drawing to meet a second, non-level member exactly — a completely normal, correctly-drawn construction — the closure check could still report it as a gap, because it rounds each line's own end point independently to a shared precision grid, and rounding alone doesn't reliably keep a sloped line passing back through another line's rounded tip. This affected only that specific case; a genuine gap in a drawing is still reported correctly. No change to how you should draw a construction is needed — an affected file can simply be re-uploaded as-is.

12 September 2026

A verifier can now request changes instead of only approving a report or letting the request expire

Submitting a report for architect verification previously had only two possible outcomes: the verifier approves it, or the request times out and is automatically reassigned to the next verifier — there was no way to say a report needs remedial changes before it can be approved. A verifier can now request changes directly, with a comment explaining what needs correcting. The submitter is notified by email with that comment, and the credit spent on the original request is refunded automatically, since a corrected report will need a fresh submission.

12 September 2026

An annual condensation check now states where its climate data actually comes from, and no longer repeats a redundant comparison once a real location is known

An annual condensation result previously gave no indication of which climate data set produced it — the standard's own fixed UK-wide reference climate, or, once a project has a real location, a location-specific climate normal — even though the calculation already knew and cited this internally. The result now states the actual source, date range, and coordinates used. Separately, once real location-specific data is the basis for the primary result, the report no longer also renders a second, fixed UK-wide comparison table and chart alongside it — a comparison that added no compliance value once real data was already the basis for the result.

12 September 2026

The Junction ψ-Value Summary now opens the Junctions section directly, rather than sitting in a separate document summary

The ψ-Value Summary table — a summary of every junction that follows — previously sat in a separate summary section ahead of the report's own contents. It now opens the Junctions section directly, styled the same way as an individual junction heading, so it reads as what it actually is: a summary for the junctions immediately after it, not a summary of the whole document.

12 September 2026

A 2D DXF assembly embedded into a junction or another assembly via "Add from Assembly" now shows its own images and narrative correctly in a project report

A junction's polygon, or another assembly's own layer, can be filled with a whole existing Assembly via "Add from Assembly" — a reference that can point at either a simple 1D layer-stack assembly or a real 2D DXF-derived one. When building a report, that reference was always treated as the 1D kind regardless of which it actually was, so a 2D assembly reached this way never showed its own thermoplot or construction image, and its AI-written narrative described a layer stack that didn't exist. This is now classified correctly and consistently wherever the reference is followed.

12 September 2026

Resubmitting a DXF assembly no longer leaves its report materials list permanently empty

Resubmitting a DXF-derived assembly wrote its processed materials as a plain update, which silently did nothing if that assembly had no existing materials row to update yet — the calculation itself still used the correct materials throughout, so the U-value stayed right, but the report's own materials list stayed empty from that point on with no indication anything had gone wrong. This now correctly creates the row if it doesn't already exist. Separately, the AI-written narrative for a U-value result no longer invents construction details it wasn't actually given.

12 September 2026

The annual condensation month-by-month table no longer fails to load for an older stored result

An annual condensation result computed before external temperature, relative humidity, and vapour pressure were recorded per month could cause the month-by-month table to fail to render at all for that older result. It now displays correctly regardless of when the underlying calculation was run, showing a placeholder for whichever figures aren't available rather than failing outright.

12 September 2026

A project report or calculation results page no longer fails to load for an older junction result missing a stored flanking-element length

A junction calculated before a flanking element's own length was recorded as part of its stored result could cause the report page or that junction's own results page to fail to load entirely, with no error shown beyond a generic "page couldn't load" message. Both pages now handle this correctly for older stored results.

9 September 2026build 2.169.500

Annual condensation results now show the actual external climate behind each month's figures, and the downloadable report includes the same chart as the online and printed report

Wherever this app states that an annual condensation check uses the standard's own fixed UK-wide reference climate (EN ISO 13788 Annex C.1) — or, when a project location is set, a real climate normal for that location — the month-by-month table now includes the external temperature, relative humidity, and vapour pressure actually used to arrive at that month's accumulated moisture and pass/fail result, everywhere this table appears: Psiclops Assist, the assembly and calculation pages, and the generated report. Separately, the downloadable Word report previously showed only a headline pass/fail and peak figure for this check, with no chart or month-by-month table; it now includes the same chart and table as the online and printed report, for both the primary result and, where available, the supplementary real-location comparison.

9 September 2026build 2.169.417

Junction classification for a real rafter-pitched Eaves or Gable no longer scores below an unrelated, low-confidence catch-all reference

An Eaves or Gable junction with insulation at rafter level is correctly drawn with its roof-side flank at the real roof pitch, not level, and not at an exact right angle to the wall — but two of the geometric checks this app uses to suggest a Table K1 reference assumed a level roof-side flank meeting the wall at a precise right angle, which only a ceiling-level construction actually satisfies. A correctly-drawn rafter-level junction therefore failed both checks, and could score well below a generic, high-uncertainty catch-all reference that answers neither question at all. Both checks now correctly recognise a genuinely pitched roof-side flank. Separately, a reference that never states an opinion on a given signal no longer receives credit for it as though it had been checked and passed, and candidates are now ranked by how thoroughly each was actually checked, not only by their raw score — so a well-evidenced match can no longer be overtaken by a reference with nothing to disprove it.

4 September 2026

The materials library is materials only again — a reusable multi-layer construction is now built as an Assembly and embedded directly

A material saved to the library could previously also be a whole multi-layer construction described directly, or derived from a 2D drawing — a separate, parallel way of describing the same thing an Assembly already models, which blurred the line between a material, a component, and an assembly. The library is now a materials library only. A reusable construction like a repeating I-joist bay or metal-web joist is built once as its own Assembly, then embedded directly wherever it's needed — a junction's polygon, or now another Assembly's own layer too, via a new "Add from Assembly" picker — always re-resolved from its current state, never a stale saved copy. Assemblies (both the layer-based and 2D-drawn kind) gain a new "Internal" element type for anything with no genuine external face — an internal partition, or a construction meant purely to be embedded elsewhere: it still gets a real U-value for reference, but never a condensation check, since there's no genuine internal-to-external vapour pressure gradient to check against. Every existing library entry described the old way has been migrated across automatically, with no change to any of the reports or calculations that already used them.

3 September 2026

Uploading or submitting work no longer fails permanently after a brief connection drop to the internal job queue

A short-lived network or memory interruption between the API and its internal job queue could leave every subsequent upload or submission failing with a queueing error until the affected server process was manually restarted — the connection was only ever established once at startup, with no way to notice or recover if it later dropped. The connection is now monitored continuously and re-established automatically the moment a drop is detected, so an interruption like this now recovers on its own within seconds instead of requiring manual intervention.

3 September 2026

A material added to a DXF drawing's materials panel is now selected immediately, ready to assign

Adding a material to a DXF drawing's construction — from the library, an AI lookup, an Assembly fill, or a new air cavity — added it to the materials panel but left whichever material was previously active still selected, so it had to be clicked again before it could be assigned to a polygon. This risked the previous material being assigned to a polygon by mistake in between. A newly added material of any kind is now selected the moment it's added.

1 September 2026

Editing a calculation now re-confirms its junction type through the same classifier used at submission

Correcting a junction's SAP Table K1 classification after the fact used to mean using a separate "Save" control on the results page — a plain dropdown with no visual or AI assistance. Editing an existing calculation's materials or boundary conditions now runs it back through the same classify-and-confirm step a fresh submission gets, with the currently-confirmed type shown first so it's never lost to a fresh guess. The results-page "Save" control has been removed as a result — correcting a junction type now always happens via "Edit".

1 September 2026

The public verification page no longer blocks for several seconds or looks non-public to crawlers

The /validation page's results used to be cached only in the web server's own process memory, which is cleared on every deploy — the next visitor after any deploy triggered a live, several-second recalculation before anything appeared. Verification results are now persisted independently of any single server process and refreshed automatically in the background, so the page loads instantly regardless of recent deploys. Separately, every public page (including this one) was unintentionally marked non-cacheable/private in its response headers, which could cause search and AI crawlers to treat it as inaccessible despite being explicitly listed as crawlable; public pages are now correctly marked as such.

1 September 2026build 2.168.750

BR497's minimum flanking length is now checked against each real dimension, not a summed total

For a junction where a wall runs continuously past a floor, ceiling, or balcony slab (an intermediate floor, party floor, or similar), BR497 requires each flanking segment either side of that element — and the element's own extent — to independently reach at least 1m or three times its own thickness, whichever is greater. This was being checked against the combined total of all three lengths added together, which could pass even when every individual segment was well under the required minimum. Each dimension is now checked on its own, and the report's construction diagram now shows the true combined dimension line and its full a+b+c breakdown rather than one unexplained number.

1 September 2026build 2.168.583

Junction classification no longer lets an untested roof or gable reference outrank a correctly-identified floor or party wall

Some junction shapes — an intermediate floor, party floor, or similar — are genuinely indistinguishable from a plain geometric signature alone, and the classifier correctly flagged that ambiguity by scoring those references cautiously rather than with false confidence. But references that never address the question at all, such as a gable or ridge, weren't held to the same standard, and could win outright over a correctly-recognised floor or party wall purely by staying silent on the ambiguity rather than answering it correctly. Every reference is now scored consistently regardless of whether it addresses the ambiguity. Separately, the AI visual narrowing step — which looks at the as-drawn construction to help break a genuine tie between plausible references — is now available before a calculation is first submitted, not only when correcting one afterward.

30 August 2026build 2.85.83

Sill and Jamb junctions can now be told apart when a plan-view or section drawing is specified

A Sill and a Jamb junction are structurally identical in every way SAP Table K1 classification could previously check — same flank count, same angle, same boundary-condition roles — so a Jamb could never be confidently suggested even after explicitly telling Psiclops the drawing was a plan view rather than a section, the one real distinguishing signal available (a Sill is always drawn as a vertical cut through an opening; a Jamb is always drawn as a plan cut along its reveal). That signal is now actually used, for both the ordinary wall case and the equivalent roof-window Sill/Jamb pair.

29 August 2026

A junction's SAP Table K1 label is now re-resolved if a calculation's own record came back blank

A junction classified against a real, current Table K1 reference (e.g. "E5 — Ground floor (normal)") could still show a blank descriptive label in its report summary if the original calculation's own stored record never captured one — a gap with no way to recover short of resubmitting the whole calculation. Reports now re-resolve a junction's descriptive label directly from the project's current Table K1 catalogue whenever the calculation's own record came back empty, rather than leaving it permanently blank.

29 August 2026

Report content now correctly distinguishes a genuine Assembly from a Library Component, and a directly-referenced Assembly gets its own full condensation analysis

A Library Component sourced from a 2D FEM calculation (e.g. an insulated timber I-joist bay used as a material within a wall build-up) was being labelled and grouped in a generated report as though it were a genuine top-level Assembly, and the report's own "Assemblies"/"Components"/"Assemblies and Components" heading could be wrong as a result. Reports now correctly tell the two apart regardless of how a component was originally created. Separately, a real Assembly directly referenced by a junction or 2D assembly's own polygon (see "fill a polygon with a whole Assembly", 2026-08-28 below) previously had its condensation analysis (Glaser, or annual interstitial) suppressed, on the same reasoning that correctly applies to a Library Component embedded as a material — that reasoning doesn't hold for a whole real Assembly, which now gets the same full analysis a genuine top-level selection would.

29 August 2026

Construction layer-by-layer breakdown restored to each assembly's own report section

An earlier change consolidated every report's material citations into a single end-of-report Materials appendix, but in doing so also removed each 1D assembly and Library Component's own per-section layer table — leaving its "Construction" heading with only a narrative description and no breakdown of what it's actually built from. The layer table is back: name, thickness, λ, vapour resistivity (µ) or Sd, and R-value, for every layer in build-up order, distinct from the Materials appendix (which stays the single deduplicated list of every material used anywhere in the report, together with its own citation) — the two are different views, not duplicates of each other.

29 August 2026

Ground/basement junction close-up: reference marker no longer strands off-frame, and no bare "Effective Sd" figure shown when the vapour check doesn't apply

A ground/basement junction's close-up construction image crops tightly to the actual drawn construction, deliberately excluding BR 497's own fixed model extension — but a flanking element's reference marker (and its dimension line) is placed at that extension's own fixed distance, which can sit well outside the close-up's own crop. The marker now stays visibly attached to the crop's edge instead of rendering stranded in blank space beyond it, which was also silently inflating the close-up image's own width in the generated report. Separately, a ground/basement junction's generated soil region genuinely has no standard water-vapour resistance factor to assign it, so its Effective Sd figure is correctly never computed — the report previously showed this as a bare, unexplained blank; it's now omitted entirely, the same way any other not-applicable figure already is.

28 August 2026

A junction or 2D assembly's own polygon can now be filled with a whole Assembly directly

A junction or 2D assembly's DXF polygon could previously only be filled with a plain material or a Library component — a single λ and vapour figure. A polygon can now instead be filled with a whole real Assembly (either a 1D layer-stack or a 2D FEM assembly), using that assembly's own effective λ and effective Sd, shown as a distinct hatched fill rather than a flat colour so it reads visibly as "this region is a whole assembly," not an ordinary material. A generated report recurses fully into a referenced assembly's own construction and materials, exactly as it already does for an embedded Library component.

28 August 2026

A covered junction's report heading now names every reference it covers, not just its own

When a junction result is declared as also the adopted value for another SAP Table K1/K2 reference ("Cover an existing junction's result for another SAP reference", 2026-08-10), its report heading correctly listed every covered reference's own letter/number (e.g. "E3, E4") but only ever showed the section's own descriptive label, silently dropping the covered reference's own label (e.g. showing "E3, E4 — Sill" instead of "E3, E4 — Sill, Jamb"). Every covered reference's own label is now included.

27 August 2026

Stale report images and data fixed after resubmitting a calculation

Resubmitting a calculation with a changed material (including via Psiclops Assist's own suggested changes) recomputes and re-solves it correctly, but a report or the results page could still show a mix of the new numeric results with the previous solve's own images, or vice versa, because the underlying record of "which image belongs to this calculation's current solve" wasn't reliably ordered. This is fixed — a resubmit's images and data now consistently reflect that same, current solve, with no stale carryover from before.

27 August 2026

The project page now updates live while a calculation is still running

Returning to a project page while one of its calculations was still queued or running previously required a manual reload to see it reach completion — the page fetched its data once, on load, and never checked again. It now polls in the background, the same way an individual calculation's own results page already does, so a calculation reaching "complete" is reflected without any action needed.

27 August 2026

Confirming a junction's classification: SAP default ψ now shows immediately, and the confirmation can't be double-submitted

Confirming a junction's suggested SAP Table K1 classification could leave the results page showing blank SAP default/percentage-improvement figures until the page was next reopened, even though the confirmation itself had succeeded — the page simply wasn't re-fetching those figures afterwards. It now refreshes them immediately on confirmation. The confirmation modal also no longer allows a second selection to be submitted while the first is still being checked.

27 August 2026

A "?" help icon for choosing the correct boundary condition

Choosing the wrong boundary condition for a drawn edge (particularly which of the two ground/basement options applies) is one of the easier mistakes to make when setting up a calculation, with no in-app guidance beyond the option's own short label. A "?" icon next to the boundary condition selector now opens a plain-English explanation of every option, sourced directly from the project's own Assessment Profile rather than fixed text — so the explanation always matches whichever standard the project is actually being assessed against.

27 August 2026

Each junction's SAP Table K1 designator shown in the report content selector

The report content selector previously listed junctions by label alone, with no way to tell which SAP Table K1 reference (E1, E2, R8, etc.) a given entry actually was without opening it — making it hard to sort or scan a project's content by junction reference. Each junction's designator is now shown alongside its label, in a fixed-width column that doesn't shift the rest of the row's layout depending on whether a given entry has one.

27 August 2026

The /validation page loads instantly from cache, checking for updates in the background

The /validation page (Psiclops's own results checked against published reference test cases) previously blocked on a fresh fetch every time its cache expired, showing nothing until that fetch completed. It now shows the last-known result immediately and silently revalidates in the background, updating the page only if anything actually changed.

26 August 2026build 2.085.000

fRsi, its standard boundary conditions, and mesh tolerances are now read from the actual Assessment Profile, not a fixed figure

The fRsi (surface temperature factor) result — its dwellings threshold, and the standard internal/external temperatures and surface resistances a junction's fRsi check and an assembly's condensation check are both assessed against — was displayed using a fixed set of figures declared in the web app itself, correct only because every Assessment Profile available today happens to share the same values. The mesh-refinement report bullet had the same gap: it always cited BR 497's own 1% heat-flow tolerance as fixed text, regardless of what was actually configured. All of these are now read directly from the real values each calculation was actually checked against, on the calculation results page, in the generated PDF report, and in the Word (.docx) export alike. No figures change for any project using the profiles available today — this closes a gap that would otherwise have surfaced silently the moment a future Assessment Profile ever set a different value.

26 August 2026build 2.084.834

An additional mesh-refinement safeguard beyond BR 497's own convergence check

BR 497 Section 2.6's mesh-refinement procedure compares total heat flow (and, for a junction, the temperature factor) between two successive refinement levels, accepting the result once the change between them is small enough. That comparison is always between two levels of the SAME mesh, not against a known-correct answer — so, in principle, a specific small or awkwardly-shaped material region within an otherwise perfectly ordinary drawing could remain under-resolved across two refinement levels that still agree closely with each other overall. Psiclops now checks directly, after every refinement level, that every drawn region actually has an adequate number of mesh elements in it — measured against the real mesh the solver built, not inferred from the region's shape or size — and automatically gives any region found short its own guaranteed-finer mesh density before that level's result is ever accepted as converged. This is a precautionary addition, not a correction to a known error: it is a no-op for the overwhelming majority of drawings, where every region is already adequately resolved from the first refinement level.

26 August 2026build 2.001.834

Assembly and component U-value results now show the full derivation, plus materials and boundary conditions

Viewing a 2D FEM assembly or Library component result previously showed only the final U-value and effective λ, with the working itself visible only as numbers baked into the thermoplot image. The result now includes a full worked derivation for both figures — U = Φ / (width × ΔT), and R_total → R_material → λ using the same warm/cold reference points already marked on the thermoplot — and, for a Library component specifically, the modelled construction itself (materials and boundary conditions), consistent with what a project assembly or junction result already shows.

26 August 2026build 2.001.750

Assemblies no longer accept a ground/basement boundary condition meant only for junctions

A wall, roof, or floor assembly built from a DXF drawing could previously be given a "Ground" or "Ground (basement wall/floor)" boundary condition — options meant only for ψ-value junctions, where BR 497 §4.7's own ground-floor remodelling (extending the construction to the standard's fixed model dimensions and generating a soil block around it) genuinely applies. Assigning either to an assembly triggered that same junction-only remodelling and solved the extended, buried construction instead of the real drawn cross-section — not how a ground floor's U-value is actually calculated (that uses ISO 13370's own equivalent-thickness method). Assemblies now only offer the boundary conditions that genuinely apply to a real building element's exposed faces, and the underlying calculation engine no longer applies ground-floor remodelling to an assembly at all, regardless of any boundary condition assigned.

24 August 2026

A second assessment profile — BR 497 / SAP 10.2 — plus a way to see exactly what any profile checks against

Projects can now be assessed against BR 497 / SAP 10.2 (UK) as well as BR 497 / SAP 10.3 (UK), selectable from the Assessment Profile field on a project's own edit page. Both profiles share an identical technical basis — the same Table K1 junction defaults, fRsi thresholds, corner relaxation, flanking-length rules, party-wall halving, and mesh tolerances — the difference is which SAP edition's own citation and Table K1 reference appears in your report and Declaration, so a project genuinely assessed under either edition gets a report that names the standard it was actually checked against. A new "View the basis for this standard" link on the project edit page opens a full, plain-English breakdown of whichever profile is currently selected — its general parameters, full Table K1/K2 junction catalogue, and boundary condition presets — reflecting the profile picked in the form itself, even before it's saved. No calculation behaviour changes for existing SAP 10.3 projects.

24 August 2026

Boundary conditions restored on the edit screen for every signed-in user

Following the recent Assessment Profile work, the boundary conditions on an existing calculation's "Edit materials & boundary conditions" screen had stopped appearing for signed-in users — the presets were still fully intact underneath, just not being returned to the page. This is now corrected; boundary conditions load and display exactly as before for every calculation, whether newly created or already saved.

24 August 2026

Materials library: datasheet viewing fixed, plus more accurate provenance and library-link tracking

Viewing a material's uploaded datasheet PDF previously failed with a browser error for every user — it now opens correctly in an in-app viewer with working Print and Download buttons, no separate tab required. Attaching a genuine manufacturer datasheet to a material no longer downgrades its provenance to a generic "user supplied" label — the real source is kept. And hand-editing a library-linked material's name, λ, or vapour resistivity within an assembly or junction now correctly breaks that entry's link back to the original library material, rather than silently keeping the old link under the new values — which previously could make an unrelated, unused library material impossible to delete.

23 August 2026build 2.001.667

Mesh-refinement convergence now checks BR 497 §2.6's temperature-factor tolerance directly

Psiclops's automatic mesh-refinement loop previously judged convergence on total heat flow alone, assuming a junction's temperature factor (fRsi) would settle at the same rate. It doesn't always: heat flow is an integrated quantity across the whole cross-section while the temperature factor is a single point, and the two can settle at different rates. The convergence check now compares both criteria directly — total heat flow against BR 497's own 1% tolerance, and, for a junction, the temperature factor against its own 0.005 tolerance — before a calculation is reported as converged, giving a more rigorous, standard-faithful convergence guarantee.

19 August 2026build 2.001.584

Party-wall junctions: both flanking faces now correctly included in the ψ-value calculation

For a party-wall-style junction (SAP Table K1/K2 references E9, E18, and E25 — a wall or floor split by a party wall into two independent runs either side), the ψ-value calculation could previously only ever pick up ONE of the two real flanking faces, always dropping the other. This produced an implausibly high ψ-value and prevented the junction from being confidently classified as a party-wall type at all. The calculation now correctly recognises this shape and includes both flanks, matching BR 497 §4.5's own convention of counting both lengths either side of the party wall. Ordinary junctions (lintels, openings, and everything else) are unaffected — verified against the full existing calculation test suite with no other change in result.

18 August 2026

Teams reworked: private by default, explicit copy-to-team sharing, and a proper credit refund on dissolution

Signing in as a team member is now a choice made at the login step itself — the code screen offers a simple switch to sign in as yourself instead of the team, and it sticks for that whole session rather than silently reverting on the next refresh. Creating a team no longer sweeps every existing project, assembly, and material into shared ownership automatically: a new team starts genuinely empty, and any member can explicitly copy their own projects, assemblies, calculations, or materials into it from the Team page, picking exactly what to share — everything a picked item depends on (an assembly's materials, a calculation's flanking assembly) comes along with it, and the original is always left untouched. If the last member leaves a team with a real, paid-for credit balance still on it, those credits are now genuinely refunded to whoever actually paid for them — reviewed and approved before any refund fires — rather than silently handed to whichever member happened to be last. Also fixed: leaving a team could previously leave your browser still acting as the team until your session next refreshed, even though you'd actually left. No calculation behaviour changes — this is a usability release, not a fingerprinted engine build.

16 August 2026

Discounted credit bundles — buy credits in a block instead of one at a time

Credits could previously only be bought one at a time, always at the flat £10 rate. Three pre-priced bundles are now available from the credits page: a 5-credit Starter bundle (£45, 10% off), a 12-credit House bundle (£96, 20% off — sized to a typical house's junction count), and a 30-credit Practice bundle (£210, 30% off) for running several projects at once. Bundle credits work exactly like ordinary credits afterwards — same balance, same never-expires policy, same real cost-basis tracking on the credits history page, so a bundle purchase's own discounted price is what shows against every credit it's later spent or refunded against, not the standard £10 rate.

11 August 2026

Word report export brought back in line with the web view — images, section order, and key results

The generated Word (.docx) report had drifted from the web report view over time: every embedded image was forced into a fixed proportion regardless of its own real shape, visibly stretching or squashing anything that wasn't close to that ratio (an L-shaped corner, a tall section, a wide ground/basement view); a junction's flanking-element table and validation notes appeared in a different order than the web view; and there was no Word equivalent of the headline results box shown at the top of every section on screen. All three are fixed: images keep their real proportions, the flank/fRsi reference tables now match the web view's own coloured legend styling instead of a generic data table, a headline results box (ψ, fRsi, comparisons against the SAP default, condensation findings) now opens every section the same way it does on screen, and images are properly centred with no stray table borders left behind.

10 August 2026

Cover an existing junction's result for another SAP reference, plus a Junction ψ-Value Summary table

A modelled junction's result can now be declared as also the adopted value for another SAP Table K1/K2 reference — a rooflight's head/sill/jamb/upstand being one physical detail, a mirrored eaves, or a justified conservative bound — via "From existing" in the "+ Add junction" popup, rather than only by drawing and solving a second time. Nothing is drawn or solved for the covering entry; it always tracks the source's own result live, so a later edit to the source is reflected automatically, and deleting the source warns explicitly before removing everything it covers. Generated reports fold a covered reference into its source's own section (the heading lists every reference it covers, with a short note stating the reason) and gain a new Junction ψ-Value Summary table, scoped strictly to what's actually in that report — not a claim of SAP 10.3 Table K1 completeness. Separately, a caveat previously shown for a boundary run correctly excluded as an incidental detail (e.g. a small step or return, not a real separate flank) read as though something had gone wrong when it hadn't — it's now shown as plain information, distinct from a genuine reliability caveat.

8 August 2026build 2.001.167

Ground/basement junctions: real construction detail restored to the close-up, correct junction-type matching, and BR 497's own model dimensions shown

The "Modelled construction" card and its report/Word image now crop to what you actually drew, not BR 497's own extended floor/wall model — the real corner detail was previously still dominated by the standard's fixed ½b extension even in the "close-up" view. The full-extent image gains real dimension callouts for BR 497's own fixed model figures (b, ½b, the 2.5b soil extent, and the 150mm below-floor step) so they're stated directly rather than only implied by the drawn geometry. Separately, a real classification bug is fixed: junction-type matching was scoring a ground/basement junction against only ONE of its two real flanks (the wall or the floor, never both) — the same structural limitation already fixed for the ψ-value calculation itself, but missed for classification. A genuine E5 (solid ground floor) could score as low as 38% fit even when explicitly selected; reproduced directly and confirmed fixed. Also: boundary-condition lines on every construction diagram (drawing screen, results page, and report) no longer render thicker than the material outlines they sit on, which could bury real material detail underneath a bold boundary line regardless of which condition was applied.

7 August 2026build 1.917.667

Ground/basement junction geometry: five more real bugs fixed, plus regression tests

Continued hardening of the ground/basement junction remodelling introduced earlier the same day (below). A below-grade construction element split by the generated soil block at the exterior-ground datum (eg a DPC or foundation strip) could lose its own boundary condition entirely, defaulting to a zero-flux "adiabatic" edge instead of its real exposure — found on a real drawing, now fixed. Building dedicated regression tests for the solid, suspended, and basement cases surfaced three more: the soil block's own orientation could come out backwards for a footer wider than the wall above it; and, basement junctions only, the wall's own extended top face could be misclassified as exposed to open air instead of the correct zero-flux model boundary. The "Modelled construction" diagram is also clearer: the truncated soil region's own true size now appears as plain text in the materials list rather than a dimension line that could land across real construction detail, and line weights no longer scale disproportionately thick on this style of drawing.

7 August 2026build 1.917.584

Ground/basement junction ψ-value fixed, plus junction type and diagram accuracy

Ground-floor and basement wall/floor junctions (BR 497 §4.7) model the drawn construction extended to BR 497's fixed dimensions and set into a generated soil block before solving. Extracting the ψ-value from that solve reused the same flank-pairing logic built for an ordinary corner junction — but a ground/basement junction has two warm flanks (the wall and the floor) sharing one external soil boundary, not the simple one-warm/one-cold pair per flank that logic assumes, so it could only ever pair one of the two, silently leaving the other's own contribution out of the ψ-value entirely. On a real basement case this understated the flanking correction by an order of magnitude. ψ-value extraction for these junctions is now built directly from both flanks, matching BR 497's own published worked examples. Two related accuracy issues are fixed alongside it: the automatic junction-type classification now checks the geometry as actually drawn, rather than the internal extended-and-soil-filled model (which could never match a ground-floor junction's own catalog entry); and the "Modelled construction" diagram now shows the real extended construction and soil for these junctions, rather than the original as-drawn geometry.

4 August 2026build 1.900.800

Mesh detail now actually reaches the report's Software and Standards section

The mesh-refinement QA image introduced alongside faster solving (below) reached the generated report, but the underlying numbers — element and node counts, whether refinement converged, and the actual percentage change in total heat flow between the final two refinement levels — did not: only the picture carried them, not the report's own structured Software and Standards list. That percentage change is a genuine measure of mesh-convergence error. Both the web view and the Word export now include a "Mesh detail (BR 497 §2.6)" line stating this explicitly, for every 2D assembly and junction report.

4 August 2026build 1.900.800

UK/BR 497/SAP 10.3 conventions moved onto swappable data

The boundary condition presets, general assessment parameters (fRsi thresholds, corner relaxation, minimum flanking length, design internal humidity, party-wall halving, and citation strings), and the SAP 10.3 Table K1 junction taxonomy catalog are now all resolved per project from a "standard" record in the database, rather than hardcoded directly into the calculation engine. BR 497 / SAP 10.3 (UK) remains the sole standard every project uses today, and every current calculation is unaffected — this only lays the groundwork for a second country's own equivalent conventions to be added as data in future, without engine code changes.

4 August 2026build 2.000.365

Faster solving with automatic mesh-density verification, now shown in every report

The core finite element solver now uses sparse matrix methods instead of a dense one — up to 87x faster at higher mesh densities on real reference geometry (verified to agree with the previous method to within 1e-12 on both the temperature field and total heat flow), and it's what makes something new practical: every calculation now automatically verifies its own mesh density is adequate, per BR 497's own §2.6 procedure — solving, halving the mesh, and comparing total heat flow between successive refinements until the change settles under BR 497's own 1% tolerance, rather than always solving once at a fixed density. Every solve within a calculation (ψ-value, fRsi, condensation, interstitial) now also shares this same refined mesh directly, instead of separately rebuilding it from scratch each time. The generated report — both the web view and the Word export — now includes a dedicated mesh detail image showing the actual mesh used, element and node counts, and the refinement history, closing a real gap: this information previously existed only in an interactive, browser-only view, with nowhere for it to be kept or carried into a report.

3 August 2026

Materials library: simple materials, datasheet upload, and deletion protection

Adding a material now offers a dedicated "Simple material" option for a single product, alongside the existing layer-by-layer and DXF routes. Its Provenance field is now something you control directly and permanently — correcting an AI-sourced value no longer silently collapses its citation down to an unhelpful "User supplied", discouraging exactly the kind of correction that makes a value more accurate. A datasheet PDF can also be uploaded directly: Psiclops reads it and fills in name, λ, µ/Sd and colour automatically where it can, keeping the document itself as the material's cited source even when nothing could be extracted. Separately, deleting a material now checks first whether it's still used as an assembly layer, embedded in another material, or applied to a 2D assembly or junction, and blocks the delete with a message naming exactly where — previously this was either unchecked or reported as a misleading "not found". No calculation behaviour changes — this is a usability release (see the site footer's own "ux" version), not a fingerprinted engine build.

2 August 2026build 1.727.455

Annual interstitial condensation and external design temperature corrected

Two independent issues were found and fixed. First: the annual interstitial condensation check for 2D assemblies and junctions could treat any locally supersaturated point in the mesh as its own independent condensation plane, rather than restricting this to genuine material interfaces the way EN ISO 13788's own method does. Cross-validated directly against the standard's own certified Annex C.5 worked example, this was found to overstate peak accumulated moisture by up to ~60x for a real, non-extreme construction, and could report a fail where the correct result is a pass. Second: the external design temperature used for junction and assembly modelling is corrected from an unverified -5°C to 0°C — BR 497's own explicitly stated convention ("the usual temperatures to use when modelling"). Per BR 497, this does not change any previously-calculated ψ-value or fRsi verdict, but does change reported heat-flow figures and the design temperature shown on affected reports.

2 August 2026build 1.778.1

Condensation plots now identify materials, not just coordinates

The worst (least-margin) point on an interstitial condensation plot is now labelled with the material(s) it sits on or between — e.g. "interface: OSB/3 ↔ Insulated I-Joist bay" — instead of an unlabelled marker with no construction context. Applied to the live results page and the internal calculation-verification suite.

21 July 2026build 1.777.890

Interstitial condensation accuracy improved via a new cross-validation check

The 2D interstitial condensation check introduced two days earlier was cross-validated directly against the classic 1D Glaser method for an identical flat construction, where both should agree exactly. Two real corrections came out of it: a numerical-precision fix for a case that could silently return zero vapour flow, and switching the check over to Glaser's own EN ISO 13788 surface resistance convention (Rsi=0.13) in place of a different standard's (BRE IP1/06's Rsi=0.25) that had been used in its place.

21 July 2026build 1.666.668

Genuinely 2D interstitial condensation risk

A new check for 2D DXF-derived assemblies and junctions: a second finite element solve using each material's vapour resistivity in place of thermal conductivity, comparing the resulting vapour-pressure field against saturation pressure across the full 2D cross-section rather than at fixed 1D layer interfaces — able to catch a risk location, such as a thermal bridge, that a 1D method has no way to represent. Available for both assemblies and junctions.

20 July 2026build 1.714.287

Party-wall ψ-value halving (BR 497 §4.4.3)

Junctions flagged as party-wall details now have their declared ψ-value correctly halved against the full party-element length, with the pre-halving figure retained and shown alongside it, and the relevant BR 497 clause cited directly in the generated report.

19 July 2026build 1.714.287

Junction classifier overhaul and four BR 497 audit fixes

The SAP Table K1 junction-type classifier was substantially reworked to use real geometric signals from the drawn junction plus an explicit plan/section hint, with an AI fallback and a confirmation step before any classification is accepted. Separately, a direct audit against BR 497 found and corrected four discrepancies: the internal surface resistance convention wasn't being applied directionally where BR 497 requires it, an unheated space wasn't being modelled as fully exposed to the external environment as the standard requires, a fRsi/condensation corner-singularity case needed relaxing, and fRsi reporting precision was corrected.

18 July 2026build 1.500.1

FEM mesh visualisation and citation corrections

Added a "Show FEM mesh" toggle to the results page, letting you see the actual solver triangulation as a QA check. Also corrected the Software and Standards citations for the U-value, ψ-value, and fRsi checks to be sourced directly from the modules that actually compute them, rather than a separately-maintained copy that had drifted out of sync — including a casing fix for fRsi and its BRE IP1/06 caption.

13 July 2026build 1.333.334

Engine version tracking begins

Introduced per-module version tracking for the calculation engine, shown as a single combined build number on the landing page and itemised in full in every generated report's own Software and Standards section. Also corrected which standard is cited for surface and interstitial condensation checks (BRE IP1/06, not BR 497), and thermal plots gained the ability to trace real material-polygon boundaries over a solved field.