Skip to content

Add dashboard workspace artifact reads#34

Merged
isuttell merged 2 commits into
mainfrom
agents/web-dashboard-api
May 23, 2026
Merged

Add dashboard workspace artifact reads#34
isuttell merged 2 commits into
mainfrom
agents/web-dashboard-api

Conversation

@isuttell

@isuttell isuttell commented May 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Implements the first dashboard read tranche after the WorkOS callback so authenticated Workspace Members can load workspace context and artifact data through the API. This intentionally leaves keys, audit, settings, and admin lockdown endpoints for later PRs.

Changes

  • Added Workspace Member-protected GET /v1/web/workspace, GET /v1/web/artifacts, and GET /v1/web/artifacts/{artifactId} behavior in apps/api.
  • Added cursor pagination for dashboard artifact lists in local and Postgres repositories under the member workspace RLS scope.
  • Registered artifact list query params and generic artifact detail not_found behavior in contracts/OpenAPI.
  • Added API and db coverage for workspace reads, artifact pagination, invalid pagination, and cross-workspace not-found boundaries.
  • Updated dashboard status docs for this tranche only.

Risk: MEDIUM

  • Areas touched: apps/api, packages/db repository/query reads, packages/contracts, status docs.
  • Security: Workspace Member auth is reused from PR Add WorkOS web auth callback #32; dashboard reads execute under the actor workspace scope/RLS. Cross-workspace artifact detail returns generic not_found.
  • Performance: Artifact list uses keyset cursor pagination ordered by created_at, id; no new writes or migrations.
  • Breaking: no public CLI/API-key route changes; web artifact detail error code changes from scaffold-specific artifact_not_found to generic not_found.

Test plan

  • pnpm --filter @agent-paste/api test
  • pnpm --filter @agent-paste/db test
  • pnpm --filter @agent-paste/contracts test
  • pnpm --filter @agent-paste/contracts openapi:check
  • pnpm --filter @agent-paste/api typecheck
  • pnpm --filter @agent-paste/contracts typecheck
  • pnpm --filter @agent-paste/db typecheck
  • pnpm --filter @agent-paste/db db:check
  • pnpm verify

CodeRabbit notes

  • coderabbit review --agent --base agents/workos-callback-api could not run: CodeRabbit returned a usage-credit rate limit (waitTime: 9 minutes and 17 seconds). No CodeRabbit findings were available to address.

Summary by CodeRabbit

  • New Features

    • Cursor-based pagination for artifact listings and a workspace context endpoint (usage limits, default_key_first_run).
    • Web auth callback accepts WorkOS session/token identities, derives idempotency keys, and performs idempotent member provisioning.
  • Improvements

    • Stronger validation and explicit 400/401 errors for invalid/blank cursor, limit, or callback identity; enforced limit bounds (1–100), default limit 50.
    • Artifact detail/listing use standardized not_found semantics.
  • Tests

    • Expanded coverage for callback identity handling, idempotency, pagination, and workspace/artifact read flows.
  • Documentation

    • OpenAPI and ops docs updated to reflect pagination and dashboard-read endpoints.

Review Change Stack

@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 20:45 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 39d101fc-9ac8-4784-ae84-250a98755d5b

📥 Commits

Reviewing files that changed from the base of the PR and between 00fd36b and a439136.

📒 Files selected for processing (13)
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • apps/api/src/workos.test.ts
  • apps/api/src/workos.ts
  • docs/ops/project-status.md
  • docs/ops/web-app-todo.md
  • packages/contracts/openapi/api.json
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/routes.ts
  • packages/db/src/index.test.ts
  • packages/db/src/local-repository.ts
  • packages/db/src/postgres/repository.ts
  • packages/db/src/queries/artifacts.ts

Walkthrough

