@checkstack/healthcheck-frontend 0.13.5 → 0.14.0

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # @checkstack/healthcheck-frontend
2
2
 
3
+ ## 0.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 6c40b5b: ### GitOps Ecosystem: Healthcheck Kind Registration (Phase 5)
8
+
9
+ **gitops-common**: Added required `resolveEntityRef` to `ReconcileContext`, enabling extension reconcilers to resolve cross-kind entity references (e.g., healthcheck refs in System extensions).
10
+
11
+ **gitops-backend**: Updated reconciler to populate `resolveEntityRef` by querying local provenance — no RPC round-trip needed.
12
+
13
+ **healthcheck-backend**: Registered `kind: Healthcheck` and `System → healthchecks` extension with the EntityKindRegistry:
14
+
15
+ - Validates strategy configs against registered strategy schemas at reconcile time
16
+ - Validates collector configs against registered collector schemas at reconcile time
17
+ - Manages system ↔ healthcheck associations with automatic stale removal
18
+
19
+ **healthcheck-frontend**: Added GitOps provenance locking to the HealthCheck IDE editor — GitOps-managed health checks show a lock banner and disable editing.
20
+
21
+ **catalog-backend**: Updated test fixtures for new required `resolveEntityRef` context field.
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [6c40b5b]
26
+ - Updated dependencies [6c40b5b]
27
+ - Updated dependencies [4b0934d]
28
+ - @checkstack/gitops-frontend@0.2.0
29
+ - @checkstack/ui@1.3.6
30
+ - @checkstack/dashboard-frontend@0.3.33
31
+ - @checkstack/auth-frontend@0.5.25
32
+
33
+ ## 0.13.6
34
+
35
+ ### Patch Changes
36
+
37
+ - aa2b3aa: fix: remove arbitrary hardcoded assertions in jenkins collectors (queue-info, node-health, job-status) to prevent silent fallback assertion failures, instead properly threading transport execution errors directly to the SingleRunChartGrid UI display widget via a new `_collectorError` result payload property.
38
+
3
39
  ## 0.13.5
4
40
 
5
41
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@checkstack/healthcheck-frontend",
3
- "version": "0.13.5",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "main": "src/index.tsx",
6
6
  "checkstack": {
@@ -12,14 +12,15 @@
12
12
  "lint:code": "eslint . --max-warnings 0"
13
13
  },
14
14
  "dependencies": {
15
- "@checkstack/auth-frontend": "0.5.18",
15
+ "@checkstack/auth-frontend": "0.5.24",
16
16
  "@checkstack/catalog-common": "1.3.1",
17
17
  "@checkstack/common": "0.6.5",
18
- "@checkstack/dashboard-frontend": "0.3.26",
18
+ "@checkstack/dashboard-frontend": "0.3.32",
19
19
  "@checkstack/frontend-api": "0.3.9",
20
- "@checkstack/healthcheck-common": "0.10.1",
20
+ "@checkstack/gitops-frontend": "0.1.0",
21
+ "@checkstack/healthcheck-common": "0.11.0",
21
22
  "@checkstack/signal-frontend": "0.0.15",
22
- "@checkstack/ui": "1.2.1",
23
+ "@checkstack/ui": "1.3.5",
23
24
  "ajv": "^8.18.0",
24
25
  "ajv-formats": "^3.0.1",
25
26
  "date-fns": "^4.1.0",
@@ -29,7 +30,7 @@
29
30
  "recharts": "^3.6.0",
30
31
  "uuid": "^13.0.0",
31
32
  "zod": "^4.2.1",
32
- "@checkstack/satellite-common": "0.1.0"
33
+ "@checkstack/satellite-common": "0.2.0"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@checkstack/scripts": "0.1.2",
@@ -120,6 +120,7 @@ function CollectorSection({
120
120
  }: CollectorSectionProps) {
121
121
  const displayName = collectorId.split(".").pop() || collectorId;
122
122
  const assertionFailed = data._assertionFailed as string | undefined;
123
+ const collectorError = data._collectorError as string | undefined;
123
124
 
124
125
  return (
125
126
  <div className="space-y-4">
@@ -148,6 +149,22 @@ function CollectorSection({
148
149
  </Card>
149
150
  )}
150
151
 
152
+ {/* Collector execution error if present */}
153
+ {collectorError && (
154
+ <Card className="border-red-200 dark:border-red-900 border-dashed">
155
+ <CardHeader className="pb-2">
156
+ <CardTitle className="text-sm font-medium text-red-600">
157
+ Collector Execution Failed
158
+ </CardTitle>
159
+ </CardHeader>
160
+ <CardContent>
161
+ <div className="text-sm text-red-600 bg-red-50 dark:bg-red-950 px-2 py-1 rounded">
162
+ {collectorError}
163
+ </div>
164
+ </CardContent>
165
+ </Card>
166
+ )}
167
+
151
168
  <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
152
169
  {fields.map((field) => (
153
170
  <SingleValueCard
@@ -15,6 +15,8 @@ import { resolveRoute, extractErrorMessage} from "@checkstack/common";
15
15
  import { useCollectors } from "../hooks/useCollectors";
16
16
  import { EditorTree, type TreeNodeId } from "../components/editor/EditorTree";
17
17
  import { EditorPanel } from "../components/editor/EditorPanel";
18
+ import { useProvenanceLock, GitOpsLockBanner } from "@checkstack/gitops-frontend";
19
+
18
20
 
19
21
  // =============================================================================
20
22
  // TYPES
@@ -38,10 +40,15 @@ const HealthCheckIDEPageContent = () => {
38
40
  const toast = useToast();
39
41
  const healthCheckClient = usePluginClient(HealthCheckApi);
40
42
 
41
- // "new" is a sentinel value used by the create flow
42
43
  const isEditMode = !!configId && configId !== "new";
43
44
  const strategyIdFromUrl = searchParams.get("strategy") ?? undefined;
44
45
 
46
+ // --- GitOps Provenance Lock ---
47
+ const { isLocked, provenance } = useProvenanceLock({
48
+ kind: "Healthcheck",
49
+ entityId: isEditMode ? configId : undefined,
50
+ });
51
+
45
52
  // --- Data Fetching ---
46
53
 
47
54
  // Fetch all strategies (needed for both modes)
@@ -320,13 +327,18 @@ const HealthCheckIDEPageContent = () => {
320
327
  actions={
321
328
  <Button
322
329
  onClick={handleSave}
323
- disabled={!isValid || isSaving}
330
+ disabled={!isValid || isSaving || isLocked}
324
331
  >
325
332
  <Save className="mr-2 h-4 w-4" />
326
333
  {isSaving ? "Saving..." : "Save"}
327
334
  </Button>
328
335
  }
329
336
  >
337
+ {isLocked && provenance && (
338
+ <div className="mb-4">
339
+ <GitOpsLockBanner provenance={provenance} />
340
+ </div>
341
+ )}
330
342
  <IDELayout
331
343
  tree={
332
344
  <EditorTree