Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Error codes

Every diagnostic has a code. E_ is an error, W_ a warning, N_ a spelling from another language that sspur edit rewrites for you, and A_ an audit note that records something you asked for on purpose. Most errors also print a hint: line with the exact fix, and sspur check --json carries fix ops that an agent can apply as they are (see the diagnostic schema).

This page lists every code the compiler can emit, grouped by area. The test suite compares it with the compiler’s source, so a new code can’t ship without a row here.

Syntax

CodeMeaningFix
E_LEX_CHARA character that isn’t part of the languageRemove it, or put it in a string
E_LEX_ESCAPEAn unknown escape such as \q in a string, or a \u{...} that isn’t 1 to 6 hex digits of a Unicode scalar valueUse \n \t \r \\ \" \' \{ \} or \u{e9}
E_LEX_NUMBERA malformed number, such as a bad hex literalWrite 42, 0xff, 1_000 or 3.14
E_LEX_STRINGA string that never closesAdd the closing quote on the same line
E_PARSE_ARMSmatch, catch or handle with no armsAdd | pattern => value lines
E_PARSE_ARRAY[v; N] with an N that isn’t a literalWrite the length as a literal
E_PARSE_ASMAn asm template that interpolates an expressionName operands as {x} and bind them in in(...) or out(...)
E_PARSE_BLOCKdo, a loop or a definition with no indented block after itIndent the body on the next lines
E_PARSE_DEFSomething at the top level that isn’t a definitionStart it with fn, type, test, effect, trait, impl, store, svc or use
E_PARSE_EFFECTeffect with no operationseffect ask() -> Int, or operations on indented lines
E_PARSE_EPAn ep line without a path stringep get "/items/{id}" = handler
E_PARSE_EXPECTEDA token other than the one the grammar needsAdd or fix the token named in the message
E_PARSE_EXPRAn expression was expectedCheck for a missing operand or a stray keyword
E_PARSE_EXTERNpre, post or ex on an extern fnWrap the extern in a normal fn that has the contract
E_PARSE_HANDLERA handle arm that isn’t an operation| op(x) => ... or | return(r) => ...
E_PARSE_IMPLAn impl method without a bodyfn m(x: Self) -> T = expr
E_PARSE_INDENTIndentation that doesn’t match any open blockUse 2 spaces per level
E_PARSE_GUARDSwift’s guard let x = e without elseAdd what happens when it doesn’t match: some(x) = e else d
E_PARSE_LAMBDA_ => _ + 1: a lambda that ignores its parameter uses _ in its bodyName the parameter, x => x + 1
E_PARSE_ISa and b is p: is would test the whole condition before it; or a test used as an operand, e is p == xTest the pattern first, b is p and a, or parenthesize, a and (b is p), (e is p) == x
E_PARSE_KERNELA kernel fn without @gridAdd @grid(threads, group) after the signature
E_PARSE_PATTERNA pattern was expected, or a list pattern has two ..Use _, a name, a literal, a tuple, a list or a constructor; keep one .. per list pattern
E_PARSE_PUBpub on something that can’t be exportedOnly fn, type, effect, trait and impl can be pub
E_PARSE_RULEA rule with no rowsAdd | cells => result rows
E_PARSE_SVCA svc with no endpointsAdd indented ep lines
E_PARSE_TRAILINGTokens left over after a complete definitionRemove them, or start a new line
E_PARSE_USEA malformed use lineuse lib or use lib.{f, T}
E_PARSE_VARIANTA sum variant that isn’t a capitalized nametype S = A | B{f: Int}

Foreign spellings

CodeMeaningFix
N_FOREIGNA spelling from another language that has one meaning in SSPUR (&&, len(x), None, .length, a missing effect), or a _ that would bind one call further out than it readssspur edit stores the SSPUR form and lists it after stored as:; in a file, apply the diagnostic’s fix

Names and types