This PR implements WorkOS web callback idempotency and cursor/limit pagination for web artifacts. It updates contracts/OpenAPI and route errors, extends WorkOS verification to expose session/token identifiers and remote JWKS caching, adds parsePagination and idempotency-key logic in API handlers, implements cursor pagination and idempotent resolveWebMember in Local and Postgres repositories (with DB query helpers), expands tests across API/DB/WorkOS, and updates docs to record the completed dashboard-read endpoints.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant API
  participant WorkOS
  participant DB
  Client->>API: POST /v1/auth/web/callback (JWT)
  API->>WorkOS: verifyWebToken(token)
  WorkOS-->>API: WebCallbackIdentity (token_id or session_id)
  API->>DB: resolveWebMember({ workosUserId, email, idempotencyKey })
  DB-->>API: webAuthResponse
  Client->>API: GET /v1/web/artifacts?limit=2&cursor=abc
  API->>API: parsePagination(limit,cursor)
  API->>DB: listWebArtifacts(actor, {cursor, limit})
  DB-->>API: { items, page_info }
  API-->>Client: 200 { items, page_info }
Loading

Possibly related PRs

  • zaks-io/agent-paste#32: Overlaps on WorkOS web auth callback changes and resolveWebMember idempotency plumbing.
  • zaks-io/agent-paste#24: Introduced the initial WorkOS-backed /v1/auth/web/callback and /v1/web/* API surface this PR extends.
  • zaks-io/agent-paste#4: Related idempotent admin command / runCommand idempotency machinery used by resolveWebMember.

Poem

🐰 I hop through tokens, jti in paw,
I stitch idempotency with one small law,
I base64 cursors and sort by night’s draw,
Pages return neat — newest-first awe,
Tests and docs cheer — carrots for the cause.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add dashboard workspace artifact reads' directly and clearly describes the main feature added: new dashboard read endpoints for workspace and artifact data. It matches the core PR objective of implementing initial dashboard read functionality.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch agents/web-dashboard-api

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint skipped: no ESLint configuration detected in root package.json. To enable, add eslint to devDependencies.


Comment @coderabbitai help to get the list of available commands and usage tips.

@isuttell

Copy link
Copy Markdown
Contributor Author

