@caddis/cli 0.4.45 → 0.4.46
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/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/skills/flow-studio/README.md +46 -7
- package/bundles/antigravity-plugin/skills/flow-studio/SKILL.md +80 -81
- package/bundles/antigravity-plugin/skills/flow-studio/examples/README.md +8 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/agent-journey.json +103 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/approval-flow.json +134 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/ci-cd-pipeline.json +132 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/incident-timeline.json +109 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/order-desk.json +99 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/service-map.json +133 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/state-machine.json +106 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/ticket-lifecycle.json +107 -0
- package/bundles/antigravity-plugin/skills/flow-studio/model.schema.json +27 -8
- package/bundles/antigravity-plugin/skills/flow-studio/react/FlowStudioView.test.tsx +82 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/FlowStudioView.tsx +67 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/README.md +37 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/index.ts +3 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/FlowCanvas.tsx +58 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/Inspector.tsx +27 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/index.ts +6 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/native.css +18 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/native.test.tsx +161 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/useFlowGeometry.ts +22 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/useTrace.ts +29 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/native/useViewport.ts +75 -0
- package/bundles/antigravity-plugin/skills/flow-studio/react/states.tsx +13 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/design-language.md +169 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/implement-in-app.md +213 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/model-schema.md +254 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/notes-and-spec.md +74 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/patterns.md +385 -49
- package/bundles/antigravity-plugin/skills/flow-studio/references/ux-rules.md +91 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/verify.md +124 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/build-engine.mjs +54 -14
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/build.mjs +21 -4
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/check.mjs +320 -28
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/default-notes.json +67 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/auto-entry-guard.mjs +5 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/auto-entry-guard.test.mjs +14 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/auto-entry.test.mjs +31 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/build-engine.test.mjs +30 -2
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/check-args.mjs +18 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/check-args.test.mjs +15 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/check-selftest.test.mjs +64 -4
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/cli.test.mjs +115 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/demo-pack.mjs +23 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/demo-pack.test.mjs +34 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/docs.test.mjs +128 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/library.test.mjs +26 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/react-proof-cleanup.mjs +12 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/react-proof-cleanup.test.mjs +45 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/react-proof-page.mjs +3 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/react-proof-page.test.mjs +9 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/react-proof.mjs +92 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/validate.mjs +5 -1
- package/bundles/antigravity-plugin/skills/flow-studio/src/autolayout.test.ts +78 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/autolayout.ts +132 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/chrome.ts +11 -7
- package/bundles/antigravity-plugin/skills/flow-studio/src/controls.ts +8 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/ctx.ts +16 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/diff.test.ts +31 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/diff.ts +34 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/engine.ts +83 -32
- package/bundles/antigravity-plugin/skills/flow-studio/src/inspector.ts +23 -5
- package/bundles/antigravity-plugin/skills/flow-studio/src/interact.ts +21 -8
- package/bundles/antigravity-plugin/skills/flow-studio/src/layout.test.ts +75 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/layout.ts +49 -11
- package/bundles/antigravity-plugin/skills/flow-studio/src/lib.ts +20 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/metrics.test.ts +57 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/metrics.ts +29 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/model.test.ts +62 -2
- package/bundles/antigravity-plugin/skills/flow-studio/src/model.ts +101 -16
- package/bundles/antigravity-plugin/skills/flow-studio/src/notes.ts +8 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/page.ts +21 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/playback.test.ts +104 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/playback.ts +106 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/playbackui.ts +193 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/render.ts +66 -18
- package/bundles/antigravity-plugin/skills/flow-studio/src/routing.test.ts +21 -1
- package/bundles/antigravity-plugin/skills/flow-studio/src/routing.ts +32 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/rules.test.ts +48 -1
- package/bundles/antigravity-plugin/skills/flow-studio/src/rules.ts +52 -1
- package/bundles/antigravity-plugin/skills/flow-studio/src/selection.test.ts +12 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/selection.ts +4 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/stateCss.test.ts +7 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/stateCss.ts +1 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/styles.css +35 -2
- package/bundles/antigravity-plugin/skills/flow-studio/src/trace.test.ts +21 -1
- package/bundles/antigravity-plugin/skills/flow-studio/src/trace.ts +18 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/engine.html +986 -74
- package/bundles/antigravity-plugin/skills/flow-studio/templates/engine.shell.html +1 -39
- package/bundles/antigravity-plugin/skills/flow-studio/templates/flow-studio.css +190 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/flow-studio.lib.d.mts +1 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/flow-studio.lib.mjs +2491 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/shell-body.html +50 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/README.md +46 -7
- package/bundles/codex/.codex/skills/frontend/flow-studio/SKILL.md +80 -81
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/README.md +8 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/agent-journey.json +103 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/approval-flow.json +134 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/ci-cd-pipeline.json +132 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/incident-timeline.json +109 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/order-desk.json +99 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/service-map.json +133 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/state-machine.json +106 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/ticket-lifecycle.json +107 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/model.schema.json +27 -8
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/FlowStudioView.test.tsx +82 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/FlowStudioView.tsx +67 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/README.md +37 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/index.ts +3 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/FlowCanvas.tsx +58 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/Inspector.tsx +27 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/index.ts +6 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/native.css +18 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/native.test.tsx +161 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/useFlowGeometry.ts +22 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/useTrace.ts +29 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/native/useViewport.ts +75 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/react/states.tsx +13 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/design-language.md +169 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/implement-in-app.md +213 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/model-schema.md +254 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/notes-and-spec.md +74 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/patterns.md +385 -49
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/ux-rules.md +91 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/verify.md +124 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/build-engine.mjs +54 -14
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/build.mjs +21 -4
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/check.mjs +320 -28
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/default-notes.json +67 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/auto-entry-guard.mjs +5 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/auto-entry-guard.test.mjs +14 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/auto-entry.test.mjs +31 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/build-engine.test.mjs +30 -2
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/check-args.mjs +18 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/check-args.test.mjs +15 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/check-selftest.test.mjs +64 -4
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/cli.test.mjs +115 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/demo-pack.mjs +23 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/demo-pack.test.mjs +34 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/docs.test.mjs +128 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/library.test.mjs +26 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/react-proof-cleanup.mjs +12 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/react-proof-cleanup.test.mjs +45 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/react-proof-page.mjs +3 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/react-proof-page.test.mjs +9 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/react-proof.mjs +92 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/validate.mjs +5 -1
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/autolayout.test.ts +78 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/autolayout.ts +132 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/chrome.ts +11 -7
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/controls.ts +8 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/ctx.ts +16 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/diff.test.ts +31 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/diff.ts +34 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/engine.ts +83 -32
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/inspector.ts +23 -5
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/interact.ts +21 -8
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/layout.test.ts +75 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/layout.ts +49 -11
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/lib.ts +20 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/metrics.test.ts +57 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/metrics.ts +29 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.test.ts +62 -2
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.ts +101 -16
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/notes.ts +8 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/page.ts +21 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/playback.test.ts +104 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/playback.ts +106 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/playbackui.ts +193 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/render.ts +66 -18
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/routing.test.ts +21 -1
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/routing.ts +32 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.test.ts +48 -1
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.ts +52 -1
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/selection.test.ts +12 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/selection.ts +4 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/stateCss.test.ts +7 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/stateCss.ts +1 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/styles.css +35 -2
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/trace.test.ts +21 -1
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/trace.ts +18 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/engine.html +986 -74
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/engine.shell.html +1 -39
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/flow-studio.css +190 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/flow-studio.lib.d.mts +1 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/flow-studio.lib.mjs +2491 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/shell-body.html +50 -0
- package/bundles/manifest.json +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "CI/CD RELEASE PIPELINE",
|
|
5
|
+
"help": "Track automated build, test, security scan, and deployment stages across services and platform environments.",
|
|
6
|
+
"asOf": "2026-10-06",
|
|
7
|
+
"source": "Fictional Contoso Retail deployment pipeline. No real product or hostnames are used."
|
|
8
|
+
},
|
|
9
|
+
"layout": "columns-lanes",
|
|
10
|
+
"columns": [
|
|
11
|
+
{ "id": "commit", "title": "Commit", "width": 140 },
|
|
12
|
+
{ "id": "build", "title": "Build", "width": 150 },
|
|
13
|
+
{ "id": "test", "title": "Test", "width": 140 },
|
|
14
|
+
{ "id": "scan", "title": "Scan", "width": 150 },
|
|
15
|
+
{ "id": "staging", "title": "Staging", "width": 150 },
|
|
16
|
+
{ "id": "verify", "title": "Verify", "width": 150 },
|
|
17
|
+
{ "id": "production", "title": "Production", "width": 150 }
|
|
18
|
+
],
|
|
19
|
+
"lanes": [
|
|
20
|
+
{ "id": "service-a", "title": "Service A" },
|
|
21
|
+
{ "id": "service-b", "title": "Service B" },
|
|
22
|
+
{ "id": "platform", "title": "Platform" }
|
|
23
|
+
],
|
|
24
|
+
"states": {
|
|
25
|
+
"passed": { "word": "PASSED", "tone": "ok", "border": "solid", "edge": "flow", "motion": "flow", "bucket": "good" },
|
|
26
|
+
"running": { "word": "RUNNING", "tone": "warn", "border": "dashed", "edge": "dash", "motion": "flow-slow", "bucket": "neutral" },
|
|
27
|
+
"failed": { "word": "FAILED", "tone": "crit", "border": "dotted", "edge": "dot", "motion": "breathe", "bucket": "gap" },
|
|
28
|
+
"skipped": { "word": "SKIPPED", "tone": "muted", "border": "solid", "edge": "dash-short", "motion": "none", "bucket": "neutral" },
|
|
29
|
+
"manual": { "word": "MANUAL", "tone": "accent", "border": "solid", "edge": "flow", "motion": "none", "bucket": "good" }
|
|
30
|
+
},
|
|
31
|
+
"nodes": [
|
|
32
|
+
{ "id": "c_a", "kind": "start", "lane": "service-a", "col": 0, "row": 0, "state": "passed", "title": "Commit A" },
|
|
33
|
+
{ "id": "b_a", "kind": "card", "lane": "service-a", "col": 1, "row": 0, "state": "passed", "title": "Build A", "metrics": { "label": "Build time", "value": 42, "unit": "s", "series": [35, 40, 42, 39, 42] } },
|
|
34
|
+
{ "id": "t_a", "kind": "card", "lane": "service-a", "col": 2, "row": 0, "state": "passed", "title": "Unit test A" },
|
|
35
|
+
{ "id": "s_a", "kind": "card", "lane": "service-a", "col": 3, "row": 0, "state": "passed", "title": "Security scan A", "sla": 90 },
|
|
36
|
+
{ "id": "d_stg_a", "kind": "card", "lane": "service-a", "col": 4, "row": 0, "state": "passed", "title": "Deploy stage A" },
|
|
37
|
+
{ "id": "d_prd_a", "kind": "end", "lane": "service-a", "col": 6, "row": 0, "state": "manual", "title": "Deploy prod A" },
|
|
38
|
+
{ "id": "c_b", "kind": "start", "lane": "service-b", "col": 0, "row": 2.0, "state": "passed", "title": "Commit B" },
|
|
39
|
+
{ "id": "b_b", "kind": "card", "lane": "service-b", "col": 1, "row": 2.0, "state": "passed", "title": "Build B", "metrics": { "label": "Build time", "value": 58, "unit": "s", "series": [50, 52, 55, 60, 58] } },
|
|
40
|
+
{ "id": "t_b", "kind": "card", "lane": "service-b", "col": 2, "row": 2.0, "state": "passed", "title": "Unit test B" },
|
|
41
|
+
{ "id": "s_b", "kind": "card", "lane": "service-b", "col": 3, "row": 2.0, "state": "failed", "title": "Security scan B", "sla": 40 },
|
|
42
|
+
{ "id": "d_stg_b", "kind": "card", "lane": "service-b", "col": 4, "row": 2.0, "state": "skipped", "title": "Deploy stage B" },
|
|
43
|
+
{ "id": "d_prd_b", "kind": "end", "lane": "service-b", "col": 6, "row": 2.0, "state": "skipped", "title": "Deploy prod B" },
|
|
44
|
+
{ "id": "cfg_env", "kind": "card", "lane": "platform", "col": 0, "row": 4.0, "state": "passed", "title": "Config check" },
|
|
45
|
+
{ "id": "inf_stg", "kind": "card", "lane": "platform", "col": 4, "row": 4.0, "state": "passed", "title": "Stage cluster" },
|
|
46
|
+
{ "id": "v_smoke", "kind": "card", "lane": "platform", "col": 5, "row": 4.0, "state": "passed", "title": "Smoke test" },
|
|
47
|
+
{ "id": "gate_appr", "kind": "gateway", "lane": "platform", "col": 5, "row": 5.1, "state": "manual", "title": "Approved?" },
|
|
48
|
+
{ "id": "notif", "kind": "end", "lane": "platform", "col": 6, "row": 4.0, "state": "passed", "title": "Release notify" }
|
|
49
|
+
],
|
|
50
|
+
"links": [
|
|
51
|
+
{ "id": "l_cfg_ba", "from": "cfg_env", "to": "b_a", "state": "passed" },
|
|
52
|
+
{ "id": "l_cfg_bb", "from": "cfg_env", "to": "b_b", "state": "passed" },
|
|
53
|
+
{ "id": "l_ca_ba", "from": "c_a", "to": "b_a", "state": "passed" },
|
|
54
|
+
{ "id": "l_ba_ta", "from": "b_a", "to": "t_a", "state": "passed" },
|
|
55
|
+
{ "id": "l_ta_sa", "from": "t_a", "to": "s_a", "state": "passed" },
|
|
56
|
+
{ "id": "l_sa_da", "from": "s_a", "to": "d_stg_a", "state": "passed" },
|
|
57
|
+
{ "id": "l_da_sm", "from": "d_stg_a", "to": "v_smoke", "state": "passed" },
|
|
58
|
+
{ "id": "l_inf_gate", "from": "inf_stg", "to": "gate_appr", "state": "passed" },
|
|
59
|
+
{ "id": "l_gate_prd", "from": "gate_appr", "to": "d_prd_a", "state": "manual", "label": "Approved" },
|
|
60
|
+
{ "id": "l_gate_rej", "from": "gate_appr", "to": "d_stg_a", "state": "failed", "kind": "loop-back", "label": "Rejected" },
|
|
61
|
+
{ "id": "l_rollback", "from": "d_prd_a", "to": "d_stg_a", "state": "running", "kind": "loop-back", "label": "Roll back" },
|
|
62
|
+
{ "id": "l_cb_bb", "from": "c_b", "to": "b_b", "state": "passed" },
|
|
63
|
+
{ "id": "l_bb_tb", "from": "b_b", "to": "t_b", "state": "passed" },
|
|
64
|
+
{ "id": "l_tb_sb", "from": "t_b", "to": "s_b", "state": "failed" },
|
|
65
|
+
{ "id": "l_sb_stg", "from": "s_b", "to": "d_stg_b", "state": "skipped" },
|
|
66
|
+
{ "id": "l_sb_cb", "from": "s_b", "to": "c_b", "state": "failed", "kind": "loop-back", "label": "Fix CVE" },
|
|
67
|
+
{ "id": "l_stgb_sm", "from": "d_stg_b", "to": "v_smoke", "state": "skipped" },
|
|
68
|
+
{ "id": "l_sm_prdb", "from": "v_smoke", "to": "d_prd_b", "state": "skipped" },
|
|
69
|
+
{ "id": "l_sm_notif", "from": "v_smoke", "to": "notif", "state": "passed" }
|
|
70
|
+
],
|
|
71
|
+
"inspector": {
|
|
72
|
+
"relations": [
|
|
73
|
+
{ "id": "upstream", "label": "Builds upon", "dir": "up" },
|
|
74
|
+
{ "id": "down", "label": "Deploys to", "dir": "down" },
|
|
75
|
+
{ "id": "related", "label": "Associated with", "dir": "down" }
|
|
76
|
+
],
|
|
77
|
+
"actions": [
|
|
78
|
+
{
|
|
79
|
+
"id": "sim_rollback",
|
|
80
|
+
"label": "Simulate: trigger rollback",
|
|
81
|
+
"dir": "down",
|
|
82
|
+
"staleText": "Rollback initiated. Production traffic diverted."
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"notes": [
|
|
87
|
+
{
|
|
88
|
+
"anchor": "#viewport",
|
|
89
|
+
"title": "Pipeline overview",
|
|
90
|
+
"text": "This board coordinates service releases across staging and production environments."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"anchor": "#n_gate_appr",
|
|
94
|
+
"title": "Approval gate",
|
|
95
|
+
"text": "Production deployments require manual sign-off after smoke tests complete."
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"anchor": "#tools",
|
|
99
|
+
"title": "Toolbar actions",
|
|
100
|
+
"text": "Use toolbar buttons to zoom or focus on active service lanes."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"anchor": "#playbar",
|
|
104
|
+
"title": "Playback controls",
|
|
105
|
+
"text": "Step through deployment scenarios to observe branch choices and rollback paths."
|
|
106
|
+
}
|
|
107
|
+
],
|
|
108
|
+
"scenarios": [
|
|
109
|
+
{
|
|
110
|
+
"id": "green_release",
|
|
111
|
+
"label": "Green release",
|
|
112
|
+
"steps": [
|
|
113
|
+
{ "link": "l_ca_ba", "at": 0, "caption": "Service A code committed" },
|
|
114
|
+
{ "link": "l_ba_ta", "at": 15, "caption": "Service A compiled successfully" },
|
|
115
|
+
{ "link": "l_ta_sa", "at": 30, "caption": "Unit test suite passed" },
|
|
116
|
+
{ "link": "l_sa_da", "at": 45, "caption": "Security scan cleared with no vulnerabilities" },
|
|
117
|
+
{ "link": "l_da_sm", "at": 60, "caption": "Staging deployment completed" },
|
|
118
|
+
{ "link": "l_sm_notif", "at": 75, "caption": "Smoke tests verified and platform notified" }
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "failed_scan",
|
|
123
|
+
"label": "Failed scan",
|
|
124
|
+
"steps": [
|
|
125
|
+
{ "link": "l_cb_bb", "at": 0, "caption": "Service B code committed" },
|
|
126
|
+
{ "link": "l_bb_tb", "at": 15, "caption": "Service B compiled" },
|
|
127
|
+
{ "link": "l_tb_sb", "at": 60, "caption": "Vulnerability scan detected critical issue and breached SLA" },
|
|
128
|
+
{ "link": "l_sb_cb", "at": 80, "caption": "Pipeline halted and sent back for developer remediation" }
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "OUTAGE INCIDENT TIMELINE",
|
|
5
|
+
"help": "Examine a multi-service outage timeline from root failure through blast radius propagation and final recovery.",
|
|
6
|
+
"asOf": "2026-10-06",
|
|
7
|
+
"source": "Fictional Contoso Retail production telemetry. No real hostnames or outage incidents are used."
|
|
8
|
+
},
|
|
9
|
+
"layout": "columns-lanes",
|
|
10
|
+
"columns": [
|
|
11
|
+
{ "id": "t_minus_30", "title": "T-30m", "width": 150 },
|
|
12
|
+
{ "id": "t_minus_10", "title": "T-10m", "width": 150 },
|
|
13
|
+
{ "id": "t_zero", "title": "T0", "width": 150 },
|
|
14
|
+
{ "id": "t_plus_10", "title": "T+10m", "width": 150 },
|
|
15
|
+
{ "id": "t_plus_30", "title": "T+30m", "width": 150 },
|
|
16
|
+
{ "id": "t_plus_1h", "title": "T+1h", "width": 150 }
|
|
17
|
+
],
|
|
18
|
+
"lanes": [
|
|
19
|
+
{ "id": "gateway", "title": "Gateway" },
|
|
20
|
+
{ "id": "orders", "title": "Orders API" },
|
|
21
|
+
{ "id": "db", "title": "Database" },
|
|
22
|
+
{ "id": "cache", "title": "Cache" },
|
|
23
|
+
{ "id": "alerting", "title": "Alerting" },
|
|
24
|
+
{ "id": "oncall", "title": "On-call" }
|
|
25
|
+
],
|
|
26
|
+
"states": {
|
|
27
|
+
"normal": { "word": "NORMAL", "tone": "ok", "border": "solid", "edge": "flow", "motion": "flow", "bucket": "good" },
|
|
28
|
+
"degraded": { "word": "DEGRADED", "tone": "warn", "border": "dashed", "edge": "dash", "motion": "flow-slow", "bucket": "neutral" },
|
|
29
|
+
"failed": { "word": "FAILED", "tone": "crit", "border": "dotted", "edge": "dot", "motion": "breathe", "bucket": "gap" },
|
|
30
|
+
"recovered": { "word": "RECOVERED", "tone": "accent", "border": "solid", "edge": "dash-short", "motion": "none", "bucket": "good" }
|
|
31
|
+
},
|
|
32
|
+
"views": [
|
|
33
|
+
{ "id": "detection", "label": "At detection", "default": true },
|
|
34
|
+
{ "id": "fixed", "label": "After the fix" }
|
|
35
|
+
],
|
|
36
|
+
"nodes": [
|
|
37
|
+
{ "id": "gw-drain", "kind": "card", "lane": "gateway", "col": 3, "row": 0, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Throttle ingress" },
|
|
38
|
+
{ "id": "gw-green", "kind": "end", "lane": "gateway", "col": 5, "row": 0, "state": "recovered", "stateIn": { "fixed": "recovered" }, "title": "Gateway clear" },
|
|
39
|
+
{ "id": "ord-normal", "kind": "start", "lane": "orders", "col": 0, "row": 2, "state": "normal", "stateIn": { "fixed": "normal" }, "title": "Baseline traffic" },
|
|
40
|
+
{ "id": "ord-circuit", "kind": "card", "lane": "orders", "col": 3, "row": 2, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Trip circuit breaker" },
|
|
41
|
+
{ "id": "ord-healthy", "kind": "end", "lane": "orders", "col": 5, "row": 2, "state": "recovered", "stateIn": { "fixed": "recovered" }, "title": "Orders nominal" },
|
|
42
|
+
{ "id": "db-load", "kind": "card", "lane": "db", "col": 1, "row": 4, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Lock contention" },
|
|
43
|
+
{ "id": "db-fail", "kind": "card", "lane": "db", "col": 2, "row": 4, "state": "failed", "stateIn": { "fixed": "normal" }, "title": "Pool exhausted" },
|
|
44
|
+
{ "id": "db-restart", "kind": "card", "lane": "db", "col": 3, "row": 4, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Promote replica" },
|
|
45
|
+
{ "id": "db-stable", "kind": "end", "lane": "db", "col": 5, "row": 4, "state": "recovered", "stateIn": { "fixed": "recovered" }, "title": "Database stable" },
|
|
46
|
+
{ "id": "c-flush", "kind": "card", "lane": "cache", "col": 1, "row": 6, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Memory eviction" },
|
|
47
|
+
{ "id": "c-reconnect", "kind": "card", "lane": "cache", "col": 4, "row": 6, "state": "normal", "stateIn": { "fixed": "recovered" }, "title": "Rebuild cache" },
|
|
48
|
+
{ "id": "alt-status", "kind": "card", "lane": "alerting", "col": 3, "row": 8, "state": "degraded", "stateIn": { "fixed": "normal" }, "title": "Post status page" },
|
|
49
|
+
{ "id": "onc-page", "kind": "card", "lane": "oncall", "col": 3, "row": 10, "state": "failed", "stateIn": { "fixed": "normal" }, "title": "Page engineer", "sla": 120, "metrics": { "label": "Ack time", "value": 150, "max": 180, "unit": "s" } },
|
|
50
|
+
{ "id": "onc-mitigate", "kind": "card", "lane": "oncall", "col": 4, "row": 10, "state": "normal", "stateIn": { "fixed": "recovered" }, "title": "Execute runbook" },
|
|
51
|
+
{ "id": "onc-resolve", "kind": "end", "lane": "oncall", "col": 5, "row": 10, "state": "recovered", "stateIn": { "fixed": "recovered" }, "title": "Incident resolved" }
|
|
52
|
+
],
|
|
53
|
+
"links": [
|
|
54
|
+
{ "id": "l-ord-dbload", "from": "ord-normal", "to": "db-load", "state": "degraded" },
|
|
55
|
+
{ "id": "l-ord-cflush", "from": "ord-normal", "to": "c-flush", "state": "degraded" },
|
|
56
|
+
{ "id": "l-dbload-fail", "from": "db-load", "to": "db-fail", "state": "failed" },
|
|
57
|
+
{ "id": "l-cflush-fail", "from": "c-flush", "to": "db-fail", "state": "failed" },
|
|
58
|
+
{ "id": "l-fail-page", "from": "db-fail", "to": "onc-page", "state": "failed", "label": "P1 alarm" },
|
|
59
|
+
{ "id": "l-fail-gw", "from": "db-fail", "to": "gw-drain", "state": "degraded", "label": "Ingress drop" },
|
|
60
|
+
{ "id": "l-fail-ord", "from": "db-fail", "to": "ord-circuit", "state": "degraded", "label": "500 spikes" },
|
|
61
|
+
{ "id": "l-fail-restart", "from": "db-fail", "to": "db-restart", "state": "degraded", "label": "Failover" },
|
|
62
|
+
{ "id": "l-fail-alt", "from": "db-fail", "to": "alt-status", "state": "degraded", "label": "SLO breached" },
|
|
63
|
+
{ "id": "l-restart-cache", "from": "db-restart", "to": "c-reconnect", "state": "normal" },
|
|
64
|
+
{ "id": "l-page-mitigate", "from": "onc-page", "to": "onc-mitigate", "state": "normal" },
|
|
65
|
+
{ "id": "l-ord-mitigate", "from": "ord-circuit", "to": "onc-mitigate", "state": "normal" },
|
|
66
|
+
{ "id": "l-cache-ord", "from": "c-reconnect", "to": "ord-healthy", "state": "recovered" },
|
|
67
|
+
{ "id": "l-gw-green", "from": "gw-drain", "to": "gw-green", "state": "recovered" },
|
|
68
|
+
{ "id": "l-mitigate-db", "from": "onc-mitigate", "to": "db-stable", "state": "recovered" },
|
|
69
|
+
{ "id": "l-mitigate-resolve", "from": "onc-mitigate", "to": "onc-resolve", "state": "recovered" },
|
|
70
|
+
{ "id": "l-alt-resolve", "from": "alt-status", "to": "onc-resolve", "state": "recovered" }
|
|
71
|
+
],
|
|
72
|
+
"scenarios": [
|
|
73
|
+
{
|
|
74
|
+
"id": "mitigation",
|
|
75
|
+
"label": "Remediation path",
|
|
76
|
+
"steps": [
|
|
77
|
+
{ "link": "l-page-mitigate", "at": 0, "caption": "On-call executes mitigation runbook" },
|
|
78
|
+
{ "link": "l-mitigate-db", "at": 30, "caption": "Database replica confirmed stable" }
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "escalated",
|
|
83
|
+
"label": "Incident replay",
|
|
84
|
+
"steps": [
|
|
85
|
+
{ "link": "l-ord-dbload", "at": 0, "caption": "T-30m: High volume drives database connection strain" },
|
|
86
|
+
{ "link": "l-dbload-fail", "at": 30, "caption": "T-10m: Lock contention triggers connection pool exhaustion" },
|
|
87
|
+
{ "link": "l-fail-page", "at": 150, "caption": "T0: Outage alarm breaches acknowledgment SLA" },
|
|
88
|
+
{ "link": "l-page-mitigate", "at": 210, "caption": "T+10m: Primary failover script executed" },
|
|
89
|
+
{ "link": "l-mitigate-resolve", "at": 300, "caption": "T+30m: Services restored and status cleared" }
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"inspector": {
|
|
94
|
+
"relations": [
|
|
95
|
+
{ "id": "upstream-cause", "label": "Root cause", "dir": "up" },
|
|
96
|
+
{ "id": "down", "label": "Blast radius", "dir": "down" },
|
|
97
|
+
{ "id": "recovery", "label": "Resolved at", "dir": "down", "filter": { "kind": "end" } }
|
|
98
|
+
],
|
|
99
|
+
"actions": [
|
|
100
|
+
{ "id": "sim-blast", "label": "Simulate: this failed", "dir": "down", "staleText": "Simulating failure propagation across dependents" }
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"notes": [
|
|
104
|
+
{ "anchor": "#n_db-fail", "title": "Root failure trigger", "text": "Connection pool collapse directly triggers downstream throttling and circuit breaker activation." },
|
|
105
|
+
{ "anchor": "#n_onc-page", "title": "On-call paging SLA", "text": "Paging policies mandate engineer acknowledgement within two minutes of P1 alarm generation." },
|
|
106
|
+
{ "anchor": "#modeSwitch", "title": "Incident timeline views", "text": "Toggle between initial outage detection and post-mitigation stable state." },
|
|
107
|
+
{ "anchor": "#playbar", "title": "Incident chronology replay", "text": "Run replay to observe chronological outage progression from trigger to resolution." }
|
|
108
|
+
]
|
|
109
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "ORDER DESK: FROM REQUEST TO CLOSE",
|
|
5
|
+
"help": "Follow a fictional order from intake to close. Open the fulfilment group to see its tasks. A request for more details returns to verification.",
|
|
6
|
+
"asOf": "2026-10-05",
|
|
7
|
+
"source": "Fictional Order desk example. No live orders or customer records are used."
|
|
8
|
+
},
|
|
9
|
+
"layout": "auto",
|
|
10
|
+
"columns": [
|
|
11
|
+
{ "id": "intake", "title": "Intake", "width": 150 },
|
|
12
|
+
{ "id": "verify", "title": "Verify", "width": 150 },
|
|
13
|
+
{ "id": "route", "title": "Route", "width": 150 },
|
|
14
|
+
{ "id": "prepare", "title": "Prepare", "width": 150 },
|
|
15
|
+
{ "id": "tasks", "title": "Tasks", "width": 150 },
|
|
16
|
+
{ "id": "fulfil", "title": "Fulfil", "width": 150 },
|
|
17
|
+
{ "id": "update", "title": "Update", "width": 150 },
|
|
18
|
+
{ "id": "close", "title": "Close", "width": 150 }
|
|
19
|
+
],
|
|
20
|
+
"lanes": [
|
|
21
|
+
{ "id": "desk", "title": "Order desk" },
|
|
22
|
+
{ "id": "checks", "title": "Checks" },
|
|
23
|
+
{ "id": "fulfilment", "title": "Fulfilment" }
|
|
24
|
+
],
|
|
25
|
+
"states": {
|
|
26
|
+
"ready": { "word": "READY", "tone": "ok", "border": "solid", "edge": "flow", "motion": "flow", "bucket": "good" },
|
|
27
|
+
"waiting": { "word": "WAITING", "tone": "warn", "border": "dashed", "edge": "dash", "motion": "flow-slow", "bucket": "neutral" },
|
|
28
|
+
"review": { "word": "REVIEW", "tone": "info", "border": "solid", "edge": "dash-short", "motion": "flow-slow", "bucket": "neutral" }
|
|
29
|
+
},
|
|
30
|
+
"nodes": [
|
|
31
|
+
{ "id": "intake", "kind": "start", "lane": "desk", "state": "ready", "title": "New request" },
|
|
32
|
+
{ "id": "verify", "kind": "card", "lane": "desk", "state": "review", "title": "Verify details" },
|
|
33
|
+
{ "id": "route", "kind": "gateway", "lane": "desk", "state": "review", "title": "Ready?" },
|
|
34
|
+
{ "id": "hold", "kind": "card", "lane": "desk", "state": "waiting", "title": "Ask for details", "sla": 60 },
|
|
35
|
+
{ "id": "quote", "kind": "card", "lane": "desk", "state": "ready", "title": "Confirm terms" },
|
|
36
|
+
{ "id": "stock", "kind": "card", "lane": "checks", "state": "review", "title": "Check stock", "metrics": { "label": "Items ready", "value": 8, "max": 10, "unit": "items", "series": [2, 3, 5, 5, 7, 8] } },
|
|
37
|
+
{ "id": "payment", "kind": "card", "lane": "checks", "state": "review", "title": "Check payment", "metrics": { "label": "Checks", "value": 4, "max": 5 } },
|
|
38
|
+
{ "id": "fulfil-group", "kind": "group", "lane": "fulfilment", "col": 5, "state": "ready", "title": "Prepare parcel", "contains": ["pick", "pack", "dispatch"] },
|
|
39
|
+
{ "id": "pick", "kind": "card", "lane": "fulfilment", "state": "ready", "title": "Pick items" },
|
|
40
|
+
{ "id": "pack", "kind": "card", "lane": "fulfilment", "state": "ready", "title": "Pack items" },
|
|
41
|
+
{ "id": "dispatch", "kind": "card", "lane": "fulfilment", "state": "ready", "title": "Dispatch", "metrics": { "label": "Parcels", "value": 3, "unit": "sent" } },
|
|
42
|
+
{ "id": "notify", "kind": "card", "lane": "desk", "state": "ready", "title": "Send update" },
|
|
43
|
+
{ "id": "receipt", "kind": "card", "lane": "desk", "state": "ready", "title": "File receipt" },
|
|
44
|
+
{ "id": "close", "kind": "end", "lane": "desk", "state": "ready", "title": "Close order" }
|
|
45
|
+
],
|
|
46
|
+
"links": [
|
|
47
|
+
{ "id": "l-intake-verify", "from": "intake", "to": "verify", "state": "ready" },
|
|
48
|
+
{ "id": "l-verify-route", "from": "verify", "to": "route", "state": "review" },
|
|
49
|
+
{ "id": "l-route-hold", "from": "route", "to": "hold", "state": "waiting", "label": "Need details" },
|
|
50
|
+
{ "id": "l-hold-verify", "from": "hold", "to": "verify", "state": "waiting", "kind": "loop-back", "label": "Details added" },
|
|
51
|
+
{ "id": "l-route-quote", "from": "route", "to": "quote", "state": "ready", "label": "Ready" },
|
|
52
|
+
{ "id": "l-quote-stock", "from": "quote", "to": "stock", "state": "review" },
|
|
53
|
+
{ "id": "l-quote-payment", "from": "quote", "to": "payment", "state": "review" },
|
|
54
|
+
{ "id": "l-quote-pick", "from": "quote", "to": "pick", "state": "ready" },
|
|
55
|
+
{ "id": "l-quote-pack", "from": "quote", "to": "pack", "state": "ready" },
|
|
56
|
+
{ "id": "l-stock-dispatch", "from": "stock", "to": "dispatch", "state": "review" },
|
|
57
|
+
{ "id": "l-payment-dispatch", "from": "payment", "to": "dispatch", "state": "review" },
|
|
58
|
+
{ "id": "l-pick-dispatch", "from": "pick", "to": "dispatch", "state": "ready" },
|
|
59
|
+
{ "id": "l-pack-dispatch", "from": "pack", "to": "dispatch", "state": "ready" },
|
|
60
|
+
{ "id": "l-dispatch-notify", "from": "dispatch", "to": "notify", "state": "ready" },
|
|
61
|
+
{ "id": "l-dispatch-receipt", "from": "dispatch", "to": "receipt", "state": "ready" },
|
|
62
|
+
{ "id": "l-notify-close", "from": "notify", "to": "close", "state": "ready" },
|
|
63
|
+
{ "id": "l-receipt-close", "from": "receipt", "to": "close", "state": "ready" }
|
|
64
|
+
],
|
|
65
|
+
"scenarios": [
|
|
66
|
+
{ "id": "happy", "label": "Happy path", "steps": [
|
|
67
|
+
{ "link": "l-intake-verify", "at": 0, "caption": "Request reaches verification" },
|
|
68
|
+
{ "link": "l-verify-route", "at": 10, "caption": "Details are checked" },
|
|
69
|
+
{ "link": "l-route-quote", "at": 20, "caption": "Ready to confirm terms" },
|
|
70
|
+
{ "link": "l-quote-stock", "at": 30, "caption": "Stock is checked" },
|
|
71
|
+
{ "link": "l-stock-dispatch", "at": 40, "caption": "Parcel is dispatched" },
|
|
72
|
+
{ "link": "l-dispatch-notify", "at": 50, "caption": "An update is sent" },
|
|
73
|
+
{ "link": "l-notify-close", "at": 60, "caption": "Order is closed" }
|
|
74
|
+
] },
|
|
75
|
+
{ "id": "escalated", "label": "Escalated", "steps": [
|
|
76
|
+
{ "link": "l-intake-verify", "at": 0, "caption": "Request reaches verification" },
|
|
77
|
+
{ "link": "l-verify-route", "at": 20, "caption": "Details need review" },
|
|
78
|
+
{ "link": "l-route-hold", "at": 90, "caption": "More details are needed" },
|
|
79
|
+
{ "link": "l-hold-verify", "at": 120, "caption": "Details arrive" },
|
|
80
|
+
{ "link": "l-verify-route", "at": 140, "caption": "Details are checked again" },
|
|
81
|
+
{ "link": "l-route-quote", "at": 150, "caption": "Terms can proceed" },
|
|
82
|
+
{ "link": "l-quote-stock", "at": 160, "caption": "Stock is checked" },
|
|
83
|
+
{ "link": "l-stock-dispatch", "at": 170, "caption": "Parcel is dispatched" },
|
|
84
|
+
{ "link": "l-dispatch-notify", "at": 180, "caption": "An update is sent" },
|
|
85
|
+
{ "link": "l-notify-close", "at": 190, "caption": "Order is closed" }
|
|
86
|
+
] }
|
|
87
|
+
],
|
|
88
|
+
"inspector": {
|
|
89
|
+
"relations": [
|
|
90
|
+
{ "id": "up", "label": "Came from", "dir": "up" },
|
|
91
|
+
{ "id": "down", "label": "Goes to", "dir": "down" },
|
|
92
|
+
{ "id": "closed", "label": "Closed", "dir": "down", "filter": { "kind": "end" } }
|
|
93
|
+
]
|
|
94
|
+
},
|
|
95
|
+
"notes": [
|
|
96
|
+
{ "anchor": "#n_route", "title": "A decision with named exits", "text": "The desk either asks for more details or confirms the order can move on." },
|
|
97
|
+
{ "anchor": "#n_fulfil-group", "title": "A group that can open", "text": "The parcel preparation tasks are folded into one node until the reader opens the group." }
|
|
98
|
+
]
|
|
99
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "MICROSERVICE ESTATE TOPOLOGY",
|
|
5
|
+
"help": "Explore microservice dependencies, traffic weights, and backing data stores across standard and peak operational conditions.",
|
|
6
|
+
"asOf": "2026-10-06",
|
|
7
|
+
"source": "Fictional Contoso Retail service mesh. No real endpoints or credentials are used."
|
|
8
|
+
},
|
|
9
|
+
"layout": "auto",
|
|
10
|
+
"columns": [
|
|
11
|
+
{ "id": "edge", "title": "Edge", "width": 150 },
|
|
12
|
+
{ "id": "auth", "title": "Auth", "width": 150 },
|
|
13
|
+
{ "id": "core", "title": "Core Services", "width": 170 },
|
|
14
|
+
{ "id": "support", "title": "Support Services", "width": 170 },
|
|
15
|
+
{ "id": "data", "title": "Data Stores", "width": 170 }
|
|
16
|
+
],
|
|
17
|
+
"lanes": [
|
|
18
|
+
{ "id": "edge", "title": "Edge Layer" },
|
|
19
|
+
{ "id": "services", "title": "Core Services" },
|
|
20
|
+
{ "id": "support", "title": "Supporting Services" },
|
|
21
|
+
{ "id": "data", "title": "Data Tier" }
|
|
22
|
+
],
|
|
23
|
+
"states": {
|
|
24
|
+
"healthy": { "word": "HEALTHY", "tone": "ok", "border": "solid", "edge": "flow", "motion": "flow", "bucket": "good" },
|
|
25
|
+
"degraded": { "word": "DEGRADED", "tone": "warn", "border": "dashed", "edge": "dash", "motion": "flow-slow", "bucket": "neutral" },
|
|
26
|
+
"down": { "word": "DOWN", "tone": "crit", "border": "dotted", "edge": "dot", "motion": "none", "bucket": "gap" }
|
|
27
|
+
},
|
|
28
|
+
"views": [
|
|
29
|
+
{ "id": "now", "label": "Now", "default": true },
|
|
30
|
+
{ "id": "peak", "label": "Peak" }
|
|
31
|
+
],
|
|
32
|
+
"nodes": [
|
|
33
|
+
{ "id": "gw_web", "kind": "card", "lane": "edge", "state": "healthy", "title": "Web Gateway", "subtitle": "Public web ingress", "weight": 1.0, "metrics": { "label": "Traffic", "value": 3200, "max": 5000, "unit": "req/s", "series": [2400, 2800, 3100, 3200] } },
|
|
34
|
+
{ "id": "gw_mobile", "kind": "card", "lane": "edge", "state": "healthy", "title": "Mobile Gateway", "subtitle": "App client ingress", "weight": 0.8, "metrics": { "label": "Traffic", "value": 1800, "max": 3000, "unit": "req/s", "series": [1200, 1500, 1700, 1800] } },
|
|
35
|
+
{ "id": "cdn_edge", "kind": "card", "lane": "edge", "state": "healthy", "title": "CDN Edge", "subtitle": "Static asset cache", "weight": 0.9 },
|
|
36
|
+
{ "id": "svc_auth", "kind": "card", "lane": "services", "state": "healthy", "title": "Auth Service", "subtitle": "OAuth and JWT tokens", "weight": 0.9 },
|
|
37
|
+
{ "id": "svc_orders", "kind": "card", "lane": "services", "state": "healthy", "title": "Orders API", "subtitle": "Order management", "weight": 0.9, "sla": 100, "metrics": { "label": "Traffic", "value": 1200, "max": 2000, "unit": "req/s", "series": [800, 950, 1100, 1200] } },
|
|
38
|
+
{ "id": "svc_payments", "kind": "card", "lane": "services", "state": "healthy", "title": "Payments API", "subtitle": "Payment processing", "weight": 0.85 },
|
|
39
|
+
{ "id": "svc_inventory", "kind": "card", "lane": "services", "state": "healthy", "title": "Inventory API", "subtitle": "Stock levels", "weight": 0.75 },
|
|
40
|
+
{ "id": "svc_catalog", "kind": "card", "lane": "services", "state": "healthy", "title": "Catalog API", "subtitle": "Product details", "weight": 0.8 },
|
|
41
|
+
{ "id": "svc_search", "kind": "card", "lane": "services", "state": "healthy", "title": "Search API", "subtitle": "Product search", "weight": 0.85, "stateIn": { "peak": "degraded" } },
|
|
42
|
+
{ "id": "svc_cart", "kind": "card", "lane": "services", "state": "healthy", "title": "Cart API", "subtitle": "Shopping baskets", "weight": 0.7 },
|
|
43
|
+
{ "id": "svc_notif", "kind": "card", "lane": "support", "state": "healthy", "title": "Notification API", "subtitle": "Email and SMS alerts", "weight": 0.6 },
|
|
44
|
+
{ "id": "svc_recom", "kind": "card", "lane": "support", "state": "healthy", "title": "Recommendation", "subtitle": "Personalized picks", "weight": 0.5 },
|
|
45
|
+
{ "id": "svc_shipping", "kind": "card", "lane": "support", "state": "healthy", "title": "Shipping API", "subtitle": "Courier dispatch", "weight": 0.65 },
|
|
46
|
+
{ "id": "svc_analytics", "kind": "card", "lane": "support", "state": "healthy", "title": "Analytics API", "subtitle": "Event ingestion", "weight": 0.7 },
|
|
47
|
+
{ "id": "svc_pricing", "kind": "card", "lane": "support", "state": "healthy", "title": "Pricing Engine", "subtitle": "Dynamic discounts", "weight": 0.6 },
|
|
48
|
+
{ "id": "audit_log", "kind": "card", "lane": "support", "state": "healthy", "title": "Audit Service", "subtitle": "Compliance trail", "weight": 0.5 },
|
|
49
|
+
{ "id": "end_client", "kind": "end", "lane": "edge", "state": "healthy", "title": "Client Response", "subtitle": "Rendered payload" },
|
|
50
|
+
{ "id": "end_receipt", "kind": "end", "lane": "services", "state": "healthy", "title": "Order Confirmed", "subtitle": "Receipt issued" },
|
|
51
|
+
{ "id": "ds_group", "kind": "group", "lane": "data", "state": "healthy", "title": "Data stores", "subtitle": "Databases and queues", "contains": ["db_orders", "db_payments", "db_inventory", "redis_cache", "msg_queue"], "collapsed": true },
|
|
52
|
+
{ "id": "db_orders", "kind": "card", "lane": "data", "state": "healthy", "title": "Orders DB", "subtitle": "PostgreSQL relational", "weight": 0.9 },
|
|
53
|
+
{ "id": "db_payments", "kind": "card", "lane": "data", "state": "healthy", "title": "Payments DB", "subtitle": "Encrypted ledger", "weight": 0.85 },
|
|
54
|
+
{ "id": "db_inventory", "kind": "card", "lane": "data", "state": "healthy", "title": "Inventory DB", "subtitle": "Replica cluster", "weight": 0.7 },
|
|
55
|
+
{ "id": "redis_cache", "kind": "card", "lane": "data", "state": "healthy", "title": "Redis Cache", "subtitle": "In-memory cluster", "weight": 0.8, "stateIn": { "peak": "degraded" } },
|
|
56
|
+
{ "id": "msg_queue", "kind": "card", "lane": "data", "state": "healthy", "title": "Kafka Queue", "subtitle": "Event streaming bus", "weight": 0.75, "sla": 100 }
|
|
57
|
+
],
|
|
58
|
+
"links": [
|
|
59
|
+
{ "id": "l_web_auth", "from": "gw_web", "to": "svc_auth", "state": "healthy" },
|
|
60
|
+
{ "id": "l_mob_auth", "from": "gw_mobile", "to": "svc_auth", "state": "healthy" },
|
|
61
|
+
{ "id": "l_web_cdn", "from": "gw_web", "to": "cdn_edge", "state": "healthy" },
|
|
62
|
+
{ "id": "l_web_ord", "from": "gw_web", "to": "svc_orders", "state": "healthy" },
|
|
63
|
+
{ "id": "l_mob_ord", "from": "gw_mobile", "to": "svc_orders", "state": "healthy" },
|
|
64
|
+
{ "id": "l_web_srch", "from": "gw_web", "to": "svc_search", "state": "healthy" },
|
|
65
|
+
{ "id": "l_web_cat", "from": "gw_web", "to": "svc_catalog", "state": "healthy" },
|
|
66
|
+
{ "id": "l_web_cart", "from": "gw_web", "to": "svc_cart", "state": "healthy" },
|
|
67
|
+
{ "id": "l_cat_price", "from": "svc_catalog", "to": "svc_pricing", "state": "healthy" },
|
|
68
|
+
{ "id": "l_srch_recom", "from": "svc_search", "to": "svc_recom", "state": "healthy" },
|
|
69
|
+
{ "id": "l_ord_pay", "from": "svc_orders", "to": "svc_payments", "state": "healthy" },
|
|
70
|
+
{ "id": "l_ord_inv", "from": "svc_orders", "to": "svc_inventory", "state": "healthy" },
|
|
71
|
+
{ "id": "l_ord_dbo", "from": "svc_orders", "to": "db_orders", "state": "healthy" },
|
|
72
|
+
{ "id": "l_ord_ds", "from": "svc_orders", "to": "ds_group", "state": "healthy" },
|
|
73
|
+
{ "id": "l_pay_dbp", "from": "svc_payments", "to": "db_payments", "state": "healthy" },
|
|
74
|
+
{ "id": "l_inv_dbi", "from": "svc_inventory", "to": "db_inventory", "state": "healthy" },
|
|
75
|
+
{ "id": "l_srch_red", "from": "svc_search", "to": "redis_cache", "state": "healthy" },
|
|
76
|
+
{ "id": "l_cart_red", "from": "svc_cart", "to": "redis_cache", "state": "healthy" },
|
|
77
|
+
{ "id": "l_ord_q", "from": "svc_orders", "to": "msg_queue", "state": "healthy" },
|
|
78
|
+
{ "id": "l_q_notif", "from": "msg_queue", "to": "svc_notif", "state": "healthy" },
|
|
79
|
+
{ "id": "l_q_ship", "from": "msg_queue", "to": "svc_shipping", "state": "healthy" },
|
|
80
|
+
{ "id": "l_q_analy", "from": "msg_queue", "to": "svc_analytics", "state": "healthy" },
|
|
81
|
+
{ "id": "l_pay_audit", "from": "svc_payments", "to": "audit_log", "state": "healthy" },
|
|
82
|
+
{ "id": "l_ord_rcpt", "from": "svc_orders", "to": "end_receipt", "state": "healthy" },
|
|
83
|
+
{ "id": "l_cdn_client", "from": "cdn_edge", "to": "end_client", "state": "healthy" }
|
|
84
|
+
],
|
|
85
|
+
"inspector": {
|
|
86
|
+
"relations": [
|
|
87
|
+
{ "id": "upstream", "label": "Called by", "dir": "up" },
|
|
88
|
+
{ "id": "down", "label": "Calls service", "dir": "down" },
|
|
89
|
+
{ "id": "datastores", "label": "Backing data store", "dir": "down" }
|
|
90
|
+
],
|
|
91
|
+
"actions": [
|
|
92
|
+
{
|
|
93
|
+
"id": "sim_down",
|
|
94
|
+
"label": "Simulate: this is down",
|
|
95
|
+
"dir": "down",
|
|
96
|
+
"staleText": "Target service simulated down. Downstream dependencies entering degraded fallback."
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
"notes": [
|
|
101
|
+
{ "anchor": "#viewport", "title": "Estate topology", "text": "This map visualizes microservice dependencies and traffic weights across operational tiers." },
|
|
102
|
+
{ "anchor": "#n_ds_group", "title": "Backing storage cluster", "text": "Click to expand databases and message buses supporting the core application layer." },
|
|
103
|
+
{ "anchor": "#tools", "title": "Toolbar actions", "text": "Filter nodes by state or use the view switcher to compare nominal and peak loads." },
|
|
104
|
+
{ "anchor": "#inspector", "title": "Dependency inspector", "text": "Select any microservice to trace inbound callers and backing database links." }
|
|
105
|
+
],
|
|
106
|
+
"scenarios": [
|
|
107
|
+
{
|
|
108
|
+
"id": "asset_cache",
|
|
109
|
+
"label": "Static asset fetch",
|
|
110
|
+
"steps": [
|
|
111
|
+
{ "link": "l_web_cdn", "at": 0, "caption": "Web gateway routes request to CDN edge" },
|
|
112
|
+
{ "link": "l_cdn_client", "at": 10, "caption": "Edge cache serves rendered assets to client" }
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "order_checkout",
|
|
117
|
+
"label": "Order checkout",
|
|
118
|
+
"steps": [
|
|
119
|
+
{ "link": "l_web_ord", "at": 0, "caption": "Customer initiates order through web gateway" },
|
|
120
|
+
{ "link": "l_ord_rcpt", "at": 30, "caption": "Orders API confirms order and issues receipt" }
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "peak_surge",
|
|
125
|
+
"label": "Peak surge breach",
|
|
126
|
+
"steps": [
|
|
127
|
+
{ "link": "l_mob_ord", "at": 0, "caption": "Mobile traffic spike reaches ingress gateway" },
|
|
128
|
+
{ "link": "l_ord_q", "at": 110, "caption": "Orders queue depth breaches response SLA threshold" },
|
|
129
|
+
{ "link": "l_q_notif", "at": 130, "caption": "Notification worker dispatches batch alerts" }
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
}
|