staad-results — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited staad-results (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
out = staad.Output, load = staad.Loadout.AreResultsAvailable() → True if results exist; False if analysis has not runFalse, run analysis before querying any results (see staad-analysis skill)load.GetPrimaryLoadCaseNumbers() → returns a tuple — always wrap in list() before indexingout.GetOutputUnitForForce() # e.g. "KIP"
out.GetOutputUnitForMoment() # e.g. "KIP-IN"
out.GetOutputUnitForDisplacement() # e.g. "in"
out.GetOutputUnitForStress() # e.g. "KSI"
out.GetOutputUnitForDimension()
out.GetOutputUnitForRotation()The GetOutputUnitFor* methods raise on error (e.g. if the model has no output units established yet) — execute_code reports any such error.
For the solver's error/warning text after a run (GetAnalysisErrorMessages / GetAnalysisWarningMessages), see the staad-analysis skill.
| Function | Returns |
|---|---|
GetNodeDisplacements(nid, lc) | [UX, UY, UZ, rX, rY, rZ] |
GetSupportReactions(nid, lc) | [FX, FY, FZ, MX, MY, MZ] (global) |
| Function | Returns | Notes |
|---|---|---|
GetMemberEndForces(bid, end, lc, local) | [FX,FY,FZ,MX,MY,MZ] | end: 0=StartA, 1=EndB; local: 0=Local, 1=Global |
GetMinMaxAxialForce(bid, lc) | (min, minPos, max, maxPos) | position along member |
GetMinMaxShearForce(bid, dir, lc) | (min, minPos, max, maxPos) | dir: 'FY' or 'FZ' (string) |
GetMinMaxBendingMoment(bid, dir, lc) | (min, minPos, max, maxPos) | dir: 'MY' or 'MZ' (string) |
GetMemberEndDisplacements(bid, end, lc) | [X,Y,Z,rX,rY,rZ] | |
GetMaxSectionDisplacement(bid, dir, lc) | (maxDisp, position) | dir: "X", "Y", "Z" |
GetMaxBeamStresses(bid, lc) | stress tuple |
out.GetIntermediateMemberForcesAtDistance(bid, distance, lc)
out.GetIntermediateMemberTransDisplacements(bid, distance, lc)
out.GetIntermediateDeflectionAtDistance(bid, distance, lc)# Center stresses [SQX, SQY, MX, MY, MXY, SX, SY, SXY]
out.GetAllPlateCenterStressesAndMoments(plateNo, lc)
out.GetAllPlateCenterForces(plateNo, lc)
out.GetAllPlateCenterMoments(plateNo, lc)
out.GetPlateCenterNormalPrincipalStresses(plateNo, lc)
out.GetAllPlateCenterPrincipalStressesAndAngles(plateNo, lc)
out.GetPlateCenterVonMisesStresses(plateNo, lc)
# Corner forces
out.GetPlateCornerForces(plateNo, cornerCode, lc) # cornerCode = node number
# Stress at arbitrary point
out.GetPlateStressAtPoint(plateNo, lc, stressPoint, facingPoint) # [x,y,z] listsout.GetAllSolidNormalStresses(solidNo, corner, lc) # corner 1-8
out.GetAllSolidShearStresses(solidNo, corner, lc)
out.GetAllSolidPrincipalStresses(solidNo, corner, lc)
out.GetAllSolidVonMisesStresses(solidNo, corner, lc)n_modes = out.GetNoOfModesExtracted()
freq = out.GetModeFrequency(modeNo) # Hz
disp = out.GetModalDisplacementAtNode(modeNo, nid) # [X,Y,Z,rX,rY,rZ]
factors = out.GetModalMassParticipationFactors(modeNo)if out.IsBucklingAnalysisResultsAvailable():
n = out.GetNoOfBucklingFactors()
factor = out.GetBucklingFactor(modeNo)
disp = out.GetBucklingModeDisplacementAtNode(modeNo, nid) # [X,Y,Z,rX,rY,rZ]delta, n_steps = out.GetTimeHistoryIntegrationStepInfo()
# DOF: 1-3=trans, 4-6=rot; response_type: 0=disp, 1=vel, 2=accel
responses = out.GetTimeHistoryResponse(lc, nid, dof, response_type)
resp_at_t = out.GetTimeHistoryResponseAtTime(lc, nid, dof, response_type, time)
resp_min, resp_max = out.GetTimeHistoryResponseMinMax(lc, nid, dof, response_type)n_steps = out.GetNLLoadStep(lc)
load_level, displacements = out.GetNLNodeDisplacements(nid, lc, loadStep)# Single-block (all codes)
(code, status, ratio, allow, lc, loc, clause, section, forces, klr) = out.GetMemberSteelDesignResults(bid)
# status: 'PASS' or 'FAIL'; ratio > 1.0 = failure
ratio = out.GetMemberSteelDesignRatio(bid) # -999=not designed, -1=no analysis
max_r = out.GetMemberSteelDesignMaxFailureRatio() # model-wide max
min_r = out.GetMemberSteelDesignMinFailureRatio() # model-wide min
# Multi-block (AISC 360 etc.)
if out.IsMultipleMemberSteelDesignResultsAvailable():
n_blocks = out.GetSteelDesignParameterBlockCount()
blk_name = out.GetSteelDesignParameterBlockNameByIndex(i)
ratio = out.GetMultipleMemberSteelDesignRatio(blk_name, bid)
max_ratio = out.GetMultipleMemberSteelDesignMaxRatio(bid)out.GetPMemberEndForces(memberNo, end, lc, localOrGlobal)
out.GetPMemberIntermediateForcesAtDistance(memberNo, distance, lc)out.GetStaticCheckResult(lc)
out.GetMatInfluenceAreas(nodeList)
out.GetBasePressures(lc, nodeList)See fetch-forces.py for a complete working example.
GetMinMaxShearForce and GetMinMaxBendingMoment dir argument is a string ('FY', 'MZ'), not an integerGetMemberEndForces at end 0 (StartA) and end 1 (EndB) have opposite sign conventionsGetPrimaryLoadCaseNumbers() returns a tuple — convert with list() before indexingGetMemberSteelDesignResults raises an error for members not in the design briefAreResultsAvailable() before any output query~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.