Skip to content

CL proxy deploy blocked: COURTLISTENER_API_TOKEN unreachable from prod VM #237

@chitcommit

Description

@chitcommit

Summary

Two downstream PRs are blocked from production deploy because the prod VM operator cannot reach a COURTLISTENER_API_TOKEN via the canonical 1Password → ChittyConnect path. The token is required for the CourtListener proxy route used by ChittyCounsel evidence/case enrichment.

Per the ChittyConnect credential layer hierarchy (operator-manifest.jsonpolicy.secret_env_model), the operator is not a secrets store and we will not paste credentials through chat. Filing this as the durable unblock channel.

Downstream waiters

Both PRs are merge-ready on code/tests; deploy is deferred pending credential routing.

Evidence from credential probe (prod VM, op CLI as configured operator identity)

Vaults visible to the operator:

  • ChittyOS
  • ChittyOS-Core
  • synthetic-prod
  • synthetic-shared

Vaults NOT visible (expected but absent):

  • ChittyOS-Integrations — this is where third-party API tokens like COURTLISTENER_API_TOKEN should live per convention.

Cloudflare Secrets Store state:

  • Empty for the chittyconnect-prod worker — no COURTLISTENER_API_TOKEN binding.

synthetic-shared state:

  • Contains a CHITTY_CONNECT_TOKEN entry, but it is stale (created prior to last rotation cycle, fails verification against connect.chitty.cc/.well-known/token-introspect).
  • No COURTLISTENER_API_TOKEN present.

Net effect: no path from cold store → Secrets Store → worker env exists for the CL token, and the broker token (CHITTY_CONNECT_TOKEN) the worker would use to fetch it dynamically is itself stale.

Canonical fix paths (any one unblocks; doing all three closes the gap properly)

  1. Grant the prod VM operator identity read access to the ChittyOS-Integrations 1Password vault. This is the cleanest fix — the token already exists there per integrations convention, and grant restores the normal op run --env-file injection path for the worker deploy.

  2. Drop a COURTLISTENER_API_TOKEN item into synthetic-shared (the vault the operator can already read). Lower-friction interim; downside is it puts a third-party integration secret in a shared vault rather than the integrations-scoped vault.

  3. Rotate CHITTY_CONNECT_TOKEN in synthetic-shared and push the fresh value to the prod Secrets Store binding for chittyconnect-prod. This restores the broker path so the worker can resolve COURTLISTENER_API_TOKEN at runtime via ChittyConnect rather than at deploy time. Should be done regardless — the stale broker token is its own latent failure.

Recommended: (1) for durability + (3) for hygiene. (2) only if (1) is gated on an admin who is unreachable.

Definition of done

  • op item get COURTLISTENER_API_TOKEN succeeds from prod VM operator identity (whichever vault)
  • wrangler secret list --env production for chittyconnect-prod shows COURTLISTENER_API_TOKEN (or it resolves via Secrets Store binding)
  • CHITTY_CONNECT_TOKEN in synthetic-shared passes introspect against connect.chitty.cc
  • CHITTYCOUNSEL PR Configure CI/CD Pipelines #4 and chittyconnect PR feat(courtlistener): add /api/proxy/courtlistener proxy for ChittyCounsel #234 redeployed and /health green
  • This issue closed with a comment linking the deploy run

Non-asks

  • Do not ask the operator to paste a token value in chat or in an issue comment.
  • Do not commit the token to any repo.
  • Do not extend KV TTL as a workaround — KV is hot cache only.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions