@drawbridge/drawbridge-agents 0.1.47 → 0.1.50

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.
package/claude/CLAUDE.md CHANGED
@@ -14,6 +14,7 @@
14
14
  @../conventions/app-web-forms.md
15
15
  @../conventions/app-web-gates.md
16
16
  @../conventions/docs-linkage.md
17
+ @../conventions/humanized-copy.md
17
18
  @../conventions/superpowers-docs.md
18
19
  @../conventions/git-branching.md
19
20
  @../conventions/graphify.md
@@ -136,6 +136,16 @@ skill) so it stops living only in tribal memory.
136
136
  admin-negotiated actions values, so read the dry run). The legacy keys are copy-only until the
137
137
  overrides cleanup release, and sync (reader) deploys before stripe (writer) on any shape change.
138
138
  Detail: drawbridge-docs `reference/billing.md`.
139
+ - **Stripe response shapes follow drawbridge-stripe's `apiVersion` pin, not the Stripe docs
140
+ default** (stripe ↔ api ↔ sync ↔ webhooks). The shared client pins a preview version
141
+ (`drawbridge-stripe/index.js`, currently `2026-01-28.preview`), and pinned versions change
142
+ embedded-object shapes — e.g. a promotion code carries its coupon as a bare id under
143
+ `promotion.coupon`; there is no embedded `coupon` object. Reading the docs-default shape fails
144
+ SILENTLY (optional chaining just skips the branch): the promo entry validation shipped with its
145
+ currency and product-restriction refusals dead this way (Asana 1211453698575738). Before reading
146
+ a Stripe field a consumer hasn't read before, verify it against a real response at the pin
147
+ (`curl` with the `Stripe-Version` header); treat any pin bump as a shape-change release across
148
+ every consumer.
139
149
  - **No Stripe product backs actions (≥0.1.45).** Invoice items carry
140
150
  currency/quantity/unit_amount_decimal/tax_behavior/description directly; the account keeps exactly
141
151
  one product — the plan product behind `STRIPE_PRICE_*`. Never reintroduce a product-presence guard
@@ -314,6 +324,15 @@ skill) so it stops living only in tribal memory.
314
324
  in the tree. Keep the pins aligned.
315
325
  - Shared packages that wrap a stateful SDK (Sentry, redis, mongodb) must direct-dep it at an
316
326
  exact pin, never a loose peer range (see `sentry-sdk.md`).
327
+ - **A publish must rebuild `dist/` in the same command** — every published package needs a
328
+ `prepublishOnly` script (tsup + tests), because a bare `npm publish` ships whatever stale
329
+ `dist/` sits on disk with the current `package.json` version stamped on it: the version says
330
+ one thing, the code says another, and nothing errors anywhere. utils `0.0.100/0.0.101`
331
+ silently dropped the multipart upload exports this way, and utils `0.0.139` shipped the old
332
+ 2GB `maximumUploadBytes` under a version everyone believed carried 50MB (2026-09-04; `0.0.139`
333
+ is poisoned — never pin it). utils ≥0.0.140 has the guard; add it to any `@drawbridge/*`
334
+ package before its next publish (`shopify` flagged 2026-09-04). After ANY publish, verify the
335
+ tarball, not the git tree: `npm pack`/curl the tarball and grep `dist/` for the change.
317
336
  - `@drawbridge/components` `Video` (≥0.0.62) owns the whole pre-playback story; consumers must NOT
318
337
  re-add their own poster layer or mount gate. `poster` renders as an SSR placeholder (opt into
319
338
  `priority` for fetchpriority=high when it's the LCP element), `defer` gates only the player —
@@ -0,0 +1,25 @@
1
+ # Humanize every word a person will read
2
+
3
+ Any prose you write that a human will read as *product or communication* goes through the
4
+ `humanizer` skill before it ships or posts. No exceptions for length — a two-line Asana
5
+ comment counts.
6
+
7
+ Covers, at minimum:
8
+
9
+ - App/UI copy: labels, buttons, empty states, error and notice messages, tooltips, onboarding.
10
+ - Asana comments and task descriptions, ship handoffs, retest instructions.
11
+ - Docs and user stories, README prose, release notes.
12
+ - Emails, SMS bodies, notification text, outreach drafts (growth), article/content drafts.
13
+ - Anything else a customer, teammate, or prospect reads as writing.
14
+
15
+ Does NOT cover: code, commit messages, code comments, test names, log lines, schema
16
+ descriptions — engineer-facing text follows the code conventions instead.
17
+
18
+ Rules when running it:
19
+
20
+ - Run humanizer BEFORE posting/committing the copy, not after someone flags it.
21
+ - It must not change facts, numbers, steps, or expected results — if a pass makes concrete
22
+ instructions vaguer, keep the original wording for those parts.
23
+ - Leave markup intact (Asana mention tags, links, placeholders like `{name}`).
24
+ - If the humanizer skill is not available in your session, say so and flag the copy as
25
+ un-humanized — do not silently skip the pass.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drawbridge/drawbridge-agents",
3
- "version": "0.1.47",
3
+ "version": "0.1.50",
4
4
  "description": "Shared agent-instruction content (rules, code style, conventions) for the drawbridge-* monorepo.",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {