Conversation
PRO's Solve, live calc and the phone shell take the parallel entry, which skipped analysis.perCombination and solved every combination linear; the sync entry (the optimiser's) honoured it, so a project gave different combination results by button. The parallel entry now dispatches as the sync one does, and runs only the linear core on the workers. A test solves the same column both ways.
The axial part of member loads was given back to its members only by the main-thread wrappers: every worker solve (PRO's Solve, live calc, the direct analysis) and every solve of a model with a cable or a multilinear spring read the average axial force of a loaded member, the defect 16/18 fixed on the other path. solve-finish.ts now finishes every 3D linear and P-Delta result (the stabilised reactions out, the axial part back), and the worker, the wrappers and the cable and soil-spring solves all call it. The cable densities use the one kg/m³ conversion the dynamic analyses use.
…rules Both built their own model without analysis and groups, so self-weight fell back to the older rule (every dead-load case, or none, by a toggle PRO hides once a rule exists) and the shear-deformation switch was dropped: P-Delta, buckling, modal, spectral, pushover, time history and the direct analysis could run on other loads and stiffness than Solve. Advanced now uses the store's builder, and the direct analysis passes the rules. A test checks the direct analysis takes a stated self-weight once with the old toggle on or off.
Deleting a load case left its self-weight rows behind: the single solve still loaded them and the combinations did not, and the panel showed a case that no longer exists. A member listed by id in a rule lost its weight when split and handed its id to the next member when deleted. The rows now go with their case, and the member lists follow splits and deletions as groups do.
…ir own name - The engine's own solver lines (path, conditioning, fallbacks) came without a source and in English: the panel printed DIAG.SOURCE.UNDEFINED beside them. They are read into the app's shape and translated, numbers kept (engine-diagnostics.ts), in the panel and in the toasts. - A model with no error at all read 'the model is missing data the analysis needs'; it now reads as clean. - A semi-rigid end on a member whose bending axes are not global ones is solved rigid (its connector acts in global axes); the model check now reports those members before a solve. - 'Vínculos' in Specifications becomes 'Uniones entre nodos' (en 'Node links', pt 'Ligações entre nós'): in Argentine usage 'vínculo' reads as a support, beside Supports. The diaphragm note points at its new place.
The rule (an inactive member is not designed; a tension-only member or a cable faces no compression check, a compression-only member no tension one) lived inside the CIRSOC steel check alone. The optimiser sized tension-only braces for buckling, the other codes failed them, and the concrete design read inactive members. design/behaviour-demands.ts now holds it and the four paths read demands through it; result tables and exports still report what the analysis gave. A superposed combination that leaves a cable in compression is listed as a sign violation, as a tension-only member is.
- A combination with no second-order equilibrium publishes no forces, and every design path reads the combinations that have them: a member could read 'passes' on the rest with only a passing toast for trace. The concrete, steel and other-codes panels now name the combinations left out and call the design incomplete. - The direct analysis gave τb to every member whose material has a yield stress, concrete included (its fy holds f'c): a heavily loaded column lost its flexural stiffness, to zero past f'c·Ag. Pns is built for steel members only, by material family.
…erns along it The span kept the set with the largest resultant deflection, and a rule along local y or z read that set's component: a wind set that sways a beam sideways more than gravity bends it passed an L/n check along z the gravity set fails. Each direction now keeps its own governing set, named with the deflection.
… loses one row - A section named like a catalogue profile took that profile's outline whatever dimensions it carried: a CSV row 'IPE 300, I, 400, 200, 10, 15' solved as the IPE 300 while storing h = 0.4 m. The name now looks up dimensions only when the section has none of its own or the same ones. A catalogue pick writes the profile's thicknesses, so none from a previous make-up stay. - A CSV row whose dimensions draw no section threw and the whole file was lost without a word; it is refused by line and the rest are imported.
…s weigh Its 'a' is transformed (Σ n·Aᵢ), right for stiffness and wrong for weight: an HEB 300 filled with concrete weighed −31 % with steel as the reference, +43 % with concrete. A drawn section of more than one material now keeps each material's real area, and self-weight (as a load and in the statics check) and the quantities read one helper, member-weight.ts, that sums ρᵢ·Aᵢ; the quantities put each material in its own bucket. Its plastic modulus is no longer integrated as one homogeneous outline at the reference yield stress: it takes the estimate from its transformed inertia.
A template's materials land under new ids here (or as the project's own of the same name), but a drawn section's reference material, parts and areas kept the template's ids and pointed at whatever project material had those numbers: the stiffness changed without a word. They follow the materials now.
The feedback widget attaches a link to every report, and it used the compact format, which predates PRO: a PRO model reopened with its cables as frames, tension-only members linear, no P-Delta per combination and its self-weight migrated again. In PRO the link now carries the model code, as PRO's own Share does; from Basic, a model that states anything the compact format drops (behaviours, sections' own properties, supports that lift, the analysis rules, the grid, the dynamics, project data) is shared the same way. 'Paste link' opens code links too.
… without traps - The time-history panel stored its default run and pushed an undo step just by opening, kept a draft that undo, a tab or a file never refreshed, and could write one project's run into the next. It writes on edits only, re-reads its draft when the model is replaced (a new modelStore.loadEpoch), and drops a pending write then. - The self-weight migration made a load case outside any batch: undoing it brought back a model the panel migrated again, pushing a new step and clearing redo. It runs without an undo step (modelStore.withoutUndo), as its header always said. - Basic has its own self-weight toggle, and a model that had visited PRO carried a stated rule that silenced it. Basic solves read the toggle. - The report's figures and the direct analysis (settings and run) belonged to the session, not the project: they are forgotten when a file, a tab or an example is opened. - An arc is one undo step; an older file's shellFamily is dropped on load; a project with a grid, rules or data and no node yet is autosaved and offered back, and an autosave restores its self-weight toggle as a file does. - The results panel's unused copy of the solve flow is gone. - Tests for the migration's plan and each of its cases, and for Basic's toggle.
…es left behind gone - The report's advanced-analysis choices printed raw ids (pdelta, modal); they have labels. - The gallery's Spanish cards read 'Bowl', 'Shells' and 'shells'; the Advanced strip had 'Time History', 'No lineal', 'Modos:', 'Tipo:', 'Corotacional' and 'Max iter' in every language; the loads panel said 'selected elements'; the level-names placeholder, a table header, the drawn section's accessible name, the mat example's slab group and the one-way solve's errors were fixed strings. All are translated in es, en and pt; the stiffness presets print their factor with the reader's decimal separator. - About a hundred keys that nothing reads any more go: the retired contact, multi-case and constrained views, the old mesher and example menu, the old report fields, the examples' old ids.
…ere its selection is - Moving between Members and Surfaces emptied the member selection each time: it is set aside while shells are picked and given back. - Foundation springs act on selected shells but sat under Supports, where the pointer picks supports: they move to Surfaces. - The shell offset fields opened at zero whatever the shells carried; they show the selection's offset, or say it is mixed. The top and bottom face presets use each shell's own thickness, not the first one's for all. The fields have accessible names. - A time-history record again warns when its peak reads as a unit mistake, when the run's dt loses its peak, and when the run is shorter than the record: the warnings were lost when each direction got its own row.
- End conditions of a member (local My/Mz/T releases, joints in global axes, semi-rigid ends) are one section of Specifications › Members, with the stiffness factors in their own. The members table's Hinge i/j columns show each end as fixed, pinned, semi-rigid or partly released and open that section on the member; a member not made yet still takes pinned or fixed there. In PRO the right-click editor links to it instead of repeating it, and a right-click on a member or a supported node offers Specifications…. - The supports table shows each support's type with what it adds (lifts off, springs, curves, inclined) and opens Specifications › Supports on it; type and lift-off are edited there. - A support of a standard type shows what its type restrains, read only, and takes no spring on those degrees; its inputs have accessible names. - Editing one custom stiffness factor wrote the first member's four onto the whole selection; it now changes that factor on each member and keeps their own others. - 'Remove shear areas for all' spared nothing, typed areas included: it removes the ones taken from geometry only, and Sections says when the analysis switch leaves shear out. - Specifications › List names support curves and shell offsets with their values.
- The gallery's steel examples declared no grade, so steel design had nothing to check: the seven written as code declare F-24 (at its 240 MPa; they said 235), and the fixture examples are given the grade their steel's name states on load. - The steel grade stage repeated the same paragraph under every member; each missing input is said once with how many members it holds back, and the rows name their gaps. - Design opens on steel design for a mostly steel model. - The stress map of a model of bars no longer shows a card saying there are no shell results. - The generators' field hints had no style and printed at body size. - The CSV import and the report logo are buttons in the app's language, not the browser's file control; a logo too large is said beside it, not in an alert; the report links to Project data. - New plates and gap fills are offered the model's concrete, not its first (steel) material. - Plates offers Surfaces with the selection and its count, as Members does. - The gallery opens over the viewport, its cards side by side. - Advanced's P-Delta says it takes every load together, unfactored, and where the per-combination one is; ?proTab=specifications opens the tab. - Specifications: list rows and section tabs work from the keyboard (arrows between sections), and the tabs are larger on a phone. - Clearing every link or connector asks first.
…e read along the members - The optimiser matched sections to the catalogue by name, declared and drawn ones included, so a declared 'IPE 300' with other properties got the catalogue's verdict; and applying reused any section of the chosen name. Both skip declared and drawn sections now. - The report's summary of extremes and the workbook's Envelope sheet read member ends only, while Maxima read stations: a simply supported beam's largest moment was 0 in the report. The summary reads 13 stations and says where along the member; the Envelope sheet uses Maxima's stations.
…hat they combine - The engine's multi-case solve keys cases and combinations by name and refuses a repeat; a project with two cases of one name fell back to solving case by case without a word (validation model 04 has eight 'CRANE' cases). Each goes to the engine under its id now. Model 04's cases are numbered too; its baseline is re-recorded: the names, and at most 7e-13 relative from the multi-case path. - An example's own combination that lost a term to a dropped empty case is named from what it adds up (the offshore platform listed an L it no longer had). - Baselines hold a residual to the scale of its loads, not to its own column of round-off, which failed on any change of summation order. - HE M sections get the default grade their family has; a member's stress bound no longer puts the weak inertia where the strong one is missing.
… they should - CI runs the typecheck against its baseline and check:gate after the build: every PR body named them, and they ran on the author's machine only. PRO's Specifications and drawn-section editors join the guarded paths (one real error there fixed: a release default the spread overwrote). - The analysis-rules and project-workbook e2e specs had no tag, so CI never ran them: both are @smoke now. - The optimiser e2e passed on a table of dashes and never checked its depth limit: it requires a proposal and every HEB at most 400 mm deep. - New unit tests: the shear switch reaches the engine (no shear areas, and a short cantilever at PL³/3EI), the Specifications and Cables workbook sheets. - Beside each it.fails, the known wrong value is bounded (the pushover's simultaneous-hinge stop, the engine's P-Delta moment without Kg·u, the shells' drilling residual), so another failure cannot pass for it; a drawn-section test no longer returns early with nothing checked.
Loads acts on selected nodes or members and Supports on selected nodes, while their pointer picks loads or supports: 'On the selected members' waited for a selection the panel could not make. Where such an action has nothing selected, a button switches the pointer to members or nodes, and says so once it has (loads, supports, floor loads on the selection).
en and es: Specifications with its end conditions in one place, node links under their new name
('Uniones entre nodos'), foundation springs under Surfaces, the members and supports tables as
indicators with a way to their editor, right-click › Specifications, the shear buttons and the
analysis switch, the pick buttons of Loads and Supports, Advanced on the project's rules and what
its P-Delta loads, modal and spectral with node links as they really behave, the mass source, the
time-history record warnings, the report's summary along the members and its session state, where
Design opens and the incomplete-design notice, the gallery overlay, IFC among the imports. Claims
the audit found false are corrected (hinge columns releasing Mz only, trusses only from generators
or Excel, the 90 % option hidden with constraints, 'three parts' of Loads, 'mixto', 'Roller').
Validation model 04's header no longer counts the source's iterations.
A diagram tolerates a result record without its load arrays (synthetic and older records), now that the report reads members at stations; the report-scale test checks where and under which set its extreme is. The offshore test checks its own seven combinations, U3 named from what it adds up.
- Declaring a gallery example's steel grade was not enough: steel design needs the ultimate strength too, and the fixtures carry none. The grade's fu (and fy where missing) is written with it, the seven code examples state F-24's 370 MPa, and a test checks that steel design gives a verdict on the members of two gallery examples (angles aside, outside the member check's scope). - The optimiser e2e, now that it asserts a proposal, showed that on the bare portal fixture it had never checked anything (no fu): it runs on a gallery steel example opened through its card. - The Advanced modal button has a test id; the dynamics e2e used its old label.
Cutting a member at one of its own ends made a zero-length member. Renumbering left self-weight lists, deflection rules, hidden members and time-history forces on the old ids. Merging dropped the far segment's spring and the references to the absorbed segments. Deleting a group left the self-weight loads and deflection rules scoped to it covering nothing; they now name its members, and a group whose shells a self-weight load covers stays, with a message.
The compact link rounded every number to six decimals, so a steel section's Iy of 1.42e-6 arrived as 1e-6 and its J as 0; numbers now keep ten significant figures. Whether a model needs the code link is decided by encoding it, decoding it back and comparing, instead of a list of dropped fields that had missed custom supports, curved shells, saved views, grades and more. The model code reader also sets the soil profile counter.
Proposals outlived opening another project or editing the model, and Apply then wrote the old picks by section id onto whatever carried that id now. Proposals now show and apply only on the project and model version they were computed on; applied rows follow the project too.
Tables cited as 'Tabla', Spanish stage names and clause quotations inside English text, decimal commas, controls named that do not exist (Calculate, the Shells tab, the Results tab, Save project), and terms that said the opposite (snap grid to nodes). Internal tokens no longer print on screen: the axis basis, the cold-formed basis and GEOMETRY_UNAVAILABLE read as words in every language. The steel results page no longer lists the Mp <= 1.5 My cap as missing, since the checker applies it, and the Cb assumption now says Cb is computed from the diagram where F.1.1 allows. The self-weight badge is translated, and the plates table no longer prints its unit twice.
…ells and profiles The PRO Excel import now shows the same report as Basic. The Excel reader converts the unit in each header, reports and drops repeated ids and second supports, reads a 4-node row on the Plates sheet as a quad, refuses repeated corners, honours dir on distributed loads and writes constraints in the engine's shape, so the template's diaphragm solves. A flat X-Z workbook opens upright. The IFC mapper recognises Spanish and Portuguese material names and matches profiles by exact catalogue name, so IPE 30 no longer becomes IPE 300. The legacy DXF mapper reads decimal commas and exponents and splits T-junctions. Every importer message is translated.
…keep their loads A truss with end depth 0 left its chords on separate nodes at the bearings, so it deflected several times too much and placing it dropped members; the chords now share the bearing node. Regenerating in place welds onto free model nodes and skips members that already exist. Converting a slab to a stair carries its surface and thermal loads onto the flight and removes the corners nothing uses. Cones and spheres close on an apex instead of degenerate quads, the mesher refuses a region already meshed, fill leaves an enclosed outline open, an odd-segment arc through a node no longer orphans it, the stair defaults to the model's concrete, and generating a tapered shed is one undo step.
…d so The optimiser ran the CIRSOC 301 hot-rolled checker on aluminium and cold-formed members, and for a family the checker does not cover (angles) it said none passed. Those members are now left out with a count on screen, and an uncovered family reads as not checked.
… J.3.2 lists The auxiliary calculator combined tension and shear with an elliptic formula instead of J.3.7's reduced tension strength, took the standard hole as d + 2 for every diameter where Tabla J.3.3 gives d + 3 from M24, and offered a 5.6 grade the table has no row for.
The member check reads a web and flanges, so an angle's rows listed web and flange thickness as missing data no angle has, and the 148 angles of the simple shed could not be cleared. They now read as outside the check's scope, with tubes pointed to AISC 360 and EN 1993 under Other codes.
The P-M check solved Pn(c) = Pu on the nominal curve and took phi·Mn there, which at high axial load sits at too small a c: a 30x30 with 8Ø16 in H-25 read 71.7 kN·m at 1200 kN where the design curve gives about 48. It now solves phi(c)·Pn(c) = Pu, with phi from CIRSOC 201-2025 (tension-controlled from eps_ty + 0.003). The axial force keeps its sign: a column in tension was checked as if the same force compressed it. Under tension the biaxial check uses the load contour, since Bresler's method is for compression. On the flagship frame 21 columns take more steel and stay verified; the counts do not move.
Shear had no section limit, so a 20x40 H-20 beam with Ø12 4 legs c/5 was certified for 700 kN where the section takes about 200; stirrups below Av,min still used row (a), so a 30x60 H-30 with Ø6 c/25 passed. Vc now reads Tabla 22.5.5.1: 0.17·sqrt(f'c) plus Nu/(6 Ag) with the gross area, row (c) with lambda_s and rho_w below Av,min, and Vs is limited to 0.66·sqrt(f'c)·bw·d (§22.5.1.2). On the flagship frame 191 beams move within ±0.11 and all stay verified.
The design check, the adapter's detailing limits and the report's detailing table read the 2005 fy·db/(3.2·sqrt(f'c)), about half of Tabla 25.4.2.3: 0.42 m for a Ø16 in H-25 against 0.64 m. They now read deriveDevelopment, the source the detailing and the drawings use, on its favourable-spacing row. Four members of the flagship frame move within 0.03; the row-2 fixture's known missing bar line now leaves its envelope partially exhausted.
Only the strips along B were checked, so a 1.5 x 3.0 m base passed and the same base turned 90 degrees failed at 380 against 158 kN. The L direction is now the same check on the base turned, and the larger utilisation governs.
The verifier multiplies a column's moments by delta_ns and the capability matrix says it runs with the value supplied, but the design contexts were built without it, so every column was checked with delta_ns = 1. The context builder now computes it with the same checkSlender the report uses (§6.6.4, joint restraint from the model), per combination from the column's end forces, read about the weaker axis, and keeps the largest.
Slab flexure read the shell moments on screen, which after a solve is the first load case or whatever case the user was looking at, while the shear check of the same run used the factored envelope. Each shell now carries its moments in every design combination and each face is designed for the largest Wood-Armer demand among them; the record says the demand is the envelope. The slab steel also takes phi = 0.90, which it had left out.
The flagship frame closed the detailing stage with a tick and read 'members detailed and verified' over 7322 open bar conflicts while its sheet said not constructible. The stage now stays open while any non-marginal conflict remains, and the notice beside the command states how many the last run left open.
A member with stiffness modifiers is solved on a scaled section, and the mass matrix read rho·A from it, so a factor on A for stiffness changed the member's mass as well. The mass source now names the unscaled area and scales the member's density to it. The moving-load test follows the US spelling of the cancel message.
Imperfections build their notional loads from each node's whole downward load, member loads and self-weight included; the engine read nodal loads only, and the seven-storey building took 78 % less sway force. Creep and shrinkage are solved by the effective modulus on the ordinary solve, for concrete only and each with its own f'c; the engine computed phi and then solved with the original modulus. Staged construction names load cases instead of internal indices (it applied no load by default), brings the supports in with the first stage, sends its final state to the viewport, refuses curved shells and connectors, and says that a member added later takes its force from the cumulative displacement. Pushover refuses non-steel members and keys Mp by the sections the solve uses. The fibre option, which never ran, is gone. The panel states that these analyses load the unfactored sum of the cases, and every label and error prefix is translated.
The polygon analyser's J read 7 % high on a solid rectangle and more than double on an I; the panel now takes J from the Saint-Venant solve on the section's mesh, which agrees with Roark. The Winkler springs say they act along the member's local axes, and both start non-zero, since kz = 0 left the member resting on nothing vertically.
The report and the workbook read the result on screen with no Cd, a fixed 0.015 and a clause that does not state it, so they printed a different check from the panel's. They now scale each seismic case by Cd/gamma_r and take Tabla 6.4's limit for the project's group on condition D, keep each storey's worst case, and state the basis; without the seismic settings there is no drift section.
…s own The report re-designed every concrete member with the older checker: bars of its own choosing, a linear P-M interaction, fy 420, 25 mm cover and Ø8 stirrups hard-wired and 2005 clause numbers, so the document described a different design from the panel's, with a bar schedule that disagreed with the detailing quantities. The report and its workbook now list each member's own reinforcement as the panel checked it, with the governing check, demand, capacity and utilisation, and say so when nothing has been designed.
… report's design section
With the lossless check, a steel model's grade, fu, standard and region were found missing from the compact link and it switched to code form. The compact format now carries them, so a Basic steel model keeps its short link and arrives with its grade.
The CIRSOC 201 post's shear row reads 0.94 since shear follows the 2025 table; the batten panel no longer prints its internal state token; the footing status reads MODELED; and the e2e assertions follow the English wording, the gallery's localized case names and the Part II and Design stage names.
With development length from Tabla 25.4.2.3 the embedded beam's two rows close at 0.89 and 0.87, both governed by the anchorage of the bars; the caption said bending and shear under 1.2D+1.6L. The caption, the source note and the e2e follow the result, the preview test reads its new wording, and the wall check's reason is asserted as the engine writes it.
…t at, and offers the cut A first model usually falls apart this way: each post drawn as one member and the ledgers ending on nodes that sit on the posts. The solve said the structure was disconnected and listed forty node ids. It now adds how many nodes sit on members without cutting them and names Edit > Cut > Split at the nodes on them, and the error toast offers that command over the whole model as one undoable edit. The node-on-member search is one pure function the cut and the check share.
The PRO section builder asked for tube, plate and flange dimensions in metres, so a first scaffold model entered a 50.8 x 2.5 mm tube as 0.508 x 0.025: ten times each dimension, a hundred times the area and the stiffness. The fields now read and write millimetres; the section still stores metres.
…nent load A combination with no factor on an existing case adds up nothing, and a model where no combination takes a dead case or the self-weight case leaves the structure's weight out of every result. A first user's scaffold had both, and nothing said so. Both are now model warnings, with the fix in their tooltips.
The engine writes its errors in English, and 'Singular stiffness matrix — structure is a mechanism' reached a Spanish interface as it was written. The known sentences are now replaced wherever they appear in a solve message or toast; anything else is left as it is.
One click in empty space with the node tool left a node no member, shell, connector or constraint holds. Its free degrees of freedom made the stiffness matrix singular, so every solve failed, the results were cleared and every diagram button stayed disabled until the node was found and deleted. The solve now runs on solvableModel: the active model without those nodes and their supports. A loose node that carries a load still stops the solve by name, since dropping the load would change the answer. The diagnostics keep reporting the loose node. The statics check keeps reading the model as is.
Loads: a click in loads mode selected nothing, since 3D had no load picking. The load batch now records the segments each load draws and a click takes the nearest one; at a joint a load acting at that point wins a near tie. A drag missed every nodal, point and shell load, because the 3D load types fell through to the member branch. A selected load is drawn in the selection colour with the rest dimmed. Nodes: pressing a node pushed an undo state and the release undid it, so a click never selected the node, brought the old selection back and cleared the redo history. The press is now only a drag candidate, the drag starts on real movement, and a pixel of jitter no longer moves the node and clears the results. Members mode picks members only, as in 2D. Panel: All, Invert and Previous reach supports and loads; Previous works after a click on nothing; Loaded in case takes the loads while loads are armed.
Drawing a load or a support showed Basic's options strip above the top bar, in Basic's terms; nodes, members and plates said nothing. A PRO bar under the ribbon now says what the next click does and offers each tool's choices: plane and level, member type, material, section and chaining, 3 or 4 plate nodes with material and thickness, the support types, and the load case, kind and all six components. Escape leaves drawing. Node I and the picked plate corners are ringed in the model, with a dashed preview to the pointer. The Members panel built members of its own from the selection while the viewport built them too, so a third click joined a stale node to the new one; one store now holds what is being drawn. A plate is made on its last corner and the next one starts. Nodes, Members, Shells, Supports and Loads each have twin buttons, Draw and Write. Write opens a card with the fields and an Add button; Enter adds and the first field takes the focus again. The plate and the support written and drawn are the same draft.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part 19, closing the chain. Stacked on #241. Draft until the owner says otherwise.
A review of everything parts 7 to 18 added, run as six parallel audits (the JS analysis layer, persistence and undo, the PRO interface, results/design/sections, examples/translations/guide, and test coverage) and a walkthrough of every PRO panel with and without a solved model. This PR fixes what they found, adds the tests that would have caught it, and polishes the interface where the walkthrough showed it needed it. Each commit says what it fixes and why.
Calculation
analysis.perCombinationand solved every combination linear; the optimiser's sync entry honoured it. The parallel entry now dispatches the same way.solve-finish.tsnow finishes every 3D linear and P-Delta result, and the worker, the wrappers and the cable and soil-spring solves all use it.analysisandgroups: self-weight fell back to the older rule (counted twice or lost) and the shear switch was ignored.design/behaviour-demands.ts): the optimiser sized tension-only braces for buckling and the other codes failed them. Cables in compression under superposition are listed as sign violations.DIAG.SOURCE.UNDEFINEDin English); a clean model reads clean; semi-rigid ends that are solved rigid are reported before a solve.Persistence
shellFamily; a project with data and no node is autosaved; an autosave restores its self-weight toggle.Interface
Second audit
A second pass over every PRO function, with the English and Portuguese of the whole PRO surface. What it found is fixed here.
Modelling and files
Advanced analyses (the engine items are recorded outside the repository)
Concrete design
Steel and connections
Report
Translations
Blog. The CIRSOC 201 post's embedded beam now closes at 0.89 and 0.87, both governed by the anchorage of the bars; its caption said bending and shear under 1.2D+1.6L and is rewritten in the three languages.
Left for later, recorded outside the repository: footing design over every combination, beam ductility at supports and a cover input, the joint coordination behind the flagship frame's bar conflicts, a flat Excel workbook with 3D content, the detailing engine's reasons and the concrete check names, which are written in one language whatever the app's.
Open question: whether the CIRSOC 301 panel shows each member's utilization as an experimental result.
From a first user's model
A scaffold model sent in by someone using Stabileo for the first time showed four things the app could have said or prevented:
Modelling in PRO: results, selection, drawing
Tests and gates
check:gate; the new PRO folders are guarded.pro-analysis-rulesandpro-project-workbookare@smoke(CI never ran them); the optimiser e2e asserts proposals and the depth limit.it.failshas its known wrong value bounded beside it; baselines hold a residual to the scale of its loads.Not changed
QA