audit-motion — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited audit-motion (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.
Pre-flight check for any UI change that adds animation. The profile default per ADR 0004 is motion: reduced — i.e. no animation runs unless the user has explicitly opted in. The prefers-reduced-motion CSS media query is the floor; the profile preference is the ceiling.
Authoritative references:
docs/decisions/0004-profile-schema-design.md — "noanimation by default" is one of the lived-experience-led defaults.
packages/core/schemas/profile.schema.json(preferences.motion: reduced | system | full).
.css, .scss, .tsx, or .jsxin packages/extension-browser/ or any docs site source.
gsap, motion).
ships to users.
git diff origin/main...HEAD --name-only and filters to.css, .scss, .tsx, .jsx, .ts, .js under packages/extension-browser/, docs/, and any other site source.
transition: / transition- (Tailwind)animation: / animation- (Tailwind)@keyframesframer-motion importsgsap / ScrollTrigger importsanimate() / <motion. JSX usageinside an @media (prefers-reduced-motion: no-preference) block (CSS) or the component reads useReducedMotion() / the profile's preferences.motion before triggering motion (JSX).
There is no scripted runner yet. Suggested invocation:
git diff origin/main...HEAD --name-only \
| grep -E '\.(css|scss|tsx|jsx|ts|js)$' \
| xargs -I{} grep -nHE \
'transition[:-]|animation[:-]|@keyframes|framer-motion|from .gsap|<motion\.|animate\(' \
{}Then for each hit, confirm guard:
@media (prefers-reduced-motion: no-preference) { ... }useReducedMotion() or the profile preference.card {
/* Static styles always run */
opacity: 1;
}
@media (prefers-reduced-motion: no-preference) {
.card {
transition: opacity var(--duration-normal) var(--ease-out-expo);
}
}const reduced = useReducedMotion();
// ...
<div style={{ transition: reduced ? "none" : "opacity 300ms" }}>Or, when honouring the profile preference (skill-side):
const { motion } = useProfilePreferences();
if (motion === "reduced") return <Static />;
return <Animated />;packages/extension-browser/src/popup/Welcome.tsx:42: <motion.div> — no useReducedMotion / profile guard
packages/extension-browser/src/styles/card.css:18: transition: opacity 200ms — no prefers-reduced-motion media queryExit non-zero on any unguarded hit.
contain the word transition outside CSS context.
those by hand.
responsibility of the component and the skill SDK (@neurodock/skill-sdk / neurodock-skill).
When flagging an unguarded animation, name the user impact in one line: "this animates on first load for every ND user with the default profile." Do not lecture about vestibular sensitivity; the contributor either already knows or will look it up.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.