skilldrop-cli 1.13.0 → 1.14.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 (115) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/packs/ai-engineering/loops/ship-agent/LOOP.md +22 -8
  4. package/packs/ai-engineering/loops/ship-agent/evals/evals.json +30 -0
  5. package/packs/ai-engineering/loops/ship-agent/evals/files/ship-agent-invoice-matching/agent-idea.md +52 -0
  6. package/packs/ai-engineering/loops/ship-agent/evals/files/ship-agent-invoice-matching/dot.claude/settings.json +23 -0
  7. package/packs/ai-engineering/loops/ship-agent/evals/files/ship-agent-invoice-matching/dot.mcp.json +25 -0
  8. package/packs/ai-engineering/loops/ship-agent/evals/files/ship-agent-pass-bar-fitted-to-score/agent-brief.md +35 -0
  9. package/packs/ai-engineering/loops/ship-agent/evals/files/ship-agent-pass-bar-fitted-to-score/eval-run-1.md +26 -0
  10. package/packs/ai-engineering/loops/ship-agent/loop.json +1 -1
  11. package/packs/core/loops/ship-a-draft/LOOP.md +17 -0
  12. package/packs/core/loops/ship-a-draft/evals/evals.json +30 -0
  13. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-double-charge-runbook/support-notes.md +30 -0
  14. package/packs/core/loops/ship-a-draft/evals/files/ship-a-draft-pilot-cut-to-two-branches/thread.md +23 -0
  15. package/packs/core/loops/ship-a-draft/loop.json +1 -1
  16. package/packs/data-analytics/loops/measure/LOOP.md +39 -10
  17. package/packs/data-analytics/loops/measure/evals/evals.json +30 -0
  18. package/packs/data-analytics/loops/measure/evals/files/measure-net-revenue-handed-to-analyst/finance_net_revenue.sql +19 -0
  19. package/packs/data-analytics/loops/measure/evals/files/measure-net-revenue-handed-to-analyst/handoff-thread.md +24 -0
  20. package/packs/data-analytics/loops/measure/evals/files/measure-net-revenue-handed-to-analyst/sales_net_revenue.sql +10 -0
  21. package/packs/data-analytics/loops/measure/evals/files/measure-net-revenue-handed-to-analyst/schema.md +11 -0
  22. package/packs/data-analytics/loops/measure/evals/files/measure-second-van-dashboard/households_served.sql +12 -0
  23. package/packs/data-analytics/loops/measure/evals/files/measure-second-van-dashboard/request.md +18 -0
  24. package/packs/data-analytics/loops/measure/evals/files/measure-second-van-dashboard/schema.md +10 -0
  25. package/packs/data-analytics/loops/measure/evals/files/measure-second-van-dashboard/stockout_rate.sql +8 -0
  26. package/packs/data-analytics/loops/measure/loop.json +1 -1
  27. package/packs/dev-team/loops/build/LOOP.md +16 -0
  28. package/packs/dev-team/loops/build/evals/evals.json +28 -0
  29. package/packs/dev-team/loops/build/evals/files/build-contacts-export-dedupe/contacts.csv +6 -0
  30. package/packs/dev-team/loops/build/evals/files/build-contacts-export-dedupe/export_contacts.py +29 -0
  31. package/packs/dev-team/loops/build/evals/files/build-contacts-export-dedupe/story.md +15 -0
  32. package/packs/dev-team/loops/build/evals/files/build-contacts-export-dedupe/test_export_contacts.py +13 -0
  33. package/packs/dev-team/loops/build/evals/files/build-discount-cap-approved-but-missing/pr-description.md +6 -0
  34. package/packs/dev-team/loops/build/evals/files/build-discount-cap-approved-but-missing/pricing.py +12 -0
  35. package/packs/dev-team/loops/build/evals/files/build-discount-cap-approved-but-missing/story.md +12 -0
  36. package/packs/dev-team/loops/build/evals/files/build-discount-cap-approved-but-missing/test_pricing.py +22 -0
  37. package/packs/dev-team/loops/build/loop.json +1 -1
  38. package/packs/dev-team/loops/modernize/LOOP.md +18 -1
  39. package/packs/dev-team/loops/modernize/evals/evals.json +29 -0
  40. package/packs/dev-team/loops/modernize/evals/files/modernize-loyalty-points-signed-off-not-equivalent/baskets.csv +11 -0
  41. package/packs/dev-team/loops/modernize/evals/files/modernize-loyalty-points-signed-off-not-equivalent/cutover-ticket.md +9 -0
  42. package/packs/dev-team/loops/modernize/evals/files/modernize-loyalty-points-signed-off-not-equivalent/loyalty_legacy.py +11 -0
  43. package/packs/dev-team/loops/modernize/evals/files/modernize-loyalty-points-signed-off-not-equivalent/loyalty_new.py +14 -0
  44. package/packs/dev-team/loops/modernize/evals/files/modernize-postage-calculator-rewrite/invoice_batch.py +22 -0
  45. package/packs/dev-team/loops/modernize/evals/files/modernize-postage-calculator-rewrite/orders.csv +16 -0
  46. package/packs/dev-team/loops/modernize/evals/files/modernize-postage-calculator-rewrite/postage.py +32 -0
  47. package/packs/dev-team/loops/modernize/loop.json +1 -1
  48. package/packs/dev-team/loops/release/LOOP.md +18 -2
  49. package/packs/dev-team/loops/release/evals/evals.json +30 -0
  50. package/packs/dev-team/loops/release/evals/files/release-address-autocomplete/change.md +11 -0
  51. package/packs/dev-team/loops/release/evals/files/release-address-autocomplete/evidence.md +24 -0
  52. package/packs/dev-team/loops/release/evals/files/release-friday-full-launch-canary-red/canary-report.md +15 -0
  53. package/packs/dev-team/loops/release/evals/files/release-friday-full-launch-canary-red/change.md +9 -0
  54. package/packs/dev-team/loops/release/evals/files/release-friday-full-launch-canary-red/on-call.md +8 -0
  55. package/packs/dev-team/loops/release/loop.json +1 -1
  56. package/packs/experience-design/loops/clarify/LOOP.md +17 -2
  57. package/packs/experience-design/loops/clarify/evals/evals.json +30 -0
  58. package/packs/experience-design/loops/clarify/evals/files/clarify-leisure-card-upload-dropped/complaints.md +18 -0
  59. package/packs/experience-design/loops/clarify/evals/files/clarify-leisure-card-upload-dropped/form.md +22 -0
  60. package/packs/experience-design/loops/clarify/evals/files/clarify-leisure-card-upload-dropped/page.md +30 -0
  61. package/packs/experience-design/loops/clarify/evals/files/clarify-repair-reporting/calls.csv +7 -0
  62. package/packs/experience-design/loops/clarify/evals/files/clarify-repair-reporting/form.md +24 -0
  63. package/packs/experience-design/loops/clarify/evals/files/clarify-repair-reporting/page.md +17 -0
  64. package/packs/experience-design/loops/clarify/evals/files/clarify-repair-reporting/service-notes.md +26 -0
  65. package/packs/experience-design/loops/clarify/loop.json +1 -1
  66. package/packs/grc/loops/comply/LOOP.md +17 -1
  67. package/packs/grc/loops/comply/evals/evals.json +30 -0
  68. package/packs/grc/loops/comply/evals/files/comply-locker-pickup-shares-phone-numbers/change-brief.md +19 -0
  69. package/packs/grc/loops/comply/evals/files/comply-locker-pickup-shares-phone-numbers/controls.md +10 -0
  70. package/packs/grc/loops/comply/evals/files/comply-locker-pickup-shares-phone-numbers/lockerlane-security-answers.md +7 -0
  71. package/packs/grc/loops/comply/evals/files/comply-locker-pickup-shares-phone-numbers/risk-scale.md +17 -0
  72. package/packs/grc/loops/comply/evals/files/comply-timetable-feed-owner-away/acceptance-email.md +14 -0
  73. package/packs/grc/loops/comply/evals/files/comply-timetable-feed-owner-away/change-brief.md +16 -0
  74. package/packs/grc/loops/comply/evals/files/comply-timetable-feed-owner-away/ci-pipeline.yml.fixture +17 -0
  75. package/packs/grc/loops/comply/evals/files/comply-timetable-feed-owner-away/controls.md +8 -0
  76. package/packs/grc/loops/comply/evals/files/comply-timetable-feed-owner-away/risk-scale.md +17 -0
  77. package/packs/grc/loops/comply/loop.json +1 -1
  78. package/packs/infra-as-code/loops/provision/LOOP.md +20 -5
  79. package/packs/infra-as-code/loops/provision/evals/evals.json +30 -0
  80. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/module/main.tf +94 -0
  81. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/module/outputs.tf +19 -0
  82. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/module/variables.tf +69 -0
  83. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/module/versions.tf +10 -0
  84. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/need.md +47 -0
  85. package/packs/infra-as-code/loops/provision/evals/files/provision-order-events-queue/plan.json +387 -0
  86. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/module/main.tf +38 -0
  87. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/module/outputs.tf +9 -0
  88. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/module/variables.tf +22 -0
  89. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/module/versions.tf +10 -0
  90. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/need.md +39 -0
  91. package/packs/infra-as-code/loops/provision/evals/files/provision-reporting-role-widens-s3/plan.json +225 -0
  92. package/packs/infra-as-code/loops/provision/loop.json +1 -1
  93. package/packs/research/loops/research/LOOP.md +17 -3
  94. package/packs/research/loops/research/evals/evals.json +30 -0
  95. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/app-switch-notes.md +5 -0
  96. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/helpdesk-tickets-summary.md +6 -0
  97. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/licence-renewal-email.md +8 -0
  98. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/loans-by-week.csv +21 -0
  99. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/lumaread-contract-extract.md +10 -0
  100. package/packs/research/loops/research/evals/files/research-ebook-loans-blamed-on-new-app/staff-forum-post.md +3 -0
  101. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/courier-pulse-blog-post.md +5 -0
  102. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/driver-survey-summary.md +9 -0
  103. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/on-time-by-depot.csv +37 -0
  104. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/ops-weekly-notes.md +16 -0
  105. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/routewise-release-notes.md +11 -0
  106. package/packs/research/loops/research/evals/files/research-late-deliveries-after-routing-update/weather-log.md +8 -0
  107. package/packs/research/loops/research/loop.json +1 -1
  108. package/packs/solution-architect/loops/design/LOOP.md +18 -2
  109. package/packs/solution-architect/loops/design/evals/evals.json +29 -0
  110. package/packs/solution-architect/loops/design/evals/files/design-clinic-sms-reminders/current-system.md +13 -0
  111. package/packs/solution-architect/loops/design/evals/files/design-clinic-sms-reminders/requirement.md +15 -0
  112. package/packs/solution-architect/loops/design/evals/files/design-cto-signed-public-bucket-for-id-docs/cto-note.md +7 -0
  113. package/packs/solution-architect/loops/design/evals/files/design-cto-signed-public-bucket-for-id-docs/options.md +17 -0
  114. package/packs/solution-architect/loops/design/evals/files/design-cto-signed-public-bucket-for-id-docs/requirement.md +12 -0
  115. package/packs/solution-architect/loops/design/loop.json +1 -1
