Repository navigation
Description
Blocked by sydevs/SahajCloud#695. Do not start integration until that issue's Phase 3 PR is merged to Cleared 2026-09-16. Phase 3 merged as sydevs/SahajCloud#801 and is deployed, so main.pnpm types:cms now pulls the user-submissions shape.
The joint release did not happen: Phase 3 shipped alone, ahead of this repo and of sydevs/WeMeditateWeb's sibling child. main still posts to the deleted endpoints (src/config/api/mutate.ts:138 and :288), so event registration and report-an-issue fail against the live CMS today. This is a repair, not a migration to schedule. The cutover is still hard: no shims.
Summary
The CMS is unifying every public intake on one user-submissions collection (sydevs/SahajCloud#695). Three widget call sites move to it (voting needs no widget change -- see below); the request/response envelopes are Payload's built-in ones, which #171 already prepared this client for (errors[].data.code).
Proposed changes
Migrate each call site to POST /api/user-submissions (Turnstile stays in the x-turnstile-token header, as already sent):
- Event registration (today
POST /api/events/{id}/register): body becomes{ type: 'registration', event, startingAt, senderEmail, submissionData: [name, locale, question answers…], subscribe? }. Still synchronous — eligibility refusals arrive as coded 404/409 aterrors[].data.code(not the old top-levelcode), and the success doc carriesuuid(replacesregistration.uuidin the old shape). The opt-in flag spawns the subscribe row server-side — no second call. - Report an issue (today
POST /api/user-messages, feat(report): migrate the issue-report form to POST /api/user-messages #187): becomes{ type: 'contact', senderEmail, submissionData: [subject, message, context…] }. No form reference — recipient falls back to the CMS contact address, as today. - Event proposals (today
POST /api/event-submissions): becomes{ type: 'proposal', event?, proposed, senderEmail, submissionData: [submitter name/note] }. - Confirm/deny votes -- no widget change. Voting stays on the CMS-hosted feedback page (email link -- signed-token page -- vote -- redirect back to the atlas); the widget keeps only its existing read of the redirect param (
usePostEventFeedback). The client-facing registrations update path is deleted CMS-side -- nothing here calls it, and nothing should start to.
Then pnpm types:cms against SahajCloud main: Registration / UserMessage / EventSubmission types disappear, UserSubmission gains the typed columns — fix what the compiler flags (RegistrationForm, ReportIssueForm, submission + feedback flows, store.ts types).
Acceptance criteria
- Registering from the widget returns the uuid synchronously; a full/ended event shows the correct refusal (code read from
errors[].data.code). - Registering with the mailing-list opt-in produces the linked subscribe row CMS-side with no extra widget call.
- Report-an-issue and event proposals land as
contact/proposalrows and screen/deliver as before. - The post-event feedback flow still works end-to-end (email link -- CMS feedback page -- atlas redirect renders the post-vote card) with no widget code change.
- No code references the removed endpoints or types;
pnpm lint && pnpm typecheck && pnpm test:runpass.
References
- Tracker: feat(api)!: unify public intakes on the form-submissions pipeline SahajCloud#695 (design + wire contract)
- feat(report): migrate the issue-report form to POST /api/user-messages #171 (error-envelope positions), feat(report): migrate the issue-report form to POST /api/user-messages #187 (report-issue on user-messages — the call being re-pointed), feat(turnstile): treat Turnstile as essential — gate registration, and stop degrading to mailto #184 (Turnstile handling)
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Hold Until
Projects
- StatusShow more project fieldsDone
Activity
sydevs-bot commentedon Sep 16, 2026
@Ardnived unblocked: every blocker is closed. Say
@sydevs-bot implementto start.🤖 sydevs dispatcher
Ardnived commentedon Sep 16, 2026
Unblocked — and the cutover has already landed without this repo.
sydevs/SahajCloud#695Phase 3 merged as#801and is deployed. Relabelledblocked→awaiting.This ticket's header says "Do not start integration until that issue's Phase 3 PR is merged to
main" and "this repo releases together with SahajCloud's Phase 3". The first condition is met. The second did not happen: Phase 3 shipped alone.What that means right now
Checked against production:
And
mainstill posts to both deleted surfaces:src/config/api/mutate.ts:138→POST /events/${eventId}/registersrc/config/api/mutate.ts:288→POST /user-messagesSo event registration and the report-issue form now fail against the live CMS, wherever the widget is embedded — including the host sites served by
auto.jsfromsahajatlas.com. This is no longer a migration to schedule; it is a repair.First step
pnpm types:cmsis now safe to run — it reads SahajCloud'smain, which carries theuser-submissionsshape. That was the thing this ticket was waiting on.Ardnived commentedon Sep 16, 2026
@sydevs implement
7 remaining items
Ardnived commentedon Sep 17, 2026
@sydevs-bot implement
docs(api): point the contact blocker at its upstream ticket
fix(changelog): point the supersede note downward
Ardnived commentedon Oct 24, 2026
Closing. Registration and report-an-issue moved to
/user-submissionsin #213 (report-an-issue finished via sydevs/SahajCloud#823 and #219). Voting needed no widget change.The two remaining items moved to #147, which is their only consumer:
type: 'proposal'sender#213 left out
Closes #195on purpose while those were open, which is why no PR is linked here.