Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ The latest staged-release brief governs release order. #28–#30 remain unchange

### October 12 current production and closing-card correction

- Reports 2 and 3 were graded PASS. Current production is `4a8e93d5-771c-486e-91f6-335839f05be4`, main `b9eeb16`; rollback `6ddd1673-2e45-4cac-9d0d-28c71a9107fd`. Earlier release entries below are history. The retained synthetic English/Spanish retry cases verified acceptance, localized pickup notices, start/wait, status persistence through restart/refresh, and `/done` closure. Aryan intentionally deleted the cards afterward; do not recreate them. Accept disappears after the first processed acceptance and the database claim prevents another notice for that acceptance; no additional live double-click test is required by the latest review.
- **Phase 4b implemented locally, not deployed:** `fix/localized-closing-card` localizes the `/done` closing card using the case's stored `context.replyLanguage`, not the staff member's locale. All 14 acceptance-copy languages have a title, description, optional honest-review field and button labels; unknown/missing languages fall back to the identical existing English card. Regional tags fall back to the base language; the two supported Hindi scripts remain distinct.
- Five of seven new localization tests failed before implementation; all pass afterward. Full suite 668/668. Store URLs, feedback custom IDs, customer-only voting, no-ping mentions and send-before-close ordering are unchanged. This correction adds no provider call or new private capability. Human language/copy review and release smoke remain pending.
- Reports 2 and 3 were graded PASS. #41's verified production `4a8e93d5-771c-486e-91f6-335839f05be4` at main `b9eeb16` is now the immediate rollback target for #43. The older `6ddd1673` remains historical. The retained synthetic English/Spanish #41 cases verified acceptance, pickup notices, start/wait, restart/Refresh and `/done` closure; Aryan intentionally deleted the cards afterward. Do not recreate them. Tested button removal and the per-acceptance notice claim were accepted without another live double-click test.
- **#43 approved, merged and deployed; live smoke pending.** Aryan explicitly instructed shipping this independent correction before held #42, superseding the previous order/clean-interval hold for this release only. Reviewed head `3413f48` passed 668 tests again before merge and Node 20/24/Postgres CI. Current main did not move, so no source merge was necessary. Two-parent merge `dad250595472a77d3c982ec90a25a391ba4cefe4` has parents `b9eeb16` and `3413f48`; merged-main CI passed. Deployment `a6c7c577-4cc5-47b9-bf05-ba63444425e4`, created October 12 at 14:20:37 IST (08:50:37 UTC), is SUCCESS on that exact commit; `/health` is HTTP 200, `status=ok`, `staffHandoff=configured`. Settings and variables are unchanged. Only one deployment was dispatched.
- The shipped closing card uses stored `context.replyLanguage`, not staff locale, for title, description, optional honest-review field and buttons across the 14 acceptance languages. English fallback, Hindi script distinctions, existing custom IDs/URLs, ownership and send-before-close ordering remain. Approval is not live smoke evidence: the requested Spanish/Chinese handoff → `/done`, plus Spanish “Still need help” and staff-card update, await new synthetic posts. Native Discord controls did not respond to automation and no authenticated browser tab was available; copy-ready user instructions were provided. Do not mark the smoke PASS or invent either card text before REST/screenshots exist.
- #42 remains HELD for independent per-case grading. The existing fresh JSONs show unwanted-handoff flags 12 → 15 and fail-both 4 → 6. No new evaluation or tuning was performed. The comparison summary now contains all seven changed cases (nine differing run rows), both runs per case, 28 replies verified verbatim and the original judge problems. Escalating signals are explicitly unavailable: the original supervisor retained Timing/Review/progress logs, not `[Bot] Escalating` lines. Do not infer or fabricate those signals. All raw replies stay privately outside Git.
- #28 remains stopped while Aryan fixes the actual staff-channel audience. Local preparation `3688d99` is not pushed; rerun only the read-only preflight after Aryan explicitly says permissions are fixed, and report the outcome. Never push while the code differs from `private_staff_destination`; no role/permission change is authorized here. #29/#30 remain untouched.

**Remaining deploy order:** #42 after its fresh same-day main-versus-branch gate and review → closing-card fix after review → #28 after live read-only private-destination preflight/review → #29 → #30. One deploy at a time, 24 clean hours unless Aryan explicitly says go. No merge or deployment accompanies this local implementation.
**Remaining release holds:** finish #43's live smoke/report first; #42 stays held for grading. #28 still needs the successful private-destination preflight and review, then #29/#30 remain separate later releases. One deploy at a time; subsequent deployments retain 24 clean hours unless Aryan explicitly says go. The present instructions do not authorize another deployment or a #42 evaluation rerun.

### October 11 current production and review gate

Expand Down Expand Up @@ -50,7 +52,7 @@ Customer-impacting follow-ups take priority over deferred plumbing: developer pa