CodeMeaningFix
E_UNKNOWN_NAMEA name that isn’t defined or in scopeDefine it, or fix the spelling the hint suggests
E_UNKNOWN_TYPEA type that isn’t definedDefine it, or import it with use
E_UNKNOWN_CTORAn unknown record or constructorCheck the spelling; variant names are global
E_UNKNOWN_METHODNo such method on the receiver’s type (or no such db or json operation)Use a method the hint lists, or write a function whose first parameter has that type
E_DUP_DEFTwo definitions with one nameRename one; there is no overloading
E_TYPE_MISMATCHAn expression has a different type than the one expectedConvert explicitly (n.to_f64), or fix the expression
E_TYPE_ARITYA type given the wrong number of type argumentsList[T], Map[K, V], Array[T, N]
E_TYPE_CYCLEA type alias that refers to itselfMake it a record or a sum type
E_AMBIGUOUS_RECORDA record literal whose type can’t be worked outName the type: Point{x: 1, y: 2}
E_FIELD_MISSINGA record literal without one of its fieldsAdd the field
E_FIELD_UNKNOWNA field the type doesn’t haveCheck the type’s fields
E_CTOR_FIELDSA variant with fields used without themRect{w: 1.0, h: 2.0}
E_TUPLE_INDEXt.N beyond the tuple’s lengthUse an index from 0 to length - 1
E_WITH_PATHA with update path that doesn’t lead to a record field or list elementUpdate fields and list elements only
E_ASSIGN_IMMUTABLEx := v on a binding made with =Declare it with var
E_REFUTABLE_LETA binding pattern that can fail to match, without elseAdd what the block gives when it doesn’t match, some(x) = e else d, or use match
E_PLACEHOLDER_ outside a call argument, list element or refinementWrite a lambda, x => ...
E_NOT_CALLABLECalling a value that isn’t a function of that many argumentsCheck the value’s type
E_ARITYA call with the wrong number of argumentsPass the number the message says
E_INFERThe receiver’s type can’t be inferred for a method callAnnotate the binding or parameter
E_OPERATORAn operator on a type that doesn’t support itUse a type with that operator, or impl Add for T (or the trait the hint names)
E_UNSUPPORTEDA form the compiler doesn’t support yet, such as a generic local functionMove it to the top level, or rewrite as the message says

Effects and errors

CodeMeaningFix
E_EFFECT_MISSINGThe body performs an effect the signature doesn’t declareAdd it after !, or handle it
E_EFFECT_NOT_ALLOWEDA function value performs effects the parameter’s type doesn’t allowWiden the parameter’s row, or pass a function with fewer effects
E_EFFECT_ARGSAn effect given the wrong number of type argumentsfail[E], db.read[S], emit[Int]
E_EFFECT_PARAMSAn effect parameter that isn’t a type parametereffect emit[T](x: T)
E_RAISE_TYPEraise of a value that isn’t a declared error typeDeclare type E = A | B and raise one of its variants
E_CATCH_TYPEA catch whose error type can’t be worked outMatch on the error’s constructors
E_UNKNOWN_OPA handle arm for something that isn’t an effect operationDeclare the effect, or fix the name
E_HANDLE_PARTIALA handle that covers only some operations of an effectAdd arms for the operations listed
E_HANDLE_AMBIGUOUSThe body performs several instances of one generic effect, or a loop source yields several typesHandle each instance in its own handle
E_RESUME_POSITIONresume used other than as the arm’s result or r = resume(v)Move it, and resume at most once on any path
E_RETURN_IN_HANDLERreturn inside a handler armThe arm’s value is the result; drop the return
E_RETURN_IN_LAMBDAAn early return inside a lambdaUse if ... then ... else do, or move the exit into a named fn

Pattern matching and decision tables

CodeMeaningFix
E_IS_BINDSAn e is p test binds a name that nothing after it can use (ok = r is ok(v), or a test under or)Write _ for it, use it in and ... after the test, or make the test an if condition
E_NONEXHAUSTIVEA match or catch that misses some casesAdd the arms the message lists, or | _ =>
E_PATTERN_ARITYA pattern with the wrong number of argumentsMatch the operation’s or constructor’s parameters
E_PATTERN_OR_BINDSThe alternatives of an or-pattern bind different names, or one name at different typesBind the same names in every alternative (_ for the unneeded ones), or split the arm
E_PATTERN_TYPEA handler arm that binds an argument with something other than a name, _ or tuple, or a list pattern on a value that isn’t a ListBind it to a name and match inside the arm; match lists with [x, ..rest]
E_RULE_ARITYA rule row with the wrong number of cellsOne cell per parameter
E_RULE_GAPSome inputs match no row of a ruleAdd a row for the example inputs shown
E_RULE_SHADOWEDA rule row that can never fireRemove it, or move it above the rows that cover it

Contracts and safety types

