skilldrop-cli 0.16.35 → 0.16.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/agents/README.md +4 -1
- package/agents/docs-reviewer.md +47 -0
- package/agents/finding-adjudicator.md +49 -0
- package/agents/test-reviewer.md +52 -0
- package/catalogue.json +19 -7
- package/model-routing.json +48 -0
- package/package.json +1 -1
- package/packs/ai-engineering/skills/agent-config-review/SKILL.md +116 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/eval_queries.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/evals.json +75 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/db-migrator.md +8 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/agents/reviewer.md +9 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.json +48 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.claude/settings.local.json +5 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/.mcp.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/1/package.json +12 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/.cursor/mcp.json +17 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/2/config.toml +21 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/my-user-settings.json +11 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/agents/release-notes.md +13 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.claude/settings.json +39 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/.mcp.json +18 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/4/quillstack/package.json +14 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/.github/workflows/codex-triage.yml +29 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/AGENTS.md +16 -0
- package/packs/ai-engineering/skills/agent-config-review/evals/files/5/codex/config.toml +34 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.claude/settings.json +22 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/inputs/tidewater-ingest/.mcp.json +9 -0
- package/packs/ai-engineering/skills/agent-config-review/examples/python-repo-tighten.md +81 -0
- package/packs/ai-engineering/skills/agent-config-review/manifest.json +60 -0
- package/packs/ai-engineering/skills/agent-config-review/reference.md +205 -0
- package/packs/ai-engineering/skills/agent-config-review/scripts/agent_config_scan.py +989 -0
- package/packs/ai-engineering/skills/agent-incident-response/SKILL.md +175 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/eval_queries.json +14 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/evals.json +107 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/agent-session-excerpt.txt +11 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/ci-build-log.txt +24 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/1/incident-notes.md +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/mcp-config.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/2/session-transcript.txt +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/agent-session.log +70 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/4/infra/staging-db.tf +25 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/job.yaml +19 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/jobs/nightly-triage/run.log +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/5/usage-export-2026-10-20.csv +13 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/.mcp.json +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/git-log.txt +12 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync-excerpt.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/notesync.log +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/6/ssh-config.txt +16 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/.github/workflows/ci.yml +28 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/SECURITY.md +8 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/issue-479.md +35 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/package.json +15 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/pr-482.diff +20 -0
- package/packs/ai-engineering/skills/agent-incident-response/evals/files/7/run-log.txt +30 -0
- package/packs/ai-engineering/skills/agent-incident-response/examples/injected-issue-comment.md +57 -0
- package/packs/ai-engineering/skills/agent-incident-response/manifest.json +55 -0
- package/packs/ai-engineering/skills/agent-incident-response/reference.md +152 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/find_secret_exposure.py +239 -0
- package/packs/ai-engineering/skills/agent-incident-response/scripts/usage_split.py +194 -0
- package/packs/ai-engineering/skills/judge-audit/SKILL.md +157 -0
- package/packs/ai-engineering/skills/judge-audit/evals/eval_queries.json +11 -0
- package/packs/ai-engineering/skills/judge-audit/evals/evals.json +136 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/1/judgements.csv +321 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/1/notes.md +28 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/2/pairwise.csv +101 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/2/run-notes.md +16 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/4/grades.csv +97 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/5/pairwise_judgements.jsonl +120 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/6/rag-judge/README.md +36 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/6/rag-judge/judgments.csv +301 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/7/moderation/gold_labels.csv +101 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/7/moderation/run_1.jsonl +100 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/7/moderation/run_2.jsonl +100 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/8/patches.csv +241 -0
- package/packs/ai-engineering/skills/judge-audit/evals/files/9/adequacy_ratings.csv +151 -0
- package/packs/ai-engineering/skills/judge-audit/examples/summary-panel.md +70 -0
- package/packs/ai-engineering/skills/judge-audit/manifest.json +44 -0
- package/packs/ai-engineering/skills/judge-audit/reference.md +176 -0
- package/packs/ai-engineering/skills/judge-audit/scripts/judge_stats.py +1735 -0
- package/packs/converters/skills/file-to-markdown/SKILL.md +2 -1
- package/packs/converters/skills/file-to-markdown/evals/eval_queries.json +4 -0
- package/packs/converters/skills/file-to-markdown/manifest.json +2 -2
- package/packs/converters/skills/file-to-markdown/scripts/to_markdown.py +253 -3
- package/packs/converters/skills/md-to-confluence/SKILL.md +139 -0
- package/packs/converters/skills/md-to-confluence/evals/eval_queries.json +42 -0
- package/packs/converters/skills/md-to-confluence/evals/evals.json +89 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/img/latency-dashboard.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/1/payments-runbook.md +60 -0
- package/packs/converters/skills/md-to-confluence/evals/files/2/deploy-checklist.md +33 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/after/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/img/before/screen.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/3/release-notes-4.2.md +49 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/img/topology.png +0 -0
- package/packs/converters/skills/md-to-confluence/evals/files/4/docs/ingest-pipeline-design.md +65 -0
- package/packs/converters/skills/md-to-confluence/evals/files/5/support/troubleshooting-sso.md +57 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/img/queue-depth.png +0 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.fixed.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/inputs/queue-runbook.md +21 -0
- package/packs/converters/skills/md-to-confluence/examples/queue-runbook.md +57 -0
- package/packs/converters/skills/md-to-confluence/manifest.json +52 -0
- package/packs/converters/skills/md-to-confluence/reference.md +92 -0
- package/packs/converters/skills/md-to-confluence/scripts/md_to_confluence.py +821 -0
- package/packs/converters/skills/md-to-pptx/SKILL.md +131 -0
- package/packs/converters/skills/md-to-pptx/evals/eval_queries.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/evals.json +84 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/img/defect-burndown.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/1/status-report.md +75 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/brand.json +12 -0
- package/packs/converters/skills/md-to-pptx/evals/files/3/night-shift-induction.md +53 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/charts/ontime.png +0 -0
- package/packs/converters/skills/md-to-pptx/evals/files/4/qbr-q3.md +85 -0
- package/packs/converters/skills/md-to-pptx/evals/files/5/vendor-sync-notes.md +28 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly-input.md +48 -0
- package/packs/converters/skills/md-to-pptx/examples/support-weekly.md +75 -0
- package/packs/converters/skills/md-to-pptx/examples/tickets-by-week.png +0 -0
- package/packs/converters/skills/md-to-pptx/manifest.json +49 -0
- package/packs/converters/skills/md-to-pptx/reference.md +139 -0
- package/packs/converters/skills/md-to-pptx/scripts/md_to_pptx.py +1841 -0
- package/packs/dev-team/loops/modernize/LOOP.md +124 -0
- package/packs/dev-team/loops/modernize/evals/eval_queries.json +9 -0
- package/packs/dev-team/loops/modernize/evals/evals.json +27 -0
- package/packs/dev-team/loops/modernize/loop.json +60 -0
- package/packs/dev-team/skills/behaviour-equivalence/SKILL.md +155 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/eval_queries.json +11 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/evals.json +76 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/cases.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/new.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/notes.md +15 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/old_rerun.jsonl +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v1.py +45 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/pricing_v2.py +65 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/1/rules.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/3/diff-summary.txt +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/diff.txt +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py2.py +16 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/fee_calc_py3.py +24 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/input.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/new_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/4/old_output.csv +13 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/TEAM_NOTES.md +19 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/normalisation.yaml +12 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/new_run.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run1.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/evals/files/5/recordings/old_run2.jsonl +8 -0
- package/packs/dev-team/skills/behaviour-equivalence/examples/delivery-date.md +78 -0
- package/packs/dev-team/skills/behaviour-equivalence/manifest.json +33 -0
- package/packs/dev-team/skills/behaviour-equivalence/reference.md +97 -0
- package/packs/dev-team/skills/behaviour-equivalence/scripts/golden_diff.py +524 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/accepted.json +10 -0
- package/packs/dev-team/skills/behaviour-equivalence/templates/rules.json +7 -0
- package/packs/frontend/pack.json +61 -0
- package/packs/frontend/skills/bundle-size-review/SKILL.md +114 -0
- package/packs/frontend/skills/bundle-size-review/evals/eval_queries.json +12 -0
- package/packs/frontend/skills/bundle-size-review/evals/evals.json +108 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/1/package.json +28 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/1/src/utils/format.js +26 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/1/stats.json +1334 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/2/PR.md +21 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/2/meta-after.json +440 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/2/meta-before.json +360 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/3/package.json +29 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/3/stats.json +1583 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/4/src/components/CommentBox.jsx +24 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/4/stats/after.json +299 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/4/stats/before.json +275 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/.browserslistrc +3 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/build/meta.json +371 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/build.mjs +18 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/package-lock.json +39 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/package.json +22 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/src/components/Icon.jsx +8 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/src/polyfills.js +7 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/5/src/utils/groupRows.js +4 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/.browserslistrc +3 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/package.json +25 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/App.tsx +8 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/i18n/chartLocales.ts +16 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/i18n/index.ts +8 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/i18n/messages/de.ts +5 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/i18n/messages/en.ts +5 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/i18n/useLocale.ts +14 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/main.tsx +10 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/pages/Home.tsx +14 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/pages/Reports.tsx +31 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/src/routes.tsx +17 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/stats.json +1869 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/6/vite.config.ts +13 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/package.json +26 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/src/App.tsx +27 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/src/pages/Analytics.tsx +10 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/src/pages/Users.tsx +13 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/stats.json +1421 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/backoffice/webpack.config.js +25 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/package.json +27 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/src/App.tsx +18 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/src/index.tsx +4 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/src/pages/Home.tsx +10 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/src/pages/Product.tsx +13 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/stats.json +1496 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/apps/storefront/webpack.config.js +26 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/package.json +9 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/dist/Button.css +3 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/dist/Button.js +14 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/dist/Chart.js +21 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/dist/index.js +22 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/package.json +20 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/src/Button.css +3 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/src/Button.tsx +9 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/src/Chart.tsx +14 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/src/index.ts +6 -0
- package/packs/frontend/skills/bundle-size-review/evals/files/7/packages/ui/tsconfig.json +14 -0
- package/packs/frontend/skills/bundle-size-review/examples/inputs/stats-after.json +1358 -0
- package/packs/frontend/skills/bundle-size-review/examples/inputs/stats-before.json +1334 -0
- package/packs/frontend/skills/bundle-size-review/examples/larkspur-sparkline.md +52 -0
- package/packs/frontend/skills/bundle-size-review/manifest.json +52 -0
- package/packs/frontend/skills/bundle-size-review/reference.md +147 -0
- package/packs/frontend/skills/bundle-size-review/scripts/bundle_stats.py +1633 -0
- package/packs/frontend/skills/rendering-strategy/SKILL.md +149 -0
- package/packs/frontend/skills/rendering-strategy/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/rendering-strategy/evals/evals.json +77 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/1/fernhill-app.md +40 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/3/routes.md +33 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/build-notes.txt +5 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/nuxt.config.ts +19 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/pages/recipes/[slug].vue +37 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/4/routes.md +15 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/routes.txt +18 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/hooks.server.ts +14 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/(marketing)/pricing/+page.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/src/routes/+layout.server.ts +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/svelte.config.js +10 -0
- package/packs/frontend/skills/rendering-strategy/evals/files/5/traffic.md +18 -0
- package/packs/frontend/skills/rendering-strategy/examples/saas-site.md +42 -0
- package/packs/frontend/skills/rendering-strategy/manifest.json +50 -0
- package/packs/frontend/skills/rendering-strategy/reference.md +116 -0
- package/packs/frontend/skills/rendering-strategy/scripts/render_load.py +181 -0
- package/packs/frontend/skills/web-performance-review/SKILL.md +106 -0
- package/packs/frontend/skills/web-performance-review/evals/eval_queries.json +38 -0
- package/packs/frontend/skills/web-performance-review/evals/evals.json +76 -0
- package/packs/frontend/skills/web-performance-review/evals/files/1/psi.json +1065 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/after.json +359 -0
- package/packs/frontend/skills/web-performance-review/evals/files/2/before.json +375 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/psi-pdp-mobile-2026-10-19.json +171 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-attribution-oct14-19.csv +6 -0
- package/packs/frontend/skills/web-performance-review/evals/files/4/rum-inp-daily.csv +15 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/crux-home-phone.json +35 -0
- package/packs/frontend/skills/web-performance-review/evals/files/5/lighthouse-home-mobile.json +173 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article-lhr.json +480 -0
- package/packs/frontend/skills/web-performance-review/examples/quayside-article.md +103 -0
- package/packs/frontend/skills/web-performance-review/manifest.json +49 -0
- package/packs/frontend/skills/web-performance-review/reference.md +105 -0
- package/packs/frontend/skills/web-performance-review/scripts/lh_summary.py +743 -0
- package/packs/product-manager/skills/lean-canvas/SKILL.md +162 -0
- package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +42 -0
- package/packs/product-manager/skills/lean-canvas/evals/evals.json +82 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +54 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +30 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +44 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +5 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +40 -0
- package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +18 -0
- package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +72 -0
- package/packs/product-manager/skills/lean-canvas/manifest.json +34 -0
- package/packs/product-manager/skills/lean-canvas/reference.md +102 -0
- package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +211 -0
- package/packs/solution-architect/skills/api-contract-draft/SKILL.md +2 -2
- package/packs/solution-architect/skills/api-contract-draft/manifest.json +28 -6
- package/packs/solution-architect/skills/event-contract-draft/SKILL.md +167 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/eval_queries.json +38 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/evals.json +76 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/1/order-events-brief.md +45 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/NOTES.md +23 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/4/schemas/shipment-update.json +40 -0
- package/packs/solution-architect/skills/event-contract-draft/evals/files/5/invoice.example.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.asyncapi.json +246 -0
- package/packs/solution-architect/skills/event-contract-draft/examples/order-service.md +92 -0
- package/packs/solution-architect/skills/event-contract-draft/manifest.json +25 -0
- package/packs/solution-architect/skills/event-contract-draft/reference.md +113 -0
- package/packs/solution-architect/skills/event-contract-draft/scripts/check_asyncapi.py +502 -0
- package/packs/solution-architect/skills/event-contract-draft/templates/asyncapi-skeleton.json +144 -0
- package/packs/sre-oncall/skills/slo-spec/SKILL.md +161 -0
- package/packs/sre-oncall/skills/slo-spec/evals/eval_queries.json +38 -0
- package/packs/sre-oncall/skills/slo-spec/evals/evals.json +75 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/1/order-service.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/3/search-slo-status.md +30 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/alerts/payments-api.rules.yaml +16 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/docs/dependencies.md +8 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/4/metrics/summary-90d.md +51 -0
- package/packs/sre-oncall/skills/slo-spec/evals/files/5/ops-notes.md +34 -0
- package/packs/sre-oncall/skills/slo-spec/examples/ticket-booking.md +88 -0
- package/packs/sre-oncall/skills/slo-spec/manifest.json +34 -0
- package/packs/sre-oncall/skills/slo-spec/reference.md +113 -0
- package/packs/sre-oncall/skills/slo-spec/scripts/slo_math.py +449 -0
- package/packs/sre-oncall/skills/slo-spec/templates/slo-spec.md +35 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Worked example — Larkspur Theatres booking API
|
|
2
|
+
|
|
3
|
+
## Input
|
|
4
|
+
|
|
5
|
+
> Set SLOs for our booking API. Customers browse showtimes (about 900,000 requests a day) and
|
|
6
|
+
> book seats (about 60,000 bookings a day). Booking calls our card processor, whose SLO is
|
|
7
|
+
> 99.95%; the API returns 200 only after the charge succeeds. Box-office staff use a back-office
|
|
8
|
+
> API, about 800 requests a day, 10:00–22:00. Last quarter from load balancer logs: browse
|
|
9
|
+
> 99.96%, booking 99.87%, back-office 99.4%. Our CTO wants "four nines everywhere". The team
|
|
10
|
+
> lead is Ines Calder; product owner is Raj Bhatt.
|
|
11
|
+
|
|
12
|
+
## Script runs
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
python3 scripts/slo_math.py --batch slos.json # browse, booking (with --dep 99.95)
|
|
16
|
+
python3 scripts/slo_math.py --name "Box-office API (probe every minute)" \
|
|
17
|
+
--target 99.5 --window 30 --rpd 1440 --alerts "6:6h:1h:ticket"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Output, abridged to the rows used below:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Browse showtimes (availability): 99.9% over 30 days
|
|
24
|
+
= 43.2 minutes of full outage per window (43m 12s)
|
|
25
|
+
= 27,000 bad requests per window at 900,000 requests/day
|
|
26
|
+
14.4x 1h 5m page 1.44% 2% 2d 2h 540 45
|
|
27
|
+
6x 6h 30m page 0.6% 5% 5d 1,350 112
|
|
28
|
+
1x 3d 6h ticket 0.1% 10% 30d 2,700 225
|
|
29
|
+
|
|
30
|
+
Book seats (end to end): 99.8% over 30 days
|
|
31
|
+
= 86.4 minutes of full outage per window (1h 26m 24s)
|
|
32
|
+
= 3,600 bad requests per window at 60,000 requests/day
|
|
33
|
+
14.4x 1h 5m page 2.88% 2% 2d 2h 72 6 *
|
|
34
|
+
Hard dependencies in series: 99.95% -> ceiling 99.95%; at their SLOs they spend 25% of this budget
|
|
35
|
+
- 14.4x 1h/5m: only 6 bad events in the 5m short window ... the short window will flap.
|
|
36
|
+
|
|
37
|
+
Box-office API (probe every minute): 99.5% over 30 days
|
|
38
|
+
= 216 minutes of full outage per window (3h 36m)
|
|
39
|
+
6x 6h 1h ticket 3% 5% 5d 10.8 1.8 *
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Reply
|
|
43
|
+
|
|
44
|
+
**Four nines isn't reachable for booking: every booking needs the card processor, which only
|
|
45
|
+
promises 99.95%, so 99.99% would be spent five times over by the processor alone. I've set
|
|
46
|
+
booking at 99.8% (last quarter ran 99.87%), browse at 99.9%, and the back-office API at 99.5%
|
|
47
|
+
on a synthetic probe, because 800 requests a day is too few to page on.**
|
|
48
|
+
|
|
49
|
+
Assumptions: 30-day rolling window; traffic is the daily average you gave; the 1 s, 10 s and
|
|
50
|
+
2 s thresholds are mine `[assumption]`.
|
|
51
|
+
|
|
52
|
+
| Journey | SLI (good / valid) | Measured at | Target | Budget per 30 days |
|
|
53
|
+
|---|---|---|---|---|
|
|
54
|
+
| Browse showtimes | Good: non-5xx in < 1 s / Valid: all `GET /showtimes`, excluding health checks and bots | Load balancer | 99.9% | 43.2 min · 27,000 bad requests |
|
|
55
|
+
| Book seats | Good: 200 or a bank decline within 10 s / Valid: all `POST /bookings`, excluding 4xx validation errors | Load balancer | 99.8% | 86.4 min · 3,600 bad bookings |
|
|
56
|
+
| Back-office API | Good: probe gets a correct answer in < 2 s / Valid: one probe a minute | Probe | 99.5% | 216 min of failed probes |
|
|
57
|
+
|
|
58
|
+
At its own SLO the card processor spends 25% of booking's budget. Going above 99.95% would need
|
|
59
|
+
a second processor or an accept-now, charge-later path.
|
|
60
|
+
|
|
61
|
+
| Journey | Burn | Long / short | Trips at | Budget at fire | Exhausts in | Action |
|
|
62
|
+
|---|---|---|---|---|---|---|
|
|
63
|
+
| Browse | 14.4× | 1 h / 5 m | 1.44% errors | 2% | 2 d 2 h | page |
|
|
64
|
+
| Browse | 6× | 6 h / 30 m | 0.6% | 5% | 5 d | page |
|
|
65
|
+
| Browse | 1× | 3 d / 6 h | 0.1% | 10% | 30 d | ticket |
|
|
66
|
+
| Booking | 14.4× | 1 h / 15 m | 2.88% | 2% | 2 d 2 h | page |
|
|
67
|
+
| Booking | 6× | 6 h / 30 m | 1.2% | 5% | 5 d | page |
|
|
68
|
+
| Booking | 1× | 3 d / 6 h | 0.2% | 10% | 30 d | ticket |
|
|
69
|
+
| Back-office | 6× | 6 h / 1 h | 3% of probes | 5% | 5 d | ticket, 10:00–22:00 |
|
|
70
|
+
|
|
71
|
+
Booking's 5-minute short window would hold about 6 failed bookings at the threshold and
|
|
72
|
+
flap, so it is 15 minutes. The back-office probe still has fewer than 2 failures expected in an
|
|
73
|
+
hour, so it raises a ticket and never pages; staff will report an outage faster than a page.
|
|
74
|
+
|
|
75
|
+
**Error-budget policy** (owner: Ines Calder; to be agreed with Raj Bhatt before it applies)
|
|
76
|
+
|
|
77
|
+
| Budget state | What changes |
|
|
78
|
+
|---|---|
|
|
79
|
+
| 50% spent in the first 15 days | Reliability work tops the next sprint |
|
|
80
|
+
| 100% spent | Only fixes and security patches ship until the 30-day budget is positive |
|
|
81
|
+
| Card processor spent it | Raise it with the processor using the numbers; the freeze still covers risky changes |
|
|
82
|
+
|
|
83
|
+
Exception: the CTO approves a release during a freeze in writing, recorded on the release ticket.
|
|
84
|
+
|
|
85
|
+
To confirm: the three latency thresholds; whether bank declines reach the API as 200 or 402.
|
|
86
|
+
|
|
87
|
+
Next step: add the browse and booking alerts to the alerting system and set up the
|
|
88
|
+
back-office probe.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "slo-spec",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Define service level objectives for a service from its critical user journeys — each SLI a good-events / valid-events ratio with both sides defined and measured where the user feels it, a target set from user need and history (checked against dependency SLOs), the error budget computed in minutes and bad requests at current traffic, multi-window burn-rate alerts with the budget consumed when each fires, low-traffic handling, and an error-budget policy with owners. Use when the user asks to \"define SLOs\", \"write our SLIs\", \"how much error budget do we have\", \"what burn-rate alerts should page\", \"is 99.99% realistic\", or \"write an error-budget policy\".",
|
|
5
|
+
"entrypoint": "SKILL.md",
|
|
6
|
+
"deps": { "npm": [], "pip": [] },
|
|
7
|
+
"env": { "required": [], "optional": [] },
|
|
8
|
+
"related": ["delivery-metrics-report", "nfr-spec", "observability-plan", "runbook-generator"],
|
|
9
|
+
"handoff": [
|
|
10
|
+
{
|
|
11
|
+
"to": "observability-plan",
|
|
12
|
+
"when": "the SLIs are agreed and the telemetry to produce them doesn't exist yet",
|
|
13
|
+
"purpose": "Design the instrumentation, logs, traces and dashboards behind the SLIs.",
|
|
14
|
+
"fallback": "If observability-plan is absent, list per SLI the event source, the measurement point and the counter it needs, inline."
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"to": "runbook-generator",
|
|
18
|
+
"when": "the burn-rate alerts are defined and each page needs a procedure",
|
|
19
|
+
"purpose": "Write the steps on-call follows when each alert fires.",
|
|
20
|
+
"fallback": "If runbook-generator is absent, write the first three checks for each paging alert inline."
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"tags": ["slo", "sli", "error-budget", "burn-rate", "sre"],
|
|
24
|
+
"permissions": {
|
|
25
|
+
"network": [],
|
|
26
|
+
"commands": [],
|
|
27
|
+
"files": "named-paths",
|
|
28
|
+
"notes": "slo_math.py does arithmetic only; it reads an optional --batch JSON file or stdin and writes only the -o path the user names."
|
|
29
|
+
},
|
|
30
|
+
"model": {
|
|
31
|
+
"tier": "standard",
|
|
32
|
+
"rationale": "SLI choice is bounded judgment over user journeys; error-budget and burn-rate arithmetic is done by its script."
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# slo-spec reference — SLIs, budgets, burn rates, dependencies, low traffic, policy
|
|
2
|
+
|
|
3
|
+
## SLI menu by journey type
|
|
4
|
+
|
|
5
|
+
| Journey type | SLI (good / valid) | Typical good threshold |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Request/response (API, page) | Availability: non-5xx, non-timeout responses / valid requests | — |
|
|
8
|
+
| Request/response | Latency: requests answered under T / valid requests | T from what users tolerate (search ~1 s, API ~300 ms) |
|
|
9
|
+
| Asynchronous (queue, job) | End-to-end: items whose result is visible to the user within T of submission / valid submissions | T from the user's wait (order confirmed in 30 s) |
|
|
10
|
+
| Data pipeline | Freshness: reads served data newer than T / valid reads | T from how stale the user can bear |
|
|
11
|
+
| Data pipeline | Correctness: records passing a known-answer check / records checked | — |
|
|
12
|
+
| Batch | Completion: runs finished by deadline / scheduled runs | the deadline the consumer needs |
|
|
13
|
+
| Streaming / long session | Time-based: minutes with the stream healthy / minutes in use | — |
|
|
14
|
+
|
|
15
|
+
Use two SLIs for a journey at most (availability and latency is the usual pair). Latency is
|
|
16
|
+
always "share under a threshold", never an average or a bare percentile value.
|
|
17
|
+
|
|
18
|
+
## Defining "valid"
|
|
19
|
+
|
|
20
|
+
Write the exclusions explicitly. The usual list:
|
|
21
|
+
|
|
22
|
+
- **Exclude:** client errors the user caused (4xx validation, 401 bad credentials, 404 for
|
|
23
|
+
genuinely missing items), business declines that are correct outcomes (a card the bank
|
|
24
|
+
declines), health checks, synthetic and load-test traffic, requests from blocked bots.
|
|
25
|
+
- **Keep as valid (and bad):** 5xx, timeouts, 429s our own limits caused, a 200 carrying an
|
|
26
|
+
error body, a 202 whose job never completes, a cancelled request the user gave up on after
|
|
27
|
+
the threshold.
|
|
28
|
+
- **State the rule once** and apply it to both numerator and denominator. An SLI whose
|
|
29
|
+
numerator and denominator come from different sources drifts.
|
|
30
|
+
|
|
31
|
+
## Measurement points and what each misses
|
|
32
|
+
|
|
33
|
+
| Point | Sees | Misses |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| Client / real-user beacon | What the user experienced, including network and rendering | Users who never load the beacon; noisy, needs sampling care |
|
|
36
|
+
| Synthetic probe | A fixed, known rate of events; works at zero traffic | Real users' paths and data |
|
|
37
|
+
| Load balancer / edge logs | Every request, total server-side time including queueing in front of the app | Client network, DNS, CDN failures before the LB |
|
|
38
|
+
| App server timer | Handler time | Time waiting in the accept queue, thread pool or message queue |
|
|
39
|
+
| Worker timer behind a queue | Processing time only | The queue wait — the part that grows under load |
|
|
40
|
+
|
|
41
|
+
On an async path, stamp the time the request reached the edge and measure to the moment the
|
|
42
|
+
result is visible to the user. Queue depth is a cause signal; it is not the SLI.
|
|
43
|
+
|
|
44
|
+
## Error-budget arithmetic
|
|
45
|
+
|
|
46
|
+
- Budget fraction `b = 1 − target` (99.9% → 0.001).
|
|
47
|
+
- Minutes of full outage per window = `b × window_days × 1440`. 99.9% / 30 d = 43.2 min;
|
|
48
|
+
99.9% / 28 d = 40.32 min; 99.95% / 30 d = 21.6 min; 99.99% / 30 d = 4.32 min.
|
|
49
|
+
- Bad requests per window = `b × requests_per_day × window_days`.
|
|
50
|
+
- Minutes and requests agree only under even traffic. A peak hour at 3× average burns 3×
|
|
51
|
+
faster in budget terms than the minutes suggest.
|
|
52
|
+
|
|
53
|
+
## Burn-rate alerts
|
|
54
|
+
|
|
55
|
+
Burn rate `B` = observed error rate / `b`. At 1× the budget lasts exactly the window.
|
|
56
|
+
|
|
57
|
+
- Error rate that trips an alert = `B × b`.
|
|
58
|
+
- Budget consumed when it fires = `B × long_window_hours / (window_days × 24)`.
|
|
59
|
+
- Time from a full budget to exhaustion = `window_days × 24 / B` hours.
|
|
60
|
+
- Expected bad events in a window at the threshold = `B × b × requests_per_hour × window_hours`.
|
|
61
|
+
Under ~10, the window fires on a handful of failures.
|
|
62
|
+
|
|
63
|
+
Default set (Google SRE workbook, "Alerting on SLOs", for a 30-day window):
|
|
64
|
+
|
|
65
|
+
| Burn | Long | Short | Budget at fire | Exhausts in | Action |
|
|
66
|
+
|---|---|---|---|---|---|
|
|
67
|
+
| 14.4× | 1 h | 5 m | 2% | 50 h | page |
|
|
68
|
+
| 6× | 6 h | 30 m | 5% | 5 d | page |
|
|
69
|
+
| 1× | 3 d | 6 h | 10% | 30 d | ticket |
|
|
70
|
+
|
|
71
|
+
Fire only when both windows exceed the rate: the long one proves it's significant, the short
|
|
72
|
+
one proves it's still happening, so the alert resets within minutes of the fix. A burn rate
|
|
73
|
+
above `1 / b` can never fire (14.4× on a 95% target needs a 72% error rate; at 90%, 144%).
|
|
74
|
+
|
|
75
|
+
## Dependency ceilings
|
|
76
|
+
|
|
77
|
+
Hard dependencies called in series multiply: two at 99.9% and 99.95% give a ceiling of
|
|
78
|
+
`0.999 × 0.9995 = 99.85%`. A target above the ceiling needs one of:
|
|
79
|
+
|
|
80
|
+
- a second provider or replica in parallel (`1 − (1 − a)²` for two independent copies at `a`),
|
|
81
|
+
- a cache or stale-read fallback so the dependency's failure isn't the user's failure,
|
|
82
|
+
- an async path (accept now, retry later) where the journey tolerates delay.
|
|
83
|
+
|
|
84
|
+
Share of the budget a dependency spends at its own SLO = `(1 − ceiling) / b`. At 50% or
|
|
85
|
+
more, the service's own failures have half the room the number suggests.
|
|
86
|
+
|
|
87
|
+
## Low-traffic journeys
|
|
88
|
+
|
|
89
|
+
A ratio SLI needs volume. When the expected bad events per alert window are under ~10:
|
|
90
|
+
|
|
91
|
+
1. **Lengthen the SLO window** (90 days) so the budget holds more than a few events.
|
|
92
|
+
2. **Lengthen alert windows** and accept slower detection; say how much slower.
|
|
93
|
+
3. **Add a synthetic probe** at a fixed rate (one a minute = 1,440 events/day) and set the
|
|
94
|
+
SLI on probes, or on probes plus real requests.
|
|
95
|
+
4. **Alert only when someone uses it:** ticket within working hours, page never, if the users
|
|
96
|
+
are staff who will report a failure themselves.
|
|
97
|
+
5. **Group** several low-traffic endpoints with the same users into one SLI.
|
|
98
|
+
|
|
99
|
+
State which and why; don't silently reuse the high-traffic paging set.
|
|
100
|
+
|
|
101
|
+
## Error-budget policy skeleton
|
|
102
|
+
|
|
103
|
+
| Budget state | What changes | Who decides |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| < 50% spent | Normal releases | Team |
|
|
106
|
+
| ≥ 50% spent before half the window | Reliability work goes to the top of the next sprint; risky changes need review | Engineering lead |
|
|
107
|
+
| 100% spent | Freeze: only fixes, security patches and reliability changes ship until the budget is positive over the window | Engineering lead; product owner informed |
|
|
108
|
+
| Spent by one incident > 20% of budget | Postmortem with actions, tracked to done | Incident owner |
|
|
109
|
+
| Spent by a dependency | Escalate to the dependency's owner with the numbers; the freeze still covers risky changes; revisit the target or the redundancy | Engineering lead |
|
|
110
|
+
|
|
111
|
+
Plus: an **exception route** (who can approve shipping during a freeze, in writing, and how it
|
|
112
|
+
is recorded), **what's exempt** (security patches, legal deadlines), **agreed in advance** by
|
|
113
|
+
product and engineering with names or roles, and a **review date** for the targets themselves.
|