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
@@ -0,0 +1,72 @@
1
+ # Vendor brief: Parlour Chat (live chat + chatbot for customer support)
2
+
3
+ Prepared by: Customer Operations, Brackenfield Outdoor Ltd
4
+ Date: 28 October 2026
5
+ Target go-live: 1 December 2026
6
+ Business owner (accountable for the risk): Mara Lindqvist-Obi, Head of Customer Operations
7
+ Security contact: Tom Ashdown, IT Security Lead
8
+ DPO: Hollis Granger (dpo@brackenfield.example)
9
+
10
+ ## What we want to do
11
+
12
+ Replace the contact form on brackenfield.example with Parlour Chat, a hosted live-chat
13
+ and chatbot product from Parlour Software Inc. (parlour.example). Customers will chat with
14
+ the bot first; it hands over to one of our 40 support agents when it can't answer.
15
+
16
+ The bot will look up a customer's orders so it can answer "where is my order?" without an
17
+ agent. To do that, Parlour will call our order API (orders-api.brackenfield.example) with
18
+ the customer's email address and get back order number, items, delivery address and
19
+ delivery status.
20
+
21
+ ## Data involved
22
+
23
+ - Customer name and email address (asked at chat start)
24
+ - Chat transcripts (free text; customers sometimes type phone numbers, addresses and,
25
+ occasionally, card numbers despite the banner telling them not to)
26
+ - Order history returned by our order API: order number, items, delivery address, status
27
+ - Agent names and agent login details (our staff)
28
+ - Browser and device information and IP address (collected by the chat widget)
29
+
30
+ Roughly 18,000 chats a month based on current contact-form volume. Customers are UK and
31
+ EU consumers; no children's accounts (we don't sell to under-18s).
32
+
33
+ ## Where the data goes
34
+
35
+ - Parlour hosts in AWS us-east-1 (United States). They offer an EU region but only on the
36
+ Enterprise plan, which we are not buying.
37
+ - Parlour uses two subprocessors: a cloud host (AWS) and a language-model provider for the
38
+ bot's answers (named in their subprocessor list as "LLM provider, US").
39
+ - Parlour's default transcript retention is 24 months. It can be set from 30 days to
40
+ "forever" in the admin console.
41
+
42
+ ## Contract and paperwork status
43
+
44
+ - Master services agreement: in legal review, not signed.
45
+ - Data processing agreement with EU Standard Contractual Clauses (module 2) and the UK
46
+ addendum: Parlour's template received, not yet reviewed by our DPO.
47
+ - Parlour SOC 2 Type II report: received, covering 1 July 2024 to 30 June 2025.
48
+ - Transfer risk assessment for the US transfer: not started.
49
+
50
+ ## Controls we plan to rely on
51
+
52
+ | # | Control | Status today | Who runs it |
53
+ |---|---------|--------------|-------------|
54
+ | C1 | Agent access to Parlour via our SSO (Okta) with MFA; no local Parlour passwords | Configured in Parlour test tenant; SSO screenshot from 21 Oct | IT Security |
55
+ | C2 | Quarterly access review of Parlour agent accounts | Not yet set up; we do quarterly reviews for Zendesk today (last one 30 Sep 2026, signed sheet on SharePoint) | Customer Ops team lead |
56
+ | C3 | Card-number redaction in transcripts (Parlour "PCI mask" feature) | Planned. Feature exists on Parlour's Business plan; we haven't enabled or tested it | Customer Ops |
57
+ | C4 | Transcript retention set to 90 days | Planned. Not yet configured | Customer Ops |
58
+ | C5 | Order API scoped token: read-only, orders endpoint only, rotated every 90 days | Token issued 22 Oct, scope confirmed in API gateway config (export attached to ticket SEC-2291) | Platform team |
59
+ | C6 | Vendor due diligence: SOC 2 report reviewed, security questionnaire completed | Questionnaire returned 15 Oct; SOC 2 report not yet reviewed by anyone | IT Security |
60
+ | C7 | Bot cannot see transcripts from other customers; each chat session isolated | Parlour says so in their questionnaire answer 4.7; we have not tested it | Parlour / IT Security |
61
+
62
+ ## What we are worried about
63
+
64
+ 1. A customer types a card number into chat and it sits in a US-hosted transcript for two
65
+ years.
66
+ 2. Someone gets the bot to read out another customer's order and delivery address by
67
+ giving it that customer's email address.
68
+ 3. The language-model provider uses our transcripts to train its models.
69
+ 4. Ex-agents keep access after they leave.
70
+ 5. Parlour has an outage on Black Friday weekend and customers can't reach us.
71
+
72
+ Mara needs to sign off the risk position before go-live. Please get us to that point.
@@ -0,0 +1,31 @@
1
+ # Northgate Grocers loyalty app: launch note
2
+
3
+ Launch: Monday 9 November 2026 (iOS and Android, UK only)
4
+ Risk owner for the launch: Priya Venkataraman, Director of Digital (on leave 2 to 20 November)
5
+ Product lead: Dev Ostrowski
6
+ Security lead: Ines Carvalho
7
+
8
+ ## What the app does
9
+
10
+ - Customers sign up with email and password and collect points by scanning the QR code on
11
+ their till receipt.
12
+ - When a customer is within 200 m of a Northgate store, the app shows a push notification
13
+ with that store's offers. This uses the phone's precise location. The current build asks
14
+ for "Allow all the time" location permission so it can notify in the background.
15
+ - Marketing added the Beacon analytics SDK (beacon-analytics.example) in October to track
16
+ funnels. It's initialised at app start, before the consent screen.
17
+
18
+ ## Data
19
+
20
+ Name, email, password hash, points balance, purchase history from scanned receipts,
21
+ precise device location, device ID, push token. About 120,000 sign-ups expected in the
22
+ first three months.
23
+
24
+ ## Paperwork
25
+
26
+ - Risk register: attached (risk-register.csv). Last full review was in June, before the
27
+ location feature and the analytics SDK were added; R2, R4 and R5 were refreshed on
28
+ 20 October.
29
+ - DPIA: none yet. Our DPO (Faye Mbatha) asked in September whether one was needed for the
30
+ location feature; nobody replied.
31
+ - Beacon analytics: no data processing agreement on file.
@@ -0,0 +1,6 @@
1
+ id,title,cause,event,consequence,owner,inherent_likelihood,inherent_impact,inherent_score,controls,residual_likelihood,residual_impact,residual_score,treatment,due_date,last_review,next_review
2
+ R1,Location data over-collection,App requests background location to trigger in-store offers,App collects precise location continuously including when user is not near a store,Regulatory complaint and loss of customer trust,TBC,4,4,16,Location permission prompt,2,3,6,reduce,2026-11-09,2026-06-02,2026-09-02
3
+ R2,Offer engine outage at launch,Offer engine is a new service with no load test,Offer engine fails under launch-day traffic,Customers see no offers; launch campaign wasted,Dev Ostrowski,3,3,9,Autoscaling on offer engine; launch-day on-call rota,2,3,6,reduce,2026-11-09,2026-10-20,2027-01-20
4
+ R3,Third-party analytics SDK sharing data,Marketing added the Beacon analytics SDK to the app,SDK sends device ID and location to the analytics vendor,Unlawful sharing of personal data without consent,,3,4,12,,1,2,2,accept,2026-11-09,2026-06-02,2026-09-02
5
+ R4,Loyalty points fraud,Points can be earned by scanning receipt QR codes,Users reuse or forge receipt QR codes to farm points,Financial loss from points redeemed for goods,Ines Carvalho,3,2,6,QR codes signed and single-use,1,2,2,reduce,2026-11-09,2026-10-20,2027-01-20
6
+ R5,Account takeover,Login is email and password only,Attacker logs in with leaked credentials and redeems points,Customer loses points; support load; complaints,Ines Carvalho,3,3,9,Rate limiting on login; breached-password check,2,3,6,reduce,2026-11-09,2026-10-20,2027-01-20
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "terraform-module",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Generate a Terraform module from a described need, with main.tf, variables.tf, outputs.tf and versions.tf, typed and validated variables, secure defaults (encryption on, public access off, least-privilege IAM), a merged tags variable, a basic usage example and a README with inputs and outputs tables. Use when the user says \"write a terraform module for\", \"create terraform for an S3 bucket / VPC / database\", \"turn this into a reusable module\", or \"scaffold infrastructure as code for\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -35,8 +35,8 @@
35
35
  "hcl"
