@drawbridge/drawbridge-agents 0.1.47 → 0.1.49

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.
@@ -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 —
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.49",
4
4
  "description": "Shared agent-instruction content (rules, code style, conventions) for the drawbridge-* monorepo.",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {