skilldrop-cli 0.16.19 → 0.16.20

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 (362) hide show
  1. package/bin/skilldrop.js +18 -4
  2. package/catalogue.json +2 -1
  3. package/model-routing.json +219 -215
  4. package/package.json +1 -1
  5. package/packs/ai-engineering/skills/agent-adoption-stage/evals/evals.json +28 -0
  6. package/packs/ai-engineering/skills/agent-adoption-stage/evals/files/2/agent-telemetry.csv +7 -0
  7. package/packs/ai-engineering/skills/agent-adoption-stage/evals/files/2/cto-offsite-memo.md +9 -0
  8. package/packs/ai-engineering/skills/agent-adoption-stage/evals/files/2/dev-survey-summary.md +9 -0
  9. package/packs/ai-engineering/skills/agent-adoption-stage/evals/files/2/engineering-policy.md +15 -0
  10. package/packs/ai-engineering/skills/agent-budget/evals/evals.json +27 -0
  11. package/packs/ai-engineering/skills/agent-budget/evals/files/3/finance-note.md +10 -0
  12. package/packs/ai-engineering/skills/agent-budget/evals/files/3/pipeline.md +18 -0
  13. package/packs/ai-engineering/skills/agent-budget/evals/files/3/price-sheet.md +9 -0
  14. package/packs/ai-engineering/skills/agent-budget/evals/files/3/september-usage.csv +7 -0
  15. package/packs/ai-engineering/skills/agent-loop-design/evals/evals.json +28 -0
  16. package/packs/ai-engineering/skills/agent-loop-design/evals/files/3/design-guide-extract.md +13 -0
  17. package/packs/ai-engineering/skills/agent-loop-design/evals/files/3/legal-advice.md +9 -0
  18. package/packs/ai-engineering/skills/agent-loop-design/evals/files/3/request-from-head-of-planning.md +11 -0
  19. package/packs/ai-engineering/skills/agent-loop-design/evals/files/3/trial-notes.md +13 -0
  20. package/packs/ai-engineering/skills/agent-threat-model/evals/evals.json +27 -0
  21. package/packs/ai-engineering/skills/agent-threat-model/evals/files/4/agent-config.yaml +19 -0
  22. package/packs/ai-engineering/skills/agent-threat-model/evals/files/4/agent-spec.md +17 -0
  23. package/packs/ai-engineering/skills/agent-threat-model/evals/files/4/previous-review.md +10 -0
  24. package/packs/ai-engineering/skills/agent-threat-model/evals/files/4/vendor-security-note.md +4 -0
  25. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/evals.json +28 -0
  26. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/files/2/cno-brief.md +17 -0
  27. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/files/2/education-capacity.md +5 -0
  28. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/files/2/pilot-report.md +14 -0
  29. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/files/2/survey-summary.md +7 -0
  30. package/packs/ai-engineering/skills/ai-adoption-rollout/evals/files/2/union-letter.md +8 -0
  31. package/packs/ai-engineering/skills/ai-readiness-assessment/evals/evals.json +28 -0
  32. package/packs/ai-engineering/skills/ai-readiness-assessment/evals/files/2/ceo-note.md +5 -0
  33. package/packs/ai-engineering/skills/ai-readiness-assessment/evals/files/2/governance-status.md +6 -0
  34. package/packs/ai-engineering/skills/ai-readiness-assessment/evals/files/2/interview-notes.md +18 -0
  35. package/packs/ai-engineering/skills/ai-readiness-assessment/evals/files/2/it-inventory.md +12 -0
  36. package/packs/ai-engineering/skills/ai-usage-report/evals/evals.json +27 -0
  37. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/draftwell-events.csv +249 -0
  38. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/export-note.md +9 -0
  39. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/published-assets.csv +44 -0
  40. package/packs/ai-engineering/skills/ai-usage-report/evals/files/2/team-roster.md +10 -0
  41. package/packs/ai-engineering/skills/ai-use-case-triage/evals/evals.json +27 -0
  42. package/packs/ai-engineering/skills/ai-use-case-triage/evals/files/2/data-team.md +5 -0
  43. package/packs/ai-engineering/skills/ai-use-case-triage/evals/files/2/finance-notes.md +7 -0
  44. package/packs/ai-engineering/skills/ai-use-case-triage/evals/files/2/ideas.csv +10 -0
  45. package/packs/ai-engineering/skills/ai-use-case-triage/evals/files/2/legal-note.md +7 -0
  46. package/packs/ai-engineering/skills/llm-eval-harness/evals/evals.json +28 -0
  47. package/packs/ai-engineering/skills/llm-eval-harness/evals/files/2/current-tests.md +6 -0
  48. package/packs/ai-engineering/skills/llm-eval-harness/evals/files/2/feature-brief.md +14 -0
  49. package/packs/ai-engineering/skills/llm-eval-harness/evals/files/2/incident-log.md +8 -0
  50. package/packs/ai-engineering/skills/llm-eval-harness/evals/files/2/pm-request.md +10 -0
  51. package/packs/ai-engineering/skills/subagent-design/evals/evals.json +27 -0
  52. package/packs/ai-engineering/skills/subagent-design/evals/files/3/current-process.md +11 -0
  53. package/packs/ai-engineering/skills/subagent-design/evals/files/3/director-proposal.md +6 -0
  54. package/packs/ai-engineering/skills/subagent-design/evals/files/3/scoring-rubric.md +9 -0
  55. package/packs/ai-engineering/skills/subagent-design/evals/files/3/trial-and-round-notes.md +11 -0
  56. package/packs/api-builder/skills/eval-harness-generator/evals/evals.json +27 -0
  57. package/packs/api-builder/skills/eval-harness-generator/evals/files/2/SKILL.md +35 -0
  58. package/packs/api-builder/skills/prompt-caching-advisor/evals/evals.json +25 -0
  59. package/packs/api-builder/skills/prompt-caching-advisor/evals/files/2/build_request.py +40 -0
  60. package/packs/api-builder/skills/prompt-caching-advisor/evals/files/2/notes.md +10 -0
  61. package/packs/api-builder/skills/token-budget-estimator/evals/evals.json +27 -0
  62. package/packs/api-builder/skills/token-budget-estimator/evals/files/2/pilot-usage.csv +17 -0
  63. package/packs/api-builder/skills/token-budget-estimator/evals/files/2/workflow.md +42 -0
  64. package/packs/career/pack.json +1 -1
  65. package/packs/career/skills/job-fit-analysis/SKILL.md +2 -1
  66. package/packs/career/skills/job-fit-analysis/manifest.json +3 -2
  67. package/packs/career/skills/role-shortlist/SKILL.md +107 -0
  68. package/packs/career/skills/role-shortlist/evals/eval_queries.json +34 -0
  69. package/packs/career/skills/role-shortlist/evals/evals.json +75 -0
  70. package/packs/career/skills/role-shortlist/evals/files/1/careers-index.html +22 -0
  71. package/packs/career/skills/role-shortlist/evals/files/1/cv.md +44 -0
  72. package/packs/career/skills/role-shortlist/evals/files/1/postings/clinical-coding-officer-bramwick.md +23 -0
  73. package/packs/career/skills/role-shortlist/evals/files/1/postings/data-and-performance-analyst.html +28 -0
  74. package/packs/career/skills/role-shortlist/evals/files/1/postings/estates-maintenance-electrician-bramwick.md +20 -0
  75. package/packs/career/skills/role-shortlist/evals/files/1/postings/healthcare-support-worker-nights-corrin-bay.md +20 -0
  76. package/packs/career/skills/role-shortlist/evals/files/1/postings/medical-secretary-cardiology-elsford.html +30 -0
  77. package/packs/career/skills/role-shortlist/evals/files/1/postings/outpatient-booking-team-leader-bramwick.md +23 -0
  78. package/packs/career/skills/role-shortlist/evals/files/1/postings/patient-pathway-coordinator-bramwick.md +30 -0
  79. package/packs/career/skills/role-shortlist/evals/files/1/postings/patient-pathway-coordinator-elsford.md +30 -0
  80. package/packs/career/skills/role-shortlist/evals/files/1/postings/reception-and-admin-assistant-corrin-bay.md +21 -0
  81. package/packs/career/skills/role-shortlist/evals/files/1/postings/senior-care-coordinator.md +25 -0
  82. package/packs/career/skills/role-shortlist/evals/files/2/cv.md +33 -0
  83. package/packs/career/skills/role-shortlist/evals/files/2/job-board-export.csv +11 -0
  84. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10422.md +26 -0
  85. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10431.md +25 -0
  86. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10455.md +27 -0
  87. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10468.md +25 -0
  88. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10476.md +25 -0
  89. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10490.md +24 -0
  90. package/packs/career/skills/role-shortlist/evals/files/2/postings/FJ-10587.md +26 -0
  91. package/packs/career/skills/role-shortlist/evals/files/4/brackwater-careers.html +118 -0
  92. package/packs/career/skills/role-shortlist/evals/files/4/mere-castell-cv.md +44 -0
  93. package/packs/career/skills/role-shortlist/evals/files/4/tradesboard-export.csv +6 -0
  94. package/packs/career/skills/role-shortlist/manifest.json +38 -0
  95. package/packs/converters/skills/file-to-markdown/evals/evals.json +27 -0
  96. package/packs/converters/skills/file-to-markdown/evals/files/3/harbourline-shift-policy.docx +0 -0
  97. package/packs/converters/skills/file-to-markdown/evals/files/4/seed-swap-2026.csv +10 -0
  98. package/packs/converters/skills/md-to-docx/evals/evals.json +28 -0
  99. package/packs/converters/skills/md-to-docx/evals/files/3/brand.json +12 -0
  100. package/packs/converters/skills/md-to-docx/evals/files/3/img/team-photo.png +0 -0
  101. package/packs/converters/skills/md-to-docx/evals/files/3/tender-response.md +51 -0
  102. package/packs/converters/skills/md-to-html/evals/evals.json +26 -0
  103. package/packs/converters/skills/md-to-html/evals/files/2/brand.json +13 -0
  104. package/packs/converters/skills/md-to-html/evals/files/2/img/kick-net.png +0 -0
  105. package/packs/converters/skills/md-to-html/evals/files/2/river-survey-guide.md +53 -0
  106. package/packs/converters/skills/md-to-html/evals/files/3/nanas-lentil-soup.md +21 -0
  107. package/packs/converters/skills/md-to-html/evals/files/3/pot.png +0 -0
  108. package/packs/converters/skills/md-to-xlsx/evals/evals.json +26 -0
  109. package/packs/converters/skills/md-to-xlsx/evals/files/3/depot-costs-q3.md +20 -0
  110. package/packs/converters/skills/md-to-xlsx/evals/files/4/hollowmere-5k-results.json +7 -0
  111. package/packs/converters/skills/mermaid-render/evals/evals.json +26 -0
  112. package/packs/converters/skills/mermaid-render/evals/files/2/dispensing-diagrams.md +39 -0
  113. package/packs/core/skills/brief-intake/evals/evals.json +27 -0
  114. package/packs/core/skills/brief-intake/evals/files/2/ops-meeting-notes.md +18 -0
  115. package/packs/core/skills/brief-intake/evals/files/2/thread.txt +40 -0
  116. package/packs/core/skills/council-review/evals/evals.json +28 -0
  117. package/packs/core/skills/council-review/evals/files/2/compliance-note.md +11 -0
  118. package/packs/core/skills/council-review/evals/files/2/link-outages-q3.csv +11 -0
  119. package/packs/core/skills/council-review/evals/files/2/proposal.md +39 -0
  120. package/packs/core/skills/council-review/evals/files/2/vendor-letter.txt +12 -0
  121. package/packs/core/skills/doc-critique/evals/evals.json +27 -0
  122. package/packs/core/skills/doc-critique/evals/files/2/exec-summary.md +43 -0
  123. package/packs/core/skills/output-hygiene/evals/evals.json +27 -0
  124. package/packs/core/skills/output-hygiene/evals/files/3/newsletter.md +17 -0
  125. package/packs/data-analytics/skills/dashboard-spec/evals/evals.json +27 -0
  126. package/packs/data-analytics/skills/dashboard-spec/evals/files/2/data-inventory.md +16 -0
  127. package/packs/data-analytics/skills/dashboard-spec/evals/files/2/request-email.md +28 -0
  128. package/packs/data-analytics/skills/sql-review/evals/evals.json +27 -0
  129. package/packs/data-analytics/skills/sql-review/evals/files/2/context.md +10 -0
  130. package/packs/data-analytics/skills/sql-review/evals/files/2/monthly_donor_revenue.sql +16 -0
  131. package/packs/data-analytics/skills/sql-review/evals/files/2/schema.md +20 -0
  132. package/packs/design/skills/brand-kit/evals/evals.json +26 -0
  133. package/packs/design/skills/brand-kit/evals/files/2/brand-guidelines.md +32 -0
  134. package/packs/design/skills/brand-kit/evals/files/2/contact-sheet.txt +6 -0
  135. package/packs/design/skills/brand-kit/evals/files/2/logo.svg +5 -0
  136. package/packs/design/skills/brand-kit/evals/files/2/website-colours.css +9 -0
  137. package/packs/design/skills/brand-kit/evals/files/3/muddy-paws-logo.png +0 -0
  138. package/packs/design/skills/deck-builder/evals/evals.json +27 -0
  139. package/packs/design/skills/deck-builder/evals/files/4/ashby-vale-board-notes.md +36 -0
  140. package/packs/design/skills/marketing-flyer/evals/evals.json +27 -0
  141. package/packs/design/skills/marketing-flyer/evals/files/2/brand.json +14 -0
  142. package/packs/design/skills/marketing-flyer/evals/files/2/larchfield-logo.svg +4 -0
  143. package/packs/design/skills/marketing-flyer/evals/files/2/manager-email.txt +6 -0
  144. package/packs/design/skills/marketing-flyer/evals/files/2/open-day-brief.md +15 -0
  145. package/packs/design/skills/slide-outliner/evals/evals.json +26 -0
  146. package/packs/design/skills/slide-outliner/evals/files/2/uv-dosing-design-notes.md +38 -0
  147. package/packs/dev-team/skills/accessibility-audit/evals/evals.json +27 -0
  148. package/packs/dev-team/skills/accessibility-audit/evals/files/2/booking.html +79 -0
  149. package/packs/dev-team/skills/accessibility-audit/evals/files/2/scan-report.txt +23 -0
  150. package/packs/dev-team/skills/accessibility-audit/evals/files/2/styles.css +56 -0
  151. package/packs/dev-team/skills/agents-md-generator/evals/evals.json +27 -0
  152. package/packs/dev-team/skills/agents-md-generator/evals/files/5/.github/workflows/ci.yml +12 -0
  153. package/packs/dev-team/skills/agents-md-generator/evals/files/5/CONTRIBUTING.md +20 -0
  154. package/packs/dev-team/skills/agents-md-generator/evals/files/5/README.md +15 -0
  155. package/packs/dev-team/skills/agents-md-generator/evals/files/5/data/raw/README.md +7 -0
  156. package/packs/dev-team/skills/agents-md-generator/evals/files/5/pyproject.toml +23 -0
  157. package/packs/dev-team/skills/agents-md-generator/evals/files/5/scripts/deploy.sh +6 -0
  158. package/packs/dev-team/skills/agents-md-generator/evals/files/5/src/sensor_ingest/__init__.py +1 -0
  159. package/packs/dev-team/skills/agents-md-generator/evals/files/5/src/sensor_ingest/parse.py +20 -0
  160. package/packs/dev-team/skills/agents-md-generator/evals/files/5/tests/test_gateway.py +10 -0
  161. package/packs/dev-team/skills/agents-md-generator/evals/files/5/tests/test_parse.py +7 -0
  162. package/packs/dev-team/skills/agents-md-generator/evals/files/6/clean_marks.R +5 -0
  163. package/packs/dev-team/skills/agents-md-generator/evals/files/6/grades_final.csv +6 -0
  164. package/packs/dev-team/skills/agents-md-generator/evals/files/6/make_report.R +7 -0
  165. package/packs/dev-team/skills/agents-md-generator/evals/files/6/notes.txt +8 -0
  166. package/packs/dev-team/skills/agents-md-generator/evals/files/6/raw_marks.csv +6 -0
  167. package/packs/dev-team/skills/bug-triage/evals/evals.json +27 -0
  168. package/packs/dev-team/skills/bug-triage/evals/files/2/payments-log.csv +15 -0
  169. package/packs/dev-team/skills/bug-triage/evals/files/2/slack-thread.txt +16 -0
  170. package/packs/dev-team/skills/bug-triage/evals/files/2/ticket.txt +10 -0
  171. package/packs/dev-team/skills/feature-implement-loop/evals/evals.json +27 -0
  172. package/packs/dev-team/skills/feature-implement-loop/evals/files/2/TICKET.md +20 -0
  173. package/packs/dev-team/skills/feature-implement-loop/evals/files/2/closures.csv +5 -0
  174. package/packs/dev-team/skills/feature-implement-loop/evals/files/2/desk.py +11 -0
  175. package/packs/dev-team/skills/feature-implement-loop/evals/files/2/fees.py +14 -0
  176. package/packs/dev-team/skills/feature-implement-loop/evals/files/2/tests/test_fees.py +26 -0
  177. package/packs/dev-team/skills/feature-implement-loop/evals/files/3/away.txt +5 -0
  178. package/packs/dev-team/skills/feature-implement-loop/evals/files/3/members.txt +8 -0
  179. package/packs/dev-team/skills/feature-implement-loop/evals/files/3/rota.py +12 -0
  180. package/packs/dev-team/skills/launch-readiness/evals/evals.json +27 -0
  181. package/packs/dev-team/skills/launch-readiness/evals/files/2/launch-brief.md +32 -0
  182. package/packs/dev-team/skills/launch-readiness/evals/files/2/load-test-summary.txt +11 -0
  183. package/packs/dev-team/skills/launch-readiness/evals/files/2/privacy-signoff.txt +9 -0
  184. package/packs/dev-team/skills/launch-readiness/evals/files/2/sms-template.txt +2 -0
  185. package/packs/dev-team/skills/migration-plan/evals/evals.json +27 -0
  186. package/packs/dev-team/skills/migration-plan/evals/files/2/context.md +27 -0
  187. package/packs/dev-team/skills/migration-plan/evals/files/2/deferral-codes.csv +8 -0
  188. package/packs/dev-team/skills/migration-plan/evals/files/2/field-mapping.csv +11 -0
  189. package/packs/dev-team/skills/migration-plan/evals/files/2/trial-import-summary.txt +9 -0
  190. package/packs/dev-team/skills/pr-description-writer/evals/evals.json +27 -0
  191. package/packs/dev-team/skills/pr-description-writer/evals/files/4/changes.diff +64 -0
  192. package/packs/dev-team/skills/pr-description-writer/evals/files/4/commits.txt +2 -0
  193. package/packs/dev-team/skills/pre-merge-review/evals/evals.json +28 -0
  194. package/packs/dev-team/skills/pre-merge-review/evals/files/3/CHANGE.md +12 -0
  195. package/packs/dev-team/skills/pre-merge-review/evals/files/3/CONTRIBUTING.md +5 -0
  196. package/packs/dev-team/skills/pre-merge-review/evals/files/3/change.diff +53 -0
  197. package/packs/dev-team/skills/pre-merge-review/evals/files/3/clinic_dosing/__init__.py +1 -0
  198. package/packs/dev-team/skills/pre-merge-review/evals/files/3/clinic_dosing/dosing.py +30 -0
  199. package/packs/dev-team/skills/pre-merge-review/evals/files/3/clinic_dosing/drugs.py +6 -0
  200. package/packs/dev-team/skills/pre-merge-review/evals/files/3/tests/__init__.py +0 -0
  201. package/packs/dev-team/skills/pre-merge-review/evals/files/3/tests/test_dosing.py +29 -0
  202. package/packs/dev-team/skills/sonar-onboard/evals/evals.json +27 -0
  203. package/packs/dev-team/skills/sonar-onboard/evals/files/2/.github/workflows/ci.yml +10 -0
  204. package/packs/dev-team/skills/sonar-onboard/evals/files/2/.gitlab-ci.yml +32 -0
  205. package/packs/dev-team/skills/sonar-onboard/evals/files/2/README.md +11 -0
  206. package/packs/dev-team/skills/sonar-onboard/evals/files/2/pyproject.toml +16 -0
  207. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/__init__.py +1 -0
  208. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/_generated/__init__.py +0 -0
  209. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/_generated/stops_pb2.py +4 -0
  210. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/timetable.py +12 -0
  211. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/vendor/__init__.py +0 -0
  212. package/packs/dev-team/skills/sonar-onboard/evals/files/2/src/wayline/vendor/gtfs_lite/__init__.py +3 -0
  213. package/packs/dev-team/skills/sonar-onboard/evals/files/2/tests/test_timetable.py +14 -0
  214. package/packs/dev-team/skills/sonar-onboard/evals/files/2/web/package.json +20 -0
  215. package/packs/dev-team/skills/sonar-onboard/evals/files/2/web/src/board.test.ts +9 -0
  216. package/packs/dev-team/skills/sonar-onboard/evals/files/2/web/src/board.ts +8 -0
  217. package/packs/dev-team/skills/sonar-review/evals/evals.json +27 -0
  218. package/packs/dev-team/skills/sonar-review/evals/files/2/changed-files.txt +5 -0
  219. package/packs/dev-team/skills/sonar-review/evals/files/2/hotspots.json +7 -0
  220. package/packs/dev-team/skills/sonar-review/evals/files/2/issues.json +26 -0
  221. package/packs/dev-team/skills/sonar-review/evals/files/2/quality-gate.json +19 -0
  222. package/packs/dev-team/skills/tech-debt-register/evals/evals.json +28 -0
  223. package/packs/dev-team/skills/tech-debt-register/evals/files/4/incidents.csv +7 -0
  224. package/packs/dev-team/skills/tech-debt-register/evals/files/4/retro-notes.md +21 -0
  225. package/packs/dev-team/skills/test-plan-generator/evals/evals.json +27 -0
  226. package/packs/dev-team/skills/test-plan-generator/evals/files/2/permit-renewal-spec.md +40 -0
  227. package/packs/dev-team/skills/user-story-splitter/evals/evals.json +27 -0
  228. package/packs/dev-team/skills/user-story-splitter/evals/files/2/prd-shift-swap.md +38 -0
  229. package/packs/experience-design/skills/content-design/evals/evals.json +27 -0
  230. package/packs/experience-design/skills/content-design/evals/files/2/contact-centre-notes.md +18 -0
  231. package/packs/experience-design/skills/content-design/evals/files/2/current-page.md +17 -0
  232. package/packs/experience-design/skills/content-design/evals/files/2/policy-extract.md +17 -0
  233. package/packs/experience-design/skills/design-system-spec/evals/evals.json +27 -0
  234. package/packs/experience-design/skills/design-system-spec/evals/files/2/designer-notes.md +23 -0
  235. package/packs/experience-design/skills/design-system-spec/evals/files/2/eng-thread.md +11 -0
  236. package/packs/experience-design/skills/design-system-spec/evals/files/2/tokens.json +27 -0
  237. package/packs/experience-design/skills/information-architecture/evals/evals.json +27 -0
  238. package/packs/experience-design/skills/information-architecture/evals/files/2/page-inventory.csv +28 -0
  239. package/packs/experience-design/skills/information-architecture/evals/files/2/search-log.csv +16 -0
  240. package/packs/experience-design/skills/information-architecture/evals/files/2/stakeholder-notes.md +13 -0
  241. package/packs/experience-design/skills/service-blueprint/evals/evals.json +27 -0
  242. package/packs/experience-design/skills/service-blueprint/evals/files/2/complaints-summary.md +14 -0
  243. package/packs/experience-design/skills/service-blueprint/evals/files/2/process-notes.md +15 -0
  244. package/packs/experience-design/skills/service-blueprint/evals/files/2/timings.csv +5 -0
  245. package/packs/experience-design/skills/ux-writing/evals/evals.json +27 -0
  246. package/packs/experience-design/skills/ux-writing/evals/files/2/brand-notes.md +8 -0
  247. package/packs/experience-design/skills/ux-writing/evals/files/2/error-codes.csv +6 -0
  248. package/packs/experience-design/skills/ux-writing/evals/files/2/screens.md +26 -0
  249. package/packs/grc/skills/dpia/evals/evals.json +27 -0
  250. package/packs/grc/skills/dpia/evals/files/2/legal-notes.md +6 -0
  251. package/packs/grc/skills/dpia/evals/files/2/project-brief.md +17 -0
  252. package/packs/grc/skills/dpia/evals/files/2/vendor-factsheet.md +8 -0
  253. package/packs/grc/skills/risk-register/evals/evals.json +27 -0
  254. package/packs/grc/skills/risk-register/evals/files/2/committee-notes.md +8 -0
  255. package/packs/grc/skills/risk-register/evals/files/2/risks-draft.csv +9 -0
  256. package/packs/grc/skills/risk-register/evals/files/2/scoring-scale.md +12 -0
  257. package/packs/grc/skills/security-questionnaire-response/evals/evals.json +27 -0
  258. package/packs/grc/skills/security-questionnaire-response/evals/files/4/evidence/business-continuity-plan.md +7 -0
  259. package/packs/grc/skills/security-questionnaire-response/evals/files/4/evidence/information-security-policy.md +10 -0
  260. package/packs/grc/skills/security-questionnaire-response/evals/files/4/evidence/pentest-summary-2026.md +10 -0
  261. package/packs/grc/skills/security-questionnaire-response/evals/files/4/evidence/staff-handbook-extract.md +3 -0
  262. package/packs/grc/skills/security-questionnaire-response/evals/files/4/instructions.md +10 -0
  263. package/packs/grc/skills/security-questionnaire-response/evals/files/4/questionnaire.csv +11 -0
  264. package/packs/grc/skills/soc2-evidence-map/evals/evals.json +27 -0
  265. package/packs/grc/skills/soc2-evidence-map/evals/files/2/audit-scope.md +10 -0
  266. package/packs/grc/skills/soc2-evidence-map/evals/files/2/controls.csv +13 -0
  267. package/packs/grc/skills/soc2-evidence-map/evals/files/2/tooling-notes.md +8 -0
  268. package/packs/infra-as-code/skills/terraform-module/evals/evals.json +27 -0
  269. package/packs/infra-as-code/skills/terraform-module/evals/files/3/requirements.md +23 -0
  270. package/packs/infra-as-code/skills/terraform-plan-review/evals/evals.json +27 -0
  271. package/packs/infra-as-code/skills/terraform-plan-review/evals/files/3/plan.txt +87 -0
  272. package/packs/product-manager/skills/business-case/evals/evals.json +27 -0
  273. package/packs/product-manager/skills/business-case/evals/files/2/hollin_vale_inputs.md +46 -0
  274. package/packs/product-manager/skills/okr-cascade/evals/evals.json +27 -0
  275. package/packs/product-manager/skills/okr-cascade/evals/files/3/quillfield_2027.md +45 -0
  276. package/packs/product-manager/skills/prd-draft/evals/evals.json +27 -0
  277. package/packs/product-manager/skills/prd-draft/evals/files/2/brief.md +7 -0
  278. package/packs/product-manager/skills/prd-draft/evals/files/2/call_center_notes.md +7 -0
  279. package/packs/product-manager/skills/prd-draft/evals/files/2/meter_facts.md +6 -0
  280. package/packs/product-manager/skills/prfaq/evals/evals.json +26 -0
  281. package/packs/product-manager/skills/prfaq/evals/files/3/drone_notes.md +25 -0
  282. package/packs/product-manager/skills/requirements-interview/evals/evals.json +27 -0
  283. package/packs/product-manager/skills/requirements-interview/evals/files/2/project_brief.md +29 -0
  284. package/packs/product-manager/skills/strategy-analysis/evals/evals.json +27 -0
  285. package/packs/product-manager/skills/strategy-analysis/evals/files/4/market_notes.md +21 -0
  286. package/packs/product-manager/skills/success-metrics/evals/evals.json +28 -0
  287. package/packs/product-manager/skills/success-metrics/evals/files/3/brief.md +21 -0
  288. package/packs/product-manager/skills/user-journey-map/evals/evals.json +26 -0
  289. package/packs/product-manager/skills/user-journey-map/evals/files/3/research_notes.md +30 -0
  290. package/packs/research/skills/hypothesis-comparison/evals/evals.json +27 -0
  291. package/packs/research/skills/hypothesis-comparison/evals/files/2/season_notes.md +29 -0
  292. package/packs/research/skills/research-plan/evals/evals.json +28 -0
  293. package/packs/research/skills/research-plan/evals/files/3/request.md +19 -0
  294. package/packs/skill-engineering/skills/skill-author/evals/evals.json +27 -0
  295. package/packs/skill-engineering/skills/skill-author/evals/files/2/constraints.md +7 -0
  296. package/packs/skill-engineering/skills/skill-author/evals/files/2/example-discharge.md +22 -0
  297. package/packs/skill-engineering/skills/skill-author/evals/files/2/process.md +15 -0
  298. package/packs/skill-engineering/skills/skill-review/evals/evals.json +27 -0
  299. package/packs/skill-engineering/skills/skill-review/evals/files/2/invoice-chaser/SKILL.md +20 -0
  300. package/packs/skill-engineering/skills/skill-review/evals/files/2/invoice-chaser/evals/evals.json +12 -0
  301. package/packs/skill-engineering/skills/skill-review/evals/files/2/invoice-chaser/scripts/send_reminders.py +46 -0
  302. package/packs/solution-architect/skills/adr-generator/evals/evals.json +27 -0
  303. package/packs/solution-architect/skills/adr-generator/evals/files/2/integration-notes.md +23 -0
  304. package/packs/solution-architect/skills/adr-generator/evals/files/2/larchway-quote.txt +10 -0
  305. package/packs/solution-architect/skills/api-contract-draft/evals/evals.json +27 -0
  306. package/packs/solution-architect/skills/api-contract-draft/evals/files/2/booking-brief.md +18 -0
  307. package/packs/solution-architect/skills/api-contract-draft/evals/files/2/facilities-policy-excerpt.md +7 -0
  308. package/packs/solution-architect/skills/architecture-diagrams/evals/evals.json +27 -0
  309. package/packs/solution-architect/skills/architecture-diagrams/evals/files/2/telemetry-overview.md +23 -0
  310. package/packs/solution-architect/skills/data-contract/evals/evals.json +27 -0
  311. package/packs/solution-architect/skills/data-contract/evals/files/2/grain_deliveries.sql +15 -0
  312. package/packs/solution-architect/skills/data-contract/evals/files/2/publisher-notes.md +14 -0
  313. package/packs/solution-architect/skills/data-contract/evals/files/2/sample_rows.csv +6 -0
  314. package/packs/solution-architect/skills/figma-diagrams/evals/evals.json +26 -0
  315. package/packs/solution-architect/skills/figma-diagrams/evals/files/2/signage-file.json +373 -0
  316. package/packs/solution-architect/skills/nfr-spec/evals/evals.json +27 -0
  317. package/packs/solution-architect/skills/nfr-spec/evals/files/2/vehicle-booking-brief.md +21 -0
  318. package/packs/solution-architect/skills/reverse-architecture/evals/evals.json +28 -0
  319. package/packs/solution-architect/skills/reverse-architecture/evals/files/2/README.md +11 -0
  320. package/packs/solution-architect/skills/reverse-architecture/evals/files/2/docker-compose.yml +42 -0
  321. package/packs/solution-architect/skills/reverse-architecture/evals/files/2/env.example +3 -0
  322. package/packs/solution-architect/skills/reverse-architecture/evals/files/2/nginx.conf +15 -0
  323. package/packs/solution-architect/skills/reverse-architecture/evals/files/2/worker-requirements.txt +4 -0
  324. package/packs/solution-architect/skills/threat-model/evals/evals.json +28 -0
  325. package/packs/solution-architect/skills/threat-model/evals/files/2/permits-design.md +23 -0
  326. package/packs/sre-oncall/skills/capacity-cost-model/evals/evals.json +28 -0
  327. package/packs/sre-oncall/skills/capacity-cost-model/evals/files/2/brief.md +22 -0
  328. package/packs/sre-oncall/skills/capacity-cost-model/evals/files/2/price-sheet.md +13 -0
  329. package/packs/sre-oncall/skills/capacity-cost-model/evals/files/2/rollout-plan.md +27 -0
  330. package/packs/sre-oncall/skills/cloud-cost-review/evals/evals.json +28 -0
  331. package/packs/sre-oncall/skills/cloud-cost-review/evals/files/3/cost-export-2026-09.csv +25 -0
  332. package/packs/sre-oncall/skills/cloud-cost-review/evals/files/3/notes.md +11 -0
  333. package/packs/sre-oncall/skills/cloud-cost-review/evals/files/3/utilisation-2026-09.csv +12 -0
  334. package/packs/sre-oncall/skills/delivery-metrics-report/evals/evals.json +27 -0
  335. package/packs/sre-oncall/skills/delivery-metrics-report/evals/files/3/deploys.csv +68 -0
  336. package/packs/sre-oncall/skills/delivery-metrics-report/evals/files/3/incidents.csv +7 -0
  337. package/packs/sre-oncall/skills/delivery-metrics-report/evals/files/3/prs.csv +46 -0
  338. package/packs/sre-oncall/skills/incident-comms/evals/evals.json +27 -0
  339. package/packs/sre-oncall/skills/incident-comms/evals/files/2/comms-rules.md +6 -0
  340. package/packs/sre-oncall/skills/incident-comms/evals/files/2/incident-channel.txt +17 -0
  341. package/packs/sre-oncall/skills/incident-comms/evals/files/2/last-status-update.md +5 -0
  342. package/packs/sre-oncall/skills/observability-plan/evals/evals.json +27 -0
  343. package/packs/sre-oncall/skills/observability-plan/evals/files/2/constraints.md +9 -0
  344. package/packs/sre-oncall/skills/observability-plan/evals/files/2/current-alerts.csv +10 -0
  345. package/packs/sre-oncall/skills/observability-plan/evals/files/2/service-overview.md +27 -0
  346. package/packs/sre-oncall/skills/runbook-generator/evals/evals.json +27 -0
  347. package/packs/sre-oncall/skills/runbook-generator/evals/files/2/deploy.sh +14 -0
  348. package/packs/sre-oncall/skills/runbook-generator/evals/files/2/handover-chat.txt +8 -0
  349. package/packs/sre-oncall/skills/runbook-generator/evals/files/2/service-notes.md +26 -0
  350. package/packs/sre-oncall/skills/runbook-generator/evals/files/2/standing-order.md +3 -0
  351. package/packs/stakeholder-comms/skills/audience-profile/evals/evals.json +26 -0
  352. package/packs/stakeholder-comms/skills/decision-log/evals/evals.json +26 -0
  353. package/packs/stakeholder-comms/skills/decision-log/evals/files/2/committee-meeting-2026-09-03.txt +23 -0
  354. package/packs/stakeholder-comms/skills/decision-log/evals/files/2/followup-thread.txt +6 -0
  355. package/packs/stakeholder-comms/skills/exec-summary/evals/evals.json +26 -0
  356. package/packs/stakeholder-comms/skills/exec-summary/evals/files/2/library-branches-options-paper.md +67 -0
  357. package/packs/trackers/skills/backlog-triage/evals/evals.json +27 -0
  358. package/packs/trackers/skills/backlog-triage/evals/files/3/parks-backlog.csv +19 -0
  359. package/packs/trackers/skills/team-status-report/evals/evals.json +28 -0
  360. package/packs/trackers/skills/team-status-report/evals/files/3/larkspur-week-42.csv +15 -0
  361. package/packs/trackers/skills/tracker-brief-sync/evals/evals.json +28 -0
  362. package/packs/trackers/skills/tracker-brief-sync/evals/files/3/brief-home-delivery.md +44 -0
