staad-supports — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited staad-supports (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.
Fixed — restrains all 6 DOF:
fix_id = sup.CreateSupportFixed()Pinned — translations restrained, rotations free:
pin_id = sup.CreateSupportPinned()Fixed-But — selective releases or springs:
# releaseSpec: [FX,FY,FZ,MX,MY,MZ] → 0=fixed, 1=released, -1=spring
# springSpec: [KFX,KFY,KFZ,KMX,KMY,KMZ] → spring stiffness
sup_id = sup.CreateSupportFixedBut(
ReleaseSpec=[0, -1, 0, 0, 0, 1], # FY=spring, MZ=released
SpringSpec=[0, 100.0, 0, 0, 0, 0] # KFY=100
)sup_id = sup.CreateInclinedSupport(
inclinedType=2, # 1=Pinned, 2=Fixed, 3=FixedBut
refType=2, # 0=distances, 1=coordinates, 2=node reference
refNode=1,
coord=[0, 0, 0],
releaseSpec=[0,0,0,0,0,0],
springSpec=[0,0,0,0,0,0]
)Spring support distributed over tributary area. See [SUPPORT_CODES.md — Direction Codes](./assets/SUPPORT_CODES.md) for direction values and [SUPPORT_CODES.md — Spring Types](./assets/SUPPORT_CODES.md) for springType.
# Typical case: springs in Y direction (STAAD adds X/Z fixity for stability)
mat_id = sup.CreateElasticMat(
direction=1, # 1=Y Direction (use for most foundations)
subgrade=20.0, # kN/m^3 or equivalent
printFlag=0,
springType=0 # 0=Normal (bi-directional); 1=Compression only
)
sup.AssignSupportToEntityList(mat_id, [41, 42, 43])
# Y Only (direction=4): springs act ONLY in Y — use only when the model already
# has other supports (e.g. pinned/fixed nodes) providing X and Z restraint.
# Without those, the structure will be unstable in X/Z.pm_id = sup.CreatePlateMat(direction, subgrades, printFlag, springType)foot_id = sup.CreateElasticFooting(length, width, direction, subgrade)sup.AssignSupportToNode(nodeID, supportID) — assigns to a SINGLE nodefor loop to assign to multiple nodesexecute_code to call staad.Geometry.GetNodeCount() and confirm the model has nodesSaveModel(True) before assigning supports (see staad-core for SaveModel vs UpdateStructure)| Function | Returns |
|---|---|
GetSupportCount() | total supports |
GetSupportNodes() | list of supported node IDs |
GetSupportType(nodeNo) | support type code (see SUPPORT_CODES.md) |
GetSupportInformation(nodeNo) | (type, releases, springs) |
GetSupportInformationEx(nodeNo) | (supportNo, type, releases, springs) |
GetSupportName(supportNo) | support name |
GetCountOfElasticMat() | elastic mat count |
GetElasticMatDetail(matId) | (direction, subgrade, print, spring, nodeCount) |
sup.RemoveSupportFromNode([1, 2, 3]) # remove from nodes
sup.DeleteSupport(supportNo) # delete definition
sup.RemoveElasticMatFromNode(nodeNo) # remove elastic mat from node
sup.RemoveElasticMat(matId) # delete elastic mat definitionSee assign-fixed-supports.py for a complete working example.
AssignSupportToNode takes a SINGLE node ID — it does NOT accept a list; iterate with a loopCreateSupportFixed, CreateSupportPinned, CreateSupportFixedBut, AssignSupportToNode, GetSupportNodes, GetSupportType, GetSupportInformation, DeleteSupport) raise on failure instead of returning a negative code — call them directly; execute_code reports any uncaught errorSaveModel(True) before assigning supports — do NOT use UpdateStructure() (it discards unsaved geometry)CreateSupportFixedBut: use -1 for spring DOFs (not 1); 1 = released, 0 = fixed, -1 = spring~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.