diff --git a/.claude/skills/verify/SKILL.md b/.claude/skills/verify/SKILL.md index 98edf034f6..b5d22345e2 100644 --- a/.claude/skills/verify/SKILL.md +++ b/.claude/skills/verify/SKILL.md @@ -5,6 +5,13 @@ description: Build/launch/drive recipe for verifying codev-code changes end-to-e # Verifying codev-code changes +## Typecheck first + +Always include typecheck in the first verification run: run `bun typecheck` from the +touched package dirs (e.g. `packages/tui`, `packages/opencode`) before launching the +TUI, and again after every follow-up edit before re-verifying — don't defer it to the +pre-push hook. Never bare `tsc`, never from repo root. + ## Launch the TUI The TUI must be launched with cwd = `packages/opencode` — its `bunfig.toml` preloads diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index 1679ca6b19..4cecedd8bb 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -18,4 +18,8 @@ jobs: uses: ./.github/actions/setup-bun - name: Run typecheck - run: bun typecheck + # Concurrency capped: default (10) runs enough parallel tsgo compilers + # (opencode alone peaks ~4.6 GB) to OOM the 16 GB runner, which dies with + # "The runner has received a shutdown signal" instead of a type error. + # The runner has 4 cores, so the cap costs little wall time. + run: bun turbo typecheck --concurrency=3 diff --git a/CHANGELOG.md b/CHANGELOG.md index aa582283d2..1811cfed0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,15 @@ file is the human-readable summary of what changed and why. ## Unreleased +### Sidebar + +- **Hidden-sidebar hint shows while busy** — the `ctrl+b N todos` hint from + [#69](https://github.com/quickbeard/codev-code/pull/69) now also renders while + a turn is running (next to `esc interrupt`), not just when the session is + idle — todos created mid-turn are visible immediately. It still yields to the + retry error row. + ([#107](https://github.com/quickbeard/codev-code/pull/107)) + ## 1.17.18-2 ### App lifecycle diff --git a/DIVERGENCES.md b/DIVERGENCES.md index cd082304e8..ed255f2a5e 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -114,6 +114,7 @@ from the squash message first, or use a plain merge. | `packages/tui/src/component/dialog-provider.tsx` | The "Other" custom-provider option routes into the fork-only `runCustomProviderFlow` (component/dialog-custom-provider.tsx, new file) — id → API key → optional base URL → model discovery via `/v1/models` → `provider.` block PATCHed into global codev.json (key stays in auth.json) — instead of upstream's credential-only `ApiMethod`; the local `promptCustomProviderID` helper moved into that flow (upstream's "only stores a credential" description no longer holds). `ApiMethod`'s `custom` prop is now unreferenced but left in place. | An empty base URL keeps upstream's credential-only behavior; with one, the provider is usable without hand-editing codev.json. The configure gate's "Custom provider" option shares the same flow. | Keep our `onSelect` + import and the helper deletion; take upstream's changes to `ApiMethod`/other methods (the flow only wraps the entry point). | | `packages/tui/src/component/prompt/index.tsx` | Gated the prompt footer's model/provider indicator on `useConnected()` (the shared "a real provider is configured" predicate) | Don't advertise the free hosted Zen default (e.g. "Big Pickle · OpenCode Zen") in the footer while nothing is configured — same rationale and predicate as `app.tsx`'s startup gate and the provider/model filters. A configured gateway/real provider, or a deliberately-authenticated opencode/opencode-go, still shows its model. | Keep the extra `Show` condition; take upstream's surrounding changes. | | `packages/tui/src/component/prompt/index.tsx` | Added a `directoryLabel` memo (abbreviated cwd, `:branch` suffix when known, middle-truncated; last path segment + branch in text color, parent path muted, matching the sidebar footer) rendered as the first item of the prompt footer's right-side group, left of the editor open-file label. The memo delegates to `directoryFooterLabel(...)` and the render goes through a `