@@ -14,6 +14,34 @@
14
14
  "Outputs are low/expected/high ranges with a lean, and the cost-per-tenant trend at scale is checked and flagged if it rises",
15
15
  "Does not invent demand figures or services beyond those in the prompt; unknown inputs are stated as assumptions"
16
16
  ]
17
+ },
18
+ {
19
+ "id": 2,
20
+ "held_out": "2026-10-18",
21
+ "prompt": "I'm on the platform team at Brackwater Water. The programme manager wants a cloud cost estimate for the smart meter data platform for the finance committee. Her request is in brief.md, field ops' rollout plan is in rollout-plan.md, and our provider's prices are in price-sheet.md. Can you put the estimate together?",
22
+ "assertions": [
23
+ "Sizes ingestion and database writes for the synchronised upload window (about 4,800 readings per second at 120,000 meters), not for the daily average (about 130 per second)",
24
+ "Points out that the brief's hourly readings and 'about 1 million readings a day' do not match the rollout plan's 15-minute readings, which give about 11.5 million readings a day at 120,000 meters",
25
+ "Names the database Standard tier's 5,000 writes-per-second limit as a cliff: the year-2 peak sits just under it with little headroom, and the 3x scenario crosses it into the $2,400-a-month Enterprise tier",
26
+ "Keeps the regulator's 7-year retention as a fixed requirement and does not propose shortening it to cut cost",
27
+ "Does not give a payback period or savings figure, and says the material has no benefit or old-contract figures to compute one from",
28
+ "Uses only prices from the price sheet; any cost not on it is marked as an assumption, not presented as a Nimbus price",
29
+ "Fits in about two pages, as the committee asked"
30
+ ]
31
+ },
32
+ {
33
+ "id": 3,
34
+ "held_out": "2026-10-18",
35
+ "prompt": "hi, i run a bakery (one shop right now) and my nephew set up our online ordering website. the hosting bill was $45 last month and we had roughly 1,200 orders. we're opening two more shops next spring. how much will the website cost us then? also christmas week we get about 4x the normal orders. just a few bullet points please, i'm not technical",
36
+ "assertions": [
37
+ "Gives an estimated monthly cost or range for after the new shops open, rather than only asking questions",
38
+ "Bases the estimate on order volume and states the assumption about how orders grow with two more shops",
39
+ "Does not simply triple the $45 without saying that part of a hosting bill is often a fixed plan fee that does not grow with orders",
40
+ "Flags the Christmas peak (about 4x normal orders, so roughly 12x today's volume if orders triple) as the thing to check against the hosting plan's limits before December",
41
+ "Suggests what to ask the nephew or the hosting company, such as what the $45 plan covers and what its limits are",
42
+ "Does not invent a hosting company's prices, plan names or limits",
43
+ "Stays at a few plain-language bullet points with no unexplained jargon"
44
+ ]
17
45
  }
