From 3391340f9ed85c6b74484e8995ad6d15646d6bdd Mon Sep 17 00:00:00 2001 From: Rogee Date: Sat, 6 Jun 2026 12:20:32 +0800 Subject: [PATCH] docs: land active parity follow-up --- docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md | 8 +++++--- docs/parity/frontend_smoke_report.md | 2 +- docs/parity/placeholder_audit.md | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md b/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md index d523718d..bea83f8a 100644 --- a/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md +++ b/docs/CHATWOOT_PARITY_DEVELOPMENT_PLAN.md @@ -49,10 +49,10 @@ Hermes task landing checklist: ## Current Baseline -- Current tracking checkpoint: 2026-06-06 implementation checkpoint, prepared as `feat(profile): send confirmation invitations`. +- Current tracking checkpoint: 2026-06-06 documentation/tooling checkpoint, prepared as `docs: land active parity follow-up`. - Latest implementation checkpoint: this checkpoint, prepared as `feat(profile): send confirmation invitations`. -- Latest documentation/tooling checkpoint: `34fdb07 docs: land invitation parity tracker`; this document is the active follow-up plan and supersedes `.hermes/plans/*`. -- Worktree status at this implementation checkpoint: P3.2a invitation/confirmation mail parity is implemented. `ProfileService.ResendConfirmation` now generates confirmation or invitation tokens and calls a fakeable mailer; invited unconfirmed users with `inviter_id` receive workspace invitation copy with account/inviter context and an `Accept invitation` reset-password action; normal unconfirmed users receive confirmation copy; confirmed users remain a no-op. Agent creation now sends the same invitation mail for newly created invited users, and the app bootstrap wires the account agent handler plus environment-backed mailers. SSO/SAML/LDAP/OIDC mail variants remain excluded. Phase 6 placeholder audit remains in Review; B12 live API/browser/enterprise smoke still needs the full PostgreSQL/Redis/Meilisearch/GoChat/Vite/Chrome stack. Next active slice is Phase 2/3 drift audit, Phase 6 placeholder audit, B12 live smoke, or a fresh reference/smoke finding. +- Latest documentation/tooling checkpoint: this checkpoint, prepared as `docs: land active parity follow-up`; this document is the active follow-up plan and supersedes `.hermes/plans/*`. +- Worktree status at this documentation checkpoint: P3.2a invitation/confirmation mail parity is implemented and committed in `682d0ab feat(profile): send confirmation invitations`. A fresh Phase 6 placeholder audit still finds `chatwootParityStub` only in public webhook nil-handler guards, not in reused dashboard/widget/public/enterprise critical API paths. `scripts/parity_frontend_smoke.sh --check` passed and refreshed `docs/parity/frontend_smoke_report.md`; live API/browser/enterprise smoke still needs the full PostgreSQL/Redis/Meilisearch/GoChat/Vite/Chrome stack. The next active slice is Phase 2/3 drift audit, B12 live smoke, or a fresh reference/smoke finding. - `go test ./...` passes. - Route dump succeeds with `TOTAL: 905` after removing the non-Chatwoot `GET /platform/api/v1/users/:id/token` route and keeping the Chatwoot `GET /platform/api/v1/users/:id/login` route. - Route parity artifacts now exist under `docs/parity/` and are generated by `cmd/route_parity`. @@ -212,6 +212,7 @@ This ledger records the committed parity checkpoints that future slices should b | Commit | Scope | Verification summary | Follow-up state | | --- | --- | --- | --- | | `feat(profile): send confirmation invitations` | Advances P3.2a invitation/confirmation mail parity by matching Chatwoot `AgentBuilder`, Devise confirmation instructions view/specs, and profile resend controller behavior for non-SSO flows. GoChat now has a fakeable/environment SMTP confirmation mail boundary; profile resend persists confirmation or reset-password tokens and sends normal confirmation or workspace invitation payloads; confirmed resends remain no-op; newly created invited agents send invitation mail; `users.unconfirmed_email` is modeled for email-update branch routing; and bootstrap wires the account agent handler plus confirmation mailers. | `go test ./internal/handler/api/v1 -run 'ProfileHandlerSuite/TestResendConfirmation\|AgentHandlerSuite/TestCreateAgent' -count=1`; `go test ./internal/service ./internal/repository ./cmd/migrate ./internal/app -run 'Profile\|Agent\|App\|Migrate' -count=1`; `go test ./internal/handler/api/v1 ./internal/service ./internal/repository ./internal/router ./cmd/migrate ./internal/app -count=1`; full `go test ./...`; `git diff --check`. No route artifacts changed. | P3.2a moves to Review for current non-SSO reference evidence; continue Phase 2/3 drift audit, Phase 6 placeholder audit, B12 live smoke, or fresh reference/smoke drift. | +| `docs: land active parity follow-up` | Documentation/tooling checkpoint requested before continuing implementation. It records the committed `682d0ab feat(profile): send confirmation invitations` baseline, refreshes the Phase 6 placeholder and B12 readiness evidence, and keeps the next executable queue limited to Phase 2/3 drift audit, optional B12 live smoke, or fresh reference/smoke findings. | `bash -n scripts/parity_frontend_smoke.sh`; `scripts/parity_frontend_smoke.sh --check`; `rg -n "TODO\|placeholder\|chatwootParityStub\|stub\|not implemented\|unsupported" internal/handler internal/service internal/router -g'*.go'`; `go run ./cmd/dump_routes`; `go run ./cmd/route_parity`; `git diff --check`. No route artifacts changed; route dump remains `TOTAL: 905`. | Continue Phase 2/3 drift audit first unless the full B12 live stack is available. Keep Phase 6 in Review and reopen only from fresh frontend-reachable placeholder evidence. | | `docs: land invitation parity tracker` | Documentation-only checkpoint requested before continuing implementation. It records the clean `2acd938 feat(account-users): align inviter id` baseline, promotes P3.2a invitation/confirmation mail parity to the top active slice, maps the inspected Chatwoot Devise/AgentBuilder references into an executable row, and keeps SSO/SAML/LDAP/OIDC mail variants excluded. | `git diff --check`. No Go code changed and no route artifacts changed. | Start `feat(profile): send confirmation invitations`, then continue Phase 2/3 drift audit, Phase 6 placeholder audit, or B12 live smoke from concrete reference/smoke evidence. | | `feat(account-users): align inviter id` | Advances P3.2 invitation/account-user parity by matching Chatwoot `account_users.inviter_id`, `AgentBuilder#create_account_user`, `app/views/api/v1/models/_user.json.jbuilder`, and enterprise `Audit::AccountUser`. GoChat now maps `model.AccountUser.InvitedBy` to the Chatwoot `inviter_id` column and JSON name, emits account-user lifecycle payloads with `inviter_id`, adds migration `000031` to copy existing `invited_by` values forward, and keeps account agent serializers free of inviter fields. | `go test ./internal/model -run AccountUserDefaultValues -count=1`; `go test ./internal/handler/api/v1 -run 'TestAgentHandlerSuite/TestCreateAgent' -count=1`; `go test ./internal/service ./internal/repository -run 'AccountUser\|Agent' -count=1`; `go test ./cmd/migrate ./internal/app -count=1`; full `go test ./...`; `git diff --check`. No route artifacts changed. | AccountUser inviter persistence moves to Review for current reference evidence; continue remaining P3.2 invitation mail/confirmation drift, B12 live smoke, or the next evidence-backed route/controller/serializer drift. | | `feat(profile): expose hmac identifier` | Advances P3.1 profile `_user` serializer parity by matching Chatwoot `app/views/api/v1/models/_user.json.jbuilder`, `UserAttributeHelpers#hmac_identifier`, `spec/models/user_spec.rb`, and reused frontend `scriptHelpers.js`. GoChat profile responses now omit `hmac_identifier` when `CHATWOOT_INBOX_HMAC_KEY` is not configured and include the SHA-256 HMAC of the user email keyed by that installation config when present. | `go test ./internal/handler/api/v1 -run 'ProfileHandlerSuite/TestGet' -count=1`; `go test ./internal/service -run Profile -count=1`; full `go test ./...`; `git diff --check`. No route artifacts changed. | Profile `_user` HMAC field moves to Review for current reference evidence; continue remaining P3.2 invitations drift, B12 live smoke, or the next evidence-backed route/controller/serializer drift. | @@ -2379,3 +2380,4 @@ Verification milestone gates: - 2026-06-06: P3.2 agent serializer-field checkpoint prepared as `feat(agents): align serializer fields`; audited Chatwoot `AgentsController` Jbuilder views and `app/views/api/v1/models/_agent.json.jbuilder`. Account agent list/create/show/update responses now remove local `invited_by` and `account_user_id` fields and keep only Chatwoot `_agent` fields plus enterprise `custom_role_id`, preserving account-user role, availability, auto-offline, and custom-role behavior behind the serializer. Focused agent handler/service/repository/router tests, escalated full `go test ./...`, and `git diff --check` passed; continue remaining P3.2 account users/invitations drift or B12 live smoke. - 2026-06-06: Documentation checkpoint prepared as `docs: land invitation parity tracker`; worktree was clean at `2acd938 feat(account-users): align inviter id`, and the active plan now makes P3.2a invitation/confirmation mail parity the first executable slice. The row records Chatwoot AgentBuilder/Devise confirmation references, current Go owner files, normal confirmation vs invited workspace invitation behavior, excluded SSO/SAML/LDAP/OIDC mail variants, and focused exit gates. Verification for this docs-only checkpoint: `git diff --check`; next slice is `feat(profile): send confirmation invitations`. - 2026-06-06: P3.2a invitation/confirmation mail checkpoint prepared as `feat(profile): send confirmation invitations`; audited Chatwoot `AgentBuilder`, Devise confirmation mail view/specs, and profile resend specs. GoChat now persists confirmation/reset tokens, sends fakeable Chatwoot-shaped confirmation or workspace invitation mail from profile resend, sends invitation mail for newly created invited agents, models `users.unconfirmed_email`, wires the account agent handler in bootstrap, and keeps SSO/SAML/LDAP/OIDC variants excluded. Focused profile/agent tests, combined handler/service/repository/router/migrate/app tests, full `go test ./...`, and `git diff --check` passed; continue Phase 2/3 drift audit, Phase 6 placeholder audit, or B12 live smoke. +- 2026-06-06: Documentation/tooling checkpoint prepared as `docs: land active parity follow-up`; records `682d0ab feat(profile): send confirmation invitations` as the latest implementation baseline, refreshes the B12 smoke readiness timestamp, reruns the placeholder audit classification, confirms route dump/parity commands still pass with `TOTAL: 905` and no route artifact changes, and leaves Phase 6 in Review with only webhook nil-handler fallback stubs. Verification for this docs checkpoint: `scripts/parity_frontend_smoke.sh --check`, placeholder `rg`, `go run ./cmd/dump_routes`, `go run ./cmd/route_parity`, and `git diff --check`; continue Phase 2/3 drift audit first unless the full live smoke stack is available. diff --git a/docs/parity/frontend_smoke_report.md b/docs/parity/frontend_smoke_report.md index a1b45a55..c138a05d 100644 --- a/docs/parity/frontend_smoke_report.md +++ b/docs/parity/frontend_smoke_report.md @@ -1,6 +1,6 @@ # Frontend Smoke Report -Updated: 2026-06-06T02:51:57Z +Updated: 2026-06-06T04:15:19Z ## Status diff --git a/docs/parity/placeholder_audit.md b/docs/parity/placeholder_audit.md index e8724571..6c1a9bc7 100644 --- a/docs/parity/placeholder_audit.md +++ b/docs/parity/placeholder_audit.md @@ -1,6 +1,6 @@ # Phase 6 Placeholder Audit -Updated: 2026-06-06T02:51:57Z +Updated: 2026-06-06T04:15:19Z ## Commands