Skip to content

WIN onboarding and veteran flow

Repeatable QA plan for last1.app. Two people running this document should hit the same screens and the same expected results.

Record each run in the log at the bottom. Leave the Pass/Fail column blank until you execute that step. Do not copy a previous run's marks forward.

This plan uses a disposable organization. Do not run it inside the live WIN organization.

Environment

Item Value
App https://last1.app
Last1 ID https://auth.last1.id
Database Production and staging share one database. A row created on either host is real.
Why production Zoom, Adobe Sign, Google Drive, and sending-domain are deployed on https://last1.app.
Plan required for connectors Coalition. A meeting link, a file upload, and an in-app signature work on every plan.
Do not use The live WIN organization, a customer veteran, or a customer sending domain.

Confirmed on 28 September 2026, without signing in: GET /api/auth/last1/status returns enabled: true. The production bundle index-ByJr8KI0.js contains Connect Zoom, Send with Adobe Sign, Add from Google Drive, Sending domain, and Continue with Last1 ID. Zoom, Adobe Sign, and Google Drive OAuth client ids are set on the app host. Google Meet and Slack are labeled Coming soon in that same bundle.

Setup

You need three identities. Use inboxes you can read. Do not put passwords in this document.

  1. Org admin. A Last1 ID you control, used only for this QA org.
  2. Veteran. A second Last1 ID, different email, used only as the participant.
  3. Hiring manager. An email at a domain you control, for example a mailbox at a domain you can receive mail for. The hire step checks the domain, not a Last1 login.

Also have:

  • A short PDF you can upload (any one-page file).
  • If the org is on Coalition: a Zoom user, an Adobe Sign user, and a Google account with one file in Drive. These are the accounts you will connect. They are not stored in this doc.
  • A unique run id. Use the date and time you start, YYYYMMDD-HHMM. Example: 20260928-0814.

Write the run id into the log before step A1. Every name below includes it so a second run does not collide.

Record Name for this run
Organization QA WIN <run id>
Program QA WIN employment <run id>
Veteran alias QA Veteran <run id>
Upload type label Training packet

If the new org is not on the Coalition plan, steps C1, C2, C3, and F1 still run. The expected result is the Coalition sentence on the card, and you mark those steps Skip, not Fail. Paste-link, upload, and in-app signature still run.

How to mark a step

Mark Meaning
Pass The expected result happened.
Fail A different result happened. Write what you saw in Notes.
Skip The prerequisite was absent (no Coalition plan, no device, no DNS you control). Write why.
Blocked An earlier Fail stopped this step.

A. Org onboarding

A1. Last1 ID sign-in

Steps:

  1. Open a private window. Go to https://last1.app/login.
  2. Wait for the page to finish loading.
  3. Click Continue with Last1 ID.
  4. Sign in at Last1 ID with the org-admin identity.
  5. Land back on last1.app.

Expected: The login card offers Continue with Last1 ID after it loads. Email and password stay on the page as a fallback. After Last1 ID, you are signed in. A brand-new account is sent into onboarding. An account that already has an organization lands on /dashboard.

Pass/Fail Notes

A2. Create the organization

Steps:

  1. If you are not already in onboarding, open https://last1.app/onboarding.
  2. Complete the welcome and standards steps.
  3. Choose an organization type. Employment is the closest type for this plan. Do not pick a Radio Check-only path.
  4. Enter the organization name QA WIN <run id>.
  5. Continue until the Community listing step. Stop there for A3.

Expected: The organization exists under that name. You can open Org Settings and see the same name.

Pass/Fail Notes

A3. Community listing and attestation

Steps, on the Community listing card (onboarding, or later Org Settings):

  1. Click Employment.
  2. Open Search or add a specialty. Add Job placement if it is in the list. If it is not, type Job placement and add it.
  3. Location or mode: San Diego, in person.
  4. What you do: QA listing for run <run id>. Not a live program.
  5. Website: https://last1.app
  6. Email: the org-admin email.
  7. Phone: 619-555-0100
  8. Check the box that starts We are still active.
  9. Click Attest this card.

Expected: A toast with the status, and a badge that reads Active. Attested <today> (month name, day, year, UTC). The toast says it is a self-attestation and not Certified. Save listing alone does not produce that badge.

Pass/Fail Notes

A4. Admin access and a second role

Steps:

  1. Open Org Settings.
  2. Confirm you are listed as Admin.
  3. Invite a second address you control. Role: Member. Send the invitation.
  4. Open the invitation as that second address. Do not use the veteran identity for this.

Expected: The org admin can open Org Settings, Integrations, Programs, Beneficiaries, and Documents. The invited member can sign in and does not gain Admin. Roles offered on the invite are Admin, Member, and Provider.