18
46
  ]
19
47
  }
@@ -0,0 +1,22 @@
1
+ # Smart metering platform: cost estimate request
2
+
3
+ From: Programme Manager, Smart Metering Programme, Brackwater Water
4
+ To: Platform team
5
+
6
+ We need a cloud cost estimate for the meter data platform before the finance committee meets on 4 November.
7
+
8
+ What we know:
9
+
10
+ - We are replacing 120,000 household water meters with smart meters.
11
+ - Each meter sends a reading every hour, so we're looking at about 1 million readings a day.
12
+ - Readings land in the time-series database and a daily file of per-meter totals goes to our on-premises billing system.
13
+ - The regulator requires us to keep reading-level data for 7 years.
14
+ - Finance has pencilled in $1,500 a month for running costs.
15
+
16
+ What the committee wants:
17
+
18
+ 1. Monthly running cost in year 1 and year 2.
19
+ 2. What happens if the three neighbouring utilities join our platform. They are each roughly our size, so call it 3x.
20
+ 3. The payback period in months, so they can compare it with the old meter-reading contract.
21
+
22
+ Please keep it to two pages at most. The committee will not read more than that.
@@ -0,0 +1,13 @@
1
+ # Nimbus Cloud price sheet (excerpt, USD, region: north-1)
2
+
3
+ | Item | Price | Notes |
4
+ |---|---|---|
5
+ | Ingestion queue | $0.40 per million messages | |
6
+ | Ingestion worker (2 vCPU) | $70 per worker per month | Each worker processes up to 500 readings per second. Autoscaling adds workers with about a 3-minute delay. |
7
+ | Time-series DB, Standard tier | $400 per month flat | Up to 5,000 writes per second sustained. One reading = one write. |
8
+ | Time-series DB, Enterprise tier | $2,400 per month flat | Up to 50,000 writes per second sustained. |
9
+ | Time-series DB storage (either tier) | $0.12 per GB-month | A stored reading takes about 64 bytes after compression. |
10
+ | Archive storage | $0.01 per GB-month | Retrieval takes up to 12 hours. |
11
+ | Log ingestion | $0.50 per GB | Ingestion workers log one line of about 300 bytes per reading at the default level. |
12
+ | Data transfer out (to internet or on-premises) | $0.09 per GB | |
13
+ | NAT gateway | $32 per gateway per month + $0.045 per GB processed | |
@@ -0,0 +1,27 @@
1
+ # Field operations: smart meter rollout plan (v3)
2
+
3
+ Prepared by the Field Operations lead.
4
+
5
+ ## Install ramp
6
+
7
+ | Month | Meters installed (cumulative) |
8
+ |---|---|
9
+ | 3 | 15,000 |
10
+ | 6 | 40,000 |
11
+ | 9 | 65,000 |
12
+ | 12 | 85,000 |
13
+ | 18 | 105,000 |
14
+ | 24 | 120,000 |
15
+
16
+ ## Meter behaviour (from the meter supplier's firmware spec)
17
+
18
+ - Meters take a reading every 15 minutes.
19
+ - Meters do not send each reading as it is taken. They upload a batch four times a day, at 00:00, 06:00, 12:00 and 18:00, carrying the last 6 hours of readings (24 readings per upload).
20
+ - Each meter picks a random start time within a 10-minute window after the scheduled time. There is no other spreading.
21
+ - The upload schedule is fixed in firmware for the whole 2027 contract term. The supplier will not change it before then.
22
+ - One upload is one message on the ingestion queue.
23
+
24
+ ## Other environments
25
+
26
+ - A test rig of 500 meters on the bench at the depot, uploading on the same schedule.
27
+ - A staging copy of the full pipeline, which the platform team say they need for testing firmware updates.
@@ -24,6 +24,34 @@
24
24
  "Treats credits as netted into cost and says so",