CodeMeaningFix
E_IMPURE_CONTRACTA pre, post or where that performs an effectContracts must be pure
E_SECRET_COMPARE== on a Secrets.check(x => x == expected)
E_SECRET_LEAK.str or interpolation of a Secret.expose("reason") if you really mean it
E_UNTRUSTED_INTERPInterpolating an Untrusted valueu.validate(parse_fn) first

Traits

CodeMeaningFix
E_TRAIT_UNKNOWNA bound that isn’t a trait[T: Ord + Show]
E_TRAIT_ARGSA trait given the wrong number of type argumentsIndex[Int, F64]
E_TRAIT_PARAMSA trait parameter that isn’t a plain type parametertrait Name[T]
E_TRAIT_SELFA trait method whose first parameter isn’t Selffn m(x: Self, ...)
E_TRAIT_MISSINGA type that doesn’t implement the trait a call or method needsAdd impl Trait for Type or derive Trait; in a dependency, make the impl pub
E_TRAIT_AMBIGUOUSA type parameter with bounds that can’t be inferredGive the argument a known type
E_TRAIT_RECURSIONA bounded generic that calls itself at a growing typeMake the recursive helper unbounded
E_IMPL_MISSINGAn impl without a method that has no defaultAdd the method the hint shows
E_IMPL_EXTRAAn impl method the trait doesn’t haveMove helpers to top-level fns
E_IMPL_SIGAn impl method whose signature differs from the trait’sUse the signature the hint shows
E_IMPL_EFFECTAn impl method with more effects than the trait allowsAdd the effect to the trait method, or drop it
E_IMPL_TARGETAn impl for something that isn’t a named type, such as Box[Int]Implement for the whole type, impl[T] ... for Box[T]
E_IMPL_DUPA second impl of one trait for one type (including a derive or a built-in impl)Keep one
E_IMPL_ORPHANAn impl whose trait and type are both from other packagesWrap the type in a newtype
E_IMPL_BUILTINAn impl of CopyEvery type but a res type is Copy already
E_DERIVE_UNKNOWNderive of something other than Eq Ord Show Hash JsonWrite an impl instead
E_DERIVE_FIELDderive where a field’s type lacks the traitImplement or derive it for that field’s type first
E_SELFSelf outside a trait or implName the type

Concurrency

CodeMeaningFix
E_PAR_ARITYpar with fewer than two tasksFor one task per element, for x in par(xs)
E_PAR_RACEA task assigns a variable declared outside itReturn the value from the task, or use an Atomic[Int] or a Chan
E_PAR_SHAREA task uses a function value, resource or borrow from outside it, or one would cross a channelCall top-level functions by name; send data, not functions
E_PAR_EFFECTA task performs log or a handled effectReturn the data and log after par
E_RETURN_IN_PARreturn inside a par taskThe task’s value is its result

Systems profile

CodeMeaningFix
E_PROFILEA sys feature (resources, borrows, Ptr, fixed arrays, statics) outside profile sys or bareAdd profile sys as the first line
E_USE_MOVEDA resource used after it movedBorrow it with &x to use it again
E_RES_LEAKA linear resource not consumed, or a destructor that doesn’t release its resource fieldsPass it on, return it, destructure it or leak(x)
E_RES_DISCARDA resource thrown away: an unused result, a temporary, or _Bind it, pass it on, or drop(x)
E_RES_CONTAINERA resource inside a list, tuple, Opt or plain recordKeep resources in locals, parameters and res fields
E_RES_DESTRUCTUREDestructuring a resource that has a destructorRead fields with x.f, or drop(x)
E_RES_ESCAPEA resource used where it would be copiedBind, move, borrow or drop it
E_RES_FIELDA plain record with a resource fieldDeclare it res type
E_RES_FN_VALUEA function over resources or borrows used as a valueCall it directly
E_RES_GENERICA resource passed to a generic parameterWrite a non-generic function
E_RES_KINDA res type that isn’t a non-generic recordMake it a record
E_RES_MATCHmatch on a resourceRead its fields, or destructure it
E_DROP_SIGdrop f on a type that isn’t resDeclare it res type
E_DROP_LINEARdrop(x) on a resource without a destructorConsume it, destructure it, or leak(x)
E_DROP_SELFA destructor that moves its own parameterDestructure it instead
E_DROP_TYPEdrop or leak of something that isn’t an owned resourceRemove the call
E_MOVE_FIELDMoving a resource field out of its ownerDestructure the owner, or borrow &x.f
E_MOVE_OUT_OF_BORROWMoving a resource out of a borrowRead its fields, or pass the borrow on
E_BORROW_ARGA parameter that needs &mut x given something elsePass &mut x
E_BORROW_CONFLICTOne call takes &mut x with another borrow or move of xSplit it into two calls
E_BORROW_ESCAPEA borrow that is returned, bound, stored or capturedBorrows are parameter types only
E_BORROW_IMMUTABLE&mut x of a binding made with =Declare it with var
E_BORROW_PLACE&mut of something that isn’t a local variableBind it with var first
E_ASSIGN_SHAREDWriting through a shared borrow &TTake &mut T
E_CAPTUREA lambda or local function captures a resource or borrowPass it as an argument
E_PTR_ELEMPtr[T] with T other than Int, F64 or BoolUse one of those
E_UNSAFEA raw memory operation or asm without unsafeDeclare ! unsafe, or add an unsafe "reason" line
E_REASON_REQUIREDAn unsafe clause with an empty reasonunsafe "why this is sound"
E_ASM_OPERANDAn asm operand of the wrong type or an unknown {name}Inputs Int, Bool or Ptr; outputs Int or Bool
E_STATIC_TYPEA static that isn’t Int, Bool or an array of themChange the type
E_STATIC_INITA static with a non-constant initializerA literal or [literal; N]
E_STATIC_ACCESSUsing a static other than through its access methodsx.load, x.store(v), x.add(d), x.cas(a, b)
E_STATIC_RACEMain code stores a value read from a static that interrupt code also writesUse add or cas
E_EXTERNAn extern fn that is generic, doesn’t declare exactly ! ffi, has a refinement or a type C can’t takeUse C widths, ! ffi and no type parameters

