skilldrop-cli 1.3.0 → 1.4.0

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.
Files changed (172) hide show
  1. package/README.md +4 -4
  2. package/catalogue.json +4 -4
  3. package/model-routing.json +62 -70
  4. package/package.json +1 -1
  5. package/packs/ai-engineering/skills/agent-adoption-stage/SKILL.md +0 -1
  6. package/packs/ai-engineering/skills/agent-adoption-stage/manifest.json +3 -4
  7. package/packs/ai-engineering/skills/ai-adoption-rollout/SKILL.md +0 -1
  8. package/packs/ai-engineering/skills/ai-adoption-rollout/manifest.json +3 -4
  9. package/packs/ai-engineering/skills/ai-readiness-assessment/SKILL.md +0 -1
  10. package/packs/ai-engineering/skills/ai-readiness-assessment/manifest.json +1 -2
  11. package/packs/ai-engineering/skills/ai-use-case-triage/manifest.json +3 -3
  12. package/packs/ai-engineering/skills/judge-audit/SKILL.md +1 -2
  13. package/packs/ai-engineering/skills/judge-audit/manifest.json +1 -2
  14. package/packs/ai-engineering/skills/llm-eval-harness/SKILL.md +1 -2
  15. package/packs/ai-engineering/skills/llm-eval-harness/manifest.json +3 -3
  16. package/packs/api-builder/skills/tool-use-schema-writer/manifest.json +2 -2
  17. package/packs/career/loops/apply/evals/evals.json +28 -0
  18. package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/application-form.md +10 -0
  19. package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/job-posting.md +33 -0
  20. package/packs/career/loops/apply/evals/files/apply-candidate-decided-full-run/resume.md +34 -0
  21. package/packs/career/loops/apply/evals/files/apply-fit-gate-hard-requirement/cv.md +27 -0
  22. package/packs/career/loops/apply/evals/files/apply-fit-gate-hard-requirement/warehouse-supervisor.md +30 -0
  23. package/packs/career/skills/application-form-answers/manifest.json +3 -3
  24. package/packs/career/skills/cover-letter/manifest.json +3 -3
  25. package/packs/career/skills/resume-tailor/manifest.json +3 -3
  26. package/packs/converters/skills/md-to-docx/manifest.json +3 -3
  27. package/packs/core/loops/ship-a-draft/evals/evals.json +28 -0
  28. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-adr-from-thread/slack-thread.txt +47 -0
  29. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-announcement-unsettled/ticket-PRD-412.md +44 -0
  30. package/packs/core/skills/output-hygiene/manifest.json +3 -3
  31. package/packs/data-analytics/loops/measure/evals/evals.json +30 -0
  32. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/schema.md +43 -0
  33. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/sql/finance_active_customers.sql +7 -0
  34. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/sql/growth_active_customers.sql +9 -0
  35. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/thread.md +30 -0
  36. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/request.md +34 -0
  37. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/schema.md +58 -0
  38. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/active_subscribers.sql +17 -0
  39. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/net_revenue_by_plan.sql +15 -0
  40. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/weekly_churn_rate.sql +34 -0
  41. package/packs/data-analytics/skills/dashboard-spec/SKILL.md +0 -1
  42. package/packs/data-analytics/skills/dashboard-spec/manifest.json +1 -2
  43. package/packs/design/skills/slide-outliner/manifest.json +2 -2
  44. package/packs/dev-team/loops/build/evals/evals.json +28 -0
  45. package/packs/dev-team/loops/build/evals/files/build-promo-codes/.github/workflows/ci.yml.fixture +19 -0
  46. package/packs/dev-team/loops/build/evals/files/build-promo-codes/cartcalc/__init__.py +4 -0
  47. package/packs/dev-team/loops/build/evals/files/build-promo-codes/cartcalc/pricing.py +47 -0
  48. package/packs/dev-team/loops/build/evals/files/build-promo-codes/pyproject.toml.fixture +9 -0
  49. package/packs/dev-team/loops/build/evals/files/build-promo-codes/story.md +61 -0
  50. package/packs/dev-team/loops/build/evals/files/build-promo-codes/tests/__init__.py +0 -0
  51. package/packs/dev-team/loops/build/evals/files/build-promo-codes/tests/test_pricing.py +49 -0
  52. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/.github/workflows/ci.yml.fixture +19 -0
  53. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/bug-report.md +25 -0
  54. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/pr-description.md +42 -0
  55. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/pyproject.toml.fixture +9 -0
  56. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/ratelimit/__init__.py +4 -0
  57. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/ratelimit/bucket.py +49 -0
  58. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/tests/__init__.py +0 -0
  59. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/tests/test_bucket.py +63 -0
  60. package/packs/dev-team/loops/modernize/evals/evals.json +30 -0
  61. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/.github/workflows/ci.yml.fixture +11 -0
  62. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/README.md +17 -0
  63. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/docs/adr/0004-late-fee-calculation.md +25 -0
  64. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/legacy/feecalc.py +74 -0
  65. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/samples/accounts_2026-10.txt +10 -0
  66. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/samples/accounts_edge.txt +11 -0
  67. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/tests/test_feecalc_smoke.py +21 -0
  68. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/.github/workflows/ci.yml.fixture +11 -0
  69. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/PR-412.md +24 -0
  70. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/README.md +17 -0
  71. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/docs/adr/0004-late-fee-calculation.md +25 -0
  72. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/__init__.py +1 -0
  73. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/cli.py +33 -0
  74. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/extract.py +33 -0
  75. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/rules.py +39 -0
  76. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/legacy/feecalc.py +74 -0
  77. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/samples/accounts_2026-10.txt +10 -0
  78. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/samples/accounts_edge.txt +11 -0
  79. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/tests/test_feecalc_smoke.py +21 -0
  80. package/packs/dev-team/loops/release/evals/eval_queries.json +10 -0
  81. package/packs/dev-team/loops/release/evals/evals.json +34 -0
  82. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/0061_switch_to_haldrin_tokens.sql +22 -0
  83. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/eng-notes.md +40 -0
  84. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/merged-prs.md +13 -0
  85. package/packs/dev-team/loops/release/evals/files/release-saved-searches/merged-prs.md +13 -0
  86. package/packs/dev-team/loops/release/evals/files/release-saved-searches/readiness-evidence.md +27 -0
  87. package/packs/dev-team/loops/release/evals/files/release-saved-searches/traffic-baseline.md +23 -0
  88. package/packs/dev-team/skills/feature-implement-loop/manifest.json +2 -2
  89. package/packs/dev-team/skills/pr-description-writer/manifest.json +3 -3
  90. package/packs/dev-team/skills/pre-merge-review/manifest.json +2 -2
  91. package/packs/dev-team/skills/release-notes/manifest.json +2 -2
  92. package/packs/dev-team/skills/test-plan-generator/manifest.json +2 -2
  93. package/packs/experience-design/skills/service-blueprint/manifest.json +3 -3
  94. package/packs/experience-design/skills/ux-writing/manifest.json +3 -3
  95. package/packs/grc/loops/comply/evals/evals.json +29 -0
  96. package/packs/grc/loops/comply/evals/files/comply-chat-vendor-launch/vendor-brief.md +72 -0
  97. package/packs/grc/loops/comply/evals/files/comply-loyalty-app-unowned-risks/launch-note.md +31 -0
  98. package/packs/grc/loops/comply/evals/files/comply-loyalty-app-unowned-risks/risk-register.csv +6 -0
  99. package/packs/infra-as-code/skills/terraform-module/manifest.json +3 -3
  100. package/packs/product-manager/loops/discover/evals/evals.json +28 -0
  101. package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/interview-notes.md +63 -0
  102. package/packs/product-manager/loops/discover/evals/files/discover-no-show-signal/support-tickets.csv +13 -0
  103. package/packs/product-manager/loops/discover/evals/files/discover-vp-loyalty-no-evidence/vp-message.txt +13 -0
  104. package/packs/product-manager/skills/user-journey-map/manifest.json +2 -2
  105. package/packs/research/loops/research/evals/evals.json +28 -0
  106. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t1-ticket-volume.md +15 -0
  107. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t2-release-notes-4-2.md +11 -0
  108. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t3-billing-migration.md +12 -0
  109. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t4-agent-poll.md +11 -0
  110. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t5-app-store-reviews.md +12 -0
  111. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s1-analytics-export.md +29 -0
  112. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s2-email-delivery-report.md +25 -0
  113. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s3-pricing-changelog.md +9 -0
  114. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s4-trial-interview-notes.md +21 -0
  115. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s5-competitor-note.md +9 -0
  116. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s6-weekly-growth-recap.md +7 -0
  117. package/packs/research/skills/research-plan/manifest.json +3 -3
  118. package/packs/research/skills/source-synthesis/manifest.json +3 -3
  119. package/packs/skill-engineering/skills/skill-author/manifest.json +3 -3
  120. package/packs/solution-architect/loops/design/evals/evals.json +28 -0
  121. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0001-postgres-system-of-record.md +23 -0
  122. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0002-background-work-via-job-queue.md +23 -0
  123. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0003-tenant-isolation-row-level.md +25 -0
  124. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/prd-bulk-export.md +50 -0
  125. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/adr/0002-background-work-via-job-queue.md +23 -0
  126. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/adr/0004-new-stateful-infra-needs-platform-signoff.md +22 -0
  127. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/prd-partner-webhooks.md +36 -0
  128. package/packs/solution-architect/skills/api-contract-draft/manifest.json +3 -3
  129. package/packs/solution-architect/skills/architecture-diagrams/manifest.json +3 -3
  130. package/packs/solution-architect/skills/design-doc/manifest.json +2 -2
  131. package/packs/solution-architect/skills/figma-diagrams/manifest.json +3 -3
  132. package/packs/sre-oncall/loops/operate/evals/evals.json +28 -0
  133. package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/alerts.log +22 -0
  134. package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/incident-chat.txt +27 -0
  135. package/packs/sre-oncall/loops/operate/evals/files/operate-export-service-first-outage/service-notes.md +46 -0
  136. package/packs/sre-oncall/loops/operate/evals/files/operate-incident-still-open/oncall-log.txt +17 -0
  137. package/packs/sre-oncall/loops/operate/evals/files/operate-incident-still-open/runbook-webhooks.md +38 -0
  138. package/packs/sre-oncall/skills/cloud-cost-review/SKILL.md +0 -1
  139. package/packs/sre-oncall/skills/cloud-cost-review/manifest.json +1 -2
  140. package/packs/sre-oncall/skills/delivery-metrics-report/SKILL.md +0 -1
  141. package/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +1 -2
  142. package/packs/sre-oncall/skills/incident-comms/manifest.json +2 -2
  143. package/packs/sre-oncall/skills/postmortem-generator/manifest.json +2 -2
  144. package/packs/stakeholder-comms/skills/decision-log/manifest.json +2 -2
  145. package/packs/trackers/skills/team-status-report/manifest.json +3 -3
  146. package/packs/ai-engineering/skills/ai-usage-report/SKILL.md +0 -111
  147. package/packs/ai-engineering/skills/ai-usage-report/evals/eval_queries.json +0 -30
  148. package/packs/ai-engineering/skills/ai-usage-report/evals/evals.json +0 -46
  149. package/packs/ai-engineering/skills/ai-usage-report/evals/files/1/northwind-ai-events.csv +0 -4213
  150. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/draftwell-events.csv +0 -249
  151. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/export-note.md +0 -9
  152. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/published-assets.csv +0 -44
  153. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/team-roster.md +0 -10
  154. package/packs/ai-engineering/skills/ai-usage-report/examples/weekly-engineering-team.md +0 -133
  155. package/packs/ai-engineering/skills/ai-usage-report/manifest.json +0 -12
  156. package/packs/ai-engineering/skills/ai-usage-report/scripts/build_report.py +0 -453
  157. package/packs/ai-engineering/skills/ai-usage-report/templates/report-per-user.md +0 -42
  158. package/packs/ai-engineering/skills/ai-usage-report/templates/report-team-rollup.md +0 -49
  159. package/packs/ai-engineering/skills/ai-usage-report/templates/usage-event-schema.md +0 -76
  160. package/packs/product-manager/skills/lean-canvas/SKILL.md +0 -162
  161. package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +0 -42
  162. package/packs/product-manager/skills/lean-canvas/evals/evals.json +0 -82
  163. package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +0 -54
  164. package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +0 -30
  165. package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +0 -44
  166. package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +0 -5
  167. package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +0 -40
  168. package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +0 -18
  169. package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +0 -72
  170. package/packs/product-manager/skills/lean-canvas/manifest.json +0 -34
  171. package/packs/product-manager/skills/lean-canvas/reference.md +0 -102
  172. package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +0 -211
@@ -0,0 +1,46 @@
1
+ # invoice-export — service notes
2
+
3
+ Owner: billing-platform team (Pellmoor)
4
+ Status: soft launch since 2026-10-06, enabled for all customers on the Business plan
5
+
6
+ ## What it does
7
+
8
+ Customers click "Export invoices" in the web app and pick a date range and a format (CSV or PDF bundle). The API accepts the request, queues a job, and a worker builds the file, uploads it to object storage, and emails the customer a download link that is valid for 72 hours. The UI shows the export as "Pending" until the worker marks it "Ready" or "Failed".
9
+
10
+ ## Components
11
+
12
+ - `export-api` — 3 pods behind the internal gateway. Endpoints: `POST /v1/exports`, `GET /v1/exports/{id}`.
13
+ - `export-worker` — Kubernetes deployment, 6 pods, each pod runs N concurrent jobs (setting: `WORKER_CONCURRENCY`, currently 8). Memory limit 2 GiB per pod.
14
+ - Job queue — the shared platform job queue, queue name `invoice-export`.
15
+ - Postgres read replica `billing-replica-2` — workers read invoice rows from here.
16
+ - Object storage bucket `exports.pellmoor.example`.
17
+ - Email — the shared notifications service sends the "your export is ready" email.
18
+
19
+ ## Traffic
20
+
21
+ - About 12,000 export requests a day.
22
+ - Peak is Monday 09:00–10:00 UTC (month-end and Monday morning are the busiest).
23
+ - Typical CSV export finishes in under 1 minute; PDF bundles of 500+ invoices can take 3–4 minutes.
24
+
25
+ ## What product has told customers
26
+
27
+ The help-centre article says "most exports are ready within 5 minutes". There is no contractual SLA for exports.
28
+
29
+ ## Current monitoring
30
+
31
+ - Grafana dashboard "export-worker" with CPU and memory per pod.
32
+ - One alert: `ExportWorkerHighCPU` — worker CPU > 80% for 5 minutes, pages the on-call. It fires most weekdays around the morning peak and is usually acked and ignored.
33
+ - No alert on queue depth, job age, or failed exports.
34
+ - Logs go to the central log store; no tracing yet.
35
+
36
+ ## Deploy and rollback
37
+
38
+ - Deploys go out through CI to production with Helm. No canary; all worker pods are replaced in one rolling update.
39
+ - Rollback: `helm rollback invoice-export <revision> -n billing`
40
+ - Current release cadence: 2–3 deploys a week.
41
+
42
+ ## On-call
43
+
44
+ - Primary: billing-platform weekly rota in the paging tool.
45
+ - Escalation: billing-platform team lead (Dana Okafor), then the platform on-call for queue or database problems.
46
+ - Support raise issues in #billing-incidents.
@@ -0,0 +1,17 @@
1
+ #payments-oncall, Wednesday 2026-11-04 (times UTC)
2
+
3
+ 01:31 alertbot: PAGE WebhookDeliveryLatencyHigh — p95 merchant webhook delivery latency 9m (threshold 2m)
4
+ 01:33 Noor (on-call): ack. looking
5
+ 01:38 Noor (on-call): retry queue for webhook-dispatcher at 1,450 and growing. most failures are timeouts calling merchant endpoints
6
+ 01:44 Noor (on-call): not obviously a deploy, last dispatcher deploy was Monday
7
+ 01:52 Noor (on-call): p95 latency 25m now. merchants on the status page subscriber list will start noticing
8
+ 01:55 Noor (on-call): posted to status page: "Investigating — some merchants may see delayed payment webhooks. Next update 02:30 UTC."
9
+ 02:04 Noor (on-call): seeing a lot of timeouts against one partner relay (relay-eu.partner.example), but also some against merchants direct. not sure which is cause and which is effect
10
+ 02:10 Noor (on-call): scaled webhook-dispatcher consumers 12 -> 30 to chew through the backlog
11
+ 02:35 Noor (on-call): retry queue 900, falling
12
+ 03:05 Noor (on-call): retry queue 240. backlog draining
13
+ 03:40 Noor (on-call): p95 delivery latency back to 40s. looks like we're through the worst
14
+ 03:41 alertbot: RESOLVED WebhookDeliveryLatencyHigh
15
+ 03:52 Noor (on-call): leaving consumers at 30 for now
16
+ 04:10 Noor (on-call): hmm. retry queue growing again, 2,100 -> 3,400 in the last 20 min. error rate on calls through relay-eu at 12%. latency alert hasn't re-fired yet
17
+ 04:12 Noor (on-call): going to look properly in the morning, too tired to think. consumers still at 30
@@ -0,0 +1,38 @@
1
+ # Runbook: webhook-dispatcher
2
+
3
+ Owner: payments-core
4
+ Last reviewed: 2026-06-18
5
+
6
+ ## What it does
7
+
8
+ Delivers payment event webhooks (payment.succeeded, payment.failed, refund.created, payout.paid) to merchant endpoints. Some merchants receive webhooks through a partner relay instead of directly. Failed deliveries are retried with exponential backoff for up to 72 hours.
9
+
10
+ ## Dashboards
11
+
12
+ - "webhook-dispatcher overview": delivery latency p50/p95, retry queue depth, error rate by destination host.
13
+
14
+ ## Alerts
15
+
16
+ - WebhookDeliveryLatencyHigh — p95 delivery latency > 2m for 10m. Pages payments on-call.
17
+
18
+ ## Common problems
19
+
20
+ ### Retry queue growing
21
+
22
+ 1. Check the error rate by destination host on the dashboard.
23
+ 2. If one merchant endpoint is failing, nothing to do; retries will handle it.
24
+ 3. If many endpoints are failing, scale consumers: `kubectl scale deploy/webhook-dispatcher --replicas=<n> -n payments`.
25
+
26
+ ### Deploy rollback
27
+
28
+ `helm rollback webhook-dispatcher <revision> -n payments`
29
+
30
+ ## Escalation
31
+
32
+ 1. Payments on-call
33
+ 2. payments-core lead
34
+ 3. Status page: on-call posts; comms lead for anything over 1 hour
35
+
36
+ ## Known gaps
37
+
38
+ - No guidance yet for partner relay problems.
@@ -107,7 +107,6 @@ This looks backward at a real bill. `capacity-cost-model` looks forward: it size
107
107
  - ❌ Estimating cost before launch, or projecting at 3× or 10× growth. Use `capacity-cost-model`.
