FEATURE-2G01 | Nothing. /report route is LIVE (e4898c13, main.dart:663). Notifying users about or promoting a report is new feature work. Give reports a route | easy | none: route live since 11.1.x; latest 'where are reports' reports are on 11.1.5, before /find search ('reports','pdf' synonyms at wayfinding_index.dart:158) | none metric: report reach/search hits for 'report' on >=11.1.7; any new report-finding complaints on 11.1.7 | 3 customers; latest 2026-10-11 v11.1.5 Do not rebuild. Promote/notify part is a separate feature. |
FEATURE-40G01 | Fix LIVE since 11.1.1 (Transits tile 73076a83) and search since 11.1.7. Users still asked 'where is weekly horoscope' on 11.1.6. Weekly / monthly forecasts "missing" — 2 requests | easy | 2026-10-15 support v11.1.6 'where is weekly horoscope' (after tile shipped); no >=11.1.7 report yet | none support complaints for weekly/monthly on >=11.1.7; /find 'weekly' query metric | 12 customers; latest 2026-10-15 v11.1.6 If complaints continue on 11.1.7, the next step is FEATURE-12 chips (a decision), not another label. |
ISSUE-175G01 | None for this row. Three routes are reachable (26e07b64 etc. LIVE). /chartupcoming and /profile-settings are orphaned on purpose by owner decision. Five user-facing routes are registered in main.dart and have ZERO inbound links — they cannot be reached by an | easy | none: weekly_report.dart:24-34 (Mark 2026-10-12 'do not link'); profile_screen.dart:675 (ISSUE-238) | none orphan-route check in _verify.js / navmap run on HEAD | no linked reports Close as done. Register lags (stage=committed, all 6 commits LIVE). |
FEATURE-71G02 | Done for component-screen prompts (LIVE). Journal-tab prompts default to 'potential' because they have no facet, by design. UX-14 path is new. Facet-aware tarot spreads — stop hardcoding every prompt-to-tarot link to the generic "Your Potential" spread; | easy | none: component_summary.dart:378-382,1097 passes facet layout; journal_prompt_card.dart:116-121 documents default | none Prometheus journal_prompt_tarot_total by spread_layout on 11.1.7 | no linked reports Close this row. Move the 'who is this about' idea to UX-14. |
ISSUE-110G02 | Fixed by design decision: current location is app-wide and the help text now says so (9b7dd49e, LIVE). Setting one profile's "current location" overwrites the current location on every saved profile — reported wit | easy | none: current_location.dart:300 states it applies to all profiles | none device: open location picker in header and read help text | no linked reports Per-person transit location would be a feature (relocation exists). |
ISSUE-132G02 | Fixed: auto-pair uses persist:false and guards fixed (548df4f0, LIVE). Relationship Matrix user-selection: two-profile accounts get silently paired and the pairing is persisted app- | easy | none: lib/views/matrix.dart:553 setUser2(..., persist:false); :527,:539,:580 mounted guards | none 2-profile account: open Relationship Matrix, then check synastry elsewhere keeps the prior user2 | no linked reports Register lag: stage=pushed, commit is in 11.1.7. |
ISSUE-196G02 | Fixed: caller-supplied deeplink/tab now win (788e90cd, LIVE). The tarot analysis passes '/tarot', not the specific reading. generateDataReport builds a journal deeplink only for matrix_category — every other AI report saves a dead end | easy | none for this row: report_service.dart:482-500; tarot deeplink generic at :671 | none journal entry from tarot analysis opens /tarot | no linked reports A reading-specific deeplink is an ISSUE-194 follow-up. |
ISSUE-420G02 | Main-tab back is fixed (514a15df, LIVE). Case E fix 4ec90fc9 is UNPUSHED. Not yet checked on Samsung One UI. The back button does nothing on EVERY screen on Android, so there is no way out of any drilled-in view - a cha | easy | none for main path; case E only on local new-ui (4ec90fc9 unpushed) | Mark: push 4ec90fc9 (RB-1), then build 10 nav tests pass; device check on Samsung/One UI | 1 customer; 2026-09-23 v11.1.3 Reviewer approved 4ec90fc9. |
ISSUE-48G02 | Fixed and LIVE: login/forgot show the tab bar when profiles exist, otherwise a back chevron to /intro. Login screen has no way out — auth dead-end, disabled password-reset return | easy | none: lib/views/login.dart:677-688; forgot_password.dart:136 | none device on 11.1.7: logout and delete-account flows, then leave login | no linked reports Logout/delete still goAndReplace('/login') (account_screen.dart:321,511), but the login screen now has its own way out. |
ISSUE-491G02 | Not reproducible: every 'Account' label opens AccountScreen. Likely confusion: the Users ⋮ sheet is titled 'Account' (pick_user.dart:876). Tapping 'Account' opens the Users/profile list instead of the Account screen | easy | none: profile_screen.dart:800,843 route to Account; pick_user.dart:876 sheet titled 'Account' | reporter's exact tap path ask reporter; device repro | 1 customer; 2026-09-27 (version unknown) No code is in the way. Any change to the sheet's title is a wording call for Mark. |
ISSUE-631G02 | Report generates and saves. Since 11.1.6 the saved toast has 'View Now' to the Journal Reports tab (e111ab8e, LIVE). The reporter was on 11.1.5. Astrocartography relocation map "report" tap never shows the report -- repeatable on every city/line | easy | none: astrocartography_screen.dart:1186-1191 -> report_flow.dart:70-96 View Now; acg_city_report_total error=0 (2026-10-10) | none Android 11.1.7 device: ACG city report, then View Now; acg_city_report_total outcomes | no linked reports (Discord tester 2026-10-09 v11.1.5) Auto-opening the report would override Mark's all-report-types toast decision. |
ISSUE-45G03 | Nothing in code; web popup-blocked toggle now warns. Only proof on the deployed web build is missing. "Revert to old UI" toggle silently no-ops on web (popup blocker) | easy | none: fix at lib/main.dart:1352-1372 + lib/utils/web_utils_web.dart:39-45, commit 9d2ac77f LIVE (ancestor of 3423e5a2) | Confirm deployed web build includes 9d2ac77f Web: block popups, toggle old UI, confirm warning snackbar | no linked reports No linked reports. Close once deployed web build confirmed. |
ISSUE-553G03 | Node fix deployed; only confirmation that old-UI profile-cap loop reporters now get correct /user-count is missing. ISSUE-461's flawed deletedAt predicate survived at two more sites for a week - /user-count returned 51 for a c | easy node | none: origin/master routes/user.js:1983 (/user-count live filters) and :4745 (/connectedUsers uses profileVisibility.liveListQuery), commit 7f531ad1 pushed=deployed | None Read /user-count for the 3 measured accounts (51->120 etc.); legacy web add-profile with >5 live profiles | 2 linked customer(s); latest 2026-09-25 on 11.1.4 Linked reports (2026-09-25) predate 2026-10-03 fix. A >5-profile free user hitting legacy cap is correct behaviour. |
UX-2G03 | Mobile toggle fix exists (awaited write); retraction was wrong. Unproven: both directions on 11.1.7 device, and legacy web calling switchToNewUI. "How do I go back to the old UI?" | easy | none: lib/views/profile_screen.dart:699-723 and lib/views/settings.dart:314-336 await the useOldUI write before restart — added in aa18a464 (diff confirmed), LIVE; old->new bridge lib/services/webview_service_mobile.dart:545-550 | Legacy web must expose a control calling switchToNewUI (legacy-web owner) Device test 11.1.7 iOS+Android: new->old->new, kill app, confirm mode persists; check app_ui_mode_by_platform counter | 10 linked customer(s); latest 2026-10-15 on 11.1.4 Register retraction of aa18a464 is incorrect for this file; correct the row. Demand side (users wanting old UI) is separate. |
ISSUE-373G04 | Node fix deployed (empty name -> 'Anonymous'); needs proof that /adduser 500s on empty name have stopped. /adduser returns HTTP 500 when the profile name arrives empty — 12 in a 37-minute window, and the customer get | easy node | none: origin/master routes/user.js:30 resolveProfileName (services/profileName.js, ceda5b6c 2026-09-22, deployed) | None Count /adduser 500s with empty name in errors over 14d (filter on msg) | no linked reports No linked reports. |
ISSUE-409G04 | Writer fix and dedupe done; remains to show no new duplicate groups and handle the stale-survivor side effect (ISSUE-424) separately. 43,880 redundant duplicate charts across 26,901 accounts — a failing save wrote a row on every retry, worst ca | easy node | none: a0145a4/6bf979f on origin/master (deployed); 2026-10-02 duplicate groups 30,718->0 | Payments residue must NOT be collapsed (see row notes) Read duplicate-group count with newest row in last 7d | no linked reports No linked reports. |
ISSUE-410G04 | Repair done to 2 accounts; only those 2 remain plus a read-back. 4% of accounts hold charts with no profiles row — invisible to friend search, handles and /GetAllUsers, and th | easy node | none: 011e614/155397c deployed; 28,060 -> 2 accounts without profiles row (2026-09-23) | None Re-count accounts with charts but no profiles row | no linked reports No linked reports. |
ISSUE-437G04 | Mixed-schema fix deployed; needs proof the 'Cast to string failed' errors have stopped. addOrUpdateProfile throws 'Cast to string failed' on profiles.profile — 11 a day, predates every deploy, and i | easy node | none: b28c950 on origin/master (deployed 2026-09-28) | None Count 'Cast to string failed' in errors since 2026-09-28 | 6 linked customer(s); latest 2026-10-14 on 10.9.7 Linked reports go to 10.9.7; likely meaning-matched profile-loss complaints. |
ISSUE-692G04 | Fix exists (edits now hold, 1823371b); needs device proof an edited birth place survives restart. Play Store 1-star: edited birth place on a saved profile will not persist, even after cache clear/force-close/ | easy | none: 1823371b LIVE per 3423e5a2 (lib/services/user_form_controller.dart, user_service.dart); NOT in d89c1fc1, so iOS 11.1.7 may lack it | Confirm which commit the iOS 11.1.7 build was cut from Android 11.1.7: edit birth place, force-close, reopen; repeat iOS on next build | 8 linked customer(s); latest 2026-10-13 on 11.1.6 Latest report 11.1.6 predates fix. Possible server-side ISSUE-454 cause if it recurs. |
ISSUE-508G05 | Server skip for permanently-gone Google subscriptions deployed; needs proof Sync Payments Failure volume fell. /syncPayments re-queries subscriptions Google has permanently deleted, on every launch — the loudest error sou | easy node | none: e12241ba (twin of 668d7fc) + d130370 + 5618194 on origin/master (deployed); client only logs at lib/services/integration_service_mobile.dart:619-635 | None Count Google 410 log lines and 'Sync Payments Failure' distinct users/day vs 529/day baseline | no linked reports Cited Flutter commit 15a9cad5 is unrelated stats tagging. |
ISSUE-56G05 | Dedup guard now user-scoped and soft; needs evidence no genuine purchase is dropped as duplicate. Client-side purchase-dedup guard blocked a legitimate first-time Apple purchase | easy payments | none: lib/services/purchase_service_mobile.dart:170-180, 566-600; 6525fbe9 LIVE | None Metric: 'Duplicate Purchase Detected' events not followed by a payments row in 48h | 5 linked customer(s); latest 2026-10-06 on 11.1.5 Latest linked report (2026-10-06, 11.1.5) is a login confusion, not clearly this bug. |
ISSUE-563G05 | Split 5/5 caps live; needs behavioural confirmation. Server-side cap enforcement is absent (separate, unfiled). Free-tier save cap split: 5 charts and 5 reports as independent counters (was one shared pool of 10) | easy | none: lib/services/content_gating_service.dart:139 freeTierChartLimit=5; 1b65a6cf + 70a08d0a LIVE (70a08d0a not in d89c1fc1) | Server cap (Node) is a separate row to file Free account: save 5 charts then 6th blocked; 5 reports independently | 1 linked customer(s); latest 2026-10-03 (version unknown) gated_content_widget.dart:911 interpolates the report limit in a getLang key, against Mark's literal-key rule. |
ISSUE-572G05 | Fix pushed but not live; needs a real purchase while at the profile cap in one session (iOS release gate). Paid users re-shown the add-profile paywall repeatedly in one session — UserService's profile-limit cache neve | easy payments | none: lib/services/user_service.dart:71 cachedLimitNeedsRecheck used at :3786; 67cce05c pushed-not-live (build 99); 6 unit tests | Build 99/11.1.8 release; sandbox store account Sandbox purchase at cap, tap Add Profile without restart (iOS+Android) | 1 linked customer(s); latest 2026-10-10 on 11.1.5 Mark: do not mark verified until purchase test runs. |
ISSUE-696G05 | Android checkout fix exists only on local new-ui (unpushed); Android completion still 39% vs iOS 60% in the field. Android checkout loses buyers to billing errors: 39% of Android buy-taps complete vs 60% iOS (null offer token | medium payments | none: 26b62c73 local-unpushed (single-flight, pre-launch refresh, BillingClient reconnect in purchase_service_mobile.dart) | Mark to push 26b62c73; Android 11.1.8 release hold (ISSUE-228) Play sandbox purchases incl. double-tap; post-release buy-tap completion metric | 3 linked customer(s); latest 2026-09-24 (version unknown) Needs push approval, then Android build. |
FEATURE-51G06 | Descriptive line titles live; the four meaning strings were never seeded into the language table. Astrocartography line labels should say what the line MEANS, through getLang — Mark, 2026-09-22 | easy content | none: lib/services/astrocartography_service.dart:51-77 (label stable, meaning via getLang); 200e0e77 LIVE | Content owner to seed 4 translations Non-English device: Cities heading shows translated meaning | no linked reports No linked reports. |
ISSUE-183G06 | South Node drawing fix is live; only on-device confirmation missing. South Node is computed end-to-end but never shown as a chart body | easy | none: 54aadf07 + 95de78bc LIVE (glyph index fix, Patterns crash fix) | None Open natal wheel + Patterns view on 11.1.7; South Node opposite True Node | no linked reports No linked reports. |
ISSUE-231G06 | 'True Node' label is live; only on-device confirmation missing. App displays TRUE Node as "North Node", hiding the convention difference that makes our node sign disagree wit | easy | none: lib/utils/astro_helper.dart:1450 names index 10 'True Node'; d1060f1c LIVE | None Natal chart on 11.1.7 shows 'True Node' | no linked reports No linked reports. |
ISSUE-264G06 | House-cell min-width fix live; needs the tester brief on iOS at default and 1.5x text (ISSUE-734). Houses are no longer readable in the new-UI chart — 6 iOS reviews in 2026, mean 1.67 stars, and the register h | easy | none: lib/widgets/chart/chart_widgets.dart:624-664 minWidth; 3469348f + tests 0bb6ba8f/57fc4d62 LIVE | ISSUE-734 text-scale may still truncate iOS 11.1.7 device at 1.0x/1.5x text: houses 10-12 readable | 5 linked customer(s); latest 2026-09-22 on 11.0.0 Latest linked report 2026-09-22 on 11.0.0 predates fix. |
ISSUE-274G06 | House tap target enlarged and live; needs iOS device proof a house tap opens its detail. Tapping a house reportedly does nothing on iOS — split from ISSUE-264 because the tap path is wired and a layo | easy | none: lib/widgets/chart/chart_widgets.dart:644-664; 7ae83884 + c81c66b3 LIVE | Same tester brief as ISSUE-264 iOS 11.1.7: tap house 10/11/12 cells, popup opens | 1 linked customer(s); latest 2026-09-09 (version unknown) Single 2026-09-09 review predates fix. |
ISSUE-411G06 | Truncating formatter (never 60') exists in app; the 2026-09-23 report probably came from an old build or legacy UI renderer. A planet at 29 deg 59.7 min is displayed as "30 deg 00 min" of the sign it is still in - degrees and minutes a | easy | none: lib/utils/degree_format.dart:36-43 + JS twin :76-105, every path uses splitDegreeMinutes (17 refs); test/utils/degree_format_test.dart; in aa18a464 LIVE | Find reporter's surface/version (he also uses old UI) Unit test exists; device check body at 29°59.7' | 4 linked customer(s); latest 2026-09-23 (version unknown) Register has no commit cited; cite aa18a464. Legacy web formatter not checked. |
ISSUE-479G06 | Wheel labels AC/IC/DC/MC only where the angle sits on the cusp; needs a whole-sign device check against the reporter chart. Chart wheel's quadrant-cross lines may not represent real AC/DC/MC/IC degrees, or are unlabelled if they do | easy | none: da907f19 LIVE (11.1.7); app_assets/Shapes.1.8.js:85 angleSitsOnCusp, used :522-532; test/wheel_angle_labels_test.dart | Reporter chart ([customer], whole sign) on 11.1.7 Run test/wheel_angle_labels_test.dart; device check of a whole-sign chart on 11.1.7 | 3 linked customers, latest 2026-09-27 on 11.1.4 Last linked report 2026-09-27 on 11.1.4, predates the fix build. |
ISSUE-103G07 | Enum-index and natal-axis fixes are live; no post-fix confirmation that aspects are no longer dropped. New-UI aspect grid silently drops real aspects (outer-planet-to-personal hit hardest, no fixed pattern) — arra | easy | none: f7146db1 and da652e24 LIVE; chart_service.dart:510-548 | Reporter chart ([customer]) or corpus test Existing unit tests + device check of an outer-to-personal aspect on 11.1.7 | 3 linked customers, latest 2026-09-16 on 11.0.0 Last linked report 2026-09-16 on 11.0.0, before fixes. |
ISSUE-404G07 | Single AspectClass classifier is live; graph page vs wheel agreement on the reporter chart not yet checked. Graph-page aspects disagree with the wheel on the same chart (new UI, Android) - reported three times in three | easy | none: c476fba5 and 87c381a8 LIVE; lib/core/chart_constraints.dart AspectClass | Reporter chart ([customer]) Device check graph vs wheel on 11.1.7; close with 60/58 | 3 linked customers, latest 2026-10-10 on 11.1.3 Latest 2026-10-10 'cannot click empty boxes' is expected behaviour. |
ISSUE-468G07 | Natal grid rows now include Ascendant and mirror on birth charts, so ASC-Uranus/Neptune should show; unconfirmed. Ascendant-Uranus and Ascendant-Neptune conjunctions missing from aspect chart despite a 10-degree orb setting | easy | none: 1de9a354 and da652e24 LIVE; astro_helper.dart:1488-1491 rows include Ascendant(11) | Reporter chart Device check of reporter chart on 11.1.7 | 1 linked customers, latest 2026-09-25 on 11.1.4 Report 2026-09-25 on 11.1.4 predates da652e24. |
ISSUE-499G07 | Transits to natal North Node now render (natal on rows); NN/SN orb mismatch from second reporter is an engine question. North Node transits missing from the gridded transit chart, while South Node transits do show -- asymmetric, n | easy | none for row symptom: da652e24 LIVE, astro_helper.dart:1490 rows include NN(10)/SN(27) | Reporter check; [customer] orb mismatch to engine owner Device check transit grid on 11.1.7 | 1 linked customers, latest 2026-09-29 on unknown version Transit-side nodes are still not columns (by design, chart_service.dart:536-539). |
ISSUE-58G07 | Mirror and single-classifier fixes live; transit-planet x natal-asteroid aspects still have no cell by design. Transit aspect orbs sporadically missing from the natal aspect grid | easy | none for row: 1de9a354, c476fba5 LIVE; chart_service.dart:719-726 notes the asteroid gap needs a product decision | Reporter check; separate decision for natal-asteroid rows Device check on 11.1.7 | 1 linked customers, latest 2026-09-22 on 11.1.3 [customer] 2026-09-22 complaint is the known natal-asteroid gap, not this fix. |
ISSUE-60G07 | Classifier unified and live; Mercury-IC/DC mismatch likely natal vs daily-transit views of different data. Aspect graph and daily chart disagree on the same aspect (Mercury-IC/DC) | easy | none: c476fba5 LIVE | Reporter ([customer]) reply Compare aspect graph vs daily chart on one profile on 11.1.7 | no linked reports No linked reports; verification=verified already. |
ISSUE-94G07 | A/S fix released and engine-backed test passes; row just needs closing. Applying/separating (A/S) transit-aspect labels reportedly swapped — the actual substantive report behind ISSU | easy | none: bc8a39ec LIVE since 11.1.5; test/aspect_applying_sign_test.dart | None Run test/aspect_applying_sign_test.dart | 3 linked customers, latest 2026-09-10 on 11.0.0 Stage released, verification verified; status lag only. |
ISSUE-374G08 | All four astrocartography silent-failure paths fixed and live; needs outcome metric read on 11.1.7. Astrocartography presents a wrong or empty map as a successful one: four silent-degradation paths, no error sh | easy | none: 2b6badf9, 7abac129 LIVE; astrocartography_service.dart:623 nullable GAST, astrocartography_screen.dart:191-399 | acg outcome metrics Read outcome=no_result share on 11.1.7 | no linked reports No linked reports. |
ISSUE-490G08 | Blank pattern graphic is likely the Patterns crash fixed by 95de78bc (live); needs reproduction check on 11.1.7. Chart-pattern graphic renders blank (Android, since a recent update) -- signs list but the pattern/house image | easy | none: 95de78bc LIVE (ISSUE-638); report 2026-09-28 on 11.1.4 | Reporter ([customer]) check test/pattern_chart_data_test.dart; Android device Patterns view | 1 linked customers, latest 2026-09-28 on 11.1.4 Close as duplicate of 638 if not reproducing. |
ISSUE-503G08 | Renderer init failures fell 3.51%->1.14% of weekly actives; needs re-measure on 11.1.7 only. Chart renderer fails to initialise within 10s for ~2,200 users a month, 99.3% Android -- they are shown a red | easy | none in code: fixes LIVE; metric 1.14% (2026-10-12) | errors collection by build 300100098 Share of weekly actives with init timeout on 11.1.7 | 2 linked customers, latest 2026-09-25 on 11.1.4 If residual persists, trace Android WebView init (native). |
ISSUE-513G08 | drawChart readiness-probe fix live; needs 'drawChart function not found' count on build 300100098. Chart-rendering JS has a syntax error in today's build (300100096), killing drawChart and crashing the headles | easy | none: ba89a152 LIVE | errors collection by build Count drawChart-not-found users on 11.1.7 | no linked reports No linked reports. |
ISSUE-638G08 | Patterns crash fix live; awaiting on-device confirmation from reporters. Chart patterns (houses) not showing since last update -- two independent reporters | easy | none: 95de78bc LIVE; test/pattern_chart_data_test.dart | Reporter confirmation Run pattern test; device Patterns view on 11.1.7 | 2 linked customers, latest 2026-09-27 on 11.1.4 Independently re-verified in tree 2026-10-12. |
ISSUE-7G08 | Splash-hang fixes (dee23cd3, 23d2be43, startup timeouts main.dart:344/468) are live. The _verify reopen counts headless chart WebView 'Initialization timeout', a different subsystem. App crashes — split into 3: splash-hang timeout (fix real, but "outage-only" framing challenged 2026-09-10), b | medium | none for splash: the reopen metric is emitted at lib/utils/chart/chart_renderer_mobile.dart:309 (chart WebView 10s ready poll), not the splash path; 252 events/72h are ISSUE-286 territory | Correct _verify.js check 7 (nodejs scripts/_verify.js:1783) to a splash signal, or re-point it at ISSUE-286 Split 'Initialization timeout' rows by app version; ANR/startup vitals on 11.1.7 (Play Console) for splash | 19 linked customers, latest 2026-10-14, version 10.9.7 (pre-fix build) Fixes are live (11.1.7). The check behind the reopen measures chart-renderer init, so it can't confirm or reopen the splash fix. |
UX-6G08 | Umbrella row. Settings spinner fixed (per-preference catchError, profile_screen.dart:244-289, 967017e3 live). Birth-time how-to is discoverability, tracked in ISSUE-731. Basic how-to / dead controls | easy | none: lib/views/profile_screen.dart:244-289 per-field fallback in live build (967017e3); no dead handlers found (2026-08-30 check) | ISSUE-731 for Edit Profile discoverability Device-check settings panel loads on 11.1.7 with flaky network | no linked reports Close the umbrella once settings load is checked on a device; the how-to part belongs to ISSUE-731. |
ISSUE-602G09 | None in code: journal edit PUT now targets NODE_URL (journal_service.dart:644, c5d77090) in live 11.1.7. Editing a saved tarot reading has never saved: journal_service.dart PUTs a Node route path to the legacy host | easy | none: fix c5d77090 is an ancestor of 3423e5a2 (live); lib/services/journal_service.dart:644 | Remaining false-saved half is ISSUE-392 Rename a tarot reading on 11.1.7, reload, confirm persisted in Reports tab | no linked reports Live fix. Only device evidence is needed. |
ISSUE-509G10 | None in code: angle rows dropped from all 'in Houses' Matrix categories (astro_parser.dart:958-972,1374) in live 11.1.7. Matrix lists the four angles as placements in houses -- drop them: the angles ARE cusps, so the row is tautolo | easy | none: 49d28241 + d89c1fc1 are ancestors of 3423e5a2 (live) | none Open Matrix Planets/Transit in Houses on 11.1.7, confirm no Ascendant/MC/DC/IC rows | no linked reports Register stage lags. The fix is live. |
ISSUE-559G10 | 135 corrupt Planet Aspects keys left deliberately with broken images; main-category broken images 533->1 after 922-row repair (live in DB 2026-10-05). 135 corrupt keys in Planet Aspects render broken images and serve content under misspelled, mistranslated and | easy | none for repairable rows: data rewritten in prod DB 2026-10-05; corrupt keys remain by design pending key cleanup | Node content owner for the junk-key cleanup Run fix-component-images.js --all --report and read result | no linked reports Server data. Read back with the existing report script before closing. |
ISSUE-661G10 | Root cause (facets null, ISSUE-654) fixed server-side 2026-10-12. Flutter empty-state fix 865eabc2 is pushed but not live; 11.1.7 still throws the raw exception (matrix.dart:3190 in 3423e5a2). Full Report / Matrix comparison throws 'No items found for the current tab and filter combination' -- cluster | easy | git grep at 3423e5a2: lib/views/matrix.dart:3190 still throws 'No items found...'; HEAD matrix.dart:3189 has the fix | Release of build 99 / 11.1.8 (ISSUE-228 hold) Device: empty tab/filter combo shows info, not error, on 11.1.8 | 3 linked customers, latest 2026-10-11, version 11.1.5 Pushed but not live (b99). Raw error text stays in the live build until 11.1.8. |
ISSUE-681G10 | Duplicate of ISSUE-661; root cause was the 2026-10-11 facets outage, restored server-side (ISSUE-654, 0/115 -> 107/115). LIVE: Matrix Summary / synastry / radar charts show 0 or fail for many accounts, onset correlates with 2026-10 | easy | none: server restore confirmed 2026-10-12; 15 customers told; no reports after 2026-10-12 linked | ISSUE-654 floor check Run verifyRoute probe (Matrix Summary nonzero for a named account) | 19 linked customers, latest 2026-10-12, version 11.1.6 Close as duplicate of ISSUE-661 once the probe passes. |
ISSUE-686G10 | Legacy .NET still guesses image filenames; client-side correction c72fa47b (via Node ResolveImages, deployed as 41adab11) is pushed but not live. Legacy .NET CalculateHoroscopes guesses Image filenames and ignores curated Mongo data: 36% of Transit/Synastr | easy | c72fa47b not ancestor of 3423e5a2; Node twin 41adab11 on origin/master (deployed); lib/core/astro_api_service.dart:88, horoscope_service.dart:1698 | Release of build 99 / 11.1.8 Re-run full-matrix image probe on 11.1.8 client; count 404 images | 1 linked customer (Apple review 2026-10-03) Pushed but not live. Legacy-side patch is deliberately not shipped. |
ISSUE-688G10 | Fixed locally: filterItems now checks matrixType (matrix_service.dart:680-684), dd78087a, unpushed. Every Moon transit is dropped from the synastry and transit matrices by a rule whose own comment says it is fo | easy | none in HEAD: lib/services/matrix_service.dart:683; dd78087a only on local new-ui | Mark to push with RB-1, then build test/services/matrix_filter_transits_test.dart (flipped); device: relationship matrix lists Moon transits | no linked reports Unpushed. Needs push + build, no code. |
ISSUE-689G10 | Missing combos seeded (202 + 786 rows live in prod DB); 216 flagged NeedsCleanup; seeding scripts commit 3e981b6f is local-only. Content corpus genuinely missing 273 (body,aspect) combos - South Node/Vertex/Part Of Fortune/DC-IC/minor bodi | easy | none for coverage: rows written to prod DB 2026-10-12; quality of 27.5% NeedsCleanup rows unreviewed | Node owner to push script commit 3e981b6f; content review of NeedsCleanup rows Re-run full-matrix 404/missing probe | 1 linked customer, latest 2026-06-26 Server data. Read back coverage before closing. |
ISSUE-237G11 | None in code: synastry reports send body ownership (report_service.dart:550-830, c6c85d8c/8e549c5d) in live 11.1.7; Node reads it. Synastry INTERPRETATION attributes each placement to the wrong person — reported after ISSUE-40 shipped, and t | easy | none: c6c85d8c, 8e549c5d ancestors of 3423e5a2; latest report 2026-09-14 on 11.0.0 predates fix | none Generate synastry report on 11.1.7; confirm 'Who:' attribution correct; ownershipUnknown count ~0 | 4 linked customers, latest 2026-09-14, version 11.0.0 Live. Needs a post-release report check. |
ISSUE-40G11 | None in code: synastryNamesSwapped (astro_parser.dart:1018) plus ownership fixes live. One report on 11.1.4 (2026-09-29) predates c6c85d8c. Synastry name/placement swap — was fixed but never got a tracked entry | easy | none on 11.1.7: latest report 2026-09-29 on 11.1.4, before c6c85d8c (2026-10-06, live) | none Device synastry check on 11.1.7; watch support for post-11.1.7 swap reports | 11 linked customers, latest 2026-09-29, version 11.1.4 Live. Close on clean post-11.1.7 evidence. |
ISSUE-484G11 | None in code: _loadChart now records mid-load reload requests and clears the flag in finally (chart_screen.dart:710-865, 26c9ed66) in live 11.1.7. Synastry secondary chart gets 'sticky' when switching between multiple people quickly | easy | none: 26c9ed66 ancestor of 3423e5a2; register's 'needs investigation' predates reading this commit | none Device: switch synastry partner rapidly A->B->C on 11.1.7; [ISSUE-484] logs | no linked reports (Discord [customer] 2026-09-27, pre-fix) Audit said 'no fix exists'. That's wrong: the fix is live. |
ISSUE-673G11 | Duplicate of ISSUE-484; same fix (26c9ed66) live in 11.1.7. Synastry secondary chart gets "sticky" (stale) when switching between multiple people quickly -- reviewed in D | easy | none: same mechanism fixed at lib/views/chart_screen.dart:710-865 | ISSUE-484 As ISSUE-484 | 1 linked customer (Discord 2026-09-27) Close as duplicate of ISSUE-484. |
ISSUE-39G12 | Persistence and AI-language fixes (11 Flutter commits) are live in 11.1.7; needs evidence that language persists and reports follow. Language support after the update — 3rd reporter 2026-09-11 materially reframes this: the gap is AI-generated | easy | none: all 11 cited commits ancestors of 3423e5a2; latest report 2026-10-07 on 11.1.3 | none Device: set es, restart, confirm persists and AI report in es on 11.1.7 | 17 linked customers, latest 2026-10-07, version 11.1.3 Live. Device verification only. |
ISSUE-406G12 | None in code: prompt request sends user language (journal_prompt_service.dart:261, b807bc22) in live 11.1.7 (Android too). Journal prompts always request lang=en — the Flutter call site hardcodes it, so translated prompts would be un | easy | none: b807bc22 ancestor of 3423e5a2; side-effect regression is ISSUE-729 | ISSUE-729 none beyond ISSUE-729 probe | no linked reports Close. Live on Android as well, so ISSUE-729's empty tab also hits Android. |
ISSUE-528G13 | Node fix aae9791c is on origin/master (deployed), so the register's 'unpushed, still live' wording is stale. Still to do: confirm no new relocation docs end in ', structuredReport: {'. structuredReport leak into relocation report text -- fixed in commit aae9791, but unpushed and still live in p | easy | none: aae9791c is an ancestor of nodejs origin/master (auto-deploys); Flutter save-path twin 7e5c0ac5 is LIVE in 11.1.7 | ISSUE-566 Flutter fix reaching clients Query relocation journals created after deploy for the structuredReport marker (expect 0) | no linked reports Title is stale; update the register stage to deployed. |
ISSUE-566G13 | Fixed: the relocation tile now saves genResult.report, not Map.toString(). Only proof from 11.1.7 clients is left. Relocation city reports stored a Dart map dump as the journal content, not the report | easy | none: 7e5c0ac5 is LIVE (ancestor of 3423e5a2); astrocartography_screen.dart:1154 uses genResult.report ?? asString | none Query relocation journals from 11.1.7 clients for content starting '{reportName:' (expect 0) | no linked reports (group G13 record: 7 customers) Register says 'local only'. Stale: it is in the live build. |
ISSUE-567G13 | Fixed 2026-10-10 by boot-time pm2 reconciliation, and deploy verification reports OK since. Only open question: is a standing _verify check still wanted? Every deploy silently skips the components app: pm2 reloads 8 of 10 and reports OK, so /component has run stal | easy | none: 1f54a20d/e28a9946 deployed; history 2026-10-11 'DEPLOY VERIFICATION OK' on consecutive deploys | Mark: standing check yes/no Read _regression_watch.js deploy for the last N deploys (components id 3 restarted) | no linked reports Infra, not Flutter; can close once the check decision is made. |
ISSUE-213G14 | Fixed: numeric useRewardAds and the flat reward tiers now parse. The reopen uses the wrong instrument: Ad Load Error counts are AdMob fill/network noise. AdsConfig: useRewardAds and the reward tiers are silently ignored — the DB says reward ads are ON, the client | easy | none: aefc22c5 LIVE; ads_service.dart:817-838 coerces number/string, :856-872 reads flat tiers | none Confirm rewarded ads_shown_total > 0 on 11.1.x; replace the _verify check (Ad Load Error) with a reward-ad shown metric | 2 customers, latest 2026-09-22 verifyRoute measures something the fix never touched; fix the check, not the code. |
ISSUE-335G14 | Flutter AdMob fallback is live, so blank slots are gone. The in-house inventory is still empty: the one active row is tagged ItemContent. The in-house half of the Native ad slot serves nothing: 1 active ad row, tagged ItemContent, while the client | easy | none for the blank render: dd77df4b LIVE (InHouseAdsService.hasInventory); _verify still sees in-house endpoints EMPTY (data, not code) | Content owner to create AdContent rows if in-house is wanted Read ad_slot_decision_total{admob_fallback} from 11.1.7 clients | no linked reports The empty in-house table is a content/business choice, not a defect. |
ISSUE-415G15 | Node echo guard is deployed. Likely client cause (support quick-reply templates visible to every user, incl. 'Review' text) fixed live in ce093219. Inbound messages recorded as the customer's words are verbatim our own support text - client replay, not email | easy | none: ce093219 LIVE (toolkit gated on holder uid); quickReplies 'Review' text = the echoed template (message_service.dart:54); node 6a57fca4 deployed | none Check verifyRoute: no new verbatim-echo inbound from 11.1.7 clients; support_inbound_echo counting | 2 customers, latest 2026-06-23 Cause attribution to ce093219 is inference from the template match, not proven. |
ISSUE-429G15 | Fixed: 'Recover Lost Users' now pre-fills the message instead of auto-sending it. Needs inbound-share evidence from new builds. The 'Recover Lost Users' button auto-sends 'Lost User Recovery' without the customer typing anything - it is 5 | easy | none: message_detail_screen.dart:183-190 pre-fill only, landed in ab8e036a (LIVE); latest complaint predates it (11.1.4) | none Share of inbound 'Lost User Recovery' with no other text, split by app version >=11.1.7 | 13 customers, latest 2026-09-24 v11.1.4 Register says node/pushed; the fix is Flutter and live. |
ISSUE-637G15 | collapseMixedTapBurst is deployed in 4a0baee3. Only verification is left. A burst of DIFFERENT menu taps read as several requests, so autosupport answered the wrong one | easy | none: nodejs 4a0baee3 'a tap burst is one event (ISSUE-637)' is on origin/master | none Replay [customer] 2026-10-09 thread through autosupport; check single-intent answer | no linked reports Server-side; client half is ISSUE-331. |
FEATURE-15G16 | Built and live: first Home shows one insight card. Not yet measured in production. One thing, not everything — the first session delivers a single fact | easy | none: 686bd518/b987c7ea/797d1c9f LIVE in 11.1.7; audit 5/5 requirements | Firebase first_insight_* access Read first_insight impression/action events for new 11.1.7 accounts | no linked reports Register stage stale (says not released). |
FEATURE-26G16 | Built locally: Important Birth Aspects panel reuses the Moon-ruler selection (430a0809, c1f10733, 90539a5c), but none of it is pushed. 51e6be0d is live. Lead newcomers with identity, not sky-data | easy | none: lib/views/home_screen.dart has 'Important Birth Aspects'; 430a0809/c1f10733 unpushed (local new-ui only) | Mark approval to push; 11.1.8+ build Widget test of panel; device check on Daily | no linked reports Unpushed; register still references withdrawn 988f98ad ranking. |
ISSUE-371G16 | Flutter fixes are all live in 11.1.7. Node e3e7b9e6 (transit refusal of a corrected noon default) is approved but unpushed. Needs a 0,0-rate measurement. LIVE REGRESSION: 12.24% of new charts are saved at lat=0 lng=0 with no time and no town, up from 1.4% - 10,174 | easy | none: 12 Flutter commits LIVE (e.g. payload_service.dart:251); nodejs e3e7b9e6 not on origin/master | Push of nodejs e3e7b9e6 (approved) Rate of new charts at lat=0/lng=0 from 11.1.7 clients vs 12.24% | no linked reports (group G16) Measure by app version, not total. |
ISSUE-518G16 | Fixed live: the client no longer mints a Location at 0,0 when lookup fails, and falls through hosts. A device-side city/timezone lookup failure saves a chart computed for 0,0 — the client turns null into 0 and N | easy | none: 571b8d2b LIVE; location_service.dart:458, astro_api_service.dart:145,201 | none 0,0 saves per day from 11.1.7 clients | no linked reports Shares measurement with ISSUE-371. |
ISSUE-29G17 | None of the 3 original signatures remain; the only widget fault left is the APPWIDGET_UPDATE broadcast ANR, which ISSUE-394/398 track. MoonWidget crash cluster (3 signatures) | easy | none: bae2ee66 (LIVE) guards startForeground at MoonService.java:274-292; setAlarm dead (AlarmReceiver.java:62 commented); okhttp aligned build.gradle:146 (531db01d LIVE); 09-28 Play read showed 0 on 094/095 | Play errors API read on 300100098 Play errors API by versionCode 300100098 for the 3 signatures | no linked reports Close on a 98 read; the widget ANR belongs to ISSUE-394. |
ISSUE-82G17 | The in-app Sabian section now uses the live Node GetDegreeInfo, which returns real text. It still needs evidence that the section appears in 11.1.7. In-app Sabian-symbol widget/section non-functional — one reviewer reports it's been broken 8+ months with no f | easy | none: ae5a8c44 LIVE (sabian_service.dart:37-38 -> NODE_URL component/GetDegreeInfo); Node 54c18daf on origin/master; curl 2026-10-16 returns sabian text; Android widget fixed 42321b63 LIVE | none Open a component summary on an 11.1.7 device; confirm _showSabianSection (component_summary.dart:522) is true | 1 linked customer; latest 2026-08-25 support 10.9.7 (pre-fix) The linked reporter was about the widget; the iOS widget part is ISSUE-460. |
ISSUE-216G18 | Fixes (b) and (c) and the login_failed logging are live in 11.1.7. Claim (a), dropped sessions, is unproven. Reports continue from 11.1.5 users. Forced sign-out / login no longer recognised after the update — 4+ reviewers, never logged, and it strands peo | medium | support 2026-10-13 11.1.5 'updated and it kicked me out'; login_service.dart:418 login_failed (f3c21ecc LIVE); account_screen.dart:399 showForgotPassword:true; 2a7c8dee/2eb84141 LIVE | 11.1.7 adoption Read errors msg='login_failed' reason distribution on 11.1.7 (filter on msg, not info.subsystem) | 48 linked customers; latest 2026-10-13 support 11.1.5 If reasons cluster, open a new row per reason; the group's reset faults are on Node rows. |
ISSUE-507G18 | Recovery no longer lists names: Node asks for them and checks the sender's own account first. Deployed; needs evidence on new threads. Account recovery cannot identify an account: options all named Anonymous, the same account listed three times, | easy | none: Node 32e91d1b/acc7ad6b/717234ae on origin/master (auto-deployed); services/recoveryIdentity.js:45 treats 'anonymous' as WEAK | none Review the next 30 days of Lost User Recovery threads for listed-name options or repeats | 6 linked customers; latest 2026-08-07 support 10.9.7 (pre-fix) Server-side only. |
ISSUE-520G18 | Node fixes carry name and handle forward on registration (pushed 10-02/10-10). Needs a measurement that new registrations no longer create Anonymous parallel rows. Registering from an existing anonymous profile creates a blank parallel profile instead of migrating name/hand | easy | none: Node 9182fe4b, 8709df8a, b3d6a149 on origin/master | none DB query: registrations since 10-10 where the profileId is shared with an app- row and name='Anonymous' | 7 linked customers; latest 2026-09-20 support 11.1.3 (pre-fix) Node area. |
ISSUE-174G19 | The client build is done and live. What is left is content (Planets in Houses rows, translation), tracked in FEATURE-50 and ISSUE-377/379. Journal prompts UI — the Flutter client build for the journalprompts feature (FEATURE-LIST §8g); shared compon | easy | none: 5c04e1c2 LIVE; Prompts tab first in journal.dart:22 (2f6a186a LIVE); endpoint answers 200 | FEATURE-50 / ISSUE-379 Confirm prompt entries keep accruing on 11.1.7 | no linked reports Close as client-complete. |
ISSUE-194G19 | Tarot AI synthesis is shipped (feature audit COMPLETE, 5/5). The register is behind. Post-reading tarot analysis: no AI synthesis surface exists in the app — add the service call and the Analysis | easy | none: 92039341 + 4d9bcae9 LIVE | none Device: finish a reading, tap Analysis, confirm the sheet and the journal save | no linked reports Close. |
ISSUE-267G19 | enginePayload() fixes the null town/lat/lng payload. It is deployed; needs a metric read. AI monthly reports fail with a .NET NullReferenceException — one user retried 7 times and got nothing; transit | easy | none: origin/master routes/ai/reports.js:23,78 uses enginePayload (services/horoscopeRequest.js:56) | none horoscope_calc_failed{errorType} must show no NullReferenceException from the monthly path | no linked reports Node; the engine path is legacy and must not be migrated yet. |
ISSUE-377G19 | The houseless fallback is deployed and Planets in Houses now matches (99 hits). It still misses 219; Progressed Aspects still misses. Planets in Houses prompts unreachable: house is in both halves of the lookup key, 76 requests matched 0 | easy | /events/metrics 2026-10-16: Planets in Houses matched=1 99, matched=0 219; Progressed Aspects matched=0 2; origin/master routes/journals.js:458 | ISSUE-379 (non-en lookups count as misses) Split the misses by lang; if English misses remain, file them as content gaps | no linked reports The fix works; the remaining misses may be language, not keys. |
ISSUE-561G19 | The whitelist of promptable bodies and the AspectClass.isMajor filter are live; nothing is left in code. Journal Prompts tab could ask about asteroids, minor points AND minor aspects -- 'Pallas Inconjunct Natal Nort | easy | none: journal_prompt_service.dart:614-694 promptableBodies/excludedBodyNames/isMajor (449b755a LIVE) | none Spot-check prompts served on 11.1.7 for asteroids or minor aspects | no linked reports Close. |
ISSUE-619G19 | The sentinel fix is live and was proven live on 10-10. The 1,134 lost rows cannot be recovered. A standing _verify.js check has not been written. DATA LOSS I CAUSED: a 'null' sentinel chart id made one erasure delete 1,149 journals for an account owning 15 | easy | none: Node fix on origin/master (14102d4f/b84f8912, 1ac4eaae live proof) | none Write and run a _verify.js check: sentinel rejection fires and no sentinel-keyed journals exist | no linked reports Node; closing requires the standing check. |
ISSUE-171G20 | Token re-registration after login is live. Accounts with notifications on and no token are down from 48,511 to 32. 48,511 accounts have notifications switched ON but hold no FCM token — the core push/retention loop reaches a | easy | _verify.js 2026-10-15: 32 of 41,180 lack a token; login_service.dart:274 (fe163bf1 LIVE) | none Sample the 32 remaining accounts; recheck after 11.1.7 adoption | no linked reports Effectively resolved. |
ISSUE-282G20 | The plugin patch (3423e5a2) is live in 11.1.7. be0ccb87 is a clean-checkout build fix, pushed but not live. Needs a crash read on 300100098. DartMessenger$Reply IllegalStateException still crashing the newest build — 94 reports / 89 users (7.84% of cr | easy | none: 3423e5a2 LIVE; be0ccb87 pushed-not-live (build 99) | Next Android release must contain be0ccb87 (build only) Play errors API: DartMessenger$Reply clusters on 300100098 | no linked reports (group: generic crash reports 2026-09-27..10-02) Pushed-not-live part is build hygiene only. |
ISSUE-283G20 | The FCM background-executor patch is live in 11.1.7. Needs a per-build crash read. Firebase background-message NPE still live on the newest build — 35 reports / 25 users, and every occurrence i | easy | none: 3423e5a2 + 29722424 LIVE | none Play errors API: FlutterFirebaseMessagingBackgroundExecutor NPE on 300100098 | no linked reports Close on a zero for 98. |
ISSUE-284G20 | Symbols are uploading and the aborts are attributed (WebView GL). The headless WebView fix is live. 5.2% of crash-affected users hit an unattributed libc abort/SIGABRT — native debug symbols appear not to be up | easy | none: build.gradle ndk debugSymbolLevel FULL (29722424 LIVE); 350fdd25 LIVE | none Play: libc abort clusters per user on 300100098 vs 095 | no linked reports Premise resolved. |
ISSUE-285G20 | The OOM stopped at 088. A regression guard test that pins the raster dpi is live. Platform-channel OutOfMemoryError (StandardMessageCodec.writeValue) stopped dead at version code 300100088 — f | easy | none: 7d0ab133 LIVE pins the dpi; no reports after 300100088 | none Confirm the guard test runs in CI; Play read on 98 | no linked reports Close. |
ISSUE-286G20 | The renderer-death handler is live. The separate 'Initialization timeout' (~150 users/day) has no row of its own. Crash tail: LoadedApk.getAssets NPE (split-APK load), WebView SIGTRAP, and a barcode-scanner plugin NPE in an | easy | none: 2001a1e1 LIVE; errors 10-03: 450 users Initialization timeout | none Per-build read of renderer-gone on 98; file Initialization timeout separately | no linked reports Split the timeout into its own row. |
ISSUE-394G20 | Broadcast ANR clusters went to 0 on 096 (WorkManager 2.8.1). The ANR rate is 0.12%, under the 0.47% gate. The remaining ANRs are 'root cause unknown'. The ANR breach is the slow-start breach: 169 of 292 affected users ANR in a broadcast receiver that COLD-START | easy | none: 03980098 LIVE; Play 09-29..10-11 TIME_SET/BOOT 0 users on 096 | none Play ANR per-cluster read on 300100098 | no linked reports The headless guard 60d22c7f gets no credit; it is defence-in-depth. |
ISSUE-395G20 | Warm start was 29.77% on 096, still over the 25% gate. The launch-path batch (097/098) has not been measured. Slow start by BUILD: warm has come down 76.4% to 58.5% across six builds and is still 2.3x over Google's gate | medium | Play vitals 2026-10-13: warm 29.77% on 300100096; bcfd3adf/ce4c8db9 LIVE | none Play slow-warm-start by versionCode 300100098 | no linked reports Escalate to a perf specialist only if 98 is still over 25%. |
ISSUE-398G20 | Clock-change broadcast clusters cleared on 096 by the WorkManager bump. The guard ships as defence-in-depth. A clock-change broadcast cold-starts the whole app: ~25 sequential awaits run to service a headless receiver w | easy | none: Play TIME_SET/BOOT_COMPLETED/TIMEZONE_CHANGED 0 users on 096; ce4c8db9/60d22c7f LIVE | Mark: close as 'cleared by a different change' Play cluster read on 300100098 | no linked reports Duplicate of the ISSUE-394 evidence. |