Bare profile

CodeMeaningFix
E_PROFILE_BAREA feature that needs a runtime (lists, sum types, lambdas, log, stores, …) in profile bareUse the values the bare profile allows
E_MMIO_WIDTHmmio[W] with a width other than U8 U16 U32 U64Pick one of those
E_INTERRUPT_SIGAn interrupt handler with parameters or a resultfn h() returning Unit
E_INTERRUPT_VECAn unknown interrupt vectorinterrupt timer, or the target’s interrupt number
E_INTERRUPT_DUPTwo handlers for one vectorKeep one

GPU kernels

CodeMeaningFix
E_KERNELSomething a kernel body can’t do (lambdas, lists, strings, recursion, …)Keep kernels to scalars, slices, loops and arithmetic
E_KERNEL_SIGA kernel parameter or result of an unsupported typeScalars, or &[T] and &mut [T] of numbers; no result
E_KERNEL_GRIDA group size that isn’t a literal from 1 to 1024@grid(n, 256)
E_KERNEL_TYPEMixed numeric types, or a thread count that isn’t IntConvert with .to_f32, .to_int, …
E_KERNEL_WRITEWriting a read-only sliceDeclare it &mut [T]
E_KERNEL_RACEThreads may write the same elementIndex writes by gid plus a uniform offset
E_KERNEL_SHAREDA bad shared[T](n) arrayNumeric T, n from literals and group_size, at most 32 KB
E_KERNEL_BARRIERbarrier() under a condition that differs between threads in a groupOnly branch on uniform values around a barrier
E_KERNEL_EFFECTA kernel or kernel helper with effects other than devKernels and their helpers are pure
E_KERNEL_DEVICEHost code calling a device fn (over F32, I32 or U32)Give host code its own fn over Int and F64
E_KERNEL_ARGA slice argument passed as & where &mut is needed, or the reverseWrite the form the hint shows
E_KERNEL_VALUEA kernel used as a valueKernels can only be called

Services and stores