@CodeRabbit review

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/db/src/local-repository.ts`:
- Around line 731-742: The decodeWebArtifactCursor function currently accepts
any string for raw.created_at; change it to validate and normalize that field:
after confirming raw.created_at is a string, parse it with new
Date(raw.created_at), throw an error if the result is an invalid date
(isNaN(date.getTime())), and if valid return created_at normalized via
date.toISOString() (instead of the original string) along with id; ensure the
function (decodeWebArtifactCursor) still throws on invalid cursor formats or
invalid dates so downstream string-based cursor comparisons match Postgres
canonical ordering.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 0aa4e649-5558-4848-98d4-295c5143153f

📥 Commits

Reviewing files that changed from the base of the PR and between 32786ab and fcd5d91.

📒 Files selected for processing (11)
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • docs/ops/project-status.md
  • docs/ops/web-app-todo.md
  • packages/contracts/openapi/api.json
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/routes.ts
  • packages/db/src/index.test.ts
  • packages/db/src/local-repository.ts
  • packages/db/src/postgres/repository.ts
  • packages/db/src/queries/artifacts.ts

Comment thread packages/db/src/local-repository.ts
@isuttell isuttell force-pushed the agents/workos-callback-api branch from 32786ab to 9bc4d38 Compare May 23, 2026 21:10
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from fcd5d91 to f819aa5 Compare May 23, 2026 21:15
@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 21:15 — with GitHub Actions Inactive
@isuttell

Copy link
Copy Markdown
Contributor Author

@CodeRabbit review

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@isuttell

Copy link
Copy Markdown
Contributor Author

@codereview review

@isuttell isuttell force-pushed the agents/web-dashboard-api branch from f819aa5 to cf09800 Compare May 23, 2026 22:20
@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 22:20 — with GitHub Actions Inactive
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from cf09800 to 002b3a4 Compare May 23, 2026 22:25
@isuttell isuttell changed the base branch from agents/workos-callback-api to agents/web-member-schema May 23, 2026 22:25
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from 002b3a4 to 8cd3c15 Compare May 23, 2026 22:26
@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 22:26 — with GitHub Actions Inactive
* feat(api): add WorkOS web auth callback

* fix(api): address WorkOS callback review

* fix(api): address WorkOS callback review follow-ups

* fix(api): address WorkOS callback review follow-ups
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from 8cd3c15 to eda9d27 Compare May 23, 2026 22:33
@isuttell isuttell changed the base branch from agents/web-member-schema to main May 23, 2026 22:34
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from eda9d27 to b850a8c Compare May 23, 2026 22:35
@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 22:35 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Full review triggered.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/api/src/workos.ts (1)

31-61: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don’t require callback-only claims in the shared WorkOS authenticator.

resolveWorkOsIdentity() is now used as a gate for every /v1/web/* request, but it returns null unless sid or jti is present. Those fields are still optional on WorkOsIdentity, so a valid WorkOS access token without them now fails general web auth instead of only failing the callback idempotency path. Keep this helper returning a plain WorkOsIdentity, and enforce token_id/session_id only inside webAuthCallback().

🔧 Suggested direction
-export async function resolveWorkOsIdentity(
+export async function resolveWorkOsIdentity(
   bearerValue: string,
   options: WorkOsVerificationOptions,
-): Promise<WebCallbackIdentity | null> {
+): Promise<WorkOsIdentity | null> {
@@
-  const identity = {
+  return {
     workos_user_id: user.id,
     email: user.email,
     ...(verified.sessionId ? { session_id: verified.sessionId } : {}),
-  };
-  if (verified.tokenId) {
-    return { ...identity, token_id: verified.tokenId };
-  }
-  if (verified.sessionId) {
-    return { workos_user_id: user.id, email: user.email, session_id: verified.sessionId };
-  }
-  return null;
+    ...(verified.tokenId ? { token_id: verified.tokenId } : {}),
+  };
 }

Then keep the existing hasWebCallbackId() check in webAuthCallback() as the callback-specific guard.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/api/src/workos.ts` around lines 31 - 61, resolveWorkOsIdentity currently
forces presence of sessionId (sid) or tokenId (jti) and returns null unless one
is present; change it to always return a WorkOsIdentity (with optional token_id
and session_id when present) for any valid user/token combo: parseBearerToken,
verifyWorkOsAccessToken, fetchWorkOsUser, build and return an identity object
containing workos_user_id and email and include token_id and/or session_id only
if verified.tokenId/verified.sessionId exist, but do not return null solely for
missing callback-only claims. Keep the callback-specific guard in
webAuthCallback by using hasWebCallbackId() there to enforce token_id/session_id
for the idempotency path.
packages/db/src/local-repository.ts (1)

218-263: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Make local web-member provisioning atomic.

Lines 225 and 236 persist the workspace/member before the awaited generateApiKey(...) on Line 238. If that call rejects, retries will hit the existing-member path and never create the default key, leaving local state inconsistent with Postgres.

Suggested fix
     const workspace: Workspace = {
       id: crypto.randomUUID(),
       name: `${input.email.split("@")[0] ?? "user"}'s Workspace`,
       contact_email: input.email,
       created_at: now,
       updated_at: now,
     };
-    this.workspaces.set(workspace.id, workspace);
 
     const member: WorkspaceMember = {
       id: createId("mem"),
       workspace_id: workspace.id,
       workos_user_id: input.workosUserId,
@@
       created_at: now,
       last_seen_at: now,
     };
-    this.workspaceMembers.set(member.id, member);
 
     const generated = await generateApiKey(this.options.apiKeyEnv ?? "preview", this.options.apiKeyPepper);
     const apiKey: ApiKey = {
       id: createId("key"),
       workspace_id: workspace.id,
@@
       last_used_at: null,
       created_at: now,
     };