36
36
  ],
37
37
  "model": {
38
- "tier": "standard",
39
- "rationale": "Structured generation against fixed module conventions and a secure-defaults checklist; the judgment is bounded to choosing defaults and validation rules for a described need."
38
+ "tier": "light",
39
+ "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 100% of checks in two tier trials, against standard's 92% and heavy's 83% and 100%, within 5 points of the best both times."
40
40
  },
41
41
  "permissions": {
42
42
  "network": [
@@ -28,6 +28,7 @@ Turns "the business wants X" into the document that aligns everyone on **what pr
28
28
  ## Useful references in this skill
29
29
 
30
30
  - [`templates/prd.md`](templates/prd.md) — the PRD skeleton with the solution-language test and MoSCoW table
31
+ - [`examples/approver-delay-not-slack.md`](examples/approver-delay-not-slack.md) — worked example: a brief that blames a missing Slack integration when the data says approvers sit on requests
31
32
 
32
33
  ## Quality bar
33
34
 
@@ -0,0 +1,142 @@
1
+ # Worked example: a "Slack approvals" brief whose data describes a different problem
2
+
3
+ Input → output oracle for `prd-draft`. Shows a solution-shaped brief rewritten as the problem
4
+ its own data describes, an unsupported goal replaced by one the data can measure, and a policy
5
+ constraint that the brief's "one click" pitch would have broken.
6
+
7
+ ## Input
8
+
9
+ > Write the PRD for Slack approvals so eng can start next sprint. Sales says it's the #1 ask.
10
+ > Two pages max. Everything I have is below.
11
+ >
12
+ > **brief.md (Head of Sales):**
13
+ > Problem: we don't have a Slack integration and competitors do. Customers ask for it
14
+ > constantly. Solution: Slack approvals, so managers approve expenses with one click right in
15
+ > Slack. Seamless. Must use Slack Block Kit interactive messages. Goal: cut churn by 15%. Has
16
+ > to ship before the Ledgerline Summit on 2027-03-09.
17
+ >
18
+ > **crm-summary.md:**
19
+ > - Feature requests tagged "slack": 14 requests from 9 accounts in the last 12 months, out of
20
+ > 1,340 paying accounts.
21
+ > - Requests tagged "approval reminders" or "approve from phone": 31 requests from 22 accounts.
22
+ >
23
+ > **product-analytics.md:**
24
+ > - Median time an expense waits at the approver step: 4.6 days. Median time in all other
25
+ > steps combined: 0.8 days.
26
+ > - Of reimbursements paid late (more than 10 days after submission, the SLA in our customer
27
+ > contracts), 58% waited on an approver for more than 5 days.
28
+ > - Chat tool connected, by account: Slack 38%, Microsoft Teams 27%, none 35%.
29
+ > - Approvers who open the email notification approve a median of 1.1 days after it is sent.
30
+ >
31
+ > **policy.md (Finance and Security):**
32
+ > - Approving an expense over $2,500 requires the approver to be signed in with MFA.
33
+ > - Approvers cannot edit amounts. They can approve, reject with a reason, or return for changes.
34
+
35
+ ## Output
36
+
37
+ ```markdown
38
+ # PRD: Faster approver decisions on submitted expenses
39
+
40
+ **Status:** draft · **Owner:** Product Manager, Approvals · **Date:** 2026-11-05
41
+ **Binding constraint:** fixed deadline, ship before 2027-03-09 `[reported by Head of Sales]`
42
+
43
+ ## Problem
44
+
45
+ Employees wait for reimbursement mainly because expenses sit with their approver. The median
46
+ wait at the approver step is 4.6 days, against 0.8 days for every other step combined
47
+ `[data: product analytics]`. Of the reimbursements that miss the 10-day contractual SLA, 58%
48
+ waited on an approver for more than 5 days `[data: product analytics]`. Approvers who open the
49
+ notification email act in a median of 1.1 days `[data: product analytics]`, which suggests the
50
+ delay is in noticing and getting to the request rather than in deciding `[assumption]`.
51
+ Customers ask about this in several forms: 31 requests from 22 accounts for reminders or
52
+ approving from a phone, and 14 requests from 9 accounts for Slack `[data: CRM]`.
53
+
54
+ ## Users
55
+
56
+ **Primary:** a manager who approves their team's expenses, works mostly outside the expense
57
+ app, and gets to approvals in batches. Job-to-be-done: clear the pending requests without
58
+ setting time aside to log in.
59
+ **Secondary (explicitly deprioritized):** employees who submit expenses. They feel the delay
60
+ but cannot shorten it. Finance admins, who chase late approvals today, benefit indirectly.
61
+
62
+ ## Goals
63
+
64
+ | # | Goal | We'll know it worked when |
65
+ |---|---|---|
66
+ | G1 | Approvers decide sooner | Median approver-step time drops from 4.6 to ≤ 2.0 days within 90 days of GA `[target: assumption]` |
67
+ | G2 | Fewer reimbursements miss the contractual SLA | The share of reimbursements paid after 10 days falls by a third within 90 days of GA `[baseline needed]` |
68
+
69
+ Full measurement design (instrumentation, guardrails, decision rule): hand to `success-metrics`.
70
+
71
+ ## Requirements
72
+
73
+ | ID | Requirement (testable, solution-free) | MoSCoW | Maps to goal |
74
+ |---|---|---|---|
75
+ | R1 | An approver can approve, reject with a reason, or return for changes on an expense of $2,500 or less, from the notification itself, without signing in to the web app | M | G1 |
76
+ | R2 | For an expense over $2,500, the same notification takes the approver to a signed-in, MFA-verified screen to decide | M | G1 |
77
+ | R3 | The notification shows employee, amount, category, date and receipt thumbnail, enough to decide without opening the expense | M | G1 |
78
+ | R4 | An approver with any pending request older than 2 days gets one reminder per day, listing all of them | S | G1, G2 |
79
+ | R5 | The approver can act from at least one channel that reaches accounts with no chat tool connected | S | G2 |
80
+ | R6 | A decision made from a notification shows in the expense's audit history with time and channel | M | G1 |
81
+ | R7 | An approver can approve several pending requests in one action | C | G1 |
82
+
83
+ **Won't have (this version):**
84
+ - Editing amounts from a notification: policy forbids approvers editing amounts at all
85
+ - Decisions on expenses over $2,500 without MFA, however the notification is delivered
86
+
87
+ ## Non-goals (minimum 3 — the scope-creep firewall)
88
+
89
+ - **Submitting expenses from chat:** the delay is at approval, not submission. Revisit if
90
+ submission time becomes the bottleneck.
91
+ - **Every chat tool in v1:** Slack reaches 38% of accounts and Teams 27% `[data]`. Which
92
+ channels ship first is a design decision, made against those numbers and the deadline.
93
+ - **Finance-admin bulk overrides:** a different user with a different authorization surface.
94
+ - **Churn reduction as a v1 target:** nothing in the inputs links approval time to churn. The
95
+ brief's "−15% churn" is out until someone produces that link.
96
+
97
+ ## Quality targets
98
+
99
+ A decision taken from a notification shows in the web app within 10 seconds `[assumption]`.
100
+ MFA rule as in policy. Full treatment → `nfr-spec`.
101
+
102
+ ## Open questions
103
+
104
+ | Question | Owner | Needed by |
105
+ |---|---|---|
106
+ | Which channel(s) ship first given the 38% / 27% / 35% split and the 2027-03-09 date? | Eng lead + PM | 2026-11-19 |
107
+ | What is the current share of reimbursements paid after 10 days (G2 baseline)? | Data analyst | 2026-11-12 |
108
+ | Is there any evidence linking approval delay to churn? | Head of Sales | 2026-11-26 |
109
+ | Can a decision from a notification count as "signed in" for the audit trail Finance needs? | Security lead | 2026-11-19 |
110
+
111
+ ## Assumptions log
112
+
113
+ - [assumption] The delay is in noticing requests, not deciding them. Challenge by checking time-to-open versus time-to-decide by 2026-11-19.
114
+ - [assumption] The G1 target of ≤ 2.0 days. Challenge in requirements review.
115
+
116
+ ## Handoffs
117
+
118
+ - Stories & slicing → `user-story-splitter`
119
+ - Quality targets → `nfr-spec`
120
+ - Measurement → `success-metrics`
121
+ - Technical approach (including the Block Kit question in the brief) → `design-doc`
122
+ ```
123
+
124
+ ## Why this is the oracle
125
+
126
+ - **The problem statement passes the alternative-solution test.** The brief's problem, "we
127
+ don't have a Slack integration", is the absence of a solution. The data describes approvers
128
+ sitting on requests. Daily reminders, email actions, Teams, mobile push and Slack could each
129
+ follow from the rewritten paragraph. That matters here because Slack alone reaches 38% of
130
+ accounts.
131
+ - **Every claim is tagged to its source and every goal can be measured.** "Customers ask
132
+ constantly" becomes 14 requests from 9 of 1,340 accounts, set beside the 31 requests from 22
133
+ accounts for reminders. The −15% churn goal has no support in the inputs, so it moves to the
134
+ non-goals with the reason, and G1 measures something the analytics already track.
135
+ - **Requirements are testable and free of implementation.** "Must use Block Kit" goes to
136
+ design. "One click, seamless" becomes R1, which a tester can pass or fail. R2 carries the
137
+ $2,500 MFA rule, which the brief's pitch would have broken.
138
+
139
+ A cheaper pass writes "Problem: competitors have Slack approvals and we don't", makes every
140
+ line in the brief a Must, keeps "cut churn 15%" as G1 and "use Block Kit" as R1, and specifies
141
+ one-click approval for every amount. That PRD ships a feature that 62% of accounts cannot
142
+ use, measures it against a number nothing supports, and fails a security review in sprint 4.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prd-draft",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Draft a Product Requirements Document from a feature idea or brief — evidence-backed problem statement with zero solution language, testable MoSCoW-prioritized requirements, mandatory non-goals, and a success line per goal. Use when the user needs a PRD, wants to capture business requirements for a feature, or asks to turn an idea, pitch, or brief into a requirements doc.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
@@ -12,5 +12,5 @@
12
12
  { "to": "design-doc", "when": "the what is agreed and the how is open", "purpose": "Design the system that satisfies these requirements.", "fallback": "If design-doc is absent, write the approach, the alternatives, and the trade-offs inline." }
13
13
  ],
14
14
  "tags": ["prd", "requirements", "product", "discovery", "moscow", "non-goals"],
15
- "model": { "tier": "standard", "rationale": "Synthesizes a structured requirements doc from a brief. The solution-language discipline needs care; bounded by the template. Escalate via ambiguous-input on contested scope." }
15
+ "model": { "tier": "heavy", "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 85% and 76% of checks in two tier trials, against standard's 68% and light's 68% and 68%, more than 5 points ahead both times; moved once its examples/ oracle shipped (RFC-0074)." }
16
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "user-journey-map",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Map a customer's end-to-end journey toward an outcome — 3–6 stages, each with actions, emotions, pains, and opportunities, plus a rendered Mermaid emotion arc and the ranked pain points design should attack first. Use when the user wants a journey map, customer experience map, \"map the user's path through onboarding\", touchpoint analysis, or \"where do users feel friction\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": { "npm": [], "pip": [] },
@@ -11,5 +11,5 @@
11
11
  { "to": "success-metrics", "when": "the fix needs a measure before it is built", "purpose": "Design the measurement for the journey step being changed.", "fallback": "If success-metrics is absent, state one baseline and one target per fixed step inline." }
12
12
  ],
