Skip to content

Phase 5 design decision: distinct-tag active connector switch (advanced mode, design-only) - #24

Merged
F-e-u-e-r merged 1 commit into
mainfrom
design/phase5-connector-switch
Jul 15, 2026
Merged

Phase 5 design decision: distinct-tag active connector switch (advanced mode, design-only)#24
F-e-u-e-r merged 1 commit into
mainfrom
design/phase5-connector-switch

Conversation

@F-e-u-e-r

Copy link
Copy Markdown
Owner

What

Docs-only design-decision PR (the revised Phase 5 flagship scope). Replaces the docs/design/connector-failover-apply.md skeleton with the committed design and updates the two v1.3 Roadmap items.

The owner's five binding points, all encoded: (1) same-tag native HA stays default/recommended; (2) apply mode is a separate advanced mode — the distinct-tag active connector switch; (3) scoped to online-but-bad forced selection (wrong egress IP / bad provider path / quota / manual evacuation); (4) not a replacement for Tailscale-native HA (they compose; no auto-watcher in v1.3); (5) explicit docs, migration, rollback, and warnings are gated BEFORE implementation.

Review

Tri-model consensus reached before this PR was opened: Grok 4.5 (high) — 4 rounds, final PROCEED; GPT-5.6-sol (max) — 4 rounds, final PROCEED. 13 design findings raised across rounds (2 Blocker/Major-class mechanism gaps, TOCTOU, migration executability, drift semantics, etc.), every one incorporated and closure-confirmed by both reviewers.

Verification

Docs-only: check_docs_links (41 files OK), README parity OK, docs tests OK. No behavior change; implementation is gated per the design's pre-implementation gate (operator-docs PR merges before any implementation PR opens).

🤖 Generated with Claude Code

…ed mode)

Replaces the design skeleton with the committed scope per the owner's
directive, reviewed to consensus by Grok 4.5 (4 rounds) and GPT-5.6-sol
(4 rounds), both final verdicts PROCEED:

1. Same-tag native HA stays the default and recommended model; the monitor
   stays read-only, permanently.
2. Apply mode is a separate ADVANCED mode: the distinct-tag active connector
   switch — operator-invoked, one-shot, auditable forced selection of which
   connector pool (tag) serves the AI domain set, via plan/apply-plan.
3. For online-but-bad forced selection: wrong egress IP, degraded provider
   path, provider quota, manual evacuation — cases native oldest-first cannot
   see. No health-driven watcher in v1.3.
4. Composes with (never replaces) Tailscale-native HA: native HA keeps
   operating inside each pool; the switch moves the domain set between pools.
5. Pre-implementation gate: the operator docs (deployment models, migration
   both directions, three-layer rollback, warnings) must be MERGED before
   implementation work opens.

Mechanism decisions recorded: a connector-scoped policy_tool.py planning
subcommand (working name connector-plan) with allowlisted --switch-to
(exact one-element replace, --expected-from compare-and-swap for the scripted
path, verbatim from-array in the manifest) and --declare (tagOwners +
autoApprovers + DNS grant only) operations — the ordinary full-merge plan
path stays byte-identical; planner-side snapshot preconditions (TOCTOU-
closed); pool-pair configuration invariants + drift refusal + dual-tag
warnings; own connector-switch-state.json (schema_version 1, decoupling the
multi-fallback schema-v2 bump); advisory cooldown; fail-closed readback with
no automatic second write; migration paths made executable (declare-first;
retag reclassified as maintenance-window with remaining-node precondition).

Roadmap: flagship item rewritten to the decided scope + acceptance; the
multi-fallback item's coordination sentence now records the decoupling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@F-e-u-e-r
F-e-u-e-r force-pushed the design/phase5-connector-switch branch from fa3358d to 245a10f Compare July 15, 2026 19:28
@F-e-u-e-r
F-e-u-e-r merged commit 3047dd6 into main Jul 15, 2026
12 checks passed
@F-e-u-e-r
F-e-u-e-r deleted the design/phase5-connector-switch branch July 15, 2026 19:32
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