Repository navigation
v0.0.1-rc2
Pre-release
Pre-release
Changelog
- 0c583d1ad4ec71176b70f7e002c2113946272f6f ClickHouse: consolidate 02/04/05 bootstrap + fix latent TTL bugs + 12mo telemetry retention (#407)
- 7f6c43496c472b625830caa9eb0ae0686e65c949 Connector → ClickHouse log pipeline + terminal-connector Sentry (#402)
- fb7371c6a60448990c5bbaaf3873d4e3dac80e44 Merge fix/zod44-partial-refinement: align CLI V2 consumers to snake_case
- d34675dba1cf0d940e6397daa2decdef7fceaa12 Merge pull request #328 from RevKeen/chore/remove-platform-billing-duplicates
- a92b7835abcd0d070192841b3ea0f8af02be5314 Merge pull request #348 from RevKeen/chore/rev-3739-renewal-fail-open-guard
- 11a89be9c1ec497765529b7e26c59adf90ec5e12 Merge pull request #368 from RevKeen/info/rev-3625-retire-revkeen_merchant_id-platform_merchant_id-env-vars-in
- db962fcc6ca7aa545b94b6a3cb112a738810185e Merge pull request #442 from RevKeen/feat/dd-payout-readthrough-gate
- d5539995200d3684b691b6639b7874aa51ed4016 Merge pull request #443 from RevKeen/feat/rev-3887a-payout-read-through
- df38d399fbc2f40f05c52418af1c1ce16e2fd1c5 Merge pull request #444 from RevKeen/feat/rev-3889a-bank-kms
- b4910e26b32963368acfdc830faeb00a07b1ae52 Merge pull request #445 from RevKeen/feat/dev-roundup-20260601
- 44a5403bc9243acbe7546d808a36bd1162297261 Merge pull request #446 from RevKeen/feat/sprint-close-dd-cleanup
- 12c17284e6058671099117f8c4de1e58a30cebc3 Merge pull request #447 from RevKeen/feat/dd-money-out-s0
- 66553df46d9841b998fd264bfac511f40df2c58f Merge pull request #448 from RevKeen/fix/ci-build-green-20260604
- 82ed3c515f3c7bc6db1b55639f7ea83ead974409 Merge pull request #450 from RevKeen/fix/zod44-partial-refinement
- 4142c8b8fab77a811e5f7c9f8f727e57f051b838 Merge pull request #453 from RevKeen/fix/installed-apps-invalid-date
- c8afb47915afd4a65d2ec6595248ac16f3cd5c7e Merge pull request #454 from RevKeen/fix/v2-integrations-snake-case
- 781950ea548b645105f45108dd1f6ae21cad6ab9 Merge pull request #455 from RevKeen/fix/rev-3739-eslint-scope-to-sub
- 7f9d8b2a46156bdad767cf244d5823b5f1d7036f Merge remote-tracking branch 'origin/development' into feat/dev-roundup-20260601
- 471f5f141548142468de7991861e880e658d52fe chore(billing): drop unused REV-XXXX placeholder in credential-vault comment
- 2914666dea951a0091fc80ee0b1860fe8a30e6f5 chore(cli): retire TypeScript CLI; Go CLI is the single CLI
- 43c7a0bf08125892fbb671f6c5e7f91c1c04687b chore(deps): major dependency upgrade sprint (8 groups; TS6 deferred → REV-3891)
- 69412411f8dbab338b0fd640fb50e38dd19bb1ec chore(dev-roundup): commit pending connector/observability/docs/payment-scoring work (#397)
- e9bf4403adaf85ff1db8cd6d1607f28de7c2b8a0 chore(grafana): remove alert rules whose metrics do not exist
- 86d800c6eb608ffb8e176657b7102d8fc057e44f chore(grafana): route staging alerts to dedicated #staging-alerts Slack channel (REV-3711)
- 0fc13087d519eda882c2d6e9d61e741ee8cc2d19 chore(lint): clear typecheck and lint warnings (#322)
- c915fc6650c6d176ad7d18b82f1ee53a94e8ed2d ci(ghcr): restrict Trivy image scan to vuln (fix flaky secret-scan timeout) (#398)
- 1550f20969d6ef438ef56d568d0f3009769341a2 ci(v2-api): enforce snake_case V2 response contract guard (REV-3857) (#413)
- e23ba28b6b2249d00f4967d4ceca3bcce97c1030 docs(checkout): add Cart Sessions concept page + webhook events catalogue (REV-3713) (#314)
- 8c8599b949da0525be584b01f7447c9f69c8853b docs(claude): condense Observability section, point to rules doc
- 303245e46bb0f2b4408c2c3a84a28b4b99bd8369 docs(dd): canonical Direct Debit merchant-onboarding spec (#429)
- 8bb0681a2a9be69efb993bf25c1685c029527e04 docs(dd): commit L&Z v4.1.3.19 contract surface (S0/D0.1, closes audit #8)
- a69331c5b84978ecc9fa221b67c2c8b87a096fc2 docs(rules): add two-representations rule (24) + foundation-ticket trigger in rule 23 (#338)
- 587155d88794837076a3ed271f1489f65f3a8bc0 docs(rules): add verification methodology rule (23) (#333)
- 90c594027bf9561dcf3ca654a8297f3132c3c734 draft: WG relay user_data → S3 bootstrap (Phase 3 Step 2) (#313)
- dfed35015d5677f0c0772bf00e8a4d2e67e42e63 feat(activation): KMS-encrypt bank-account secrets in RDS, off Infisical (REV-3889a)
- 4d933f92cf572cf647252c66f0d61cb01b377e31 feat(activation): retire MerchantVaultService + dedupe bank_accounts (REV-3889c/d)
- 6b1411a462716454e1a88f87c479f0f961fcc8b7 feat(agent): infrastructure hard gate + .claude deny list for destructive ops (#305)
- 581e98fab79187a48230b1f0d08759dd0d0e939e feat(billing): REV-3838 Phase 1 — propagate is_test_account through usage pipeline (#392)
- f78eb4a28d1b9e361389a18fd0bc69cac41681fc feat(billing): alert on critical settlement-reconciliation mismatches (#399)
- 72c0ea64e35f21423d9daf9c9a45ecceca08e00e feat(billing): platform subscription authority + manual cancel + restricted-state gate (REV-3467, REV-3717) (#321)
- 98887a60f0516b60b463766b85e88117b2a0da9e feat(billing): platform_fee + platform_fee_per_txn dual-emit factory at settlement (REV-3469) (#362)
- 91d7f9f9ea28b4968830cd3a5329ceb21c02777a feat(cart): REV-3511 Slice B — add-on toggle + discount code (#289)
- 6adb2dd2aba61b48baf63069f0d3a49e7e86af6b feat(cart): REV-3511 Slice C — cart → checkout-session conversion (#291)
- 669f7a6216937bfd7dd4cb0fe50c51326bf32ac1 feat(cart): REV-3511 Slice E — abandonment + expiration sweep (#294)
- 21fe3b5b24759f4a7b7a7795d9341fba5f7b4a88 feat(cart): REV-3755 — public cart surface + per-link cart config + dashboard toggle (Items 1, 3a, 4) (#360)
- 8867ab8c04f4f7245c198d94cb0a62ee66e49699 feat(cart): RevKeen Cart marketplace app — install flips cartDrawerEnabled (REV-3754) (#337)
- 345f22dd96c2e281753f3a66ac2f6b7c54a5582f feat(cart): enforce cartDrawerEnabled on /v2/cart-sessions/* (REV-3754 prep) (#332)
- 16414c10c6bbb3694710c169e336c2896ec6286b feat(cart): implement AddOnGroupRepository — close the REV-3511 stub (REV-3806) (#364)
- 0ed92752604f847cef7b79ad2a596c15f924b255 feat(cart): price discounts into totals + lift convert guard (REV-3842) (#396)
- 419d93086badfaf8f5b5d4b4d63ab81c1369bf4a feat(cart): public create-cart-from-link endpoint + success/cancel propagation (REV-3843) (#385)
- 9c85dee2af129bcedd5c2042d2190ba594a55803 feat(cart): resolve add-on items on read + price toggles into totals (REV-3837) (#372)
- 41fb8f6d0cc3d25146e3014b70f21e57a706a4fc feat(cart): seed add_ons_offered from a link's add-on groups (REV-3755 Item 2b) (#366)
- 04ff12634d9b74fd7b0178104f70678c2e2d92c9 feat(cart): validate payment-link addOnGroupIds ownership (REV-3806 Slice 2) (#365)
- c422f30c16ae3e9ea0f975d7012b8c1b1158d0c3 feat(checkout): /c/[cartSessionId] cart-first checkout — Slices A+B (REV-3512) (#369)
- 2b5835d11e415cff2a6af2a39008b2c9bd7896a9 feat(checkout): /l/ cart-first branching for cart-enabled links (REV-3512 D2) (#389)
- 128b4c4d52acfd0f96942181c8a4f2cd65c28c97 feat(checkout): Proceed → convert → /p/ handoff on /c/ (REV-3512 Slice D / D1) (#383)
- 8fe7fa14a33d8c9a002ff5658eb5273be6f88da8 feat(checkout): interactive cart-review mutations on /c/ (REV-3512 Slice C) (#379)
- 9683dcb3a30ca5457d0b62a597ab3ad6513c6a77 feat(checkout): per-merchant branding on /c/ (REV-3512 Slice E — finisher) (#390)
- 7b1f57b335e7d2e7143605d235530f2c7a6e6e2a feat(checkout-perf): REV-3668 Slice F0 — Sentry field-ready instrumentation (#297)
- 0866d3f95815d433ef7670674aae35a50f125cba feat(cli): add LICENSE + README to apps/cli
- 9990b8b5789e2fa8cc66aca517b601d6fed311c8 feat(clickhouse): payment-scoring pipeline provisioning (REV-2485/2486/2487)
- ee07ef202888c4d983ab2878a4a6ea0d75983554 feat(connector): diagnostic upload capture + storage
- 06e01ac752f403b2d0864bd0bdc8db08453c8f3f feat(dashboard): add-on-group multi-select in payment-link editor (REV-3755 Item 3b) (#367)
- 8a936493b47478a737314bf40ffb92ff9f4066bb feat(dashboard): collapse customer summary card on invoice detail (#346)
- 5f51247c1f99cf1b3c0f5d1f7aebfbbb016e9683 feat(dd): DD onboarding "Direct Debit details" form UI (REV-3873 pt.2) (#439)
- c48b085258cf08bd174eeb56d74cee118b63cd00 feat(dd): DD onboarding fields — persistence + contract (REV-3873 pt.1) (#438)
- cb6324ef443a48c86b5169c305e2fe3658d84349 feat(dd): activate Direct Debit when its Jira ticket is approved (REV-3876) (#441)
- 21b072bbff11d7e14ea40865fea2f26a99c1e044 feat(dd): add L&Z SuspendCustomer SOAP method (REV-3087) (#401)
- 97e82cadd6d2f7c2bf85d82051b7a1e83d0f3dad feat(dd): add L&Z money-out read-only query methods (S0/D0.3)
- f81402ef847d4c00ee5e6413a98c768696e8e614 feat(dd): cross-tenant DD paid-date reconcile endpoint + worker (S5.2c / FR-B2, REV-2912)
- f9bd9079dde1d9b1408b750c9e4550002a3d5dde feat(dd): drop dead merchant_dd_config.payout_* columns (REV-3887b)
- 0c48942342294af7b8403f5796b41ee325e27cfb feat(dd): margin-by-rail reads the true payment rail (S4.3 / FR-I2)
- 7518e48769aaa4c5a3a25fb85408fd0d75430d37 feat(dd): markDdPayoutPaid helper — scheduled->paid transition (S5.2a / FR-B2)
- cc5e4f99cb66696be8ce7099585b0adc634620ea feat(dd): merchant_dd_config onboarding fields migration (REV-3872) (#435)
- 167385458ff14f3660148aa79ed61a2cb471d0a6 feat(dd): paid-date reconcile helper + SettlementId join-key (S5.2b / FR-B2,G1)
- 34516b90300d063a08dc68a811070626ac099799 feat(dd): promote DD advance-notice date to a canonical column (REV-2911 Gap 3) (#422)
- 74afe8822affa0c9cb70865959a6db3bdf3eaaf6 feat(dd): propagate mandate suspension to L&Z bureau (REV-3087 Step 2) (#404)
- 419e43545eaabec2d4e38075170db512c5d0d50d feat(dd): pure L&Z per-collection COGS calculator (S4.1 / FR-E)
- cfb82f0113ea70eb5f968fa2b72fc3b33835cdf6 feat(dd): raise DD onboarding Jira ticket on form completion (REV-3874) (#440)
- be334664dc9ac3434e0e165d00888e64b966c974 feat(dd): read payout through from activation settlement account (REV-3887a)
- e51d9543bb2cc60663ad8ea0fcf094f34293943b feat(dd): reference the DD Guarantee in the advance-notice SMS/WhatsApp/iMessage (REV-2911) (#419)
- 71fc3eae1cd753279915e57c782476399a49d38f feat(dd): reverse income on returned DD collection (S6 / FR-C2, REV-3899)
- b58dda286a4bdee6ec9a9d83822ef6f8554ad5f9 feat(dd): settlement webhook creates a SCHEDULED payout, not paid (S5.1 / FR-B2, REV-2912)
- a1846afa3cc1764fb843a5789adb913e37af796b feat(dd): wire the Direct Debit Guarantee into the advance-notice email (REV-2911) (#416)
- cfbf296a112ae34fb52b3e232ae56f16a2c36a20 feat(dd): write DD cost-of-goods to transaction_costs (S4.2 / FR-E3)
- a57c31616dd35489c8376612c2c37ebef94a4371 feat(dd): write Income at DD collection success (S2.1 / FR-A2)
- 00ae02d22f0ef62739dbab89e0738e7e7c31d1bd feat(dd,marketing): Direct Debit onboarding + Jira rail + marketing refresh
- b4b6b62c387cf021e617505192ba3958b6642798 feat(docs): Sentry instrumentation for docs app
- 8a590c19e4968cc753a2bf00589d369be434ce4a feat(engine-api): SETNX debounce for burst-start; pure helper + lock release on enqueue failure (#351)
- 98f105f327f5e3398dfd5731868bcd69dbd6d264 feat(engine-api): cart-sessions routes in OpenAPI spec + SDK + MCP (REV-3714) (#323)
- ba897f31a5a18242b94e09cbbb8ab9db4d485278 feat(grafana): add WireGuard mesh alerts + route severity=high to Linear (Phase 6) (#308)
- 22c975ad13fb56937eb05474a173956fa893302d feat(grafana): rewrite Slack templates to Sentry parity (REV-3719, Phase 1 of REV-3718)
- da12fe0a0430d9911aa1db9a981ebf1d9f67060c feat(infra): read-only Terraform state inspect workflow (Hetzner) (#304)
- 201f5114345823571390b0be4356508b8d68522a feat(integrations): adaptive PracticeHub polling — content hash + 4-tier cadence + sync-now (#334)
- 148b36f9e887dd92de43ff5a883fc62b0ff2b4d2 feat(integrations): persist 'ignored' state for unused product mappings (REV-3853 backend) (#408)
- f26a1109c4f15c42fa72059880bfc55a0fa5ebdc feat(marketing): swap Pay-by-Bank → Direct Debit rail across pricing site (REV-3877) (#432)
- 9bbe007bbbb938140337dd7e123e669a0bf99279 feat(observability): Code Intelligence delegation + DI container smoke test (REV-3722, REV-3733)
- 8903427fd62eadacac74d9cd6e36c4505e1aac43 feat(observability): Phase 1 PracticeHub integration alerts (3 rules) (#355)
- 6770e0de95e23bcc9d120188924e33b58f6d1898 feat(observability): add Linear lifecycle to Grafana alert intake (REV-3720)
- 5a9fa44beb19af6b93e3b696db88193324bc5243 feat(observability): billing-evidence telemetry on error path
- 91c4690abbbcbd302c5b0a3f30fa7b7467c359db feat(observability): route Sentry issues through critical-alert-intake to Linear (#430)
- 2890b474ba3298799a09eee895ae829157ce7a2c feat(payment-links): cart_enabled + cart_config columns (REV-3755 foundation) (#339)
- 73f0d9d4309fc33a7146ca13d809ab0fb993a12a feat(security-groups): allow WG relay → VPC endpoints SG on 443 (Phase 2b) (#310)
- e7f2c80ba4000ef40e966f3f042cbcbe268cd32d feat(staging-sgs): set wireguard_relay_sg_id for staging (Phase 4B Step 3) (#318)
- 9f8e1ede4ebcb97e6fc1eadf0c2109936bca8316 feat(wg-prod): attach SSM managed policy for Session Manager access (Phase 5a) (#326)
- 6ce44247a57110db63e95ec4a2e08ec62a86a6a4 feat(wg-prod): execute prod relay rebuild (Phase 5b -- destructive) (#327)
- e3e3371160d1249498c63c6ca0f2c308cd945418 feat(wg-prod): restore lifecycle protections (Phase 5c -- final) (#329)
- 017f7f1a5937b3cd9e0393a9fc6ad6b320d9db1c feat(wg-relay): add S3 bootstrap bucket + IAM (Phase 3 Step 1, additive only) (#312)
- 575f02af4138eff031e95515c0a9b1d4c6ea1459 feat(wg-staging): add IAM role + S3 + SM policies (Phase 4B Step 1) (#316)
- a83d36947a0316d4481bfb4ee61c4d2b42e1fabf feat(wg-staging): attach SSM managed policy for Session Manager access (#317)
- 6e4f9a3a3ddfba0d00f26638c3d9bea7b6876146 feat(wg-staging): execute rebuild via user_data replace (Phase 4B Step 5) (#320)
- 83ad229a88041ae4ed048e13dbf3a541fa67e665 feat(wg-staging): user_data to S3 bootstrap pattern (Phase 4B Step 4) (#319)
- 0af941d62815ff1b9f560bf60d7624cabfd548ba feat(workflow): align Grafana TF workflow with Hetzner safety model (#309)
- 29d13e9c0b4df363522d9352d17e0363c7d29b6c feat: RevKeen Inventory v1 — optional purchase cap on products (REV-3821..3824) (#363)
- 11b47f94b20ce3625d845a73d4e29b518406bffb fix(billing): defer trialing subscription charge to trial end (REV-3848, Option A) (#412)
- 0bb09c4bbacfe53f39260fd0209093597502613a fix(billing): refuse to charge when amount_minor is NULL/0/negative (REV-3739)
- 9ee91864feb92f457b265a2f0d31f41124d8ad3f fix(billing): rename Ultimate → Unlimited plan tier (REV-3662) (#299)
- aebdb4e512cc1728f189dd52197b984f7c961f36 fix(billing): scope REV-3739 lint guard to sub.amountMinor (unbreak development)
- 84ce3f66021557d9d7e667a9a477bcb9a1bf1e38 fix(billing): share credential-vault singleton across module copies
- 0511d860007b76a9db3378b6a96ef22694a67fc2 fix(billing-worker): expose dropped-invocation visibility + Loki logs (REV-3748) (#330)
- bd72fd409f3a5df81ef8a70090f271b42d1a4cb2 fix(cart): route abandonment sweep through SystemDatabaseClient (REV-3801) (#356)
- 66741fdbdc130a964da71139b918e5fea0951a36 fix(catalogue): persist product recurring billing periods (REV-3850) (#400)
- 0ef14b2ce0922f154775f0ef4efefef0d6a3adc4 fix(checkout): create subscriptions from server-authoritative billing_type (REV-3849) (#405)
- ddc80a5c63d6a7a91ab4135021792b26f6503a87 fix(checkout): remove portal redirect that loops via pay.revkeen.com proxy
- 0b778d6ae964f0c78d360471b98e9678dbe3dab8 fix(ci): green up development after dependency sprint
- 04c69025029e728a34cefadc3950e01f1d9e7ccb fix(cli): align V2 consumers to snake_case responses
- 95f69a3f5947f709365421b605cc12887d4d80d8 fix(cli-release): create plain vX.Y.Z tag for GoReleaser validation
- 5ad71aeaf3ae6936a94515e39a712cb7a66a80fb fix(cli-release): make the Go CLI release pipeline actually publishable
- b8b401244204ea5e7f80b5cc0fd62b7c356623de fix(clickhouse): 01 usage_events_kafka — drop DEFAULT on test-account cols (Code 36) (#425)
- 9cff674cbdc821e90692a1d48ab62abe2a13eb23 fix(clickhouse): table-qualify meter_id in rollup MVs (follow-up to #373) (#376)
- 276cea22abe64a695a3e23cbc0bcba685db4eb4b fix(clickhouse): unbreak bootstrap — backtick-in-heredoc + ALTER on Kafka engine (#380)
- 6c1c74adf9c995c45bb2c35ab0b8941dc4930962 fix(commerce): use IDatabaseClient DI token in cart-session + add-on + commerce-settings repos
- ea58675c90b0b85b5337cbc70805746a2987605e fix(comp-ai): parse secrets.env line-by-line, not via . sourcing (#295)
- 12a7e5a5164b53a443a91fe7ecece1a801df7b6e fix(comp-ai): restore portal command lost when entrypoint was overridden (#296)
- d1ff31c707d16b3a5d16aa69d3848dbfbdc6f6b2 fix(cron-worker): unbreak build — */ in JSDoc closed comment early (REV-3804) (#361)
- 91f951c51c2089f2a2d05fc4397be72bf4142a5b fix(dashboard): guard installed-apps date formatting against invalid dates
- 38ddba8e9f2c412a558c5b440fa3fad192a926b2 fix(dashboard): set ignored:false on new MappingRow constructions (unbreak dev) (#421)
- 33579f9e3c8bc61e61eeeb1a005c102f49c1c7c8 fix(dashboard): stop /apps/marketplace #310 crash — error boundary + drop framer-motion
- d2d59f1f0837a10c276f1cb73dae7998ffa3fdfe fix(dd): default DD bank-statement name to RevKeen; own name is paid DUN upgrade (#428)
- 9f1fe1c3cb32c5d03253fcaee7ca07ec502c1c34 fix(dd): qualify L&Z SOAPAction with /IManaged contract segment (#427)
- 84712576ad1226b93f3a2ee3f31880059546217b fix(dd): stop merchant_dd_config owning payout — read-only, sourced from activation (REV-3887)
- b7f7a4166858d170ce4cb7e71d2d7fb76384e855 fix(deploy-infra-scripts): ship setup-wireguard.sh and symlink legacy paths (#298)
- 0bd11b8af9a795e2bb67a83ec339197834081c12 fix(deps): unblock Next app builds
- 33e390fc56b7dcd53a9f73558b06496997340c8d fix(engine-api): enqueueBurstStart adds removeOnFail TTL so failures don't wedge wakeup (#350)
- 8c30bb56303fc1fc7443090eb5b8233f1f642de9 fix(engine-api): order entitlement gate after authContextMiddleware (REV-3717) (#331)
- f38152121c7cfc221f2ffd8010383f332d251913 fix(external-integrations-worker): didChange = imported>0 (drop unchanged subtraction) (#343)
- 525e47281be6d310734c0a69b5aeb306b078b11a fix(external-integrations-worker): scope didChange to invoices only (#340)
- 6f4a38da3e42d5f4edc0d709d4d021a5a7e25747 fix(grafana): drop lifecycle.ignore_changes on Slack contact points (REV-3719)
- 6c0b21b2fab31f4922ab7967099052becf6e9622 fix(grafana): silence staging cron-missed noise + gate wireguard_mesh to prod (REV-3726)
- bb74ab3c8fed98456196644d16743967f0b4e675 fix(integrations): RevKeen authoritative for product name/description (REV-3854) (#418)
- 7dbabb6f3ddf69344702db3e16478edfe0f7c0d5 fix(integrations): dashboard 'Ignore' action for unused product mappings (REV-3853 UI) (#417)
- df21c70293e500ef57393a732ba3a10bc7eae6c6 fix(integrations): flip xero + quickbooks_online accounting consumers to snake_case
- a6e591c74223c0a8a29e09c4b317997d4630b560 fix(integrations): uniform snake_case across internal /v2/integrations surface
- 47758c2fda433c20fa6ccff5a0603f0928823e2a fix(inventory): oversold/UX hardening + V2/SDK exposure (REV-3836) (#388)
- 13d22f0ac961650a771f2a31f4062fa4b3cf5681 fix(invoices): show recurring lines as a subscription on dashboard preview + email (REV-3851) (#414)
- 165f43b4f934a7d04dd7642ea8038b7a30a73a50 fix(observability): halve metric export frequency to cut Grafana DPM bill (#433)
- 4a084ed6eedbb397d598f5fe761d0ed437e99d44 fix(observability): surface silent sweep failures + idempotent cron registration (REV-3803, REV-3804) (#357)
- cf98b6bca273b3ca1db0e0b26bae55c799967bd9 fix(observability): use content-derived fingerprint for Grafana alert dedup
- a31b01a22c59c4b2da881a47da10c1d8aa950e27 fix(observability): warehouse partition functions (RDS-safe) + drop dashboard Sentry validation noise (#431)
- f6bd827bdc30ef6d28cccd0b9d47fe4dbc1128f4 fix(onboarding): zod 4.4 — don't .partial() a refined schema
- 7d9823fbcd6755690e9c3e4544156ced61063107 fix(platform-billing): restore merchants schema import (CI typecheck recovery)
- 626b1ec0af5c08a85c416c8005821c00298637a1 fix(practicehub): stop one unmapped product blocking the whole invoice import (REV-3852) (#406)
- aaf95653b8c4261bb775a7fef457eeea5f242e80 fix(test): give ts-jest a dedicated tsconfig so @revkeen/types paths resolve from src (#303)
- 5122ac966a1236e6542b17f0172c55c891223970 fix(test): import REV-3739 guard from leaf modules, not the billing barrel
- ff5c5154f1bfa117e0405da73b5c77667e74ce4b fix(ui): body overflow-x clip not hidden — Safari/macOS scroll (REV-2115) (#420)
- 6ddc5365cb1687085f2a1460dbcdd89b8372f7d7 fix(v2-api): snake_case response contract — products/businesses/meters/meter-prices (REV-3857 Phase 1) (#403)
- 11939d30d62336173bfb19b5066db4b977de6bdc fix(webhooks): stop infinite re-queue/resurrection of undeliverable webhook deliveries (#434)
- 42487d9b605e66c1d6eeab889f6e2f195803d716 fix(webhooks/dd): register PaymentRepository string token; surface DD sweep errors (#384)
- 178525180b78a4439094fe0bc956805133a72433 fix(wg-relay): force EC2 replacement on user_data change so comp-ai handshakes (#300)
- 5268c45ea5774d00c44f41fdd61d12b441ce15a0 fix(wg-relay): use non-indented heredoc so cloud-init runs user_data (#302)
- 162df5eb03c01168cf9381b36c7d063df37f16b1 fix(wg-relays): add lifecycle prevent_destroy + ignore_changes (post-outage Phase 1) (#307)
- 9bd0aa395032a1c14d3066673314cba8c17ce26a fix(workflow): repair broken address validator in state inspect workflow (#306)
- 8281bffcdb1ab661db83f7adac571ca7632fff1a fix: silence five Sentry cron/clickhouse error sources (#373)
- 9d346395d17c8110c8c40af964fcb3af6273239e fix: unblock ClickHouse deploy (03 Nullable/LowCardinality) + drift baseline (#426)
- f2b53cb1e1b3059d7627a7bc499d5c92b95cf538 perf(checkout): preconnect/preload NMI gateway + skeleton + double-mount guard (REV-3670) (#301)
- d8dcae4752f8e9a46c0555d4f0c05b8dd4f05da5 refactor(billing): retire REVKEEN_MERCHANT_ID + PLATFORM_MERCHANT_ID env vars (REV-3625)
- 4aa98ddf16ce2c7557ed4f1ce6f669c7ec5fc094 refactor(dd): extract BACS recovery routing into a pure, tested classifier (#394)
- 3dd45a8dc6836b87a60cf86a4ab0f9f2c47e77fd refactor(dd): extract verifyLzSignature into testable lz-signature module (#393)
- 6a58b72b1233b0821ed3c58cbe3adb162b3ec6ef refactor(platform-billing): replace parallel infra, delegate to canonical service-layer (REV-3675)
- eaf817189f53f301f5435f568de40faa95b9c4c0 refactor(v2-api): standardize merchant-facing responses to snake_case (REV-3857 Phase 2) (#410)
- a9e6a3eb4cf53e7bc23efb405db5579809f218af test(cart): cover REV-3755 Item 2a link-seeding + 422 + anti-tamper (#370)
- 714026579938812de09797f6fc27ee44c2daacff test(dd): add Tier-1 unit tests for DD calendar, rail resolution, BACS map (#391)
- 2fa33a9821680135c0c6b404d7232a222b04ab09 test(dd): cover computeCollectionTimeline (REV-2911) (#411)
- 3551abf7bb321883640980a9517c69ed77a7b573 test(dd): extract + unit-test L&Z webhook dedupe identity (S0/D0.4 pt1-2)
- 79c3b3d22662dbf675a2c3832090b73f8963283b test(dd): pin /IManaged SOAPAction for the 10 money-out query methods (S0/D0.2)
- 6eb391c268c025a16b9e5f785bb83973a6d80243 test(dd): route-level fail-closed + dedup gate tests for L&Z webhook (S0/D0.4 pt3)
- 436e4aebd71910f6d808d5ecb4bc0c22a08d5083 test(platform-billing): pin REV-3675 acceptance criteria + strengthen CLAUDE.md rule