+    this.workspaces.set(workspace.id, workspace);
+    this.workspaceMembers.set(member.id, member);
     this.apiKeys.set(apiKey.id, apiKey);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/db/src/local-repository.ts` around lines 218 - 263, The
workspace/member creation is persisted before awaiting generateApiKey, causing
partial state if generateApiKey rejects; change the flow in the function that
performs web-member provisioning to generate the API key first (call
generateApiKey(this.options.apiKeyEnv ?? "preview", this.options.apiKeyPepper))
and only after it resolves, create and set the Workspace (this.workspaces.set)
and WorkspaceMember (this.workspaceMembers.set), then create and set the ApiKey
(this.apiKeys.set) and emit events (addEvent), finally return webAuthResponse;
alternatively, if you must persist early, wrap persistence in a rollback path
that removes the workspace and member on generateApiKey failure to keep local
state consistent with Postgres.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/contracts/openapi/api.json`:
- Around line 4298-4306: The cursor query parameter schema currently allows any
string length; update the "cursor" parameter definition (the object with "name":
"cursor", "in": "query") to include "minLength": 1 and "maxLength": 500 so it
matches the existing cursor contract and rejects empty/oversized values while
keeping "required": false and the type "string".

In `@packages/contracts/src/openapi/api.ts`:
- Around line 107-108: The OpenAPI param description for limit currently only
mentions the max; update the queryIntegerParam call for "limit" to include the
default page size (50) so docs/SDKs reflect runtime behavior used by
parsePagination(); e.g., change the description passed to
queryIntegerParam("limit", ...) to state "Maximum number of artifacts to return,
up to 100. Defaults to 50 when omitted." and keep the existing
cursor/queryStringParam unchanged.

In `@packages/db/src/postgres/repository.ts`:
- Around line 360-375: In listWebArtifacts, validate the incoming
pagination.limit before using it: if pagination.limit is defined and is not a
positive integer (<= 0 or NaN), throw a clear RangeError (or similar) to fail
fast instead of passing invalid values to SQL; then compute const limit =
pagination.limit ?? 50 and continue using that limit for the query and
pagination logic (references: listWebArtifacts, pagination.limit,
decodeWebArtifactCursor, encodeWebArtifactCursor). Ensure the check happens at
the top of the function so negative or zero values are rejected immediately.

---

Outside diff comments:
In `@apps/api/src/workos.ts`:
- Around line 31-61: resolveWorkOsIdentity currently forces presence of
sessionId (sid) or tokenId (jti) and returns null unless one is present; change
it to always return a WorkOsIdentity (with optional token_id and session_id when
present) for any valid user/token combo: parseBearerToken,
verifyWorkOsAccessToken, fetchWorkOsUser, build and return an identity object
containing workos_user_id and email and include token_id and/or session_id only
if verified.tokenId/verified.sessionId exist, but do not return null solely for
missing callback-only claims. Keep the callback-specific guard in
webAuthCallback by using hasWebCallbackId() there to enforce token_id/session_id
for the idempotency path.

In `@packages/db/src/local-repository.ts`:
- Around line 218-263: The workspace/member creation is persisted before
awaiting generateApiKey, causing partial state if generateApiKey rejects; change
the flow in the function that performs web-member provisioning to generate the
API key first (call generateApiKey(this.options.apiKeyEnv ?? "preview",
this.options.apiKeyPepper)) and only after it resolves, create and set the
Workspace (this.workspaces.set) and WorkspaceMember (this.workspaceMembers.set),
then create and set the ApiKey (this.apiKeys.set) and emit events (addEvent),
finally return webAuthResponse; alternatively, if you must persist early, wrap
persistence in a rollback path that removes the workspace and member on
generateApiKey failure to keep local state consistent with Postgres.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d49fd4d1-48ba-4740-90d0-815f178c9978

📥 Commits

Reviewing files that changed from the base of the PR and between fcd5d91 and b850a8c.

📒 Files selected for processing (13)
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • apps/api/src/workos.test.ts
  • apps/api/src/workos.ts
  • docs/ops/project-status.md
  • docs/ops/web-app-todo.md
  • packages/contracts/openapi/api.json
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/routes.ts
  • packages/db/src/index.test.ts
  • packages/db/src/local-repository.ts
  • packages/db/src/postgres/repository.ts
  • packages/db/src/queries/artifacts.ts
