# Requester Guide: Register `payment_surface_discovery.v1`

This is the stable, version-scoped Human requester guide for the v1.17
registration flow. It is a `NON_NORMATIVE_DERIVED_GUIDE`: the Registration UI,
server challenge, server validation, Wallet, settlement result, and committed
Task response remain authoritative. This guide is not part of, and does not
modify, the immutable digest-qualified Executor bundle.

Start here:

`https://kari.mayim-mayim.com/agent-offer-register.html`

## Prerequisites

- a supported browser Wallet connected to Base mainnet;
- enough Base USDC to satisfy the exact server challenge; and
- an explicit Human decision to confirm the displayed payment.

Wallet account connection is non-signing. No authorization is requested until
the Human-visible Preview has been reviewed and the Human explicitly confirms.
Never provide a private key, seed phrase, or other private Wallet material.

## This v1.17 flow does not use v1.18 inputs

The v1.17 `payment_surface_discovery.v1` registration does **not** use an Offer
Control Key, Origin Control, Verification JSON, Task Manifest, `scheduled_at`,
Plan, target-domain input, or seed-URL input. Do not prepare or submit any of
those values for this flow.

## Exact unpaid request

Locate the **Payment Surface Discovery** card in the Registration UI and select
**CONFIGURE OFFER (1.0 USDC)**. This opens the **Offer Configuration: Payment
Surface Discovery** modal only; opening the modal does not send a request.

Inside the modal, select **REQUEST PAYMENT PREVIEW**. That separate action sends
exactly this UTF-8 JSON request:

```http
POST /api/bazaar/task-offers
Content-Type: application/json
```

```json
{"task_type":"payment_surface_discovery.v1"}
```

That compact one-line string is the exact UTF-8 request body used for the
unpaid request and the later paid retry; whitespace must not be inferred from
the formatted examples in other documents.

No additional request property is permitted. In particular, do not add a
domain, domain anchor, URL, parameters, instructions, crawler settings,
payment facts, or reward overrides.

The unpaid request must return the canonical x402 version 2 challenge. The UI
accepts exactly one compatible requirement with:

- scheme `exact`;
- network `eip155:8453` (Base mainnet);
- Base USDC asset `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`;
- amount `1000000` atomic units, displayed as `1.0 USDC`;
- paid method `POST` and the exact task-offers resource;
- a non-zero server-configured `pay_to`; and
- maximum authorization timeout `300` seconds.

Do not substitute locally chosen payment facts for the server challenge.

## Complete Human sequence

1. Open the Registration UI.
2. Locate the **Payment Surface Discovery** card and select **CONFIGURE OFFER
   (1.0 USDC)**.
3. Confirm that the **Offer Configuration: Payment Surface Discovery** modal
   opens. No unpaid or paid `POST` is sent by this action.
4. Inside the modal, select **REQUEST PAYMENT PREVIEW**.
5. The page sends the exact unpaid JSON `POST` above.
6. The server returns the canonical x402 `402` challenge.
7. Connect a Base Wallet account. This connection step does not sign.
8. Review the Human-visible frozen payment Preview.
9. Explicitly select **CONFIRM 1.0 USDC PAYMENT**.
10. Authorize the one fixed Wallet payload.
11. The page retries the exact paid request with the same JSON body.
12. Wait for authoritative settlement and the exact `OPEN` response.
13. Follow the returned Task link, or use the visible exact-request recovery
    action if the paid dispatch result is ambiguous.

Before the explicit confirmation, payment authorization count and paid
dispatch count are both zero.

## Frozen visible Preview

Before authorization or paid dispatch, the page displays and freezes:

- Task type `payment_surface_discovery.v1`;
- Task Definition version `1.0.0`;
- immutable Task Definition digest
  `9e5d340f746c957ac9e9363c0af8ef72f0fe2bc8ea4bc4b55d1f7006b5448406`;
- the exact JSON request body;
- paid method and exact paid resource;
- x402 version, scheme, and network;
- Base USDC asset contract;
- server challenge amount in atomic units and USDC;
- server-configured `pay_to`;
- selected Wallet payer;
- maximum timeout; and
- the explicit-confirmation requirement and what the registration creates.

The Preview is bound to the same challenge, selected requirement, payer, JSON
body, and Request later used for authorization and paid retry. It never shows
a signature, authorization, payment header, or private Wallet material.

## What the 1.0 USDC registration creates

The payment creates one generic `payment_surface_discovery.v1` Offer. It is not
a requester-selected-domain Task and it does not accept a requester-selected
target. It is not reward escrow. Registration does not guarantee Agent
execution, acceptance, payout, requester profit, or recurring activity.

The exact successful response identity is the five-field object:

```json
{
  "schema_version": "ln_church.task_offer_create_response.v1",
  "task_id": "<OPAQUE_TASK_ID>",
  "task_type": "payment_surface_discovery.v1",
  "status": "OPEN",
  "task_url": "/api/agent/tasks/<OPAQUE_TASK_ID>"
}
```

Only an authoritative HTTP `200` or `201` response with this exact identity and
`status=OPEN` is success.

## Retry and recovery

- **Wallet connection failure:** use the visible reconnect action. It reuses
  the same `402` challenge and exact JSON Request.
- **Lost or rejected signing response:** the next explicit Human action reuses
  the same fixed EIP-712 payload and nonce. Do not create a parallel attempt.
- **Expired authorization attempt:** the old attempt is no longer usable. Start
  again with a new challenge and obtain new explicit Human confirmation.
- **Paid-dispatch ambiguity:** use only the visible recovery action. It replays
  the exact saved signed request through the existing bounded recovery
  mechanism; it is not a separate status `GET`.

During ambiguity, do not create a new nonce, authorization, payment, or
parallel recovery attempt. Success still requires an authoritative HTTP
`200`/`201` exact `OPEN` response.

The challenge, fixed authorization attempt, signed paid Request, and recovery
material are page-memory-only. Refreshing or restarting the browser discards
that memory; the page must not reconstruct it from a URL, Cookie, localStorage,
sessionStorage, IndexedDB, log, analytics event, or other persistence.