25
25
  "Does not invent a prior month or savings percentages"
26
26
  ]
27
+ },
28
+ {
29
+ "id": 3,
30
+ "held_out": "2026-10-18",
31
+ "prompt": "Can you review our September cloud spend and tell the trustees where we can save? The billing export is cost-export-2026-09.csv, per-machine utilisation is in utilisation-2026-09.csv, and my notes are in notes.md.",
32
+ "assertions": [
33
+ "Attributes the September rise to the one-off archive copy to the university (about $5,200 of outbound data transfer), and does not count it as a recurring saving or use it to size a commitment",
34
+ "Flags that the export totals about $16,900, not the $21,400 in the notes, and that August's $11,400 was after a $2,000 credit, so the jump is overstated",
35
+ "Does not recommend removing or downsizing the DR standby database despite its 3% CPU, because the insurer requires it",
36
+ "Lists the idle notebook instance (about $553 a month) and the two unattached volumes ($300 a month together) as savings, with amounts taken from the export",
37
+ "Advises against a 3-year commitment covering everything: leaves out the render machine that goes in February and the one-off transfer, and limits any commitment to the steady baseline",
38
+ "Does not invent utilisation, resources or prices that are not in the files: it gives no rightsizing saving for the reporting server, which has no utilisation data, and does not count two savings on the same machine twice",
39
+ "Fits on one page for the committee papers"
40
+ ]
41
+ },
42
+ {
43
+ "id": 4,
44
+ "held_out": "2026-10-18",
45
+ "prompt": "I'm treasurer for the Elmstead Community Choir. Our volunteer IT person moved away and nobody understands the Google Cloud bill. It was about $420 last month and all we have is a website and some concert photos. The bill page shows:\n\nCompute Engine $212.40\nCloud SQL $118.25\nNetworking $41.20\nCloud Storage $8.15\n\nWhat can we cut? Just a short list please.",
46
+ "assertions": [
47
+ "Gives a short, prioritised list of things to look at in the reply, not only questions",
48
+ "Notes that the four lines add up to $380.00, not about $420, and suggests checking for a missing line, tax or a different month",
49
+ "Does not tell them to delete or switch off the server or the database outright before someone confirms whether the website depends on it",
50
+ "Does not state exact savings that four service totals cannot support; any figure is labelled as an estimate and tied to the lines given",
51
+ "Gives at least one safe first step a non-technical treasurer can take or ask for, such as a budget alert or a list of what is actually running",
52
+ "Does not invent machines, sizes, usage or prices beyond the four lines given",
53
+ "Keeps to a short list in plain language"
54
+ ]
27
55
  }