💤 Files with no reviewable changes (1)
  • docs/ops/project-status.md

Comment thread packages/contracts/openapi/api.json
Comment thread packages/contracts/src/openapi/api.ts Outdated
Comment thread packages/db/src/postgres/repository.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/db/src/local-repository.ts`:
- Around line 293-315: In listWebArtifacts, add the same validation as
PostgresRepository for pagination.limit: if pagination.limit is provided and is
not a positive integer (>0) throw a clear error (fail-fast) before using it to
compute limit; keep using decodeWebArtifactCursor, compareArtifactsForWeb and
encodeWebArtifactCursor as-is and only proceed when limit is valid (or absent,
default to 50).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e9364bcc-d42a-4a8f-bce9-738a27ecf45d

📥 Commits

Reviewing files that changed from the base of the PR and between 00fd36b and b850a8c.

📒 Files selected for processing (13)
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • apps/api/src/workos.test.ts
  • apps/api/src/workos.ts
  • docs/ops/project-status.md
  • docs/ops/web-app-todo.md
  • packages/contracts/openapi/api.json
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/routes.ts
  • packages/db/src/index.test.ts
  • packages/db/src/local-repository.ts
  • packages/db/src/postgres/repository.ts
  • packages/db/src/queries/artifacts.ts

Comment thread packages/db/src/local-repository.ts
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from b850a8c to 86433e0 Compare May 23, 2026 22:58
@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 22:58 — with GitHub Actions Inactive
@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Full review triggered.

@isuttell isuttell force-pushed the agents/web-dashboard-api branch from 86433e0 to 2e8e5a8 Compare May 23, 2026 23:06
@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 23:06 — with GitHub Actions Inactive
@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Full review triggered.

@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai resolve

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@packages/contracts/src/openapi/api.ts`:
- Around line 14-19: The cursor length constraints are duplicated between the
queryCursorParam helper and applyWebArtifactCursorParameterBounds; either remove
the redundant minLength/maxLength from one place or add a clarifying comment
explaining why both are required (e.g., note that .optional() strips openapi
schema propagation so post-processing is needed). Update either queryCursorParam
(remove minLength/maxLength in Cursor.openapi) or
applyWebArtifactCursorParameterBounds (remove the re-application of bounds), and
if you keep both, add an inline comment referencing queryCursorParam and the
.optional() call to justify the duplication.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: c0eab229-4224-4bfe-b544-fb77038643c2

📥 Commits

Reviewing files that changed from the base of the PR and between 00fd36b and 86433e0.

📒 Files selected for processing (13)
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • apps/api/src/workos.test.ts
  • apps/api/src/workos.ts
  • docs/ops/project-status.md
  • docs/ops/web-app-todo.md
  • packages/contracts/openapi/api.json
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/routes.ts
  • packages/db/src/index.test.ts
  • packages/db/src/local-repository.ts
  • packages/db/src/postgres/repository.ts
  • packages/db/src/queries/artifacts.ts

Comment thread packages/contracts/src/openapi/api.ts
@isuttell isuttell force-pushed the agents/web-dashboard-api branch from 2e8e5a8 to a439136 Compare May 23, 2026 23:10
@isuttell

Copy link
Copy Markdown
Contributor Author

@coderabbitai full review

@isuttell isuttell temporarily deployed to pr-preview-34 May 23, 2026 23:10 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Full review triggered.

@coderabbitai

coderabbitai Bot commented May 23, 2026

Copy link
Copy Markdown
✅ Actions performed

Comments resolved and changes approved.

@isuttell isuttell merged commit ba78ff5 into main May 23, 2026
3 of 4 checks passed
@github-actions

Copy link
Copy Markdown

agent-paste PR preview resources were cleaned up. The pr-preview-${context.issue.number} environment is left in place; remove it from the GitHub UI if desired.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant