Conversation
This implements migrations and code generation for interfacing with a PostgreSQL database. A dependency is added for the "postgres" binary on the host, but that seems like an acceptable requirement considering it's our primary database. An in-memory database object can be created for simple cross-OS and fast testing.
bryphe-coder
reviewed
Jan 4, 2022
| # Check that go is available | ||
| # TODO: Implement actual test run | ||
| - run: go version | ||
| - run: go test -v ./... |
Contributor
There was a problem hiding this comment.
Nice, our CI is actually doing something now 🎉
bryphe-coder
reviewed
Jan 4, 2022
| if err != nil { | ||
| return "", nil, xerrors.Errorf("create pool: %w", err) | ||
| } | ||
| resource, err := pool.RunWithOptions(&dockertest.RunOptions{ |
Contributor
There was a problem hiding this comment.
This seems fine to me for now! As we discussed, if Docker is too heavy a dependency... we could look at running psql manually in the future.
I think this approach makes for now, though, since the team is familiar with this approach from coderd. And if we decide Docker is too heavy, there might be other approaches we take (like revisiting a cloud solution...)
bryphe-coder
approved these changes
Jan 4, 2022
bryphe-coder
added a commit
that referenced
this pull request
Feb 2, 2022
BrunoQuaresma
added a commit
that referenced
this pull request
May 8, 2025
1 task
2 tasks
This was referenced Apr 10, 2026
david-fraley
added a commit
that referenced
this pull request
Apr 30, 2026
Two regressions from 8c0a1b2 that fail markdownlint and would block CI: - MD009: trailing space after the new getting-started link - MD051: stale '#2-configure-an-llm-provider' fragment in the testing section now that the experiment step is removed and Configure an LLM provider is step 1 > Coder Agent generated this commit on @david-fraley's behalf.
kylecarbs
added a commit
that referenced
this pull request
May 7, 2026
… history Replaces the previous draft of this PR (a backend workspaces.claimed_at column plus migration plus SDK plumbing) with a frontend-only heuristic per Cian's review. The /agents archive-and-delete molly-guard previously compared workspace.created_at against chat.created_at to decide whether to require typing the workspace name. ClaimPrebuiltWorkspace never updates workspace.created_at, so claimed prebuilds always looked pre-existing and the dialog misfired. Build history already records the truth: build #1's initiator is the prebuilds system user iff the workspace was a prebuild, and build #2 is the claim. Compute that in the resolver and compare its created_at against the chat. From-scratch workspaces fall through to workspace.created_at as before. The prebuilds system user UUID is hardcoded on the frontend; it lives in coderd/database/constants.go on the backend and has not changed since the prebuild feature shipped. If it ever moves, both sides have to move together. 🤖 Generated with the help of Coder Agents.
This was referenced May 15, 2026
bpmct
added a commit
that referenced
this pull request
May 21, 2026
Co-authored-by: Ben Potter <ben@coder.com>
mafredri
added a commit
that referenced
this pull request
May 25, 2026
waitForTaskIdle used time.NewTicker(5s) which delays the first poll by 5 seconds. Debugger tracing proved the failure mechanism: on slow CI (Windows), the first poll at 5s sees "working" (idle patch has not landed due to goroutine scheduling), needs poll #2 at 10s, but the 25s context expires before it fires. Two changes: 1. Use r.clock.NewTicker (quartz) with time.Nanosecond initial interval and Reset(5s) for immediate first poll. Tests inject a mock clock via clitest.NewWithClock for deterministic control. 2. Rewrite WaitsForWorkingAppState test with quartz traps (NewTicker + TickerReset) for deterministic synchronization instead of racing goroutines. Fix PausedDuringWaitForReady sync point. Closes https://linear.app/codercom/issue/DEVEX-381
mafredri
added a commit
that referenced
this pull request
May 25, 2026
#25648) waitForTaskIdle used time.NewTicker(5s) which delays the first poll by 5 seconds. Debugger tracing proved the failure mechanism: on slow CI (Windows), the first poll at 5s sees "working" (idle patch has not landed due to goroutine scheduling), needs poll #2 at 10s, but the 25s context expires before it fires. Two changes: 1. Use r.clock.NewTicker (quartz) with time.Nanosecond initial interval and Reset(5s) for immediate first poll. Tests inject a mock clock via clitest.NewWithClock for deterministic control. 2. Rewrite WaitsForWorkingAppState test with quartz traps (NewTicker + TickerReset) for deterministic synchronization instead of racing goroutines. Fix PausedDuringWaitForReady sync point. Closes DEVEX-381
tracyjohnsonux
added a commit
that referenced
this pull request
Jun 3, 2026
…PR tab for demo Hardcodes 'fix: increase icon sizes for wcag 2.2 compliance' (PR #2 from coder-ux-prototypes) as a second PR tab in the dropdown to demonstrate multi-PR switching UI. The extra tab reuses the remote diff content panel.
f0ssel
pushed a commit
that referenced
this pull request
Jun 11, 2026
…#26296) Backport of #26204 (commit b5ef700) to `release/2.34` Replace RequestHost with httpmw.EffectiveHost, which honors X-Forwarded-Host only when the original socket peer is a configured trusted origin, otherwise falling back to the received Host header. Cherry-pick was clean; tests pass on this branch. > [!NOTE] > Breaking change. See the original PR for the breaking-change details.
f0ssel
pushed a commit
that referenced
this pull request
Jun 27, 2026
ibetitsmike
pushed a commit
that referenced
this pull request
Jul 21, 2026
…nges (#27059) Closes CODAGT-592. ## Problem The advisor tool sometimes fails with the opaque error `advisor produced no text output`. Live reproduction against `claude-sonnet-4-6` showed the cause: `BuildAdvisorMessages` forwards the parent conversation's raw `tool_use`/`tool_result` blocks into the nested advisor call, which defines no tools. The nested model imitates the forwarded pattern and spends its turn committing to a tool call it cannot make (captured reasoning from a failing run: "The user wants me to make another tool call to the advisor about writing a poem about cucumbers."), so the step ends with reasoning-only or empty content and no advice. Because each chat step currently rebuilds the advisor runtime and snapshot (CODAGT-593), the second advisor call in a run reliably sees the first call's exchange, which is why the first call succeeds and later ones fail. ## Fix - `BuildAdvisorMessages` rewrites tool activity as plain-text notes: assistant tool-call parts are removed and folded, together with their matching result, into a single user-role note of the form `[The parent agent ran the X tool with input {...}. Result: ...]`. No raw tool blocks and no bare call lines reach the tool-less nested request. This also removes the provider requirement that `tool_result` blocks pair with a `tool_use`, so results orphaned by window truncation are kept as notes instead of dropped. - The `advisor produced no text output` error now appends the finish reason and content-part kinds, e.g. `advisor produced no text output (finish_reason=stop; parts: reasoning=1)`, so field reports distinguish tool-call mimicry, reasoning-only turns, and truncation. Validated live by driving the production `RunAdvisor` path against `claude-sonnet-4-6` through the dev.coder.com AI gateway: the failing scenario went from 3/3 errors to 6/6 genuine advice (with and without extended thinking), with the control scenario unaffected. Related: CODAGT-593 (per-step advisor runtime recreation, addressed separately) and CODAGT-742 (advisor tool call design). <details> <summary>Investigation and validation details</summary> ### Reproduction A CLI prototype constructed the exact conversation snapshot the generation preparer hands the advisor tool and called the real `chatadvisor.NewRuntime` / `Runtime.RunAdvisor` / `BuildAdvisorMessages` / `chatloop.GenerateAssistant` chain against live `claude-sonnet-4-6`, with a stream-teeing model wrapper capturing what `runner.go` discards (finish reason, part kinds, reasoning text). | Scenario (snapshot contents) | Thinking | Before fix | After fix | |---|---|---|---| | control: call #1 state, no prior advisor exchange | on | 3/3 advice | 2/2 advice | | repro: call #2 state, prior advisor `tool_use`/`tool_result` pair forwarded | on | 3/3 `advisor produced no text output` | 3/3 genuine advice | | repro | off | 2/3 same error, 1/3 degenerate advice ("I'll ask the advisor...") | 3/3 genuine advice | Every failing response was a tiny thinking block, zero text, zero tool-call stream parts, finish reason `stop`; the model's own reasoning text showed it deciding to "make the second tool call" in a request with `tools=0`. The refunded `remaining_uses: 1200` in the failing tool-result JSON matches the original issue screenshot. ### Decision log - Tool exchanges are folded into a single user-role note per call/result pair. A first attempt rendered assistant-authored `[tool call: name(input)]` text lines plus separate result messages; live runs then returned the literal `[tool call: advisor(...)]` line as the advice 6/6 times. The bare assistant call line is itself an imitable pattern, so no assistant-authored tool artifact may survive the handoff. The folded user-role note produced 6/6 genuine advice. - An assistant message that carried only tool calls is dropped entirely; the folded notes preserve the information. - `dropOrphanToolMessages` was removed: without raw tool blocks there is no provider pairing constraint, and an orphaned result note retains context value. - A reasoning-budget-starvation hypothesis (thinking budget consuming `MaxOutputTokens`) did not reproduce on `claude-sonnet-4-6`; the model adapts thinking length to the cap. The enriched error would identify such cases on other models via `finish_reason=length`. - CODAGT-593 (persisting the advisor runtime across steps) is intentionally not addressed here; it shrinks the priming window but the handoff fix is what removes the failure mode. </details> --- *This PR was generated by Coder Agents on behalf of @ThomasK33 (Linear agent session for CODAGT-592).*
aqandrew
added a commit
that referenced
this pull request
Aug 6, 2026
…sidebar row (#27351) ## What Clicking a selected module in the right-hand `SelectionSummary` sidebar now jumps to the module settings step and scrolls that module's card into view. Addresses [DEVEX-587](https://linear.app/codercom/issue/DEVEX-587). This is an isolated slice of #27077 (which bundles several unrelated changes); only the "click a module to scroll to it" behavior is included here. ## Changes - `SelectionSummary`: gains an optional `onNavigateModule` prop. When provided, each selected module row renders as an accessible `<button>` (hover + focus-ring) labeled `Configure <name>`; otherwise rows stay non-interactive. - `ModuleSettingsStep`: each module card wrapper gets a stable `id={module-config-<id>}` scroll anchor plus `scroll-mt-24` so the sticky top nav does not cover the title. - `TemplateBuilderPageView`: adds `navigateToModule`, which switches to the module settings step and scrolls the target module into view once it renders. If the module settings step is skipped (no configurable variables), the click is a no-op. - `SelectionSummary.stories`: adds a `NavigateModuleClick` interaction story and updates `WithLongNameModule` to the new button semantics. ## Explicitly out of scope The rest of #27077 is not included: gallery height/card clamp, sensitive-var banner relocation, trash-icon removal wiring, the scroll-past required-field highlight subsystem, and the broader navigable-sidebar work (step labels, base-row navigation, back-stack semantics). ## Testing - `pnpm check` (biome) clean - `pnpm lint:types` (tsc) clean - `pnpm vitest run --project=unit src/pages/TemplateBuilder` — 46 pass - `pnpm vitest run --project=storybook src/pages/TemplateBuilder` — 34 pass (incl. new `NavigateModuleClick`) <details> <summary>Implementation plan / decision log</summary> ### Goal Open a new PR containing only the changes that satisfy DEVEX-587: clicking a selected module in the right-hand `SelectionSummary` sidebar should jump to the module settings step and scroll that module's card into view. ### Base has moved since #27077 PR #27077 was cut against an older `main`. Today's `main` was refactored: - Steps are URL-driven; `steps.ts` already provides `StepId`, per-step `group` (1/2/3), and `nearestVisible()`. - `TemplateBuilderPageView` already has `navigateToStep(index: number)` and a `useEffect` that resets window scroll on every `currentStep.id` change. - The sidebar no longer has a deselect ("X") button. The PR's entanglement between "make row a nav button" and "move deselect to a trash icon" therefore does not exist on current `main`, so module navigation can be added without removing behavior and without pulling in the trash-icon item. So the isolated diff was written against current `main`, not reused verbatim from the PR. It is smaller than the PR's own hunks and does not include `maxReachedStep`, step-label navigation, or base-row navigation. ### Decisions - Scope for this PR: module-row navigation only. - Skipped-settings fallback: no-op. When no selected module exposes configurable variables, the `module-settings` step is skipped and clicking a module row does nothing (there is no card to scroll to). ### Scroll timing `navigateToStep` triggers a window scroll reset via an existing effect keyed on `currentStep.id`. To cooperate, `navigateToModule` stores the target module id in a ref and a follow-up effect (declared after the scroll-reset effect, so it runs second) calls `scrollIntoView` inside `requestAnimationFrame` once `module-settings` has rendered. When already on `module-settings`, it scrolls immediately. ### Follow-up (deferred): full navigable sidebar Not part of this PR, documented for later. The remainder of #27077's item #2, rebased onto current `main`: - `onNavigateStep?: (stepId: StepId) => void` on `SelectionSummary`. - Clickable step labels: `Base Template` -> `base-infra`, `Modules` -> `module-select`, `Customizations` -> `customizations`. - Clickable selected base-template row -> `base-parameters` (fall back to `base-infra` when that step is skipped for the chosen base). - Back-stack semantics via a `maxReachedStep` prop so steps at or below the furthest-reached group stay `complete` and clickable even after navigating backward, while strictly-higher groups render as inert `upcoming`. - `StepIndicator` and `BaseTemplateSelection` render as `<button>` when a navigation handler is supplied, else stay inert. - Stories: `NavigationClicks`, `BackwardNavigation`, and `UpcomingStepsInert`. </details> --- Coder Agents generated, on behalf of @aqandrew.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This implements migrations and code generation for interfacing with a PostgreSQL database.
A dependency is added for the "postgres" binary on the host, but that seems like an acceptable requirement considering it's our primary database.We decided Docker was a more reliable and ubiquitous dependency, so we launch a PostgreSQL Docker container instead.An in-memory database object can be created for simple cross-OS and fast testing.