> ## Documentation Index
> Fetch the complete documentation index at: https://docs.drdj.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Testing and Release

> Release checklist and test matrix for production-safe deployments.

## Baseline Test Matrix

```bash theme={null}
pnpm check
pnpm test:unit
pnpm test:integration
pnpm docs:check
pnpm openclaw:check
```

Add as required:

```bash theme={null}
pnpm test:e2e
pnpm audit --audit-level=high
```

Report current command output instead of copying stale test counts.

## drdj.me Shortener Validation

Run these checks when changing the standalone shortener API, skill, MCP server,
agent prompt, dashboard links page, or public discovery files:

```bash theme={null}
pnpm check
pnpm exec vitest run tests/unit/short-links.test.ts tests/unit/shortener-prompt.test.ts tests/unit/agent-readiness.test.ts
pnpm exec vitest run tests/integration/shortener-v1.test.ts tests/integration/drdj-shortener-mcp.test.ts
pnpm docs:check
pnpm openclaw:check
```

The MCP integration test starts `/plugins/drdj-shortener/scripts/server.ts`
through the official MCP stdio client and calls a local mock API. It verifies
tool listing, `shorten_link`, stored-token stats, headers, and request body
shape without touching production data.

After deploy, probe:

```bash theme={null}
curl https://drdj.me/.well-known/agent-skills/index.json
curl https://drdj.me/.well-known/agent-skills/drdj-shortener/SKILL.md
curl https://drdj.me/.well-known/mcp/drdj-shortener/server-card.json
curl https://drdj.me/openapi.json
```

Playwright starts the local app with `DISABLE_BACKGROUND_JOBS=true` so browser
tests do not run Sheets sync queues, two-way Sheets imports, reminder checks, or
recurring task checks against shared credentials.

If another local tool is already bound to port 3000, run focused browser checks
with `PLAYWRIGHT_PORT=<free-port>`. The Playwright config passes that port to
Vite through `VITE_DEV_PORT` and updates the browser `baseURL` for the run.

## Extension Release Environment

LinkShot production builds that need Supabase token refresh must be built with
these Vite environment variables available:

* `VITE_LINKSHOT_SUPABASE_URL`
* `VITE_LINKSHOT_SUPABASE_ANON_KEY`

These are public client configuration values, but they must still come from the
release environment rather than tracked source so scanners do not flag
JWT-shaped values and old builds do not accidentally ship stale project config.
Do not paste real values into docs, logs, or chat. Before packaging LinkShot,
confirm the variables are present in the release shell or GitHub/extension
release pipeline by checking names only.

## Release Checklist

1. pull latest `main`
2. run full validation for touched scope
3. verify docs updates are included
4. verify no secrets/config leakage
5. verify required migrations are applied before enabling new production routes
6. verify extension release env names are present before packaging LinkShot
7. verify rollback path is documented

## Noise Debt

Non-failing warnings (for example React `act(...)` warnings) should be reduced over time to keep CI signal clean for agent-driven execution.
