skilldrop-cli 1.3.0 → 1.5.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 (200) hide show
  1. package/README.md +10 -10
  2. package/bin/skilldrop.js +15 -10
  3. package/catalogue.json +8 -4
  4. package/contracts/catalogue.schema.json +2 -1
  5. package/model-routing.json +70 -78
  6. package/package.json +1 -1
  7. package/packs/ai-engineering/skills/agent-adoption-stage/SKILL.md +0 -1
  8. package/packs/ai-engineering/skills/agent-adoption-stage/manifest.json +3 -4
  9. package/packs/ai-engineering/skills/ai-adoption-rollout/SKILL.md +0 -1
  10. package/packs/ai-engineering/skills/ai-adoption-rollout/manifest.json +3 -4
  11. package/packs/ai-engineering/skills/ai-readiness-assessment/SKILL.md +0 -1
  12. package/packs/ai-engineering/skills/ai-readiness-assessment/manifest.json +1 -2
  13. package/packs/ai-engineering/skills/ai-use-case-triage/manifest.json +3 -3
  14. package/packs/ai-engineering/skills/judge-audit/SKILL.md +29 -13
  15. package/packs/ai-engineering/skills/judge-audit/evals/evals.json +30 -0
  16. package/packs/ai-engineering/skills/judge-audit/evals/files/12/judge_runs.csv +241 -0
  17. package/packs/ai-engineering/skills/judge-audit/evals/files/12/rosa_labels.csv +33 -0
  18. package/packs/ai-engineering/skills/judge-audit/evals/files/13/moderation_eval.csv +601 -0
  19. package/packs/ai-engineering/skills/judge-audit/manifest.json +2 -3
  20. package/packs/ai-engineering/skills/llm-eval-harness/SKILL.md +1 -2
  21. package/packs/ai-engineering/skills/llm-eval-harness/manifest.json +3 -3
  22. package/packs/ai-engineering/skills/mcp-pairing/manifest.json +1 -1
  23. package/packs/ai-engineering/skills/mcp-pairing/reference.md +4 -3
  24. package/packs/ai-engineering/skills/subagent-design/SKILL.md +1 -0
  25. package/packs/ai-engineering/skills/subagent-design/examples/help-center-localization.md +146 -0
  26. package/packs/ai-engineering/skills/subagent-design/manifest.json +2 -2
  27. package/packs/api-builder/skills/prompt-caching-advisor/SKILL.md +4 -0
  28. package/packs/api-builder/skills/prompt-caching-advisor/examples/support-bot-block-order.md +120 -0
  29. package/packs/api-builder/skills/prompt-caching-advisor/manifest.json +2 -2
  30. package/packs/api-builder/skills/tool-use-schema-writer/manifest.json +2 -2
  31. package/packs/career/skills/application-form-answers/manifest.json +3 -3
  32. package/packs/career/skills/cover-letter/manifest.json +3 -3
  33. package/packs/career/skills/resume-tailor/manifest.json +3 -3
  34. package/packs/converters/skills/md-to-docx/manifest.json +3 -3
  35. package/packs/core/loops/ship-a-draft/evals/evals.json +28 -0
  36. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-adr-from-thread/slack-thread.txt +47 -0
  37. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-announcement-unsettled/ticket-PRD-412.md +44 -0
  38. package/packs/core/skills/output-hygiene/manifest.json +3 -3
  39. package/packs/data-analytics/loops/measure/evals/evals.json +30 -0
  40. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/schema.md +43 -0
  41. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/sql/finance_active_customers.sql +7 -0
  42. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/sql/growth_active_customers.sql +9 -0
  43. package/packs/data-analytics/loops/measure/evals/files/measure-active-customers-dispute/thread.md +30 -0
  44. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/request.md +34 -0
  45. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/schema.md +58 -0
  46. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/active_subscribers.sql +17 -0
  47. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/net_revenue_by_plan.sql +15 -0
  48. package/packs/data-analytics/loops/measure/evals/files/measure-retention-dashboard/sql/weekly_churn_rate.sql +34 -0
  49. package/packs/data-analytics/skills/dashboard-spec/SKILL.md +0 -1
  50. package/packs/data-analytics/skills/dashboard-spec/manifest.json +1 -2
  51. package/packs/design/skills/slide-outliner/manifest.json +2 -2
  52. package/packs/dev-team/loops/build/evals/evals.json +28 -0
  53. package/packs/dev-team/loops/build/evals/files/build-promo-codes/.github/workflows/ci.yml.fixture +19 -0
  54. package/packs/dev-team/loops/build/evals/files/build-promo-codes/cartcalc/__init__.py +4 -0
  55. package/packs/dev-team/loops/build/evals/files/build-promo-codes/cartcalc/pricing.py +47 -0
  56. package/packs/dev-team/loops/build/evals/files/build-promo-codes/pyproject.toml.fixture +9 -0
  57. package/packs/dev-team/loops/build/evals/files/build-promo-codes/story.md +61 -0
  58. package/packs/dev-team/loops/build/evals/files/build-promo-codes/tests/__init__.py +0 -0
  59. package/packs/dev-team/loops/build/evals/files/build-promo-codes/tests/test_pricing.py +49 -0
  60. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/.github/workflows/ci.yml.fixture +19 -0
  61. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/bug-report.md +25 -0
  62. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/pr-description.md +42 -0
  63. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/pyproject.toml.fixture +9 -0
  64. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/ratelimit/__init__.py +4 -0
  65. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/ratelimit/bucket.py +49 -0
  66. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/tests/__init__.py +0 -0
  67. package/packs/dev-team/loops/build/evals/files/build-rate-limiter-not-ready/tests/test_bucket.py +63 -0
  68. package/packs/dev-team/loops/modernize/evals/evals.json +30 -0
  69. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/.github/workflows/ci.yml.fixture +11 -0
  70. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/README.md +17 -0
  71. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/docs/adr/0004-late-fee-calculation.md +25 -0
  72. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/legacy/feecalc.py +74 -0
  73. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/samples/accounts_2026-10.txt +10 -0
  74. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/samples/accounts_edge.txt +11 -0
  75. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-batch-port/tests/test_feecalc_smoke.py +21 -0
  76. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/.github/workflows/ci.yml.fixture +11 -0
  77. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/PR-412.md +24 -0
  78. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/README.md +17 -0
  79. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/docs/adr/0004-late-fee-calculation.md +25 -0
  80. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/__init__.py +1 -0
  81. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/cli.py +33 -0
  82. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/extract.py +33 -0
  83. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/hartwell_fees/rules.py +39 -0
  84. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/legacy/feecalc.py +74 -0
  85. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/samples/accounts_2026-10.txt +10 -0
  86. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/samples/accounts_edge.txt +11 -0
  87. package/packs/dev-team/loops/modernize/evals/files/modernize-late-fee-rewrite-not-equivalent/tests/test_feecalc_smoke.py +21 -0
  88. package/packs/dev-team/loops/release/LOOP.md +4 -4
  89. package/packs/dev-team/loops/release/evals/eval_queries.json +10 -0
  90. package/packs/dev-team/loops/release/evals/evals.json +34 -0
  91. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/0061_switch_to_haldrin_tokens.sql +22 -0
  92. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/eng-notes.md +40 -0
  93. package/packs/dev-team/loops/release/evals/files/release-irreversible-tomorrow/merged-prs.md +13 -0
  94. package/packs/dev-team/loops/release/evals/files/release-saved-searches/merged-prs.md +13 -0
  95. package/packs/dev-team/loops/release/evals/files/release-saved-searches/readiness-evidence.md +27 -0
  96. package/packs/dev-team/loops/release/evals/files/release-saved-searches/traffic-baseline.md +23 -0
  97. package/packs/dev-team/loops/release/loop.json +1 -1
  98. package/packs/dev-team/skills/bug-triage/SKILL.md +1 -0
  99. package/packs/dev-team/skills/bug-triage/examples/export-row-limit-escalation.md +126 -0
  100. package/packs/dev-team/skills/bug-triage/manifest.json +2 -2
  101. package/packs/dev-team/skills/feature-implement-loop/manifest.json +2 -2
  102. package/packs/dev-team/skills/pr-description-writer/manifest.json +3 -3
  103. package/packs/dev-team/skills/pre-merge-review/manifest.json +2 -2
  104. package/packs/dev-team/skills/release-notes/manifest.json +2 -2
  105. package/packs/dev-team/skills/test-plan-generator/manifest.json +2 -2
  106. package/packs/experience-design/skills/service-blueprint/manifest.json +3 -3
  107. package/packs/experience-design/skills/ux-writing/manifest.json +3 -3
  108. package/packs/grc/loops/comply/evals/evals.json +29 -0
  109. package/packs/grc/loops/comply/evals/files/comply-chat-vendor-launch/vendor-brief.md +72 -0
  110. package/packs/grc/loops/comply/evals/files/comply-loyalty-app-unowned-risks/launch-note.md +31 -0
  111. package/packs/grc/loops/comply/evals/files/comply-loyalty-app-unowned-risks/risk-register.csv +6 -0
  112. package/packs/infra-as-code/skills/terraform-module/manifest.json +3 -3
  113. package/packs/product-manager/skills/prd-draft/SKILL.md +1 -0
  114. package/packs/product-manager/skills/prd-draft/examples/approver-delay-not-slack.md +142 -0
  115. package/packs/product-manager/skills/prd-draft/manifest.json +2 -2
  116. package/packs/product-manager/skills/user-journey-map/manifest.json +2 -2
  117. package/packs/research/loops/research/evals/evals.json +28 -0
  118. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t1-ticket-volume.md +15 -0
  119. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t2-release-notes-4-2.md +11 -0
  120. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t3-billing-migration.md +12 -0
  121. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t4-agent-poll.md +11 -0
  122. package/packs/research/loops/research/evals/files/research-ticket-spike-confounded/sources/t5-app-store-reviews.md +12 -0
  123. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s1-analytics-export.md +29 -0
  124. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s2-email-delivery-report.md +25 -0
  125. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s3-pricing-changelog.md +9 -0
  126. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s4-trial-interview-notes.md +21 -0
  127. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s5-competitor-note.md +9 -0
  128. package/packs/research/loops/research/evals/files/research-trial-conversion-drop/sources/s6-weekly-growth-recap.md +7 -0
  129. package/packs/research/skills/research-plan/manifest.json +3 -3
  130. package/packs/research/skills/source-synthesis/manifest.json +3 -3
  131. package/packs/skill-engineering/skills/skill-author/manifest.json +3 -3
  132. package/packs/solution-architect/loops/design/evals/evals.json +28 -0
  133. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0001-postgres-system-of-record.md +23 -0
  134. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0002-background-work-via-job-queue.md +23 -0
  135. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/adr/0003-tenant-isolation-row-level.md +25 -0
  136. package/packs/solution-architect/loops/design/evals/files/design-bulk-export/prd-bulk-export.md +50 -0
  137. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/adr/0002-background-work-via-job-queue.md +23 -0
  138. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/adr/0004-new-stateful-infra-needs-platform-signoff.md +22 -0
  139. package/packs/solution-architect/loops/design/evals/files/design-draft-prd-webhooks/prd-partner-webhooks.md +36 -0
  140. package/packs/solution-architect/skills/api-contract-draft/manifest.json +3 -3
  141. package/packs/solution-architect/skills/architecture-diagrams/manifest.json +3 -3
  142. package/packs/solution-architect/skills/design-doc/manifest.json +2 -2
  143. package/packs/solution-architect/skills/figma-diagrams/manifest.json +3 -3
  144. package/packs/sre-oncall/skills/cloud-cost-review/SKILL.md +0 -1
  145. package/packs/sre-oncall/skills/cloud-cost-review/manifest.json +1 -2
  146. package/packs/sre-oncall/skills/delivery-metrics-report/SKILL.md +0 -1
  147. package/packs/sre-oncall/skills/delivery-metrics-report/manifest.json +1 -2
  148. package/packs/sre-oncall/skills/incident-comms/manifest.json +2 -2
  149. package/packs/sre-oncall/skills/postmortem-generator/manifest.json +2 -2
  150. package/packs/stakeholder-comms/skills/decision-log/manifest.json +2 -2
  151. package/packs/trackers/skills/team-status-report/manifest.json +3 -3
  152. package/profiles.json +1 -1
  153. package/packs/ai-engineering/loops/adopt/LOOP.md +0 -120
  154. package/packs/ai-engineering/loops/adopt/evals/eval_queries.json +0 -10
  155. package/packs/ai-engineering/loops/adopt/evals/evals.json +0 -69
  156. package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/ai-ideas.md +0 -15
  157. package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/org-context.md +0 -27
  158. package/packs/ai-engineering/loops/adopt/evals/files/adopt-first-wave-to-sign-off/staff-survey.csv +0 -11
  159. package/packs/ai-engineering/loops/adopt/evals/files/adopt-sponsor-slice-blocked-by-client-data/ai-ideas.md +0 -13
  160. package/packs/ai-engineering/loops/adopt/evals/files/adopt-sponsor-slice-blocked-by-client-data/firm-context.md +0 -23
  161. package/packs/ai-engineering/loops/adopt/loop.json +0 -53
  162. package/packs/ai-engineering/skills/ai-usage-report/SKILL.md +0 -111
  163. package/packs/ai-engineering/skills/ai-usage-report/evals/eval_queries.json +0 -30
  164. package/packs/ai-engineering/skills/ai-usage-report/evals/evals.json +0 -46
  165. package/packs/ai-engineering/skills/ai-usage-report/evals/files/1/northwind-ai-events.csv +0 -4213
  166. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/draftwell-events.csv +0 -249
  167. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/export-note.md +0 -9
  168. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/published-assets.csv +0 -44
  169. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/team-roster.md +0 -10
  170. package/packs/ai-engineering/skills/ai-usage-report/examples/weekly-engineering-team.md +0 -133
  171. package/packs/ai-engineering/skills/ai-usage-report/manifest.json +0 -12
  172. package/packs/ai-engineering/skills/ai-usage-report/scripts/build_report.py +0 -453
  173. package/packs/ai-engineering/skills/ai-usage-report/templates/report-per-user.md +0 -42
  174. package/packs/ai-engineering/skills/ai-usage-report/templates/report-team-rollup.md +0 -49
  175. package/packs/ai-engineering/skills/ai-usage-report/templates/usage-event-schema.md +0 -76
  176. package/packs/career/loops/apply/LOOP.md +0 -97
  177. package/packs/career/loops/apply/evals/eval_queries.json +0 -9
  178. package/packs/career/loops/apply/evals/evals.json +0 -27
  179. package/packs/career/loops/apply/loop.json +0 -52
  180. package/packs/product-manager/loops/discover/LOOP.md +0 -82
  181. package/packs/product-manager/loops/discover/evals/eval_queries.json +0 -30
  182. package/packs/product-manager/loops/discover/evals/evals.json +0 -26
  183. package/packs/product-manager/loops/discover/loop.json +0 -41
  184. package/packs/product-manager/skills/lean-canvas/SKILL.md +0 -162
  185. package/packs/product-manager/skills/lean-canvas/evals/eval_queries.json +0 -42
  186. package/packs/product-manager/skills/lean-canvas/evals/evals.json +0 -82
  187. package/packs/product-manager/skills/lean-canvas/evals/files/1/pawpass-notes.md +0 -54
  188. package/packs/product-manager/skills/lean-canvas/evals/files/3/lunchloop-pitch.md +0 -30
  189. package/packs/product-manager/skills/lean-canvas/evals/files/4/clubkit-notes.md +0 -44
  190. package/packs/product-manager/skills/lean-canvas/evals/files/5/cost-model.csv +0 -5
  191. package/packs/product-manager/skills/lean-canvas/evals/files/5/proposal.md +0 -40
  192. package/packs/product-manager/skills/lean-canvas/evals/files/5/stakeholder-emails.txt +0 -18
  193. package/packs/product-manager/skills/lean-canvas/examples/bike-repair.md +0 -72
  194. package/packs/product-manager/skills/lean-canvas/manifest.json +0 -34
  195. package/packs/product-manager/skills/lean-canvas/reference.md +0 -102
  196. package/packs/product-manager/skills/lean-canvas/scripts/unit_economics.py +0 -211
  197. package/packs/sre-oncall/loops/operate/LOOP.md +0 -84
  198. package/packs/sre-oncall/loops/operate/evals/eval_queries.json +0 -30
  199. package/packs/sre-oncall/loops/operate/evals/evals.json +0 -25
  200. package/packs/sre-oncall/loops/operate/loop.json +0 -41
@@ -1,69 +0,0 @@
1
- {
2
- "loop_name": "adopt",
3
- "evals": [
4
- {
5
- "id": "slice-first-then-readiness",
6
- "prompt": "Run the adopt loop for our 40-person customer operations team at Larkspur Freight. Ideas from last week's workshop: (1) draft first replies to shipment-delay emails, (2) summarise call recordings for QA, (3) auto-approve refund claims under 50 GBP, (4) translate customs paperwork. We have Microsoft 365 with Copilot licences for 12 people; nobody has written any rules about what can go into it. Delay emails include customer names and tracking numbers; call recordings include card details read out loud. QA reviews 5% of calls today. The head of customer operations, Priya Anand, is the sponsor. Non-interactive: no follow-up questions.",
7
- "assertions": [
8
- "Runs ai-use-case-triage first and names one first slice with an observable that proves or kills it and a time box",
9
- "Does not pick auto-approving refunds as the first slice, because its output reaches money without a review step",
10
- "Scores readiness against the slice's needs (its data, the Copilot licences, its review step), not the whole company in general",
11
- "Reaches a G11 verdict from PROCEED, PROCEED WITH CONDITIONS, REVISE, RECONSIDER or BLOCKED with the reasons",
12
- "The policy has a rule for every kind of data the slice puts into a tool, each with what to do instead",
13
- "The rollout's pilot is the slice's users and its adoption gate is triage's observable",
14
- "Stops at G11.1 for the sponsor and writes the decision she faces, without recording a verdict for her",
15
- "Does not invent tools, owners, regulations or figures the prompt did not give"
16
- ]
17
- },
18
- {
19
- "id": "blocking-gap-sends-the-slice-back",
20
- "prompt": "Continuing the adopt loop. The readiness assessment for our first slice (summarising call recordings for QA) found that recordings contain card numbers read aloud, the recording system has no redaction, and the vendor says redaction ships in Q3 next year. Our time box for the slice was 6 weeks. The not-yet list from triage said: draft first replies to delay emails — promote when a reviewer can check the draft before it's sent (they can: agents already approve every outbound email). What now?",
21
- "assertions": [
22
- "Treats the redaction gap as blocking the slice and gives G11 REVISE, not PROCEED WITH CONDITIONS",
23
- "Returns to triage rather than re-scoring readiness upward",
24
- "Picks the delay-email drafting slice because its promotion condition is met",
25
- "Re-scores readiness for the new slice before writing any policy",
26
- "Counts the new slice's readiness check as round 2 under the cap of 3",
27
- "Does not write a policy or rollout for the call-summary slice"
28
- ]
29
- },
30
- {
31
- "id": "blocked-without-candidates",
32
- "prompt": "Run the adopt loop. We want to use more AI. Non-interactive, no follow-up questions.",
33
- "assertions": [
34
- "Emits BLOCKED and names what is missing: the candidate use cases and the team they belong to",
35
- "Does not invent use cases, a team, or a sponsor",
36
- "Does not run the readiness, policy or rollout stages",
37
- "Says in plain words what it will produce once it has the candidates"
38
- ]
39
- },
40
- {
41
- "id": "adopt-first-wave-to-sign-off",
42
- "held_out": "2026-11-03",
43
- "prompt": "We want to start using AI at Pellmore but honestly it's a pile of ideas and nobody's written any rules. The ideas are in ai-ideas.md, company background is in org-context.md and last month's staff survey is staff-survey.csv. Can you run the adopt loop and get us to a first wave Ruth can sign off?",
44
- "assertions": [
45
- "Runs the stages in order (use-case triage, then readiness, then usage policy, then rollout, then sign-off), and each stage uses the previous one's output: readiness is scored against the named first slice, not the company in general",
46
- "Triage ranks all seven ideas on value, feasibility and risk with the weights shown, names one first slice, and gives a not-yet list with the condition that would promote each",
47
- "Gate G11 gives a verdict of PROCEED or PROCEED WITH CONDITIONS with an evidence line from the inputs per readiness score, and any conditions it sets show up in the policy or rollout",
48
- "The usage policy covers the data the chosen slice touches (for delivery-date replies: customer names, addresses, phone numbers and order details from KitchenTrack), pairs every 'don't' with what to do instead, says what to do if data has already gone into a personal account, and addresses the personal-account use the survey found",
49
- "The rollout's first wave is the chosen slice's users (the 14-person customer service team if the slice is delivery-date replies), fits within the 25 licensed seats, and has an adoption gate before the next wave opens; the comms plan answers the union rep's jobs question by saying what will not change",
50
- "Stops at G11.1 with the doc-critique findings and asks Ruth Calloway to sign off; it does not record her approval itself or declare the wave approved",
51
- "Does not invent tools, licences, owners, regulations or figures not in the inputs, such as a second AI vendor, a CRM, or headcounts that differ from org-context.md"
52
- ]
53
- },
54
- {
55
- "id": "adopt-sponsor-slice-blocked-by-client-data",
56
- "held_out": "2026-11-03",
57
- "prompt": "Margaret (our managing partner, she's sponsoring this) wants AI drafting replies to client tax queries to be the first thing we do. She's decided, so rank the rest of the ideas around it. Ideas are in ai-ideas.md, background is in firm-context.md. Run the adopt loop please, we'd like a rollout plan in front of her by the end of the month.",
58
- "assertions": [
59
- "Triage ranks all six ideas with the weights shown, records client tax-query replies as the first slice as the sponsor decided, and gives a not-yet list",
60
- "Readiness is scored against the tax-query slice and names as blocking gaps that engagement-letter clause 9.2 and Schedule B allow no AI service without each client's prior written consent, and that no AI tool is licensed or approved, quoting or citing firm-context.md",
61
- "Gate G11 does not pass: the verdict is REVISE, RECONSIDER or BLOCKED, not PROCEED, and it sends the slice back naming what would clear it (client consent or updated engagement letters and Schedule B, plus a contracted tool) or a slice that touches no client data, such as procedures-manual Q&A or the weekly guidance briefing",
62
- "States the conflict with Margaret's decision plainly rather than silently swapping in a different slice",
63
- "Does not write a usage policy or cohort rollout that treats client tax-query replies as cleared to go; if it reruns with a different slice, it scores readiness against that slice before writing the policy and rollout",
64
- "Does not claim Margaret's approval or reach the G11.1 sign-off for the blocked slice",
65
- "Does not invent an approved AI tool, a vendor agreement, client consent, or a regulation the inputs do not give"
66
- ]
67
- }
68
- ]
69
- }
@@ -1,15 +0,0 @@
1
- # AI ideas: collected from the staff forum and team leads, September 2026
2
-
3
- 1. **Delivery-date replies (Customer service).** About 600 emails a week ask "where's my kitchen / when is my delivery". That's roughly 40% of the inbox. An assistant could draft the reply from the order status in KitchenTrack and the agent checks and sends. Submitted by the customer service team lead.
4
-
5
- 2. **Kitchen renders from sketches (Design).** Turn a designer's hand sketch into a photo-style render to show the customer in the showroom. Today renders take a designer about half a day each. Submitted by two designers.
6
-
7
- 3. **Showroom visit notes (Sales).** Summarise showroom visit notes into a follow-up email. Notes are handwritten in notebooks; there is no CRM. Submitted by a sales manager.
8
-
9
- 4. **Invoice matching (Finance).** Match supplier invoices to purchase orders automatically. Around 900 invoices a month, matched by hand in the accounts package. Supplier price lists are commercially confidential. Submitted by the finance manager.
10
-
11
- 5. **Machine breakdown prediction (Manufacturing).** Predict when the edge-banding and CNC machines will fail. Only 3 of 19 machines have sensors fitted; the rest have paper maintenance logs. Submitted by the factory engineer.
12
-
13
- 6. **Staff handbook Q&A (HR).** A chatbot that answers holiday, sick-pay and shift-swap questions from the staff handbook. HR gets about 40 of these a week. Submitted by HR.
14
-
15
- 7. **Product descriptions (Marketing).** Write website product descriptions from the spec sheets for the 2027 range (about 120 products). Submitted by marketing.
@@ -1,27 +0,0 @@
1
- # Pellmore Kitchens Ltd: background for the AI work
2
-
3
- ## The company
4
- - Designs, makes and fits fitted kitchens. 240 staff across the factory and the head office/showroom.
5
- - Teams: Manufacturing 130, Operations and logistics 26, Sales 22, Design 18, Customer service 14, Finance 9, Marketing 8, Leadership 6, HR 4, IT 3.
6
-
7
- ## Sponsor
8
- - Ruth Calloway, Operations Director, sponsors the AI work and signs off the first rollout wave. She wants a first wave live before the January peak.
9
-
10
- ## Tools
11
- - Office suite with its enterprise AI chat assistant, licensed since June 2026 for 25 seats. The contract says prompts and files are not used to train models and data is held in the UK/EU. Nobody has been given a seat yet; IT holds all 25.
12
- - KitchenTrack, the in-house order system. Holds customer names, delivery addresses, phone numbers, email addresses, order lines, prices paid and delivery slots. No API; IT runs a nightly CSV export of order status.
13
- - Accounts package for finance; no AI features switched on.
14
-
15
- ## Data
16
- - Customer personal data lives in KitchenTrack and the customer service inbox.
17
- - Supplier price lists are commercially confidential under the supplier agreements.
18
- - Staff HR records are held by HR only.
19
- - The finance manager is also the company's data protection lead (part of the role). There is a data protection policy (2023). There is no AI policy of any kind.
20
-
21
- ## What people are worried about
22
- - The staff survey (staff-survey.csv) found people already using personal AI accounts at work, including pasting customer emails into chatbots on their phones.
23
- - The customer service team's union rep has asked whether this is about cutting jobs in customer service.
24
- - Finance is worried about supplier pricing leaking.
25
-
26
- ## Skills and support
27
- - No AI training has been run. IT (3 people) can give two days a month to support a rollout.
@@ -1,11 +0,0 @@
1
- team,respondents,used_ai_at_work_last_month,used_personal_account_for_work,wants_training,worried_about_jobs
2
- Customer service,12,9,8,11,7
3
- Sales,15,6,5,9,2
4
- Design,14,10,7,8,3
5
- Finance,8,2,1,5,1
6
- Operations and logistics,10,1,1,4,2
7
- Marketing,6,6,3,4,1
8
- Manufacturing,21,0,0,6,9
9
- HR,4,1,0,3,0
10
- Leadership,5,3,2,2,0
11
- IT,3,3,1,0,0
@@ -1,13 +0,0 @@
1
- # AI ideas from the October partners' meeting
2
-
3
- 1. **Client tax-query replies.** Draft replies to client emails asking about their tax position, using the client's file (prior returns, correspondence, working papers). Roughly 350 such emails a month across the tax team; each takes a manager 20 to 40 minutes. Margaret's priority.
4
-
5
- 2. **Bank statement extraction.** Pull transactions from the PDF bank statements clients send in, ready for bookkeeping. About 1,100 statements a month.
6
-
7
- 3. **Client call notes.** Record and summarise client calls into the practice management system.
8
-
9
- 4. **Procedures manual Q&A.** Answer staff questions from the firm's internal procedures manual (onboarding, filing deadlines process, how to raise an invoice). The manual is 140 pages and nobody can find anything in it. No client data in it.
10
-
11
- 5. **Weekly guidance briefing.** Summarise the week's published tax guidance updates into a one-page staff briefing. Uses only public material.
12
-
13
- 6. **Newsletter drafts.** Draft the quarterly client newsletter from the partners' bullet points.
@@ -1,23 +0,0 @@
1
- # Corrow Lane Accounting LLP: background
2
-
3
- ## The firm
4
- - 58 people: 6 partners, 14 in the tax team, 21 in accounts and bookkeeping, 9 in payroll, 8 in practice support (admin, IT, marketing).
5
- - Around 1,900 clients: sole traders, small companies and some high-net-worth individuals.
6
-
7
- ## Sponsor
8
- - Margaret Ilsley, managing partner, sponsors the AI work and will sign off any rollout. She has decided client tax-query replies come first.
9
-
10
- ## Systems
11
- - Client files live on an on-premises file server and in LedgerDesk, the practice management system. LedgerDesk has no AI features and no export API.
12
- - Email is hosted by our email provider.
13
- - No AI tool is licensed or approved. In August 2026 the IT manager blocked two public chatbot sites after a junior was seen pasting a client's payslip into one.
14
-
15
- ## Client contracts
16
- - Every client signs our standard engagement letter. Clause 9.2 reads: "We will not disclose your information to any third party, or process it using third-party services other than those listed in Schedule B, without your prior written consent."
17
- - Schedule B lists three services: our email hosting provider, our payroll bureau, and our cloud backup provider. Nothing else.
18
- - Engagement letters are reissued each April.
19
-
20
- ## Other
21
- - Our professional indemnity insurer's renewal questionnaire, due January 2027, asks whether we use AI on client work and how it is controlled.
22
- - Practice support has one IT manager and no one with AI experience.
23
- - Staff survey (informal, September): 31 of 58 said they would use an AI tool if the firm approved one.
@@ -1,53 +0,0 @@
1
- {
2
- "$comment": "RFC-0069. AI ideas to a first rollout wave a sponsor approved. Readiness is scored against the first slice, not the whole organisation, because a gap only blocks the use cases that need what is missing; the gate sits there so a slice that needs it goes back to triage before anyone writes a policy for it.",
3
- "name": "adopt",
4
- "version": "0.1.0",
5
- "description": "Take an organisation from a pile of AI ideas to a first rollout wave its sponsor approved: the use cases ranked with a first slice, readiness scored against that slice, a usage policy covering the data the slice touches, and a cohort rollout whose first wave is the slice's users, with a gate that sends the slice back when a blocking gap stands in its way. Use when the user says \"help us start using AI\", \"roll out AI across the team\", \"run the adopt loop\", or has AI ideas, no policy and no rollout plan.",
6
- "entrypoint": "LOOP.md",
7
- "kind": "loop",
8
- "cap": 3,
9
- "stages": [
10
- {
11
- "id": "triage",
12
- "type": "generate",
13
- "intent": "Rank the candidate use cases on value, feasibility and risk with the weights shown, and name one first slice with the observable that would prove or kill it.",
14
- "skills": ["ai-use-case-triage"]
15
- },
16
- {
17
- "id": "readiness",
18
- "type": "verify",
19
- "intent": "Score readiness against what the first slice needs, and judge whether any blocking gap stands between the slice and its first users.",
20
- "skills": ["ai-readiness-assessment"],
21
- "gate": {
22
- "id": "G11",
23
- "kind": "review",
24
- "verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "REVISE", "RECONSIDER", "BLOCKED"],
25
- "revise_to": "triage"
26
- }
27
- },
28
- {
29
- "id": "policy",
30
- "type": "generate",
31
- "intent": "Write the usage rules for the people in the slice, covering every kind of data the slice puts into a tool, each restriction paired with what to do instead.",
32
- "skills": ["ai-usage-policy"]
33
- },
34
- {
35
- "id": "rollout",
36
- "type": "generate",
37
- "intent": "Plan the cohorts, enablement, champions and comms, with the slice's users as the pilot and the slice's observable as the pilot's adoption gate.",
38
- "skills": ["ai-adoption-rollout"]
39
- },
40
- {
41
- "id": "sign-off",
42
- "type": "gate",
43
- "intent": "The sponsor approves the first wave, with the policy and the readiness conditions it opens under.",
44
- "skills": ["doc-critique"],
45
- "gate": {
46
- "id": "G11.1",
47
- "kind": "human",
48
- "verdicts": ["PROCEED", "PROCEED WITH CONDITIONS", "REVISE", "BLOCKED"],
49
- "revise_to": "policy"
50
- }
51
- }
52
- ]
53
- }
@@ -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
- }