@continuous-excellence/ze-great-dashboard-aws 0.20.0 → 0.21.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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Ze Great Dashboard on AWS
2
2
 
3
3
  `@continuous-excellence/ze-great-dashboard-aws` packages a board for a private AWS Lambda or ECS
4
- deployment. It includes the Lambda runtime, matching browser client, deployment CLI, and
5
- CloudFormation templates.
4
+ deployment. It includes the Lambda runtime, deployment CLI, and CloudFormation templates; browser
5
+ assets are published separately as `@continuous-excellence/ze-great-dashboard-client`.
6
6
 
7
7
  Deployment mode is persisted in `dashboard-bootstrap.json` and generated application parameters
8
8
  as `ComputeMode`. Existing files without that field mean `lambda`. Choose `--mode ecs` during
@@ -95,7 +95,7 @@ Changing `board.yaml` or upgrading the pinned package uses this same path.
95
95
  | The package owns | You own |
96
96
  | --- | --- |
97
97
  | Board validation and Lambda packaging | Board content and source access |
98
- | Compatible immutable browser assets | The protected gateway and authentication |
98
+ | Server runtime and CloudFormation templates | The immutable browser asset host and authentication |
99
99
  | Private application CloudFormation template | AWS account administration |
100
100
  | Restricted bootstrap templates | Secret values and the credential-map ARN |
101
101
  | Read-only preflight and consistency checks | Reviewing and executing AWS changes |
package/dist/cli.js CHANGED
@@ -1,16 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // packages/aws/src/cli.ts
4
- import { execFile as execFile3 } from "node:child_process";
4
+ import { execFile as execFile2 } from "node:child_process";
5
5
  import { readFile as readFile6, writeFile as writeFile4 } from "node:fs/promises";
6
- import { fileURLToPath as fileURLToPath3 } from "node:url";
7
- import { promisify as promisify3 } from "node:util";
6
+ import { promisify as promisify2 } from "node:util";
8
7
  import { parse as parse3 } from "yaml";
9
8
 
10
9
  // packages/aws/src/doctor.ts
11
- import { execFile as execFile2 } from "node:child_process";
10
+ import { execFile } from "node:child_process";
12
11
  import { readFile as readFile5 } from "node:fs/promises";
13
- import { promisify as promisify2 } from "node:util";
12
+ import { promisify } from "node:util";
14
13
  import { parse as parse2 } from "yaml";
15
14
 
16
15
  // packages/aws/src/bootstrap.ts
@@ -911,11 +910,9 @@ function requiredBootstrapParameters(kind, values) {
911
910
  }
912
911
 
913
912
  // packages/aws/src/index.ts
914
- import { execFile } from "node:child_process";
915
913
  import { cp, mkdir as mkdir2, readFile as readFile4, rm, writeFile as writeFile3 } from "node:fs/promises";
916
914
  import { join as join2, resolve as resolve2 } from "node:path";
917
915
  import { fileURLToPath as fileURLToPath2 } from "node:url";
918
- import { promisify } from "node:util";
919
916
 
920
917
  // node_modules/fflate/esm/index.mjs
921
918
  import { createRequire } from "module";
@@ -2725,7 +2722,6 @@ async function bootstrapGuideReport(input) {
2725
2722
  }
2726
2723
 
2727
2724
  // packages/aws/src/index.ts
