···5858- DMs are intentionally deferred from the current browser-smoke tranche; see `docs/BROWSER_SMOKE.md` for current scope and rationale.
5959- Fresh-account creation is still available through the explicit `bootstrap-*` commands, but it is no longer the normal path for repeated browser smoke runs.
6060- Detailed browser-smoke workflow, current interaction coverage, and the env-gated `prove` wrapper live in `docs/BROWSER_SMOKE.md`.
6161+- Extraction work toward a cross-PDS standalone package now starts in `pds-smoke-suite/`, with bring-your-own-account and `perlsky` adapter helpers defining the neutral config boundary.
6262+- For now, `script/perlsky-browser-smoke` remains the active `perlsky` adapter and runtime entrypoint while the generic package boundary stabilizes.
61636264Moderation and labels:
6365
+76
pds-smoke-suite/README.md
···11+# pds-smoke-suite
22+33+This directory is the extraction staging area for a standalone `bsky.app`
44+compatibility smoke suite that can be used by multiple PDS implementations, not
55+just `perlsky`.
66+77+## Current Scope
88+99+The existing browser automation is already strong enough to be useful outside
1010+this repo:
1111+1212+- reusable-account `bsky.app` smoke flows
1313+- post, image post, like, repost, quote, reply, bookmark, follow
1414+- list lifecycle
1515+- profile edit and avatar upload
1616+- notifications checks
1717+- settings-depth flows
1818+- strict artifacts with screenshots, console output, failed requests, failed
1919+ HTTP responses, and recent XRPC traffic
2020+2121+DMs are intentionally deferred for now. The current suite is focused on stable
2222+social, list, and settings interactions first.
2323+2424+## Extraction Shape
2525+2626+The target standalone project shape is:
2727+2828+1. Generic core browser flows and artifact handling
2929+2. A bring-your-own-accounts mode with minimal configuration
3030+3. Thin per-PDS adapters for provisioning and implementation-specific defaults
3131+3232+Right now, the runtime still lives under `tools/browser-automation/`, while this
3333+directory captures the neutral config and adapter surface we want to preserve
3434+during extraction.
3535+3636+## Minimal Configuration Goal
3737+3838+The default experience for other PDS developers should be:
3939+4040+- provide a `pdsUrl`
4141+- provide one or two existing account credentials
4242+- optionally provide a `targetHandle`
4343+- run the suite against `bsky.app`
4444+4545+Provisioning is intentionally adapter-specific. That means `perlsky` can keep a
4646+helpful invite/bootstrap path, while other PDSes like `rsky` or `pegasus` can
4747+add their own adapters without changing the core browser flows.
4848+4949+## Current Adapter Contract
5050+5151+The staging helpers in `src/` model two layers:
5252+5353+- `adapters/bring-your-own.mjs`
5454+ For the lowest-friction mode where callers supply existing credentials
5555+- `adapters/perlsky.mjs`
5656+ For `perlsky`-specific defaults like cleanup prefixes and adapter tagging
5757+5858+The current config contract is intentionally small:
5959+6060+- suite-level settings:
6161+ `pdsUrl`, `artifactsDir`, `appUrl`, `publicApiUrl`, `targetHandle`,
6262+ `publicCheckTimeoutMs`, `headless`, `strictErrors`, `publicChecks`,
6363+ `browserExecutablePath`, `adapter`
6464+- account-level settings:
6565+ `handle`, `password`, `birthdate`, `postText`, `mediaPostText`, `quoteText`,
6666+ `replyText`, `profileNote`, `cleanupPostPrefixes`
6767+6868+## Planned Next Steps
6969+7070+- move the actual browser runtime from `tools/browser-automation/` into this
7171+ package
7272+- add package-owned CLI entrypoints for single-account and dual-account runs
7373+- keep `script/perlsky-browser-smoke` as a thin `perlsky` adapter over the
7474+ generic package
7575+- revisit a JS-to-TS migration later, after the standalone package boundary is
7676+ stable