Skip to content

feat: register external connectors through maker checker (ADR-0013 step 1) - #92

Merged
pavancharak merged 2 commits into
mainfrom
feat/external-connector-registrations
Sep 30, 2026
Merged

pavancharak merged 2 commits into
mainfrom
feat/external-connector-registrations

Conversation

@pavancharak

Copy link
Copy Markdown
Owner

ADR-0013 step 1: an operator can register an external connector (a capability bound to an HTTPS endpoint they run, and to the policy that governs it) through maker checker, with no deploy. Nothing is released to these endpoints yet; the signed release is step 2.

What changes

  • Migration 20260930120000_add_external_connectors.sql: external_connector_changes and external_connectors. One open change and one active registration per capability (partial unique indexes). Rows are revoked, never deleted. Maker is not checker in the database too.
  • Routes under /external-connectors: list registrations, propose a change, list changes, approve, reject. Same rules as /approval-issuers: human callers only, maker is not checker, step up on approve and reject.
  • Refused at proposal: a capability in a built in connector's namespace (paytm, hubspot, github, slack, test, taken from the binding tables); malformed capability, policy name, parameter names or timeout (1000 to 30000, default 10000).
  • Endpoint address checks (@parmana/shared, network/externalEndpointAddress.ts): https only, a host name with a domain, no IP literal, localhost, user info or fragment, and every resolved address public (private, loopback, link local, CGNAT, multicast, reserved and documentation ranges refused, IPv4 and IPv6). Checked on proposal and again on approval, since approval is when it takes effect. Step 2 reuses them at every release.
  • Repositories: memory and Postgres; the Postgres one applies and resolves a change in one locked transaction.
  • OpenAPI, schemas, endpoint pages, llms files for the five routes, with responses captured from the real routes.

Tests

  • 41 unit tests for the address checks, 15 HTTP tests for the routes (no network: DNS is a table in the test), including a DNS change between proposal and approval.
  • Live Postgres repository test, added to the Docker image workflow (not run locally: Docker was not running).
  • Full pre commit preflight passed: 264 test files, all examples.

Before deploying

Apply the migration in production first. Until then nothing uses these tables except the new routes, which would return 500 if called. Not a docs claim yet: the CLAIMS entry comes with step 5, after the live check in step 6.

🤖 Generated with Claude Code

pavancharak and others added 2 commits September 30, 2026 23:05
…ep 1)

An operator can now bind a capability to an HTTPS endpoint they run,
and to the policy that governs it, with no deploy: one person proposes
the registration at POST /external-connectors/changes, a different
person approves it with a step up signature, as for approver keys.
Nothing is released to these endpoints yet; that is step 2.

- Migration 20260930120000: external_connector_changes and
  external_connectors, one open change and one active registration per
  capability, rows revoked and never deleted, maker is not checker in
  the database too.
- Memory and Postgres repositories; the Postgres one applies and
  resolves a change in one locked transaction. Its live test runs in
  the Docker image workflow.
- Endpoint address checks in @parmana/shared: https only, a host name
  with a domain, no IP literal, localhost, user info or fragment, and
  every resolved address public. Checked on proposal and again on
  approval; step 2 reuses them at every release.
- Built in connector namespaces (paytm, hubspot, github, slack, test)
  are refused, derived from the capability binding tables.
- OpenAPI, schemas, endpoint pages and llms files for the five routes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mintlify

mintlify Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
parmanasystems 🟢 Ready View Preview Sep 30, 2026, 5:42 PM

💡 Tip: Enable Automations to automatically generate PRs for you.

@vercel

vercel Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
parmana-api-real Ready Ready Preview Sep 30, 2026 5:42pm UTC

@pavancharak
pavancharak merged commit 72657b3 into main Sep 30, 2026
10 checks passed
@pavancharak
pavancharak deleted the feat/external-connector-registrations branch September 30, 2026 18:23

This branch was successfully deployed

2 active deployments
Preview — af7fa265 Deployed Sep 30, 2026 by vercel[bot]
staging - docs/site — af7fa265 Deployed Sep 30, 2026 by mintlify[bot]
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