feat: move Blueprint orchestration and Federation placement to Community tier (#1555)

* feat: move core Blueprint orchestration to Community tier

Blueprints CRUD, reconciliation, and drift modes are now available on
Community. Pin remains Admiral-only via Federation placement controls.

* feat: move Federation placement controls to Community tier

Remove requirePaid from cordon, uncordon, and blueprint pin routes. Ungate the Federation tab and gate cordon UI on node:manage only. Update licensing and fleet docs for the new tier split.
This commit is contained in:
Anso
2026-07-04 21:20:20 -04:00
committed by GitHub
parent 1fac6f797f
commit fdbc1b1ebb
18 changed files with 264 additions and 117 deletions
@@ -1,7 +1,6 @@
import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';
import { ChevronRight, Loader2 } from 'lucide-react';
import { apiFetch } from '@/lib/api';
import { useLicense } from '@/context/LicenseContext';
import { useAuth } from '@/context/AuthContext';
import { useNodes } from '@/context/NodeContext';
import { cordonNode, uncordonNode } from '@/lib/nodesApi';
@@ -159,9 +158,8 @@ function NodeDetail({
onInspectStack: (nodeId: number, stackName: string) => void;
onCordonChange: () => void;
}) {
const { isPaid } = useLicense();
const { can } = useAuth();
const canCordon = isPaid && can('node:manage', 'node', String(node.id));
const canCordon = can('node:manage', 'node', String(node.id));
const [confirmOpen, setConfirmOpen] = useState(false);
const [submitting, setSubmitting] = useState(false);