13
13
  "tags": ["journey-map", "customer-experience", "ux", "touchpoints", "mermaid", "personas"],
14
- "model": { "tier": "standard", "rationale": "Structured synthesis into a fixed four-row stage model plus bounded ranking judgment. Escalate via ambiguous-input when the persona or outcome is contested or research inputs conflict." }
14
+ "model": { "tier": "heavy", "rationale": "Measured (RFC-0073): on its held-out evals the heavy tier met 83% and 83% of checks in two tier trials, against standard's 75% and light's 67% and 75%, more than 5 points ahead both times." }
15
15
  }
@@ -34,6 +34,34 @@
34
34
  "Does not invent a decision or gather sources",
35
35
  "Says in plain words what it will produce once it has the decision"
36
36
  ]
37
+ },
38
+ {
39
+ "id": "research-trial-conversion-drop",
40
+ "held_out": "2026-11-04",
41
+ "prompt": "Research why trial-to-paid dropped in September. We have to decide by the 15th whether the onboarding email rebuild goes ahead of the pricing page A/B test on next quarter's roadmap, so I need to know which explanation actually holds up. Everything we've got is in sources/ (six files).",
42
+ "assertions": [
43
+ "Starts with a research plan tied to the roadmap decision in the prompt (onboarding email rebuild versus pricing page A/B test), with sub-questions and what finding would change the decision, before any synthesis",
44
+ "The synthesis cites a source for each claim and counts the growth recap (s6) once, as a repeat of the s1 figures rather than independent confirmation",
45
+ "Sets out rival explanations including at least onboarding email deliverability, the 15 September pricing page change, the Vantor free tier and seasonality",
46
+ "Ranks by contradicting evidence: the drop starts with the 31 Aug and 7 Sep cohorts, before the 15 Sep pricing change and the 10 Sep Vantor launch, the 21 Sep cohort recovers while both are still in place, and the 2025 September cohorts show no dip",
47
+ "Puts the broken DKIM on the onboarding emails (2 to 19 September) as the least-contradicted explanation, and names the missing join between email opens and conversion as the linchpin or the remaining check",
48
+ "Gives a G7 verdict that lets the answer go forward (such as PROCEED or PROCEED WITH CONDITIONS) rather than sending the work back",
49
+ "Does not invent figures not in the sources, such as revenue lost, conversion rates for users who did or did not open the emails, or a count of trial users who tried Vantor"
50
+ ]
51
+ },
52
+ {
53
+ "id": "research-ticket-spike-confounded",
54
+ "held_out": "2026-11-04",
55
+ "prompt": "Research what's behind the jump in support tickets since early October. Ops need to know by Monday whether to roll back the app 4.2 navigation or put temp staff on billing queries, we can't do both. Sources are in sources/. Just give me the answer.",
56
+ "assertions": [
57
+ "The plan ties the work to the rollback-versus-temp-staff decision and says what finding would favour each option, before any synthesis",
58
+ "The synthesis cites a source for each claim and notes that October tickets carry no topic tags because tagging stopped on 28 September",
59
+ "Treats the agent poll (5 against 4) as opinion, not as evidence that separates the two explanations",
60
+ "The comparison shows that the billing migration (live 5 October) and the 4.2 release (6 October) landed in the same week, and that 'where is my invoice' tickets and the October reviews fit both, so neither is clearly less contradicted",
61
+ "The G7 gate does not let the answer go forward as decided: it returns a send-back verdict (such as REVISE) rather than PROCEED",
62
+ "Names a specific observation that would tell the two apart, such as re-tagging a sample of October tickets by topic or comparing ticket rates for web-only customers (billing change, no app change) against app users",
63
+ "Does not invent a ticket breakdown by topic, a count of duplicate authorisations, or a cause the sources do not support"
64
+ ]
37
65
  }
38
66
  ]
39
67
  }
@@ -0,0 +1,15 @@
1
+ # Support ticket volume — weekly, from the helpdesk
2
+
3
+ Exported 2026-10-27. Brand: Ploverly (online invoicing for tradespeople; web app plus iOS and Android apps).
4
+
5
+ | Week starting | Tickets created |
6
+ |---|---|
7
+ | 7 Sep | 1,228 |
8
+ | 14 Sep | 1,251 |
9
+ | 21 Sep | 1,236 |
10
+ | 28 Sep | 1,247 |
11
+ | 5 Oct | 1,734 |
12
+ | 12 Oct | 1,812 |
13
+ | 19 Oct | 1,763 |
14
+
15
+ Note from the helpdesk admin: on 28 September the contact form was rebuilt and the "topic" dropdown was removed by mistake, so automatic topic tagging has not run on any ticket created since then. October tickets have no topic tags. Tickets do record the channel they came in on (web form, in-app, email), but the in-app form is the same in the web app and the mobile apps.
@@ -0,0 +1,11 @@
1
+ # Ploverly mobile 4.2 — release notes
2
+
3
+ Released Tuesday 6 October 2026 to 100% of iOS and Android users (no staged rollout).
4
+
5
+ - New bottom navigation bar replaces the side menu
6
+ - "Invoices" and "Payments" merged into one "Money" tab
7
+ - "Download invoice PDF" moved from the invoice screen into the "..." menu
8
+ - Dark mode
9
+ - Bug fixes
10
+
11
+ The web app was not changed in this release.
@@ -0,0 +1,12 @@
1
+ # Billing platform migration — completion note
2
+
3
+ Author: Finance systems · 2026-10-07
4
+
5
+ The move from the old billing system to the new one finished over the weekend of 3–4 October 2026. From 5 October, all customers' subscription invoices (web and app customers alike) are generated by the new system.
6
+
7
+ Customer-visible changes:
8
+ - Invoice numbers changed format (PLV-000123 became 2026-10-000123)
9
+ - Subscription invoices are now emailed from billing@ploverly.example instead of accounts@ploverly.example
10
+ - A known issue: some customers saw a duplicate "pending" card authorisation on 5–6 October. The second authorisation drops off on its own within 7 days and was never charged. We do not yet know how many customers were affected.
11
+
12
+ Finance has not reviewed support tickets about billing since the migration.
@@ -0,0 +1,11 @@
1
+ # #support-team poll — 2026-10-20
2
+
3
+ Question from the support manager: "What's driving the extra tickets?" 9 agents answered.
4
+
5
+ - App navigation / can't find things in the new app — 5
6
+ - Billing questions (new invoice numbers, double charges, emails) — 4
7
+
8
+ Free-text comments:
9
+ - "Loads of 'where is my invoice'. Honestly could be either — some mean their subscription invoice, some mean the invoices they send to their own customers."
10
+ - "The double charge ones are angry but I'd say there were only a handful a day in the first week."
11
+ - "Mostly app stuff on my queue but I only do in-app chat."
@@ -0,0 +1,12 @@
1
+ # App store reviews summary — October 2026
2
+
3
+ Average rating (iOS and Android combined): 4.5 in September, 4.1 for reviews posted 6–25 October.
4
+
5
+ Sample of October 1–2 star reviews (verbatim):
6
+ - "Can't find where to download my invoices anymore. Why change what worked?"
7
+ - "New menu is confusing, took me ages to find payments."
8
+ - "Charged twice this month and no one tells me why!!"
9
+ - "Where are my invoices??"
10
+ - "Invoice numbers all changed, my accountant is confused."
11
+
12
+ Reviews mentioning the new navigation: not counted. Reviews mentioning charges or billing: not counted.
@@ -0,0 +1,29 @@
1
+ # Trial-to-paid conversion by weekly trial cohort
2
+
3
+ Exported from the product analytics workspace, 2026-10-29. Product: Tallyfold (self-serve bookkeeping, Starter plan).
4
+ Conversion = share of trials started that week that became paid within 14 days of trial start. Cohort week starts Monday.
5
+
6
+ ## 2026
7
+
8
+ | Cohort week | Trials started | Converted to paid | Conversion |
9
+ |---|---|---|---|
10
+ | 3 Aug | 1,142 | 214 | 18.7% |
11
+ | 10 Aug | 1,168 | 220 | 18.8% |
12
+ | 17 Aug | 1,131 | 207 | 18.3% |
13
+ | 24 Aug | 1,155 | 216 | 18.7% |
14
+ | 31 Aug | 1,149 | 171 | 14.9% |
15
+ | 7 Sep | 1,160 | 130 | 11.2% |
16
+ | 14 Sep | 1,137 | 132 | 11.6% |
17
+ | 21 Sep | 1,151 | 203 | 17.6% |
18
+ | 28 Sep | 1,146 | 207 | 18.1% |
19
+
20
+ ## 2025, same weeks (for comparison)
21
+
22
+ | Cohort week | Conversion |
23
+ |---|---|
24
+ | 1 Sep 2025 | 18.2% |
25
+ | 8 Sep 2025 | 18.9% |
26
+ | 15 Sep 2025 | 18.4% |
27
+ | 22 Sep 2025 | 18.6% |
28
+
29
+ Notes: trial sign-up flow and the 14-day trial length were unchanged across the period. No tracking changes were made to the conversion event.
@@ -0,0 +1,25 @@
1
+ # Lifecycle email: incident note — onboarding sequence deliverability
2
+
3
+ Author: Ines Carvalho (Lifecycle marketing) · 2026-09-22
4
+
5
+ ## What happened
6
+
7
+ On 2 September we moved lifecycle email to a new sending provider and a new sending subdomain (mail.tallyfold.example). The DKIM record for the new subdomain was published with a typo, so messages failed DKIM signing checks at the major mailbox providers.
8
+
9
+ The onboarding sequence (day 1 "Set up your books", day 3 "Connect your bank", day 7 "Your first VAT return") goes to every new trial user. It was the only sequence moved on 2 September; billing and password emails stayed on the old provider.
10
+
11
+ ## Impact on the onboarding sequence
12
+
13
+ | Period | Delivered (accepted by receiving server) | Open rate |
14
+ |---|---|---|
15
+ | 1–31 Aug (old provider) | 98.1% | 52% |
16
+ | 2–19 Sep (new provider, DKIM broken) | 97.4% | 6% |
17
+ | 20–30 Sep (DKIM fixed) | 98.0% | 49% |
18
+
19
+ "Delivered" stayed high because the receiving servers accepted the messages; seed tests on 18 September showed them landing in spam folders.
20
+
21
+ The DKIM record was corrected on the evening of 19 September.
22
+
23
+ ## Not known
24
+
25
+ We have not measured whether trial users who never opened the onboarding emails convert at a lower rate. That join between email events and billing has not been built.
@@ -0,0 +1,9 @@
1
+ # Website changelog — pricing page
2
+
3
+ | Date | Change | Owner |
4
+ |---|---|---|
5
+ | 2026-06-30 | Fixed broken FAQ anchor links | Web team |
6
+ | 2026-09-15 | Pricing page redesign went live: new layout, annual plan toggle on by default, comparison table moved below the fold. Starter price unchanged at £24/month (£19/month billed annually). | Web team / Growth |
7
+ | 2026-10-02 | Copy tweak on Starter card ("Everything a sole trader needs") | Growth |
8
+
9
+ The in-app upgrade screen that trial users see was not changed on 15 September; only the public pricing page.
@@ -0,0 +1,21 @@
1
+ # Calls with September trial users who did not convert
2
+
3
+ Interviewer: Femi Adebayo (Growth) · calls 5–9 October 2026 · 5 calls, 20 minutes each
4
+ Recruited from trial users whose trial started 7–18 September and who did not pay. 31 emailed, 5 agreed.
5
+
6
+ **P1 — sole trader, decorator**
7
+ "I signed up and then didn't really know where to start. I was waiting for some kind of guide." Did not recall receiving any emails from Tallyfold. Found them in spam during the call.
8
+
9
+ **P2 — small bakery, two staff**
10
+ Got stuck connecting the bank feed. "I assumed there'd be a walkthrough." No recollection of onboarding emails.
11
+
12
+ **P3 — freelance designer**
13
+ Said the price was too high compared with "Vantor, which is free now". Had looked at the pricing page before signing up.
14
+
15
+ **P4 — dog groomer**
16
+ "Never got the setup email, I don't think." Gave up after the first day.
17
+
18
+ **P5 — consultant**
19
+ Busy month, didn't have time to try it properly. Might come back in January.
20
+
21
+ Interviewer's note: small sample, self-selected. Three of five mention not getting or not finding the setup guidance.
@@ -0,0 +1,9 @@
1
+ # Competitor watch: Vantor free tier
2
+
3
+ Author: Growth team · 2026-09-12
4
+
5
+ Vantor announced a free tier for sole traders on their blog on 10 September 2026 (blog.vantor.example/free-for-sole-traders). Limits: one bank account, 20 invoices a month, no VAT returns.
6
+
7
+ Our Starter plan includes VAT returns, which the Vantor free tier does not.
8
+
9
+ We have no data yet on how many of our trial users also tried Vantor.
@@ -0,0 +1,7 @@
1
+ # #growth weekly recap — posted 2026-10-01 by the growth channel bot
2
+
3
+ Trial conversion took a hit in September: 14.9% for the 31 Aug cohort, 11.2% for 7 Sep and 11.6% for 14 Sep, against about 18.7% in August. The 21 Sep cohort is back at 17.6%.
4
+
5
+ Looks seasonal to me — September is always soft after the summer, people are busy with back-to-school. Probably nothing to worry about. — Ollie
6
+
7
+ (figures from the analytics workspace export)
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "research-plan",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Turn a vague research question into a research plan — the decision the research serves, the precise question and sub-questions, what finding would change the decision, a method per sub-question (desk research, interviews, data pull, experiment), source types with inclusion and exclusion criteria, ready-to-run search strings, a stopping rule for when you have enough, and the deliverable. Starts by asking what decision the research is for. Use when the user says \"I need to research X\", \"help me scope this research\", \"how should I investigate…\", \"what should I look into before deciding…\", or wants a research or discovery plan.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -40,7 +40,7 @@
40
40
  "search"
41
41
  ],
42
42
  "model": {
43
- "tier": "standard",
44
- "rationale": "Structured planning against a fixed shape (decision, sub-questions, methods, criteria, stopping rule); needs judgment to cut scope but no adversarial reasoning."
43
+ "tier": "light",
44
+ "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 79% and 79% of checks in two tier trials, against standard's 79% and heavy's 79% and 79%, within 5 points of the best both times."
45
45
  }
46
46
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "source-synthesis",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "Answer a question from a set of sources the user supplied — papers, reports, articles, interview notes, emails — saying only what the material supports, labelling anything that comes from elsewhere where it appears, counting a source that repeats another once, and giving a labelled estimate when the user needs a figure the sources don't settle. Written in the length and format the user asked for; a full cited literature review only when that is the ask. Use when the user hands over several sources and asks to \"synthesise these\", \"what do these papers say\", \"pull together what we know\", \"literature review\", or \"where do the sources agree and disagree\".",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "permissions": {"network": [], "commands": [], "files": "named-paths"},
38
38
  "model": {
39
- "tier": "standard",
40
- "rationale": "Bounded synthesis over supplied text. The hard part is keeping outside knowledge out and checking the sources' own sums, which a mid-tier model does when told to."
39
+ "tier": "light",
40
+ "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 83% and 78% of checks in two tier trials, against standard's 76% and heavy's 85% and 82%, within 5 points of the best both times."
41
41
  }
42
42
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-author",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Write a new portable Agent Skill (a SKILL.md folder) from a described task, for Claude Code, Codex, Copilot, Cursor, Kiro or Antigravity in any repo — a description that leads with the artifact and ends with trigger phrases, decisive steps, a quality bar, when and when-not sections naming near-miss siblings, anti-patterns, a non-interactive rule, reference files and scripts that work in every tool, acceptance evals and trigger queries, and the install path for each tool. Use when the user says \"turn this into a skill\", \"write a SKILL.md for…\", \"make an agent skill that…\", or wants a repeatable task packaged so their coding agent does it the same way every time.",
5
5
  "entrypoint": "SKILL.md",
6
6
  "deps": {
@@ -35,7 +35,7 @@
35
35
  "copilot"
36
36
  ],
37
37
  "model": {
38
- "tier": "standard",
39
- "rationale": "Structured authoring against a fixed anatomy. The judgment is in the description and sibling boundaries, which the interview anchors; skill-review is the adversarial pass."
38
+ "tier": "light",
39
+ "rationale": "Measured (RFC-0073): on its held-out evals the light tier met 100% and 93% of checks in two tier trials, against standard's 93% and heavy's 100% and 92%, within 5 points of the best both times."
40
40
  }
41
41
  }