Sign in

What’s new in Axomek 0.2.7

In short

Axomek 0.2.7 is a correctness release: bearings, gears, worm pairs, ball screws, springs, splines and plastic gears were checked again against their standards and worked examples. Some results change when a saved project is solved again; the notes below say which, and by how much.

  • New bearings start realistic. A bearing added now starts with the oil of an oil bath without a filter (cleanliness class 6 of ISO 281) instead of very clean oil, and with a required life (20 000 h) and static safety (1) that are checked from the start. Its modified life is therefore shorter: a 6207 at 3 kN and 1500 rpm rates 8 992 h instead of 52 950 h. Bearings in saved projects keep their settings.
  • Bearings at light load. A bearing without load is solved, and its life reads “not limited” instead of a huge number. Lightly loaded angular contact and high-speed bearings are balanced ball by ball or refused, never rated from an unfinished solve, so some of their lives are shorter (a 7207 B under 100 N axial and 115 N radial: −29 %).
  • Hybrid bearings with ceramic balls or rollers are rated after ISO 20056, so their static load ratings rise (a 6208 size from 13 010 N to 17 093 N). Hybrid spherical and tapered roller bearings, which the standard does not cover, get a warning.
  • Gear load spectra follow ISO 6336-6: beside the damage sum, each gear has a static safety at its highest load, and the lower one governs. Some spectrum safeties drop (in one example, wheel pitting 0.761 → 0.606). Oil thicker than 500 mm²/s no longer raises the pitting strength further.
  • Planetary sets. A helical planet loads its bearing with the tilting couple of its two meshes, so helical planet bearing lives are lower than before. The load sharing factor Kγ now comes from published values for 2 to 12 planets.
  • Plastic gears follow VDI 2736-2 and reproduce its three worked examples; POM and PA66 take their strengths from its curves over temperature and load cycles.
  • Worm pairs and ball screws. A worm pair’s forces come from its mesh, and the simplified cooling method is refused below 63 mm centre distance, where it does not apply. A preloaded ball screw nut is rated correctly after it lifts off, and a ball screw can take its ball pitch circle diameter Dpw beside the nominal d₀.
  • Springs, shafts and splines. Spring wire strengths come from EN 10270-1:2024, up to 8.5 % lower than before from 4 mm wire up. The steel 30CrNiMo8 takes its DIN 743-3:2024 strengths (1030/850 MPa instead of 1250/1050). Involute splines take their flank engagement from ISO 4156, which raises the flank pressure of splines with few teeth (about 11 % at 6 teeth).
  • Warnings are warnings. A check that only warns has its own amber status. It is counted beside passes and failures on the Overview, in the module pages, in reports and on the command line, and the Projects screen can filter for designs that pass with warnings.
  • Entering data. Typing a catalogue designation offers to replace the bearing with that preset. A number like “1,500” that reads two ways is refused with a hint instead of guessed. Inputs and results use the symbols their standards use, and a bearing turning at a different speed than its shaft offers a one-click fix.
  • Item names may no longer contain dots or brackets, which could put a result on the wrong item. A saved project with such a name is renamed when it opens (BR1.a becomes BR1_a), with a note listing every change.
  • Saving in the browser. The web app says what a save does, has Save as, and no longer suggests that changes are saved automatically.

Changes in detail

