docs: update Chatwoot parity alignment review
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# GoChat ↔ Chatwoot Fresh Alignment Review Plan
|
||||
|
||||
> Date: 2026-06-10
|
||||
> Scope: fresh implementation-difference review between GoChat and `reference/chatwoot`
|
||||
> Output: consolidated gap list and Chatwoot-alignment execution plan
|
||||
> Status: planned
|
||||
|
||||
## Summary
|
||||
|
||||
- Treat `/home/rogee/Projects/gochat/reference/chatwoot` as the source of truth for routes, controllers, models, serializers, jobs, services, frontend API clients, and side effects.
|
||||
- Use `/home/rogee/Projects/gochat/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md` as the current progress baseline, not as replacement evidence for fresh inspection.
|
||||
- Keep this document as a fresh review deliverable. Do not replace the authoritative parity tracker unless a later implementation task explicitly updates it.
|
||||
- Produce a decision-ready gap list covering what is already aligned, what still needs Chatwoot parity, priority, reference evidence, GoChat hotspot, and acceptance tests.
|
||||
|
||||
## Current Baseline To Reconfirm
|
||||
|
||||
- Route evidence currently indicates zero missing tracked critical routes in `/home/rogee/Projects/gochat/docs/parity/route_parity.md`.
|
||||
- GoChat route dump currently contains 973 lines in `/home/rogee/Projects/gochat/docs/parity/gochat_routes.txt`.
|
||||
- The current local quick check of `go test ./...` passes in this checkout.
|
||||
- Existing parity status has many slices in `Review`; these should not be promoted to `Done` without fresh reference inspection or live smoke evidence.
|
||||
|
||||
## Review Targets
|
||||
|
||||
| Area | What To Compare | Chatwoot Source | GoChat Hotspot |
|
||||
| --- | --- | --- | --- |
|
||||
| Route parity | Tracked critical routes, public routes, parameter-compatible paths, update methods | `reference/chatwoot/config/routes.rb` | `internal/router`, `docs/parity/gochat_routes.txt`, `docs/parity/route_parity.md` |
|
||||
| Core API behavior | Envelopes, status codes, pagination, filters, permissions, serializers | `reference/chatwoot/app/controllers`, Jbuilder views, frontend API clients | `internal/handler`, `internal/service`, serializers |
|
||||
| Conversation/message | Finder filters, assignment, status transitions, message windows, attachments, retry/delete behavior | `app/finders/conversation_finder.rb`, conversation/message controllers, message partials | `internal/service/conversation_service.go`, `internal/service/message_service.go`, API handlers |
|
||||
| CRM | Contacts, companies, merge/import/export, labels, notes, contact inboxes, custom attributes | contact/company controllers, `ContactMergeAction`, CRM services | contact/company handlers and services |
|
||||
| Inbox/channel | Inbox CRUD, working hours, members, agent bots, channel-specific config, reset secret, avatar | inbox/channel controllers, channel models | inbox/channel handlers, channel services, channel models |
|
||||
| Search | Meilisearch payloads, filters, article/contact/conversation/message result shapes, fallback rules | `app/services/search_service.rb`, search controllers, frontend search clients | `internal/search`, `internal/service/search_indexer*`, search handlers |
|
||||
| Widget/public APIs | Widget messages, public inbox flow, direct uploads, CSAT, help-center portal/category/article/search/sitemap | widget/public controllers and public Jbuilder views | widget/public handlers and services |
|
||||
| Side effects/jobs | Durable async jobs, retries, idempotency, delivery status, webhooks, contact import/export, analytics rollups | `app/jobs`, listeners, async services | `internal/worker`, `internal/dispatch`, job replay services |
|
||||
| Enterprise scope | SLA, Audit, CustomRole, AgentCapacity, Captain/Copilot, CSAT, InboxLimit, automation/macros, assignment policies | `enterprise/app/controllers`, `enterprise/app/services`, `enterprise/app/jobs` | enterprise-related handlers/services/models |
|
||||
| Placeholder/stubs | Frontend-reachable placeholder responses and uncompiled `.go.txt` files | reference controllers and frontend clients | `internal/handler`, `internal/service`, `internal/model`, `docs/parity/placeholder_audit.md` |
|
||||
|
||||
## Expected Gap Categories
|
||||
|
||||
| Priority | Gap Category | Current Read | Required Alignment |
|
||||
| --- | --- | --- | --- |
|
||||
| P0 | Reused frontend live smoke | API-level and unit coverage is extensive, but full Chatwoot frontend smoke remains the strongest unclosed gate. | Run a full PostgreSQL/Redis/Meilisearch/GoChat/Vite/Chrome smoke and map every failure to an owning parity slice. |
|
||||
| P0 | Phase 2/3 drift audit | Many controller/serializer slices are in `Review`. | Freshly inspect reference controllers/Jbuilder/frontend clients before marking any high-impact slice `Done`. |
|
||||
| P1 | Attachments | Message attachment serializers are aligned for metadata/push payloads, but durable binary storage and provider-specific send behavior are still explicit review risks. | Define ActiveStorage-equivalent storage behavior or document accepted compatibility boundary; validate provider send paths. |
|
||||
| P1 | Realtime events | Focused payload tests exist, but browser/WebSocket validation is still required. | Validate ActionCable-compatible event flow from message/conversation/contact mutations into reused frontend state updates. |
|
||||
| P1 | Help center public surface | Public portal/category/article/search/sitemap routes are implemented in `Review`. | Close only after route, payload, locale, redirect, markdown, tracking-pixel, sitemap, and frontend smoke validation. |
|
||||
| P1 | Search live gate | Meilisearch is mandatory for production; DB fallback is development-only. | Run or document the live Meilisearch gate, reindex scheduling, release-mode fallback rejection, and account-scoped filters. |
|
||||
| P2 | External integrations | Provider webhooks and outbound deliveries are fakeable/tested in many paths, but production provider behavior needs live/failure-mode confirmation. | Validate WhatsApp/Twilio/Telegram/LINE/Meta/TikTok/Twitter/Shopify ack, signature, retry, and status semantics. |
|
||||
| P2 | CSAT templates | Generic survey send and channel-template jobs exist in `Review`. | Confirm WhatsApp/Twilio template payloads, observable failures, and frontend-visible states against Chatwoot. |
|
||||
| P2 | Captain/Copilot providers | Durable jobs and disabled/failure fallbacks exist, provider-specific LLM depth is feature-gated. | Validate provider-enabled behavior or explicitly document deployment feature gates. |
|
||||
| P2 | Exact route polish | Some paths are parameter-compatible rather than exact. | Convert to exact compatibility where practical, or document why external path compatibility is preserved. |
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
1. Refresh factual baseline.
|
||||
- Re-run or inspect GoChat route dump tooling.
|
||||
- Compare current route evidence with `/home/rogee/Projects/gochat/docs/parity/route_parity.md`.
|
||||
- Record test baseline and any environment limitations.
|
||||
2. Inspect Chatwoot reference by feature family.
|
||||
- For each target area, inspect matching reference controllers, models, Jbuilder partials, services, jobs, listeners, and frontend API clients.
|
||||
- Prefer local `reference/chatwoot` files over older reports or assumptions.
|
||||
3. Inspect GoChat implementation hotspots.
|
||||
- Map each Chatwoot behavior to GoChat handlers, services, workers, models, serializers, and route registration.
|
||||
- Distinguish implemented parity, review-only parity, placeholder behavior, and intentionally excluded scope.
|
||||
4. Produce the fresh review document.
|
||||
- Use sections: Current Baseline, Already Aligned, Remaining Gaps, Prioritized Alignment Plan, Acceptance Tests, and Tracker Update Recommendations.
|
||||
- For each gap, include priority, Chatwoot reference, GoChat hotspot, current status, required alignment, acceptance evidence, and suggested owner slice.
|
||||
5. Feed results back into the active tracker only after review is accepted.
|
||||
- If new gaps are found, add named rows to `/home/rogee/Projects/gochat/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md` in a later implementation step.
|
||||
- Do not silently mark Review slices as Done without fresh evidence.
|
||||
|
||||
## Acceptance Tests And Evidence
|
||||
|
||||
- Documentation-only review changes must pass `git diff --check`.
|
||||
- Go code changes in later alignment work must include focused tests, `go test ./...`, and route artifact regeneration when routes change.
|
||||
- Route changes must regenerate:
|
||||
- `/home/rogee/Projects/gochat/docs/parity/gochat_routes.txt`
|
||||
- `/home/rogee/Projects/gochat/docs/parity/route_parity.md` when tracked route sets change
|
||||
- Optional live gates to record in the review:
|
||||
- Full reused Chatwoot frontend smoke with PostgreSQL, Redis, Meilisearch, GoChat, Vite, and Chrome.
|
||||
- Live Meilisearch integration test.
|
||||
- Provider webhook/delivery smoke in a configured integration environment.
|
||||
|
||||
## Fresh Review Output Template
|
||||
|
||||
| Priority | Feature / Gap | Chatwoot Reference | GoChat Hotspot | Current Status | Required Alignment | Acceptance Evidence | Owner Slice |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| P0 | Frontend smoke gate | frontend clients, controllers, routes | full stack | Not closed by unit tests | Run smoke and assign every failure | Smoke report with pass/fail mapping | B12 / M7 |
|
||||
| P0 | Serializer drift audit | controllers + Jbuilder | handlers + serializers | Review | Confirm envelopes/status/pagination/nulls | Focused fixture tests | Phase 2/3 |
|
||||
| P1 | Attachment storage/send | message/attachment models and jobs | message service, upload service, delivery worker | Review | Durable binary and provider send parity | Attachment upload/send tests | B3 / P5.10 |
|
||||
|
||||
## Assumptions
|
||||
|
||||
- This document is a landed development plan, not the final completed review report.
|
||||
- The final completed review may update or supersede the gap rows after deeper file-by-file inspection.
|
||||
- SSO, SAML, LDAP, and OIDC remain excluded from parity scope unless the user explicitly changes scope.
|
||||
- All other paid features already tracked in GoChat parity work remain in scope.
|
||||
- Historical Go environment blockers may be stale; current local test status should be revalidated during the actual review.
|
||||
|
||||
Reference in New Issue
Block a user