2728
- var run = promisify(execFile);
2729
2725
  function requireImageDigest(image) {
2730
2726
  if (!/^[^\s@]+@sha256:[a-f0-9]{64}$/.test(image))
2731
2727
  throw new Error(
@@ -2865,30 +2861,6 @@ async function packageEcs(options) {
2865
2861
  );
2866
2862
  return packagedRelease;
2867
2863
  }
2868
- async function publishClientAssets(options) {
2869
- const assetsDir = resolve2(options.assetsDir);
2870
- await readFile4(join2(assetsDir, "index.html"));
2871
- const assetPath = `${options.assetsBaseUrl.replace(/\/+$/, "")}/dashboard/${options.version}`;
2872
- await run("aws", [
2873
- "s3",
2874
- "sync",
2875
- assetsDir,
2876
- `s3://${options.assetsBucket}/dashboard/${options.version}/`,
2877
- "--exclude",
2878
- "index.html",
2879
- "--cache-control",
2880
- "public, max-age=31536000, immutable"
2881
- ]);
2882
- await run("aws", [
2883
- "s3",
2884
- "cp",
2885
- join2(assetsDir, "index.html"),
2886
- `s3://${options.assetsBucket}/dashboard/${options.version}/index.html`,
2887
- "--cache-control",
2888
- "public, max-age=60"
2889
- ]);
2890
- return assetPath;
2891
- }
2892
2864
  async function cloudFormationTemplate(mode = "lambda") {
2893
2865
  return readFile4(
2894
2866
  fileURLToPath2(
@@ -2899,10 +2871,10 @@ async function cloudFormationTemplate(mode = "lambda") {
2899
2871
  }
2900
2872
 
2901
2873
  // packages/aws/src/doctor.ts
2902
- var run2 = promisify2(execFile2);
2874
+ var run = promisify(execFile);
2903
2875
  var actualDependencies = {
2904
2876
  async execute(command, args2) {
2905
- return (await run2(command, args2)).stdout.trim();
2877
+ return (await run(command, args2)).stdout.trim();
2906
2878
  },
2907
2879
  async fetch(url) {
2908
2880
  return fetch(url);
@@ -3066,7 +3038,7 @@ async function runDoctor(options, dependencies = actualDependencies) {
3066
3038
 
3067
3039
  // packages/aws/src/cli.ts
3068
3040
  var args = process.argv.slice(2);
3069
- var runCommand = promisify3(execFile3);
3041
+ var runCommand = promisify2(execFile2);
3070
3042
  var option = (name, fallback) => {
3071
3043
  const i2 = args.indexOf(name);
3072
3044
  return i2 >= 0 ? args[i2 + 1] : fallback;
@@ -3291,17 +3263,7 @@ function copyableCommand(command) {
3291
3263
  }
3292
3264
  try {
3293
3265
  const packageVersion2 = await installedPackageVersion();
3294
- const bundledAssets = fileURLToPath3(new URL("../client", import.meta.url));
3295
- if (args[0] === "publish-assets") {
3296
- const version = requiredOption("--version", packageVersion2);
3297
- const assetPath = await publishClientAssets({
3298
- assetsDir: option("--assets-dir", bundledAssets) ?? bundledAssets,
3299
- assetsBucket: requiredOption("--assets-bucket"),
3300
- assetsBaseUrl: requiredOption("--assets-base-url"),
3301
- version
3302
- });
3303
- console.log(JSON.stringify({ published: true, version, assetPath }));
3304
- } else if (args[0] === "doctor") {
3266
+ if (args[0] === "doctor") {
3305
3267
  const parametersPath = option("--parameters", "aws-dashboard-parameters.json") ?? "aws-dashboard-parameters.json";
3306
3268
  const region2 = option("--region", process.env.AWS_REGION ?? process.env.AWS_DEFAULT_REGION ?? "us-east-1") ?? "us-east-1";
3307
3269
  const checks = await runDoctor(
@@ -3652,9 +3614,7 @@ ${shellCommand(awsCommand)}`,
3652
3614
  }
3653
3615
  }
3654
3616
  } else if (args[0] !== "package")
3655
- throw new Error(
3656
- "Usage: ze-great-dashboard-aws package|parameters|bootstrap|publish-assets|doctor [options]"
3657
- );
3617
+ throw new Error("Usage: ze-great-dashboard-aws package|parameters|bootstrap|doctor [options]");
3658
3618
  else {
3659
3619
  const boardConfig = option("--board-config");
3660
3620
  const version = option("--version", process.env.DASHBOARD_VERSION ?? packageVersion2);
package/dist/index.d.ts CHANGED
@@ -36,12 +36,4 @@ export type EcsPackageOptions = Omit<LambdaPackageOptions, 'secretReference'> &
36
36
  export declare function packageLambda(options: LambdaPackageOptions): Promise<PackagedRelease>;
37
37
  /** Packages the published container reference and ECS CloudFormation handoff. */
38
38
  export declare function packageEcs(options: EcsPackageOptions): Promise<PackagedRelease>;
39
- export type PublishClientAssetsOptions = {
40
- assetsDir: string;
41
- assetsBucket: string;
42
- assetsBaseUrl: string;
43
- version: string;
44
- };
45
- /** Publishes the versioned client half of a provider-managed release. */
46
- export declare function publishClientAssets(options: PublishClientAssetsOptions): Promise<string>;
47
39
  export declare function cloudFormationTemplate(mode?: ComputeMode): Promise<string>;
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  // packages/aws/src/index.ts
2
- import { execFile } from "node:child_process";
3
2
  import { cp, mkdir as mkdir2, readFile as readFile4, rm, writeFile as writeFile3 } from "node:fs/promises";
4
3
  import { join as join2, resolve as resolve2 } from "node:path";
5
4
  import { fileURLToPath as fileURLToPath2 } from "node:url";
6
- import { promisify } from "node:util";
7
5
 
8
6
  // node_modules/fflate/esm/index.mjs
9
7
  import { createRequire } from "module";
@@ -2713,7 +2711,6 @@ async function bootstrapGuide(input) {
2713
2711
  }
2714
2712
 
2715
2713
  // packages/aws/src/index.ts
2716
- var run = promisify(execFile);
2717
2714
  function requireImageDigest(image) {
2718
2715
  if (!/^[^\s@]+@sha256:[a-f0-9]{64}$/.test(image))
2719
2716
  throw new Error(
@@ -2853,30 +2850,6 @@ async function packageEcs(options) {
2853
2850
  );
2854
2851
  return packagedRelease;
2855
2852
  }
2856
- async function publishClientAssets(options) {
2857
- const assetsDir = resolve2(options.assetsDir);
2858
- await readFile4(join2(assetsDir, "index.html"));
2859
- const assetPath = `${options.assetsBaseUrl.replace(/\/+$/, "")}/dashboard/${options.version}`;
2860
- await run("aws", [
2861
- "s3",
2862
- "sync",
2863
- assetsDir,
2864
- `s3://${options.assetsBucket}/dashboard/${options.version}/`,
2865
- "--exclude",
2866
- "index.html",
2867
- "--cache-control",
2868
- "public, max-age=31536000, immutable"
2869
- ]);
2870
- await run("aws", [
2871
- "s3",
2872
- "cp",
2873
- join2(assetsDir, "index.html"),
2874
- `s3://${options.assetsBucket}/dashboard/${options.version}/index.html`,
2875
- "--cache-control",
2876
- "public, max-age=60"
2877
- ]);
2878
- return assetPath;
2879
- }
2880
2853
  async function cloudFormationTemplate(mode = "lambda") {
2881
2854
  return readFile4(
2882
2855
  fileURLToPath2(
@@ -2909,7 +2882,6 @@ export {
2909
2882
  mergeBootstrapParameters,
2910
2883
  packageEcs,
2911
2884
  packageLambda,
2912
- publishClientAssets,
2913
2885
  requireComputeMode,
2914
2886
  requiredBootstrapParameters,
2915
2887
  resolveComputeMode,
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@continuous-excellence/ze-great-dashboard-aws",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
- "description": "AWS Lambda and CloudFormation adapter for Ze Great Dashboard.",
5
+ "description": "AWS server runtime and CloudFormation deployment tooling for Ze Great Dashboard.",
6
6
  "keywords": [
7
7
  "aws",
8
8
  "lambda",
@@ -28,8 +28,6 @@
28
28
  },
29
29
  "files": [
30
30
  "dist",
31
- "client",
32
- "board-config.schema.json",
33
31
  "bootstrap",
34
32
  "template.yml",
35
33
  "template-ecs.yml",
@@ -1,130 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "board-config.schema.json",
4
- "title": "Ze Great Dashboard board configuration",
5
- "type": "object",
6
- "required": ["boards"],
7
- "additionalProperties": true,
8
- "properties": {
9
- "sources": { "type": "object", "additionalProperties": { "$ref": "#/$defs/source" } },
10
- "boards": {
11
- "type": "object",
12
- "minProperties": 1,
13
- "additionalProperties": { "$ref": "#/$defs/board" }
14
- },
15
- "auth": { "$ref": "#/$defs/auth" }
16
- },
17
- "$defs": {
18
- "duration": { "type": "string", "pattern": "^[1-9][0-9]*(?:ms|s|m|h)$" },
19
- "position": {
20
- "oneOf": [
21
- {
22
- "type": "object",
23
- "required": ["x", "y", "w", "h"],
24
- "properties": {
25
- "x": { "type": "integer", "minimum": 0 },
26
- "y": { "type": "integer", "minimum": 0 },
27
- "w": { "type": "integer", "minimum": 1, "maximum": 12 },
28
- "h": { "type": "integer", "minimum": 1 }
29
- },
30
- "additionalProperties": true
31
- },
32
- {
33
- "type": "object",
34
- "required": ["x", "y", "w", "h"],
35
- "properties": {
36
- "x": { "const": 0 },
37
- "y": { "const": 0 },
38
- "w": { "const": 0 },
39
- "h": { "const": 0 }
40
- },
41
- "additionalProperties": true
42
- }
43
- ]
44
- },
45
- "panel": {
46
- "type": "object",
47
- "required": ["id", "type"],
48
- "additionalProperties": true,
49
- "properties": {
50
- "id": { "type": "string", "minLength": 1 },
51
- "type": { "type": "string", "minLength": 1 },
52
- "label": { "type": "string", "minLength": 1 },
53
- "source": { "type": "string", "minLength": 1 },
54
- "pipeline": { "oneOf": [{ "type": "string" }, { "type": "number" }] },
55
- "density": { "enum": ["auto", "comfortable", "compact"] },
56
- "position": { "$ref": "#/$defs/position" },
57
- "refresh": { "$ref": "#/$defs/duration" },
58
- "running_refresh": { "$ref": "#/$defs/duration" },
59
- "running_completion_refresh": { "$ref": "#/$defs/duration" },
60
- "running_completion_window": { "$ref": "#/$defs/duration" },
61
- "running_animation": {
62
- "enum": [
63
- "radial",
64
- "runway",
65
- "orbit",
66
- "signal-field",
67
- "telemetry-bloom",
68
- "release-transit",
69
- "status-weather",
70
- "falling-shapes",
71
- "off"
72
- ]
73
- },
74
- "demo_run_duration": { "$ref": "#/$defs/duration" },
75
- "demo_review_duration": { "$ref": "#/$defs/duration" },
76
- "link": { "type": "string", "format": "uri" },
77
- "url": { "type": "string", "format": "uri" },
78
- "json_path": {
79
- "type": "string",
80
- "pattern": "^\\$(?:\\.[A-Za-z_][A-Za-z0-9_]*|\\[\\d+\\])*$"
81
- }
82
- }
83
- },
84
- "board": {
85
- "type": "object",
86
- "required": ["panels"],
87
- "additionalProperties": true,
88
- "properties": {
89
- "refresh": { "$ref": "#/$defs/duration" },
90
- "running_refresh": { "$ref": "#/$defs/duration" },
91
- "running_completion_refresh": { "$ref": "#/$defs/duration" },
92
- "running_completion_window": { "$ref": "#/$defs/duration" },
93
- "panels": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/panel" } }
94
- }
95
- },
96
- "source": {
97
- "type": "object",
98
- "required": ["type"],
99
- "additionalProperties": true,
100
- "properties": {
101
- "type": { "type": "string", "minLength": 1 },
102
- "token_env": { "type": "string", "minLength": 1 },
103
- "github_app": {
104
- "type": "object",
105
- "required": ["app_id_env", "private_key_env", "installation_id_env"],
106
- "properties": {
107
- "app_id_env": { "type": "string", "minLength": 1 },
108
- "private_key_env": { "type": "string", "minLength": 1 },
109
- "installation_id_env": { "type": "string", "minLength": 1 }
110
- }
111
- }
112
- }
113
- },
114
- "auth": {
115
- "type": "object",
116
- "required": ["issuer"],
117
- "properties": {
118
- "issuer": { "type": "string", "format": "uri" },
119
- "client_id": { "type": "string", "minLength": 1 },
120
- "allow": {
121
- "type": "object",
122
- "properties": {
123
- "groups": { "type": "array", "items": { "type": "string", "minLength": 1 } },
124
- "subjects": { "type": "array", "items": { "type": "string", "minLength": 1 } }
125
- }
126
- }
127
- }
128
- }
129
- }
130
- }
@@ -1,11 +0,0 @@
1
- {
2
- "index.html": {
3
- "file": "assets/index-k3N7vI0h.js",
4
- "name": "index",
5
- "src": "index.html",
6
- "isEntry": true,
7
- "css": [
8
- "assets/index-Cuk6kga3.css"
9
- ]
10
- }
11
- }
@@ -1 +0,0 @@
1
- ._board_91ffc_1{gap:var(--gap);height:100dvh;min-height:0;padding:var(--gap);flex-direction:column;display:flex;overflow:hidden auto}._header_91ffc_11{border-bottom:1px solid var(--edge);padding-bottom:var(--gap);flex:none;align-items:baseline;display:flex}._title_91ffc_18{letter-spacing:-.01em;margin:0;font-size:1.75em;font-weight:650}._grid_91ffc_24{gap:var(--gap);flex:1;grid-template-rows:repeat(12,minmax(0,1fr));grid-template-columns:repeat(12,minmax(0,1fr));grid-auto-rows:minmax(0,1fr);align-content:stretch;min-height:0;display:grid}._footerTools_91ffc_34{align-items:center;gap:.75rem;display:flex}._layoutWarning_91ffc_39{position:relative}._layoutWarningButton_91ffc_42{border:1px solid var(--status-warning);min-width:2em;min-height:2em;color:var(--status-warning);background:var(--surface-raised);font:inherit;cursor:pointer;border-radius:50%;justify-content:center;align-items:center;gap:.2em;display:inline-flex}._layoutWarningButton_91ffc_42:hover,._layoutWarningButton_91ffc_42:focus-visible{background:var(--surface)}._layoutWarningDialog_91ffc_60{z-index:10;width:min(32rem, calc(100vw - 2 * var(--gap)));border:1px solid var(--status-warning);border-radius:var(--radius);color:var(--ink-secondary);background:var(--surface-raised);padding:.8rem;position:absolute;bottom:calc(100% + .75rem);right:0;box-shadow:0 .5rem 1.5rem #00000059}._layoutWarningHeading_91ffc_73{justify-content:space-between;align-items:center;gap:1rem;display:flex}._layoutWarningHeading_91ffc_73 strong{color:var(--status-warning)}._layoutWarningDialog_91ffc_60 p{margin:.6rem 0}._layoutWarningDialog_91ffc_60 ul{margin:.35rem 0 .75rem;padding-left:1.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em}._layoutWarningClose_91ffc_91{color:var(--ink-muted);cursor:pointer;background:0 0;border:0;font-size:1.25em;line-height:1}._layoutWarningDownloads_91ffc_99{gap:.35rem;display:grid}._layoutWarningDownloads_91ffc_99 a{border:1px solid var(--edge);background:var(--surface-raised);color:var(--ink-secondary);font:inherit;text-align:center;border-radius:.25rem;padding:.3em .55em;text-decoration:none}._layoutWarningDownloads_91ffc_99 a:hover,._layoutWarningDownloads_91ffc_99 a:focus-visible{border-color:var(--ink-secondary);color:var(--ink-primary)}._layoutWarningNote_91ffc_118{color:var(--ink-muted);font-size:.85em}._footer_91ffc_34{color:var(--ink-muted);flex-wrap:wrap;flex:none;justify-content:space-between;align-items:center;gap:.5rem;font-size:.75em;display:flex}@media (width<=64rem){._board_91ffc_1{height:auto;min-height:100dvh;overflow:visible}._grid_91ffc_24{flex:none;grid-template-columns:1fr;grid-auto-rows:auto;min-height:auto}._layoutWarningDialog_91ffc_60{right:var(--gap);bottom:calc(var(--gap) + 3rem);position:fixed}}._diagnostics_lseur_1{position:relative}._button_lseur_5{border:1px solid var(--edge);background:var(--surface-raised);color:var(--ink-secondary);font:inherit;border-radius:.25rem;padding:.3em .55em}._area_lseur_14{z-index:1;border:1px solid var(--edge);border-radius:var(--radius);background:var(--surface-raised);width:min(24rem,90vw);padding:.75rem;position:absolute;bottom:calc(100% + .5rem);right:0;box-shadow:0 .5rem 1.5rem #0008}._area_lseur_14 p{margin:0 0 .5rem}._warning_lseur_31{color:var(--status-warning)}._panels_lseur_35{border-top:1px solid var(--edge);max-height:12rem;margin:.5rem 0;padding-top:.5rem;overflow-y:auto}._actions_lseur_43{gap:.5rem;display:flex}._panel_ditgn_1{grid-column:var(--panel-column,span 6);grid-row:var(--panel-row,auto);min-width:0;min-height:0;padding:clamp(.5rem, .8vw, var(--gap));border:1px solid var(--edge);border-radius:var(--radius);background:var(--surface-raised);isolation:isolate;flex-direction:column;justify-content:flex-start;gap:.15em;line-height:1.2;display:flex;position:relative;overflow:hidden;container:panel/size}._content_ditgn_22{z-index:1;flex-direction:column;flex:0 auto;justify-content:flex-start;gap:.1em;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}._panel_ditgn_1:has(._sourceAction_ditgn_35) ._content_ditgn_22{padding-inline-end:2.25em}._content_ditgn_22>*,._details_ditgn_39>*{min-width:0;max-width:100%}:is(._content_ditgn_22:has([data-running-progress=runway]),._content_ditgn_22:has([data-running-progress=signal-field])){flex:1 1 0}._threeAnchor_ditgn_47>[data-panel-anchor=status],._threeAnchor_ditgn_47>[data-panel-anchor=evidence]{min-width:0}._error_ditgn_51{border-color:var(--status-serious)}._wide_ditgn_54{grid-column:span 12}._density-comfortable_ditgn_57{gap:.1em;padding:.65em}._density-comfortable_ditgn_57 ._content_ditgn_22{gap:.1em}._density-compact_ditgn_64{justify-content:flex-start;gap:0;min-height:3.5em;padding:.2em;line-height:1.05}._density-compact_ditgn_64 ._content_ditgn_22{gap:0}._label_ditgn_74{overflow-wrap:anywhere;color:var(--ink-secondary);margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:1em;font-weight:600}._density-compact_ditgn_64 ._label_ditgn_74{font-size:.8em}._hint_ditgn_85{color:var(--ink-muted);overflow-wrap:anywhere;margin:0;font-size:.75em}._branch_ditgn_91{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}._observed_ditgn_95{flex-wrap:wrap;align-items:center;gap:.35em;display:flex}._meta_ditgn_101{display:var(--panel-meta-display,block)}._metaValue_ditgn_104{overflow-wrap:anywhere;min-width:0}._warning_ditgn_108{color:var(--status-warning)}._serious_ditgn_111{color:var(--status-serious)}._status_ditgn_114{margin:0;font-size:1.35em;font-weight:650}._density-compact_ditgn_64 ._status_ditgn_114{font-size:1.1em}._passed_ditgn_122{color:var(--status-good)}._failed_ditgn_125{color:var(--status-critical)}._running_ditgn_128{color:var(--status-warning)}._cancelled_ditgn_131,._unknown_ditgn_132{color:var(--ink-secondary)}._sourceAction_ditgn_35{z-index:2;width:2em;height:2em;color:var(--ink-secondary);border-radius:.3em;place-items:center;font-size:.85em;font-weight:600;line-height:1;text-decoration:none;display:inline-grid;position:absolute;top:.35em;right:.35em}._sourceAction_ditgn_35:hover{color:var(--ink-primary);background:color-mix(in srgb, var(--ink-primary) 8%, transparent)}._sourceAction_ditgn_35:focus-visible{outline:2px solid var(--ink-primary);outline-offset:2px}._density-comfortable_ditgn_57 :is(._hint_ditgn_85,._observed_ditgn_95),._density-compact_ditgn_64 :is(._hint_ditgn_85,._observed_ditgn_95){font-size:.65em}@container panel (width>=48rem){._density-comfortable_ditgn_57._shallow_ditgn_165,._density-auto_ditgn_166._shallow_ditgn_165{padding:.45em .65em}._density-comfortable_ditgn_57._shallow_ditgn_165 ._content_ditgn_22,._density-auto_ditgn_166._shallow_ditgn_165 ._content_ditgn_22{flex-flow:wrap;align-items:baseline;gap:.15em .7em}._density-comfortable_ditgn_57._shallow_ditgn_165 ._status_ditgn_114,._density-auto_ditgn_166._shallow_ditgn_165 ._status_ditgn_114{flex:none;font-size:1em}._density-comfortable_ditgn_57._shallow_ditgn_165 :is(._label_ditgn_74,._observed_ditgn_95),._density-auto_ditgn_166._shallow_ditgn_165 :is(._label_ditgn_74,._observed_ditgn_95){flex:none}}@container panel (width>=12rem){._density-compact_ditgn_64._shallow_ditgn_165 ._content_ditgn_22,._density-auto_ditgn_166._shallow_ditgn_165 ._content_ditgn_22{flex-flow:wrap;align-items:baseline;gap:.15em .7em}._density-compact_ditgn_64._shallow_ditgn_165 :is(._label_ditgn_74,._observed_ditgn_95),._density-auto_ditgn_166._shallow_ditgn_165 :is(._label_ditgn_74,._observed_ditgn_95){flex:none}}@container panel (width<=22rem){._content_ditgn_22,._sourceAction_ditgn_35{font-size:.8em}}@container panel (width<=15rem){._content_ditgn_22,._sourceAction_ditgn_35{font-size:.9em}}@container panel (height<=10rem){._content_ditgn_22,._sourceAction_ditgn_35{font-size:.8em}}@container panel (height<=7rem){._content_ditgn_22,._sourceAction_ditgn_35{font-size:.9em}}@media (width<=64rem){._panel_ditgn_1{grid-area:auto/1/auto/-1;min-height:6em}._density-comfortable_ditgn_57 ._content_ditgn_22,._density-compact_ditgn_64 ._content_ditgn_22,._density-auto_ditgn_166 ._content_ditgn_22{flex-direction:column;align-items:stretch}}@container panel (width<=11rem) and (height<=9rem){._content_ditgn_22{--panel-meta-display:flex}._label_ditgn_74{font-size:.85em}._status_ditgn_114{font-size:1.05em}}@container panel (height<=5rem){._content_ditgn_22{--panel-meta-display:flex}._label_ditgn_74{font-size:.85em}._status_ditgn_114{font-size:1.05em}}@container panel (width<=13rem){._density-compact_ditgn_64 ._content_ditgn_22{--panel-meta-display:flex}._density-compact_ditgn_64 ._content_ditgn_22>._meta_ditgn_101{font-size:.6em}}@container panel (width<=8rem){._content_ditgn_22{--panel-meta-display:flex;gap:.05em}}@container panel (height>=24rem) and (width<=13rem){._content_ditgn_22{--panel-meta-display:flex;gap:.05em}._threeAnchor_ditgn_47{flex:1 1 0;grid-template-rows:auto minmax(0,1fr) auto;gap:0;display:grid}._threeAnchor_ditgn_47 ._label_ditgn_74{grid-row:1}._threeAnchor_ditgn_47>[data-panel-anchor=status]{grid-row:2;align-self:center}._threeAnchor_ditgn_47>[data-panel-anchor=evidence]{grid-row:3;align-self:end}}@container panel (height<=4rem){._content_ditgn_22{--panel-meta-display:flex;gap:.05em}}@container panel (width<=13rem) and (height<=10rem){._density-comfortable_ditgn_57 ._content_ditgn_22>._meta_ditgn_101{font-size:.68em}}@container panel (width<=18rem) and (height<=10rem){._density-compact_ditgn_64 ._content_ditgn_22>._meta_ditgn_101{font-size:.6em}}._meta_ditgn_101{align-items:center;gap:.2em;min-width:0}._metaValue_ditgn_104{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._fact_envkl_1{display:contents}@container panel (width>=48rem){[data-density=compact][data-shallow=true] ._fact_envkl_1>*,[data-density=auto][data-shallow=true] ._fact_envkl_1>*{margin:0}}@container panel (width>=12rem){[data-density=compact][data-shallow=true] ._fact_envkl_1>*,[data-density=auto][data-shallow=true] ._fact_envkl_1>*{margin:0}}._variant_1lsfm_1{color:var(--ink-muted);text-transform:capitalize;margin:0;font-size:.72em;transition:color .18s}@media (prefers-reduced-motion:reduce){._variant_1lsfm_1{transition:none}}._field_1x3vm_1{z-index:0;pointer-events:none;contain:layout paint;color:var(--status-warning);position:absolute;inset:0;overflow:hidden}._grid_1x3vm_10{position:absolute;inset:10%}._piece_1x3vm_14{left:calc((var(--piece-x) / var(--shape-columns)) * 100%);top:calc((var(--piece-y) / var(--shape-rows)) * 100%);width:calc((var(--piece-width) / var(--shape-columns)) * 100%);height:calc((var(--piece-height) / var(--shape-rows)) * 100%);transition:left .12s linear,top .12s linear;position:absolute}._field_1x3vm_1[data-recycling=true] ._piece_1x3vm_14{transition:left .5s cubic-bezier(.22,1,.36,1),top .5s cubic-bezier(.22,1,.36,1),opacity .18s}._field_1x3vm_1[data-overdue=true] ._piece_1x3vm_14[data-piece-phase=settled]{opacity:.72;border-color:currentColor}._field_1x3vm_1[data-overdue=true] ._cell_1x3vm_34{background:color-mix(in srgb, currentColor 38%, transparent);box-shadow:0 0 .6em color-mix(in srgb, currentColor 48%, transparent)}._field_1x3vm_1[data-overdue=true] ._clearingCell_1x3vm_38{animation-duration:.9s}._cell_1x3vm_34{left:calc((var(--cell-x) / var(--piece-width)) * 100% + .12em);top:calc((var(--cell-y) / var(--piece-height)) * 100% + .12em);width:calc(100% / var(--piece-width) - .24em);height:calc(100% / var(--piece-height) - .24em);border:1px solid color-mix(in srgb, currentColor 55%, transparent);background:color-mix(in srgb, currentColor 28%, transparent);box-shadow:0 0 .45em color-mix(in srgb, currentColor 35%, transparent);border-radius:.12em;position:absolute}._clearingCell_1x3vm_38{left:calc((var(--clear-x) / var(--shape-columns)) * 100% + .12em);top:calc((var(--clear-y) / var(--shape-rows)) * 100% + .12em);width:calc(100% / var(--shape-columns) - .24em);height:calc(100% / var(--shape-rows) - .24em);border:1px solid color-mix(in srgb, currentColor 55%, transparent);background:color-mix(in srgb, currentColor 28%, transparent);border-radius:.12em;animation:.5s ease-out forwards _clear-cell_1x3vm_1;position:absolute}._piece_1x3vm_14[data-piece-phase=entry]{opacity:.35}._piece_1x3vm_14[data-piece-phase=align]{opacity:.65}._piece_1x3vm_14[data-piece-phase=travel]{opacity:.9}._piece_1x3vm_14[data-piece-phase=settled]{opacity:.5}@media (prefers-reduced-motion:reduce){._piece_1x3vm_14,._field_1x3vm_1[data-recycling=true] ._piece_1x3vm_14{transition:none}._field_1x3vm_1[data-overdue=true] ._clearingCell_1x3vm_38,._clearingCell_1x3vm_38{opacity:0;animation:none}}@keyframes _clear-cell_1x3vm_1{to{opacity:0;transform:scale(.35)}}._frontier_rnw91_1{width:var(--running-progress);background:linear-gradient(90deg, color-mix(in srgb, currentColor 16%, transparent), transparent);border-right:1px solid color-mix(in srgb, currentColor 75%, transparent);position:absolute;inset:0 auto 0 0}._now_rnw91_12{background:color-mix(in srgb, var(--ink-primary) 45%, transparent);width:1px;position:absolute;top:10%;bottom:10%;left:70%}._routes_rnw91_20{align-content:space-between;display:grid;position:absolute;inset:18% 8%}._route_rnw91_20{background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--ink-muted) 45%, transparent), transparent);height:1px}._route_rnw91_20:nth-child(2){transform:translate(8%)}._route_rnw91_20:nth-child(3){transform:translate(-6%)}._trail_rnw91_41,._packet_rnw91_42{border-radius:999px;animation:4.8s ease-in-out infinite alternate _packet_rnw91_42;position:absolute;top:50%;left:-10%}._trail_rnw91_41{opacity:.65;background:linear-gradient(90deg,#0000,currentColor);width:18%;height:2px}._packet_rnw91_42{background:currentColor;width:.48em;height:.48em;box-shadow:0 0 .65em}@container running-field (width<=40rem){._routes_rnw91_20,._trail_rnw91_41,._packet_rnw91_42,._now_rnw91_12{display:none}._frontier_rnw91_1{background:currentColor;border-right:0;width:.28em}}[data-overdue=true] ._frontier_rnw91_1{background:linear-gradient(90deg, color-mix(in srgb, currentColor 28%, transparent), transparent);width:70%}[data-overdue=true] ._packet_rnw91_42{animation:1.8s ease-in-out infinite alternate _packet-stall_rnw91_1;left:70%}[data-overdue=true] ._trail_rnw91_41{width:27%;animation:1.8s ease-in-out infinite alternate _trail-backup_rnw91_1;left:43%}@keyframes _packet_rnw91_42{0%{transform:translate(-10cqw,-50%)}to{transform:translate(120cqw,-50%)}}@keyframes _packet-stall_rnw91_1{0%{opacity:.72;transform:translate(-50%,-50%)scale(.82)}to{opacity:1;transform:translate(-50%,-50%)scale(1.12)}}@keyframes _trail-backup_rnw91_1{0%{opacity:.5;transform:translate(-8%,-50%)}to{opacity:.95;transform:translate(8%,-50%)}}@media (prefers-reduced-motion:reduce){[data-overdue=true] ._trail_rnw91_41,[data-overdue=true] ._packet_rnw91_42,._trail_rnw91_41,._packet_rnw91_42{animation:none}._frontier_rnw91_1{transition:none}}._field_1i9kx_1{z-index:0;pointer-events:none;color:var(--status-warning);position:absolute;inset:0;overflow:hidden;container:running-field/size}._overdue_1i9kx_11{color:var(--status-serious)}._timing_1i9kx_14{width:min(12ch,100%);min-width:0;max-width:100%;color:var(--ink-secondary);font-variant-numeric:tabular-nums;text-align:end;white-space:nowrap;flex:0 12ch;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72em;overflow:hidden}._timingOverdue_1i9kx_28{color:var(--status-serious)}._haze_3npie_1{background:radial-gradient(ellipse at 18% 44%, color-mix(in srgb, currentColor 19%, transparent), transparent 42%), radial-gradient(ellipse at 74% 63%, color-mix(in srgb, currentColor 12%, transparent), transparent 38%);animation:15s ease-in-out infinite alternate _haze_3npie_1;position:absolute;inset:-15%}._pressure_3npie_17{display:none}._band_3npie_20{background:linear-gradient(90deg, transparent, color-mix(in srgb, currentColor 32%, transparent), transparent);height:1px;animation:10s ease-in-out infinite alternate _band_3npie_20;position:absolute;left:-15%;right:-15%}._bandOne_3npie_33{top:32%}._bandTwo_3npie_36{animation-delay:-4s;top:67%}._bandThree_3npie_40{opacity:.55;animation-delay:-7s;top:49%}._drift_3npie_45{border:1px solid color-mix(in srgb, currentColor 78%, transparent);width:clamp(.34em,.9cqw,.7em);height:clamp(.34em,.9cqw,.7em);box-shadow:0 0 .55em color-mix(in srgb, currentColor 55%, transparent);border-radius:50%;animation:11s ease-in-out infinite alternate _drift_3npie_45;position:absolute}._driftOne_3npie_54{top:25%;left:12%}._driftTwo_3npie_58{opacity:.6;width:.34em;height:.34em;animation-duration:14s;animation-delay:-4s;top:72%;left:58%}._driftThree_3npie_67{opacity:.55;width:.7em;height:.7em;animation-duration:17s;animation-delay:-9s;top:18%;left:74%}._driftFour_3npie_76{opacity:.75;width:.42em;height:.42em;animation-duration:9s;animation-delay:-2s;top:58%;left:31%}._driftFive_3npie_85{opacity:.45;width:.58em;height:.58em;animation-duration:13s;animation-delay:-6s;top:84%;left:83%}@container running-field (width<=40rem) or (height<=6rem){._drift_3npie_45,._band_3npie_20{display:none}._haze_3npie_1{opacity:.65;width:2.5em;height:2.5em;inset:auto 0 0 auto}}[data-overdue=true] ._haze_3npie_1{background:radial-gradient(ellipse at 22% 48%, color-mix(in srgb, currentColor 34%, transparent), transparent 42%), radial-gradient(ellipse at 78% 58%, color-mix(in srgb, currentColor 25%, transparent), transparent 36%);inset:-30%}[data-overdue=true] ._pressure_3npie_17{border-top:1px solid color-mix(in srgb, currentColor 65%, transparent);border-bottom:1px solid color-mix(in srgb, currentColor 65%, transparent);background:repeating-linear-gradient(180deg, transparent 0 .55em, color-mix(in srgb, currentColor 14%, transparent) .55em .62em);opacity:.75;animation:3.4s ease-in-out infinite alternate _pressure_3npie_17;display:block;position:absolute;inset:20% 0}[data-overdue=true] ._band_3npie_20{background:linear-gradient(90deg,#0000,currentColor,#0000);animation-name:_storm-band_3npie_1}[data-overdue=true] ._drift_3npie_45{transform:translate(12cqw,-2cqh)scale(.82)}@keyframes _haze_3npie_1{to{transform:translate(9%,-4%)}}@keyframes _band_3npie_20{to{opacity:.45;transform:translate(8%)}}@keyframes _drift_3npie_45{to{transform:translate(10cqw,-2cqh)}}@keyframes _pressure_3npie_17{0%{opacity:.45;transform:scaleY(.72)}to{opacity:.9;transform:scaleY(1.12)}}@keyframes _storm-band_3npie_1{to{opacity:.9;transform:translate(-14%)}}@media (prefers-reduced-motion:reduce){[data-overdue=true] ._pressure_3npie_17,._haze_3npie_1,._band_3npie_20,._drift_3npie_45,._pressure_3npie_17{animation:none}}._anchor_1bd86_1{top:50%;left:var(--running-progress);position:absolute}._body_1bd86_6{animation:3.2s ease-in-out infinite alternate _phased-marker_1bd86_1;animation-delay:var(--phased-marker-delay,0s);will-change:transform;position:absolute;inset:0}@keyframes _phased-marker_1bd86_1{0%{transform:translate(var(--phased-marker-travel,-10em), -50%)}to{transform:translate(-50%,-50%)}}@media (prefers-reduced-motion:reduce){._body_1bd86_6{animation:none}}._frontier_2wwhn_1{width:var(--running-progress);background:linear-gradient(90deg, color-mix(in srgb, currentColor 16%, transparent), transparent);border-right:1px solid color-mix(in srgb, currentColor 75%, transparent);position:absolute;inset:0 auto 0 0}._flare_2wwhn_12{display:none}._lanes_2wwhn_15{align-content:space-between;display:grid;position:absolute;inset:13% 7%}._lane_2wwhn_15{background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--edge) 90%, transparent), transparent);height:1px;position:relative}._markerAnchor_2wwhn_31{width:.42em;height:.25em}._markerBody_2wwhn_35{--phased-marker-travel:-10cqw;background:currentColor;border-radius:999px;box-shadow:0 0 .6em}._lane_2wwhn_15:nth-child(2) ._markerBody_2wwhn_35{opacity:.7}._lane_2wwhn_15:nth-child(3) ._markerBody_2wwhn_35{opacity:.5}._lane_2wwhn_15:nth-child(4) ._markerBody_2wwhn_35{opacity:.8}@container running-field (width<=40rem) or (height<=6rem){._lanes_2wwhn_15{display:none}._frontier_2wwhn_1{background:currentColor;border-right:0;width:.28em}}[data-overdue=true] ._frontier_2wwhn_1{background:linear-gradient(90deg, color-mix(in srgb, currentColor 34%, transparent), transparent);border-right-color:currentColor;width:100%}[data-overdue=true] ._flare_2wwhn_12{background:radial-gradient(currentColor 0,#0000 68%);width:2.4em;height:100%;animation:1.6s ease-in-out infinite alternate _bloom-flare_2wwhn_1;display:block;position:absolute;top:0;left:100%;transform:translate(-50%)}[data-overdue=true] ._markerBody_2wwhn_35{--phased-marker-travel:-22.5cqw;animation-duration:.72s;animation-timing-function:ease-in-out}@media (prefers-reduced-motion:reduce){._frontier_2wwhn_1{transition:none}[data-overdue=true] ._flare_2wwhn_12,[data-overdue=true] ._markerBody_2wwhn_35{animation:none}}@keyframes _bloom-flare_2wwhn_1{0%{opacity:.42;transform:translate(-50%)scale(.8)}to{opacity:.95;transform:translate(-50%)scale(1.15)}}._progress_1x79l_1{min-width:0;color:var(--status-warning);align-items:center;gap:.6em;display:flex}._visual_1x79l_8{flex:none;position:relative}._timing_1x79l_12{color:var(--ink-secondary);margin:0;font-size:.72em}._overdue_1x79l_17,._overdue_1x79l_17 ._timing_1x79l_12{color:var(--status-serious)}._readout_1x79l_23{font-variant-numeric:tabular-nums;text-align:end;white-space:nowrap;flex:0 0 12ch;width:12ch;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}._radial_1x79l_31 ._visual_1x79l_8{border:.14em solid var(--edge);background:conic-gradient(var(--status-warning) var(--running-progress), var(--edge) 0);width:2.35em;height:2.35em;box-shadow:inset 0 0 0 .22em var(--surface-raised), 0 0 .55em color-mix(in srgb, var(--status-warning) 45%, transparent);border-radius:50%}._radial_1x79l_31 ._visual_1x79l_8:after{content:"";border-top:.14em solid var(--status-warning);border-radius:50%;animation:1.7s linear infinite _sweep_1x79l_1;position:absolute;inset:-.14em}._overdue_1x79l_17._radial_1x79l_31 ._visual_1x79l_8:before{content:"";border:.1em solid var(--status-serious);box-shadow:0 0 .55em color-mix(in srgb, var(--status-serious) 65%, transparent);border-radius:50%;animation:1.8s ease-in-out infinite _alarm-ring_1x79l_1;position:absolute;inset:-.42em}._radialCore_1x79l_58{background:var(--status-warning);box-shadow:0 0 .45em var(--status-warning);border-radius:50%;position:absolute;inset:.68em}._overdue_1x79l_17 ._radialCore_1x79l_58{background:var(--status-serious);box-shadow:0 0 .55em var(--status-serious);animation:1.8s ease-in-out infinite alternate _reactor-breathe_1x79l_1}._runway_1x79l_70{grid-template-columns:minmax(0,1fr) auto;align-self:stretch;display:grid;container-type:inline-size}._runway_1x79l_70 ._visual_1x79l_8{border:1px solid var(--edge);background:linear-gradient(90deg, var(--status-warning) var(--running-progress), var(--edge) 0);border-radius:999px;width:min(12em,100%);max-width:100%;height:.8em;overflow:hidden}._runway_1x79l_70 ._visual_1x79l_8:after{content:"";top:-.25em;bottom:-.25em;left:calc(var(--running-progress) - .06em);background:var(--ink-primary);width:.12em;box-shadow:0 0 .45em var(--ink-primary);position:absolute}._overdue_1x79l_17._runway_1x79l_70 ._visual_1x79l_8:before{content:"";background:repeating-linear-gradient(-45deg, var(--status-serious) 0 .12em, var(--surface) .12em .24em);width:.55em;box-shadow:0 0 .5em color-mix(in srgb, var(--status-serious) 70%, transparent);animation:1.4s ease-in-out infinite alternate _barrier-pulse_1x79l_1;position:absolute;inset:-.2em 0 -.2em calc(100% - .55em)}._overdue_1x79l_17._runway_1x79l_70 ._visual_1x79l_8:after{background:var(--status-serious);box-shadow:0 0 .55em var(--status-serious);animation:1.4s ease-in-out infinite alternate _barrier-pulse_1x79l_1}._spark_1x79l_114{background:var(--ink-primary);width:.35em;height:.35em;box-shadow:0 0 .4em var(--status-warning);border-radius:50%;animation:1.5s linear infinite _spark_1x79l_114;position:absolute;top:50%;left:-.5em}._overdue_1x79l_17._runway_1x79l_70 ._spark_1x79l_114{animation-duration:1s}._sparkTwo_1x79l_128{animation-delay:-.5s;display:none}._overdue_1x79l_17._runway_1x79l_70 ._sparkTwo_1x79l_128{display:block}._orbit_1x79l_135 ._visual_1x79l_8{border:1px solid var(--edge);border-radius:50%;width:2.4em;height:2.4em}._orbit_1x79l_135 ._visual_1x79l_8:before{content:"";border:.12em solid #0000;border-top-color:var(--status-warning);transform:rotate(var(--running-degrees));border-radius:50%;position:absolute;inset:.18em}._orbitCore_1x79l_151{background:var(--status-warning);box-shadow:0 0 .45em var(--status-warning);border-radius:50%;position:absolute;inset:.75em}._overdue_1x79l_17 ._orbitCore_1x79l_151{background:var(--status-serious);box-shadow:0 0 .55em var(--status-serious);animation:1.15s ease-in-out infinite alternate _reactor-breathe_1x79l_1}._particle_1x79l_163{background:var(--ink-primary);transform-origin:.16em .95em;border-radius:50%;width:.32em;height:.32em;animation:1.8s linear infinite _orbit_1x79l_135;position:absolute;top:.25em;left:calc(50% - .16em)}._particleTwo_1x79l_174{background:var(--status-warning);animation-delay:-.9s}._overdue_1x79l_17._orbit_1x79l_135 ._visual_1x79l_8:after{content:"";border:.08em solid color-mix(in srgb, var(--status-serious) 75%, transparent);box-shadow:0 0 .6em color-mix(in srgb, var(--status-serious) 55%, transparent);border-radius:50%;animation:1.15s ease-in-out infinite alternate _gravity-well_1x79l_1;position:absolute;inset:.42em}._overdue_1x79l_17._orbit_1x79l_135 ._particle_1x79l_163{transform-origin:.16em .7em;animation-duration:.95s}._indeterminate_1x79l_191 ._visual_1x79l_8{background-image:repeating-linear-gradient(135deg, color-mix(in srgb, var(--status-warning) 70%, transparent) 0 .25em, var(--edge) .25em .5em);animation:1s linear infinite _shift_1x79l_1}._signalField_1x79l_199{flex:auto;grid-template-columns:minmax(0,1fr) auto;align-self:stretch;min-height:0;max-height:100%;display:grid;container-type:size}._signalField_1x79l_199 ._visual_1x79l_8{border:1px solid var(--edge);background:var(--surface);border-radius:999px;width:auto;height:1em;max-height:100%;overflow:hidden}._rail_1x79l_217{background:linear-gradient(90deg, var(--status-warning) var(--running-progress), var(--edge) 0);opacity:.75;position:absolute;inset:0}._lead_1x79l_223{top:-.2em;bottom:-.2em;left:calc(var(--running-progress) - .08em);background:var(--ink-primary);width:.16em;box-shadow:0 0 .5em var(--status-warning);border-radius:999px;position:absolute}._pulse_1x79l_233{background:var(--ink-primary);width:.3em;height:.3em;box-shadow:0 0 .4em var(--status-warning);border-radius:50%;animation:2.4s ease-in-out infinite alternate _pulse_1x79l_233;position:absolute;top:50%;left:-.5em}._pulseTwo_1x79l_244{animation-delay:-1.2s}._tracks_1x79l_247{display:none}@container panel (width>=26rem){._runway_1x79l_70 ._visual_1x79l_8{width:auto;height:clamp(1.1em,7cqw,2.7em);box-shadow:inset 0 0 1em color-mix(in srgb, var(--status-warning) 16%, transparent);flex:auto}._runway_1x79l_70 ._visual_1x79l_8:after{left:calc(var(--running-progress) - .08em);width:.16em}._spark_1x79l_114{animation-name:_sparkWide_1x79l_1}}@container panel (width<=18rem){._signalField_1x79l_199{flex:0 auto;min-height:0}._signalField_1x79l_199 ._visual_1x79l_8{width:2.65em;height:1.15em}._signalField_1x79l_199 ._rail_1x79l_217{background:var(--edge)}._signalField_1x79l_199 ._lead_1x79l_223{border-radius:50%;width:.38em;top:.2em;bottom:.2em}._pulse_1x79l_233{display:none}}@container panel (height<=5rem){._signalField_1x79l_199{flex:0 auto;min-height:0}._signalField_1x79l_199 ._visual_1x79l_8{width:2.65em;height:1.15em}._signalField_1x79l_199 ._rail_1x79l_217{background:var(--edge)}._signalField_1x79l_199 ._lead_1x79l_223{border-radius:50%;width:.38em;top:.2em;bottom:.2em}._pulse_1x79l_233{display:none}}@container panel (width>=26rem){._signalField_1x79l_199 ._visual_1x79l_8{background:linear-gradient(180deg, color-mix(in srgb, var(--edge) 60%, transparent), transparent);border-radius:.25em;height:100%;min-height:0}._signalField_1x79l_199 ._visual_1x79l_8:before{content:"";width:var(--running-progress);background:repeating-linear-gradient(0deg, transparent 0 .55em, color-mix(in srgb, var(--status-warning) 16%, transparent) .55em .6em), linear-gradient(90deg, color-mix(in srgb, var(--status-warning) 19%, transparent), color-mix(in srgb, var(--status-warning) 7%, transparent));box-shadow:inset -.8em 0 1em color-mix(in srgb, var(--status-warning) 22%, transparent);position:absolute;inset:0 auto 0 0}._signalField_1x79l_199 ._rail_1x79l_217{height:1px;top:50%;bottom:auto}._signalField_1x79l_199 ._lead_1x79l_223{height:.9em;top:calc(50% - .45em);bottom:auto}._pulse_1x79l_233{display:none}._tracks_1x79l_247{flex-direction:column;justify-content:space-between;display:flex;position:absolute;inset:.8em 0}._track_1x79l_247{background:linear-gradient(90deg, transparent, color-mix(in srgb, var(--edge) 85%, transparent), transparent);height:1px;position:relative}._markerAnchor_1x79l_371{width:.38em;height:.22em}._markerBody_1x79l_375{background:var(--status-warning);box-shadow:0 0 .4em var(--status-warning);border-radius:.06em}._track_1x79l_247:nth-child(2) ._markerBody_1x79l_375{opacity:.7;animation-delay:-.8s}._track_1x79l_247:nth-child(3) ._markerBody_1x79l_375{opacity:.45;animation-delay:-1.7s}._track_1x79l_247:nth-child(4) ._markerBody_1x79l_375{opacity:.7;animation-delay:-2.4s}._track_1x79l_247:nth-child(5) ._markerBody_1x79l_375{opacity:.55;animation-delay:-.35s}}._overdue_1x79l_17._signalField_1x79l_199 ._rail_1x79l_217{background:linear-gradient(90deg, var(--status-serious) 0 100%);opacity:.42}._overdue_1x79l_17._signalField_1x79l_199 ._lead_1x79l_223{background:var(--status-serious);box-shadow:0 0 .7em var(--status-serious);animation:1.2s ease-in-out infinite alternate _endpoint-pulse_1x79l_1}._overdue_1x79l_17._signalField_1x79l_199 ._markerBody_1x79l_375{--phased-marker-travel:-10em;background:var(--status-serious);box-shadow:0 0 .55em var(--status-serious);animation-duration:.68s;animation-timing-function:ease-in-out}._short_1x79l_413 ._signalField_1x79l_199 ._visual_1x79l_8{height:1em}@keyframes _sweep_1x79l_1{to{transform:rotate(360deg)}}@keyframes _alarm-ring_1x79l_1{0%{opacity:.45;transform:scale(.92)}to{opacity:1;transform:scale(1.08)}}@keyframes _reactor-breathe_1x79l_1{0%{opacity:.7;transform:scale(.84)}to{opacity:1;transform:scale(1.12)}}@keyframes _barrier-pulse_1x79l_1{0%{opacity:.55}to{opacity:1}}@keyframes _gravity-well_1x79l_1{0%{opacity:.45;transform:scale(.82)}to{opacity:.95;transform:scale(1.08)}}@keyframes _endpoint-pulse_1x79l_1{0%{opacity:.65;transform:scaleY(.75)}to{opacity:1;transform:scaleY(1.15)}}@keyframes _spark_1x79l_114{to{transform:translate(13em)}}@keyframes _sparkWide_1x79l_1{to{transform:translate(100cqw)}}@keyframes _orbit_1x79l_135{to{transform:rotate(360deg)}}@keyframes _shift_1x79l_1{to{background-position:1em 0}}@keyframes _pulse_1x79l_233{0%{transform:translate(-.5em,-50%)}to{transform:translate(calc(var(--running-progress) + .5em), -50%)}}@media (prefers-reduced-motion:reduce){._radial_1x79l_31 ._visual_1x79l_8:after,._overdue_1x79l_17._radial_1x79l_31 ._visual_1x79l_8:before,._overdue_1x79l_17 ._radialCore_1x79l_58,._spark_1x79l_114,._runway_1x79l_70 ._visual_1x79l_8:after,._overdue_1x79l_17._runway_1x79l_70 ._visual_1x79l_8:before,._overdue_1x79l_17._runway_1x79l_70 ._visual_1x79l_8:after,._particle_1x79l_163,._overdue_1x79l_17._orbit_1x79l_135 ._visual_1x79l_8:after,._pulse_1x79l_233,._lead_1x79l_223,._overdue_1x79l_17._signalField_1x79l_199 ._lead_1x79l_223,._overdue_1x79l_17._signalField_1x79l_199 ._markerBody_1x79l_375,._signalField_1x79l_199 ._visual_1x79l_8:before,._indeterminate_1x79l_191 ._visual_1x79l_8{animation:none}}._details_19avj_1{display:contents}._details_19avj_1>.hint{line-height:1.1}._activity_19avj_7,._duration_19avj_8{overflow-wrap:anywhere}@container panel (width>=48rem){[data-density=comfortable][data-shallow=true] ._details_19avj_1>*,[data-density=auto][data-shallow=true] ._details_19avj_1>*{margin:0}}._compactFacts_f62xm_1{flex-direction:column;gap:.1em;min-width:0;display:none}._incomplete_f62xm_8{color:var(--warning-text)}._compactFact_f62xm_1{min-width:0;color:var(--ink-muted);margin:0;font-size:.7em}._failedItem_f62xm_19{min-width:0;color:var(--ink-primary);margin:0;font-size:.85em;font-weight:600}._evidence_f62xm_27,._freshness_f62xm_28{flex-direction:column;gap:.1em;min-width:0;display:flex}@container panel (width<=13rem) and (height>=24rem){._statusAnchor_f62xm_36 [class*=status]{font-size:1.7em}._compactFacts_f62xm_1{display:flex}._fullSummary_f62xm_44{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}@container panel (width<=13rem) and (height<=10rem){[data-density=compact] ._compactFacts_f62xm_1~[data-panel-meta]{display:none}}._error_yx1g9_1{max-width:60ch;color:var(--ink-primary);margin:0 auto;padding:2rem}._error_yx1g9_1 pre{border-radius:var(--radius);border:1px solid var(--status-critical);background:var(--surface-raised);color:var(--ink-secondary);white-space:pre-wrap;overflow-wrap:anywhere;padding:1rem;font-size:.75em}:root{--surface:#12140f;--surface-raised:#1a1a19;--ink-primary:#fff;--ink-secondary:#c3c2b7;--ink-muted:#898781;--edge:#2f312b;--status-good:#0ca30c;--status-warning:#fab219;--status-serious:#ec835a;--status-critical:#d03b3b;--gap:1rem;--radius:.5rem;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--surface);color:var(--ink-primary);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Helvetica,Arial,sans-serif;font-size:clamp(16px,1.1vw + .5rem,28px);line-height:1.4;overflow-x:hidden}.screen-reader-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}
@@ -1,3 +0,0 @@
1
- import{z as e}from"zod";import{StrictMode as t,useEffect as n,useMemo as r,useRef as i,useState as a,useSyncExternalStore as o}from"react";import{createRoot as s}from"react-dom/client";import{Fragment as c,jsx as l,jsxs as u}from"react/jsx-runtime";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var d=/^(\d+)(ms|s|m|h)$/,f={ms:1,s:1e3,m:6e4,h:36e5};function p(e){let t=d.exec(e);if(!t)return null;let[,n,r]=t;if(n===void 0||r===void 0)return null;let i=Number(n);return i<=0?null:i*f[r]}var m=e.string().refine(e=>p(e)!==null,{message:`must be a positive duration like "30s", "5m", or "1h"`}).brand(),h=e.union([e.object({x:e.number().int().min(0),y:e.number().int().min(0),w:e.number().int().min(1).max(12),h:e.number().int().min(1)}),e.object({x:e.literal(0),y:e.literal(0),w:e.literal(0),h:e.literal(0)})]),g=e.enum([`auto`,`comfortable`,`compact`]),_=[`radial`,`runway`,`orbit`,`signal-field`,`telemetry-bloom`,`release-transit`,`status-weather`,`falling-shapes`],v=e.enum([..._,`off`]),y=e.looseObject({label:e.string().min(1).optional(),id:e.string().min(1),type:e.string().min(1),source:e.string().min(1).optional(),pipeline:e.union([e.string(),e.number()]).optional(),branch:e.string().min(1).optional(),density:g.optional(),position:h.optional(),refresh:m.optional(),running_refresh:m.optional(),running_completion_refresh:m.optional(),running_completion_window:m.optional(),running_animation:v.optional(),demo_run_duration:m.optional(),demo_review_duration:m.optional(),link:e.url().optional(),url:e.url().optional(),json_path:e.string().regex(/^\$(?:\.[A-Za-z_][A-Za-z0-9_]*|\[\d+\])*$/,`must be a simple JSON path`).optional()}).superRefine((e,t)=>{`display`in e&&t.addIssue({code:`custom`,path:[`display`],message:`display was removed; use density`})}),b=e.object({app_id_env:e.string().min(1),private_key_env:e.string().min(1),installation_id_env:e.string().min(1)}),x={token_env:e.string().min(1).optional(),github_app:b.optional()};function S(e,t){e.token_env&&e.github_app&&t.addIssue({code:`custom`,message:`configure token_env or github_app, not both`})}e.looseObject({type:e.literal(`github-actions`),repo:e.string().regex(/^[^/\s]+\/[^/\s]+$/,`must be an owner/repository pair`),branch:e.string().min(1).optional(),...x}).superRefine(S);var C=e.looseObject({type:e.literal(`azure-devops`),organization:e.string().regex(/^[^/\s]+$/,`must be an organization name`),project:e.string().min(1),branch:e.string().min(1).optional(),token_env:e.string().min(1)}),ee=e.looseObject({type:e.string().min(1),...x}).superRefine(S),w=e.object({refresh:m.optional(),running_refresh:m.optional(),running_completion_refresh:m.optional(),running_completion_window:m.optional(),panels:e.array(y).min(1).superRefine((e,t)=>{let n=new Map;e.forEach((e,r)=>{let i=n.get(e.id);if(i===void 0){n.set(e.id,r);return}t.addIssue({code:`custom`,path:[r,`id`],message:`duplicate panel id "${e.id}" (already used by panel at index ${i})`})})})}),T=e.object({issuer:e.url(),client_id:e.string().min(1).optional(),allow:e.object({groups:e.array(e.string().min(1)).optional(),subjects:e.array(e.string().min(1)).optional()}).optional()});e.object({sources:e.record(e.string().min(1),ee).default({}),boards:e.record(e.string().min(1),w),auth:T.optional()}).superRefine((e,t)=>{for(let[n,r]of Object.entries(e.sources)){if(r.type!==`azure-devops`)continue;let e=C.safeParse(r);if(!e.success)for(let r of e.error.issues)t.addIssue({code:`custom`,path:[`sources`,n,...r.path],message:r.message})}for(let[n,r]of Object.entries(e.boards))r.panels.forEach((r,i)=>{let a=r.source?e.sources[r.source]:void 0;r.type===`pipeline-status`&&a?.type===`azure-devops`&&(typeof r.pipeline!=`number`||!Number.isInteger(r.pipeline)||r.pipeline<=0)&&t.addIssue({code:`custom`,path:[`boards`,n,`panels`,i,`pipeline`],message:`Azure DevOps pipeline-status panels require a positive numeric pipeline definition id`})})});var E=e.object({assetPath:e.string().min(1),proxyPath:e.string().min(1),board:e.string().min(1),auth:e.object({issuer:e.string().min(1),clientId:e.string().min(1).optional()}).optional()}),te=E.pick({assetPath:!0});function ne(t=globalThis.window?.env){let n=E.safeParse(t);if(!n.success)throw Error(`window.env is missing or invalid \u2014 the server did not inject usable configuration.
2
- ${e.prettifyError(n.error)}`);return n.data}var re=e.enum([`unreachable`,`unauthorized`,`not-found`,`no-runs`,`upstream-error`]),ie=e.object({kind:re,message:e.string()}),ae=e.discriminatedUnion(`state`,[e.object({panelId:e.string().min(1),state:e.literal(`ok`),observedAt:e.iso.datetime(),link:e.url().nullable(),signal:e.unknown()}),e.object({panelId:e.string().min(1),state:e.literal(`error`),observedAt:e.iso.datetime(),link:e.url().nullable(),error:ie})]),oe=e.object({kind:e.enum([`job`,`stage`,`step`]),name:e.string().min(1),parent:e.string().min(1).optional()}),D=e.object({type:e.literal(`pipeline-status`),status:e.enum([`passed`,`failed`,`running`,`cancelled`,`unknown`]),rawStatus:e.string(),name:e.string().min(1),branch:e.string().min(1).optional(),durationMs:e.number().int().nonnegative().optional(),runStartedAt:e.iso.datetime().optional(),sourceRunId:e.string().min(1).optional(),activity:oe.optional(),estimatedDurationMs:e.number().int().positive().optional(),sourceUpdatedAt:e.iso.datetime().optional()}),O=e.object({label:e.string().min(1),status:D.shape.status,detail:e.string().min(1),link:e.url().nullable()}),se=e.object({type:e.literal(`pull-request-health`),status:D.shape.status,summary:e.string().min(1),workflows:e.array(O),pullRequests:e.array(O),incompleteObservations:e.array(e.object({label:e.string().min(1),message:e.string().min(1)})).optional(),newestObservedAt:e.iso.datetime().optional()}),ce=e.object({number:e.number().int().positive(),branch:e.string().min(1),link:e.url()}),le=e.object({type:e.literal(`pull-request-candidates`),pullRequests:e.array(ce),truncated:e.boolean().optional()}),ue=e.object({type:e.literal(`pull-request-workflow`),workflow:e.string().min(1),item:O}),de=e.object({type:e.literal(`pull-request-build`),branch:e.string().min(1),item:O}),fe=e.object({type:e.literal(`http-value`),value:e.union([e.string(),e.number(),e.boolean()])}),pe=12,me=12;function he(e){let t=e.flatMap(e=>!e.position||k(e.position)||ge(e.position)?[]:[{panelId:e.id,kind:`out-of-bounds`,position:e.position,conflictsWith:[]}]),n=new Map;for(let r=0;r<e.length;r++){let i=e[r];if(!(!i?.position||k(i.position)))for(let a=r+1;a<e.length;a++){let r=e[a];if(!r?.position||k(r.position)||!_e(i.position,r.position))continue;let o=`${r.id}\0overlap`,s=n.get(o);if(s)s.conflictsWith.push(i.id);else{let e={panelId:r.id,kind:`overlap`,position:r.position,conflictsWith:[i.id]};n.set(o,e),t.push(e)}}}return{issues:t}}function k(e){return e?.x===0&&e.y===0&&e.w===0&&e.h===0}function ge(e){return!k(e)&&e.x+e.w<=pe&&e.y+e.h<=me}function _e(e,t){return e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y}var A={refreshMillis:6e4,runningRefreshMillis:15e3,runningCompletionRefreshMillis:5e3,runningCompletionWindowMillis:12e4};function ve(e,t){let n=(e,t)=>p(e??``)??t,r=(r,i,a)=>n(t[r],n(e[i],a));return{refreshMillis:r(`refresh`,`refresh`,A.refreshMillis),runningRefreshMillis:r(`running_refresh`,`running_refresh`,A.runningRefreshMillis),runningCompletionRefreshMillis:r(`running_completion_refresh`,`running_completion_refresh`,A.runningCompletionRefreshMillis),runningCompletionWindowMillis:r(`running_completion_window`,`running_completion_window`,A.runningCompletionWindowMillis)}}var j={board:`_board_91ffc_1`,header:`_header_91ffc_11`,title:`_title_91ffc_18`,grid:`_grid_91ffc_24`,footerTools:`_footerTools_91ffc_34`,layoutWarning:`_layoutWarning_91ffc_39`,layoutWarningButton:`_layoutWarningButton_91ffc_42`,layoutWarningDialog:`_layoutWarningDialog_91ffc_60`,layoutWarningHeading:`_layoutWarningHeading_91ffc_73`,layoutWarningClose:`_layoutWarningClose_91ffc_91`,layoutWarningDownloads:`_layoutWarningDownloads_91ffc_99`,layoutWarningNote:`_layoutWarningNote_91ffc_118`,footer:`_footer_91ffc_34`},M={diagnostics:`_diagnostics_lseur_1`,button:`_button_lseur_5`,area:`_area_lseur_14`,warning:`_warning_lseur_31`,panels:`_panels_lseur_35`,actions:`_actions_lseur_43`};function ye({log:e}){let[t,n]=a(!1);o(e.subscribe,e.snapshot,e.snapshot);let r=e.count(),i=e.githubConsistencyIncidentCount(),s=e.summary();return u(`section`,{className:M.diagnostics,children:[u(`button`,{className:M.button,type:`button`,"aria-expanded":t,onClick:()=>n(!t),children:[`Diagnostics (`,r,`)`,i>0&&` · GitHub consistency ${i}`]}),t&&u(`div`,{className:M.area,children:[u(`p`,{children:[`Client `,e.clientVersion(),` · assets `,e.assetPath()]}),u(`p`,{children:[s.retained.eventCount,` retained browser-local events across`,` `,s.retained.sessionCount,` session`,s.retained.sessionCount===1?``:`s`,s.retained.firstEventAt&&s.retained.lastEventAt?` (${be(s.retained.firstEventAt,s.retained.lastEventAt)})`:``,`. They are never uploaded.`]}),s.retained.evidenceMayBeIncomplete&&u(`p`,{className:M.warning,role:`alert`,children:[`Earlier evidence was pruned: `,s.retained.retention.eventsPrunedByCount,` at the 2,000-event cap and `,s.retained.retention.eventsPrunedByAge,` by the 7-day age limit. “No failures” applies only to the retained window.`]}),u(`p`,{children:[`Update failures: `,s.failures.clientUpdate,`; board fetch failures:`,` `,s.failures.boardFetch,`.`]}),e.githubConsistencyIncidentCount()>0&&u(`p`,{className:M.warning,role:`alert`,children:[`GitHub API consistency incidents: `,e.githubConsistencyIncidentCount(),`. A response older than the last accepted run was rejected; download diagnostics to report it.`]}),s.panels.length>0&&l(`div`,{className:M.panels,children:s.panels.map(e=>u(`p`,{children:[l(`strong`,{children:e.panelId}),` — `,e.requests,` requests`,Object.keys(e.httpStatuses).length?`; HTTP ${Object.entries(e.httpStatuses).map(([e,t])=>`${e}×${t}`).join(`, `)}`:``,`; parse/network failures `,e.parseFailures,`/`,e.networkFailures,`; visible changes `,e.visibleStateChanges,`; latest`,` `,e.latestRendered?`${e.latestRendered.state}${e.latestRendered.status?`/${e.latestRendered.status}`:``}`:`not rendered`,`.`]},e.panelId))}),u(`div`,{className:M.actions,children:[l(`button`,{className:M.button,type:`button`,onClick:()=>{let t=new Blob([JSON.stringify(e.export(),null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`dashboard-diagnostics-${new Date().toISOString().replaceAll(`:`,`-`)}.json`,r.click(),URL.revokeObjectURL(n)},children:`Download`}),l(`button`,{className:M.button,type:`button`,onClick:()=>{window.confirm(`Clear this browser’s retained dashboard diagnostics?`)&&e.clear()},children:`Clear`})]})]})]})}function be(e,t){return e===t?e:`${e} to ${t}`}function xe(){try{return window.localStorage}catch{return}}function Se(e,t){try{let n=e?.getItem(t);return n?JSON.parse(n):void 0}catch{return}}function Ce(e,t,n){try{e?.setItem(t,JSON.stringify(n))}catch{}}function we(e,t){try{e?.removeItem(t)}catch{}}function Te(e,t,n=0){let r=new Map,i=new Set,a=0,o=0;for(let t of e){if(i.add(t.sessionId),t.kind===`client-update-failure`&&a++,(t.kind===`board-fetch-failure`||t.kind===`board-fetch-parse-failure`)&&o++,!(`panelId`in t))continue;let e=r.get(t.panelId)??{panelId:t.panelId,requests:0,httpStatuses:{},parseFailures:0,networkFailures:0,visibleStateChanges:0};if(t.kind===`panel-fetch-start`&&e.requests++,t.kind===`panel-fetch-response`&&t.status!==void 0){let n=String(t.status);e.httpStatuses[n]=(e.httpStatuses[n]??0)+1}t.kind===`panel-fetch-parse-failure`&&e.parseFailures++,t.kind===`panel-fetch-failure`&&e.networkFailures++,t.kind===`panel-rendered`&&(e.visibleStateChanges++,e.latestRendered=t.rendered),r.set(t.panelId,e)}let s=e.map(e=>e.at).sort(),c=t.eventsPrunedByAge+t.eventsPrunedByCount;return{githubConsistencyIncidents:n,retained:{eventCount:e.length,firstEventAt:s[0],lastEventAt:s.at(-1),sessionCount:i.size,retention:t,evidenceMayBeIncomplete:c>0},failures:{clientUpdate:a,boardFetch:o},panels:[...r.values()].sort((e,t)=>e.panelId.localeCompare(t.panelId))}}var Ee=`0.20.0`,N=`ze-great-dashboard.diagnostics.v1`,De=2e3,Oe=6048e5,ke=[`session-start`,`client-update-check`,`client-update-failure`,`client-update-detected`,`board-fetch-start`,`board-fetch-response`,`board-fetch-parse-failure`,`board-fetch-failure`,`layout-analyzed`,`panel-fetch-start`,`panel-fetch-response`,`panel-fetch-parse-failure`,`panel-fetch-failure`,`panel-rendered`],Ae=class{env;storage;now;events=[];retention=Ne();revision=0;incidents=[];listeners=new Set;sessionId=crypto.randomUUID?.()??`${Date.now()}-${Math.random()}`;constructor(e,t=xe(),n=()=>new Date){this.env=e,this.storage=t,this.now=n,this.events=this.read(),this.record({kind:`session-start`})}recordGithubConsistencyIncident(e){this.incidents.push({...e,at:this.now().toISOString(),board:this.env.board}),this.persist(),this.revision++,this.notify()}githubConsistencyIncidentCount=()=>this.incidents.length;record(e){let t=Fe([...this.events,{...e,schemaVersion:1,at:this.now().toISOString(),sessionId:this.sessionId,board:this.env.board}],this.now(),this.retention);this.events=t.events,this.retention=t.retention,this.persist(),this.revision++,this.notify()}count=()=>this.events.length;clientVersion=()=>Ee;assetPath=()=>this.env.assetPath;snapshot=()=>this.revision;summary=()=>Te(this.events,this.retention,this.incidents.length);clear(){this.events=[],this.incidents=[],this.retention=Ne(),we(this.storage,N),this.revision++,this.notify()}subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});export=()=>({schemaVersion:1,exportedAt:this.now().toISOString(),client:{version:Ee,assetPath:this.env.assetPath,board:this.env.board,sessionId:this.sessionId},events:this.events,githubConsistencyIncidents:this.incidents,summary:this.summary()});read(){let e=Se(this.storage,N);if(!e||e.schemaVersion!==1||!Array.isArray(e.events)||!e.events.every(Ie))return we(this.storage,N),[];let t=Fe(e.events.map(e=>({...e,schemaVersion:1})),this.now(),Pe(e.retention));return this.retention=t.retention,this.incidents=je(e.githubConsistencyIncidents),t.events}persist(){Ce(this.storage,N,{schemaVersion:1,events:this.events,retention:this.retention,githubConsistencyIncidents:this.incidents})}notify(){for(let e of this.listeners)e()}};function je(e){return Array.isArray(e)?e.filter(e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.at==`string`&&typeof t.board==`string`&&typeof t.panelId==`string`&&typeof t.endpoint==`string`&&!!t.accepted&&!!t.regressed&&!!t.response}):[]}function Me(e){let t=Object.fromEntries([[`cacheControl`,`cache-control`],[`etag`,`etag`],[`lastModified`,`last-modified`],[`date`,`date`],[`age`,`age`]].flatMap(([t,n])=>{let r=e.get(n);return r?[[t,r]]:[]}));return Object.keys(t).length?t:void 0}function Ne(){return{eventsPrunedByAge:0,eventsPrunedByCount:0}}function Pe(e){if(!e||typeof e!=`object`)return Ne();let t=e;return{eventsPrunedByAge:typeof t.eventsPrunedByAge==`number`&&t.eventsPrunedByAge>=0?t.eventsPrunedByAge:0,eventsPrunedByCount:typeof t.eventsPrunedByCount==`number`&&t.eventsPrunedByCount>=0?t.eventsPrunedByCount:0}}function Fe(e,t,n){let r=t.valueOf()-Oe,i=e.filter(e=>Number.isFinite(new Date(e.at).valueOf())&&new Date(e.at).valueOf()>=r),a=e.length-i.length,o=Math.max(0,i.length-De);return{events:i.slice(-2e3),retention:{eventsPrunedByAge:n.eventsPrunedByAge+a,eventsPrunedByCount:n.eventsPrunedByCount+o}}}function Ie(e){if(!e||typeof e!=`object`)return!1;let t=e;return(t.schemaVersion===void 0||t.schemaVersion===1)&&typeof t.at==`string`&&Number.isFinite(new Date(t.at).valueOf())&&typeof t.sessionId==`string`&&typeof t.board==`string`&&ke.includes(t.kind)}var P={panel:`_panel_ditgn_1`,content:`_content_ditgn_22`,sourceAction:`_sourceAction_ditgn_35`,details:`_details_ditgn_39`,threeAnchor:`_threeAnchor_ditgn_47`,error:`_error_ditgn_51`,wide:`_wide_ditgn_54`,"density-comfortable":`_density-comfortable_ditgn_57`,"density-compact":`_density-compact_ditgn_64`,label:`_label_ditgn_74`,hint:`_hint_ditgn_85`,branch:`_branch_ditgn_91`,observed:`_observed_ditgn_95`,meta:`_meta_ditgn_101`,metaValue:`_metaValue_ditgn_104`,warning:`_warning_ditgn_108`,serious:`_serious_ditgn_111`,status:`_status_ditgn_114`,passed:`_passed_ditgn_122`,failed:`_failed_ditgn_125`,running:`_running_ditgn_128`,cancelled:`_cancelled_ditgn_131`,unknown:`_unknown_ditgn_132`,shallow:`_shallow_ditgn_165`,"density-auto":`_density-auto_ditgn_166`};function Le({label:e,hint:t,wide:n=!1}){return u(`section`,{className:`${P.panel} ${n?P.wide:``}`,"data-panel":!0,"data-panel-id":`placeholder`,children:[l(`h2`,{className:P.label,children:e}),l(`p`,{className:P.hint,children:t})]})}function Re(e){switch(e){case`unauthorized`:return{label:`Access denied`,emphasis:`serious`};case`not-found`:return{label:`Source not found`,emphasis:`serious`};case`unreachable`:case`upstream-error`:return{label:`Source unavailable`,emphasis:`serious`};case`no-runs`:return{label:`No workflow runs`,emphasis:`warning`}}}var ze={fact:`_fact_envkl_1`};function Be(e){let t=e.position;if(t)return{"--panel-column":`${t.x+1} / span ${t.w}`,"--panel-row":`${t.y+1} / span ${t.h}`}}function F({children:e,className:t,title:n}){return l(`p`,{className:`${P.hint} ${t??``}`,title:n,children:e})}function I({glyph:e,label:t,value:n,title:r,observed:i=!1,emphasis:a,className:o}){return u(`p`,{className:`${P.hint} ${i?P.observed:``} ${a?P[a]:``} ${P.meta} ${o??``}`,"data-panel-meta":!0,children:[l(`span`,{"aria-hidden":`true`,children:e}),` `,u(`span`,{className:`screen-reader-only`,children:[t,`: `]}),l(`span`,{className:P.metaValue,title:r,children:n})]})}function L({children:e,status:t,emphasis:n}){return l(`p`,{className:`${P.status} ${t?P[t]:``} ${n?P[n]:``}`,children:e})}function R({panel:e,envelope:t,error:n=!1,field:r,layout:i,children:a}){let o=e.density??`auto`,s=e.position,c=s!==void 0&&s.h<=2,d=s!==void 0&&s.h<=3;return u(`section`,{className:`${P.panel} ${P[`density-${o}`]} ${c?P.shallow:``} ${d?P.short:``} ${n?P.error:``}`,style:Be(e),"aria-busy":!t||void 0,"data-panel":!0,"data-panel-id":e.id,"data-panel-position":s?`${s.x},${s.y},${s.w},${s.h}`:void 0,"data-density":o,"data-shallow":c,"data-short":d,"data-error":n||void 0,children:[r,l(Ve,{panelId:e.id,link:t?.link}),u(`div`,{className:`${P.content} ${i===`three-anchor`?P.threeAnchor:``}`,"data-panel-content":!0,"data-panel-layout":i,children:[l(`h2`,{className:P.label,children:e.label??e.id}),a]})]})}function Ve({panelId:e,link:t}){return t?u(`a`,{className:P.sourceAction,href:t,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`View source for ${e} (opens in a new tab)`,title:`View source for ${e} (opens in a new tab)`,"data-panel-action":`source`,"data-panel-link":!0,children:[l(`span`,{"aria-hidden":`true`,children:`↗`}),l(`span`,{className:`screen-reader-only`,children:`View source`})]}):null}function He({value:e,label:t=`Observed`}){return l(z,{value:e,label:t})}function Ue({sourceUpdatedAt:e,observedAt:t,running:n,runStartedAt:r}){return n&&r?l(z,{value:r,label:`Started`}):l(z,{value:e??t,label:e?`Last update`:`Observed`})}function We({health:e}){let t=e.consecutiveFailures>=3,n=t?`Updates unavailable`:`Updates delayed`;return u(c,{children:[l(I,{glyph:`⚠`,label:n,value:`${n} · ${e.message}`,title:e.message,emphasis:t?`serious`:`warning`}),l(z,{value:e.lastConfirmedAt,label:`Last confirmed`})]})}function z({value:e,label:t}){let n=new Date(e),r=n.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}),i=`${t} ${Ge(Date.now()-n.getTime())}`;return l(I,{glyph:`◷`,label:t,value:i,title:`${t} at ${r}`,observed:!0})}function Ge(e){if(e<6e4)return`just now`;let t=Math.floor(e/6e4);return t<60?`${t}m ago`:`${Math.floor(t/60)}h ${t%60}m ago`}function Ke({panel:e,envelope:t,updateHealth:n}){if(!t)return l(R,{panel:e,children:l(F,{children:`Loading…`})});if(t.state===`error`){let n=Re(t.error.kind);return u(R,{panel:e,envelope:t,error:!0,children:[u(L,{emphasis:n.emphasis,children:[`⚠ `,n.label]}),l(F,{children:t.error.message})]})}let r=fe.safeParse(t.signal);return r.success?l(R,{panel:e,envelope:t,children:u(`div`,{className:ze.fact,children:[l(L,{children:String(r.data.value)}),l(He,{value:t.observedAt}),n&&l(We,{health:n})]})}):l(R,{panel:e,envelope:t,error:!0,children:l(L,{children:`⚠ Invalid value`})})}var qe=.85,Je=[[{x:0,y:0},{x:1,y:0}],[{x:0,y:0},{x:0,y:1}],[{x:0,y:0},{x:1,y:0},{x:0,y:1}],[{x:0,y:0},{x:1,y:0},{x:2,y:0}],[{x:0,y:0},{x:0,y:1},{x:1,y:1}]];function Ye(e,t){return e>t?`horizontal`:`vertical`}function Xe(e,t=e===`horizontal`?12:3,n=e===`horizontal`?3:12){let r=Math.max(1,t*.8),i=Math.max(1,n*.8),a=Math.max(24,Math.min(42,Math.min(r,i)/4)),o=Math.max(3,Math.min(24,Math.round(r/a))),s=Math.max(3,Math.min(16,Math.round(i/a)));return e===`horizontal`?{columns:Math.max(o,s),rows:s}:{columns:o,rows:Math.max(s,o)}}function Ze(e){return Array.from(e).reduce((e,t)=>e*31+t.charCodeAt(0)>>>0,7)}function Qe(e,t,n){let r=Math.max(...e.map(e=>e.x)),i=Math.max(...e.map(e=>e.y));return r<t&&i<n}function B(e,t){return e.cells.some(n=>t.cells.some(r=>e.x+n.x===t.x+r.x&&e.y+n.y===t.y+r.y))}function $e(e,t,n){let r=Je.filter(e=>Qe(e,t,n));return r[ct(e,r.length)]??[{x:0,y:0}]}function et(e,t,n,r,i,a=0,o=!1){let s=Math.max(...e.map(e=>e.x))+1,c=Math.max(...e.map(e=>e.y))+1,l=[];for(let a=0;a<=r-c;a++)for(let c=0;c<=n-s;c++){let s={id:-1,bornAt:0,cells:e,x:c,y:a,phase:`settled`};if(i.some(e=>B(s,e))||!st(e,t,n,r,s,i))continue;let u=t===`vertical`?e.filter(e=>a+e.y===r-1||i.some(t=>t.cells.some(n=>t.x+n.x===c+e.x&&t.y+n.y===a+e.y+1))).length:e.filter(e=>c+e.x===0||i.some(t=>t.cells.some(n=>t.x+n.x===c+e.x-1&&t.y+n.y===a+e.y))).length;o&&u<ot(e,t)||l.push({x:c,y:a,support:u})}l.sort((e,n)=>n.support-e.support||(t===`vertical`?n.y-e.y||e.x-n.x:e.x-n.x||e.y-n.y));let u=l[0]?.support,d=l.filter(e=>e.support===u),f=d[ct(a,d.length)];return f?{x:f.x,y:f.y}:void 0}function tt(e,t,n,r,i,a){let o=Je.flatMap((o,s)=>{if(!Qe(o,t,n))return[];let c=et(o,e,t,n,r,i+s*31,a);return c?[{shape:o,destination:c}]:[]});if(o.length!==0)return o[ct(i,o.length)]}function nt(e,t,n){return Math.ceil(e*t*qe*Math.min(1,Math.max(0,n)))}function rt(e){return e.reduce((e,t)=>e+t.cells.length,0)}function it(e,t,n,r,i){let a=e===`vertical`?n-1:0,o=new Set(r.flatMap(t=>t.cells.filter(n=>e===`vertical`?t.y+n.y===a:t.x+n.x===a).map(n=>e===`vertical`?t.x+n.x:t.y+n.y))),s=e===`vertical`?t:n,c=o.size===s;if(!c&&!i||o.size===0)return;let l=[];return{shapes:r.flatMap(t=>{let n=t.cells.filter(n=>{let r=e===`vertical`?t.y+n.y===a:t.x+n.x===a;return r&&l.push({x:t.x+n.x,y:t.y+n.y}),!r});return n.length===0?[]:[{...t,cells:n,y:e===`vertical`?t.y+1:t.y,x:e===`horizontal`?t.x-1:t.x}]}),cleared:l,complete:c}}function at(e,t,n,r,i){let a=[];for(let o=0;o<i;o+=1){let i=r+o*17,s=$e(i,t,n),c=et(s,e,t,n,a,i+1);if(!c)break;a.push({id:o,bornAt:0,cells:s,x:c.x,y:c.y,phase:`settled`})}return a}function ot(e,t){return t===`vertical`?new Set(e.map(e=>e.x)).size:new Set(e.map(e=>e.y)).size}function st(e,t,n,r,i,a){let o=Math.max(...e.map(e=>e.x))+1,s=Math.max(...e.map(e=>e.y))+1;if(t===`vertical`){for(let e=0;e<=i.y;e+=1)if(a.some(t=>B({...i,y:e},t)))return!1;return i.y+s<=r}for(let e=n-o;e>=i.x;--e)if(a.some(t=>B({...i,x:e},t)))return!1;return i.x+o<=n}function ct(e,t){if(t<=1)return 0;let n=Math.sin(e*12.9898+78.233)*43758.5453;return Math.floor((n-Math.floor(n))*t)}var lt={variant:`_variant_1lsfm_1`},V={field:`_field_1x3vm_1`,grid:`_grid_1x3vm_10`,piece:`_piece_1x3vm_14`,cell:`_cell_1x3vm_34`,clearingCell:`_clearingCell_1x3vm_38`,"clear-cell":`_clear-cell_1x3vm_1`},ut=50,dt=1250,ft=250,pt=850,mt=500;function ht({progress:e,estimatedDurationMs:t,overdue:r,seed:o=0}){let s=i(null),[c,d]=a({...Xe(`vertical`),direction:`vertical`}),[f,p]=a([]),[m,h]=a(!1),[g,_]=a([]),[v,y]=a(!1),b=i(c),x=i(c),S=i(e),C=i(o),ee=i(void 0),w=i([]),T=i(!1),E=i({startedAt:Date.now(),nextPieceAt:dt,recycleUntil:0,id:0,settled:[]});return n(()=>{S.current=e},[e]),n(()=>{C.current=o},[o]),n(()=>{let e=s.current;if(!e)return;let t=()=>{let t=e.getBoundingClientRect();t.width!==0&&t.height!==0&&d(e=>{let n=ee.current??Ye(t.width,t.height);ee.current=n;let r={...Xe(n,t.width,t.height),direction:n};return b.current=r,r})};if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[]),n(()=>{let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t=()=>y(e.matches);return t(),e.addEventListener?.(`change`,t),()=>e.removeEventListener?.(`change`,t)},[]),n(()=>{let e=x.current,t=e.direction!==c.direction||e.columns!==c.columns||e.rows!==c.rows;x.current=c,!(!t||v)&&(E.current={startedAt:Date.now(),nextPieceAt:dt,id:0,recycleUntil:0,settled:[]},w.current=[],p([]),h(!1),_([]),T.current=!1)},[c,v]),n(()=>{if(!v)return;let e=at(c.direction,c.columns,c.rows,C.current,Math.max(1,Math.floor(S.current*6)));w.current=e,E.current.settled=e,p(e)},[c,v]),n(()=>{if(v)return;let e=window.setInterval(()=>{let e=E.current,n=Date.now()-e.startedAt,i=b.current,a=S.current,o=nt(i.columns,i.rows,a),s=[...e.settled],c=w.current.filter(e=>e.phase!==`settled`);if(n<e.recycleUntil)return;if(T.current&&(T.current=!1,h(!1),_([])),n>=e.nextPieceAt&&c.length===0){if(a<1&&rt(s)>=o)return;let l=e.id,u=C.current+l*17,d=tt(i.direction,i.columns,i.rows,s,u+1,!r);if(!d&&(a>=1||t===void 0)){let t=it(i.direction,i.columns,i.rows,s,!0);if(t){s=t.shapes,e.settled=s,e.recycleUntil=n+mt,e.nextPieceAt=e.recycleUntil,w.current=s,T.current=!0,_(t.cleared),p(s),h(!0);return}}if(d){e.id+=1;let{shape:t,destination:r}=d,a=Math.max(...t.map(e=>e.y))+1;c=[...c,{id:l,bornAt:n,cells:t,x:i.direction===`horizontal`?i.columns-Math.max(...t.map(e=>e.x))-.5:r.x,y:i.direction===`vertical`?-a+.5:r.y,targetX:r.x,targetY:r.y,phase:`entry`}]}e.nextPieceAt+=gt(t,i)}c=c.map(e=>{let t=n-e.bornAt,r=e.targetX===void 0||e.targetY===void 0?void 0:{x:e.targetX,y:e.targetY};if(!r)return e;let a=Math.min(1,Math.max(0,(t-ft)/pt));if(a>=1)return s=[...s,{...e,x:r.x,y:r.y,phase:`settled`}],{...e,x:r.x,y:r.y,phase:`settled`};let o=i.direction===`horizontal`?i.columns-Math.max(...e.cells.map(e=>e.x))-1:r.x,c=i.direction===`vertical`?0:r.y,l=Math.min(1,Math.max(0,t/1100));return{...e,x:i.direction===`horizontal`?o+(r.x-o)*a:o,y:i.direction===`vertical`?c+(r.y-c)*a:c,phase:t<ft?`entry`:l<.35?`align`:`travel`}}),e.settled=s;let l=[...s,...c.filter(e=>e.phase!==`settled`)];w.current=l,p(l)},ut);return()=>window.clearInterval(e)},[t,r,v]),l(`div`,{ref:s,className:V.field,"data-running-part":`falling-shapes-field`,"data-overdue":r||void 0,"data-direction":c.direction,"data-recycling":m||void 0,style:{"--shape-columns":c.columns,"--shape-rows":c.rows},children:u(`div`,{className:V.grid,children:[g.map(e=>l(`span`,{className:V.clearingCell,style:{"--clear-x":e.x,"--clear-y":e.y}},`${e.x}-${e.y}`)),f.map(e=>l(`div`,{className:V.piece,"data-piece":e.id,"data-piece-phase":e.phase,style:{"--piece-x":e.x,"--piece-y":e.y,"--piece-width":Math.max(...e.cells.map(e=>e.x))+1,"--piece-height":Math.max(...e.cells.map(e=>e.y))+1},children:e.cells.map(e=>l(`span`,{className:V.cell,style:{"--cell-x":e.x,"--cell-y":e.y}},`${e.x}-${e.y}`))},e.id))]})})}function gt(e,t){let n=Math.ceil(t.columns*t.rows*.85);return e===void 0||n<=0?dt:Math.max(400,e/Math.max(1,Math.ceil(n/3)))}var H={frontier:`_frontier_rnw91_1`,now:`_now_rnw91_12`,routes:`_routes_rnw91_20`,route:`_route_rnw91_20`,trail:`_trail_rnw91_41`,packet:`_packet_rnw91_42`,"packet-stall":`_packet-stall_rnw91_1`,"trail-backup":`_trail-backup_rnw91_1`};function _t(){return u(c,{children:[l(`span`,{className:H.frontier,"data-running-part":`frontier`}),l(`span`,{className:H.now,"data-running-part":`transit-now`}),l(`span`,{className:H.routes,"data-running-part":`transit-routes`,children:[0,1,2].map(e=>l(`span`,{className:H.route},e))}),l(`span`,{className:H.trail,"data-running-part":`transit-trail`}),l(`span`,{className:H.packet,"data-running-part":`transit-packet`})]})}var U={field:`_field_1i9kx_1`,overdue:`_overdue_1i9kx_11`,timing:`_timing_1i9kx_14`,timingOverdue:`_timingOverdue_1i9kx_28`},W={haze:`_haze_3npie_1`,pressure:`_pressure_3npie_17`,band:`_band_3npie_20`,bandOne:`_bandOne_3npie_33`,bandTwo:`_bandTwo_3npie_36`,bandThree:`_bandThree_3npie_40`,drift:`_drift_3npie_45`,driftOne:`_driftOne_3npie_54`,driftTwo:`_driftTwo_3npie_58`,driftThree:`_driftThree_3npie_67`,driftFour:`_driftFour_3npie_76`,driftFive:`_driftFive_3npie_85`,"storm-band":`_storm-band_3npie_1`};function vt(){return u(c,{children:[l(`span`,{className:W.haze,"data-running-part":`weather-haze`}),l(`span`,{className:W.pressure,"data-running-part":`weather-pressure`}),l(`span`,{className:`${W.band} ${W.bandOne}`}),l(`span`,{className:`${W.band} ${W.bandTwo}`}),l(`span`,{className:`${W.band} ${W.bandThree}`}),l(`span`,{className:`${W.drift} ${W.driftOne}`}),l(`span`,{className:`${W.drift} ${W.driftTwo}`}),l(`span`,{className:`${W.drift} ${W.driftThree}`}),l(`span`,{className:`${W.drift} ${W.driftFour}`}),l(`span`,{className:`${W.drift} ${W.driftFive}`})]})}var yt={anchor:`_anchor_1bd86_1`,body:`_body_1bd86_6`,"phased-marker":`_phased-marker_1bd86_1`};function bt({anchorClassName:e,bodyClassName:t,delay:n,anchorPart:r,bodyPart:i}){let a=n?{"--phased-marker-delay":n}:void 0;return l(`span`,{className:`${yt.anchor} ${e??``}`,"data-running-part":r,children:l(`span`,{className:`${yt.body} ${t??``}`,"data-running-part":i,style:a})})}var G={frontier:`_frontier_2wwhn_1`,flare:`_flare_2wwhn_12`,lanes:`_lanes_2wwhn_15`,lane:`_lane_2wwhn_15`,markerAnchor:`_markerAnchor_2wwhn_31`,markerBody:`_markerBody_2wwhn_35`,"bloom-flare":`_bloom-flare_2wwhn_1`};function xt(){return u(c,{children:[l(`span`,{className:G.frontier,"data-running-part":`frontier`}),l(`span`,{className:G.flare,"data-running-part":`bloom-flare`}),l(`span`,{className:G.lanes,"data-running-part":`bloom-lanes`,children:[0,1,2,3].map(e=>l(`span`,{className:G.lane,"data-running-part":`bloom-lane`,children:l(bt,{anchorClassName:G.markerAnchor,bodyClassName:G.markerBody,delay:[void 0,`-0.8s`,`-1.7s`,`-2.4s`][e],anchorPart:`bloom-marker-anchor`,bodyPart:`bloom-marker`})},e))})]})}function St(e){return[`telemetry-bloom`,`release-transit`,`status-weather`,`falling-shapes`].includes(e)}function Ct({animation:e,progress:t,estimatedDurationMs:n,overdue:r,indeterminate:i,seed:a}){let o={"--running-progress":`${t*100}%`};return u(`div`,{className:`${U.field} ${r?U.overdue:``}`,"data-animation":e,"data-running-field":!0,"data-overdue":r||void 0,"data-indeterminate":i||void 0,"aria-hidden":`true`,style:o,children:[e===`telemetry-bloom`&&l(xt,{}),e===`release-transit`&&l(_t,{}),e===`status-weather`&&l(vt,{}),e===`falling-shapes`&&l(ht,{progress:t,estimatedDurationMs:n,overdue:r,seed:a})]})}var wt=20;function Tt(e,t){let n=Et(!!e),r=e?new Date(e).valueOf():NaN,i=Number.isFinite(r)?Math.max(0,n-r):void 0,a=i!==void 0&&t!==void 0;return{elapsedMs:i,estimatedDurationMs:t,hasEstimate:a,overdue:a&&i>t,progress:a?Math.min(i/t,1):0}}function Et(e){let[t,r]=a(()=>Date.now());return n(()=>{if(!e)return;r(Date.now());let t=window.setInterval(()=>r(Date.now()),wt);return()=>window.clearInterval(t)},[e]),t}function Dt(e,t,n){return`${e===void 0?`Run in progress`:`Elapsed ${kt(e)}`} · ${t===void 0?`Expected duration unavailable`:`Expected ≈ ${kt(t)}`}${n?` · Over estimate`:``}`}function Ot(e,t,n){let r=e===void 0?`—`:At(e),i=t===void 0?`?`:`~${At(t)}`;return`${n?`⚠`:`\xA0`}${r}/${i}`}function kt(e){let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${i}s`:`${i}s`}function At(e){let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=`${r}:${String(i).padStart(2,`0`)}`;return n>0?`${n}:${a.padStart(5,`0`)}`:a}function jt({elapsedMs:e,estimatedDurationMs:t,overdue:n}){return u(`p`,{className:`${U.timing} ${n?U.timingOverdue:``}`,children:[l(`span`,{className:`screen-reader-only`,children:Dt(e,t,n)}),l(`span`,{"aria-hidden":`true`,children:Ot(e,t,n)})]})}var K={progress:`_progress_1x79l_1`,visual:`_visual_1x79l_8`,timing:`_timing_1x79l_12`,overdue:`_overdue_1x79l_17`,readout:`_readout_1x79l_23`,radial:`_radial_1x79l_31`,sweep:`_sweep_1x79l_1`,"alarm-ring":`_alarm-ring_1x79l_1`,radialCore:`_radialCore_1x79l_58`,"reactor-breathe":`_reactor-breathe_1x79l_1`,runway:`_runway_1x79l_70`,"barrier-pulse":`_barrier-pulse_1x79l_1`,spark:`_spark_1x79l_114`,sparkTwo:`_sparkTwo_1x79l_128`,orbit:`_orbit_1x79l_135`,orbitCore:`_orbitCore_1x79l_151`,particle:`_particle_1x79l_163`,particleTwo:`_particleTwo_1x79l_174`,"gravity-well":`_gravity-well_1x79l_1`,indeterminate:`_indeterminate_1x79l_191`,shift:`_shift_1x79l_1`,signalField:`_signalField_1x79l_199`,rail:`_rail_1x79l_217`,lead:`_lead_1x79l_223`,pulse:`_pulse_1x79l_233`,pulseTwo:`_pulseTwo_1x79l_244`,tracks:`_tracks_1x79l_247`,sparkWide:`_sparkWide_1x79l_1`,track:`_track_1x79l_247`,markerAnchor:`_markerAnchor_1x79l_371`,markerBody:`_markerBody_1x79l_375`,"endpoint-pulse":`_endpoint-pulse_1x79l_1`,short:`_short_1x79l_413`};function Mt({animation:e,timing:t}){let{elapsedMs:n,estimatedDurationMs:r,hasEstimate:i,overdue:a,progress:o}=t,s=e===`runway`||e===`signal-field`,d=Dt(n,r,a),f={"--running-progress":`${o*100}%`,"--running-degrees":`${o*360}deg`},p=e===`signal-field`?K.signalField:K[e];return u(`div`,{className:`${K.progress} ${p} ${a?K.overdue:``} ${i?``:K.indeterminate}`,style:f,"data-running-progress":e,"data-overdue":a||void 0,"data-indeterminate":!i||void 0,children:[u(`div`,{className:K.visual,"aria-hidden":`true`,"data-running-visual":!0,children:[e===`radial`&&l(`span`,{className:K.radialCore}),e===`runway`&&u(c,{children:[l(`span`,{className:K.spark,"data-running-part":`runway-spark`}),l(`span`,{className:`${K.spark} ${K.sparkTwo}`,"data-running-part":`runway-spark-two`})]}),e===`orbit`&&u(c,{children:[l(`span`,{className:K.orbitCore}),l(`span`,{className:K.particle}),l(`span`,{className:`${K.particle} ${K.particleTwo}`})]}),e===`signal-field`&&u(c,{children:[l(`span`,{className:K.rail}),l(`span`,{className:K.lead}),l(`span`,{className:K.pulse}),l(`span`,{className:`${K.pulse} ${K.pulseTwo}`}),l(`span`,{className:K.tracks,"data-running-part":`signal-tracks`,children:[0,1,2,3,4].map(e=>l(`span`,{className:K.track,"data-running-part":`signal-track`,children:l(bt,{anchorClassName:K.markerAnchor,bodyClassName:K.markerBody,delay:[void 0,`-0.8s`,`-1.7s`,`-2.4s`,`-0.35s`][e],anchorPart:`signal-marker-anchor`,bodyPart:`signal-marker`})},e))})]})]}),l(`p`,{className:`${K.timing} ${s?K.readout:``}`,children:s?u(c,{children:[l(`span`,{className:`screen-reader-only`,children:d}),l(`span`,{"aria-hidden":`true`,children:Ot(n,r,a)})]}):d})]})}function Nt(e){return[`radial`,`runway`,`orbit`,`signal-field`].includes(e)}var Pt=2e4,Ft=15e3,It=3e5,Lt=1.25,Rt=[`radial`,`runway`,`orbit`,`signal-field`,`telemetry-bloom`,`release-transit`,`status-weather`,`falling-shapes`];function zt({panel:e}){let t=Ht(),n=e.running_animation===void 0||e.running_animation===`off`?void 0:e.running_animation,r=Bt(e.demo_run_duration,Pt),i=Bt(e.demo_review_duration,It),a=n?Math.ceil(i*Lt):r,o=Math.floor(t/a),s=n??Rt[o%Rt.length]??`radial`,c=o*a;return l(Vt,{panel:e,animation:s,runStartedAt:c,estimatedDurationMs:n?i:Ft})}function Bt(e,t){return e?p(e)??t:t}function Vt({panel:e,animation:t,runStartedAt:n,estimatedDurationMs:r}){let i=Tt(new Date(n).toISOString(),r),a=St(t);return u(R,{panel:e,field:a?l(Ct,{animation:t,progress:i.progress,estimatedDurationMs:i.estimatedDurationMs,overdue:i.overdue,indeterminate:!i.hasEstimate,seed:Ze(e.id)},`${t}-${n}`):void 0,children:[l(L,{status:`running`,children:`↻ Running`}),u(`p`,{className:lt.variant,children:[`Demo treatment · `,t]}),a?l(jt,{elapsedMs:i.elapsedMs,estimatedDurationMs:r,overdue:i.overdue}):l(Mt,{animation:t,timing:i})]})}function Ht(){let[e,t]=a(()=>Date.now());return n(()=>{let e=window.setInterval(()=>t(Date.now()),1e3);return()=>window.clearInterval(e)},[]),e}var q={details:`_details_19avj_1`,activity:`_activity_19avj_7`,duration:`_duration_19avj_8`};function Ut(e,t=`Passed`){switch(e){case`passed`:return{glyph:`✓`,label:t};case`failed`:return{glyph:`✕`,label:`Failed`};case`running`:return{glyph:`↻`,label:`Running`};case`cancelled`:return{glyph:`⊘`,label:`Cancelled`};case`unknown`:return{glyph:`?`,label:`Unknown`}}}function Wt(e){return e?e.parent?`${e.parent} › ${e.name}`:e.name:`Activity unavailable`}function Gt({panel:e,envelope:t,updateHealth:n}){if(!t)return l(R,{panel:e,children:l(F,{children:`Loading…`})});if(t.state===`error`){let n=Re(t.error.kind);return u(R,{panel:e,envelope:t,error:!0,children:[u(L,{emphasis:n.emphasis,children:[`⚠ `,n.label]}),l(F,{children:t.error.message})]})}let r=D.safeParse(t.signal);return r.success?l(Kt,{panel:e,envelope:t,signal:r.data,updateHealth:n}):l(R,{panel:e,envelope:t,error:!0,children:l(L,{children:`⚠ Invalid signal`})})}function Kt({panel:e,envelope:t,signal:n,updateHealth:r}){let o=Ut(n.status),[s,c]=a(()=>n.status===`running`?qt():void 0),d=i(n.status);if(n.status!==d.current){let t=d.current===`running`;d.current=n.status,e.running_animation===void 0&&!t&&n.status===`running`&&c(e=>qt(e))}let f=e.running_animation??s??`off`,p=n.status===`running`&&f!==`off`,m=Tt(n.runStartedAt,n.estimatedDurationMs),h=p&&St(f),g=p&&Nt(f);return l(R,{panel:e,envelope:t,field:h?l(Ct,{animation:f,progress:m.progress,estimatedDurationMs:m.estimatedDurationMs,overdue:m.overdue,indeterminate:!m.hasEstimate,seed:Ze(e.id)}):void 0,children:u(`div`,{className:q.details,children:[u(L,{status:n.status,children:[o.glyph,` `,o.label]}),n.status===`running`&&l(I,{glyph:`⚙`,label:`Activity`,value:Wt(n.activity),title:`Activity: ${Wt(n.activity)}`,className:q.activity}),n.branch&&l(I,{glyph:`⎇`,label:`Branch`,value:l(`span`,{className:q.branch,children:n.branch}),title:`Branch: ${n.branch}`}),h&&l(jt,{elapsedMs:m.elapsedMs,estimatedDurationMs:n.estimatedDurationMs,overdue:m.overdue}),g&&l(Mt,{animation:f,timing:m}),n.status!==`running`&&n.durationMs!==void 0&&l(I,{glyph:`◷`,label:`Duration`,value:`Took ${Jt(n.durationMs)}`,title:`Duration: Took ${Jt(n.durationMs)}`,className:q.duration}),l(Ue,{sourceUpdatedAt:n.sourceUpdatedAt,observedAt:t.observedAt,running:n.status===`running`,runStartedAt:n.runStartedAt}),r&&l(We,{health:r})]})})}function qt(e){let t=_.filter(t=>t!==e);return t[Math.floor(Math.random()*t.length)]??`telemetry-bloom`}function Jt(e){let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60;return n>0?`${n}h ${r}m`:r>0?`${r}m ${i}s`:`${i}s`}var J={compactFacts:`_compactFacts_f62xm_1`,incomplete:`_incomplete_f62xm_8`,compactFact:`_compactFact_f62xm_1`,failedItem:`_failedItem_f62xm_19`,evidence:`_evidence_f62xm_27`,freshness:`_freshness_f62xm_28`,statusAnchor:`_statusAnchor_f62xm_36`,fullSummary:`_fullSummary_f62xm_44`};function Y(e,t,n=`${t}s`){return`${e} ${e===1?t:n}`}function Yt(e){let t=[...e.workflows,...e.pullRequests].find(e=>e.status===`failed`);return t?{workflow:Y(e.workflows.length,`workflow`),pullRequests:Y(e.pullRequests.length,`open PR`),primary:`${t.label} failed`,secondary:`${Y(e.workflows.length,`workflow`)} · ${Y(e.pullRequests.length,`open PR`)}`,primaryDetail:t.detail,title:`${e.summary} — ${t.label}: ${t.detail}`}:{workflow:Y(e.workflows.length,`workflow`),pullRequests:Y(e.pullRequests.length,`open PR`),primary:Y(e.workflows.length,`workflow`),secondary:Y(e.pullRequests.length,`open PR`),title:e.summary}}function Xt({panel:e,envelope:t,updateHealth:n}){if(!t)return l(R,{panel:e,children:l(F,{children:`Loading…`})});if(t.state===`error`){let n=Re(t.error.kind);return u(R,{panel:e,envelope:t,error:!0,children:[u(L,{emphasis:n.emphasis,children:[`⚠ `,n.label]}),l(F,{children:t.error.message})]})}let r=se.safeParse(t.signal);if(!r.success)return l(R,{panel:e,envelope:t,error:!0,children:l(L,{children:`⚠ Invalid signal`})});let i=Ut(r.data.status,`Healthy`),a=Yt(r.data);return u(R,{panel:e,envelope:t,layout:`three-anchor`,children:[l(`div`,{className:J.statusAnchor,"data-panel-anchor":`status`,children:u(L,{status:r.data.status,children:[i.glyph,` `,i.label]})}),u(`div`,{className:J.evidence,"data-panel-anchor":`evidence`,children:[l(F,{className:J.fullSummary,title:r.data.summary,children:r.data.summary}),u(`div`,{className:J.compactFacts,title:a.title,"data-compact-facts":!0,children:[a.primaryDetail&&u(`p`,{className:J.failedItem,title:a.primaryDetail,children:[l(`span`,{"aria-hidden":`true`,children:`⚠`}),` `,l(`span`,{className:`screen-reader-only`,children:`Failed item: `}),a.primary,u(`span`,{className:`screen-reader-only`,children:[`. Detail: `,a.primaryDetail]})]}),l(I,{glyph:`⚙`,label:`Update workflows`,value:a.workflow,title:`Update workflows: ${a.workflow}`,className:J.compactFact}),l(I,{glyph:`⎇`,label:`Open update pull requests`,value:a.pullRequests,title:`Open update pull requests: ${a.pullRequests}`,className:J.compactFact})]}),u(`div`,{className:J.freshness,children:[l(He,{value:t.observedAt,label:`Observed (oldest evidence)`}),r.data.newestObservedAt&&u(`span`,{className:`screen-reader-only`,children:[`Newest evidence observed `,r.data.newestObservedAt,`.`]}),n&&l(We,{health:n})]}),r.data.incompleteObservations&&l(`div`,{role:`status`,children:u(F,{className:J.incomplete,children:[`⚠ Incomplete observations:`,` `,r.data.incompleteObservations.map(({label:e,message:t})=>`${e}: ${t}`).join(` · `)]})})]})]})}var Zt={"pipeline-status":Gt,"pull-request-health":Xt,"http-value":Ke,"pipeline-animation-demo":zt};function Qt({panel:e,envelope:t,updateHealth:n}){let r=Zt[e.type];return r?l(r,{panel:e,envelope:t,updateHealth:n}):l(Le,{label:e.type,hint:`Not wired yet`,wide:!0})}var $t=6e4,en=1e4,tn=()=>globalThis.window.location.reload();function nn({env:e,diagnostics:t,fetcher:r,reload:i=tn}){n(()=>{let n=!1,a=!1,o,s=`${e.proxyPath}/client`,c=async()=>{if(n||a)return;a=!0;let l=new AbortController;o=l;let u=globalThis.setTimeout(()=>l.abort(),en);t.record({kind:`client-update-check`,path:s});try{let a=await(r??globalThis.fetch)(s,{cache:`no-store`,signal:l.signal});if(!a.ok)throw Error(`Client identity returned ${a.status}`);let o=te.safeParse(await a.json());if(!o.success)throw Error(`Client identity response was invalid`);if(n)return;o.data.assetPath!==e.assetPath&&(t.record({kind:`client-update-detected`,path:s,current:{assetPath:e.assetPath},next:o.data}),i())}catch(e){!n&&!(e instanceof DOMException&&e.name===`AbortError`)&&t.record({kind:`client-update-failure`,path:s,message:e instanceof Error?e.message:String(e)})}finally{globalThis.clearTimeout(u),a=!1,o===l&&(o=void 0),n||globalThis.setTimeout(()=>void c(),$t)}};return c(),()=>{n=!0,o?.abort()}},[t,e.assetPath,e.proxyPath,r,i])}function X(e,t){if(t.state===`error`)return{state:t.state,link:t.link};if(e.type===`pipeline-status`){let e=D.safeParse(t.signal);return{state:t.state,status:e.success?e.data.status:void 0,link:t.link}}if(e.type===`pull-request-health`){let e=se.safeParse(t.signal);return{state:t.state,status:e.success?e.data.status:void 0,link:t.link}}return{state:t.state,link:t.link}}function rn(e,t,n){if(!e)return!0;let r=X(t,e),i=X(t,n);return r.state!==i.state||r.status!==i.status||r.link!==i.link}var an=`ze-great-dashboard.panel-memory.v1`,on=1,sn=12096e5,cn=class{now;histories;storage;constructor(e=xe(),t=()=>new Date){this.now=t,this.storage=e,this.histories=this.read(),this.pruneAll()}latest(e){return this.history(e).latest}rememberLatest(e,t){this.history(e).latest=t,this.persist()}recordRun(e,t,n=!1){let r=this.history(e);n&&(r.durations[ln(t)]=t);let i=r.latestCompleted;(!i||un(t.sourceUpdatedAt,i.sourceUpdatedAt))&&(r.latestCompleted=t),this.pruneHistory(r),this.persist()}recordSuccessfulRun(e,t){this.recordRun(e,t,!0)}recordCompletedRun(e,t){this.recordRun(e,t)}medianDuration(e){let t=this.history(e);this.pruneHistory(t);let n=Object.values(t.durations).map(({durationMs:e})=>e).sort((e,t)=>e-t);if(n.length===0)return;let r=Math.floor(n.length/2);if(n.length%2==1)return n[r];let i=n[r-1],a=n[r];return i===void 0||a===void 0?void 0:Math.floor((i+a)/2)}resolveEstimatedDuration(e){let t=this.medianDuration(e);if(t!==void 0)return t;let n=this.history(e);return this.pruneHistory(n),n.latestCompleted?.durationMs}history(e){let t=fn(e),n=this.histories[t];if(n)return n;let r={durations:{}};return this.histories[t]=r,r}pruneAll(){for(let e of Object.values(this.histories))this.pruneHistory(e);this.persist()}pruneHistory(e){let t=this.now().valueOf()-sn;for(let[n,r]of Object.entries(e.durations)){let i=Z(r.sourceUpdatedAt);(i===void 0||i<t)&&delete e.durations[n]}let n=e.latestCompleted?Z(e.latestCompleted.sourceUpdatedAt):void 0;e.latestCompleted&&(n===void 0||n<t)&&delete e.latestCompleted}read(){let e=Se(this.storage,an);return e?.schemaVersion!==on||!e.histories?{}:pn(e.histories)?e.histories:{}}persist(){Ce(this.storage,an,{schemaVersion:on,histories:this.histories})}};function ln(e){return e.sourceRunId??e.link??e.sourceUpdatedAt}function un(e,t){let n=Z(e),r=Z(t);return n!==void 0&&(r===void 0||n>=r)}function Z(e){let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function dn(e,t){return{board:e,panelId:t.id,source:t.source??``,workflow:typeof t.pipeline==`string`||typeof t.pipeline==`number`?String(t.pipeline):``,branch:t.branch??``}}function fn(e){return JSON.stringify([e.board,e.panelId,e.source,e.workflow,e.branch])}function pn(e){return Q(e)?Object.values(e).every(mn):!1}function mn(e){return!Q(e)||!Q(e.durations)||!Object.values(e.durations).every(hn)?!1:e.latestCompleted===void 0||hn(e.latestCompleted)}function hn(e){return Q(e)?(typeof e.link==`string`||e.link===null)&&(e.sourceRunId===void 0||typeof e.sourceRunId==`string`)&&typeof e.durationMs==`number`&&Number.isInteger(e.durationMs)&&e.durationMs>=0&&typeof e.sourceUpdatedAt==`string`&&Z(e.sourceUpdatedAt)!==void 0:!1}function Q(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function gn(e){let t=_n(e.envelope);if(!t)return{kind:`not-pipeline`,envelope:e.envelope};if(e.accepted&&t.sourceUpdatedAt&&Date.parse(t.sourceUpdatedAt)<Date.parse(e.accepted.sourceUpdatedAt))return e.envelope.state!==`ok`||!t.sourceUpdatedAt?{kind:`not-pipeline`,envelope:e.envelope}:{kind:`rejected`,envelope:e.envelope,signal:{...t,sourceUpdatedAt:t.sourceUpdatedAt}};let n=t.sourceUpdatedAt?{sourceUpdatedAt:t.sourceUpdatedAt,status:t.status,link:e.envelope.link}:void 0,r=t.status!==`running`&&t.durationMs!==void 0&&t.sourceUpdatedAt&&Number.isFinite(Date.parse(t.sourceUpdatedAt))?{link:e.envelope.link,...t.sourceRunId?{sourceRunId:t.sourceRunId}:{},durationMs:t.durationMs,sourceUpdatedAt:t.sourceUpdatedAt}:void 0;return{kind:`accepted`,envelope:t.status===`running`&&e.estimatedDurationMs!==void 0&&e.envelope.state===`ok`?{...e.envelope,signal:{...t,estimatedDurationMs:e.estimatedDurationMs}}:e.envelope,signal:t,accepted:n,durationSample:r}}function _n(e){if(e.state!==`ok`)return;let t=D.safeParse(e.signal);return t.success?t.data:void 0}function vn(e,t,n){let r=yn(e);if(!r)return n.refreshMillis;let i=bn(r);return i===void 0?n.runningRefreshMillis:t<i?Math.min(n.runningRefreshMillis,i-t):t<i+n.runningCompletionWindowMillis?n.runningCompletionRefreshMillis:n.runningRefreshMillis}function yn(e){if(e?.state!==`ok`)return;let t=D.safeParse(e.signal);return t.success&&t.data.status===`running`?t.data:void 0}function bn(e){if(!e.runStartedAt||e.estimatedDurationMs===void 0)return;let t=Date.parse(e.runStartedAt);return Number.isFinite(t)?t+e.estimatedDurationMs:void 0}function xn(e){let t=[],n=e.workflows.map(({workflow:e,observation:n})=>{let r=Cn(n.envelope,`pull-request-workflow`);if(r)return r.item;let i=n.error??`No usable observation is available.`;return t.push({label:`Update workflow ${e}`,message:i}),{label:e,status:`unknown`,detail:`Update workflow ${e} · Unavailable: ${i}`,link:null}}),r=wn(e.candidates.envelope);if(!r){let r=e.candidates.error??`No usable observation is available.`;return t.push({label:`Open update PR candidates`,message:r}),n.every(e=>e.status===`unknown`)?void 0:Sn(e,n,[],t,Tn(e.workflows.map(({observation:e})=>e)))}return r.truncated&&t.push({label:`Open update PR candidates`,message:`The first 100 candidates were observed; additional open update PRs may exist.`}),Sn(e,n,r.pullRequests.map(n=>{let r=e.builds.get(n.branch),i=Cn(r?.envelope,`pull-request-build`);if(i)return{...i.item,label:`PR #${n.number}`,detail:i.item.detail,link:n.link};let a=r?.error??`No usable observation is available.`;return t.push({label:`PR #${n.number}`,message:a}),{label:`PR #${n.number}`,status:`unknown`,detail:`${n.branch} · Unavailable: ${a}`,link:n.link}}),t,Tn([...e.workflows.map(({observation:e})=>e),e.candidates,...e.builds.values()]))}function Sn(e,t,n,r,i){let a=En([...t,...n].map(e=>e.status)),o=[...t,...n].find(e=>e.status===a),s=a!==`passed`&&o?`${o.label}: ${o.detail}`:n.length===0?`${t.length} update workflow${t.length===1?``:`s`} · No open update PRs`:`${t.length} update workflow${t.length===1?``:`s`} · ${n.length} open update PR${n.length===1?``:`s`}`,c=i.sort();return{panelId:e.panelId,state:`ok`,observedAt:c[0]??new Date().toISOString(),link:e.link,signal:{type:`pull-request-health`,status:a,summary:s,workflows:t,pullRequests:n,...r.length?{incompleteObservations:r}:{},...c.length>1?{newestObservedAt:c.at(-1)}:{}}}}function Cn(e,t){if(e?.state!==`ok`)return;let n=(t===`pull-request-workflow`?ue:de).safeParse(e.signal);return n.success?{item:n.data.item}:void 0}function wn(e){if(e?.state!==`ok`)return;let t=le.safeParse(e.signal);return t.success?t.data:void 0}function Tn(e){return e.flatMap(({envelope:e})=>e?.state===`ok`?[e.observedAt]:[])}function En(e){return e.some(e=>e===`failed`)?`failed`:e.some(e=>e===`running`)?`running`:e.some(e=>e===`unknown`)?`unknown`:e.some(e=>e===`cancelled`)?`cancelled`:`passed`}function Dn({board:e,env:t,diagnostics:r,memory:o}){let[s,c]=a({}),[l,u]=a({}),d=i({}),f=i(null);return f.current||=o??new cn,n(()=>{if(d.current={},c({}),u({}),!e)return;let n=!1,i=new Set,a=new Set;for(let o of e.panels){if(k(o.position)||o.type!==`pipeline-status`&&o.type!==`pull-request-health`&&o.type!==`http-value`)continue;let s=!1,l=f.current;if(!l)return;let p=ve(e,o),m=`${t.proxyPath}/panel/${encodeURIComponent(t.board)}/${encodeURIComponent(o.id)}`,h,g,_=()=>{g=new Date().toISOString(),n||u(e=>{if(!e[o.id])return e;let t={...e};return delete t[o.id],t})},v=e=>{let t=g;if(n||!t)return;let r=$(e);u(e=>{let n=e[o.id];return{...e,[o.id]:{consecutiveFailures:(n?.consecutiveFailures??0)+1,message:r,lastConfirmedAt:t}}})};if(o.type===`pull-request-health`){let e=On(o),t=new Map,l,u=async e=>{r.record({kind:`panel-fetch-start`,panelId:o.id,path:e});try{let n=await fetch(e,{signal:l?.signal}),i={kind:`panel-fetch-response`,panelId:o.id,path:e,status:n.status,cache:Me(n.headers)};if(n.status===304){r.record(i);let n=t.get(e);return n?{envelope:n}:{error:`Source returned not modified before an initial observation.`}}let a=jn(await n.json());return r.record({...i,...a?{envelope:a}:{}}),a?a.state===`error`?{error:a.error.message}:(t.set(e,a),{envelope:a}):{error:`Response was not a valid signal envelope.`}}catch(t){return l?.signal.aborted?{error:`Observation cancelled.`}:(r.record({kind:`panel-fetch-failure`,panelId:o.id,path:e,message:$(t)}),{error:$(t)})}},f=async()=>{if(n||s)return;s=!0,l=new AbortController,a.add(l);let t=m,[g,...y]=await Promise.all([u(`${t}/pull-requests`),...e.map(({workflow:e})=>u(`${t}/update-workflow/${encodeURIComponent(e)}`))]),b=g.envelope?.state===`ok`&&kn(g.envelope.signal)?g.envelope.signal.pullRequests:[];if(n||l.signal.aborted){a.delete(l);return}let x=await Promise.all(b.map(async e=>[e.branch,await u(`${t}/pull-request-build?branch=${encodeURIComponent(e.branch)}`)])),S=xn({panelId:o.id,link:g.envelope?.link??null,workflows:e.map(({workflow:e},t)=>({workflow:e,observation:y[t]??{error:`Missing workflow result.`}})),candidates:g,builds:new Map(x)});if(n||l.signal.aborted){a.delete(l);return}if(S&&!n){h=S,_();let e=d.current[o.id];rn(e,o,S)&&r.record({kind:`panel-rendered`,panelId:o.id,path:m,rendered:X(o,S)}),d.current={...d.current,[o.id]:S},c(d.current)}else n||v(`No usable pull-request observations.`);if(s=!1,a.delete(l),!n){let e=window.setTimeout(()=>{i.delete(e),f()},vn(h,Date.now(),p));i.add(e)}};f();continue}let y=()=>{n||s||(s=!0,r.record({kind:`panel-fetch-start`,panelId:o.id,path:m}),fetch(m).then(async e=>{let t={kind:`panel-fetch-response`,panelId:o.id,path:m,status:e.status,cache:Me(e.headers)};if(e.status===304){r.record(t),_();return}try{let n=jn(await e.json());if(!n){r.record(t),r.record({kind:`panel-fetch-parse-failure`,panelId:o.id,path:m,message:`Response was not a valid signal envelope.`}),v(`Response was not a valid signal envelope.`);return}return r.record({...t,envelope:n}),_(),{envelope:n,cache:t.cache,status:e.status}}catch(e){throw r.record(t),r.record({kind:`panel-fetch-parse-failure`,panelId:o.id,path:m,message:$(e)}),new An(e)}}).then(e=>{if(!e)return;let i=e.envelope;if(o.type===`pipeline-status`){let n=dn(t.board,o),a=l.latest(n),s=gn({envelope:i,accepted:a,estimatedDurationMs:l.resolveEstimatedDuration(n)});if(s.kind===`rejected`&&a){let t=s.signal;r.recordGithubConsistencyIncident({panelId:o.id,endpoint:m,identity:{source:n.source,workflow:n.workflow,branch:n.branch},accepted:a,regressed:{sourceUpdatedAt:t.sourceUpdatedAt,status:t.status,link:i.link},response:{httpStatus:e.status,date:e.cache?.date,etag:e.cache?.etag,cacheControl:e.cache?.cacheControl}});return}if(s.kind===`accepted`&&(i=s.envelope,s.accepted&&l.rememberLatest(n,s.accepted),s.durationSample)){let e={link:s.durationSample.link,...s.durationSample.sourceRunId?{sourceRunId:s.durationSample.sourceRunId}:{},durationMs:s.durationSample.durationMs,sourceUpdatedAt:s.durationSample.sourceUpdatedAt};l.recordRun(n,e,s.signal.status===`passed`)}}if(h=i,!n){let e=d.current[o.id];rn(e,o,i)&&r.record({kind:`panel-rendered`,panelId:o.id,path:m,rendered:X(o,i)}),d.current={...d.current,[o.id]:i},c(d.current)}}).catch(e=>{v(e),e instanceof An||r.record({kind:`panel-fetch-failure`,panelId:o.id,path:m,message:$(e)})}).finally(()=>{if(s=!1,!n){let e=window.setTimeout(()=>{i.delete(e),y()},vn(h,Date.now(),p));i.add(e)}}))};y()}return()=>{n=!0;for(let e of a)e.abort();for(let e of i)window.clearTimeout(e)}},[e,r,t.board,t.proxyPath]),{signals:s,updateHealth:l}}function On(e){let t=e.update_workflows;return Array.isArray(t)?t.flatMap(e=>typeof e==`object`&&e&&typeof e.workflow==`string`?[{workflow:e.workflow}]:[]):[]}function kn(e){return typeof e==`object`&&!!e&&e.type===`pull-request-candidates`&&Array.isArray(e.pullRequests)}function $(e){return e instanceof Error?e.message:String(e)}var An=class extends Error{constructor(e){super($(e))}};function jn(e){let t=ae.safeParse(e);return t.success?t.data:void 0}function Mn({env:e}){let[t,o]=a(),[s,c]=a(),d=i(null);d.current||=new Ae(e);let f=d.current;nn({env:e,diagnostics:f});let{signals:p,updateHealth:m}=Dn({board:s===e.board?t:void 0,env:e,diagnostics:f}),h=r(()=>t?he(t.panels):void 0,[t]);return n(()=>{!h||h.issues.length===0||f.record({kind:`layout-analyzed`,issueCount:h.issues.length,affectedPanelIds:h.issues.map(e=>e.panelId)})},[f,h]),n(()=>{let t=!1;o(void 0),c(void 0);let n=`${e.proxyPath}/boards/${encodeURIComponent(e.board)}`;return f.record({kind:`board-fetch-start`,path:n}),fetch(n).then(async e=>{if(f.record({kind:`board-fetch-response`,path:n,status:e.status,cache:Me(e.headers)}),!e.ok)throw Error(`Board configuration returned ${e.status}`);try{return await e.json()}catch(e){throw f.record({kind:`board-fetch-parse-failure`,path:n,message:Pn(e)}),new Fn(e)}}).then(r=>{if(!t){o(r),c(e.board);let t=Array.isArray(r.panels)?r.panels:[];f.record({kind:`board-fetch-response`,path:n,boardSummary:{panelCount:t.length,panelIds:t.flatMap(e=>typeof e.id==`string`?[e.id]:[])}})}}).catch(r=>{r instanceof Fn||f.record({kind:`board-fetch-failure`,path:n,message:Pn(r)}),t||(o({panels:[]}),c(e.board))}),()=>{t=!0}},[f,e.board,e.proxyPath]),u(`div`,{className:j.board,children:[l(`header`,{className:j.header,children:l(`h1`,{className:j.title,children:e.board})}),u(`main`,{className:j.grid,children:[!t&&l(Le,{label:`board`,hint:`Loading configuration…`,wide:!0}),t?.panels.filter(e=>!k(e.position)).map(e=>l(Qt,{panel:e,envelope:p[e.id],updateHealth:m[e.id]},e.id))]}),u(`footer`,{className:j.footer,"data-board-footer":!0,children:[l(`span`,{children:`Signals are read live from their configured authorities.`}),u(`div`,{className:j.footerTools,children:[h&&h.issues.length>0&&l(Nn,{board:e.board,layout:h,proxyPath:e.proxyPath}),l(ye,{log:f})]})]})]})}function Nn({board:e,layout:t,proxyPath:r}){let[i,o]=a(!1),s=`layout-warning-${e}`;n(()=>{if(!i)return;let e=e=>{e.key===`Escape`&&o(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[i]);let c=`${r}/boards/${encodeURIComponent(e)}`;return u(`div`,{className:j.layoutWarning,"data-layout-warning":!0,children:[u(`button`,{className:j.layoutWarningButton,type:`button`,"aria-label":`Layout warnings (${t.issues.length})`,"aria-expanded":i,"aria-controls":s,onClick:()=>o(!i),children:[l(`span`,{"aria-hidden":`true`,children:`⚠`}),l(`span`,{children:t.issues.length})]}),i&&u(`aside`,{className:j.layoutWarningDialog,id:s,role:`dialog`,"aria-labelledby":`${s}-title`,"aria-modal":`false`,children:[u(`div`,{className:j.layoutWarningHeading,children:[l(`strong`,{id:`${s}-title`,children:`Layout warnings`}),l(`button`,{className:j.layoutWarningClose,type:`button`,"aria-label":`Close layout warnings`,onClick:()=>o(!1),children:`×`})]}),u(`p`,{children:[t.issues.length,` layout issue`,t.issues.length===1?``:`s`,` detected against the intended 12×12 space. The live board is unchanged: explicit overlaps remain overlapped and overflow continues in implicit rows.`]}),l(`ul`,{children:t.issues.map(e=>u(`li`,{children:[l(`strong`,{children:e.panelId}),`: `,e.kind,` at (`,e.position.x,`,`,` `,e.position.y,`), `,e.position.w,`×`,e.position.h,e.conflictsWith.length?`; overlaps ${e.conflictsWith.join(`, `)}`:``]},`${e.panelId}-${e.kind}`))}),u(`div`,{className:j.layoutWarningDownloads,children:[l(`a`,{href:`${c}/rendered`,download:`${e}-layout-rendered.yaml`,children:`Download legal rendered layout`}),l(`a`,{href:`${c}/authored`,download:`${e}-layout-authored.yaml`,children:`Download authored layout`})]}),l(`p`,{className:j.layoutWarningNote,children:`The legal rendered layout normalizes the currently visible explicit area into 12×12 and makes the smallest deterministic adjustments needed to avoid collisions. The authored layout preserves the original coordinates exactly.`})]})]})}function Pn(e){return e instanceof Error?e.message:String(e)}var Fn=class extends Error{constructor(e){super(Pn(e))}},In={error:`_error_yx1g9_1`};function Ln({message:e}){return u(`div`,{className:In.error,role:`alert`,children:[l(`h1`,{children:`⚠️ Dashboard misconfigured`}),l(`p`,{children:`The page loaded, but the server did not hand it usable configuration.`}),l(`pre`,{children:e})]})}var Rn=document.getElementById(`root`);if(!Rn)throw Error(`No #root element in the document — the template is not the one we expect.`);var zn=s(Rn);try{zn.render(l(t,{children:l(Mn,{env:ne()})}))}catch(e){zn.render(l(Ln,{message:e instanceof Error?e.message:String(e)}))}
3
- //# sourceMappingURL=index-k3N7vI0h.js.map