28
56
  ]
29
57
  }
@@ -0,0 +1,25 @@
1
+ billing_period,account,region,service,resource_id,resource_name,usage_type,usage_quantity,unit,cost_usd,tag_team,tag_env
2
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a01,web-1,BoxUsage:m5.2xlarge,720,Hrs,276.48,web,prod
3
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a02,web-2,BoxUsage:m5.2xlarge,720,Hrs,276.48,web,prod
4
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a03,collections-db,BoxUsage:r5.4xlarge,720,Hrs,725.76,collections,prod
5
+ 2026-09,kh-prod,eu-west-2,EC2,i-0a04,collections-db-dr,BoxUsage:r5.4xlarge,720,Hrs,725.76,collections,dr
6
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a05,image-render,BoxUsage:c5.4xlarge,720,Hrs,489.6,digitisation,prod
7
+ 2026-09,kh-dev,eu-west-1,EC2,i-0a06,notebook-temp,BoxUsage:m5.4xlarge,720,Hrs,552.96,,
8
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a07,bastion,BoxUsage:t3.large,720,Hrs,59.9,web,prod
9
+ 2026-09,kh-prod,eu-west-1,EC2,i-0a08,reporting,BoxUsage:m5.xlarge,720,Hrs,138.24,finance,prod
10
+ 2026-09,kh-prod,eu-west-1,EBS,vol-01,collections-db-data,VolumeUsage.gp2,500,GB-Mo,50.0,collections,prod
11
+ 2026-09,kh-dev,eu-west-1,EBS,vol-02,,VolumeUsage.gp2,2000,GB-Mo,200.0,,
12
+ 2026-09,kh-prod,eu-west-1,EBS,vol-03,render-scratch,VolumeUsage.gp2,1000,GB-Mo,100.0,digitisation,prod
13
+ 2026-09,kh-prod,eu-west-2,EBS,vol-04,collections-db-dr-data,VolumeUsage.gp2,500,GB-Mo,50.0,collections,dr
14
+ 2026-09,kh-prod,eu-west-1,EBS,snapshots,,SnapshotUsage,18000,GB-Mo,900.0,,
15
+ 2026-09,kh-prod,eu-west-1,S3,kh-archive-masters,,TimedStorage-ByteHrs,85000,GB-Mo,1955.0,digitisation,prod
16
+ 2026-09,kh-prod,eu-west-1,S3,kh-archive-masters,,Requests-Tier2,31000,Requests,12.4,digitisation,prod
17
+ 2026-09,kh-prod,eu-west-1,S3,kh-web-assets,,TimedStorage-ByteHrs,400,GB-Mo,9.2,web,prod
18
+ 2026-09,kh-prod,eu-west-1,VPC,nat-01,,NatGateway-Hours,1440,Hrs,69.12,,
19
+ 2026-09,kh-prod,eu-west-1,VPC,nat-01,,NatGateway-Bytes,42000,GB,2016.0,,
20
+ 2026-09,kh-prod,eu-west-1,DataTransfer,kh-archive-masters,,DataTransfer-Out-Bytes,61500,GB,5227.5,digitisation,prod
21
+ 2026-09,kh-prod,eu-west-1,DataTransfer,,,DataTransfer-Regional-Bytes,9000,GB,180.0,,
22
+ 2026-09,kh-prod,eu-west-1,DataTransfer,i-0a03,collections-db,DataTransfer-InterRegion-Out,3000,GB,60.0,collections,prod
23
+ 2026-09,kh-prod,eu-west-1,CloudWatch,,,DataProcessing-Bytes (logs ingest),2900,GB,1653.0,,
24
+ 2026-09,kh-prod,eu-west-1,CloudWatch,,,CW:MetricMonitorUsage,280,Metrics,84.0,,
25
+ 2026-09,kh-prod,eu-west-1,Support,,,Business support,1,Month,1100.0,,
@@ -0,0 +1,11 @@
1
+ # Notes from the Finance Officer, Kestrel Hall Museum Trust
2
+
3
+ - The September cloud bill is $21,400 against August's $11,400. That is nearly double and the trustees want to know why, and where we can save.
4
+ - August's figure is after a $2,000 service credit the provider gave us for the July outage.
5
+ - In September we sent a full copy of the image archive to the Northfield University consortium for their research mirror. That was a one-off; they won't need it again.
6
+ - Our insurer requires a warm standby of the collections database in a second region, the same size as production. It is a condition of our cover.
7
+ - Image rendering moves to the university's shared computing cluster in February 2027, so that machine goes away then.
8
+ - The trustees would like to sign a 3-year savings plan covering everything before year end, because the account manager said it saves "up to 72%".
9
+ - The archive masters are read maybe twice a year, when we do reprints. The web team say they never touch that bucket.
10
+ - We don't have monitoring on the reporting server yet; the agent was never installed.
11
+ - Please keep it to one page. It goes in the finance committee papers.
@@ -0,0 +1,12 @@
1
+ resource_id,resource_name,cpu_p95_pct,mem_p95_pct,state,last_activity
2
+ i-0a01,web-1,41,58,running,2026-09-30
3
+ i-0a02,web-2,39,55,running,2026-09-30
4
+ i-0a03,collections-db,62,81,running,2026-09-30
5
+ i-0a04,collections-db-dr,3,22,running (replica),2026-09-30
6
+ i-0a05,image-render,9,14,running,2026-09-30
7
+ i-0a06,notebook-temp,1,4,running,2026-06-30
8
+ i-0a07,bastion,2,10,running,2026-09-29
9
+ vol-01,collections-db-data,,,in-use,2026-09-30
10
+ vol-02,,,,available (unattached since 2026-03-14),2026-03-14
11
+ vol-03,render-scratch,,,available (unattached since 2026-05-02),2026-05-02
12
+ vol-04,collections-db-dr-data,,,in-use,2026-09-30
@@ -23,6 +23,33 @@
23
23
  "Offers an alternative: each team's own trend over the same window and a shared definition of deployment and failure",
24
24
  "Does not invent metric values for any team"
25
25
  ]
26
+ },
27
+ {
28
+ "id": 3,
29
+ "held_out": "2026-10-18",
30
+ "prompt": "I manage the fares team at Tarnmoor Rail. The steering group wants a one-page delivery report on fares-api for August and September. Our Head of Digital has been telling them we deployed about 60 times in those two months with a 5% change failure rate. The exports are deploys.csv, incidents.csv and prs.csv. While you're at it, can you rank the engineers by cycle time? I need it for performance reviews.",
31
+ "assertions": [
32
+ "Counts only fares-api production deployments (32 in the window), excluding staging and journey-planner rows, and says this does not match the 'about 60' figure",
33
+ "Gives a change failure rate of about 9% (3 of 32), leaving out the payment-provider outage and counting the duplicate incident once, and says this differs from the 5% claimed",
34
+ "Treats the week of 7 September, which has no rows for any service, as a likely gap in the export to confirm, not as a week with zero deployments",
35
+ "Reports recovery time with its tiny sample and flags the still-unresolved incident, rather than presenting a confident average",
36
+ "Does not rank individual engineers and explains why, offering a team-level view instead",
37
+ "Does not invent deployments, incidents or figures that are not in the exports",
38
+ "Fits on about one page for the steering group"
39
+ ]
40
+ },
41
+ {
42
+ "id": 4,
43
+ "held_out": "2026-10-18",
44
+ "prompt": "I run marketing for Fernhill Garden Centres. Our web agency sends us this every month and my boss wants to know if they're getting better or worse:\n\nJuly: 3 releases, 1 broke something (fixed in 2 days)\nAugust: 5 releases, 0 broke anything\nSeptember: 2 releases, 2 broke something (one fixed in 4 hours, one in 3 days)\n\nCan you give me a couple of sentences and a small table I can paste into an email?",
45
+ "assertions": [
46
+ "Delivers a couple of sentences and a small table ready to paste, not a long report",
47
+ "Computes the failure share correctly: 1 of 3 in July, 0 of 5 in August, 2 of 2 in September, 3 of 10 overall",
48
+ "Says that ten releases over three months are too few to call a trend with confidence, while noting September looks worse",
49
+ "Does not report lead time or any other measure the monthly lines do not contain; any mention of fix time uses the three fix times as given",
50
+ "Suggests one or two things to ask the agency to record each month so the question can be answered properly",
51
+ "Does not invent numbers beyond the three monthly lines"
52
+ ]
26
53
  }
27
54
  ]
28
55
  }
