fai-webapp-testing — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-webapp-testing (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.
Build a complete test strategy for modern web apps with deterministic CI gates.
| Layer | Target | Example Tools |
|---|---|---|
| Unit | Pure logic/components | Vitest, Jest |
| Integration | API + component interactions | Testing Library, Playwright component |
| E2E | User journeys | Playwright/Cypress |
| Accessibility | WCAG checks | axe-core |
| Performance | Core Web Vitals budget | Lighthouse CI |
import { describe, it, expect } from 'vitest';
describe('price formatter', () => {
it('formats USD values', () => {
expect(formatPrice(1999)).toBe('$19.99');
});
});render(<CheckoutPage />);
await user.click(screen.getByRole('button', { name: /pay now/i }));
expect(await screen.findByText(/payment successful/i)).toBeInTheDocument();test('user can complete checkout', async ({ page }) => {
await page.goto('/');
await page.getByRole('link', { name: 'Pricing' }).click();
await page.getByTestId('select-plan-pro').click();
await expect(page.getByText('Order confirmed')).toBeVisible();
});import AxeBuilder from '@axe-core/playwright';
const results = await new AxeBuilder({ page }).analyze();
expect(results.violations).toEqual([]);| Gate | Threshold |
|---|---|
| Unit coverage | >= 80% lines |
| E2E critical flow pass | 100% |
| Axe violations | 0 high/critical |
| Lighthouse performance | >= 80 |
| Issue | Cause | Fix |
|---|---|---|
| Flaky E2E | Timing and unstable selectors | Add explicit waits + semantic selectors |
| Slow test suite | Over-heavy E2E coverage | Shift non-critical checks to integration |
| A11y regressions | Missing lint/a11y checks | Add pre-merge axe + ESLint plugin |
# Example verification sequence
npm run lint
npm test
npm run build{
"quality_gate": {
"required": true,
"min_score": 0.8,
"block_on_failure": true
}
}| Control | Requirement |
|---|---|
| Secret handling | No plaintext secrets in repo |
| Access model | Least privilege role assignments |
| Logging | Redact sensitive data before persistence |
| Auditability | Keep immutable trace of critical actions |
| Symptom | Likely Cause | Recommended Action |
|---|---|---|
| Validation gate failures | Threshold too strict or wrong baseline | Recalibrate using a fixed reference dataset |
| Unexpected regressions | Missing scenario coverage | Add targeted regression tests and rerun |
| Production-only issues | Environment mismatch | Diff environment config and identity settings |
| Slow recovery during incidents | Unclear ownership/runbook steps | Add explicit owner and sequence in runbook |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.