bumicerts-monorepo · beta-auth-bumicert-regression
Agentic UI/E2E regression pass against beta.fund.gainforest.app, focused on email login, handle/password login, Bumicert creation, and cleanup.
No blocking regressions found. Email-code login completed using a sandbox inbox; handle/password login completed for kzoeps.gainforest.id; the authenticated user created and published a temporary Bumicert; the Bumicert was deleted through the UI; and the temporary site boundary was removed from Manage sites.
PDS cleanup confirmed. Before deletion, gainforest.id returned one org.hypercerts.claim.activity record for Beta QA Bumicert 2026-05-14. After cleanup, both org.hypercerts.claim.activity and app.certified.location returned {"records":[]}.
| Flow | Result | Steps performed | Evidence | Notes |
|---|---|---|---|---|
| Email-code login | passed | Opened beta app, launched sign-in modal, submitted sandbox email, inspected received mail.tm code email, entered code, approved gainforest.id OAuth grant, selected Nature Steward. | modal, code screen, OAuth, signed-in result | Verification code is redacted from committed artifacts. |
| Handle/password login | passed | Opened a clean session, switched to Handle, entered kzoeps with the built-in .gainforest.id suffix, completed password login on gainforest.id, and returned authenticated to beta. |
handle tab, PDS password form, authenticated result | Password was read from a local file and is not committed. The beta handle UI splits username and domain suffix. |
| Bumicert creation | passed | Filled cover details, uploaded a temporary cover image, filled impact story, uploaded a GeoJSON site, added the account DID as contributor, selected the site, reviewed all sections, and published. | cover, impact, site/contributor, review, publish | PDS saw org.hypercerts.claim.activity/3mltbmf3znc2x before cleanup. |
| Cleanup/deletion | passed | Deleted the temporary Bumicert through the detail-page modal, then removed the temporary site from Manage sites and confirmed empty PDS collections. | delete confirmation, delete success, site before cleanup, empty sites | Final getRecord for the activity rkey returned RecordNotFound. |
noreply@gainforest.id, entered the code, and approved the OAuth authorization.



kzoeps.gainforest.id.Karma Yoezer in the authenticated header and Manage navigation enabled.
.gainforest.id suffix.
kzoeps.gainforest.id.
Beta QA Bumicert 2026-05-14, a generated cover, and ecological restoration work type.qa-test-site.geojson, added the account DID, selected the site, and accepted permissions.









Before deletion: com.atproto.repo.listRecords on gainforest.id returned the temporary activity record:
uri: at://did:plc:xiplbhvrekwbag7bwazaow4g/org.hypercerts.claim.activity/3mltbmf3znc2x
cid: bafyreibbktjajbdynz7b7nlkhjjme6fq6myed62a2gddm4tegkedn23jqm
title: Beta QA Bumicert 2026-05-14
After cleanup: getRecord for that rkey returned RecordNotFound; final list checks returned {"records":[]} for org.hypercerts.claim.activity and app.certified.location.
Both login methods completed end-to-end and the publish action wrote the expected PDS activity record.
Beta's handle login uses a Username field plus a .gainforest.id suffix selector. This worked, but it is easy to paste the full handle into the username field; helper text could make the expected format clearer.
As on alpha, deleting the Bumicert does not delete the site boundary created during the wizard. I removed the temporary site from Manage sites after deleting the Bumicert.
assets/*.png (39 captured; selected screenshots embedded above)
Inbox metadataemail-login-message-redacted.json
GeoJSON uploadqa-test-site.geojson
PDS before cleanuppds-listrecords-redacted.txt
PDS after cleanuppds-after-full-cleanup-raw.jsonl
Diagnosticsemail-flow-diagnostics.txt · handle-flow-diagnostics.txt