using-fpdart — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited using-fpdart (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.
Implement robust, type-safe, and predictable business logic using functional programming principles. Replace side-effect-prone imperative code with pure functions and composable monads (Option, Either, Task), ensuring that error handling and null-safety are enforced at the type level rather than through runtime exceptions.
Use primitives to handle common edge cases without branching logic:
T?. Use Option.of(val) or Option.none(). Access via match or getOrElse.try-catch. L (Left) is for errors, R (Right) is for success.void to allow functional composition.Manage side effects and asynchronous operations through wrappers that defer execution:
Future that never fails.Future and Either into a single monadic flow.Utilize the Do Notation to flatten nested flatMap calls into readable, imperative-style blocks while preserving monadic safety:
return TaskEither.Do(($) async {
final user = await $(repository.getUser(id));
final profile = await $(api.getProfile(user.code));
return profile.toDomain();
});Either<String, int> checkValue(int v) =>
v > 10 ? Either.of(v) : Either.left('Too small');
final result = checkValue(5).match(
(error) => 'Failure: $error',
(value) => 'Success: $value',
);TaskEither<Exception, User> fetchUser(String id) =>
TaskEither.tryCatch(
() => api.getUser(id),
(error, stack) => Exception('Fetch failed: $error'),
);fpdart extends Iterable with safer methods:
list.head -> Option<T> (Safe first)list.all((e) => ...) -> boolthrow for expected business errors. Force use of Either or TaskEither.! (bang operator) or force-casts on functional types. Always use safe extraction methods (match, getOrElse).fast_immutable_collections for all state definitions.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.