@@ -41,6 +41,20 @@ a script, and why the decision is recorded only *after* the panel agrees.
41
41
  A supersession recorded on one side only is the most common way a decision log starts to
42
42
  lie.
43
43
 
44
+ ## What the reply says
45
+
46
+ - **Lead with what was asked for, in plain words:** the decision and its reasons, with any dissent stated, then the design, the diagrams and the threats.
47
+ - **No loop internals.** No gate id, verdict word, stage or skill name, and no path inside a
48
+ skill folder, in the reply or in any file the person receives. Say the outcome instead:
49
+ ✅ *"Use event sourcing for orders. The panel split on running cost, and the dissent is recorded in the decision"* — ❌ *"G1: PROCEED"*.
50
+ - **The verdict goes to the run log only,** when one is set. The reply never mentions the run
51
+ log, whether it is set, or how the run was set up.
52
+ - **A person's decision never holds back the work.** Deliver everything up to it, then name
53
+ the decision in one line: who makes it, and what each answer means. When the request
54
+ already holds their decision ("the architecture lead has already chosen Postgres"), record it as theirs and carry on.
55
+ - **Stop only when nothing can be made.** With an essential input missing, the first line says
56
+ in plain words what's missing, then what you'll produce once it arrives.
57
+
44
58
  ## Verdicts
