go — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited go (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.
Take the change that's currently on this branch and drive it to a PR. Never skip steps to "make it green faster" — if something fails, fix the root cause or stop and report.
Run git diff --name-only main...HEAD and (if dirty) git status --porcelain. Classify each changed file:
apps/api/src/capabilities/*.ts or manifests/*.yamlapps/api/src/routes/*.ts or apps/api/src/app.ts or apps/api/src/lib/*.tsapps/api/src/db/** or apps/api/drizzle/**packages/sdk-typescript/**, packages/mcp-server/**, packages/langchain-strale/**, packages/crewai-strale/**, packages/semantic-kernel-strale/**strale-frontend (separate repo — skip unless user says so)*.md, CLAUDE.md, .claude/** (no code verification, just PR)A change can span categories. Run verification for every category touched.
cd apps/api && npx tsc --noEmit --project tsconfig.jsonFor each touched capability slug:
cd apps/api
npx tsx scripts/validate-capability.ts --slug <slug>
npx tsx scripts/smoke-test.ts --slug <slug>Also verify checkReadiness(slug) returns ready: true (see src/lib/capability-readiness.ts). If the capability is new, confirm a manifest exists at manifests/<slug>.yaml — if not, STOP and report. This enforces the Capability Onboarding Protocol (DEC-20260320-B).
Never edit src/lib/sqs.ts to "fix" a score — that's the Scoring Integrity rule. Fix the root cause.
cd apps/api && npx vitest run <touched-test-file>If there's no test for the touched route, say so explicitly in the final report. Do not invent tests as part of /go — that's a separate task.
Confirm a migration file exists in apps/api/drizzle/ corresponding to the schema change. If schema changed but no migration, STOP.
npm run build --workspace=<package>If types are published surface, also run the consumer-side typecheck (e.g., npx tsc --noEmit in the package dir).
If capability categories, endpoints, auth flow, or pricing model changed, flag that strale-frontend/public/llms.txt may need updating (per CLAUDE.md). Do not edit it from here — flag it in the PR body.
Invoke the simplify skill on the changed code. Accept its edits if they're strictly improvements. If it proposes structural changes that would bloat scope, defer them — mention in the PR body instead.
After verification + simplify, before opening the PR, run a multi-lens review on the diff in parallel. Petter is non-technical and depends on these lenses being applied at PR-creation time, where findings land in the PR description before approving merge — not as a separate output that gets lost.
Use the feature-dev:code-reviewer subagent for both passes below. Send both in a single message so they run concurrently. Each pass takes 1–3 minutes; serial would double the latency.
Prompt the reviewer to apply four overlapping technical lenses on the diff:
safeFetch), SQL injection (any string-built query → must use parameterised drizzle), secrets exposure (any console.log or log.info of process.env.*?), missing auth (new route without authMiddleware?), missing input validation, side-effect imports of files this PR deletes (TypeScript with NodeNext does NOT flag missing .js targets — grep manually).lib/? Does it introduce a new abstraction where copy-paste would have been simpler, or copy-paste where an abstraction is needed (third instance of the same pattern)? Are cross-cutting concerns (logging, errors, auth) handled consistently with neighbours?CLAUDE.md or the Decisions DB (DEC-20260428-A scraping doctrine, DEC-20260428-B engineering bar, DEC-20260420-H direct connections, etc.)? Does it create technical debt the team hasn't budgeted for? Is the change scoped to one concern, or does it bundle three unrelated things? Is there a "this is the third one-off integration with vendor X — should we abstract?" pattern?Pass it: the branch name, target main, and a one-paragraph summary of intent.
Prompt the reviewer to apply three overlapping product lenses on the diff:
*_cents for money, ISO 8601 for dates, inputs not input per the request envelope, slugs match catalog conventions). Naming — would an external developer searching docs find this? Defaults — does the caller have to specify boilerplate Strale could pick? If Petter sees this in a log line tomorrow, will he understand it without asking?Pass it the same context as Pass A.
Pass A's "CTO/architect" lenses are stronger than Pass B's "PM" lens, because the diff carries enough signal for "is this coupled wrong?" but rarely enough for "is this the right thing to build?" — that needs roadmap context the agent doesn't have. Treat PM findings as flags to consider, not authoritative judgments. The UX and founder findings within Pass B are sharper because they read straight from the code.
Aggregate findings from both passes. Classify each:
## Reviewer findings so Petter can decide before merge. Examples: error messages could be better, naming inconsistent with another endpoint, missing example in docstring, layering choice that's defensible but worth flagging.If both passes come back fully clean, note it explicitly in the PR body (## Reviewer findings — clean (technical + product)). Clean is a real outcome, not a reason to invent findings.
Only proceed if every gate in step 2 passed AND no HIGH findings remain from step 4.
git add -A).Co-Authored-By trailer from the root guidance.git push -u origin <branch>.gh pr create using a HEREDOC body in the standard Strale format:llms.txt or sitemap.xml needs an updateEnd the session with:
Stop and report — do not PR — if any of the following:
checkReadiness returns ready: false for a touched capabilitymainReport what's blocking in plain language. The user decides whether to override.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.