← AstroMatrix Reports — all pages AstroMatrix 11.0.1 Release Checks Pre-release QA · build 11.0.1+300100091 AstroMatrix 11.0.1 Release Checks Every check below traces to a specific commit that has not yet reached a user. Tap a box once for pass, twice for fail. Progress is shared — Mark sees what you tick. Last shipped 2026-09-09 Unreleased commits 100 Checks 0 No astrology needed 0 0/0 done · 0 failed All checks No astrology needed Not yet done Astrology knowledge — checks tagged chart need someone who can tell a correct chart from a wrong one. Skip those if you're unsure; a wrong "pass" is worse than no answer. Already live — server checks are backend fixes already deployed to production, so they can be tested on the current build without waiting for the release. If something fails, write what you saw in the box. "Doesn't work" can't be fixed; "tapped Transits, landed on Facets not Matrix" can. Generated from the commit range since the 2026-09-09 release. Tier order is by cost of shipping it broken, not by effort. If you only have an hour, do 1, 3, 5, 8, 9, 15, 22. [SCRIPT] const DATA = [ {id:"t1", sev:"Tier 1", name:"Money & entitlement", why:"A bad release here costs revenue and cannot be hot-fixed on the client. Do these first.", items:[ {n:1, t:"Guest purchase follows you into your account", d:"On a fresh install, buy WITHOUT logging in. Then log in. Your purchase must still be there.", c:["1c315c69"]}, {n:2, t:"Force-close mid-purchase", d:"Start a purchase, force-close the app while it is processing, reopen. It should complete once — not charge or record twice.", c:["6525fbe9","0d98c608"]}, {n:3, t:"Two accounts, one device", d:"Log in as A (who has paid), log out, log in as B (who has not). B must NOT have premium.", c:["6525fbe9","0d98c608"]}, {n:4, t:"Restore purchases", d:"On a device with a lifetime purchase, use Restore Purchases. Access comes back.", c:[]}, {n:5, t:"Free profile limit is honest", d:"As a free user, add profiles until you are blocked. The number you were promised must be the number you actually get.", c:["94848a3d","d19c9c1c"]}, {n:6, t:"Paywall copy claims nothing false", d:"Read every line of the paywall. Storage, 24/7 support, API access and language claims were removed as untrue. Flag anything still promising something we do not do.", c:["a16c5d50","cc4058bf"]}, {n:7, t:"Web checkout end to end", d:"Buy through the website. Payment completes and access appears in the app.", c:["4941ef87"]}, {n:8, t:"Register with a CAPITALISED email", d:"Register as Test.User@Gmail.com, then log in as test.user@gmail.com. Same account, profiles and purchase intact. This previously created two separate accounts.", c:["2eb84141","c6522651","f939e5f"], tags:["server"]}, {n:9, t:"A refund removes access", d:"If you can trigger a store refund on a test purchase, premium must go away.", c:["280baf8"], tags:["server"]} ]}, {id:"t2", sev:"Tier 2", name:"Chart accuracy", why:"Wrong data is the single most common complaint in our store reviews. These need someone who can read a chart.", items:[ {n:10, t:"Aspect grid shows every aspect", d:"Open the aspect grid. Check that Ascendant and Midheaven aspects appear, and spot-check against a chart you know. TWO separate bugs were silently hiding real aspects — this is the highest-value check on the list.", c:["f7146db1","1de9a354"], tags:["chart"]}, {n:11, t:"Applying vs separating labels", d:"Check the A/S labels on transit aspects. They were backwards for every direct-moving body.", c:["bc8a39ec"], tags:["chart"]}, {n:12, t:"South Node and True Node", d:"South Node draws its own glyph (it was drawing Earth's). True Node is labelled “True Node”, not “North Node”.", c:["54aadf07","d1060f1c"], tags:["chart"]}, {n:13, t:"Sidereal stays sidereal", d:"Open a profile set to sidereal. It must not quietly show a tropical chart.", c:["879ea026"], tags:["chart"]}, {n:14, t:"Big-three degrees", d:"Sun/Moon/Rising degrees should be the degree within the sign (0–29), not a number up to 360.", c:["18690c28"], tags:["chart"]}, {n:15, t:"Timezone re-derives after you change the date", d:"Pick a birth location FIRST, then change the birth date/time. The timezone offset must update. Also try a birth on a daylight-saving changeover day, and a relocation chart.", c:["23027526","03f030ba","8701df9b"], tags:["chart"]}, {n:16, t:"Sabian symbol is one line", d:"A Sabian symbol shows the short phrase (“A square brightly lighted on one side”), not a wall of text.", c:["ae5a8c44","73076a83"]}, {n:17, t:"Current Journey uses the transit date", d:"Change the app's transit date. Current Journey on the home screen must move with it — it used to show today regardless, disagreeing with Daily Overview right beside it.", c:["4dc71aef"], tags:["chart"]} ]}, {id:"t3", sev:"Tier 3", name:"Notifications", why:"48,511 accounts have notifications switched on but hold no working token. This is the fix for that.", items:[ {n:18, t:"Push survives a logout", d:"Log out, log back in, then confirm a notification still arrives. Tokens used to die on logout and never come back.", c:["fe163bf1"]}, {n:19, t:"Notification opens the right screen", d:"Tap a notification. It must land on the thing it is about, not dump you on Home.", c:["b34951d9","33baf158"]} ]}, {id:"t4", sev:"Tier 4", name:"New features", why:"First contact with real users. Bugs here shape the reviews for this release.", items:[ {n:20, t:"Journal prompts", d:"Open the Prompts tab. Check it reads as prompts, not as journal entries, and that buttons which look disabled are not actually clickable. Then confirm prompts still appear on an account with NO birth chart.", c:["9b00c965","5c04e1c2"]}, {n:21, t:"Astrocartography", d:"Re-enabled with two ways in. Confirm both open it.", c:["cc16f4ba"]}, {n:22, t:"Matrix leads with what's active", d:"Matrix shows active influences first, with attribute counts.", c:["48c3725d"], tags:["chart"]}, {n:23, t:"Reports in your language", d:"Set the app to a non-English language and generate an AI report. It must come back in that language.", c:["e6c07df5","ef02eab1","788e90cd"]}, {n:24, t:"Reports read well and claim nothing invented", d:"Generate a Matrix report. It should never come back empty, should not name third parties, and should say which chart an influence came from.", c:["5eb259e","3586e3d","9c46a1f"], tags:["server"]}, {n:25, t:"Tarot card traits are right", d:"Open a tarot card — try Eight of Swords. Its traits must match what the card actually means; a second, wrong data source was being used.", c:["8080e1ba"]}, {n:26, t:"Friend search finds people", d:"Search for a friend by handle. It returned nothing at all for three separate reasons; also confirm it works WITHOUT being a registered account.", c:["4ee9927","e778f4e"], tags:["server"]}, {n:27, t:"A new account gets a handle", d:"Launch with an account that has no handle. It should be given one — without a handle, nobody can find that profile at all.", c:["76815ed6"]} ]}, {id:"t5", sev:"Tier 5", name:"Navigation & UI", why:"These are deliberate layout changes. They carry the highest risk of users reporting that something 'disappeared'.", items:[ {n:28, t:"Transits button", d:"Home → Transits lands on Matrix with All Transits selected.", c:["73076a83"]}, {n:29, t:"Store is still reachable", d:"The crown icon in the top bar was removed on purpose. Confirm Store still opens from the Menu, AND that Profile → Account still shows Store plus Password, Delete Account and Logout.", c:["73076a83"]}, {n:30, t:"Subscription panel sits above the ad", d:"On any page showing both, the subscription panel is above the advert.", c:["73076a83"]}, {n:31, t:"Unread badge on menu-less screens", d:"The unread message badge shows on screens that hide the menu.", c:["25233863"]}, {n:32, t:"Paging while zoomed", d:"Zoom into a chart, then page between charts using the strips at the screen edge.", c:["a0b21768"]}, {n:33, t:"Search returns results", d:"Content search returns results (it was silently redirecting). Birth-location search with a nonsense town shows a proper 'nothing found' message, not a blank.", c:["54be15e1","6fc9e452"]}, {n:34, t:"Decan tile opens something", d:"Tap a decan. The page has content — it used to open empty.", c:["5371537a"]} ]}, {id:"t6", sev:"Tier 6", name:"Bad network & edge cases", why:"Easy to skip, ugly in reviews. Test these with a deliberately bad connection.", items:[ {n:35, t:"App works on a flaky connection", d:"Turn on airplane mode mid-use, or throttle the connection. Reading things must still work; the app must not decide the server is down because one request failed.", c:["03bdf280","e5c736e8","7cd41615"]}, {n:36, t:"Single-profile account skips the picker", d:"An account with exactly one profile should go straight in, not stop on a chooser.", c:["b779bbf1","ac39d800"]}, {n:37, t:"Switching account brings your data", d:"Switch an account to a different email. Journals, tarot readings and messages must come with it — they used to be left behind.", c:["54b10c8","593afc9"], tags:["server"]}, {n:38, t:"Support never repeats itself", d:"Reply to a support conversation a few times. You must not get the same canned answer twice in a row.", c:["f1172e6"], tags:["server"]} ]} ]; const GLYPH = {pass:"✓", fail:"✕"}; const state = {}; // id -> {s:'pass'|'fail', note, by} let db = null, ME = "tester"; function esc(s){return String(s).replace(/[&<>"]/g,c=>({"&":"&","<":"<",">":">",'"':"""}[c]));} function build(){ const root = document.getElementById("tiers"); let total = 0, easy = 0; DATA.forEach(tier=>{ const sec = document.createElement("section"); sec.className = "tier " + tier.id; sec.innerHTML = `
${esc(tier.why)}
`; const box = sec.querySelector(".items"); tier.items.forEach(it=>{ total++; const tags = it.tags || []; const isAstro = tags.includes("chart"); if(!isAstro) easy++; const el = document.createElement("div"); el.className = "item"; el.dataset.id = "c"+it.n; el.dataset.astro = isAstro ? "1" : "0"; el.innerHTML = `${esc(it.d)}