Repository navigation
feat: register external connectors through maker checker (ADR-0013 step 1) - #92
Merged
Merged
Conversation
…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>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Sep 30, 2026
This branch was successfully deployed
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.
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
20260930120000_add_external_connectors.sql:external_connector_changesandexternal_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./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.@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.Tests
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