diff --git a/.github/workflows/publish-runtime.yml b/.github/workflows/publish-runtime.yml index f3a180f3..b3750a61 100644 --- a/.github/workflows/publish-runtime.yml +++ b/.github/workflows/publish-runtime.yml @@ -327,13 +327,19 @@ jobs: echo "::error::publish job did not expose a version output — cascade cannot fan out" exit 1 fi - # Source of truth: manifest.json workspace_templates (PR #2536 pruned - # to 4 actively-supported runtimes: claude-code, hermes, openclaw, codex). - # Removed langgraph/crewai/autogen/deepagents/gemini-cli (deprecated, no - # shipping images); added codex (had been missing since #2512). - # Long-term: derive this list from manifest.json so the cascade can't - # drift again — tracked in RFC #388 as a Phase-1 invariant. - TEMPLATES="claude-code hermes openclaw codex" + # All 9 active workspace template repos. The PR #2536 pruning + # ("deprecated, no shipping images") was empirically wrong: + # continuous-synth-e2e.yml defaults to langgraph as its primary + # canary (line 44), and every excluded template had successful + # publish-image runs as of 2026-05-03 — none were dormant. + # Symptom of the prune: today's a2a-sdk strict-mode fix + # (#2566 / commit e1628c4) cascaded to 4 templates but never + # reached langgraph, so the synth-E2E correctly canary'd a fix + # that had landed but not deployed. Re-added the 5 templates. + # Long-term: derive this list from manifest.json so cascade + # scope can't drift from E2E scope — tracked in RFC #388 as a + # Phase-1 invariant. + TEMPLATES="claude-code hermes openclaw codex langgraph crewai autogen deepagents gemini-cli" FAILED="" for tpl in $TEMPLATES; do REPO="Molecule-AI/molecule-ai-workspace-template-$tpl" diff --git a/canvas/src/components/Legend.tsx b/canvas/src/components/Legend.tsx index 647479ef..c6d67365 100644 --- a/canvas/src/components/Legend.tsx +++ b/canvas/src/components/Legend.tsx @@ -1,11 +1,23 @@ "use client"; import { useEffect, useState } from "react"; -import { STATUS_CONFIG } from "@/lib/design-tokens"; +import { STATUS_CONFIG, TIER_CONFIG } from "@/lib/design-tokens"; import { useCanvasStore } from "@/store/canvas"; const LEGEND_STATUSES = ["online", "provisioning", "degraded", "failed", "paused", "offline"] as const; +// Tier descriptions kept in sync with CreateWorkspaceDialog.tsx (the +// source of truth for what each tier means semantically). Colors come +// from TIER_CONFIG so the legend swatch matches the badge actually +// rendered on every WorkspaceNode — drift here misled users into +// thinking the legend documented a different tier than the one shown. +const LEGEND_TIERS: ReadonlyArray<{ tier: number; label: string }> = [ + { tier: 1, label: "Sandboxed" }, + { tier: 2, label: "Standard" }, + { tier: 3, label: "Privileged" }, + { tier: 4, label: "Full Access" }, +]; + // Persist the user's choice across sessions. Default is "open" so // first-time users still see the symbol key; once dismissed we // respect that until they explicitly reopen via the floating pill. @@ -102,9 +114,9 @@ export function Legend() {