# v0.1 ship-readiness — current status

Companion to `docs/internal/plan/v0.1-ship-readiness-plan.md`. This file tracks where the work stopped and what the next session needs to know.

## Last session: 2026-05-04

### What landed
- **Pre-flight commit `6905248`** — bundled the 163 in-flight files from prior sessions into a single checkpoint commit on `feature/iframe-preview-tier13`. Includes go.mod 1.26→1.26.2, web_serve.go `!cgo` tag removal, CLAUDE.md hard-constraint #7 addition, .github/workflows/pr.yml test_harness tag + race scope adjustment, and ~160 cross-package lint-style cleanups (cancelled→canceled rename, predeclared identifier renames, import grouping, test parallelism).
- **Toolchain set up** — `~/go/bin/golangci-lint` rebuilt from v2.10.1 source against Go 1.26.0 (the public binary is built with go1.25.0 and rejects the project's `go 1.26.2` go.mod). To reproduce: clone `golangci-lint` v2.10.1, bump its `go.mod` line to `go 1.26.0`, then `go build`. Required because GOTOOLCHAIN=auto downgrades to whatever the dependency declares.
- **Baselines captured** — see `docs/internal/plan/v0.1-baselines/`:
  - `lint-baseline.txt` (500 lines, 120 issues across 13 linter families)
  - `go-test-results.txt` (4 failures discovered, see below)
- **Plan synced into repo** — the full ship-readiness plan is at `docs/internal/plan/v0.1-ship-readiness-plan.md` so it travels with the branch.

### Real failures discovered (not in the original plan)

The plan claimed `CGO_ENABLED=0 go test ./...` was green on the in-flight state. Actually 4 tests fail and need fixing as part of Wave 1:

```
--- FAIL: TestAuthWeComCmdWithScanner_SaveConfigFailureRollsBackStore
    cmd/omnipus/internal/auth/
--- FAIL: TestSaveWeixinConfig_SaveConfigFailureRollsBackStore
    cmd/omnipus/internal/auth/
--- FAIL: TestSetDefaultModel_SaveConfigError
    cmd/omnipus/internal/model/
--- FAIL: TestListAllSessions_PartialErrors
    pkg/agent/
```

All four look like SaveConfig-rollback / partial-error-aggregation tests that broke from one of the in-flight refactors. They should be added to **W1.1 backend-lead scope** (alongside the lint cleanup) — same area, same kind of fix.

### Blockers hit this session

1. **Commit signing broken.** `/tmp/code-sign` returns "missing source" 400 from the signing server. Worked around by passing `-c commit.gpgsign=false` on each commit (user explicitly approved for this session only — do NOT change global config). Local commits land unsigned; GitHub will not show the "Verified" badge.
2. **No push capability.** This sandbox has no git credentials, no SSH private key, no `gh` CLI, no credential helper. The repo is public so `git fetch` works anonymously, but pushes fail with `could not read Username for 'https://github.com'`. User chose to continue locally — commits accumulate on `feature/iframe-preview-tier13` and need to be pulled out via Claude Code's session sync mechanism, then pushed manually from the user's terminal.

### Plan updates required (already incorporated above, not yet edited into the plan file)

- Add the 4 failing tests above to the W1.1 backend-lead scope.
- Strike the `git push` step from each wave — replace with "commit; user pushes manually".
- The "163 uncommitted files" line in the plan's Context section is stale — those are now in `6905248`.

## Next session — pick up here

1. Verify the toolchain is still set up:
   ```
   ~/go/bin/golangci-lint version           # should report 2.10.1+dirty / go1.26.0
   /usr/local/go/bin/go version              # go1.26.2
   ls pkg/gateway/spa/assets/index-*.js      # SPA must be embedded; if missing, re-run npm install + npm run build + cp -r dist/spa pkg/gateway/spa
   ```

2. Confirm the 4 test regressions are still red:
   ```
   CGO_ENABLED=0 go test -tags goolm,stdjson,test_harness ./cmd/omnipus/internal/auth/... ./cmd/omnipus/internal/model/... ./pkg/agent/...
   ```

3. Spawn Wave 1 per the plan. Suggested order if context is tight:
   - **Wave 1.1 first** (backend-lead): lint cleanup PLUS the 4 SaveConfig-pattern test fixes. Largest blast-radius, highest payoff.
   - **Wave 1.2, 1.3, 1.5 in parallel** (frontend-lead worktrees): iframe-preview cluster, ws.ts visibilitychange fix, error-UI selector fixes.
   - **Wave 1.4** (backend-lead): retention test URL + auth fix.
   - **Wave 1.6** (qa-lead): convert #105 + #107 from `expect(false)` to `test.skip()` + SKIP_ALLOWLIST entries.

4. Remember the user must push manually from their terminal — no `git push` in agent prompts.
