← back to Govarbitrage
apps/mobile/ASC-PASTE-KIT.md
289 lines
# ASC PASTE KIT — GovArbitrage (iOS 1.0) ✅ CORRECTED 2026-08-07
App record **6799165231** · bundle `com.abrams.govarbitrage` · EAS `@agentabrams/govarbitrage` · team `3VAV3KMNZK`
Inflight: https://appstoreconnect.apple.com/apps/6799165231/distribution/ios/version/inflight
---
## 🟥 CURRENT STATE — Apple **Guideline 2.1 · Information Needed** (captured 2026-09-01) — SUPERSEDES the pre-submission checklists below
Build 5 was submitted and **entered review**; on **2026-09-01** App Review returned **Guideline 2.1 – Information Needed** (App Completeness). This is a **request for information plus a video** — it is NOT a reported code/web defect and NOT a request for a new binary. Everything below framed as "4 blockers / Add for Review → Submit" is **pre-submission history, kept for reference only, and marked SUPERSEDED** — it does not apply until this 2.1 reply is sent.
> **On verbatim text:** the exact Resolution Center prose sits behind **View Submission** and was **not** captured to file (read-only console diagnosis only; a screenshot of the Rejected banner exists at `/private/tmp/tk10279-isolated.png`, not committed). The **itemized requirements** below are what WAS captured — from the TK-10279 blocker (`evidence_at` 2026-09-01T21:06Z) and the capture note (2026-09-01T21:49Z). Do not treat the wording here as a verbatim quote.
**Apple's Guideline 2.1 message requested one recording + six disclosures:**
1. **A screen recording of the app in use on a physical device running the latest OS** (simulators do not satisfy this).
2. **Which specific device(s) and OS version** were used to test the app.
3. The app's **main features / functionality**, its **intended audience**, and its **value / purpose** to the user.
4. What **setup or access** is required to fully use the app (demo credentials, hardware, backend).
5. What **external services / third-party integrations** the app uses.
6. Whether the app's behavior/content is **consistent across all regions** where it is available (or region-specific).
7. Whether the app accesses/provides any **regulated, protected, or licensed material** — with an explanation.
**Two deliverables clear this, both drafted in this file:**
- **(A)** the physical-device recording → see **“Physical Recording Shot List — Guideline 2.1”** below.
- **(B)** the reply text → see **“Guideline 2.1 Reply (paste)”** below.
Sending the reply and uploading the video are **customer-facing, Apple-account actions** and remain **Steve's** — the Claude Code harness hard-gates all live App Store Connect writes. No agent has replied, uploaded, or resubmitted.
---
> ⚠️ This file SUPERSEDES the earlier draft that said "Data Not Collected." That was WRONG —
> the app has optional **Sign in with Apple** (`usesAppleSignIn: true`; `expo-apple-authentication`;
> `lib/auth.ts` requests FULL_NAME+EMAIL; `/api/auth/apple` stores appleSub+email+name). Declaring
> "collects nothing" contradicts the binary and risks a post-approval pull. Use the App Privacy
> block below (Email + Name + User ID, App Functionality only). Verified against source 2026-08-07.
Live-state verified today via ASC API + curl:
- **Build 5 = UPLOADED & VALID** (uploaded 2026-08-07 09:41, not expired) → just ATTACH it, no rebuild.
- Privacy URL `…/privacy` → **200** · Support `…` → **200** · `/api/listings` → **200** (reviewer sees live data, no login).
> ✅ **FREE-CLIENT DEPLOY DONE + VERIFIED LIVE (2026-08-08).** The former 2.3.1/3.1.1 blocker
> (reviewer sees an EMPTY analysis because the server redacted money-math for the FREE tier) is
> CLEARED. Fix `0d630cf` is live on auctions.agentabrams.com. Verified via curl 2026-08-08:
> app-client (Authorization header) → `scores: 9, costBreakdown: yes, gated: false` (reviewer
> sees full money-math); browser (no header) → `gated: true` (paywall intact). Deploy memo now
> in `pending-approval/_done/`. **Screenshots + submit are no longer deploy-blocked.**
>
> 📋 **LIVE ASC STATE — read-only API discovery 2026-08-08 (app 6799165231, version 1.0 PREPARE_FOR_SUBMISSION).**
> Most of the listing is ALREADY SET in the console. Confirmed present: build 5 attached,
> description (1826 chars), keywords, promo text, support+marketing URLs, name, categories
> (Business/Finance), privacy-policy URL, **Pricing schedule = SET**, **Content Rights = USES_THIRD_PARTY_CONTENT**
> (that judgment call is already made — the app rehosts listing photos), Export Compliance = false (non-exempt=No),
> iPhone 6.7"/6.9" screenshots (3 shots). Age-rating declaration exists.
>
> ⛔ **SUPERSEDED (pre-submission history, 2026-08-08).** These four items were the *pre-submission* gaps; build 5 was later submitted, reviewed, and returned under **Guideline 2.1 · Information Needed** (see CURRENT STATE at top). The metadata paste blocks further down remain valid reference, but this "4 blockers → Submit" flow no longer describes the state — the 2.1 reply + recording do.
>
> 🔴 **TRUE remaining GovArbitrage blockers — exactly 4 (all Steve ASC-console; harness blocks agent writes to Apple):**
> 1. **Subtitle** is EMPTY → paste `Gov surplus auction arbitrage` (App Information → Localizable → Subtitle).
> 2. **iPad screenshots** = NONE, but build 5 is `supportsTablet:true` → upload the local `ipad-13/` set (2064×2752). *(6.5" iPhone is OPTIONAL — the 6.7"/6.9" set already back-fills it.)*
> 3. **App Privacy** questionnaire = 0 data usages → declare **Email + Name + User ID** (Contact/Identifiers, linked, App Functionality, tracking = No) per the App Privacy block below. Apple blocks submit until this is answered.
> 4. **App Review contact info** = NONE → your name/email/phone + the Notes paste block below.
> Then **Add for Review → Submit** (build 5 attaches in one click — already attached).
>
> ⚠️ NOTE: an agent CANNOT do these — the Claude Code harness hard-blocks live App Store Connect
> external writes even under a verbal "ungate" (correct: outward-facing, hard-to-reverse). Ignore the
> earlier "one-click / nothing missing" framing; this discovered list is authoritative.
---
## ⛔ SUPERSEDED · ASC click-list for Steve (in order) — everything here is a console action (Apple-account gate)
> **SUPERSEDED (pre-submission).** This checklist described first-time submission and is kept for reference. The app is now in a **Guideline 2.1 · Information Needed** state — the actionable path is the 2.1 reply + physical recording (top of file), not this "Add for Review → Submit" list. The paste blocks it references (Name/Subtitle/Description/Privacy/Notes) are still accurate.
- [ ] **Build → Add Build → select build 5** (it's already uploaded & VALID; one click).
- [ ] **Name** → paste block.
- [ ] **Subtitle** → paste block.
- [ ] **Promotional Text** → paste block.
- [ ] **Keywords** → paste block.
- [ ] **Description** → paste block.
- [ ] **Support URL** + **Marketing URL** → paste block.
- [ ] **App Information → Category**: Primary **Business**, Secondary **Finance**.
- [ ] **App Information → Privacy Policy URL** → `https://auctions.agentabrams.com/privacy`.
- [ ] **App Information → Content Rights** → see the "Content Rights" note below (one judgment call).
- [ ] **App Privacy** → the **YES / Email+Name+User ID** block below (NOT "Data Not Collected").
- [ ] **Age Rating** → run questionnaire, all "None" → 4+.
- [ ] **App Review Information → Contact** (your name/email/phone) + **Notes** (paste block) + Sign-In required = **No**.
- [ ] **Export Compliance** → non-exempt encryption = **No**.
- [x] **Pricing and Availability → Price = Free** — ✅ ALREADY SET (confirmed via ASC API 2026-08-08). No action.
- [ ] **App Privacy** → declare Email + Name + User ID (see block below) — ❗questionnaire currently EMPTY, hard submit blocker.
- [ ] **Screenshots** → upload **iPad 13"** (`ipad-13/`, REQUIRED — build 5 is `supportsTablet:true`; currently NONE in ASC). iPhone 6.7"/6.9" ✅ already uploaded (3 shots). 6.5" optional (back-filled by 6.9").
- [ ] **Add for Review → Submit.**
---
## Name — (12/30)
```
GovArbitrage
```
## Subtitle — (29/30)
```
Gov surplus auction arbitrage
```
## Promotional Text — (156/170) *(editable anytime without review)*
```
Turn government surplus auctions into ranked flip opportunities — all-in cost, resale value, ROI, and your max bid computed for every lot. Bid on math, not vibes.
```
## Keywords — (99/100) *(comma-separated, no spaces)*
```
surplus,auction,arbitrage,resale,flip,govdeals,gsa,reseller,liquidation,valuation,roi,bid,wholesale
```
## Description — (~1650/4000) *(feature-accurate — verified against app/listing/[id].tsx + lib/types.ts)*
```
GovArbitrage turns messy government-surplus auctions into clear, ranked flip opportunities. Point it at a lot and it answers the only question that matters: if you win at the current bid, what is your all-in cost, what can you resell it for, how fast, and how much do you actually make?
WHAT IT DOES
• Aggregates listings from major government auction sources — GovDeals, GSA Auctions, Public Surplus, Municibid, Bid4Assets, and county / state / university surplus.
• Identifies what each lot actually is from its title and photos, then anchors it to a real new-retail price.
• Builds a full valuation ladder — replacement, average, and used-market resale across sell-today, 7-, 30-, and 90-day horizons, with an expected sale price, probability of sale, and days-to-sold.
• Breaks down 20+ real costs — buyer's premium, sales tax, shipping, freight, packing, pickup labor, testing, repairs, marketplace and payment fees, storage — into total investment, net profit, ROI, and annualized return.
• Back-solves your recommended max bid from a target ROI, so you know your ceiling before you bid.
• Ranks every lot across nine opportunity profiles — Best Arbitrage, Quick Flip, Collector, Local Pickup, Easy Freight, Parts Only, High Confidence, High Profit, and Overall Opportunity — each with plain-English reasoning.
WHY IT IS DIFFERENT
The numbers come from deterministic, explainable engines — not a black box. Every value and every cost is transparent and traceable, so you can trust the recommended bid instead of eyeballing it.
PRIVACY-FIRST
No tracking. No ads. No analytics or advertising SDKs. The app works fully without an account; optional Sign in with Apple is used only to authenticate you.
GovArbitrage is built for resellers, flippers, and surplus buyers who want to stop guessing and start bidding on math.
```
## Support URL
```
https://auctions.agentabrams.com
```
## Marketing URL *(optional)*
```
https://auctions.agentabrams.com
```
## Privacy Policy URL ✅ verified 200
```
https://auctions.agentabrams.com/privacy
```
## Categories
```
Primary: Business
Secondary: Finance
```
## Pricing and Availability ⚠️ live-validation 2026-08-08 found this UNSET (hard submit blocker)
```
Price: Free (Tier 0)
Availability: All territories (default)
No in-app purchases — GovArbitrage ships as a FREE CLIENT (the "free client" decision).
```
## Age Rating
```
4+ — answer every content item "None"; capability questions "No"
(Unrestricted Web Access = No; Simulated Gambling = None; Made for Kids = No)
```
---
## App Privacy ✅ CORRECT ANSWER (do NOT use "Data Not Collected")
"Do you or your third-party partners collect data from this app?" → **YES**
Check EXACTLY these three data types — each collected ONLY via optional Sign in with Apple:
| Data type | Category | Linked to identity? | Used for tracking? | Purpose |
|----------------|---------------|---------------------|--------------------|------------------|
| Email Address | Contact Info | Yes | No | App Functionality|
| Name | Contact Info | Yes | No | App Functionality|
| User ID | Identifiers | Yes | No | App Functionality|
Leave everything else UNCHECKED (no Usage Data, no Diagnostics/Crash, no Location, no Financial
Info, no Purchases, no Device IDs, no Advertising Data — the app links no analytics/ads SDKs).
Tracking question → **No** (no ATT prompt required).
Note: even if a user picks Apple "Hide My Email," you still store an email-format address → still declare Email Address.
## Export Compliance
```
Uses non-exempt encryption? → NO
(standard HTTPS/system crypto only; Info.plist ITSAppUsesNonExemptEncryption = false — no docs upload)
```
## Content Rights (App Information) ⚠️ one judgment call for Steve
The app renders government-auction listing data (titles/specs are public records) and can show
"Listing photos" pulled from the source auctions. Two truthful options:
- If the app only shows public government-auction FACTS + links out to the source → answer
**"No, it does not contain, show, or access third-party content."**
- If it re-displays third-party auction PHOTOS in-app (it renders a "Listing photos" section) →
answer **"Yes, it contains third-party content"** and confirm you have the rights/permission.
Recommendation: pick based on whether build 5 actually rehosts source photos. Flagging because
attesting rights to third-party auction photos is the one place this could bite.
## App Review Information → Notes *(paste)*
```
GovArbitrage is a read-only analyst client for PUBLIC U.S. government-surplus auction listings. No account or sign-in is required to review the app.
HOW TO TEST
1) Launch the app and open the "Listings" tab. It loads live government-surplus auction opportunities immediately — the app ships preconfigured to our public API server (https://auctions.agentabrams.com), so there is no setup or login step.
2) Tap any listing to see the full analysis: all-in cost breakdown, resale value across 7/30/90-day horizons, expected net profit, ROI, recommended max bid, and nine opportunity scores.
3) The "Settings" tab shows the server URL plus an OPTIONAL username/password, used only by people who self-host their own GovArbitrage server. These are NOT required for review — no credentials are needed; leave those fields blank / at their defaults and data loads.
PRIVACY: No tracking, no ads, no analytics SDKs. The app works without an account; the optional "Sign in with Apple" stores only your Apple ID and (if shared) name/email to authenticate you. Full policy: https://auctions.agentabrams.com/privacy
```
## App Review Information → other fields
```
Sign-In required: No (toggle OFF)
Contact: your name / email / phone
```
---
## Physical Recording Shot List — Guideline 2.1 *(physical device, LATEST OS — simulators do not satisfy Apple)*
**Device:** iPhone `00008150-001039662E3B401C` running **iOS 26.6.1** (latest OS installed on this device).
**App under test:** GovArbitrage 1.0 (**build 5**, EAS cloud build) — install via TestFlight; there is no local `.ipa` to side-load (Steve's on-device action if not already installed).
**Length:** ~30–60s, one continuous take, portrait, physical device only. Capture with QuickTime (New Movie Recording → iPhone source) or the on-device screen recorder, or the scripted `device-proof-evidence/capture-lib.sh` (ffmpeg + AVFoundation). Save as `govarbitrage-device-proof-<ISO>.mov` + key still frames.
Journey (verified against source: `app/(tabs)/index.tsx`, `app/listing/[id].tsx`, `app/(tabs)/settings.tsx`, `lib/auth.ts`):
1. **Cold launch** — from the home screen, tap the app icon; show the splash resolve into the app (proves it launches clean on the device).
2. **Opportunities tab** (`(tabs)/index`) — live government-surplus listings load immediately with **no login / no setup** (app ships preconfigured to `https://auctions.agentabrams.com`). Pause on the feed; optionally touch a sort chip.
3. **Open a listing** (`listing/[id]`) — scroll slowly through the full analysis so the reviewer sees the core value: **Recommended Max Bid** callout, **Valuation** ladder (7/30/90-day), **Cost Breakdown & Profit** (all-in cost → net profit → ROI), and the **Scores** grid (nine opportunity profiles).
4. **Settings tab** (`(tabs)/settings`) — show the server URL default, then run **Connection Test** (`handleTest` → `testConnection`) and let it return success (proves the live backend works with no credentials).
5. **(Optional) Sign in with Apple availability** — scroll to show the **Sign in with Apple** button is **present/available** in Settings. **DO NOT tap it / do not complete sign-in** — the recording only proves the optional auth is *available*, per the TK-10279 gates.
> Gate reminder: read-only device inspection + local screen recording ONLY. No ASC write, no Resolution Center reply, no binary upload, no resubmit, and no completed identity action.
---
## Guideline 2.1 Reply (paste) — App Review response *(draft; Steve pastes into Resolution Center — sending is Steve's gated action)*
*Facts below are verified against the mobile source and the live API; no reviewer credentials are required — the app loads live data with no login.*
```
Thank you for reviewing GovArbitrage. The requested information is below, and a screen recording of the app running on a physical iPhone (iOS 26.6.1) is attached to this Resolution Center response.
1) DEVICE(S) AND OS TESTED
Physical iPhone running iOS 26.6.1 (the latest OS on our test device). Version reviewed: 1.0 (build 5). The binary also supports iPad.
2) MAIN FEATURES, INTENDED AUDIENCE, AND VALUE
Features: GovArbitrage is a read-only analyst client for PUBLIC U.S. government-surplus auction listings. It aggregates listings from public government and institutional surplus sources (GovDeals, GovPlanet, GSA Auctions, Public Surplus, GoIndustry, Municibid, Bid4Assets, and county/state/university surplus). For any lot it computes an all-in cost breakdown (buyer's premium, sales tax, shipping/freight, packing, fees, storage, and more), a resale-value ladder across 7/30/90-day horizons, expected net profit and ROI, a recommended maximum bid back-solved from a target ROI, and nine plain-English opportunity scores. All figures come from deterministic, explainable engines.
Audience: resellers, flippers, and surplus buyers who evaluate government-surplus auction lots before bidding.
Value: it turns messy public-auction listings into ranked, quantified flip opportunities so a buyer decides what to bid based on computed cost, resale value, and ROI instead of guessing.
3) SETUP OR ACCESS REQUIRED
None. No account or sign-in is required to review or use the app. It ships preconfigured to our public API server (https://auctions.agentabrams.com) and loads live listings on launch — open the Opportunities tab and data appears with no setup. The Settings tab shows the server URL and an OPTIONAL username/password used ONLY by people who self-host their own GovArbitrage server; these are not required for review — no credentials are needed, so leave those fields blank / at their defaults and data loads. "Sign in with Apple" is OPTIONAL and only authenticates a user; no feature requires it.
4) EXTERNAL SERVICES / THIRD-PARTY INTEGRATIONS
- Our own public backend API at https://auctions.agentabrams.com, which serves the aggregated public-auction data (the reviewer sees live data with no login).
- Sign in with Apple (expo-apple-authentication) for optional authentication only.
- The app displays "listing photos" that originate from the source auction listings (third-party content, declared under Content Rights = Uses Third-Party Content).
There are no analytics SDKs, no advertising SDKs, and no tracking.
5) REGIONAL CONSISTENCY
The app behaves identically in every region where it is available (all territories). There are no region-locked features and no per-region content gating. The interface is English and the content is public government/institutional surplus-auction listings, predominantly U.S.
6) REGULATED, PROTECTED, OR LICENSED MATERIAL
The app does not provide any regulated, licensed, or age-restricted material (no gambling, no financial-account services, no medical or similar content). It surfaces PUBLIC government-surplus auction facts — titles and specifications are public records — and rehosts listing photos from the source auctions, which is disclosed under Content Rights = Uses Third-Party Content. There is no user-generated content and no in-app purchases.
Full privacy policy: https://auctions.agentabrams.com/privacy
```
---
## Screenshots — ✅ READY (generated 2026-08-07, all 3 money shots per size)
All sets live in `apps/mobile/store-assets/screenshots/`. Content: (1) Opportunities feed,
(2) Listing detail — valuation ladder + cost breakdown + recommended max-bid + scores, (3) Settings.
| ASC display set | Dimensions | Folder | Notes |
|-----------------|-----------|--------|-------|
| **iPhone 6.9"** | 1320×2868 | `framed-*-6.9.png` | Primary iPhone set — upload these; back-fills 6.5" too |
| **iPhone 6.5"** | 1242×2688 | `iphone-6.5/` | Literal 6.5" set (clears the explicit "6.5-inch iPhone" blocker) |
| **iPad 13"** | 2064×2752 | `ipad-13/` | Required because build 5 has `supportsTablet:true`; designed frames |
Upload iPhone (6.9" or 6.5") + iPad 13" and both screenshot blockers clear.