Results that change when a saved project is solved again:

  • File format version 3: ids hold no ., [ or ]. Those separate the parts of issue paths and check ids, so with bearings BR1 and BR1.speed bearings.BR1.speed read as BR1's speed: a refusal of the planet bearing BR1.speed cleared BR1's results and left BR1.speed's checks (a false pass), and shafts.SH2.x.maxDeflection was taken as SH2's. Opening a file of version 2 (0.2.6 and before) renames every such id, _ for each of those characters (BR1.speed → BR1_speed, with _2, _3, … when that id is taken), in every list (shafts, their sections, supports, loads and notches, and every module's items), with every reference to it: supports' bearing and housing, planetBearing, fits' housing, the shaft of gear seats, pulleys and rotors, load cases' factors and the report's contents.exclude. The renames are said on opening (notes of the opened file; axm warns idsRenamed) and kept by the first save (the original stays as <file>.bak). Commands refuse such an id where it is given (id, newId, patch.id, code invalid, hint "use BR1_a"); a file of version 3 that holds one all the same is refused at its list (bearings, shafts, naming the id) and that item, or that shaft, is not rated. Issue paths and check ids are read exactly, <list>.<id> followed by ., [ or the end, by the engine and the app alike.
  • Plastic gears follow VDI 2736-2:2014 where they had departed from it (checked against its worked examples, see Plastic gear references): the root safety is σFG/σ_F with σ_FG = 2·σ_FlimN (eq. 13; it was σ_FlimN/σ_F, half the guideline's, against the same required 2), so every root safety doubles; the wear spreads over the active flank, from where the mating tip reaches (eq. 20; it started at the root form circle, a longer flank), so wear rises, by 2 to 16 % in the template and the examples (A1's wheel flank 12.97 → 11.21 mm); dry plastic pairs take Table 2's friction, 0.28 POM/POM, 0.40 PA/PA, 0.18 POM/PA (all were 0.30; other pairings keep 0.30); the root heat transfer factors are Table 3's 900 and 2100 (were 895 and 2148, Annex B's unrounded values); and oiled pairs take kϑ 0 (Table 3, circulating oil), so their teeth run at the oil temperature plus the housing's share (they took the dry values). With the next item, the plastic gears template: PL1 wheel root safety 6.302 → 12.56, wear 0.009744 → 0.01051 mm; PL2 (dry PA66 on POM, μ 0.30 → 0.18) flank temperatures 47.86 / 35.43 → 37.92 / 30.46 °C, root safeties 4.866 / 6.353 → 9.523 / 12.58, wear 0.03256 / 0.005606 → 0.03335 / 0.006025 mm, tip deformation 0.01413 → 0.01377 mm. The results add rootLimitStrength (σ_FG); rootStrength stays σ_FlimN.
  • The built-in POM and PA66 take their root strength σ_FlimN, and PA66 its flank strength σ_HlimN, from VDI 2736-2's curves (Bild 3 and Bild 6: greased or dry, oiled) instead of the table's typical values with a two-point cycle curve; beyond 10⁸ load cycles they stay at 10⁸ (continuous operation, with a note) where the table's went on falling to 10¹⁰. The strengths change both ways: cool teeth and short lives come out a little stronger (PA66 at 20 °C and 10⁶ cycles 45 → 49.5 MPa, POM 50 → 50.2 MPa), warm teeth and long lives clearly weaker (POM at 100 °C and 10⁸ cycles 20 → 11.1 MPa, PA66 at 60 °C and 10⁷ cycles 29.0 → 23.9 MPa, at 100 °C and 10⁸ cycles 18 → 10.2 MPa). PA66's flank strength rises (20 °C, greased: 50 / 34 → 71.7 / 39.6 MPa at 10⁶ / 10⁸ cycles). In the template it lowers the root safeties by 0.3 to 3.4 % (in the item above). Own material data, POM's flank, the moduli, PA66 GF30 and PEEK are unchanged.
  • A gear pair's load spectrum is rated as ISO 6336-6 rates it, and is never safer than its worst bin at its static strength. Its safety is the lower of two: the fatigue safety, the factor on all stresses that makes the damage sum 1 (5.4), and the static safety σstatic/σ at the spectrum's highest stress (5.1, C.3), which was not checked. Above the static strength (the first knee of the S–N curve, where the life factor stays at its static value down to the first cycle) the curve goes on with its own limited life slope (Annex C, formulae (C.8), (C.12)), not the slope of 1/20 it took, so a short or heavy spectrum came out safer than the static rating of its own bins. The results add contactFatigueSafety, contactStaticSafety, bendingFatigueSafety and bendingStaticSafety per gear (contactSafety and bendingSafety are the lower of each, as checked), and each check's message says which governs. The steering pilot's spectrum of one bin at the pair's own load over 1 h: pitting safety 0.933 / 0.917 → 0.790 / 0.606 (static, the pair's own; by the damage sum 1.066 / 1.279), wheel root safety 2.270 → 1.888 (static; by the damage sum 2.928); its four bins over 2000 h: wheel pitting 0.761 → 0.606 (static; by the damage sum 0.902), the pinion's 0.754 as it was (by the damage sum), the damage sums at the nominal stresses 164 / 231 → 23.5 / 3.13. Beyond 10¹⁰ cycles an S–N curve whose enduranceLifeFactor is below 1 now keeps its last slope ((C.9), (C.13)) where it stayed flat: the gear pair template with 0.85 and one bin of 150 N·m over 4·10⁵ h (3.6·10¹⁰ pinion cycles), pinion pitting 1.285 → 1.235, root 4.306 → 4.197. Spectra whose bins stay below the static strength and within 10¹⁰ cycles (or with a life factor of 1 there, the default) are unchanged, and no template or saved test file has one that is not.
  • The gear rating's lubricant factor ZL takes an oil thicker than ν40 500 mm²/s at 500 mm²/s, the end of ISO 6336-2's range (2019 12.3.2.1.1, 2006 12.3.1.1), with a note; its formula went on rising. A pair of σHlim 1200 MPa or more (CZL 0.91) at ν40 680 mm²/s: ZL 1.094 → 1.077; the gear pair template at ν40 1000 mm²/s: pitting safety 1.501 / 1.619 → 1.454 / 1.567. Oils up to 500 mm²/s are unchanged, as are bevel pairs (ISO 10300-2 sets no such limit) and the templates.
  • Gear pairs: details.helixModification adds crowningForFma, crowning sized for the manufacturing misalignment alone (ISO 6336-1:2019 Table 12, case 2: B1 1, B2 0.5), beside crowning, now labelled as sized for fma and fsh (case 3: B1 = B2 = 0.5); on ISO/TR 6336-30 example 1 KHβ 1.128 against 1.080. The results add transverseLoadFactorUnlimited, KHα = KFα by method B before their limits (0.9595 for that example, whose factors are then 1). Labels only: the accuracy grade reads "ISO 1328-1:1995 grade" (its deviations follow that edition), the helix slope modification CHβ (fHβ is the helix slope deviation, helixDeviation), misalignment the mesh misalignment from deformation fsh and webWidth the web thickness bs; the JSON names stay. Results are unchanged.
  • Spring wire of the grades SL, SM, SH, DM and DH takes EN 10270-1:2024 Table 3's minimum tensile strength of the diameter row that holds the wire (lo < d ≤ hi), a step from row to row, instead of typical values at nominal diameters interpolated log–log, which lay above the 2024 minima from 4 mm up. From 4 mm up Rm falls, by up to 8.5 % (SM just above 18 mm: 1125 → 1030 MPa; SL rises by at most 0.5 %, just below 4.25 mm); below 4 mm it moves by −2.2 to +0.5 %. For example DH at 2.5 mm 1901.7 → 1900 MPa, SM at 4 mm 1550 → 1530, DH at 5 mm 1670 → 1660, SM at 10 mm 1290 → 1240, SH at 20 mm 1230 → 1160 (−5.7 %), SM at 20 mm 1100 → 1020 (−7.3 %). The permissible stresses and the estimated fatigue strength move with Rm: the spring set template's SP1 (DH, 2.5 mm) τzul 950.8 → 950.0 MPa, τc,zul 1065 → 1064 MPa, fatigue safety 1.341 → 1.340 (SP2 and SP3, 2 mm at a row's edge, are unchanged). DM keeps SM's values and DH SH's (the table gives them the same ranges); stainless 1.4310 (EN 10270-3) is unchanged. A diameter at or below 0.28 mm (SL 0.95 mm) or above 20 mm (SL 10 mm) is outside the table and noted, as before. Straightened and cut lengths may be up to 10 % lower (the table's footnote c, now in the help): give tensileStrength for them.
  • A plastic gear's own wear coefficient (pinionData.wearCoefficient, wheelData.wearCoefficient, mm³/(N·m)) above 10⁻³ is refused at its field, with the hint that VDI 2736 tabulates k_W in 10⁻⁶ mm³/(N·m) (enter 1.5e-6, not 1.5): a value typed from its tables wore the flank a million times too deep. The relative duty duty (ED) is now described as VDI 2736-2 defines it, the engagement time within any ten minutes over ten minutes (1 for running longer than that at a time), not a share of the day or the life: a project holding a daily share (0.33 for 8 h a day) understated its temperatures and should take 1. The built-in wear coefficients, the templates and the results are unchanged.
  • A helical planetary set loads its planet bearing with the planet's tilting couple. The sun mesh pushes a helical planet axially one way and the ring mesh (its other flanks) the other way, Fa = Fbt·tan βb each at the two pitch points; the forces cancel, but their couple Fa·(rw1 + rw2) about the tangential axis was dropped, and the planet bearing carried the pin load alone. It now takes the couple as a moment (my, mz beside the pin load), scaled with the torque in each load case. A 21/30/81 × m2.5 set with β 15°, three planets and 400 N·m on the sun puts 1446 N and 112.3 N·m on each planet: its single needle row (K 45x52x27, 10.8 kN pin load) had a basic life of 2949 h and static safety 7.46, and now 90.7 h and 1.87. A single self-aligning planet bearing (a spherical roller bearing) cannot carry the couple: such a set is refused at the bearing's bearingType with what carries it, and the bearing is not rated (a 22208 under the planetary template at β 15° passed with 145 502 h and s₀ 8.41, the couple dropped). Planet bearings of spur sets are unchanged, as is the planetary template (spur). A planet's mass for its centrifugal force now takes out its bore (planetBore, or the planet bearing's mounting outside diameter): a few per cent less pin load at speed for sets that give one.
  • A worm pair's forces are the mesh's: the worm's tangential force Ftm2·tan(γm + ρz) and the radial force Ftm2·tan α0/cos γm (DIN 3996, as the worm's deflection already took them). They came from the worm torque, which also carries the idling, bearing and seal losses, so they were too large, most at light load: the worm-drive template's worm Ft 1181 → 1092 N and radial force 1968 → 1811 N; the steering pilot's small pair at 14.39 N·m worm Ft 189.4 → 125.0 N and radial 237.0 → 153.2 N. The worm torque (with all losses), efficiencies, losses and deflection are unchanged. The text output now gives the lubricant and the cooling method the rating took, and the overall efficiency wheel driving, with a note when it is 0 (the idling, bearing and seal losses take all the mesh passes back, as on small pairs at light load); idleLoss takes a measured idling loss instead of DIN 3996 Gl. (37), in the losses and in the oil temperature by heat balance (with DIN 3996 method C, which fits the temperature to the torque and speed alone, it is refused at idleLoss).
  • A worm pair below a centre distance of 63 mm is refused with DIN 3996 method C's oil sump temperature, at worms.<id>.cooling.method, with the heat balance in the hint. Method C's fit holds for 63–400 mm; below, with a fan, its load term (a − 48)^0.34 is 0 from 48 mm down, so the steering pilot's 43 mm pair came out at 43.03 °C for any torque from 2 to 120 N·m and passed the thermal check with S_T 2.32, where the heat balance gives 166–420 °C. Such a pair was only noted as outside the range; it now has to be rated by heat balance (or injection). Pairs of 63 mm and more are unchanged, as are the templates. The worm and plastic gear help now say that plastic worm wheels are not covered (DIN 3996 rates bronze and cast iron wheels; VDI 2736 Part 3 would be needed).
  • A preloaded ball screw nut's ISO 3408-4 rigidity above its lift-off force. A preloaded double nut was rated at its preload (eq. 35) whatever the load, so a light preload made it far softer than no preload: with 1 N of preload and 4039 N of load the screw had 23.14 N/µm (nut 29.76 N/µm). When the largest load exceeds the lift-off force 2.83 × the preload, the loaded half now carries it alone and is rated as a nut without preload at that load: 72.52 N/µm (nut 239.4 N/µm), and 100 N and 500 N of preload go from 59.05 and 71.74 to the same 72.52 N/µm. A nut that lifts off under a load not far above that force comes out a little softer than eq. 35 rated it: the linear-axis template's screw (preload 600 N, 3500 N step, lift-off at 1697 N) 77.59 → 75.86 N/µm (nut 245.3 → 228.8 N/µm); that template now has a preload that does not lift off (see below). Below lift-off nothing changes. The results, the report and the app say at which load each rigidity is taken.
  • New warnings for ball screws: a preloaded nut whose largest load lifts one half off (above 1.70 × the preload once run in, as the ISO 3408-5 life takes it; 2.83 × when new), an entered Ca more than 10 % above the rating of the ball geometry, and a root diameter d₂ more than 5 % below the bottom of the geometry's gothic-arch groove (Dpw − 2·(√(r² − e²·sin²α) − e·cos α), r = fs·Dw, e = r − Dw/2) or above its core diameter dc = Dpw − Dw·cos α (Dpw the ball pitch circle, d₀ unless given; the critical speed and buckling take d₂ and E 206 000 MPa, the rigidity the core and 210 000 MPa, both now stated). A first version compared d₂ with the core diameter and suggested it as the root: a 28 × 7 screw with 3.969 mm balls (conformity 0.55) and its real root 23.9 mm was told "about 25.19 mm", which put its buckling load about 15 % and its critical speed 4 % too high; its groove bottom is 23.92 mm, and the hint now names no diameter. The linear-axis template had the lift-off and the rating warnings and now has neither (see below). A preloaded nut with one circuit is refused at screws.<id>.geometry.circuits with a hint (set 2 or more, or preload 0), and axm check gives the reason beside "not computed".
  • The calculation report's gear pairs list every factor of σH, σHG, σF and σFG per gear (ZB/ZD, ZNT, ZL·ZV·ZR, ZW, YF, YS, YB, YNT, YδrelT, YRrelT, YX, Yβ, YDT, KFα and the products the limit stresses take in the limited life range), so the stresses can be reproduced, and the deviations the rating took with their source (the grade or entered). The stresses shown as "permissible" are labelled as what they are, the limit stresses σHG and σFG that the safeties divide; the report adds σHP = σHG/SHmin and σFP = σFG/SFmin. A pair outside ISO 1328-1's ranges of module, diameter or face width notes that the deviations come from its last range. The helical contact factor fZCa can be set in the app. Results do not change.
  • A helical pair (ISO 6336-2:2019) counts as modified for ZB and ZD (fZCa 1.07 instead of 1.2) only when a modification takes material off: tip relief above 0, or a flank modification (pinionModifications, wheelModifications) with an amount other than 0. Flank modifications whose amounts are all 0, as the app leaves them when a tip relief is typed and set back to 0, counted as modified: the gear pilot's pair had ZB 1.034 instead of 1.095 and σH 910.6 instead of 964.3 MPa (6 % low) with nothing modified. Such pairs now rate as unmodified (higher σH, lower SH); a given details.helicalContactFactor still holds. No template or saved test file has such modifications.
  • A planetary set's planet root safety with reverse bending (YM 0.7) is in its results for both meshes; the note on the default KHβ of a set says to give the carrier, not a pinion shaft layout.
  • A check whose utilisation comes from a value of 0 (a minimum against a safety of 0) shows "> 999 %" in its message, the report and the app, where it printed a number of about 300 digits; an unlimited one shows ∞.
  • For agents, all additive: gears[].result.deviations (singlePitch, basePitch, profileForm, helixSlope, runningIn, µm, and singlePitchSource, profileFormSource, helixSlopeSource: "grade" or "entered"); planetaries[].result.axialForce, tiltingMoment (N·mm), planetBendingSafety [sun mesh, ring mesh] and reverseBendingFactor; the inputs planetaries[].planetBore (mm) and worms[].idleLoss (W); screws[].result.iso.rigidity.load (N) and liftedOff; gears[].result.pinion.rootFaceWidth and wheel.rootFaceWidth (mm, the width the root stress takes: the gear's own, at most the narrower + 2·mn, which the report now prints so its factors give σF); axm check --json rows incompleteErrors ("path: why" beside incomplete); warnings at screws.<id>.preload, dynamicRating and rootDiameter; the preloaded nut's circuits error at screws.<id>.geometry.circuits. A gear spectrum's contactDamage or bendingDamage can now be "inf". The meaning of permissibleContactStress and permissibleRootStress is unchanged (σHG and σFG, now documented as such).
  • New bearings start as their starter lubricant is: an oil bath, so the cleanliness class 6, "oil without on-line filter, ISO 4406 −/15/12" of ISO 281, Annex A, instead of class 10 ("grease, high cleanliness", whose constants are those of very clean oil, class 5), and with the limits minLifeHours 20 000 and minStaticSafety 1, so that their life and s0 are checked from the start (axm config defaults still replace them). This is the starter's, not a default of the file: saved bearings keep their class and limits and their results. A 6207 at Fr 3 kN, Fa 500 N, 1500 rpm, ISO VG 68 at 70 °C added now has eC 0.21, aISO 1.44 and 8 992 h (it fails the new 20 000 h); added before, 52 950 h at class 10. The examples' bearings take class 5, which rates as their class 10 did, so their results do not change; each such example says so in its description (very clean oil, ISO 4406 −/13/10, class 5, not a new bearing's class 6). lubricant.cleanliness is 1–14 in the schema, and the classes carry their names in axm solve, the report and the field help: the oil classes by their ISO 4406 codes alone, as Annex A gives them (a first version added level names said to come from ISO 281's Table 13, which gives none for them; ISO/TR 1281-2 calls an oil bath at −/15/12 slight contamination, where the name said normal cleanliness). The report's and axm summary's verdicts name the bearings whose life or s0 no limit checks.
  • New shafts (a blank project, axm new without a template, addShaft) start with the material C45 +QT (EN 10083-2, quenched and tempered, σB 700 / σS 490 MPa at 16 mm, the strength check's general shaft steel) and its DIN 743 strength check (Rz 6.3 µm, 1 mm fillets, safeties 1.2), so their strength is checked by default; before they were the generic "Steel" without strength values and no check. Templates and saved files keep their materials and results; a shaft of the generic "Steel" without a strength check now has a warning at strength saying it is not checked and how to start the check. The tutorials that start from a blank project count the two strength checks.
  • A warning-only check has its own status, warn: the thermal speed nθ without limits.permissibleTemperature and the minimum load of a bearing that a preload or axial load holds. They passed before (with a utilisation above 1, which axm summary and the app's overview counted as failing); now axm solve marks them WARN, the report WARN (amber), axm summary's verdict is warn ("pass with warnings") when one warns and none fails, and the app's overview, bearing list and results show them as warnings, the bearing results' bar of a maximum (the thermal speed) as the share used, "of max". They still fail neither --strict nor a sweep row. The spindle template has three such warnings (both bearings' nθ at 12 000 rpm, BR2's minimum load held by its preload): its summary verdict was fail ("11 pass, 3 fail") and is now warn ("11 pass, 3 warn").
  • A bearing's static contact stress limit (ISO 76), and with it C0 and s0, is lowered for rings or elements softer than 58 HRC by HV/HV(58 HRC), the Vickers hardness of ISO 18265's table, which for balls is ISO 3408-5's static hardness factor fH0 = (HV/654)³ that the ball screw module takes; before, only C was reduced (by (HRC/58)^3.6) and s0 at 54 HRC was that of a hardened bearing. The 6207 template at 54 HRC: limit 4200 → 3711 MPa, C0 15 298 → 10 554 N, s0 7.669 → 5.291. The reference solver's rules ("rules": "original") keep the limit. Bearings at 58 HRC and harder are unchanged.
  • Shaft loads may take a negative factor in a load case (a reversing load): it was refused at loadCases.<i>.factors.<id>, while the solve used it anyway. A four-point contact bearing under ±3, ±6 and ±12 kN cases had an error and 297.6 h over the cycle; it now validates with the same 297.6 h. Gear pairs', drives', rotors' and unlinked bearings' factors stay 0 or more.
  • With a duty cycle, a bearing's life over the cycle is its headline life everywhere: axm solve's first line ("L10mr 297.6 h over the duty cycle (…; as entered L10mr 42059 h)"), the report's results, the summary page, the app's bearing list, shaft drawing, overview and support cards (as the life check already took it).
  • A bearing that cannot be solved (its shaft, a load case or its planetary set cannot be) has no friction, film, thermal speed or maintenance results and no powerLoss item: a planetary set whose pins miss the carrier added 27.72 W from the planet bearing's placeholder 3000 N at 1500 rpm, now 0. A planet bearing's powerLoss item is at the speed it was solved at (the planet's relative to the carrier) and counts one bearing per planet: a 3-planet stage with a needle bearing in each planet lost 66.78 W "at 1500 rpm", now 3 × 66.78 = 200.3 W at 1668 rpm. Sums of no losses are 0, not −0.
  • Linking a bearing to a support (addSupport/updateSupport with bearing) clears its own loads, so a preset's starter loads (Fy 3000 N) neither stay nor come back when it is unlinked; the examples' linked bearings have none. A bearing linked to nothing beside a shaft that still carries its preset's starter loads gets a warning at bearings.<id>.loads.
  • A bearing on a shaft whose speed the power flow knows that turns more than 1 % off it gets a warning at bearings.<id>.speed with the fix; mounting a gear pair (or onto other shafts) and putting a drive between shafts gives the driven shaft's bearings its speed (the command says which). Saved projects keep their speeds; the warning tells where they differ.
  • The cross-located pair's preload check axialPreload fails when a bearing of the pair lifts off (before it could pass "keeps 500 N of its 500 N preload" with the gap open) and when a locating bearing could not be solved. Two single angular contact ball bearings linked to shaft supports were refused by validation (their stand-in load had no axial part); they are now accepted, as single tapered roller bearings were.
  • Labels: the lives from the element loads are the basic and modified reference rating lives L10r and L10mr of ISO/TS 16281 (at the chosen reliability: L5r, L5mr, …) in axm solve, the report, the app and the life check's message ("L10mr modified reference rating life of BR1"), where they read "Basic rating life" and "L10 life"; the system line gives the bearings' reliability. ISO 281's own basic rating life (C/P)^p at its P = X·Fr + Y·Fa and ISO 76's P0 = X0·Fr + Y0·Fa with C0/P0 are added for comparison (angular contact Y0 by the contact angle, linear between ISO 76's rows: 0.46 at 15°, 0.26 at 40°) (the 6207 above: L10 6577 h against L10r 6233 h; C0/P0 5.10 against s0 6.28 from the contact stress); s0 is labelled "from the contact stress". The film verdict is one: κ (ISO 281, for aISO) and the film model's λ are worded so that they no longer read as contradicting ("Viscosity ratio is adequate for the rating life …; the film model's λ above still says wear is likely"), and the report lists the life drivers that warn under Warnings.
  • A bearing on a shaft support where the shaft slopes (0.1′ or more) has a note that the slope is not applied to it without settings.bearingCoupling (the guide said a shaft bearing always takes its tilt from the shaft); results are unchanged.
  • A bearing catalogue import refuses rows whose computed C is more than 10 % off the catalogue's (C0 25 %), more often C in kN than the bearing, unless acceptDeviations (--accept-deviations); reads Pu (the maker's fatigue load limit, the bearing's new fatigueLoadLimit, which aISO then takes instead of the computed Cu) and limitingSpeed (the new limits.limitingSpeed, checked as bearings.<id>.limitingSpeed); imported bearings have no probe loads (they were loaded with 5 % of C) and the starter limits, and their note says the geometry is estimated from the catalogue row. The app's "Mark as exact" appears only once the geometry differs from the preset's.
  • replaceBearingPreset (axm bearing replace FILE ID PRESET) makes a bearing another preset, keeping its id, name, links, loads, speed, lubricant, limits and fits (the high-speed model only for a ball bearing: a 6207 with highSpeed replaced by an NU 207 stays valid); updateBearing with only a designation that names another preset is refused with that command in the hint (it kept the old geometry and ratings: a 6206 renamed 6306 kept C 19 094 N). In the app, choosing a preset for a support whose bearing nothing else uses replaces that bearing instead of adding a second one.
  • A planet bearing shows the operating point it is solved at (the planet's speed relative to the carrier, the outer ring turning) in axm solve, the report and the app, where its own 1500 rpm and inner ring showed; its speed field is not editable.
  • Four-point contact bearings label their two "rows" as contact pairs in the app, whose contact stress chart shows both. The report's shaft charts mark the largest deflection, bending moment and stress where the results give them (inside an element, not the nearest node), and its methods give Cowper's shear coefficient.
  • A bearing no external force reaches (a support the shaft's loads miss, a bearing without loads of its own, a load case without load) is solved as any bearing, at a negligible external load (0.001 N in a direction its type takes: axial for single angular contact, tapered roller and thrust bearings, else radial), where it was set to unlimited life, no stress and no friction without a solve. Whatever loads it all the same and whatever needs no load now comes from that one solve: a 7207 B pair preloaded to 10 kN had zero contact stress and passed 20 000 h, it now has about 2 080 MPa and 1 930 h and fails; a high-speed 6207 at 60 000 rpm, loaded by its balls' centrifugal forces, now has about 1 810 MPa and 22 000 h and fails 30 000 h; the same bearing without high-speed rating had no power loss, now about the 2.7 kW of its friction, with its heat balance, thermal speeds and their checks. A bearing nothing loads at all has the life the solver gives at that load, far beyond any requirement (check messages call a life over 10¹² h "not limited"; the value stays the solver's, not "inf"), next to no contact stress, its life drivers and a note saying it is solved at a negligible load. What is a function of the external loads is that of no load, never of the negligible one: its reported loads, ISO 281's P and ISO 76's P0 are zero (their life and safety unlimited), the friction's load terms (Palmgren's, DIN 732's P1) are those of no load, and its minimum load check holds a load of zero, held only by a preload (a 6207 or a 7207 B all but standing, whose minimum is below 0.001 N, still fails).
  • A bearing no external force reaches is solved with its inner ring held square, so every one solves. On a shaft support, where the ring is free to tilt, a deep groove ball bearing whose negligible load one ball carried (or two either side of the load line) could not be balanced ("could not reach equilibrium"). With clearance its ring rocked freely, because the ball's axial force and its moment about the tilt axis both come from the one contact angle, and the solver wandered until the opposite ball touched. The electric motor template's 6309 without its rotor failed this way (residual 100.6× tolerance), and so did 15 other deep groove presets and the gearbox templates' BR1 (intermediate) and BR4 (two-stage) once nothing loads them. Held square, the elements' moment on the ring is nil. A ring that a preload or fit loads all round settles square anyway, so it is unchanged. An unloaded high-speed ball bearing keeps the high-speed model (its balls balance, see the ball balance below), except a thrust ball bearing: without an axial load nothing holds its balls in their grooves against their centrifugal force (the catalogues' minimum axial load), so it has no physical ball position at speed and is solved without the high-speed model, as its note says. Loaded bearings are unchanged. An unloaded bearing that already solved with its ring free changes only in what the negligible load gives, as its ring had been left tilted wherever the solver stopped.
  • The high-speed ball model balances every ball, or the bearing fails (NotConverged: "the high-speed model could not balance N balls …", hint: more axial load or a preload). A ball's own balance (its two contact forces, its centrifugal force and the outer raceway friction that holds its gyroscopic moment) had no failure return: whatever its Newton iteration reached went into the element loads, contact angles, stresses, lives, P, s0, cage speed and stiffness, with no error or note. Two cases were off. A ball the centrifugal force keeps off the inner raceway was set at αo = 0 with Qo = Fc, its friction left unbalanced (61.6 N per ball on a 6207 at 60 000 rpm); it now balances it on the outer raceway alone, Qo = Fc·cos αo at sin αo = f/Fc (αo = −3.75° there; L10 under 3 kN radial 78.22 → 78.25 h). And Newton's steps had stalled on the lightly loaded balls of angular contact bearings, leaving them with no inner load and some 0.45 N (70 % of Fc) unbalanced, where they carry 0.6 to 2 N at αi 46° to 63° and αo 24° to 32°. Each ball is now solved with the friction held as the minimum of a convex energy (from up to four starts, to 1e-10 of its loads, both contacts within 90° of the line of the groove centres), and a balance that turns the cage outside standstill to shaft speed is refused as well. A 7207 B at 1500 rpm under Fa 100 N + Fr 115 N: L10 7.40·10⁷ → 5.25·10⁷ h (−29 %), P 139.7 → 156.6 N, s0 124.5 → 104.5, stiffness radial 41 731 → 42 189 N/mm, axial 30 493 → 27 634 N/mm, tilt 1.090·10⁷ → 0.987·10⁷ N·mm/rad; under Fa 300 + Fr 340 N L10 −9.1 %; under Fa 1000 + Fr 1150 N L10 −1.6 % and Lnm −2.8 %; a 7207 B DB pair under 2 kN radial L10 −1.2 %. Loads it refused ("could not reach equilibrium") now solve: a 7207 B at 1500 rpm under 50 N axial, a 3207 at 3000 rpm under Fa 500 N + Fr 1000 N. The spindle template changes by under 1e-8. A thrust ball bearing at speed under too light an axial load is refused (a 51107 at 20 000 rpm under 0.001 N; 1 kN solves), where its contacts would run round past the grooves' sides.
  • The bearing equilibrium holds an unknown the loads do not depend on (its Jacobian column rounding beside the others') instead of stepping it on rounding. A deep groove ball bearing whose light radial load one ball on the load line carries (an even ball count) has two: Fz and the tilt about y do not change with z and that tilt. With its ring free to tilt (on a shaft support) it had failed ("could not reach equilibrium") for 35 of the 64 deep groove presets somewhere between 0.001 and 50 N (106 of the 1 024 preset and load pairs from 0.001 to 5000 N), patchily (a 6309 at 0.001 and 1 N, not at 2 to 20 N); every one now solves from 0.001 to 5000 N, the ball on the load line carrying the load square, and so do high-speed deep groove bearings at 20 000 rpm under a negligible load (an imported 12-ball 35 × 72 had stalled 1.4× its tolerance). A ring free to tilt that the solver still cannot balance under loads without a moment is solved held square when that is an equilibrium of the free ring too (the elements' moment on the square ring within ten times the equilibrium's force tolerance at the pitch radius), and its note says so: a 6000 with 0.0515 mm clearance at 1500 rpm with the high-speed model from 4.5 kN radial. Bearings that solved before are unchanged (every template but the spindle to ten digits).
  • A load case of the duty cycle solved otherwise than the bearing as entered says so in its result (duty.cases[].note: without load, at the negligible load; its ring held square; without the high-speed model), and the bearing warns naming the case; the minimum load is checked in every case: a case that fails or warns where the loads as entered pass takes the check, named in its message. A 51107 with the high-speed model at 20 000 rpm under 1 kN axial, half the time without load, passed every check with no note, its idle case solved without the high-speed model at a life of 3.35·10²³ h; its minimum load check now fails for the idle case (0 N: the balls skid). A case at standstill (speed 0) does not roll: it is left out of the minimum load and heat balance checks (it had been solved at the numerical standstill speed of 1e-6 rpm and failed the minimum load), its static safety still counts, and its note says "stopped: rolling checks do not apply"; a case turning slowly without load (10 rpm) still fails the minimum load.
  • A bearing that overheats in a load case (no heat balance found) fails the heatBalance check over the duty cycle too, the message naming the case: the duty cycle's checks had dropped it. A bearing linked to nothing with no loads was refused before ("at least one force or moment must be non-zero"); it is now solved this way.
  • Already so, now tested: a bearing past the shaft's end or across a diameter step fails its seat check (supports.<id>.bearingSeat), so the verdict and --strict (exit 4) catch it.
  • A life of 10¹² h or more reads "not limited" in axm solve's bearing, duty-cycle and system lines, in axm summary and in the report (results, summary page, system life), as the check messages already did, and a static safety of 10⁶ or more too (also in the s0 check's message): an unloaded bearing printed "L10mr 63,165,354,148,207,580,000,000,000,000 h" and "s0 2679981". The JSON keeps the solver's numbers. A bearing given no loads at all (none of its own, linked to no shaft support or planetary set: just added or imported) has its minimum load check warn ("… has no loads, so its minimum load is checked once it has them") instead of failing, so its verdict no longer reads "requirements not met"; a bearing its shaft leaves unloaded still fails it.
  • Power loss: the gear stages whose losses are not computed (planetary sets, bevel and plastic gear pairs, worm pairs, whose losses are in their own results, and gear pairs that could not be solved) are named instead of showing "gears and drives 0 W": axm solve ("gears and drives not computed for PG1"), axm summary ("power loss: 196 W, without PG1: their losses are not computed") and the report, whose power-loss table lists them as "not computed" with a note, and shows a planet bearing's loss as "× 3 planets" with its friction torque "each". The numbers are unchanged.
  • A planet bearing must fit in its planet: one whose outside diameter (its mounting's, else its preset's, else at least its outer raceway Dpw + Dw) reaches the planet's root diameter is refused at bearings.<id> with both diameters, and so is a planetBore at or past the root, at planetaries.<id>.planetBore. A 22208 (Ø80) in a planet of Ø77.6 and a 6207 (Ø72) in a root of Ø68.75 were accepted and rated. A planet bearing whose planetary set validation refuses (any error at planetaries.<id> or below) is not rated from it either: it has the error "loads come from planetary set …, which cannot be solved: <path>: <why>", no results and no checks, as a shaft is not rated from a refused element.
  • One name per life: the life check's requirement says what it checks (limits.minLifeHours is the required L10mr, the field help says so), axm diff and the report's change section name bearings.<id>.life (L10mr), basicLife (L10r), staticSafety (s0) and systemLife (L10mr), the sweep table's column is "BR1 L10mr [h]" (at the bearing's reliability: "BR1 L1mr [h]" at L1), axm summary says "system life L10mr", the report's summary page "modified reference rating life L10mr". The film regime is one classification (boundary below λ 1, mixed from 1 to 3, full film from 3): the life driver called λ 0.92 "mixed lubrication" while the film row said boundary; it now says "boundary lubrication (λ below 1)", and axm solve and the report write the regime in words.
  • Engineering text without program names: the note of a bearing whose shaft's slope is not applied names the app's switch ("turn on Couple linked bearings"), the shaft strength warning, the cross-located supports' axial stiffness and the torque balance hints say it in words (no axm apply …, axialStiffness, "torqueMode": "balance"), the report writes a material's treatment, an FKM material group, safety class and load probability in words ("quenched and tempered", not "QuenchedTempered"), and the field help of bearingType lists the 14 types (it said "1–12, see [BEARING_TYPES]"). Where one command fixes an issue, it is in the issue's new command (the CLI prints it as "run: …") and as a project command in fix.
  • A new shaft's default inputs are said: axm new without a template notes (text and notes) and addShaft says that the shaft starts with the default material and strength inputs (C45 +QT, DIN 743 at Rz 6.3 µm, 1 mm fillets, safeties 1.2), and the report's shaft inputs say so while the shaft still has them. The verdicts' "not checked (no limit set)" also lists a shaft without a strength check or without a deflection limit ("strength and deflection for SH1", or "static strength" when DIN 743 has only its fatigue safety), by the same rule that decides which strength checks run (FKM always runs both); results are unchanged.
  • axm solve --units imperial (and axm describe, axm parts) converts every number from its exact value, padded columns included, not from the four figures of its metric text: a 6207's C reads 4,292 lbf (it read 4,293 lbf from "19090 N"), and Pref, p max and the parts' masses read as axm report --units imperial and the app have them. An issue's path and command stay as written, as program text: a shaft named "SH 35 mm" keeps its name in the command, which would not run converted.
  • replaceBearingPreset (axm bearing replace) also renames what named the old designation: the bearing's name ("Left 6206" → "Left 6306") and the linked support's designation, and says so in its message.
  • A bearing's speed off its shaft's in the power flow: the warning's hint says the speed in words, its fix is the updateBearing command and its command the axm apply of it (on stdin), for the app to offer as a button. Bearings still keep the speed mounting copied to them; making them follow their shaft's speed is left for a later release.
  • A bearing added or updated with its internal geometry (pitch diameter, element diameter and count) is no longer marked as estimated (the "geometry is estimated" warning stayed), and one added from a preset with a geometry other than the preset's does not keep the preset's designation ("added bearing BR1 (Needle roller bearing, its own geometry; the rest from the 6207 preset)", where it said "6207 deep groove ball bearing"). A catalogue import refused for its ratings says whether they came from the geometry given or the estimated one.
  • The ISO 76 tables are cited as Tables 2 and 3 (they read 2 and 5) and the cap of κ at 4 for eC as ISO 281, 9.3.3.2 (it read 9.3.3.4).
  • The worm's deflection is DIN 3996 Gl. (101) as printed, now documented (help, methods): its constant holds a steel worm's modulus, so wormModulus does not change it, and 1.1·df1 is its equivalent diameter, which makes it 0.676 times a simple beam of df1, as the worm pilot found. Results do not change.
  • A planetary set's default load sharing factor Kγ now has its sources: 1.10, 1.25, 1.35, 1.44, 1.47 for three to seven planets (IEC 61400-4:2012, 7.2.3.3, Table 3, as before), 1.16 for two (ANSI/AGMA 6123-C16 Table 7, level 1; was 1.10), 1.52 and 1.61 for eight and nine (AGMA level 2; were 1.50 and 1.53), 1.66, 1.71 and 1.75 for ten to twelve (ISO/TS 6336-20:2022 Formula (14), 1 + 0.25·√(N − 3), rounded to two decimals; were 1.53). Sets of two or of eight and more planets get a higher Kγ, so lower safeties and a higher pin load (conservative); three to seven, the template included, are unchanged. The help no longer suggests 1.0 for a floating sun: a lower value only when measured (AGMA 6123-C16 gives 1.00 only for two or three planets with a floating member and flexible mounts, 1.05 for three with a floating member; IEC 61400-4 asks for simulation and measurement below its table).
  • The linear-axis example shows good practice and has no warnings: its preloaded double nut has two circuits in each half (four), whose ISO 3408-5 rating per half stays above the catalogue's 30 kN, and a preload of 2100 N, which keeps both halves loaded at its largest step of 3500 N once run in (above 3500/1.70 = 2059 N). It had 600 N, which lifted a half off, and one circuit per half rated at 21.3 kN. Its screw's ISO 3408-5 life is 48 678 h (was 167 428 h: the halves now carry the preload in every step), its static safety 14.26 (17.14), the ball model's static safety 20.79 (13.01); it still passes all its checks.

Changes for agents (--json, MCP): checks[].status has the new value warn; axm summary's verdict.status the new value warn, verdict the new warned count (passed + close + warned + failed = checks) and unchecked (what no limit checks); axm check's rows add warned and warning (ids) and their passed no longer counts warnings (the row's status stays pass). Bearing reports add operating (speed, innerRingRotates), summary.iso281.basicLifeHours and summary.iso76 (x0, y0, equivalentLoad, staticSafety, atLeastRadialLoad, radialLoadGoverns); powerLoss bearing items add count (planets) and their speed is the solved one. New fields: bearings[].fatigueLoadLimit, bearings[].estimate (the geometry a catalogue import estimated), limits.limitingSpeed (check bearings.<id>.limitingSpeed); importBearings takes acceptDeviations; the command replaceBearingPreset {id, preset}. New warnings: bearings.<id>.speed (off the power flow), bearings.<id>.loads (unlinked on starter loads), strength (generic material, not checked). Changed messages: the life check's ("L10mr modified reference rating life of …"), the life drivers kappaAdequate, kappaLow and filmBelowRoughness (codes unchanged), the outcome of importBearings. A bearing no external load reaches has a finite modifiedLifeHours and staticSafety (no longer "inf"), a contact stress, lifeDrivers, a note about the negligible load and the life check message "is not limited against …" (any life over 10¹² h). axm check's worst, the report's summary page and the app's overview take the governing check as axm summary does: failing before warning before passing, then the highest utilisation (a warning far past its value, such as a minimum load of zero, no longer governs over a failure). Warnings beside the checks (validation warnings such as a ball screw nut's lift-off) reach the comparison views, all additive: axm check's rows add warnings (their paths; the text "7 of 7 pass, 2 warnings"), axm summary's verdict adds warnings (a count) and warningPaths (at most 10; the text names them beside the verdict, whose status does not count them), axm diff's results adds warnings with added and removed (path, message; matched by path and by the message without its numbers, so two warnings at one path are two; a warning that appears or goes makes the projects differ), and the report's front verdict says how many there are. Issues (issues, warnings, error issues) add fix (the project command that fixes it, where one does; for a further shaft's issue an onShaft command for that shaft) and, where the fix's JSON needs no escaping (only letters, digits, spaces and _ - . , : + { } [ ] "), command: echo '<json>' | axm apply <file> -, the JSON piped on stdin, the same in POSIX shells with any echo and in PowerShell 5.1 and 7 (5.1 drops the double quotes of a native program's arguments, never of what it pipes, which axm apply - takes with or without a byte order mark); ids or names with other characters (quotes, $, backticks, backslashes, non-ASCII) give none, and the hint says to apply the fix in the app or from its JSON; in cmd.exe, give the JSON as @file); their hints are plain words. axm diff's metrics add symbol (L10mr, L10r, s0; the new side's) and oldSymbol (the old side's: they differ when a bearing's reliability changed, and the text then gives each value its own, "L10mr 223,847 h → L1mr 55,962 h"). powerLoss adds transmissionLossComputed (false when a gear stage's loss is not in the sums) and notComputed (those stages' paths), axm summary's results adds powerLossNotComputed. axm new adds notes. Changed messages and text: the life driver filmBelowRoughness ("boundary lubrication (λ below 1)"), the minimum load check of a bearing given no loads (warn), axm solve's text (not limited, the regime in words, "run:" after a hint), the rootDiameter warning of a ball screw, the cleanliness classes' names (the oil classes by their ISO 4406 codes), the outcome of addShaft, addBearing with its own geometry and replaceBearingPreset. New errors: worms.<id>.cooling.method (method C below a 63 mm), bearings.<id> and planetaries.<id>.planetBore (a planet bearing or bore that does not fit the planet). App versions before 0.2.7 cannot show a summary whose verdict.status is warn (new in 0.2.7), such as one a newer version saved with a cloud project; project files are not affected. axm solve's text adds per bearing the reference-life line, an ISO 76 line, a cleanliness line and a note: line. updateBearing with a preset's designation alone and a refused import now fail with code invalid. A typed number (an argument, axm set, a field of the app) with one comma before exactly three digits, "1,500" or "29,000 ksi", is refused as reading two ways, with what to write instead ("'1,500' reads two ways: write 1500 or 1.5"): it was read as thousands, while "1,50" was 1.5, so a "0,500" typed as half was 500. A first group of 0 never groups thousands ("0,500" is 0.5); two or more groups or a decimal point still do ("1,500,000", "1,500.5", "29,000.0 ksi"). Files are saved with schemaVersion 3 (ids without ., [ or ], see Changes for existing projects): a version 2 file is upgraded on opening, with the ids renamed said in the opened file's notes (the engine's openProject) and an idsRenamed warning of axm; an edit that gives such an id fails with code invalid at that field.

  • Text and reports in US customary units convert each value from the value itself, then round it: they converted the four figures shown in metric, so an entered −450 lbf (stored as −2001.6997 N, shown "−2,002 N") printed as −450.1 lbf in the report's input tables, its preview, Word and PDF, and in axm describe. Every value entered in US customary units now reads back as typed (tested over many values and units), each number from its own value: two shown alike ("−2,002 N" for −2002 and −2002.4 N, in the two columns of "Changes since") convert each as it is. The field tips of the app no longer state the metric unit beside the unit shown, and the example values in them are converted ("7850 kg/m³ steel" is 490.1 lb/ft³ there).
  • The calculation report's methods and references are those of the modules in the project, at full detail too: a shaft's report listed the gear, bolt, spring, weld and plastic gear standards. It gives the shaft's deflection at each load ("Deflection at the loads", as axm solve prints it). "Changes since revision …" leaves the report's own settings out (adding a revision changed "inputs" there), names an added or removed item ("BR3 · 6306") instead of its JSON cut short at 60 characters, shows a list of values as its values ("30 mm, 40 mm", each converted in US units) and a group of a few fields by them ("faceWidths 30 mm, 40 mm"), and heads its columns by revision ("Rev. A", "Rev. B"). A gearbox shaft without a name is headed by its id alone ("Shaft SH1", not "Shaft SH1 · SH1").
  • The DXF drawing of a shaft says in its header that it is in millimetres ($INSUNITS 4, $MEASUREMENT 1): a 9 in shaft opened as 228.6 in in an inch template. The parts list's CSV in US customary units (axm parts --csv --units imperial, the app's export with US units) has its descriptions converted and a "Mass each (lb)" column after "Mass each (kg)", which stays; in metric it is unchanged. The app's parts table shows the descriptions in the units shown.
  • A sweep, axm diff and the design search know ball screws and worm pairs: the metrics screws.<id>.life, nominalLife, staticSafety, criticalSpeed, bucklingLoad, rigidity (with the ball geometry) and driveTorque, and worms.<id>.contactSafety, rootSafety, wearSafety, deflectionSafety, thermalSafety, efficiency and oilTemperature (axm optimize refused them as unknown metrics, axm diff showed no results for a screw). axm sweep's text shows the shaft's columns only for a project with a shaft (a worm pair's sweep printed NaN for each) and the screws', worms', gears', bolts' and fits' results.
  • axm check: a folder and a trailing ** take *.bsw.json files too (a folder of files saved before 0.2 was checked as empty). A file with fields this version does not know shows PASS* (or FAIL*) and names them under the table: they are left out of the solve, so an unknown limit such as settings.limits.minFatigueSafety is not checked, which a plain PASS hid. --strict makes such a file incomplete (exit code 3); without it the row only says so, as a file of a newer Axomek may hold data this version cannot use. A file that this version or an older one saved with such a field has a typo or was edited by hand: the message says so and names the field meant ("did you mean 'outerDiameter'?") instead of telling the user to update axm. A file that does not open says where (the field's path, line and column, in the row and the table), a value of the wrong type "expected a number" (not "f64"), a UTF-8 byte order mark is read, and a UTF-16 file (Windows PowerShell 5.1's >) is refused with how to write UTF-8.
  • axm diff shows the fields a file has that this version does not know (they were left out silently), and a file saved again by another version of Axomek is no longer different (writtenBy was a changed input, exit 1). axm set takes the limits as axm diff names them (settings.limits.maxDeflection, as settings.maxDeflection). axm optimize --help quotes its --require example (unquoted, the shell made a file named =20000), and --apply no longer says to run it again. The CI tutorial keeps axm check --json as an artifact, compares renamed designs with their old selves and says which are new or deleted (git diff --name-status -M), has fetch-depth: 0 in its workflow and runs in PowerShell 7, where git show … > file keeps the file as it is.
  • The web and desktop app: number fields read thousands separators (two or more groups, or one and a decimal point) ("1,500,000", "29,000.0e3 psi"; one comma before exactly three digits, "29,000", reads two ways and is refused with what to write instead), a decimal comma ("31,5"), fractions ("5/4", "1 1/4 in", "1-1/4 in") and moments written either way round ("75 ft-lb", "lb·in"), as the CLI now does too; both read one list of cases (apps/desktop/src/app/core/number-inputs.json). The design search's fields are such number fields (a step of 0.5 showed "0" and was refused, "31,5" too, and a 0 was dropped), a value that cannot be read is shown as an error, and each result card shows its governing check and its safeties; it offers the ball screws' and worm pairs' results as goals and requirements too. "Take the tour" starts for a web user without an account. A new project clears the Activity log and the "Undid …" notice. "Compare with…" can pick a project file, whose fields this version does not know it shows as unknown inputs (as axm diff does; such a file is never "the same"), and Duplicate copies a browser draft as a draft of its own (a project open read-only for data this version does not know is copied as it was read, that data and its writer kept, so the copy is read-only too; a copy or a renamed draft changes only its name in the text, so a number JavaScript would round, such as an integer above 2^53 or a long decimal, and a byte order mark stay as they were; a comparison takes that data of the open project too). The design search's requirements read typed units in every metric's own unit (a screw's rigidity as "100 N/µm" or in klbf/in, a speed in Hz, a life in h). The "↵ Enter" badge of a number field never covers the value, and moving through the inspector with Tab at a narrow width no longer scrolls it sideways.
  • The web and desktop app after the pilots' second round: a check that is a warning only (a thermal speed at 230 % of its value) is a "Warning", in its own chip, count ("2 warnings") and tally, never "Close to limit" nor counted as passed, and it governs over a pass, a failure over it; module pages say "5 of 7 checks pass · 2 warnings" and show the project's warnings about the item shown (a ball screw's lift-off, its Ca against its geometry), as the overview does. A bearing's row in the overview gives its duty values together (life, the lowest static safety and the highest contact stress of the cases), and the bearing view's loads say "Loads as entered" with a duty cycle. A preset's designation typed for a bearing ("6306") offers to replace the bearing by the preset (Cancel or Escape puts the designation back) instead of an error in command-line terms; a catalogue CSV refused for ratings far from the catalogue's can be imported anyway from the bearing list; a bearing turning off its shaft's speed says so on its results and in the overview with "Use the shaft's speed (492.2 rpm)". Engine messages, hints and field help are shown in plain words and the app's own control names ("turn on “Couple linked bearings”", "axial stiffness", "BR1 · Left bearing: speed", "G1 pinion contact safety"), without commands of the command line; a load's stiffness without a radial force (a gear's own load) is its deflection. A life over 10¹² h (a bearing at next to no load) reads "not limited" in the list, results, drawing and overview. Where a browser cannot write back to a file (opened through its file input), the file is not linked: Save asks where to save (or downloads a copy named after the project, saying that later edits are not in it), and File › Save as… is there in every browser. The overview's "Last changed" is the latest change (it showed the first), its shafts are named by id and name as the chart labels them, the four- point bearing's element load chart shows both contact pairs (and its 3D view a pair switch), worm pairs show their forces, starting and wheel-driving efficiency and a Lubrication line, the design search varies ball screws', worm pairs' and linear guides' sizes and says what to do when nothing is varied, arrow-key nudges step in inches and pounds with US units, Tab goes from a field to its own help, the report's paper is US Letter with US units unless chosen, help tables no longer break numbers on a phone and the first-visit notice is compact there.
  • For agents, changes to --json output and exit codes (approved for 0.2.7): axm check rows give file with / between folders on every system (on Windows a pattern's expansion gave tests/fail\d20-6207.axm.json); axm diff no longer lists writtenBy (or schemaVersion) as an input, so equal is true and the exit code 0 for the same design saved by another version; axm validate exits with 3 when solvable is false (always 0 before); axm sweep exits with 3 when no row could be solved (0 before); an edit (axm set, apply, the module commands, MCP axm_apply) that leaves an error it did not have, of a value that is wrong, wherever it is (gears.G1.faceWidth set to 0, a preload on screws.BS1 that its one circuit cannot take, at screws.BS1.geometry.circuits, a shorter section that leaves a support beyond the shaft's end) exits with 3 (it was 0), still saving the edit (saved) and listing the new errors' paths in newErrors (an error that says something is not there yet, such as "the shaft has no supports" while a shaft is built up, on any shaft, never counts); with --json, a command line that does not parse gives {"ok": false, "error": {"code": "invalidArgument", "message", "hint", "usage"}} on stdout with exit 2 (it was clap's text on stderr); axm solve --strict exits with 3 for a file with fields this version does not know. axm diff keeps its own codes (0 the same, 1 different, 2 cannot read, noHistory 2), the exception in the guide's table of exit codes; axm undo without history stays noHistory exit 1.
  • For agents, additive: axm check --strict (MCP axm_check strict); check rows unknown, unknownHint and, in error, path, line and column; the newerFile warning and refusal newerWriter and suggestions ({path: hint}), and an open error's path is the JSON path of the field (sections[1].outerDiameter), or of the element that holds it (gears[0]) for most of an element's inputs, never another field; axm diff inputs unit for an element of a list of numbers (faceWidths[1], mm) and known: false with the raw JSON of an unknown field, and check changes valueRelativeChange ((new − old) / |old| of the checked value; relativeChange stays that of the utilisation, now documented); the screw and worm metrics above in axm diff, axm optimize and sweep rows' new metrics (every module's results by metric name); each design of axm optimize governing (id, status, utilisation, message) and safeties (by metric name); the editing command duplicate (module, id, newId; CLI axm apply, MCP axm_apply and the app); axm --version --json ({"name", "version"}); settings.limits.<field> paths for axm set, sweeps and searches; the number forms above in every argument; the wasm projectMetrics (a project's design search metrics, every module's items by id, which the app's search offers); the report's changes.now (the revision now); and the wasm partsList takes units and diff aText/bText (a project's file text, for its unknown fields). Output into a pipe that closes early (axm verify --json | head) ends quietly instead of a panic with exit code 101, and axm watch stops at its next write (it watched on and the pipeline hung); any other failure to write it (a full disk) exits with 1 and says why on stderr. An unknown field whose key holds ., [ or ] is one key, quoted in its path (["settings.limits.x"]), and an open error's message, path, line and column are of the same fault (read once, in the file's order).
  • Hybrid bearings (steel rings, silicon nitride elements of E ≥ 300 000 MPa) take ISO 20056-2:2017's static contact stress limits under the standard rules: 4600 MPa for every ball bearing and 4200 MPa for every roller bearing, where they took ISO 76's 4200 (4600 self-aligning) and 4000 MPa for steel. C0 and s0 rise by (4600/4200)³ = 1.314 for balls and (4200/4000)² = 1.103 for rollers: a 6208-size hybrid (Dpw 60, Dw 11.91, Z 9, grooves 0.52/0.53, elements E 300 000 MPa, ν 0.26) C0 13 010 → 17 093 N, ISO 20056-2's Eq. (1)–(4); its Table B.1 and roller constants 41.5862 and 207.931 are tested. Elements of a lower modulus keep ISO 76's limits (its 3.1, Note 2), as do the original rules and the reference cases. ISO 20056-2's minimum s0 for hybrids are higher than ISO 76's (balls 1.3 normal, 2.6 smooth and accurate, 2 under shock; rollers 1.7, 3.3, 3.3), and a hybrid whose limits.minStaticSafety is below 1.3 (balls) or 1.7 (rollers) warns there. A hybrid spherical or tapered roller bearing warns at elementMaterial: ISO 20056-1 gives no b_m for them, so its C is the steel bearing's. C and Cu of hybrids are unchanged (they agree with ISO 20056-1). The report and axm solve name the standard the static safety is taken against.
  • Ball screws take the ball pitch circle diameter Dpw (geometry.pitchDiameter, optional, ISO 3408) where ISO 3408-4/-5 do: the ratings C₀a and Ca, the balls per turn, the lead angle (and with it the efficiency and the torques), the core diameter dc = Dpw − Dw·cos α of the rigidity (ISO 3408-4 eq. 4, labelled dc, was "d₀ − Dw·cos α"), the groove bottom, the ball model and the nut's default outer diameter 1.75·Dpw. Without it Dpw is the nominal diameter d₀ and every result is as before; d₀ stays the designation's and d·n's. Ø32 × 10 with 6.35 mm balls on Dpw 33 mm instead of 32: 16 balls a turn instead of 15, C₀a 90 761 → 97 079 N, Ca 38 724 → 40 295 N, dc 27.51 → 28.51 mm. A Dpw more than 10 % from d₀ warns at geometry.pitchDiameter. The app's Balls group has Ball pitch circle Dpw (empty: d₀), and the report names the Dpw the ISO ratings take.
  • Shaft strength: the preset 30CrNiMo8 +QT has DIN 743-3:2024 Table A.4's σB 1030 / σS 850 MPa at dB 16 mm; it had 1250 / 1050 MPa, DIN 743-3:2012's 34CrNiMo6, 21 % and 24 % too high, so its fatigue and static safeties fall roughly as σB and σS, to about 0.82 and 0.81 (files that took the preset keep their entered strengths; choose the preset again to take the new values). The other presets match the 2024 tables. A DIN 743 check of a shaft larger than 500 mm warns at strength.material.treatment: DIN 743-2's K1 holds up to 500 mm (6.2) and is taken at its value there. referenceDiameter's help says dB is 100 mm for Tables A.1 (tensile strength) and A.5.
  • ISO 4156 splines take their flank overlap h_w and mean flank diameter d_m from ISO 4156-1:2021 Table 1 (between the external major diameter D_ee max and the internal minor diameter D_ii min at the H/h fit; matched against ISO 4156-2's tables to their 0.01 mm), where they took 0.9·m, 0.8·m and 0.7·m and d_m = m·z. For 30° the overlap is 0.785·m at 6 teeth, 0.845·m at 8, 0.90·m at 12 and 0.98·m at 50, so small tooth counts were rated with too much flank (+14.7 % at 6, +6.5 % at 8): the flank pressure of a 30° m 2 × 6 spline rises 10.7 %, and from 12 teeth it falls (50 teeth: −8 %). 37.5° and 45° were 3 % to 12 % short of the tables: their pressure falls (45°, 20 teeth: −11 %). DIN 5480 splines are unchanged. A module off ISO 4156-2's series for the pressure angle (30° and 37.5°: 0.5 to 10 mm; 45°: 0.25 to 2.5 mm) or more than 100 teeth warns at keys.<id>.module or teeth. The tooth shear takes the basic tooth thickness, which the help now says (the smallest of a tolerance class gives 2 to 5 % more stress).
  • Labels, results unchanged: a bolt's eccentric.interfaceWidth is "Interface length cT (in the bending plane)" and interfaceLength "Interface width b" (VDI 2230-1 Eq. 65: I_BT = b·cT³/12; the JSON names stay); the nut's thread shear strength is τBM and the bolt's τBS in the app, the help and the report (it was τB for both); a bearing's referenceSpeed is the catalogue's thermal reference speed nθr (DIN ISO
    1. and radialClearance ISO/TS 16281's s, diametral; the welds cite EN 1993-1-9:2005 and its Tables 8.3 and 8.5 (valid until March 2028; EN 1993-1-9:2025 renumbers the detail tables).
  • For agents, additive: the input screws[].geometry.pitchDiameter (mm); warnings at screws.<id>.geometry.pitchDiameter, bearings.<id>.elementMaterial, bearings.<id>.limits.minStaticSafety (hybrids), strength.material.treatment (above 500 mm), keys.<id>.module and keys.<id>.teeth (ISO 4156).