Pass/Fail Notes

B. Pipeline

Open Programs, New Program is at /programs/new if the nav does not show a create button. After create, the app opens the program structure page. Open Pipeline from the program page (/programs/<id>/pipeline).

B1. Create the program and the stages

Steps:

  1. Create a program named QA WIN employment <run id>.
  2. Target population: QA veterans for run <run id>.
  3. Problem statement: Disposable pipeline for the WIN-shaped QA plan.
  4. Time horizon: 90.
  5. On the pipeline builder, add these phases, in order: Intake, Documents, Interview, Agreement, Placement.
  6. On each phase, add one output:
Phase Output name Evidence start Close requires Hiring-partner card Other
Intake Ready to start Beneficiary first Both parties attest Don't show on the card Check Email opens beneficiary turn
Documents Training packet received Beneficiary first A file on this output Skill Attach upload type Training packet
Interview Interview held Org first A meeting link Don't show on the card Leave the link empty until C1 or C4
Agreement Agreement signed Beneficiary first Both parties attest Certification Check Requires signed PDF
Placement Hire confirmed Org first Both parties attest Don't show on the card Check Requires third-party attestor. Role label: Hiring manager
  1. Before the Documents output, in the upload-type box, type Training packet and click Save type. Then check that type on the Documents output.
  2. Click Add output on each phase. The list line for Intake should include email opens turn.
  3. Next: Review, then Publish pipeline.

Expected: The builder shows Published and a short structure hash. Build controls are hidden until Revise pipeline. The review lists all five outputs. Documents is Skill. Agreement is Certification. The other three say they are not shown on the card.

Pass/Fail Notes

B2. Turn email

The checkbox is Email opens beneficiary turn. The stored flag is email_trigger / builder_email_opens_turn.

Steps:

  1. Enroll the veteran (D1) before you can see a live email. If you are still on B, mark this Blocked until D1 and D3, then return.
  2. As the org, open the veteran's program progress and open the Intake output so the veteran's turn starts.
  3. Read the veteran's inbox.

Expected: A coordination email arrives. Subject is <program name>: <headline>. For a beneficiary-first output that has not started, the headline is Ready for you to submit. The body does not list the upload type names. Upload types show on the progress screen, not in that email. If no email arrives, mark Fail and note whether the org mail was unverified (<Org> via Last1) or a verified domain.

Pass/Fail Notes

C. Integrations

Open Integrations (/org-settings/integrations).

Google Meet and Slack are Coming soon. Do not test them as working. There is no Google Docs creation step. Google Drive copies an existing Drive file into Last1 Documents.

C1. Zoom

Connect:

  1. On Integrations, read the Zoom card.
  2. If it says Zoom meeting creation is on the Coalition plan, mark Skip and use C4 for the meeting.
  3. If Connect Zoom is shown, click it and finish Zoom's sign-in.
  4. Return to Integrations.

Expected when Coalition and Zoom is configured: badge Connected, and Connected as <zoom email>. Toast: Zoom connected.

Use:

  1. Revise pipeline if it is published. Open the Interview output.
  2. Under Meeting link, choose Zoom.
  3. Topic: QA interview <run id>. Set a start time later today. Duration 30.
  4. Click Create Zoom meeting.
  5. Save output. Publish again if you revised.

Expected: Toast Zoom meeting created. A join URL is shown and saved on the output. The recording stays in Zoom, not in Last1.

Pass/Fail Notes

C2. Adobe Sign

Connect:

  1. On Integrations, read the Adobe Sign card.
  2. Coalition gate: if the card says Adobe Sign is on the Coalition plan, mark the connect-and-send portion Skip. Still run the in-app signature in D4.
  3. If Connect Adobe Sign is shown, click it and finish Adobe's sign-in.

Expected when connected: badge Connected, and Connected as <adobe email>. Toast: Adobe Sign connected.

Use:

  1. Documents. Upload the short PDF if the library is empty.
  2. Open the veteran's progress. In Adobe Sign, choose the Agreement stage and the library PDF.
  3. Click Send with Adobe Sign.
  4. Open the veteran's email and complete Adobe's signature, if a message arrives.
  5. Back on the progress page, refresh the Adobe status.

Expected: Toast Agreement sent. The stage shows an agreement status after refresh. In-app signature remains available even when Adobe is not connected. Adobe sends a library document. It does not replace the in-app signature.

Pass/Fail Notes

C3. Google Drive

Connect:

  1. On Integrations, read the Google Drive card.
  2. Coalition gate: if the card says adding a file from Google Drive is on the Coalition plan, mark Skip and use C4 for the file.
  3. If Connect Google Drive is shown, click it and finish Google's sign-in.

Expected when connected: badge Connected, and Connected as <google email>. Toast: Google Drive connected.

Use:

  1. Open Documents.
  2. Click Add from Google Drive.
  3. Pick one file. Confirm it appears in the Last1 document list.
  4. Revise the pipeline if needed. On the Documents output, under Documents to share, check that file. Save output.

Expected: The picker title is Add from Google Drive. The file is stored in Last1. Sharing it on the stage does not close the stage. There is no control that creates a new Google Doc from the pipeline.

Pass/Fail Notes

C4. Upload and attach without Drive

Run this even if C3 passed. It is the path every plan has.

Steps:

  1. Documents. Upload the short PDF from this computer.
  2. On the Documents output, check that PDF under Documents to share if you want it shared, and keep Training packet checked under Attach upload types.
  3. Save. Open the veteran's progress for Training packet received.

Expected: The upload is in the library. The progress screen shows a slot for Training packet. A shared library file can be opened from the stage. The stage is not closed by the share alone.

Pass/Fail Notes

D. Veteran walkthrough

D1. Enroll

Steps:

  1. Beneficiaries, Add Beneficiary.
  2. Organization: QA WIN <run id>.
  3. Alias: QA Veteran <run id>.
  4. Email: the veteran identity's email.
  5. Leave Use Real Name off.
  6. Acknowledge consent if the form requires it.
  7. Click Create & send invite.
  8. Open the program QA WIN employment <run id>. Participants: select that alias. Click Add.

Expected: Toast Invite sent (or the invite URL if mail failed). The program page says the person is enrolled. The participant row shows identity-ready only after they link Last1 ID, and veteran-verified only after verification.

Pass/Fail Notes

D2. Veteran accepts, Last1 ID, verified and still-serving

Steps, in a second browser profile:

  1. Open the invite link from the veteran's email. Path shape: /member/accept-invite/<token>.
  2. Sign in with Last1 ID using the veteran email. The invite text says the veteran must use that same email.
  3. On the member home, read the chips at the top.
  4. Click the veteran chip. It opens Last1 ID credentials.
  5. Path one, verified: complete veteran verification the way that identity is allowed to (VA confirmation or the document Last1 ID asks for). Return to last1.app member home.
  6. Path two, still serving. Use a third identity, or stop after path one and record path two as a separate run. On Last1 ID credentials, click I am still serving. I do not have a DD-214 yet.

Expected, linked and not yet verified: chips Last1 ID connected and Verify veteran status.

Expected, verified: the veteran chip is a verified-veteran label, not Verify veteran status.

Expected, still serving: Last1 ID shows Recorded. Veteran verification stays pending until you separate. The last1.app chip reads Service member, verification pending separation. Hire confirmation stays unavailable until verification is complete. The hiring card message is Hire confirmation waits until veteran verification is complete.

Pass/Fail Notes

D3. Move through the stages

As the veteran, open Progress (member). As the org, open the beneficiary's program progress.

Steps:

  1. Intake, veteran: submit or confirm Ready to start when it says it is their turn.
  2. Org: review and confirm that output.
  3. Documents, veteran: upload a file into the Training packet slot.
  4. Org: mark it received or reviewed, then confirm, using the buttons the card shows (Mark received, Mark reviewed, or confirm).
  5. Interview: if C1 saved a Zoom link, confirm the veteran can see it. If not, org pastes https://example.com/qa-meet-<run id> and saves Save a different link for this person, then both sides complete the meeting close.
  6. Consent: on Agreement, the signed PDF is the consent artifact. Do not close it until D4.

Expected: Each card names whose turn it is. A file close will not finish with no file. A meeting close will not finish with no link. Concern, if you raise one, blocks confirm until it is answered. You do not have to raise a concern for a Pass.

Pass/Fail Notes

D4. In-app signature

Steps, as the veteran, on Agreement signed:

  1. Read the line that says close is blocked until a PDF is on file.
  2. Enter a signer name.
  3. Check the agreement box. The label is Participant agreed; save in-app signed PDF.
  4. Save the signature.
  5. Org confirms the output if it is the org's turn.

Expected: A signed PDF is on the output. The output can close. This works without Adobe Sign.

Pass/Fail Notes

D5. LastVet on a phone

This step needs a device with the LastVet build installed. The enrollment email tells the veteran to open last.vet on the web because the App Store listing is not the path. A later coordination email says to open LastVet on the phone if it is installed.

Steps, only if the device is installed:

  1. Sign in as the veteran.
  2. Open the coordination item for this program.
  3. Read the verification chip.
  4. If Meridian Ask is on screen, record exactly what it offers. Do not treat a missing Meridian Ask as a Fail.

