@1agh/maude 0.60.1 → 0.60.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14474,6 +14474,7 @@ function App() {
14474
14474
  <SyncPanel
14475
14475
  status={syncStatus}
14476
14476
  project={cfg?.cloud?.projectName || project}
14477
+ cloud={cfg?.cloud ?? null}
14477
14478
  groupPaths={(groups || []).map((g) => g.path).filter(Boolean)}
14478
14479
  resizing={resizingFor('sync')}
14479
14480
  onClose={() => setSyncPanelOpen(false)}
@@ -93,6 +93,9 @@ export default function SyncPanel({
93
93
  status, // the live `sync:status` payload (never null while mounted)
94
94
  project, // display name for the header sentence (hub-supplied → safeName'd)
95
95
  groupPaths = [], // declared canvas-group paths, for row grouping
96
+ // Present exactly when the hub runs this studio (`/_config`'s `cloud` block);
97
+ // null on the desktop. Decides whether Resync is offered at all — see below.
98
+ cloud = null,
96
99
  resizing,
97
100
  onClose,
98
101
  }) {
@@ -190,17 +193,29 @@ export default function SyncPanel({
190
193
  <span className="gp-spacer" />
191
194
  {/* Resync re-runs the WHOLE sync — every canvas and every asset — so
192
195
  it lives in the header, not inside the assets section. It is
193
- `syncControl.restart()`, the same cycle Connect performs. */}
194
- <button
195
- type="button"
196
- className="sp-resync"
197
- data-testid="sync-resync"
198
- onClick={resync}
199
- disabled={resyncing || cooling}
200
- title="Re-check every canvas and asset against the workspace"
201
- >
202
- {resyncing ? 'Resyncing…' : 'Resync'}
203
- </button>
196
+ `syncControl.restart()`, the same cycle Connect performs.
197
+
198
+ NOT IN THE CLOUD. On a cell the sync runtime belongs to the process
199
+ serving the project to EVERYONE, so restarting it is an operator
200
+ action, not a member's — the hub refuses the route there on
201
+ purpose (v0.60.2). Rendering the button anyway meant a cloud member
202
+ could press a control that cannot work by design and be handed an
203
+ error for it; the honest surface is its absence. Discovery is
204
+ continuous now, so nobody needs this button to pick up a new
205
+ canvas — it is a repair tool, and repairing a cell is the hub's
206
+ job. See `.ai/logs/rca/issue-cloud-assets-open-findings.md` §5. */}
207
+ {!cloud && (
208
+ <button
209
+ type="button"
210
+ className="sp-resync"
211
+ data-testid="sync-resync"
212
+ onClick={resync}
213
+ disabled={resyncing || cooling}
214
+ title="Re-check every canvas and asset against the workspace"
215
+ >
216
+ {resyncing ? 'Resyncing…' : 'Resync'}
217
+ </button>
218
+ )}
204
219
  <button type="button" className="gp-x" aria-label="Close" onClick={onClose}>
205
220
  ×
206
221
  </button>