CodeMeaningFix
E_STORE_KEYA table key that isn’t Str, Int or a newtype over themChange the key type
E_STORE_VALUEA store value type that can’t be encodedUse data types without functions or secrets
E_UNKNOWN_STOREA db.* call whose first argument isn’t a storedb.get(Items, k)
E_DB_EFFECTA db effect that isn’t db.read[S] or db.write[S]Fix the effect
E_UNKNOWN_FNAn endpoint handler that isn’t a functionDefine it, or fix the name
E_EP_METHODAn unknown HTTP methodget post put patch delete
E_EP_PATHA malformed endpoint path"/items/{id}"
E_EP_PARAMA path parameter that isn’t Str, Int or a newtype over them, an endpoint parameter named like a svc parameter but of another type, or a deployed svc with parametersChange the parameter type; a deployed service reads settings with env_var
E_EP_BODYMore than one request body parameter; a GET or DELETE parameter that can’t come from the query string; a query parameter in a deployed serviceOne body parameter at most; query parameters are Str, Int, F64, Bool or an Opt of them
E_EP_TYPEA request body type that can’t be decoded from JSON, or a raw Request or Response in a deployed serviceUse a data type
E_EP_EFFECTA handler performing a user-defined effect, or, in a deployed service, an effect no deploy target provides (fs, io, proc, net, …)Keep deployed handlers to db.*, log, time, env, div and fail
E_EP_HANDLERA generic endpoint handlerWrite a concrete function
E_DUPLICATEOne route defined twiceRemove one
E_JSONjson.decode of a type that can’t be checked or decodedDecode a plain data type and validate it
E_MIGRATE_MISSINGA store’s value type changed and there is no migrate_SAdd fn migrate_S(old: OldT) -> V
E_MIGRATE_SIGA migrate_ or unmigrate_ function with the wrong shapePure, one parameter of the old type
E_MIGRATE_KEYA store’s key type changedAdd a new store and copy into it

Networking and configuration

CodeMeaningFix
E_SERVE_EFFECTA handler passed to http.serve performs a user-defined effect, or a db.* effect, which needs sspur deploy localHandle the effect inside the handler, or run the service with sspur deploy local
E_SERVE_TYPEA svc endpoint whose body or result http.serve can’t decode or encode (functions, secrets), or a handler that raises two non-sum error typesUse a data type
E_HTTP_SHADOWThe program defines a constructor with the name of an HttpErr variant (Dns, Connect, Tls, Timeout, HttpStatus, Io) and uses the HTTP clientRename your constructor
E_CONFIG_TYPEconfig.load of something other than a record, or of a record with a field JSON can’t decodeconfig.load(Config{...}, path, prefix) with plain data fields

Databases and data libraries

CodeMeaningFix
E_SQL_PARAMA SQL parameter of a type SQLite has no value for, or parameters that aren’t a listInt, F64, Str, Bool, Bytes, Time, Dec, a newtype of one or an Opt of one, in a list: [name, age]
E_SQL_ROWdb.query[T], one[T] or opt[T] with a T rows can’t be read asA record of column types, a tuple alias, or one column type
E_DB_SHADOWThe program defines a constructor with the name of a DbErr variant (Sql, Constraint, Busy, NoRow, Mismatch) and uses the databaseRename your constructor
E_CSV_TYPEcsv.decode[T], read[T], fold[T] or csv.encode with a T that isn’t a record of cell typesFields of Str, Int, F64, Bool, Time, Dec, newtypes and Opt; List[Str] for raw rows

Packages and dependencies

CodeMeaningFix
E_PKG_UNKNOWNA package that isn’t a direct dependencysspur add PATH-OR-URL
E_PKG_NAMEA name the dependency doesn’t exportUse a name the message lists
E_PKG_PRIVATEA private definition of a dependencyMake it pub in the dependency
E_PKG_KINDA dependency’s name used as the wrong kind, such as a type called as a functionCheck what the name is
E_PKG_TARGSType arguments on a dependency’s functionAnnotate the result instead
E_PKG_IMPORT_CLASHA name both defined here and importedDrop it from the use line, or rename the definition
E_PKG_RESERVEDA name containing __Rename it
E_PKG_PROFILEA dependency with a different profileUse packages of the same profile
E_DEPFetching or reading a dependency failedCheck the path or URL in sspur.toml
E_DEP_HASHA cached package doesn’t match the hash in sspur.lockDelete the cache entry and run sspur deps fetch
E_DEP_STALEsspur.toml asks for another source or rev than the lock pinssspur deps update NAME
E_DEP_CONFLICTTwo versions of one package in the graph, or two packages that link under the same name (a-b/c and a/b_c)sspur deps update NAME where the older one is pinned, or drop one of the two
E_LOWERReported by sspur api --json and the registry checks: the program typechecks but its traits can’t be elaborated into plain definitionsThe message names the definition; sspur check and sspur run show the same
E_NO_SOURCEThe registry’s Publish page found no source file in the repository, or a module has noneSet src in sspur.toml, or add lib.ssp
E_PACKAGEReported by the registry checks: a sspur.toml (the package’s or a module’s) that doesn’t parse, or no sspur.toml at the top of the repositoryFix the file the message names
E_MODULEReported by the registry checks: a path dependency of a published package that is not one of its modules (outside its directory, without a sspur.toml, or named differently from its key)Move the module into the package’s directory with a sspur.toml that names it as the key does, or publish it as a package
E_DEP_READONLYAn edit of a dependency’s definitionChange it in the dependency’s own package

