rh.dev

QA Work

Sample QA artifacts from client engagements — bug reports and a release sign-off document. Product and company names have been redacted for confidentiality.

Bug Reports

Functional & Data Integrity Issues

[Redacted]-001

[Credits] Users can exploit free credits by deleting and recreating an account with the same email

Priority
P1
Severity
Major
Type
Security / Business logic
Component
Credits system / Account management

Environment: Internal Testing (V1.0.20) — Samsung Galaxy A22 5G

Test Scenario

When a user deletes their account and creates a new account using the same email address, the free credits are reset and the user is granted a new set of free credits, allowing them to bypass the credit limit indefinitely.

Preconditions

  1. User is logged in
  2. User has an existing account with depleted or partially used free credits

Steps to Reproduce

  1. Use up the free credits on the existing account
  2. Navigate to account management in settings
  3. Clear data
  4. Delete the account
  5. Create a new account using the same email address
  6. Check the credits balance on the newly created account

Actual Result

  1. The new account is granted a fresh set of free credits despite using the same email address as the deleted account
  2. The new account undergoes the onboarding process again

Expected Result

  1. Free credits should not refresh when recreating an account with the same email
  2. The system should retain a record of previously used credits associated with the email to prevent exploitation

Impact

Users can exploit this to get unlimited free credits without paying. Directly affects revenue and subscription conversion, undermining the freemium model and monetization strategy.

[Redacted]-002

[Streak] Streak count does not reset when account is deleted and recreated using the same email

Priority
P1
Severity
Major
Type
Data integrity
Component
Streak system / Account management

Environment: TestFlight (V1.3.63 (4)) — iPhone iOS 26.1

Test Scenario

When a user deletes their account and creates a new account using the same email address, the streak count from the previous account is retained instead of resetting to zero.

Preconditions

  1. User is logged in
  2. User has an existing account with an active streak

Steps to Reproduce

  1. Note the current streak count on the existing account
  2. Navigate to account settings
  3. Delete the account
  4. Create a new account using the same email address
  5. Check the streak count on the newly created account

Actual Result

  1. The streak count from the deleted account is still present on the newly created account

Expected Result

  1. The streak count should reset to zero when a new account is created, regardless of whether the same email address is used
  2. Account deletion should clear all associated data including streak history, journal entries, and chat history tied to that email

Impact

Streak data from a deleted account persists on a newly created account, misrepresenting the user's actual activity. Combined with the free credits exploit, this suggests account deletion is not fully clearing user data — a potential data privacy concern.

[Redacted]-003

[AI Coach] AI coach falsely confirms food log entry that was never created

Priority
P1
Severity
Major
Type
AI behavior / Data integrity
Component
AI Coach — Food journal integration

Environment: Internal Testing (V1.0.18) — Samsung Galaxy A22 5G

Test Scenario

When a user informs the AI coach of a food intake (e.g., "I ate chips and drank softdrinks"), the AI coach confirms that the food has been logged. However, when the user navigates to the food journal, no entry is created for the reported food intake.

Preconditions

  1. User is logged in
  2. User is at the home page

Steps to Reproduce

  1. Navigate to AI coach
  2. Send a message related to food log (e.g., "I ate chips and drank softdrinks")
  3. Observe AI response
  4. Navigate to food journal
  5. Check today's entries

Actual Result

  1. AI responds: "I've added those to your food log" (or similar confirmation)
  2. Food journal: no entry created — food log is empty

Expected Result

  1. Option A — if coach has journal write access: AI confirms the entry AND food items appear in the journal with estimated calories/macros
  2. Option B — if coach does not have write access: AI acknowledges intake conversationally but does NOT claim to have logged it

Impact

The user trusts the AI confirmation and assumes their intake is logged — it is not. Calorie and macro totals for the day are inaccurate. For pre-diabetic or condition-management users, missing food log data is not just a UX issue — it is a health risk.

[Redacted]-004

[Journal] Meal entry added on a past date via '+' icon appears on the current date instead

Priority
P1
Severity
Major
Type
Data integrity / Functional
Component
Journal — Meal entry / Date context

Environment: TestFlight (V1.3.61 (3)) — iPhone iOS 16.1

Test Scenario

When a user navigates to a past date in the journal that has no entry and adds a meal using the '+' icon, the entry is incorrectly logged under the current date instead of the selected past date. This behavior is only observed when using the '+' icon and cannot be replicated using the 'Add a Meal' button.