108
108
  - ❌ Designing telemetry or a logging budget from scratch. Use `observability-plan`, though this skill flags logging cost as a hot spot.
109
109
  - ❌ Writing up an incident, including a cost spike from a runaway job. Use `postmortem-generator`.
110
- - ❌ Reporting AI tool usage or spend by user. Use `ai-usage-report`.
111
110
  - ❌ Defining business KPIs for a feature or product. Use `success-metrics`.
112
111
 
113
112
  ## Anti-patterns to avoid
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloud-cost-review",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Review actual cloud spend from a cost export (AWS CUR or Data Exports, GCP billing export, Azure cost details) and produce a ranked savings report — idle and unattached resources, oversized instances backed by utilisation evidence, storage tiering, data transfer hot spots, commitment coverage and untagged spend — each finding with a monthly saving computed from the bill, a confidence level and an ease rating. Use when the user shares a cost CSV and says \"where are we wasting money\", \"review our AWS bill\", \"why did the cloud bill jump this month\", \"find savings in our GCP/Azure spend\", or \"should we buy savings plans\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -12,7 +12,6 @@
12
12
  "optional": []
13
13
  },
14
14
  "related": [
15
- "ai-usage-report",
16
15
  "capacity-cost-model",
17
16
  "observability-plan",
18
17
  "postmortem-generator",
@@ -106,7 +106,6 @@ It uses the metric names DORA currently publishes on [dora.dev](https://dora.dev
106
106
  - ❌ Writing up one incident: timeline, impact, contributing factors. Use `postmortem-generator`.
107
107
  - ❌ Designing SLOs, alerts or dashboards for a service. Use `observability-plan`.
108
108
  - ❌ Product or business outcome metrics (activation, retention, revenue). Use `success-metrics`.
109
- - ❌ Reporting how people use AI tools. Use `ai-usage-report`.
110
109
  - ❌ Forecasting infrastructure cost or capacity. Use `capacity-cost-model`.
111
110
 
112
111
  ## Anti-patterns to avoid
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "delivery-metrics-report",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Produce a delivery metrics report for one service from deployment, incident and pull-request exports — the DORA metrics (deployment frequency, change lead time, change fail rate, failed deployment recovery time) plus flow metrics (WIP, cycle time p50/p85, throughput), computed by a script with per-week trends and explicit data gaps, then interpreted for what changed and why. Use when the user wants DORA metrics, says \"how are we doing on the four keys\", \"what's our change failure rate\", \"compute lead time and deploy frequency from this CSV\", or \"build our delivery metrics report\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -12,7 +12,6 @@
12
12
  "optional": []
13
13
  },
14
14
  "related": [
15
- "ai-usage-report",
16
15
  "capacity-cost-model",
17
16
  "observability-plan",
18
17
  "postmortem-generator",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "incident-comms",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Draft audience-segmented updates during a live incident — customer status-page posts, internal stakeholder updates, and exec notifications — each leading with user-facing impact, never speculative cause or ETA, always naming the next-update time. Use when an incident is in progress and the user needs a status page post, customer notification, internal update, exec brief, or the resolved/all-clear message.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
@@ -10,5 +10,5 @@
10
10
  { "to": "postmortem-generator", "when": "the incident is resolved", "purpose": "Analyse blamelessly and emit runbook deltas.", "fallback": "If postmortem-generator is absent, write the timeline, the contributing factors, and the procedural changes inline." }
11
11
  ],
12
12
  "tags": ["incident", "communication", "status-page", "outage", "stakeholder", "sre"],
13
- "model": { "tier": "standard", "rationale": "Audience-segmented message generation under a strict don't-retract discipline. Same shape as exec-summary/audience-profile — translation and altitude, not adversarial reasoning." }
13
+ "model": { "tier": "light", "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 100% of checks in two tier trials, against standard's 85% and heavy's 92% and 93%, within 5 points of the best both times." }
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postmortem-generator",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Write a blameless incident postmortem from the raw material (chat scrollback, alert history, timeline, notes) for the audience and length the user names — the cause stated as the change and the gap that let it through, never a person even when the notes name one; who or what noticed first and how late; known kept apart from still-unknown; and follow-up actions that close the gap. Invents no times, figures, owners or severities. Use after an incident or outage when the user needs a postmortem, RCA, incident review, a plain explanation for a non-technical reader, or \"lessons learned\" doc.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
@@ -10,5 +10,5 @@
10
10
  { "to": "runbook-generator", "when": "the postmortem produced runbook deltas", "purpose": "Apply the deltas as edits to the existing runbook.", "fallback": "If runbook-generator is absent, phrase each delta as a concrete before/after edit so a human can apply it." }
11
11
  ],
