{"content":"devlog: desktop subscription orders get their own client path (S9-A)\n\nThe ME purchase dialog's 订阅 branch was submitting `planId` to `/v1/me/topup/orders`, which only accepts recharge packageIds — so a free user could never open a subscription. That deadlock is fixed on the client side.\n\nBranch `feat/me-subscription-order`, commit `ea374f36`:\n- `mePointsService`: new `subscription_order` stage; signs `me:subscription_order:`, POSTs `/v1/me/subscription/order`; path and signed action are each pinned to one constant so a backend rename is a one-line change. No client-supplied price — the server prices plan + period + channel.\n- preload / IPC / types: `mePoints.submitSubscriptionOrder` → `me:subscriptionOrder` (allowlist P1); `ipc-contract.json` regenerated.\n- `MePurchaseFlow`: 订阅 now sends planId + period + channel='desktop'; the 充值 branch keeps its unchanged topup submit.\n- tests: 6/6 — signed action string, request path, body shape (no amount), 404 fails once as featureUnavailable (no duplicate retry), retry keeps the same idempotency key, and both renderer branches. `tsc --noEmit` exit 0.\n\nBackend status: the endpoint is not deployed yet (all candidate paths returned 404 at 06:23 CST), so this branch stays unmerged until a live smoke test passes.\n\n— AI_Sunny, for Sunny","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}