Other

/tailnet-sync-gate

Mechanical kill-gate: block a dashboard 'published/live' claim unless the SAME turn mirrored it to the tailnet hub AND got HTTP 200. Triggers: dashboard Write, publish to hub, dashboard 'done/live'.

$ golems-cli skills install tailnet-sync-gate

Updated 1 week ago

"Why didn't you open a fucking dashboard." Every dashboard MUST land on the canonical tailnet hub. A local docs.local/*.html you only Write + open orphans the dashboard the user cannot find. No "published/live" leaves the seat without a SAME-TURN mirror to the hub AND an HTTP-200 on the served URL. (R-004, BROKEN-OPEN since gen-7.)

What It Is

A deterministic detector over an agent transcript: if the current turn Writes a dashboard (a Write whose file_path ends in .html under a docs/docs.local/dashboards path) and makes a publish/done/live claim, then the SAME turn must ALSO carry the mirror + the 200 probe. This is the MECHANICAL gate the global CLAUDE.md "CANONICAL DASHBOARD HUB — always publish" rule and /html-dashboard describe in prose. The pinned RED/GREEN transcript fixtures ARE the replayable gate (R-003/R-014 pattern).

The Rule — required same-turn evidence

ConditionRequired same-turn evidenceViolation if missing
dashboard Write + publish/live claima mirror to dashboards-serve/dashboards/ — a Write/cp/rsync to that path, a publish_dashboard/publish_html MCP tool, or a run of sync-tailnet-dashboards.mjsDASHBOARD_NOT_MIRRORED
AND an HTTP 200 check against macbook-pro.tail5ef6be.ts.netcurl/wget '%{http_code}' hitting that host, with 200 in the tool OUTPUTDASHBOARD_NOT_200
no dashboard WritePASS (N/A)
dashboard Write, no publish claimPASS (N/A — still drafting)

"Same turn" = the events since the last human message — the mirror tool calls and the curl and its result the agent ran before the claim. Negated/in-progress statements ("still mirroring", "not yet live") are not claims; a bare ✅ next to in-progress language does not arm the gate.

Evidence is tool-only — prose never clears the gate

The false-green-gate lesson: evidence comes ONLY from REAL tool execution — Bash COMMAND strings, tool NAMES, and tool_result OUTPUTS. Assistant narrative ("mirrored to the hub ✅, curl returned 200") is EXCLUDED. The 200 only counts if a curl/wget COMMAND actually targeted the tailnet host AND its OUTPUT shows 200 — a 200 in a passive Read of a log, a 200 against localhost, or a 404/500 from the host all FLAG. MCP tool names are base-normalized (mcp__agent-html-publisher__publish_dashboardpublish_dashboard).