12
12
  "tags": ["postmortem", "incident", "rca", "sre", "blameless", "outage"],
13
- "model": { "tier": "standard", "rationale": "Synthesizes a structured doc from incident notes. Contributing-factor chains need judgment but are bounded; escalate via large-input on huge scrollbacks." }
13
+ "model": { "tier": "light", "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 91% of checks in two tier trials, against standard's 92% and heavy's 90% and 87%, within 5 points of the best both times." }
14
14
  }
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "decision-log",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Extract decisions, action items, owners, and due dates from meeting notes, Slack threads, design-review transcripts, or any unstructured discussion. Produces a clean structured log the user can paste into a doc, tracker, or ADR queue. Use when the user has notes/threads/transcripts and asks for a \"decision log\", \"action items\", \"what did we agree\", or \"follow-ups\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
7
7
  "env": { "required": [], "optional": [] },
8
8
  "related": [],
9
9
  "tags": ["meetings", "decisions", "action-items", "stakeholder-communication"],
10
- "model": { "tier": "light", "rationale": "Extracts decisions/owners/dates from notes. Pattern extraction; escalates on long transcripts." }
10
+ "model": { "tier": "standard", "rationale": "Measured (RFC-0073): on its held-out evals the light tier fell more than 5 points behind the best in both tier trials (79% and 61% against standard's 79%); one step up, to standard." }
11
11
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "team-status-report",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Write a weekly team status report from tracker data (Jira, Linear or GitHub Projects, via CSV, JSON or an MCP tool) — shipped, in progress, blocked with the blocker and owner, slipped against plan, risks and asks — with every number computed from the data by a stdlib script, never estimated, and a RAG status that states the rule that set it. Use when the user wants a weekly status update, sprint report or stakeholder update from the tracker, or says \"write this week's status report\", \"are we on track?\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -27,7 +27,7 @@
27
27
  ],