Expected: The veteran sees this program's coordination and the same verification state as the web chips. Meridian Ask is recorded if it is visible. It is not required for Pass.

Pass/Fail Notes

E. Hire and the card

E1. Hiring manager confirms

Steps:

  1. On the veteran's Placement output, send the third-party invite to the hiring-manager email. Button: Send magic-link invite.
  2. Open that link. Path shape: /public/hm-attest/<token>.
  3. The page title is Employer hire confirmation. It asks you to confirm you hired the alias, using a work email at the employer domain on the link.
  4. Enter the hiring-manager email. If the domain does not match, the page says Email must be at @<domain> and Confirm hire stays disabled.
  5. Use a matching domain. Click Confirm hire.

Expected, veteran already verified (D2 path one): toast Hire confirmed, then Response recorded, and the text All three parties confirmed this placement. The loop is verified. The badge reads verified.

Expected, still serving or not verified: the partner does not get a confirmable hire. The message is Hire confirmation waits until veteran verification is complete. Mark Pass if that gate holds. Mark Fail if a still-serving veteran can be confirmed hired.

A bad token returns HTTP 404 from GET /api/public/hm-attest/<token> with a JSON error. The page shows Link unavailable.

Pass/Fail Notes

E2. Hiring-partner card

Steps:

  1. On the program, click Invite hiring partner.
  2. Send the invite to an email you control. Click Send invite.
  3. Open the magic link. Path shape: /public/hiring-partner/<token>.

Expected: The card shows the display name, not an email or phone. Training packet received appears as a skill, with who attested it. Agreement signed appears as a certification, with who attested it. Intake, Interview, and Placement do not appear as browsable items. A still-serving veteran is labeled Service member, verification pending separation, not as a verified hire.

Pass/Fail Notes

F. Org-domain email

F1. Sending domain

Steps:

  1. Open Integrations. Find Sending domain.
  2. If the card says this is on the Coalition plan, mark Skip.
  3. If you do not control DNS for a domain, mark Skip after you have seen the form. Do not type a customer domain.
  4. Enter a domain you control and a mailbox on that domain. Save.
  5. Read the DNS records. Publish them only if this run is allowed to change that DNS.
  6. Click Verify.

Expected: Before save, status is not connected. After save, status is pending DNS and the page lists the host and value for each record. Verify stays unsuccessful until those records are live. When they are, the badge is verified, and a later coordination email uses the org mailbox as From and Reply-To. The footer still names Last1. Until then, mail is <Org> via Last1.

This is coordination mail only. It is not required for A through E. Those steps pass with <Org> via Last1.

Pass/Fail Notes

Teardown

Do this even when a step failed, so the next run starts clean.

  1. On the program, remove the QA veteran with Remove from program.
  2. Do not delete the Last1 ID accounts. They are reused.
  3. On Integrations, Disconnect Zoom, Adobe Sign, and Google Drive only if this run connected them on the QA org.
  4. Do not delete the QA organization. There is no delete-org control in Org Settings. The run id in the name is what keeps the next run separate.
  5. A Community badge that says Active stays active until it ages out. The next run uses a new org, so it will not inherit this badge.
  6. Write the teardown time in the run log.

Re-run means a new run id, from A2 onward. A1 can reuse the same org-admin Last1 ID. Onboarding will skip org creation if that identity already has an organization. In that case create QA WIN <run id> from Org Settings if the product allows another org, or use a fresh Last1 ID and say so in the log.

Run log

Run id Runner Date Environment Coalition? Teardown done
https://last1.app

First machine pass, 28 September 2026

This pass did not sign in and did not create an organization. Staging and production share a database, so an automated sign-in would have written real rows.

Check Result Notes
https://last1.app/login Pass HTTP 200. Title Log In \| Last 1.
Last1 ID status Pass enabled: true, issuer https://auth.last1.id.
Last1 ID button in the live bundle Pass Continue with Last1 ID is in index-ByJr8KI0.js. The first paint can show email and password before that status call returns.
Zoom, Adobe Sign, Google Drive apps on the host Pass OAuth client ids are set. This does not prove a Coalition org can finish the OAuth redirect.
Google Meet and Slack Stub Labeled Coming soon in the live bundle. Not a failure of C1 to C3.
Google Docs creation Not in the product The working control is Add from Google Drive on Documents.
Invalid hire link Pass GET /api/public/hm-attest/not-a-real-token returns HTTP 404.
Signed-in walk of A2 through F Not run Needs the three identities above. A stored browser session hit /onboarding/radiocheck and the production page title was Page Not Found. Do not treat that as a WIN-plan result. Confirm it separately if Radio Check onboarding is in scope.
LastVet iOS (D5) Not run Needs a device.