## Current milestone

**Workflow foundation plus the approved Phase 2 fixes are live at `8321439`; Report 1 passed and Report 2 awaits grading.** Live staff-card status and acceptance notices are implemented on the separate draft branch, not production. No GCP permissions or customer-content access have been granted.
**Foundation, Phase 2, #41 and approved #43 are deployed at `dad2505`; #43 live smoke remains pending.** Reports 1–3 passed. #42 is held for grading and #28 is stopped on the staff audience. No GCP permissions or customer-content access have been granted.

The earlier #24/#25 smoke prerequisites are complete. Subsequent releases still require their own review, smoke report and rollback evidence; never redeploy over an unfinished reply.

Expand Down
4 changes: 2 additions & 2 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Omi Support Bot Architecture

Omi Support Bot solves documented problems and routes unresolved cases toward a person. Customer reassurance must describe actions and evidence the system can verify. Reports 1–3 passed; #41's live staff-card status/acceptance notices are deployed at main `b9eeb16`, as recorded in [the roadmap](../ROADMAP.md). The separate closing-card localization is implemented on a draft branch, not deployed. The recording-diagnostics gateway remains a target design, not newly granted access. The existing official-source answer and review pipeline remains in place.
Omi Support Bot solves documented problems and routes unresolved cases toward a person. Customer reassurance must describe actions and evidence the system can verify. Reports 1–3 passed; #41 and the approved #43 closing-card localization are deployed at runtime commit `dad2505`, as recorded in [the roadmap](../ROADMAP.md). #43's Spanish/Chinese closure and Spanish reopening smoke remains pending; deployment is not end-to-end verification. #42 remains held and #28's private-destination gate is stopped until Aryan confirms the audience repair. The recording-diagnostics gateway remains a target design, not newly granted access.

Closing-card language follows the same persisted `context.replyLanguage` used by acceptance notices: case lookup → deterministic localized card → confirmed customer send → durable case closure → thread archive. `closingCopy.js` covers the acceptance language set with an English fallback. Feedback identity, ownership, review URLs and optional-review semantics are unchanged; staff locale does not override the customer language. This draft change localizes card content only, not `/done` acknowledgments or subsequent feedback responses.
Closing-card language follows the same persisted `context.replyLanguage` used by acceptance notices: case lookup → deterministic localized card → confirmed customer send → durable case closure → thread archive. `closingCopy.js` covers the acceptance language set with an English fallback. Feedback identity, ownership, review URLs and optional-review semantics are unchanged; staff locale does not override the customer language. The shipped correction localizes card content only, not `/done` acknowledgments or subsequent feedback responses.

## Current capabilities and gaps

Expand Down
7 changes: 4 additions & 3 deletions docs/IMPLEMENTATION_PLAN.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Omi Support Bot Implementation Checklist

Implement the [architecture](ARCHITECTURE.md) incrementally, retaining the working answer/review, official retrieval, public commands and private staff delivery. [The roadmap](../ROADMAP.md) is the authoritative progress record. Reports 1–3 passed; #41's live staff-card status and acceptance notices are deployed at `b9eeb16`. Closing-card localization is a separate local draft correction, not deployed. Each runtime change needs regression checks and release verification. No cloud access grants accompany this work.
Implement the [architecture](ARCHITECTURE.md) incrementally, retaining the working answer/review, official retrieval, public commands and private staff delivery. [The roadmap](../ROADMAP.md) is the authoritative progress record. Reports 1–3 passed; approved #43 is deployed at `dad2505` after #41. Its live smoke/report remains pending. #42 is held for per-case grading; #28 awaits Aryan's staff-audience repair confirmation. No cloud access grants accompany this work.

## Release and security prerequisites