@@ -0,0 +1,68 @@
1
+ deploy_id,service,environment,deployed_at,version
2
+ D-1003,fares-api,staging,2026-08-03T07:05:00Z,fares-b170b
3
+ D-1036,fares-api,production,2026-08-03T09:00:00Z,fares-f883a
4
+ D-1005,journey-planner,production,2026-08-03T11:10:00Z,journ-1becd
5
+ D-1037,fares-api,production,2026-08-04T11:00:00Z,fares-3ac34
6
+ D-1038,fares-api,production,2026-08-05T13:15:00Z,fares-6b0ee
7
+ D-1001,fares-api,staging,2026-08-06T07:05:00Z,fares-9d116
8
+ D-1039,fares-api,production,2026-08-06T09:00:00Z,fares-d59db
9
+ D-1002,fares-api,staging,2026-08-07T08:05:00Z,fares-e3ac9
10
+ D-1004,journey-planner,production,2026-08-07T15:50:00Z,journ-758cd
11
+ D-1007,fares-api,staging,2026-08-10T08:40:00Z,fares-981ed
12
+ D-1040,fares-api,production,2026-08-10T13:00:00Z,fares-4908f
13
+ D-1041,fares-api,production,2026-08-11T13:30:00Z,fares-9857f
14
+ D-1008,fares-api,staging,2026-08-12T08:20:00Z,fares-8731a
15
+ D-1042,fares-api,production,2026-08-12T13:15:00Z,fares-9aa42
16
+ D-1043,fares-api,production,2026-08-13T09:15:00Z,fares-d7702
17
+ D-1010,journey-planner,production,2026-08-13T12:50:00Z,journ-d7a2e
18
+ D-1006,fares-api,staging,2026-08-14T07:40:00Z,fares-44b9b
19
+ D-1044,fares-api,production,2026-08-14T11:00:00Z,fares-90b0c
20
+ D-1009,journey-planner,production,2026-08-14T13:25:00Z,journ-4f98e
21
+ D-1013,fares-api,staging,2026-08-17T08:20:00Z,fares-c1fee
22
+ D-1045,fares-api,production,2026-08-17T13:45:00Z,fares-6464e
23
+ D-1011,fares-api,staging,2026-08-18T08:20:00Z,fares-1a097
24
+ D-1046,fares-api,production,2026-08-18T11:45:00Z,fares-b2edd
25
+ D-1012,fares-api,staging,2026-08-19T07:40:00Z,fares-a2b1d
26
+ D-1047,fares-api,production,2026-08-19T11:00:00Z,fares-49194
27
+ D-1014,journey-planner,production,2026-08-19T15:25:00Z,journ-219a7
28
+ D-1015,journey-planner,production,2026-08-20T11:25:00Z,journ-895e8
29
+ D-1048,fares-api,production,2026-08-21T09:45:00Z,fares-acfc8
30
+ D-1017,fares-api,staging,2026-08-24T07:20:00Z,fares-74154
31
+ D-1049,fares-api,production,2026-08-24T11:45:00Z,fares-dfbf3
32
+ D-1050,fares-api,production,2026-08-25T14:30:00Z,fares-d9d48
33
+ D-1051,fares-api,production,2026-08-26T09:45:00Z,fares-d2216
34
+ D-1016,fares-api,staging,2026-08-27T08:05:00Z,fares-cd056
35
+ D-1052,fares-api,production,2026-08-27T11:15:00Z,fares-ea45e
36
+ D-1019,journey-planner,production,2026-08-27T15:25:00Z,journ-f2257
37
+ D-1018,fares-api,staging,2026-08-28T08:05:00Z,fares-3a96f
38
+ D-1020,journey-planner,production,2026-08-28T12:25:00Z,journ-ed2e1
39
+ D-1053,fares-api,production,2026-08-28T13:00:00Z,fares-41f51
40
+ D-1022,fares-api,staging,2026-08-31T07:05:00Z,fares-7b401
41
+ D-1021,fares-api,staging,2026-09-01T07:20:00Z,fares-582c9
42
+ D-1054,fares-api,production,2026-09-01T11:45:00Z,fares-de5b2
43
+ D-1025,journey-planner,production,2026-09-01T16:50:00Z,journ-cd628
44
+ D-1055,fares-api,production,2026-09-02T10:15:00Z,fares-4d488
45
+ D-1024,journey-planner,production,2026-09-02T16:50:00Z,journ-ae1a8
46
+ D-1056,fares-api,production,2026-09-03T09:15:00Z,fares-e17e4
47
+ D-1023,fares-api,staging,2026-09-04T08:40:00Z,fares-a0fbb
48
+ D-1057,fares-api,production,2026-09-04T10:15:00Z,fares-76934
49
+ D-1027,fares-api,staging,2026-09-14T07:20:00Z,fares-ad1de
50
+ D-1058,fares-api,production,2026-09-14T12:00:00Z,fares-cd685
51
+ D-1059,fares-api,production,2026-09-15T12:45:00Z,fares-dda6c
52
+ D-1029,journey-planner,production,2026-09-15T12:50:00Z,journ-5093f
53
+ D-1060,fares-api,production,2026-09-16T09:15:00Z,fares-4a0b9
54
+ D-1028,fares-api,staging,2026-09-17T07:05:00Z,fares-efd43
55
+ D-1061,fares-api,production,2026-09-17T09:15:00Z,fares-432dd
56
+ D-1062,fares-api,production,2026-09-17T12:15:00Z,fares-9483f
57
+ D-1030,journey-planner,production,2026-09-17T13:50:00Z,journ-6d39d
58
+ D-1026,fares-api,staging,2026-09-18T07:40:00Z,fares-36b94
59
+ D-1063,fares-api,production,2026-09-18T09:30:00Z,fares-8e26f
60
+ D-1064,fares-api,production,2026-09-21T12:45:00Z,fares-6b062
61
+ D-1034,journey-planner,production,2026-09-21T16:10:00Z,journ-c239f
62
+ D-1065,fares-api,production,2026-09-22T12:30:00Z,fares-cb231
63
+ D-1031,fares-api,staging,2026-09-23T07:40:00Z,fares-15e99
64
+ D-1035,journey-planner,production,2026-09-23T13:50:00Z,journ-6de00
65
+ D-1032,fares-api,staging,2026-09-24T07:40:00Z,fares-6c9bc
66
+ D-1066,fares-api,production,2026-09-24T09:15:00Z,fares-176b3
67
+ D-1033,fares-api,staging,2026-09-25T07:40:00Z,fares-9b0d5
68
+ D-1067,fares-api,production,2026-09-25T09:30:00Z,fares-1726e
@@ -0,0 +1,7 @@
1
+ incident_id,service,opened_at,resolved_at,severity,caused_by_deploy,summary
2
+ INC-201,fares-api,2026-08-11T14:10:00Z,2026-08-11T17:10:00Z,SEV2,D-1041,Child fares calculated at adult rate after release
3
+ INC-202,fares-api,2026-08-19T11:25:00Z,2026-08-19T12:15:00Z,SEV2,D-1047,Fare lookups timing out after connection pool change
4
+ INC-205,fares-api,2026-08-19T11:31:00Z,2026-08-19T12:20:00Z,SEV2,D-1047,Duplicate of INC-202 raised by the service desk; closed as duplicate
5
+ INC-204,journey-planner,2026-09-01T17:20:00Z,2026-09-01T18:00:00Z,SEV3,D-1025,Platform numbers missing from journey results
6
+ INC-203,fares-api,2026-09-02T13:10:00Z,2026-09-02T15:05:00Z,SEV2,,"Card payments failing: payment provider outage (third party), no change on our side"
7
+ INC-206,fares-api,2026-09-17T10:20:00Z,,SEV3,D-1061,Railcard discount codes rejected for some users; mitigation in progress
@@ -0,0 +1,46 @@
1
+ pr_id,service,author,first_commit_at,opened_at,merged_at,deploy_id
2
+ PR-501,fares-api,eng-06,2026-08-01T04:00:00Z,2026-08-01T08:00:00Z,2026-08-02T17:00:00Z,D-1036
3
+ PR-502,fares-api,eng-03,2026-08-01T10:00:00Z,2026-08-01T16:00:00Z,2026-08-03T23:00:00Z,D-1037
4
+ PR-503,fares-api,eng-02,2026-08-03T00:00:00Z,2026-08-03T02:00:00Z,2026-08-04T08:00:00Z,D-1037
5
+ PR-506,fares-api,eng-07,2026-08-01T12:00:00Z,2026-08-01T18:00:00Z,2026-08-05T03:00:00Z,D-1039
6
+ PR-505,fares-api,eng-04,2026-08-01T18:00:00Z,2026-08-01T19:00:00Z,2026-08-05T04:00:00Z,D-1039
7
+ PR-504,fares-api,eng-04,2026-08-03T07:15:00Z,2026-08-03T11:15:00Z,2026-08-05T06:15:00Z,D-1038
8
+ PR-508,fares-api,eng-04,2026-08-05T12:00:00Z,2026-08-05T16:00:00Z,2026-08-09T11:00:00Z,D-1040
9
+ PR-507,fares-api,eng-04,2026-08-05T20:00:00Z,2026-08-05T22:00:00Z,2026-08-10T10:00:00Z,D-1040
10
+ PR-509,fares-api,eng-01,2026-08-06T14:30:00Z,2026-08-06T20:30:00Z,2026-08-10T23:30:00Z,D-1041
11
+ PR-510,fares-api,eng-06,2026-08-09T09:15:00Z,2026-08-09T16:15:00Z,2026-08-12T00:15:00Z,D-1042
12
+ PR-511,fares-api,eng-02,2026-08-08T10:15:00Z,2026-08-08T13:15:00Z,2026-08-12T10:15:00Z,D-1042
13
+ PR-514,fares-api,eng-05,2026-08-11T05:00:00Z,2026-08-11T08:00:00Z,2026-08-13T05:00:00Z,D-1044
14
+ PR-512,fares-api,eng-07,2026-08-12T09:15:00Z,2026-08-12T17:15:00Z,2026-08-13T08:15:00Z,D-1043
15
+ PR-513,fares-api,eng-06,2026-08-10T20:00:00Z,2026-08-11T04:00:00Z,2026-08-14T06:00:00Z,D-1044
16
+ PR-516,fares-api,eng-05,2026-08-12T22:45:00Z,2026-08-13T00:45:00Z,2026-08-16T13:45:00Z,D-1045
17
+ PR-517,fares-api,eng-07,2026-08-16T08:45:00Z,2026-08-16T15:45:00Z,2026-08-17T05:45:00Z,D-1046
18
+ PR-515,fares-api,eng-07,2026-08-17T02:45:00Z,2026-08-17T03:45:00Z,2026-08-17T08:45:00Z,D-1045
19
+ PR-518,fares-api,eng-01,2026-08-13T15:45:00Z,2026-08-13T19:45:00Z,2026-08-18T04:45:00Z,D-1046
20
+ PR-519,fares-api,eng-07,2026-08-17T11:00:00Z,2026-08-17T15:00:00Z,2026-08-19T04:00:00Z,D-1047
21
+ PR-520,fares-api,eng-07,2026-08-19T09:45:00Z,2026-08-19T16:45:00Z,2026-08-20T22:45:00Z,D-1048
22
+ PR-521,fares-api,eng-04,2026-08-20T17:45:00Z,2026-08-20T23:45:00Z,2026-08-21T04:45:00Z,D-1048
23
+ PR-523,fares-api,eng-05,2026-08-18T09:45:00Z,2026-08-18T12:45:00Z,2026-08-23T05:45:00Z,D-1049
24
+ PR-522,fares-api,eng-07,2026-08-19T04:45:00Z,2026-08-19T11:45:00Z,2026-08-23T16:45:00Z,D-1049
25
+ PR-524,fares-api,eng-07,2026-08-22T00:30:00Z,2026-08-22T01:30:00Z,2026-08-24T21:30:00Z,D-1050
26
+ PR-525,fares-api,eng-07,2026-08-24T05:45:00Z,2026-08-24T06:45:00Z,2026-08-25T08:45:00Z,D-1051
27
+ PR-526,fares-api,eng-05,2026-08-26T07:15:00Z,2026-08-26T15:15:00Z,2026-08-27T05:15:00Z,D-1052
28
+ PR-528,fares-api,eng-07,2026-08-24T17:00:00Z,2026-08-25T01:00:00Z,2026-08-27T15:00:00Z,D-1053
29
+ PR-527,fares-api,eng-03,2026-08-25T06:00:00Z,2026-08-25T07:00:00Z,2026-08-28T09:00:00Z,D-1053
30
+ PR-529,fares-api,eng-02,2026-08-28T03:45:00Z,2026-08-28T04:45:00Z,2026-08-31T06:45:00Z,D-1054
31
+ PR-530,fares-api,eng-05,2026-09-01T16:15:00Z,2026-09-01T18:15:00Z,2026-09-02T01:15:00Z,D-1055
32
+ PR-531,fares-api,eng-04,2026-09-02T08:15:00Z,2026-09-02T10:15:00Z,2026-09-02T15:15:00Z,D-1056
33
+ PR-532,fares-api,eng-06,2026-08-31T18:15:00Z,2026-08-31T22:15:00Z,2026-09-03T14:15:00Z,D-1057
34
+ PR-533,fares-api,eng-05,2026-09-11T00:00:00Z,2026-09-11T08:00:00Z,2026-09-13T21:00:00Z,D-1058
35
+ PR-534,fares-api,eng-05,2026-09-11T15:45:00Z,2026-09-11T20:45:00Z,2026-09-14T13:45:00Z,D-1059
36
+ PR-535,fares-api,eng-04,2026-09-12T17:15:00Z,2026-09-12T20:15:00Z,2026-09-15T06:15:00Z,D-1060
37
+ PR-538,fares-api,eng-07,2026-09-14T20:15:00Z,2026-09-14T22:15:00Z,2026-09-16T14:15:00Z,D-1062
38
+ PR-536,fares-api,eng-01,2026-09-14T08:15:00Z,2026-09-14T14:15:00Z,2026-09-16T20:15:00Z,D-1061
39
+ PR-537,fares-api,eng-02,2026-09-14T18:15:00Z,2026-09-14T20:15:00Z,2026-09-17T04:15:00Z,D-1062
40
+ PR-539,fares-api,eng-02,2026-09-13T20:30:00Z,2026-09-14T02:30:00Z,2026-09-17T10:30:00Z,D-1063
41
+ PR-540,fares-api,eng-02,2026-09-19T10:45:00Z,2026-09-19T18:45:00Z,2026-09-20T07:45:00Z,D-1064
42
+ PR-542,fares-api,eng-02,2026-09-17T00:30:00Z,2026-09-17T04:30:00Z,2026-09-21T14:30:00Z,D-1065
43
+ PR-541,fares-api,eng-02,2026-09-20T02:30:00Z,2026-09-20T10:30:00Z,2026-09-22T08:30:00Z,D-1065
44
+ PR-543,fares-api,eng-03,2026-09-20T22:15:00Z,2026-09-21T05:15:00Z,2026-09-23T19:15:00Z,D-1066
45
+ PR-544,fares-api,eng-03,2026-09-22T14:15:00Z,2026-09-22T20:15:00Z,2026-09-23T19:15:00Z,D-1066
46
+ PR-545,fares-api,eng-03,2026-09-22T07:30:00Z,2026-09-22T08:30:00Z,2026-09-24T09:30:00Z,D-1067
@@ -11,6 +11,33 @@
11
11
  "The three audiences (customer status page, internal stakeholders, exec) get genuinely different messages rather than one text reused",
