Skip to content

AP-13: Retire repo-local ADMIN_TOKEN /admin/* path#89

Merged
isuttell merged 6 commits into
mainfrom
cursor/retire-admin-token-f54b
May 26, 2026
Merged

AP-13: Retire repo-local ADMIN_TOKEN /admin/* path#89
isuttell merged 6 commits into
mainfrom
cursor/retire-admin-token-f54b

Conversation

@isuttell

@isuttell isuttell commented May 26, 2026

Copy link
Copy Markdown
Contributor

CodeRabbit follow-up

Addressed the remaining actionable review items in the latest commit. Several items were already landed in 88a1082 (CLI README ../../docs/... links, smokeHarnessSecretFromEnv() in local-mvp-server.mjs, harness secret fallback docs in scripts/README.md, and response bodies in smoke-harness.mjs errors).

This commit:

  • Removes unused hmacBase64Url from scripts/deploy-pr-preview.mjs (leftover from ADMIN_TOKEN_HASH bootstrap).
  • Requires an explicit commandEnv for runCliJson in scripts/smoke-hosted.mjs (no stale adminEnv / implicit default).
  • Updates docs/specs/phases.md and docs/specs/mvp.md to drop repo-local admin CLI acceptance language.

Already fixed earlier (0eac26c): assertActorRateLimitFires(provisioned.apiKeySecret) — the key.secret ReferenceError from the first preview smoke failure.

pnpm verify passed locally on the branch head.

Linear Issue: AP-13

Open in Web Open in Cursor 

Summary by CodeRabbit

  • Breaking Changes

    • Retired the legacy repo-local admin CLI and ADMIN_TOKEN auth; admin routes removed and operator workflows now use the web dashboard / WorkOS operator paths.
  • New Features

    • Introduced smoke-harness auth for local/preview/PR flows and a hosted production smoke API key for scripted smoke runs.
    • New non-production smoke helpers/endpoints for workspace provisioning, cleanup, and artifact operations.
  • Documentation

    • Updated runbooks, deploy checklists, CLI docs, and specs to reflect the new operator/auth and smoke-harness flows.

Review Change Stack

cursoragent and others added 2 commits May 26, 2026 19:28
Remove legacy admin contract routes, API handlers, CLI admin verbs, and
ADMIN_TOKEN bootstrap secrets. Add non-production smoke harness routes and
update smokes, OpenAPI, workflows, and operator docs to use WorkOS/operator
paths plus SMOKE_HARNESS_SECRET or production smoke API keys.

Co-authored-by: Isaac Suttell <isaac@isaacsuttell.com>
Co-authored-by: Isaac Suttell <isaac@isaacsuttell.com>
@linear-code

linear-code Bot commented May 26, 2026

Copy link
Copy Markdown
AP-13 Ops: Retire repo-local ADMIN_TOKEN admin path

Context

ADMIN_TOKEN remains a bootstrap/legacy operating risk. It should be retired once Cloudflare Access plus WorkOS operator/member routes cover the remaining operational needs.

Source docs

  • docs/ops/status/phase-backlog.md
  • docs/ops/status/hosted-ops.md
  • docs/adr/0046-operator-identity-and-web-admin-surface.md

Scope

Remove the repo-local ADMIN_TOKEN /admin/* path after replacement coverage is complete, and update scripts/docs/secrets tables accordingly.

Out of scope

Do not remove the path before the migration plan and replacement smokes prove coverage.

Dependencies

Blocked by the legacy admin route migration plan.

Implementation notes

This project is pre-launch; when behavior changes, remove old paths outright rather than adding compatibility shims.

Acceptance

No runtime route requires ADMIN_TOKEN, docs no longer instruct operators to use it, and bootstrap/rotation runbooks reflect the replacement flow.

Verification

Run focused admin/operator tests, pnpm verify, and approved hosted smoke if required.

Remote Cursor handoff

Start by reading AGENTS.md, then docs/agents/remote-cursor-agent.md, then this issue. Fetch current repo status from docs/ops/project-status.md and relevant ADR/spec docs named above. Keep the change scoped to this issue. Run the ticket-specific verification plus pnpm verify unless the issue explicitly says a narrower check is acceptable. Do not run hosted production deploys or smokes unless the issue explicitly grants credentials and approval.

Review in Linear

@isuttell isuttell temporarily deployed to pr-preview-89 May 26, 2026 19:30 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented May 26, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2cc8bd60-574a-4805-9c3b-e4d54952bb7e

📥 Commits

Reviewing files that changed from the base of the PR and between 1fb78d8 and 9d5b971.

📒 Files selected for processing (3)
  • apps/cli/README.md
  • docs/specs/mvp.md
  • docs/specs/phases.md

Walkthrough

This PR removes the repo-local ADMIN_TOKEN surface and /admin/* routes and CLI verbs, replaces admin-token auth with SMOKE_HARNESS_SECRET for non-production test endpoints and a hosted production smoke API key, updates runtime principal/auth types and rate-limit/scope logic, removes admin helpers from the API worker, converts tests and scripts to shared smoke-harness helpers, updates the API client to drop admin APIs, and revises documentation and CI workflows to the new smoke-harness and WorkOS operator flows.

sequenceDiagram
  participant CLI
  participant SmokeHarness
  participant APIWorker
  participant DB
  participant R2
  CLI->>SmokeHarness: POST /__test__/provision-smoke (SMOKE_HARNESS_SECRET)
  SmokeHarness->>APIWorker: provision request with harness auth
  APIWorker->>DB: create workspace and one-time api key
  APIWorker-->>SmokeHarness: return workspace id and api key secret
  CLI->>APIWorker: publish using Authorization: Bearer <api-key>
  APIWorker->>R2: store artifact bytes
  SmokeHarness->>APIWorker: POST /__test__/delete-artifact (harness auth)
  APIWorker->>R2: delete object and write denylist key
  APIWorker->>DB: scheduled cleanup via /__test__/run-cleanup or scheduled handler
Loading

Possibly related issues

  • AP-13: Ops: Retire repo-local ADMIN_TOKEN admin path — This PR implements the retirement and replacement flows described in AP-13.
  • AP-12: Ops: Write and execute legacy admin route migration plan — The PR executes the migration steps and documents the retirement.

Possibly related PRs

  • zaks-io/agent-paste#72: touches PR preview CI and Lighthouse gating; overlaps on pr-preview workflow and harness auth adjustments.
  • zaks-io/agent-paste#16: related to smoke harness expiry/purge logic used by the refactored smoke scripts.
  • zaks-io/agent-paste#29: related to denylist key contract/shape used by smoke-harness delete/run-cleanup tests.

🐰
I swapped the old admin key for a secret bright,
Smoke harness hums beneath the devlight,
WorkOS guards the operator gate,
Cleanup hops in time, tidy and straight,
A carrot-coded nod to systems made right.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/retire-admin-token-f54b

CI failed with ReferenceError: key is not defined after admin path removal.
Also drop stale adminEnv default in runCliJson.

Co-authored-by: Isaac Suttell <isaac@isaacsuttell.com>
@cursor cursor Bot temporarily deployed to pr-preview-89 May 26, 2026 19:37 Inactive
@github-actions

Copy link
Copy Markdown

@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: 4

Caution

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

⚠️ Outside diff range comments (5)
scripts/deploy-pr-preview.mjs (1)

304-306: 🧹 Nitpick | 🔵 Trivial | 💤 Low value

Unused hmacBase64Url function.

This function appears to be dead code left over from the removed admin-token hashing logic. Consider removing it for cleaner maintenance.

🧹 Proposed cleanup
-function hmacBase64Url(value, secret) {
-  return createHmac("sha256", secret).update(value).digest("base64url");
-}
🤖 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 `@scripts/deploy-pr-preview.mjs` around lines 304 - 306, Remove the dead helper
function hmacBase64Url from scripts/deploy-pr-preview.mjs: locate the function
declaration function hmacBase64Url(value, secret) and delete it (and any related
imports like createHmac if now unused), after confirming there are no remaining
references to hmacBase64Url elsewhere in the codebase; ensure the file still
lints/compiles after removing the unused function and clean up any now-unused
imports.
scripts/smoke-hosted.mjs (2)

61-66: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Undefined variable key will cause runtime error.

Line 65 references key.secret, but key is not defined in this file. This appears to be a leftover from the removed admin flow. The variable should be provisioned.apiKeySecret.

🐛 Proposed fix
 if (target !== "production") {
   await assertArtifactRateLimitFires(published.view_url);
   await assertBytesPurgedAfterDelete(published);
   await assertBytesPurgedAfterExpiry(userEnv);
-  await assertActorRateLimitFires(key.secret);
+  await assertActorRateLimitFires(provisioned.apiKeySecret);
 }
🤖 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 `@scripts/smoke-hosted.mjs` around lines 61 - 66, The test references an
undefined variable key when calling assertActorRateLimitFires, causing a runtime
error; replace the use of key.secret with the correct provisioned.apiKeySecret
value (i.e., call assertActorRateLimitFires(provisioned.apiKeySecret)) so the
function uses the provisioned API key secret; update the call site in the block
that checks non-production targets where assertArtifactRateLimitFires,
assertBytesPurgedAfterDelete, assertBytesPurgedAfterExpiry, and
assertActorRateLimitFires are invoked.

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

Undefined variable adminEnv will cause runtime error.

The default parameter adminEnv on line 131 is not defined anywhere in the file. It was likely removed as part of the admin-token retirement but this reference remains. Since all call sites pass userEnv explicitly, this may not be hit, but it's a latent bug.

🐛 Proposed fix
-async function runCliJson(args, commandEnv = adminEnv) {
+async function runCliJson(args, commandEnv = userEnv) {

Note: If userEnv is not in scope at function definition time, you may need to make this parameter required or restructure the code.

🤖 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 `@scripts/smoke-hosted.mjs` at line 131, The function runCliJson currently uses
an undefined default parameter adminEnv which will throw at runtime; remove the
adminEnv default and either (A) set the default to userEnv if userEnv is
guaranteed to be in scope at definition time, or (B) make the second parameter
required (no default) and update callers to pass userEnv explicitly; update the
function signature for runCliJson and any call sites accordingly, referencing
the runCliJson function and the adminEnv/userEnv symbols to locate the change.
docs/specs/phases.md (1)

33-33: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify Phase 1 admin deliverables post-AP-13 retirement.

Line 33 still lists "repo-local admin CLI" as a Phase 1 deliverable, while line 25 explicitly notes the legacy ADMIN_TOKEN was retired in AP-13. This creates potential confusion about the current Phase 1 deliverable set.

Consider either removing the admin CLI reference or adding a clarifying note that it was later retired.

📝 Suggested revision
-- Admin: internal REST APIs plus repo-local admin CLI.
+- Operator: WorkOS-based web operator routes (legacy repo-local admin CLI retired in AP-13).

Or add a clarifying note:

-- Admin: internal REST APIs plus repo-local admin CLI.
+- Operator: internal REST APIs, web operator routes, and WorkOS admin auth (repo-local admin CLI later retired in AP-13).
🤖 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 `@docs/specs/phases.md` at line 33, The line "Admin: internal REST APIs plus
repo-local admin CLI." is inconsistent with AP-13 retirement of the legacy
ADMIN_TOKEN; either remove the "repo-local admin CLI" phrase or append a short
clarifying note that the repo-local admin CLI (and ADMIN_TOKEN) was retired in
AP-13 and is no longer a Phase 1 deliverable so readers aren’t confused—update
the sentence that contains "Admin: internal REST APIs plus repo-local admin
CLI." accordingly.
docs/specs/mvp.md (1)

160-160: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update stale admin CLI reference in retention section.

This line still references "admin CLI" for triggering cleanup, but the admin CLI was removed in AP-13. Per the updated acceptance criteria (docs/specs/acceptance.md line 53), manual cleanup now uses the non-production harness endpoint POST /__test__/run-cleanup.

📝 Suggested revision
-Cleanup runs in the API Worker scheduled handler and can also be triggered through the admin CLI.
+Cleanup runs in the API Worker scheduled handler and can also be triggered through the non-production smoke harness endpoint.
🤖 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 `@docs/specs/mvp.md` at line 160, Replace the stale phrase "admin CLI" in the
sentence that begins "Cleanup runs in the API Worker scheduled handler..." with
the correct manual trigger: the non-production harness endpoint POST
/__test__/run-cleanup, so the sentence reads that cleanup runs on the scheduled
API Worker handler and can also be triggered via the non-production harness
endpoint POST /__test__/run-cleanup per the updated acceptance criteria.
🤖 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 `@apps/cli/README.md`:
- Around line 65-70: Update the broken relative links in the CLI README: replace
the `../docs/...` targets used on the lines showing `agent-paste login` (ADR
0068 link) and the admin operations spec link (used in the paragraph after the
command table) with the correct two-level-up path `../../docs/...` so the ADR
and admin spec resolve correctly from apps/cli/README.md.

In `@scripts/local-mvp-server.mjs`:
- Around line 11-12: The environment variable precedence for smokeHarnessSecret
is inverted compared to smoke-harness.mjs; update the assignment of the
smokeHarnessSecret constant to read process.env.AGENT_PASTE_SMOKE_HARNESS_SECRET
first, then process.env.SMOKE_HARNESS_SECRET, and keep the same default
"local-smoke-harness-secret" so both modules use the same precedence when both
vars are set.

In `@scripts/README.md`:
- Around line 109-110: Update the runbooks that currently mention only
AGENT_PASTE_PR_SMOKE_HARNESS_SECRET so they explicitly state that
scripts/smoke-hosted.mjs also accepts AGENT_PASTE_PREVIEW_SMOKE_HARNESS_SECRET
and will fall back to that value if the PR-specific variable is not set;
reference both environment variable names (AGENT_PASTE_PR_SMOKE_HARNESS_SECRET
and AGENT_PASTE_PREVIEW_SMOKE_HARNESS_SECRET) and the scripts/smoke-hosted.mjs
behavior, and mirror the README example showing
AGENT_PASTE_PREVIEW_SMOKE_HARNESS_SECRET for pnpm smoke:preview to avoid
operator confusion.

In `@scripts/smoke-harness.mjs`:
- Around line 68-70: The error messages for failed fetches (e.g., the throw in
the force-expire response check and other functions runSmokeCleanup,
deleteSmokeArtifact, listR2Keys, fetchDenylistKey) only include status codes;
change them to include the response body for consistency with
provisionSmokeWorkspace by awaiting response.text() (or response.json() where
appropriate) and appending that body to the thrown Error message (e.g., throw
new Error(`... returned ${response.status}: ${body}`)) so failures include both
status and body for easier debugging.

---

Outside diff comments:
In `@docs/specs/mvp.md`:
- Line 160: Replace the stale phrase "admin CLI" in the sentence that begins
"Cleanup runs in the API Worker scheduled handler..." with the correct manual
trigger: the non-production harness endpoint POST /__test__/run-cleanup, so the
sentence reads that cleanup runs on the scheduled API Worker handler and can
also be triggered via the non-production harness endpoint POST
/__test__/run-cleanup per the updated acceptance criteria.

In `@docs/specs/phases.md`:
- Line 33: The line "Admin: internal REST APIs plus repo-local admin CLI." is
inconsistent with AP-13 retirement of the legacy ADMIN_TOKEN; either remove the
"repo-local admin CLI" phrase or append a short clarifying note that the
repo-local admin CLI (and ADMIN_TOKEN) was retired in AP-13 and is no longer a
Phase 1 deliverable so readers aren’t confused—update the sentence that contains
"Admin: internal REST APIs plus repo-local admin CLI." accordingly.

In `@scripts/deploy-pr-preview.mjs`:
- Around line 304-306: Remove the dead helper function hmacBase64Url from
scripts/deploy-pr-preview.mjs: locate the function declaration function
hmacBase64Url(value, secret) and delete it (and any related imports like
createHmac if now unused), after confirming there are no remaining references to
hmacBase64Url elsewhere in the codebase; ensure the file still lints/compiles
after removing the unused function and clean up any now-unused imports.

In `@scripts/smoke-hosted.mjs`:
- Around line 61-66: The test references an undefined variable key when calling
assertActorRateLimitFires, causing a runtime error; replace the use of
key.secret with the correct provisioned.apiKeySecret value (i.e., call
assertActorRateLimitFires(provisioned.apiKeySecret)) so the function uses the
provisioned API key secret; update the call site in the block that checks
non-production targets where assertArtifactRateLimitFires,
assertBytesPurgedAfterDelete, assertBytesPurgedAfterExpiry, and
assertActorRateLimitFires are invoked.
- Line 131: The function runCliJson currently uses an undefined default
parameter adminEnv which will throw at runtime; remove the adminEnv default and
either (A) set the default to userEnv if userEnv is guaranteed to be in scope at
definition time, or (B) make the second parameter required (no default) and
update callers to pass userEnv explicitly; update the function signature for
runCliJson and any call sites accordingly, referencing the runCliJson function
and the adminEnv/userEnv symbols to locate the change.
🪄 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: fd074002-3e8e-46dd-a6b6-690ac6ee1328

📥 Commits

Reviewing files that changed from the base of the PR and between b7d92af and 1e191b7.

📒 Files selected for processing (55)
  • .env.example
  • .github/workflows/deploy-production.yml
  • .github/workflows/pr-preview.yml
  • apps/api/.dev.vars.example
  • apps/api/src/error-envelope.test.ts
  • apps/api/src/index.test.ts
  • apps/api/src/index.ts
  • apps/api/src/local-mvp.test.ts
  • apps/cli/README.md
  • apps/cli/src/index.ts
  • apps/cli/test/index.test.ts
  • apps/cli/test/local.test.ts
  • docs/ops/ap-12-migration-plan.md
  • docs/ops/bootstrap-hosting-checklist.md
  • docs/ops/first-deploy.md
  • docs/ops/project-status.md
  • docs/ops/runbook-logpush.md
  • docs/ops/runbook-rotation.md
  • docs/ops/runbook-workos.md
  • docs/ops/status/changelog.md
  • docs/ops/status/coverage.md
  • docs/ops/status/hosted-ops.md
  • docs/ops/status/phase-backlog.md
  • docs/ops/worker-runtime-todo.md
  • docs/specs/acceptance.md
  • docs/specs/admin.md
  • docs/specs/api.md
  • docs/specs/features.md
  • docs/specs/local-dev.md
  • docs/specs/mvp.md
  • docs/specs/phases.md
  • examples/local-harness/README.md
  • package.json
  • packages/api-client/src/index.ts
  • packages/api-client/test/client.test.ts
  • packages/auth/src/index.ts
  • packages/contracts/openapi/api.json
  • packages/contracts/src/mvp-contracts.test.ts
  • packages/contracts/src/openapi/api.ts
  • packages/contracts/src/openapi/shared.ts
  • packages/contracts/src/routes.ts
  • packages/worker-runtime/src/index.ts
  • packages/worker-runtime/src/principal.ts
  • packages/worker-runtime/src/rate-limit.test.ts
  • packages/worker-runtime/src/rate-limit.ts
  • packages/worker-runtime/src/registrar.ts
  • scripts/README.md
  • scripts/bootstrap-secrets.mjs
  • scripts/deploy-pr-preview.mjs
  • scripts/lighthouse-dashboard-a11y.mjs
  • scripts/local-mvp-server.mjs
  • scripts/smoke-harness.mjs
  • scripts/smoke-hosted.mjs
  • scripts/smoke-local-mvp.mjs
  • scripts/smoke-web-api.mjs
💤 Files with no reviewable changes (7)
  • package.json
  • packages/worker-runtime/src/index.ts
  • packages/worker-runtime/src/registrar.ts
  • packages/worker-runtime/src/rate-limit.ts
  • packages/contracts/src/mvp-contracts.test.ts
  • packages/worker-runtime/src/rate-limit.test.ts
  • packages/contracts/src/openapi/api.ts

Comment thread apps/cli/README.md Outdated
Comment thread scripts/local-mvp-server.mjs Outdated
Comment thread scripts/README.md
Comment thread scripts/smoke-harness.mjs
- Fix relative doc links in apps/cli/README.md
- Use smokeHarnessSecretFromEnv() in local-mvp-server for consistent precedence
- Include response bodies in smoke-harness error messages
- Document preview vs PR harness secret fallback in scripts README and runbooks

Co-authored-by: Isaac Suttell <isaac@isaacsuttell.com>
@cursor cursor Bot temporarily deployed to pr-preview-89 May 26, 2026 19:42 Inactive
@github-actions

Copy link
Copy Markdown

Remove unused hmacBase64Url from deploy-pr-preview, require explicit CLI env
in smoke-hosted runCliJson, and clarify phases/mvp docs after admin path
retirement. Other review items were already fixed in 88a1082.

Co-authored-by: Isaac Suttell <isaac@isaacsuttell.com>
@cursor cursor Bot temporarily deployed to pr-preview-89 May 26, 2026 19:49 Inactive
@github-actions

Copy link
Copy Markdown

@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

🤖 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 `@apps/cli/README.md`:
- Line 65: The README table entry for the CLI command `agent-paste login`
incorrectly links to ADR 0068 (web AuthKit); update the link to point to ADR
0060 which documents the CLI loopback login flow. Locate the table row
containing `agent-paste login` in apps/cli/README.md and replace the ADR
reference `0068`/URL with the ADR 0060 reference/URL so the CLI login command
points to the correct documentation.

In `@docs/specs/mvp.md`:
- Line 224: The MVP acceptance bullets are contradictory about auth/surface:
reconcile references to "agent-paste login" and the "/v1/web/*" surface with the
declared API-key-only public auth and deferred OAuth/dashboard; either remove or
mark "agent-paste login" and "/v1/web/*" as non-MVP (future work) or update the
auth scope to include them. Edit the MVP list so the entry about provisioning a
workspace/API key via "agent-paste login" explicitly states it is
non-production/future if OAuth/dashboard is deferred, and either delete or
reword the "/v1/web/*" acceptance to match API-key-only public auth (e.g., state
only API-key endpoints are in MVP). Ensure the symbols "agent-paste login" and
"/v1/web/*" are updated consistently across the document.

In `@docs/specs/phases.md`:
- Line 56: Phase 2's exit criteria currently includes the "web dashboard, WorkOS
operator routes, and `agent-paste login` with Codex assistance", which overlaps
with Phase 3; remove that phrase from the Phase 2 exit criteria and instead add
a clear statement in the Phase 3 scope that it is responsible for delivering the
web dashboard, WorkOS operator routes, and `agent-paste login` with Codex
assistance so the milestone boundaries are distinct and testable (update any
neighboring sentences that imply those surfaces are done in Phase 2 to avoid
contradiction).
🪄 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: 7c131784-262d-499e-86fb-929c2144f952

📥 Commits

Reviewing files that changed from the base of the PR and between 1e191b7 and 1fb78d8.

📒 Files selected for processing (11)
  • apps/cli/README.md
  • docs/ops/first-deploy.md
  • docs/ops/runbook-rotation.md
  • docs/ops/runbook-workos.md
  • docs/specs/mvp.md
  • docs/specs/phases.md
  • scripts/README.md
  • scripts/deploy-pr-preview.mjs
  • scripts/local-mvp-server.mjs
  • scripts/smoke-harness.mjs
  • scripts/smoke-hosted.mjs
💤 Files with no reviewable changes (1)
  • scripts/deploy-pr-preview.mjs

Comment thread apps/cli/README.md Outdated
Comment thread docs/specs/mvp.md Outdated
Comment thread docs/specs/phases.md Outdated
Point CLI login at ADR 0060, mark login and /v1/web/* as Phase 3 in mvp.md,
and keep Phase 2 exit criteria operational without dashboard overlap.
@cursor cursor Bot temporarily deployed to pr-preview-89 May 26, 2026 20:04 Inactive
@github-actions

Copy link
Copy Markdown

@isuttell isuttell merged commit d3317a2 into main May 26, 2026
4 checks passed
@isuttell isuttell deleted the cursor/retire-admin-token-f54b branch May 26, 2026 20:10
@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.

2 participants