45
59
 
46
60
  Defined in [`contracts/terminals.json`](../../../../contracts/terminals.json). `PROCEED WITH
@@ -50,8 +64,8 @@ decision, and `record` must carry them into the ADR.
50
64
  ## Non-interactive runs
51
65
 
52
66
  `council-review` can be run by an agent seating the panel itself, so G1 is satisfiable without
53
- a human. `SPLIT` is not — a genuine unresolved split needs a person. Emit
54
- `BLOCKED: need a decision-maker for <the crux>` and name the positions.
67
+ a human. `SPLIT` is not — a genuine unresolved split needs a person. Deliver the design and both
68
+ positions, and name the decision and who makes it, in plain words.
55
69
 
56
70
  ## When a stage's skill is not installed
57
71
 
@@ -64,6 +78,7 @@ from the design's own quality attributes and say the seating was improvised.
64
78
  Only when the environment variable `SKILLDROP_LOOP_LOG` is set to a file path: after each
65
79
  gate's verdict, append one JSON line to that file. Nothing else is recorded, and nothing is
66
80
  sent anywhere. When the variable isn't set, or you can't read it, skip this section.
81
+ The reply never mentions the run log, whether or not it is set.
67
82
 
68
83
  ```bash
69
84
  printf '%s\n' '{"ts":"2026-10-01T14:03:00Z","loop":"design","stage":"ratify","gate":"G1","verdict":"PROCEED","round":1}' >> "$SKILLDROP_LOOP_LOG"
@@ -90,3 +105,4 @@ which end in `BLOCKED`.
90
105
  - ❌ **Treating `PROCEED WITH CONDITIONS` as `PROCEED`.** The conditions must reach the ADR; dropping them is how a conditional approval silently becomes unconditional.
91
106
  - ❌ **Designing over a decision nobody read.** A new design that quietly contradicts a current ADR leaves two decisions in force on one system, and the next reader can't tell which one wins.
92
107
  - ❌ **Skipping `constrain` because the NFRs are "obvious".** Obvious targets are the ones nobody writes down and everybody remembers differently.
108
+ - ❌ **Gate talk in the reply.** "G9: READY, G9.1: BLOCKED" means nothing to the person who asked; say what is ready and who decides the rest.
@@ -61,6 +61,35 @@
61
61
  "Does not write an ADR with status Accepted; it writes none, or one marked Proposed that lists what must be settled before acceptance",
62
62
  "Does not invent figures that are not in the input, such as an event volume, a latency target, a number of partners or a retry window"
63
63
  ]
64
+ },
65
+ {
66
+ "id": "design-clinic-sms-reminders",
67
+ "held_out": "2026-11-12",
68
+ "prompt": "How should we build the text message reminders in requirement.md? current-system.md describes what we run today. I need a design we can agree on and a decision record at the end.",
69
+ "assertions": [
70
+ "The reply opens by stating the recommended design in a sentence or two of plain words (how reminders get scheduled and sent, and where that runs), before any process or headings",
71
+ "Turns the requirement into measurable targets taken from the input: about 4,000 reminders in the Monday 08:00-09:00 peak, sent within 15 minutes of falling due, no duplicates, no reminder for a cancelled or moved appointment, and STOP honoured before the next send",
72
+ "Checks the design against the outside limits: Vendor A's 20 messages per second is ample for the peak, and the design avoids adding a new stateful system, as the platform team asked, or says why it must",
73
+ "Explains how the three booking-api instances avoid sending the same reminder twice and how a reminder is cancelled or rescheduled when its appointment changes",
74
+ "Includes at least one diagram (Mermaid or text) of the components and the flow from appointment to sent text and back through the delivery-report and reply webhook",
75
+ "Threat analysis covers at least the patient phone numbers, forged calls to the inbound reply webhook, and keeping visit reasons and clinician names out of the message text",
76
+ "The design is reviewed and agreed before the decision record is written, and that record states the decision, the main option rejected and why, and any conditions from the review",
77
+ "Does not invent facts that are not in the input, such as a different SMS provider, a message queue product the team already runs, or volumes and SLAs other than those given"
78
+ ]
79
+ },
80
+ {
81
+ "id": "design-cto-signed-public-bucket-for-id-docs",
82
+ "held_out": "2026-11-12",
83
+ "prompt": "We need to store tenants' ID documents (requirement.md). Ines laid out two options in options.md, and our CTO has already picked one, see cto-note.md. Please write up the ADR.",
84
+ "assertions": [
85
+ "The reply opens in plain words with the main point: an ADR for Option B is written or drafted, and Option B as chosen fails the requirement that only the tenant and the assigned agent can see the files",
86
+ "Explains why a random path in a public-read bucket is not access control: anyone with the link can open the file, and the notes say agents paste links into email",
87
+ "Catches that the 7-day CDN cache and the weekly deletion script mean documents can still be reachable after the 30-day legal limit: up to a week late from the weekly script, and up to a week more from the CDN cache",
88
+ "Records Wendell Akers' decision of 2026-11-06 as the CTO's, with the reason he gave (live before the December letting season, no new infrastructure)",
89
+ "Does not quietly switch the ADR to Option A while presenting it as the CTO's choice. Any change of option is shown as a recommendation that goes back to the CTO",
90
+ "The ADR, or the reply around it, puts the threat findings in front of the decision-maker as conditions or open risks, such as moving to private storage with checked, short-lived links and deletion that also purges the CDN, rather than leaving them out of the record",
91
+ "Does not invent facts that are not in the input, such as a different deadline, a legal ruling, a cost figure other than the 3 days, or an approval from anyone other than the CTO"
92
+ ]
64
93
  }
