# Sessions to shipped fixes (https://docs.vitrinka.ai/dev/skills/sessions)



## /vitrinka:sessions [#autopilot]

The whole pipeline is one skill. It discovers this project's unprocessed recorded sessions and drives each one through fix, then tests, then the record of what was done. A single-stage run — just the fixes, or just the tests — routes inside the skill body; there is no separate skill to remember. The repo-root `vitrinka.config.json` is its one rules map — the stacks to run, their readiness checks, the e2e setup per framework — and the first run maps it with you when it is missing. A session is pending once it is done and projected onto its board but has no tested stamp yet.

## The fix stage [#fix]

Turns one recorded session into shipped fixes. It reads the session **once** through the digest rather than repeatedly, then groups its issues — annotations, network failures and console errors together — into blocks of 5–10 related problems.

## The test stage [#tests]

Turns the recorded journeys into maintained end-to-end tests, in the runner the project actually uses.

* **Runner auto-detected** — Playwright for web, Appium/WebdriverIO for Expo and React Native.
* **Consolidation verdicts** — each journey is judged against the existing registry — extend, update, new, or skip — so a re-recorded flow does not fork into a duplicate suite.
* **Recorded** — the outcome lands on the server: each journey is a `journey` task keyed by `fields.key`, and the session carries its pipeline stamps. No manifest is committed to the repo.

## The proof [#proof]

The verifying run is traced back onto the session board, so the session that reported the problems also carries the evidence they are gone.

## Coding-agent sessions [#archive]

The same skill keeps your own transcript behind the task it worked, when the work passes to someone else.

```bash
vitrinka qa session archive session.jsonl --task 718 --hint "load when the address form regresses"
vitrinka qa session continue 718
```

`archive` uploads the raw Claude Code or Codex JSONL as a `transcript` ref on the task, with a normalized index; the same filename on the same task is a new version, never a replacement. A credential in it refuses the upload — rotate it and archive again — while e-mails, phone numbers and long opaque runs are masked in place, and paths are made portable so another checkout reads them. `continue` prints the task's latest distill as a /continue brief and, when the transcript came from the harness you are in, offers the native resume — it never runs it. A transcript reaches a task only when you hand the work on (`vitrinka task handback --transcript`, or `archive` by hand), never because a session ended.