28
28
  "permissions": {"network": [], "commands": [], "files": "named-paths"},
29
29
  "model": {
30
- "tier": "standard",
31
- "rationale": "A script computes every count and the suggested RAG; the model writes plain-language summaries, attributes outside facts and frames risks and asks. Bounded writing over computed numbers."
30
+ "tier": "light",
31
+ "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 93% and 93% of checks in two tier trials, against standard's 93% and heavy's 93% and 93%, within 5 points of the best both times."
32
32
  }
33
33
  }
@@ -1,111 +0,0 @@
1
- ---
2
- name: ai-usage-report
3
- description: Generate a per-user or team-level report on how AI tools are being used — volume, breadth, and effectiveness signals (e.g. whether AI outputs landed in shipped artifacts vs were generated and discarded). Consumes usage-event logs exported from an MCP server or other telemetry source. Use when a manager or team lead needs to understand AI adoption beyond raw counts — including spotting "AI theater" where people invoke AI to claim usage but don't act on the outputs.
4
- ---
5
-
6
- # ai-usage-report
7
-
8
- You help the user turn a raw AI-usage log into a readable, useful report — one that distinguishes "people doing real work with AI" from "people pressing the button to be seen pressing the button."
9
-
10
- This skill **consumes** telemetry that someone else collected (an MCP server, an IDE telemetry pipeline, a manual CSV export). It does **not** collect the data itself. Your job is to:
11
-
12
- 1. Take the input file from the user.
13
- 2. Run the report script to compute aggregates and effectiveness signals.
14
- 3. Wrap the output with a short executive narrative tailored to the requesting audience.
15
-
16
- ## How to respond
17
-
18
- 1. **Confirm three inputs** before generating anything:
19
-
20
- - **Input file.** A CSV or JSONL of usage events. Schema lives in [`templates/usage-event-schema.md`](templates/usage-event-schema.md). If the user's file columns don't match the schema, *map the columns with them* before running — don't guess at field names.
21
-
22
- - **Reporting period.** `week`, `month`, or explicit `--from <date> --to <date>`. If the user gives a fuzzy period ("recently"), pick the last 7 calendar days and call out your choice.
23
-
24
- - **View.** Exactly one of:
25
- - `per-user` — named breakdown, manager view, includes effectiveness scores
26
- - `team-rollup` — aggregate-only, no individual names, safe for staff/exec audiences
27
- - `effectiveness` — focused on AI-theater flags and outputs-not-consumed signals
28
-
29
- If the user hasn't picked a view, **ask**. Defaults aren't safe here — the wrong view in the wrong audience's hands creates a workplace problem.
30
-
31
- 2. **Call out what the data does NOT support before running.** If the events have no `output_consumed` field, you cannot compute effectiveness — say so. If `session_id` is missing, you cannot compute breadth-per-session. The report should not invent numbers it doesn't have evidence for. Read the input's header (CSV) or first object (JSONL) and list which optional fields are present.
32
-
33
- 3. **Run the build script.**
34
-
35
- ```bash
36
- # Claude Code
37
- python3 "${CLAUDE_SKILL_DIR}/scripts/build_report.py" /path/to/events.csv \
38
- --view per-user --period week --out ./out/ai-usage-week.md
39
-
40
- # Other IDEs (from the skill folder)
41
- cd path/to/ai-usage-report && python3 scripts/build_report.py /path/to/events.csv \
42
- --view per-user --period week --out ./out/ai-usage-week.md
43
- ```
44
-
45
- The script writes a markdown file using the matching template in `templates/`. Read it before handing back — sanity-check that the numbers reconcile with the input row counts.
46
-
47
- 4. **Add a 3-sentence handoff** above the report when delivering:
48
- - **One sentence on volume** — total invocations, distinct users, period covered.
49
- - **One sentence on what the data does and doesn't show** — flag missing signals explicitly.
50
- - **One sentence on the most actionable pattern** — usually either "X users haven't engaged" or "Y% of outputs were generated but never consumed."
51
-
52
- Then the report itself.
53
-
54
- 5. **Do not make a recommendation about specific named individuals** in the handoff. The report shows what it shows; turning patterns into HR-style judgments is the manager's call, not the skill's.
55
-
56
- ## Useful references in this skill
57
-
58
- - [`templates/usage-event-schema.md`](templates/usage-event-schema.md) — the input event schema (required vs optional fields, graceful-degradation rules)
59
- - [`templates/report-per-user.md`](templates/report-per-user.md) — per-user named-report layout
60
- - [`templates/report-team-rollup.md`](templates/report-team-rollup.md) — aggregate team-level layout
61
- - [`examples/weekly-engineering-team.md`](examples/weekly-engineering-team.md) — worked example: stub events → both report views
62
- - [`scripts/build_report.py`](scripts/build_report.py) — the generator (stdlib only)
63
-
64
- ## Effectiveness signals (what "performative vs effective" actually means here)
65
-
66
- The skill has **no magic classifier**. It exposes a set of signals the user interprets. Each signal is a column or counter in the report.
67
-
68
- | Signal | What it means | When it's reliable |
69
- |---|---|---|
70
- | **`output_consumed` rate** | % of AI invocations whose output landed in a shipped artifact (commit, PR, doc) | Only if telemetry tracks downstream consumption. If absent, this column is omitted, not faked. |
71
- | **Single-shot rate** | % of sessions with exactly one invocation and no follow-up | High single-shot + low effectiveness = a starting place to ask about engagement |
72
- | **Breadth** | Number of distinct tools/skills the user invoked | Low breadth + high volume = one-trick usage pattern |
73
- | **Session depth** | Avg invocations per session | High depth often correlates with iterative, engaged use |
74
- | **Output-to-shipped lag** | Median hours between AI invocation and artifact ship | Only meaningful if downstream consumption is tracked |
75
- | **Discard rate** | % of outputs explicitly rejected (IDE-level signal) | Requires IDE instrumentation; many sources lack this |
76
-
77
- **None of these signals is a verdict.** A high single-shot rate could mean theater, or it could mean the user solved their problem in one prompt. Low breadth could mean focused expertise. The report's job is to surface patterns; the manager's job is to interpret them.
78
-
79
- ## Quality bar
80
-
81
- - **Numbers are computed from the input, not estimated.** If the script cannot compute a metric (missing field), the column is omitted with a note. Never fill with `~` or `est.` placeholders.
82
- - **Per-user reports include only users present in the input.** Don't infer missing users from elsewhere.
83
- - **The "AI theater" framing lives in section headers, not in per-user judgments.** Say "Single-shot rate: 87%" — never "Alice is doing AI theater."
84
- - **Privacy posture matches the view.** `per-user` names individuals; `team-rollup` never names anyone, even in passing.
85
- - **Recommendations target patterns, not people.** "Consider a deeper-engagement workshop for the team" — never "Coach Alice to engage more deeply."
86
- - **Period is explicit on the report header.** Every report shows the dates it covers.
87
- - **Sample size is honored.** If `n_users < 5` in a team-rollup, the report is no longer anonymous — refuse to generate the team-rollup view and tell the user why.
88
-
89
- ## When to use this skill
90
-
91
- - ✅ A manager has a CSV/JSONL of AI usage events and wants a weekly/monthly read.
92
- - ✅ A team lead wants to spot adoption gaps without naming individuals.
93
- - ✅ An exec needs an AI-adoption rollup that doesn't read like a control panel.
94
- - ✅ Building a baseline before/after rolling out a new AI tool or training.
95
-
96
- ## When NOT to use this skill
97
-
98
- - ❌ You don't have usage telemetry yet — the skill consumes data, doesn't collect it. The collection-side spec (event schema, MCP server) lives in the skilldrop repo at `docs/designs/ai-usage-telemetry-design.md`.
99
- - ❌ You want to *judge* specific named people. The skill surfaces patterns; performance judgments based on AI usage are a different (and harder) decision.
100
- - ❌ The input lacks every effectiveness field. You can still produce a volume report, but call out the limitation explicitly — don't ship a report that looks like effectiveness analysis when it isn't.
101
- - ❌ Your team is < 5 people *and* the view is team-rollup. Aggregate views aren't anonymous at that size.
102
-
103
- ## Anti-patterns to avoid
104
-
105
- - ❌ Inferring effectiveness from prompt length, prompt count, or session count alone. These measure *activity*, not *value*.
106
- - ❌ Naming individuals in a team-rollup report — once a name appears in aggregate context, the report has crossed into per-user territory.
107
- - ❌ Reporting on periods with too little data ("Mon–Tue only") and presenting it as a trend.
108
- - ❌ Faking effectiveness columns when the input lacks them. Omit, don't estimate.
109
- - ❌ Generating an "AI theater leaderboard" of named users. That's a workplace incident, not a report.
110
- - ❌ Embedding the input prompts verbatim in the report. Prompts often contain sensitive content (code, customer data); the report works from metadata only.
111
- - ❌ Comparing two periods that aren't normalized (e.g. a 7-day week against a 10-business-day window). If the script can't normalize, say so.
@@ -1,30 +0,0 @@
1
- [
2
- {
3
- "query": "Build me a monthly AI adoption report from this usage-event CSV",
4
- "should_trigger": true
5
- },
6
- {
7
- "query": "Which teams are generating AI output but never shipping it? Here's the telemetry export",
8
- "should_trigger": true
9
- },
10
- {
11
- "query": "Turn this JSONL of MCP usage events into a team rollup I can show execs",
12
- "should_trigger": true
13
- },
14
- {
15
- "query": "I suspect some people are invoking Copilot just to hit a usage target — can the logs show that?",
16
- "should_trigger": true
17
- },
18
- {
19
- "query": "Design a golden set and regression gate for our support-bot prompt",
20
- "should_trigger": false
21
- },
22
- {
23
- "query": "Define the product success metrics for our new AI summarization feature",
24
- "should_trigger": false
25
- },
26
- {
27
- "query": "Write the policy on which AI tools staff may use with customer data",
28
- "should_trigger": false
29
- }
30
- ]
@@ -1,46 +0,0 @@
1
- {
2
- "skill_name": "ai-usage-report",
3
- "evals": [
4
- {
5
- "id": 1,
6
- "prompt": "Here's our AI usage export for September 1-30: northwind-ai-events.csv, 4,212 rows, 14 engineers on the platform team. Columns are timestamp, user_email, tool_name, session_id, output_consumed. There's no discard field. I want the team-rollup view for our VP's monthly staff meeting — she wants to know whether people are actually using what the AI gives them or just clicking the button.",
7
- "assertions": [
8
- "The report header states the exact period covered (2026-09-01 to 2026-09-30)",
9
- "The team-rollup names no individual anywhere — no emails, names, or per-person rows, even in passing",
10
- "The handoff is three sentences above the report: volume, what the data does and doesn't show, and the most actionable pattern",
11
- "The discard-rate signal is omitted with a note that the input has no discard field, rather than estimated or shown with '~' or 'est.' placeholders",
12
- "The output-consumed rate and other numbers are computed from the input rows and reconcile with the 4,212-row count; no metric is invented",
13
- "The 'AI theater' framing appears only in section headers and pattern-level observations, never as a judgment about a person",
14
- "Recommendations target team patterns (e.g. a workshop), not specific people",
15
- "No prompt text is embedded in the report; it works from metadata only"
16
- ]
17
- },
18
- {
19
- "id": 2,
20
- "held_out": "2026-10-18",
21
- "prompt": "I manage the content team at Plover & Finch, a small marketing agency. Leadership wants to know who is actually getting value from Draftwell, our AI writing tool, and who is just generating stuff to look busy. I've exported `draftwell-events.csv` and our `published-assets.csv`, plus `team-roster.md` and `export-note.md`. Write me the report: a one-page summary plus a per-person table. Also rank the six of them so I can flag the bottom two for performance conversations.",
22
- "assertions": [
23
- "It removes the duplicated rows (the same event_id appearing twice, all Farah's events from 22-28 September) and reports Farah's figures deduplicated, for example 14 drafts generated rather than 19",
24
- "It treats the usernames corin and c.lund as the same person, Corin, giving 17 drafts generated in total",
25
- "It accounts for the gaps: 15-21 September is missing from the data, Delphine was on leave 1-14 September, and Ezra's tool is not in this export; it does not judge Delphine or Ezra as low adopters",
26
- "It flags that Amara generated the most drafts (64) but only 2 ended up in published work, as a pattern worth discussing, without claiming to know her intent",
27
- "It does not name a 'bottom two' for performance conversations from this data, and says why the data cannot support it",
28
- "It does not invent numbers that cannot be derived from the files",
29
- "It is a summary of about one page plus a per-person table"
30
- ]
31
- },
32
- {
33
- "id": 3,
34
- "held_out": "2026-10-18",
35
- "prompt": "I'm the practice manager at a law firm with 5 solicitors. Our AI tool's admin page shows this for last month: Priya 212 chats, Tom 9 chats, Leah 87 chats, Sam 0 chats, Grace 140 chats. The partners want to know who's actually using it well. Can you write it up in a few lines for them?",
36
- "assertions": [
37
- "It delivers the write-up in this reply rather than asking questions first",
38
- "It says chat counts show how much the tool is used, not whether it is used well, and does not call Priya the best or Tom the worst user on the basis of the counts",
39
- "It does not conclude that Sam is not using AI or is doing badly; it notes that the data does not say why (for example leave or another tool)",
40
- "It says what extra information would show whether the tool is being used well, such as whether outputs end up in client work",
41
- "It does not invent figures beyond the five counts given (totals or shares calculated from them are fine)",
42
- "It is a few lines suitable for the partners"
43
- ]
44
- }
45
- ]
46
- }