Loop #1 — First Real External Veteran (Jose)¶
Date: 2026-09-04
Result: PASS — first full WIN net-new loop on prod with a real external veteran
Milestone: First real external veteran completes the full coordination journey on prod — not the founder, not a synthetic fixture account
Tag: loop1-first-real-external-veteran-2026-09-04
Distinction from prior Loop #1 milestones:
| Prior milestone | Tag | What it proved |
|---|---|---|
| L1-7 keystone | l1-7-keystone-2026-09-03 |
Coordination machinery (ledger, §3.1, negatives, denominator) via API/runner |
| Real-veteran journey core | real-veteran-journey-core-2026-09-04 |
Same three-party close walkable in browser on founder-linked fixture (curryrg@gmail.com) |
| This milestone | loop1-first-real-external-veteran-2026-09-04 |
External veteran (jrdelacruz.a@gmail.com) through WIN invite → DD-214 → Pathway 1 org-admin review → enrollment → hiring loop → VERIFIED |
Veteran¶
| Field | Value |
|---|---|
| Name | Jose (external; not Ryan) |
jrdelacruz.a@gmail.com |
|
| last1.app user_id | a3cbfcca-7a12-45cd-a544-7026f27dcd9f |
| Last1 ID identity_id | e65c4e30-1cbe-452a-a3d7-a70b05362b79 |
| Delivering org | Warriors In Need (warriors-in-need) |
| Program | Veteran Employment Services (adf7bd97-a7ec-44e8-a178-2ff106a235db) |
| Beneficiary id | 77de3d14-d31b-46bd-b160-5d53eb3b17c2 |
Verified loop¶
| Field | Value |
|---|---|
| loopId | 07b1fbcd-58ed-422f-8e7b-1d80afc6bca4 |
| Employer (Path A) | ryan@last1.enterprises @ last1.enterprises |
| Environment | Sovereign prod — https://last1.app |
| Opened | 2026-09-04T21:36:14Z |
| Verified | 2026-09-04T21:39:55Z |
| Final UI | /member/progress — "All three parties confirmed your placement. This loop is complete." (Λ verified) |
Λ progression (ledger)¶
| seq | event_type | resulting_lambda | time (UTC) |
|---|---|---|---|
| 1 | loop_created |
open |
21:36:14 |
| 2 | attestation |
partial |
21:37:40 |
| 3 | attestation |
partial |
21:38:21 |
| 4 | attestation |
verified |
21:39:55 |
Journey (prod, in order)¶
| Step | Actor | Surface | Result |
|---|---|---|---|
| 1 | WIN org admin | Beneficiary invite | Jose invited to WIN |
| 2 | Jose | Invite accept | Email-match security held — accept tied to invited email (invite_accepted_at 20:54:42 UTC) |
| 3 | Jose | Last1 ID /credentials |
Uploaded real SSN-redacted DD-214 PDF |
| 4 | Ryan (WIN org admin) | last1.app → Org Settings → Verification | Pathway 1 human review — first time Ryan verified a veteran who is not himself |
| 5 | WIN org admin | Beneficiary detail | Enrolled in Veteran Employment Services |
| 6 | WIN org admin | Dashboard | Opened hiring loop (employer email → per-loop domain) |
| 7 | WIN org admin | Dashboard | Confirm delivery → Λ partial |
| 8 | Jose | /member/progress |
Confirm placement → Λ partial |
| 9 | WIN org admin | Dashboard | Issue employer magic link |
| 10 | Employer | /public/hm-attest/:token |
Confirm hire → Λ verified |
Review queue for Pathway 1 is not auth.last1.id platform admin (Pathway 2). Correct surface: last1.app org-admin Verification tab.
Security proofs on a real second person¶
Email-match on invite accept¶
Beneficiary row shows email = jrdelacruz.a@gmail.com, invite_accepted_at set, user_id linked. Accept succeeded only with matching invited email — anti-fraud invite binding proven on external user, not just founder fixture.
Pathway 1 org-admin DD-214 review¶
| Field | Value |
|---|---|
DD214_AUTO_CONFIRM_ENABLED |
false (human review required) |
| Reviewer | Org admin (WIN), not platform admin |
| First DD-214 review approved | 335a27d9-851a-4288-8a1c-3e59bade196a |
| Duplicate review (double-submit; see friction) | 931fccc7-beda-484d-99f9-900f41fcc243 (also approved; no credential harm) |
| Confirmation | identity_veteran_confirmations.status = confirmed, veteran_verified credential active |
Ryan confirmed veteran status through WIN org-admin review on a real external identity. Pathway 1 anti-fraud gate works as designed.
Four real bugs surfaced (Jose) — patched¶
Jose's run is the value of a real external user: four product bugs, all addressed in last1.id (commit on fix/dependency-audit-browserslist, tag loop1-first-real-external-veteran-2026-09-04).
| # | Bug | Fix |
|---|---|---|
| 1 | Cloud PDF upload (Drive / iCloud / email) — cloud-only pick had no readable bytes → NetworkError |
Fixed — preparePdfForUpload() hydrates PDF via arrayBuffer() on pick + submit; Chromium uses showOpenFilePicker() for OS/cloud-aware picker; rejects zero-byte placeholders at pick time with actionable copy (not a silent network fail) |
| 2 | Submit stayed clickable after success — duplicate DD-214 review rows | Fixed — modal locks after success / existing pending |
| 3 | No Pending on credentials page | Fixed — Pending badge via /api/veteran-confirmation/status |
| 4 | Stale org Verification row after approve | Fixed — dismiss/filter pending reviews for already-confirmed identities |
Cloud upload note: Web upload accepts PDFs from Drive, iCloud, and email when the browser can read bytes (normal file picker / share-sheet behavior). We do not require "save to device first" as the primary path. If the OS exposes a cloud placeholder with zero bytes, the veteran sees an immediate read error at file selection, not a failed submit.
Additional friction (not counted in the four): rate limit after retry storm (10/15min/IP), opaque 413 before patch, wrong admin portal for Pathway 1 (docs).
UX friction (full log)¶
Findings from Jose's session.
| # | Friction | Severity | Status |
|---|---|---|---|
| 1 | Google Drive / cloud PDF — see four bugs table above | High | Fixed (hydrate + cloud-aware picker) |
| 2 | Submit stayed clickable after success | High | Fixed |
| 3 | Rate limit after failed retries + double-submit | Medium | Expected under retry storm |
| 4 | No "Pending review" on credentials page | Medium | Fixed |
| 5 | Org Verification tab stale after approve | Medium | Fixed |
| 6 | Oversized PDF (>20 MB) opaque 500 | Low | Fixed |
| 7 | Wrong admin portal (Pathway 2 queue empty for Pathway 1) | Low | Docs |
| 8 | Browser extension console noise | N/A | Ignore |
What worked (design confirmation)¶
- WIN org-invited acquisition → Pathway 1 routing to org-admin review
- Real DD-214 upload → LastVet storage → human confirm → Last1 ID credential
- Beneficiary link → member account with verified Last1 ID checks
- Three-party coordination loop close to verified on
/member/progress - Per-loop employer domain gate (
last1.enterpriseson this loop) - Email-match invite accept on external email
Repo tags¶
| Repo | Tag | Notes |
|---|---|---|
lastvet-gates |
loop1-first-real-external-veteran-2026-09-04 |
This closeout |
last1.app |
loop1-first-real-external-veteran-2026-09-04 |
Journey completed on prod |
last.vet-api |
loop1-first-real-external-veteran-2026-09-04 |
DD-214 storage/parse path used |
last1.id |
loop1-first-real-external-veteran-2026-09-04 |
Pathway 1 review + upload hardening |
muster |
loop1-first-real-external-veteran-2026-09-04 |
Tracker item marked done |
Also push prior local-only milestone tags to GitHub:
| Tag | Repos |
|---|---|
real-veteran-journey-core-2026-09-04 |
lastvet-gates, last1.app, last.vet-api, muster |
l1-entry-2026-09-02 |
lastvet-gates (if not already on remote) |
Related closeouts¶
docs/architecture/LOOP1_L1-7_KEYSTONE_CLOSEOUT.md— machinery keystonedocs/architecture/LOOP1_REAL_VETERAN_JOURNEY_CORE.md— browser walkthrough (founder fixture)LOOP_LEDGER_AND_PROOF_MACHINE_SPEC.md— proof machine design law
Next: second real-veteran proof (hardened flow)¶
Goal: Confirm Jose-fixes hold for a second real external veteran — especially cloud PDF upload — not a one-off.
Recommended setup:
- Veteran: Ryan coordinates a second real person, OR create a fresh beneficiary invite to a clean email (not Jose, not founder fixtures).
- Path: WIN invite → accept (email-match) → Last1 ID DD-214 upload from Google Drive or iCloud if possible → Ryan org-admin Verification (Pathway 1) → enroll → open loop → three-party close → VERIFIED.
- Pass criteria:
- DD-214 uploads without
NetworkErrorfrom cloud picker (or clear pick-time error if OS gives zero bytes) - Single pending review row (no double-submit)
- Credentials show Pending → Active
- Org Verification queue empty after approve
- Loop reaches verified on
/member/progress - Muster tracker id:
loop1-second-real-external-veteran-proof(status: next)
Do not reuse Jose's beneficiary row. New invite, new Last1 ID session (or verified test account), new loop.