Preconditions

  1. User is logged in
  2. App is freshly opened
  3. User is on the home screen

Steps to Reproduce

  1. Navigate to the journal page
  2. Go to a past date with no existing entry (e.g., the 11th)
  3. Tap the '+' icon
  4. Select either text or photo entry
  5. Enter a meal description or capture a photo
  6. Tap 'Submit'

Actual Result

  1. The added meal entry appears on the current date instead of the selected past date

Expected Result

  1. The meal entry should be logged under the date it was added on
  2. If the entry falls between existing streak dates, the streak count should update accordingly

Impact

Silently logs entries to the wrong date without any error or warning. Affects data integrity — streaks, daily summaries, and macro tracking are all tied to the correct date. The '+' icon may be referencing the current date instead of the selected date from the journal.

[Redacted]-005

Unit toggle to lb displays quantity as zero due to decimal truncation

Priority
P2
Severity
Minor
Type
Functional / Data display
Component
Ingredient breakdown — Unit conversion

Environment: Internal Testing — Samsung Galaxy A22 5G

Test Scenario

When editing an ingredient in the breakdown and toggling the unit from grams to lb, the displayed quantity becomes 0 instead of the correct converted value (e.g., 20g = 0.04 lb). Other unit conversions such as oz (0.7) and ml (20.0) display correctly, confirming the issue is isolated to the lb unit.

Preconditions

  1. User is logged in
  2. User is in the journal page
  3. There should be an existing meal entry with initial quantity set to 20g

Steps to Reproduce

  1. Tap on the meal entry
  2. Edit the ingredient breakdown (initially set to g with value 20)
  3. Toggle the unit to lb
  4. Observe the displayed quantity value

Actual Result

  1. Value in lb becomes 0.0 instead of the correct converted value (e.g., 0.04 lb)
  2. Total macros remain unchanged, confirming the underlying data is correct

Expected Result

  1. The lb unit should display the correctly converted value with sufficient decimal places (e.g., 20g = 0.04 lb)
  2. At least 2-3 decimal places should be displayed for lb conversions since values for small quantities are very small
  3. Total macros should remain unchanged

Impact

Showing 0 lb is misleading — users may assume no food is logged. If the user edits or saves from the 0 state, it could corrupt the actual stored value.

QA Release Document

[Redacted]

Version 1.0.22 | Android Client

This release improves the re-analysis flow by clearing error prefill text and restoring original prompts, fixes credit deduction timing and chat persistence, ensures the journal scrolls to the top on new entries, and resolves minor onboarding text formatting issues.

System[Redacted] Client
Build / Version1.0.22
StatusDone
Release DateApril 7, 2026
Release Owner[Redacted] / [Redacted]
Reviewed By[Redacted]
PVT By[Redacted], [Redacted]

PVT Report

Most test scenarios passed, confirming correct behavior for AI safety (prompt injection and domain restriction), retry handling, formatting, and markdown rendering.

An issue remains in profile value saving, where height and weight updates are not consistently saved unless the slider fully settles. A minor UI issue was also noted with error message overlap on photo entries, but it does not block functionality.

PVT Test Results

Ticket 120 — AI Safety: Prompt Injection
ResultTest ScenarioRemarks
PassedVerify AI refuses prompt injection attempts.
PassedVerify AI does not reveal system/internal instructions.
PassedVerify safe fallback responses for malicious prompts.
PassedVerify similar/rephrased prompts are blocked.
Ticket 121 — AI Domain Restriction
ResultTest ScenarioRemarks
PassedVerify AI restricts responses to nutrition domain.
PassedVerify unrelated prompts are declined.
PassedVerify AI redirects to nutrition guidance.
PassedVerify fallback responses are user-friendly.
PassedVerify mixed prompts return only relevant guidance.
Ticket 133 — Retry Handling
ResultTest ScenarioRemarks
PassedVerify retry does not pre-fill 'Analysis failed'.
PassedVerify failure text cleared before retry.
PassedVerify retry after restart does not reintroduce error text.
PassedVerify retry uses original input without error labels.
PassedVerify no duplicate failed entries on retry.
PassedVerify journal shows correct final state after retry.
Passed with NotesVerify error message display on failed photo entry.Error message overlaps date.
Ticket 137 — Onboarding Text Formatting
ResultTest ScenarioRemarks
PassedVerify text spacing and formatting.
Ticket 116 — AI Markdown Rendering
ResultTest ScenarioRemarks
PassedVerify markdown formatting renders properly.
Ticket 131 — Profile Value Saving
ResultTest ScenarioRemarks
FailedVerify height updates are saved consistently.Requires slider to settle before saving.
FailedVerify weight updates are saved consistently.Requires slider to settle before saving.
PendingVerify persistence after navigation.Will be further improved by dev.
PendingVerify no mismatch between displayed and saved values.Will be further improved by dev.
PassedVerify persistence after restart/login.
PendingVerify switching between height and weight does not conflict.Will be further improved by dev.
PassedVerify Health Connect sync reflects changes.
Ticket 119 — Date Filters
ResultTest ScenarioRemarks
PassedVerify that the date filter does not allow navigation to future dates in the calorie progress section.
PassedVerify that the date filter does not allow navigation to future dates in the protein progress section.
PassedVerify that the date filter does not allow navigation to future dates in the carb progress section.
PassedVerify that the date filter does not allow navigation to future dates in the fats progress section.
PassedVerify that the forward chevron is disabled when the current date is reached in all affected progress sections.
PassedVerify that the backward chevron is disabled when the user's join date is reached in all affected progress sections.
PassedVerify that the date filter in the journal tab does not allow navigation to future dates.
PassedVerify that the forward chevron in the journal tab is disabled when the current date is reached.
PassedVerify that the date filter restriction applies consistently across all time filters (Day, Week, Month, 6 Months, Year).
Ticket 130 — Nutrition Protocol Time Labels
ResultTest ScenarioRemarks
PassedVerify that the 12AM label is displayed in the correct position representing midnight.
PassedVerify that the 12PM label is displayed in the correct position representing noon.
PassedVerify that the 12AM and 12PM labels are not interchanged.
PassedVerify that the time labels are consistent with the user's configured fasting schedule.
Ticket 145 — Onboarding Subtitle Font Weight
ResultTest ScenarioRemarks
PassedVerify that subtitle texts are displayed in regular weight on Android across all onboarding screens.
PassedVerify that title texts remain bold across all onboarding screens on Android.
Ticket 148 — Parenthetical Text Italic Styling
ResultTest ScenarioRemarks
PassedVerify that parenthetical text (e.g., "(You can change this later)") is displayed in italics on all relevant onboarding screens.
PassedVerify that the main subtitle text is not italicized — only the parenthetical portion.
PassedVerify that the italic styling is applied consistently across all onboarding screens.
PassedVerify that the italic styling for parenthetical text is consistent between Android and iOS.
Ticket 151 — Birthday Display in Profile
ResultTest ScenarioRemarks
PassedVerify that the birthday field in the profile displays only the month and year provided during onboarding.
PassedVerify that the birthday field does not display a day value that was never collected.
PassedVerify that the birthday field does not default to day 1.
Ticket 152 — Add Meal Modal Text Fix
ResultTest ScenarioRemarks
PassedVerify that the text entry description displays "ingredients, and" with a space after the comma.
Ticket 147 — Onboarding Title Text Fix
ResultTest ScenarioRemarks
PassedVerify that the title correctly displays "How many meals do you eat in a day?" with a space between "you" and "eat".
PassedPassed with NotesFailedPending

Rollback Plan

N/A — no rollback required for this release

Tickets

TicketReference
[AI Coach] Internal system rules revealed when prompted with instruction overrideIssue #120
[AI Coach] Responds to unrelated prompts outside nutrition scopeIssue #121
[Journal] Failed entries are pre-filled with 'Analysis failed' title when retryingIssue #133
[Onboarding] Minor UI issuesIssue #137
[Profile] Updating height or weight in Profile is inconsistent and often does not saveIssue #131
[Date Filters] Date filter allows selection of future dates and dates prior to the user's join dateIssue #119
[Nutrition Protocol] 12AM and 12PM labels are interchangedIssue #130
[Onboarding] Subtitle texts on onboarding screen appears boldIssue #145
[Onboarding] Parenthetical text in subtitles should be italicizedIssue #148
[Profile] Birthday displays a day value despite only month and year being collected during onboardingIssue #151
[Add Meal Modal] Missing space after comma in text entry descriptionIssue #152
[Onboarding] Missing space in "How many meals do you eat in a day?" title textIssue #147

This document is confidential and intended for internal QA and development use only. All names and app identifiers have been redacted.