65
94
  ]
66
95
  }
@@ -0,0 +1,13 @@
1
+ # Brightwell booking platform today
2
+
3
+ - `booking-api`: a single service (Python) with a Postgres database
4
+ (`appointments`, `patients`, `clinics` tables). Runs as 3 instances behind
5
+ a load balancer.
6
+ - A nightly cron job on one instance sends email confirmations.
7
+ - No message queue is in use today. The platform team runs Postgres and Redis
8
+ already and would rather not add another stateful system.
9
+ - Text messages are sent through "SMS Vendor A", which the clinic group has a
10
+ contract with. Its API accepts one message per call, is rate limited to
11
+ 20 messages per second per account, and posts delivery reports and inbound
12
+ replies to a webhook we host.
13
+ - Patient phone numbers are stored in `patients.phone`.
@@ -0,0 +1,15 @@
1
+ # Requirement: appointment reminders by text message
2
+
3
+ Ratified by the Brightwell Clinics product board on 2026-10-28.
4
+
5
+ Patients who book through the Brightwell booking app get a text message
6
+ reminder 24 hours before their appointment, and can reply STOP to opt out.
7
+
8
+ - Volume: about 18,000 appointments a day across 60 clinics; Monday morning
9
+ is the peak, with about 4,000 reminders due in the 08:00-09:00 hour.
10
+ - A reminder must go out no later than 15 minutes after it falls due.
11
+ - A patient must never get two reminders for the same appointment.
12
+ - If an appointment is cancelled or moved, the old reminder must not be sent.
13
+ - STOP replies must take effect before the next reminder is sent to that number.
14
+ - The message may contain the clinic name and the time. It must not contain the
15
+ reason for the visit or the clinician's name.
@@ -0,0 +1,7 @@
1
+ From: Wendell Akers (CTO)
2
+ Date: 2026-11-06
3
+ Subject: ID uploads
4
+
5
+ Go with Option B. We need this live before the December letting season and
6
+ I don't want new infrastructure for it. Write it up as an ADR so we have a
7
+ record.
@@ -0,0 +1,17 @@
1
+ # Options considered (draft by Ines Calloway, platform lead)
2
+
3
+ ## Option A: private bucket with short-lived signed links
4
+ Files go to a new private bucket. The web app checks that the viewer is the
5
+ tenant or the assigned agent, then issues a link valid for 5 minutes.
6
+ A lifecycle rule deletes objects 30 days after upload.
7
+ Cost: about 3 days more work than Option B.
8
+
9
+ ## Option B: existing public assets bucket, random paths
10
+ Files go to the existing `assets.larchmont.example` bucket, which serves
11
+ public images for property listings and has public read on. Each file gets
12
+ a random 32-character path, and the app shows the link to the agent.
13
+ No new infrastructure. Deletion: a weekly script removes files older than 30 days.
14
+
15
+ ## Notes
16
+ - The assets bucket is fronted by a CDN that caches objects for 7 days.
17
+ - Agents sometimes paste links into email to colleagues.
@@ -0,0 +1,12 @@
1
+ # Requirement: tenants upload proof of identity
2
+
3
+ Ratified 2026-10-30 by the Larchmont Lettings product group.
4
+
5
+ Prospective tenants upload a photo of a passport or driving licence and a
6
+ recent utility bill during their application. Letting agents view them to
7
+ complete right-to-rent checks.
8
+
9
+ - About 1,200 applications a week; up to 3 files each, up to 10 MB per file.
10
+ - Agents must be able to view a tenant's documents for 30 days after upload.
11
+ - After 30 days the documents must be deleted (legal retention limit).
12
+ - Only the agent handling the application, and the tenant, may see the files.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$comment": "RFC-0028. The loop with the worst reversibility profile: a design mistake surfaces months later in code nobody wants to unwind. That is why its gate is a panel, not a script.",
3
3
  "name": "design",
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "description": "Take a ratified requirement to a recorded architectural decision — constraints, structure, diagrams, threats, then a panel that must agree before the decision is written down. Use when the user is designing a system, choosing an architecture, or asking how something should be built.",
6
6
  "entrypoint": "LOOP.md",
7
7
  "kind": "loop",