Expand All @@ -22,7 +22,8 @@ Implement the [architecture](ARCHITECTURE.md) incrementally, retaining the worki
- [x] Shipped #41: send one localized customer-thread acceptance notice naming the actual staff member; retain uncertainty and direct staff to Jump on notification failure. Clear prior ownership on a new reopened acceptance cycle.
- [x] Phase 3 correction: every unconfirmed acceptance notification explicitly tells staff to reply in the customer's thread, in an ephemeral response. Confirmed boot/30-second sweep wiring and stale-card repair after a failed edit; Phase 2 main merged without a rebase. Combined unit suite 661 pass, offline 8/8.
- [x] Report 3 review and production smoke accepted: English/Spanish acceptance/start/wait/refresh-after-restart and `/done` closure. No extra live double-click test required; reopening remains a later #30 smoke prerequisite.
- [x] Phase 4b draft: localize the closing card from stored case language for the 14 acceptance languages, with English fallback; preserve all feedback IDs, links and delivery/ownership checks. Seven new tests (five red before), 668 unit tests pass; review and deployment remain pending after #42.
- [x] #43 approved and deployed independently before held #42: stored case language for 14 acceptance languages, English fallback, unchanged IDs/links/ownership/delivery order. 668 tests and branch/main CI pass; two-parent merge `dad2505`, deployment `a6c7c577`, rollback `4a8e93d5`.
- [ ] Verify actual Spanish/Chinese handoff → `/done` cards fully localized, then Spanish “Still need help” reopening and staff-card update. Await synthetic posts; do not call deployment a smoke PASS.
- [ ] Persist staff-approved issue drafts and action results so a restart does not invalidate the File workflow. Decide whether approved customer updates should reach linked GitHub issues; do not document an inactive path as working.
- [x] Correct exact order targeting: an explicit number not found stays a miss, never another order. Move the retired Shopify API version to a supported tested contract and verify the actual response version. Shopify documents [version fallback](https://shopify.dev/docs/api/usage/versioning) and [order-access scopes](https://shopify.dev/docs/api/usage/access-scopes).
- [ ] Add bounded historical-order pagination and explain accessible history privately.
Expand All @@ -36,7 +37,7 @@ Acceptance: restart during OTP, overlapping copies, provider slowdown, failed/un
- [ ] For each new adapter, define a fixed allowlist, customer/case authorization where needed, consent, limits, kill switch and metadata-only audit; validate synthetically, then pilot in the private staff card before reviewed customer enablement.
- [ ] Extend order facts only through exact-owner-verified private/ephemeral delivery, never a normal customer-thread message or model prompt. Keep existing `/order` self-service enabled; do not add order/account writes.
- [ ] Obtain backend-team agreement and privacy review before linked-account metadata/sign-in implementation. Define available/stale/unknown states for device/version/sync/plan and any provable unsynced count; exclude content and unrelated customers.
- [ ] Follow the remaining staged order: reviewed/gated #42 → reviewed closing-card localization → reviewed/private-preflight #28 → reviewed #29 → reviewed #30. The previous two-week go/no-go order is superseded, not a reason to bypass review. Keep deployments separate, with 24 clean hours unless Aryan explicitly says go; add only the authorized phase corrections. Other open queue/monitoring/retention work remains deferred.
- [ ] Finish the explicitly authorized #43 smoke/report; keep #42 held without new evaluations. Rerun only #28's read-only preflight after Aryan confirms fixed permissions; require `private_staff_destination` before any push, then review before merge. #29/#30 remain later separate releases. Subsequent deployments require 24 clean hours unless explicitly waived; unrelated queue/monitoring/retention work remains deferred.

## Phase 2 Verified metadata diagnostics

Expand Down
4 changes: 3 additions & 1 deletion docs/RUNBOOK.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ Use `/done` in the resolved customer/Handoff thread. The customer notice must se

The closing card separates internal resolution feedback from an optional honest app review. Both store links are shown to everyone before any feedback selection; never require a positive vote or a particular star rating. App Store opens Omi's review destination. Google Play opens its official listing, where the customer selects “Write a review.” Store link clicks do not change support dashboard counts, and the bot cannot verify that a public review was submitted. If feedback storage fails, the response must say so; unavailable aggregate counts are not zero.

**Phase 4b draft, not deployed:** `/done` uses the stored case `context.replyLanguage` for the closing-card title, description, optional-review field and all button labels. Its language set matches the acceptance notice, with English fallback for missing/unknown languages. Custom IDs and links stay unchanged. Release smoke must close one synthetic Spanish and one Chinese case and verify the localized card plus unchanged feedback ownership and English fallback; do not infer deployment from local tests.
**#43 deployed, live smoke pending:** `/done` uses the stored case `context.replyLanguage` for the closing-card title, description, optional-review field and all button labels. Its language set matches the acceptance notice, with English fallback for missing/unknown languages. Custom IDs and links stay unchanged. Release smoke must close one synthetic Spanish and one Chinese case, verify every localized card section/button, then use Spanish “Still need help” and verify the customer thread reopens and staff receive the card update. Keep these cards/posts until evidence is captured. No File issue or store-review click is part of this test.

Current release: `a6c7c577`, runtime commit `dad2505`; rollback `4a8e93d5`. A successful deploy/health response is not proof of completed smoke. #42's existing per-case JSON table includes verbatim replies and original judge findings but marks unretained Escalating signals unavailable; do not reconstruct them or rerun held-out cases. #28 stays stopped until Aryan confirms the actual audience fix, then only its read-only preflight is authorized; do not push before `private_staff_destination`.

Telegram replies must target an escalation actually sent by this bot. The case reference selects the exact customer case in shared channels. A failed Discord delivery leaves the case open; fix delivery before claiming resolution. Poll shutdown waits for a reply already being delivered instead of cutting it off.

Expand Down