Files
XC_VM/tools/ci
Claude 258be636db feat(cluster): a data-plane client of MAIN's own (cluster:main-dataplane)
MAIN read other servers' files with getFile and the stream secret (its
source probe, a node's certbot log, the movies and created channels it
runs) and pulled streams from load balancer parents with the password,
so DataPlane::legacyApiRetired() never held for any node.

`cluster:main-dataplane on|off|rekey|status` (MAIN only):

- MAIN gets a data-plane key of its own through `xc_agent keygen`
  (config/cluster/main_agent.json), recorded in cluster_meta with a
  generation a re-key raises; the panel key stays in xcvm_core;
- while on, the signed node list carries MAIN's entry (active,
  DATAPLANE), so parents and owners check its proofs as any node's, and
  the nodes are told at once;
- MainDataPlane mints MAIN's own relay and file tickets
  (TicketService::relayTicket/fileTicket, split out of forRecord) into
  replica/tickets.json: when DataPlane::relayUrl/fileUrl build a URL on
  MAIN, and at each epoch from cron:cluster for the streams MAIN holds
  and the files it read on demand within a day;
- run.sh, service and cron:root_signals start `xc_agent run -role main`
  whenever config/cluster/main.json exists;
- checkSource and getSSLLog read through DataPlane::fileUrl.

Off (the default) nothing changes. A pull MAIN cannot mint for (no
licence, a legacy owner or parent) and MAIN's own files keep the legacy
URLs. A proxy is never a node, so a cluster with one keeps every node's
/api. ProcessRunner gains capture() for the keygen's output.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Rd3c2wqDi5UqJsvHBFRWUn
2026-09-29 00:48:09 +00:00
..