12
12
  "Nothing is asserted beyond what the operator supplied"
13
13
  ]
14
+ },
15
+ {
16
+ "id": 2,
17
+ "held_out": "2026-10-18",
18
+ "prompt": "I'm the duty comms officer for Corrin Valley Transit and we're mid-incident with TallyCard top-ups. It's 14:40 now. The incident channel is in incident-channel.txt, the last status page post is in last-status-update.md and our comms rules are in comms-rules.md. Please draft what I need to send now.",
19
+ "assertions": [
20
+ "The customer post describes the impact accurately: card payments at ticket machines failing, app top-ups partly failing, cash at machines working, and does not say all top-ups are down or that the problem is fixed",
21
+ "No customer-facing message gives the database failover theory or the '30 minutes' estimate, and the CEO note says there is no ETA yet instead of inventing one",
22
+ "Tells riders that inspectors will accept people who could not top up, until the end of service today",
23
+ "Describes the 'charged twice' reports as temporary holds that should drop off within 3 to 5 working days, without promising refunds or saying riders were charged twice",
24
+ "Each message states when the next update will come, and no public message names the payment processor or uses the word 'breach'",
25
+ "The status page post is no more than 600 characters",
26
+ "Does not invent figures, times, causes or actions that are not in the channel log"
27
+ ]
28
+ },
29
+ {
30
+ "id": 3,
31
+ "held_out": "2026-10-18",
32
+ "prompt": "school office here. the online system parents use to pay for school lunches is down since this morning and parents are emailing us in a panic. the company that runs it just says they're 'working on it'. the head says children will still get lunch today and parents can pay later. can you write me a text message to parents (has to fit one SMS, 160 characters) and a slightly longer email?",
33
+ "assertions": [
34
+ "Delivers both a text message and an email ready to send, without stopping to ask questions first",
35
+ "The text message is 160 characters or fewer",
36
+ "Both say children will still get lunch today and parents can pay later",
37
+ "Neither gives a cause or promises when the system will be fixed",
38
+ "Tells parents when or how the school will update them next",
39
+ "Does not invent details that were not given, such as a payment deadline, refunds, a supplier name or a fix time"
40
+ ]
14
41
  }
15
42
  ]
16
43
  }
@@ -0,0 +1,6 @@
1
+ # Corrin Valley Transit: incident communications rules (extract)
2
+
3
+ - The status page tool accepts at most 600 characters per post, including spaces.
4
+ - Customer posts are written for riders, not engineers.
5
+ - Internal staff updates go to station staff and the contact centre by the staff messaging app. Keep them short enough to read on a phone.
6
+ - Exec notes go to the CEO's office by email.
@@ -0,0 +1,17 @@
1
+ #inc-0412-topup (Corrin Valley Transit, TallyCard top-ups) Thursday 22 October 2026
2
+
3
+ 13:05 [on-call eng] Paging: top-up error rate climbing on the payments gateway
4
+ 13:09 [incident lead] Declaring SEV1. I'm IC. Comms owner is the duty comms officer.
5
+ 13:14 [support lead] Phones are lit up. Customers saying ALL top-ups are down, app and machines
6
+ 13:18 [on-call eng] Dashboard: app top-ups 38% failing. Ticket machines: card payments 100% failing. Cash at machines is fine, I can see cash top-ups going through normally
7
+ 13:22 [incident lead] So not everything. Machines take cash fine, card at machines is dead, app is partial
8
+ 13:31 [duty comms] First status page post went out at 13:40, said next update 14:30
9
+ 13:52 [support lead] Several riders on social saying they've been "charged twice" for one top-up
10
+ 13:58 [payments eng] Checked: those are duplicate authorisation holds, not captured payments. We only capture once. Holds normally drop off in 3 to 5 working days depending on the rider's bank. We are NOT issuing refunds because nothing was taken
11
+ 14:06 [on-call eng] My guess is the database failover at 12:58 left the gateway pointing at the old primary. Maybe 30 min to fix if that's it
12
+ 14:08 [incident lead] Unconfirmed. Don't put the failover theory anywhere outside this channel until we know
13
+ 14:15 [ops control] Decision from Head of Operations: revenue inspectors are told to accept riders who could not top up. Valid until end of service today (last trains around 00:30). Inspectors briefed at 14:12
14
+ 14:21 [legal] Reminder: don't name our payment processor in anything public, and don't use the word "breach". No card data is involved as far as anyone knows
15
+ 14:29 [CEO's office] CEO needs an ETA for the board call at 15:00
16
+ 14:33 [incident lead] No ETA. We are testing the failover theory now
17
+ 14:38 [incident lead] Comms: we owe the status page an update (promised 14:30). Need status page post, internal update for station and contact-centre staff, and a note for the CEO. Next updates every 30 minutes
@@ -0,0 +1,5 @@
1
+ # Status page post, 13:40
2
+
3
+ **Investigating: problems topping up TallyCards**
4
+
5
+ Some customers are having trouble topping up their TallyCard. We're investigating and will post an update by 14:30.
@@ -11,6 +11,33 @@
11
11
  "Pages are symptom-based, actionable, and runbook-linked; anything not actionable is a ticket, not a page",
12
12
  "The plan makes a deliberate metrics-vs-logs-vs-traces choice rather than proposing everything"
13
13
  ]