Codebase edits, sync and queries

CodeMeaningFix
E_OP_UNKNOWNAn unknown transaction opadd replace rename remove refine fill attach resolve
E_OP_SHAPEAn op without a field it needsAdd the field the message names
E_OP_SRCsrc with zero or several definitionsOne definition per op
E_OP_NAMEsrc defines a name other than pathMake them equal
E_OP_EXISTSadd of a name that existsUse replace
E_OP_KINDAn op on the wrong kind of definition, such as refine on a typeTarget a function
E_OP_MISSINGresolve of a path with no pending conflictCheck sspur sync status
E_NOT_FOUNDNo definition with that nameq find for the right name
E_MERGEA concurrent edit landed first and the merged program doesn’t typecheckApply the rebase in the result
E_CONFLICTTwo edits of one definitionRead theirs, merge, and resend, or apply the fix to force yours
E_CONFLICT_UNRESOLVEDA merge transaction that leaves conflicts openAdd resolve ops for the paths listed
E_STALE_BASEA transaction against a base this store doesn’t knowRe-read HEAD and retry
E_SYNCA sync step that needs a commit this side doesn’t havesspur sync pull first
E_IOThe store couldn’t be read or writtenCheck the disk and permissions of .sspur/
E_QUERYA query failedRead the message
E_QUERY_ARGSA query without the target it needsq sig NAME
E_QUERY_UNKNOWNAn unknown queryThe result lists the queries

Tests and holes

CodeMeaningFix
E_TEST_FAILEDA test was false or trapped during edit --testFix the code or the test; the message shows the compared values
E_HOLEA typed hole ? or ?nameFill it; the message gives its type and the values in scope that fit, and fix lists up to 3 checked candidates as fill ops (sspur fill --apply writes the best)

Warnings

CodeMeaningFix
W_EFFECT_UNUSEDA declared effect the body never performsRemove it from the signature
W_ARM_UNREACHABLEA match or catch arm, or one alternative of an or-pattern, that the arms above already cover; or an e is p, if e is p or p = e else b whose pattern always matchesRemove it or move it up; for if e is p, bind with p = e; drop the else of a guard that can’t fail
W_NEVER_MATCHESAn e is p, if e is p or p = e else b whose pattern can’t match the value written there, none is some(_)Test a pattern the value can have, or remove the test
W_UNUSED_RESULTA statement that calls a pure function or method and throws its value away, such as b.add(s) or xs.push(x) on a line of its own: values never change in place, so the call does nothingKeep the result (b := b.add(s) with var b, or b2 = b.add(s)), or write _ = f(x) to drop it on purpose
W_CATCH_UNUSEDA catch around code that never raises that errorRemove the catch
W_HANDLE_UNUSEDA handle around code that never performs that effectRemove the handle
W_UNSAFE_UNUSEDAn unsafe clause with no unsafe operationRemove the clause
W_KERNEL_UNWRITTENA kernel’s &mut slice that is never writtenDeclare it &[T]
W_DEPRECATEDA use of a deprecated builtin: it still works in every 1.x release and goes in 2.0 (see Stability and deprecation)Write the replacement the hint gives
W_RULE_UNCHECKEDA rule too large for gap and overlap analysisSplit it, or accept that it isn’t checked
W_CONVERSION_MAY_TRAPAn F64 round, floor, ceil or trunc that sspur check can’t prove finite and in [-2^63, 2^63), so it may trap with integer overflow (numbers, ADR 0044)x.checked_round (an Opt[Int]), or a guard, where or pre that bounds it: if x.is_finite and x.abs < 9.2e18 then x.round else ...

Audit notes

CodeMeaning
A_DECLASSIFYA Secret, Pii, Untrusted or Guess value was declassified (.expose, .trust, .accept) with the given reason
A_UNSAFEA function discharges unsafe with an unsafe "reason" clause

Audit notes and warnings belong to the package whose code has them. A package’s own are printed by sspur check, run and test at its own lines. A dependency’s warnings are printed only when the dependency itself is checked, and its audit notes are listed by the dependent’s sspur check (not by run or test) at the dependency’s own file and line, frlib/lib.ssp:3:3 audit A_DECLASSIFY ..., so reviewing an app shows every declassification it relies on, once.