Repository navigation
v1.14.0
DevOps Interview AI — v1.14.0
Testers and reviewers can now open the two Pro screens with a link, instead of
looking at a price list with no way past it.
v1.13.0 put Practice & quiz and Resume review behind a plan, and
payments are not live yet — which left both screens closed for everyone,
including the people asked to test them. This release adds the one door that
was missing.
🔓 Test access by link
Tapping the unlock link opens the app and grants test access on that device.
The screen says so in plain words rather than looking exactly as it did a
second earlier:
Test access is recorded as a tester unlock, not a purchase. The two are
stored separately on purpose: the day a refund has to be honoured, "was this
actually bought?" should be a question with an answer rather than a guess.
How to use it
- Install v1.14.0 — from the link below, or with Check for Updates on
the interviewer selection screen if you already have an earlier build. - Open the app once and let the one-time Gemma download finish. The link
does not skip this step; the model is what the interviews run on. - Tap the unlock link you were given. It looks like
mockops://pro?unlock=…and only works in this app — there is no website
to visit and nothing to log into. Tap it in the messenger where you received
it. - The app opens on the screen above. Tap Back to the interviewers.
You did not receive a code with this release, and that is deliberate: the code
is handed out privately to people testing the app. If you are testing and do
not have one, ask whoever invited you.
What it opens
The Practice & quiz and Resume review pills lose their PRO chips and
simply work:
| The pills, unlocked | Practice & quiz, open |
|---|---|
Everything else is unchanged — the interviews, the five-stage hiring pipeline,
the resources and your history were free before and stay free.
Good to know
- It applies to one device. The unlock is stored on the phone, like
everything else this app knows about you. Clearing app data removes it; the
same link restores it. - Tapping the link twice changes nothing. A device that already has access
keeps the access it has, and the banner does not reappear. - Payments are still not live. A tester unlock is not a purchase, and the
pricing screen keeps saying so on every path through it.
🧪 Test coverage
TesterUnlockTest— an empty configured code matches nothing, including
an empty value. Without that check, every build that forgot to set the code
would ship a working unlock for anyone who typed the link with a blank value.ProScreenTest(instrumented, new) — the three ways into the Pro screen
say three different things: refused from a locked pill, opened by the unlock
link, or opened with neither. It fails if the screen ever announces a lock in
the same breath as opening it.ProEntitlementStoreTest(instrumented) — extended for the new "where did
this entitlement come from" record.ProPlanIdParsingTest— an unrecognised source reads as "not recorded",
never as "locked"; the opposite would lock out anyone upgrading over an
entitlement written before this release.
✅ Verified
On a physical Samsung SM-T735 (Android 14): a wrong code writes nothing at all,
the right one records the grant, the banner appears without also announcing a
lock, the gated pills lose their PRO chips, Practice opens, and a second tap on
the same link leaves the original grant untouched. Instrumented suites for the
Pro screen and the entitlement store pass on the device, 12 tests in total.
Known limitations
- The gate is a product boundary, not a security one. There is no server —
that is the whole point of this app — so access is a local flag, and anyone
with adb can set it. The unlock code ships inside the APK, so it is not a
secret; what it buys is that access is not handed to everyone who opens the
app. Real enforcement arrives with Play Billing, together with the ability to
actually buy a plan. - A build made without the code has no unlock at all. That is intentional:
the alternative is a fallback value that quietly ships a working unlock in
every build that forgot to set one.