14
+ },
15
+ {
16
+ "id": 2,
17
+ "held_out": "2026-10-18",
18
+ "prompt": "We need an observability plan for Larkspur Pharmacy's repeat prescriptions service. The service is described in service-overview.md, our current alerts and how often they fire are in current-alerts.csv, and the constraints are in constraints.md. Can you write the plan?",
19
+ "assertions": [
20
+ "Does not adopt the 99.999% target: explains that the dispensary system's 99.9% commitment, with no offline mode, caps what the refill journey can honestly promise, and sets a target with that in mind",
21
+ "Refuses patient ID and prescription ID as metric labels, giving both the cardinality cost and the health-data rule, and offers another way to trace individual complaints that keeps identifiers out of logs, labels and traces",
22
+ "Stops paging on causes that were rarely actioned (CPU, memory, pod restarts, any single 5xx) and makes pages depend on what patients experience",
23
+ "Handles the overnight low-traffic hours so that a handful of failed requests while branches are closed does not page anyone",
24
+ "Addresses the $1,500 cap against the current $2,100 and says what is cut or reduced to get there, with log ingestion as the main lever",
25
+ "Notes that the traffic figures conflict (40,000 a week in the overview, 40,000 a day in the constraints) and does not invent other traffic, alert or cost figures",
26
+ "Keeps the plan to about three pages"
27
+ ]
28
+ },
29
+ {
30
+ "id": 3,
31
+ "held_out": "2026-10-18",
32
+ "prompt": "I sell yarn online, about 30 orders a day, it's just me. My web guy wants to set up 'alerts' and showed me a list of 25 things he can monitor (server load, memory, disk, and so on). I just want to know if customers can't buy stuff. What should actually text me at night? Few bullet points please.",
33
+ "assertions": [
34
+ "Recommends only one or a few alerts that would text her at night, each about customers being unable to reach the shop, check out or pay",
35
+ "Says most of the 25 items should not text her, and can go to email or an occasional check instead",
36
+ "Allows for the low order volume, for example by not alerting on 'no orders in the last hour' overnight or on one failed payment",
37
+ "Says what she or the web guy should do when each night-time alert fires",
38
+ "Does not invent details of her shop platform, tools or traffic beyond what she said",
39
+ "Delivers a few plain-language bullet points without stopping to ask questions first"
40
+ ]
14
41
  }
15
42
  ]
16
43
  }
@@ -0,0 +1,9 @@
1
+ # Constraints for the observability plan
2
+
3
+ From the Head of Engineering and the Information Governance lead.
4
+
5
+ - **Budget**: our observability vendor bill is currently about $2,100 a month. Finance has capped it at $1,500 a month from January. The two biggest lines are log ingestion (about $1,300) and custom metrics (about $500); traces are about $300.
6
+ - **Health data**: patient identifiers, prescription identifiers and medication names are health data and must not be written to logs, metric labels or trace attributes. This is an Information Governance rule, not a preference.
7
+ - **On-call**: two engineers share a weekly rotation. They have asked for no more than two pages a week on average.
8
+ - **Volume for costing**: plan for about 40,000 refill requests a day.
9
+ - **Review**: we'll go through the plan in a 30-minute meeting, so keep it to about three pages.
@@ -0,0 +1,10 @@
1
+ alert,condition,routes_to,fired_last_30d,actioned_last_30d
2
+ RefillApiCpuHigh,CPU > 80% for 5m on any pod,page,140,2
3
+ RefillApiMemoryHigh,memory > 85% for 10m,page,61,0
4
+ RefillApi5xx,any 5xx in 1m,page,212,9
5
+ DmsLatencyHigh,DMS p99 > 2s for 5m,page,18,6
6
+ NotifierQueueDepth,SMS queue > 500 for 10m,ticket,4,3
7
+ DiskUsage,disk > 90% on any node,page,7,7
8
+ PodRestart,any pod restart,page,95,1
9
+ CertExpiry,TLS cert expires in < 14 days,ticket,1,1
10
+ SyntheticRefillCheck,synthetic refill request fails 3 times in a row,email,0,0
@@ -0,0 +1,27 @@
1
+ # Repeat Prescriptions service: overview
2
+
3
+ Owner: Digital Pharmacy team, Larkspur Pharmacy (84 branches)
4
+
5
+ ## What it does
6
+
7
+ Patients request a repeat prescription in the app or on the website. The request goes to the patient's branch, where it is checked against the Dispensary Management System (DMS) and dispensed. When the order is ready, the patient gets an SMS saying it can be collected.
8
+
9
+ ## Journey and components
10
+
11
+ 1. **Request**: app/web front end calls the Refill API.
12
+ 2. **Check and queue**: Refill API looks up the patient's repeat list in the DMS and puts the order on the branch's dispensing queue.
13
+ 3. **Dispense**: branch staff work through the queue in the DMS.
14
+ 4. **Notify**: when staff mark the order ready, the Notifier sends an SMS through our SMS provider.
15
+
16
+ ## Dependencies
17
+
18
+ - **DMS** is run by an outside supplier. Their contract promises 99.9% monthly availability, and they report it monthly. The Refill API cannot take a request without it; there is no offline mode.
19
+ - **SMS provider**: messages are usually delivered within a minute; the provider gives delivery receipts.
20
+
21
+ ## Traffic
22
+
23
+ About 40,000 refill requests a week, almost all between 07:00 and 22:00. Branches are closed 22:00 to 07:00 and the app shows "requests will be processed in the morning", but requests can still be submitted overnight (typically 0 to 20 an hour).
24
+
25
+ ## What the product owner wants
26
+
27
+ "I want 99.999% availability on refills. And please add patient ID and prescription ID as labels on every metric so we can debug individual complaints."
@@ -12,6 +12,33 @@
12
12
  "Escalation names the path and the trigger for escalating, not just a team name",
13
13
  "Facts not supplied (dashboard links, SLO values) are marked missing rather than invented"
14
14
  ]
15
+ },
16
+ {
17
+ "id": 2,
18
+ "held_out": "2026-10-18",
19
+ "prompt": "I've just taken over TideFeed at Saltholm Harbour Authority and the previous engineer leaves on Friday. Can you write the runbook from service-notes.md, deploy.sh, handover-chat.txt and standing-order.md? Save it as runbook.md. The control room keeps a printed copy, so it has to fit on three pages.",
20
+ "assertions": [
21
+ "Rollback is done by redeploying the previous release tag with deploy.sh, which takes only a tag; it flags that the script has no --rollback option despite the notes",
22
+ "Warns that migration 0042 is forward-only, so the app cannot be rolled back to a version before 2.6.0 such as v2.5.4",
23
+ "The first action when the display data is more than 15 minutes old or missing is to tell pilots to use the printed tide tables, as the standing order requires, before any troubleshooting",
24
+ "Does not list the gauge hardware supplier as a working escalation route, and flags that the support contract lapsed in August",
25
+ "Leaves SLOs and dashboards as open gaps to be filled, rather than inventing targets or dashboard links",
26
+ "Does not invent commands, hostnames, phone numbers or contacts that are not in the files",
27
+ "The runbook is saved as runbook.md and fits on about three printed pages"
28
+ ]
29
+ },
30
+ {
31
+ "id": 3,
32
+ "held_out": "2026-10-18",
33
+ "prompt": "our community radio station's internet stream keeps dropping and the volunteers on the overnight shift have no idea what to do. the stream goes from the studio PC through an encoder box to our streaming host. the station manager says only phone her if it's been down more than 30 minutes. can you write a one-page 'what to do if the stream stops' sheet we can stick on the wall?",
34
+ "assertions": [
35
+ "Delivers a one-page sheet in plain language a non-technical volunteer can follow",
36
+ "Orders the checks from the simplest and most likely (is the studio PC playing, is the encoder box on and connected, is the internet up) before anything harder",
37
+ "Says to phone the station manager only after the stream has been down for more than 30 minutes",
38
+ "Does not invent phone numbers, passwords, equipment models or host settings; leaves clear blanks for the station to fill in",
39
+ "Tells volunteers how to confirm the stream is back and to note what happened for the manager",
40
+ "Delivers the sheet without stopping to ask questions first"
41
+ ]
15
42
  }
16
43
  ]
17
44
  }
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+ # deploy.sh: deploy a tagged release of TideFeed to tidefeed-app-01
3
+ # Usage: ./deploy.sh <release-tag> e.g. ./deploy.sh v2.6.1
4
+ set -euo pipefail
5
+
6
+ TAG="${1:?usage: ./deploy.sh <release-tag>}"
7
+ HOST="tidefeed-app-01"
8
+
9
+ echo "Deploying TideFeed ${TAG} to ${HOST}"
10
+ ssh "${HOST}" "cd /opt/tidefeed && git fetch --tags && git checkout ${TAG}"
11
+ ssh "${HOST}" "cd /opt/tidefeed && ./manage.py migrate"
12
+ ssh "${HOST}" "sudo systemctl restart gauge-collector tidefeed-api"
13
+ ssh "${HOST}" "curl -fsS http://localhost:8080/health"
14
+ echo "Done. Deployed ${TAG}."
@@ -0,0 +1,8 @@
1
+ [departing engineer] ok, last bits before I go on Friday
2
+ [departing engineer] current release is v2.6.1. v2.6.0 was the one with migration 0042. v2.5.4 was the last before it
3
+ [departing engineer] if a gauge stops reporting, first check the radio link light on the gauge cabinet panel in the control room. if it's red, it's the link not us
4
+ [departing engineer] if the collector hangs, `sudo systemctl restart gauge-collector` on tidefeed-app-01 sorts it 9 times out of 10
5
+ [departing engineer] oh, and the Meridian support contract ran out in August. procurement are "looking at it". so there's nobody to call about gauge hardware right now
6
+ [departing engineer] we never wrote down SLOs or set up proper dashboards. there's the /health endpoint and that's it
7
+ [new owner] what about the --rollback thing in the notes?
8
+ [departing engineer] honestly not sure it still works, I always just redeployed the old tag
@@ -0,0 +1,26 @@
1
+ # TideFeed: service notes
2
+
3
+ Owner: Port Systems team, Saltholm Harbour Authority
4
+
5
+ ## What it does
6
+
7
+ TideFeed collects water-level readings from the four tide gauges in the harbour (North Pier, Inner Basin, Lock Gate, Outer Mark) every minute and publishes the current level and the next 6 hours of predicted levels to the pilots' berthing display and to harbour control.
8
+
9
+ ## Components
10
+
11
+ - **gauge-collector**: polls the four gauges over the harbour radio link. Runs on the VM `tidefeed-app-01`.
12
+ - **tidefeed-api**: serves levels to the berthing display. Same VM.
13
+ - **PostgreSQL** on `tidefeed-db-01`: stores readings.
14
+ - Both VMs sit in the harbour authority's own server room.
15
+
16
+ ## Deploying
17
+
18
+ Deploys use `deploy.sh` from the ops laptop. To roll back, run `./deploy.sh --rollback`.
19
+
20
+ Database migrations run automatically on deploy. Migration 0042 (October 2026) split the readings table by gauge and is forward-only: there is no down migration, and app versions before 2.6.0 do not work against the new schema.
21
+
22
+ ## Contacts
23
+
24
+ - Harbour IT service desk: ext. 4410, staffed 08:00 to 18:00.
25
+ - Out of hours: the Port Systems on-call engineer, via the harbour control room.
26
+ - Gauge hardware: Meridian Gauges support line (contract ref MG-2291).
@@ -0,0 +1,3 @@
1
+ # Harbour Master's Standing Order 14 (extract)
2
+
3
+ If the berthing display shows tide data that is more than 15 minutes old, or shows no data, harbour control must immediately tell all pilots on duty to use the printed tide tables and the manual tide boards, and log the time. This applies whatever the cause and before any technical investigation.