From 62ac19761dd3522ef6bee4006c6de40a4105d3d6 Mon Sep 17 00:00:00 2001 From: dbrosio3 Date: Sun, 28 Jun 2026 20:56:39 -0300 Subject: [PATCH 1/2] Simplify error handling by moving writePushgateError function to cli.ts and removing errors.ts --- bin/pushgate.mjs | 22 ++++++++++------------ docs/architecture/modules.md | 2 +- docs/architecture/overview.md | 2 +- src/cli.ts | 22 +++++++++++++++++++++- src/cli/errors.ts | 21 --------------------- 5 files changed, 33 insertions(+), 36 deletions(-) delete mode 100644 src/cli/errors.ts diff --git a/bin/pushgate.mjs b/bin/pushgate.mjs index 8c7f9c5..2cb2bd9 100755 --- a/bin/pushgate.mjs +++ b/bin/pushgate.mjs @@ -10033,18 +10033,6 @@ async function readSkipBooleanConfig(repoRoot, env, key) { } } -// src/cli/errors.ts -function writePushgateError(stderr, error51) { - if (error51 instanceof ConfigError || error51 instanceof ChangedFilePolicyError || error51 instanceof SkipControlError) { - stderr.write(`[pushgate] ${error51.message} -`); - return; - } - const detail = error51 instanceof Error ? error51.message : String(error51); - stderr.write(`[pushgate] Unexpected Pushgate failure: ${detail} -`); -} - // src/workflows/pre-push.ts import { basename } from "node:path"; @@ -27918,6 +27906,16 @@ function writeUsageError(stderr, message) { ${USAGE} `); } +function writePushgateError(stderr, error51) { + if (error51 instanceof ConfigError || error51 instanceof ChangedFilePolicyError || error51 instanceof SkipControlError) { + stderr.write(`[pushgate] ${error51.message} +`); + return; + } + const detail = error51 instanceof Error ? error51.message : String(error51); + stderr.write(`[pushgate] Unexpected Pushgate failure: ${detail} +`); +} if (isCliEntrypoint()) { void main().then((exitCode) => { process.exitCode = exitCode; diff --git a/docs/architecture/modules.md b/docs/architecture/modules.md index 14b18da..17371cd 100644 --- a/docs/architecture/modules.md +++ b/docs/architecture/modules.md @@ -10,7 +10,7 @@ know. |---|---|---|---| | Hook delegator | Executable Git `pre-push` hook plus hook protocol check | `hook/pre-push` | Small by design. It should stay a delegator. | | Installer | `install.sh [--template name]` | `install.sh`, `templates/*.yml` | Owns runner placement, hook backup, template install, and validation. | -| CLI | `main(argv, io)` and `pushgate` subcommands | `src/cli.ts`, `src/cli/*` | Public command surface for hook use. | +| CLI | `main(argv, io)` and `pushgate` subcommands | `src/cli.ts` | Public command surface for hook use. | | Pre-push workflow | `runPrePushWorkflow(io)` | `src/workflows/pre-push.ts`, `src/workflows/local-push-gate-run.ts`, `src/workflows/pre-push-hook-context.ts` | Owns pre-push context, phase order, and warning confirmation. | | Config | `loadConfig`, `parseConfigYaml`, `PushgateConfig` | `src/config/*`, `schemas/pushgate-config-v2.schema.json` | Converts user YAML into one normalized internal shape. | | Path policy | `resolveChangedFiles`, `selectToolChangedFilePaths` | `src/path-policy/*`, `src/git/*` | Owns Git range, diff parsing, ignore, and live-path semantics. | diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index 7c0c04f..c340523 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -42,7 +42,7 @@ flowchart TD |---|---|---| | Product contract | User workflow, config examples, templates | `README.md`, `templates/*.yml` | | Hook and install | Managed runner placement and thin hook delegation | `install.sh`, `hook/pre-push` | -| CLI and workflow | Command dispatch and pre-push phase order | `src/cli.ts`, `src/cli/*`, `src/workflows/*` | +| CLI and workflow | Command dispatch and pre-push phase order | `src/cli.ts`, `src/workflows/*` | | Configuration | Strict v2 schema, YAML parsing, defaults, provider validation | `src/config/*`, `schemas/pushgate-config-v2.schema.json` | | Path policy | Target-ref resolution, merge-base selection, diff parsing, ignore filtering, named ranges | `src/path-policy/*`, `src/git/*` | | Process execution | Shared child-process mechanics and outcome policy | `src/process/*` | diff --git a/src/cli.ts b/src/cli.ts index d451256..2b8c48f 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,7 +1,9 @@ import { realpathSync } from "node:fs"; import { fileURLToPath } from "node:url"; -import { writePushgateError } from "./cli/errors.js"; +import { ConfigError } from "./config/index.js"; +import { ChangedFilePolicyError } from "./path-policy/index.js"; +import { SkipControlError } from "./skip-controls.js"; import { runPrePushWorkflow, type PrePushWorkflowIO, @@ -67,6 +69,24 @@ function writeUsageError( stderr.write(`${message}\n\n${USAGE}\n`); } +function writePushgateError( + stderr: NodeJS.WritableStream, + error: unknown, +): void { + if ( + error instanceof ConfigError || + error instanceof ChangedFilePolicyError || + error instanceof SkipControlError + ) { + stderr.write(`[pushgate] ${error.message}\n`); + return; + } + + const detail = error instanceof Error ? error.message : String(error); + + stderr.write(`[pushgate] Unexpected Pushgate failure: ${detail}\n`); +} + if (isCliEntrypoint()) { void main().then((exitCode) => { process.exitCode = exitCode; diff --git a/src/cli/errors.ts b/src/cli/errors.ts deleted file mode 100644 index 89f13bd..0000000 --- a/src/cli/errors.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ConfigError } from "../config/index.js"; -import { ChangedFilePolicyError } from "../path-policy/index.js"; -import { SkipControlError } from "../skip-controls.js"; - -export function writePushgateError( - stderr: NodeJS.WritableStream, - error: unknown, -): void { - if ( - error instanceof ConfigError || - error instanceof ChangedFilePolicyError || - error instanceof SkipControlError - ) { - stderr.write(`[pushgate] ${error.message}\n`); - return; - } - - const detail = error instanceof Error ? error.message : String(error); - - stderr.write(`[pushgate] Unexpected Pushgate failure: ${detail}\n`); -} From 9c1884f8a81750b6960389c4d94380e7cd2434d0 Mon Sep 17 00:00:00 2001 From: dbrosio3 Date: Mon, 29 Jun 2026 10:52:44 -0300 Subject: [PATCH 2/2] update diagram --- .../pushgate-big-picture.excalidraw | 804 +++++++++--------- 1 file changed, 419 insertions(+), 385 deletions(-) diff --git a/docs/architecture/pushgate-big-picture.excalidraw b/docs/architecture/pushgate-big-picture.excalidraw index 5894d69..b975aaf 100644 --- a/docs/architecture/pushgate-big-picture.excalidraw +++ b/docs/architecture/pushgate-big-picture.excalidraw @@ -1,49 +1,13 @@ { "type": "excalidraw", "version": 2, - "source": "https://excalidraw.com", + "source": "https://marketplace.visualstudio.com/items?itemName=pomdtr.excalidraw-editor", "elements": [ - { - "id": "title_pushgate_big_picture", - "type": "text", - "x": 40, - "y": 55, - "width": 480, - "height": 40, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "roundness": null, - "seed": 101001, - "version": 1, - "versionNonce": 201001, - "isDeleted": false, - "boundElements": null, - "updated": 1, - "link": null, - "locked": false, - "text": "Pushgate Big-Picture Architecture", - "fontSize": 32, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Pushgate Big-Picture Architecture", - "autoResize": true, - "lineHeight": 1.25 - }, { "id": "box_developer_push", "type": "rectangle", - "x": 40, - "y": 150, + "x": 282.2117456596352, + "y": 154.55422287132683, "width": 170, "height": 90, "angle": 0, @@ -60,19 +24,20 @@ "type": 3 }, "seed": 101002, - "version": 1, - "versionNonce": 201002, + "version": 68, + "versionNonce": 2084266522, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739947535, "link": null, - "locked": false + "locked": false, + "index": "a1" }, { "id": "text_developer_push", "type": "text", - "x": 40, - "y": 169, + "x": 282.2117456596352, + "y": 173.55422287132683, "width": 170, "height": 50, "angle": 0, @@ -87,93 +52,29 @@ "frameId": null, "roundness": null, "seed": 101003, - "version": 1, - "versionNonce": 201003, + "version": 72, + "versionNonce": 2105282266, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739947535, "link": null, "locked": false, "text": "Developer\nruns git push", "fontSize": 20, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Developer\nruns git push", "autoResize": false, - "lineHeight": 1.25 - }, - { - "id": "box_thin_hook", - "type": "rectangle", - "x": 260, - "y": 150, - "width": 190, - "height": 90, - "angle": 0, - "strokeColor": "#495057", - "backgroundColor": "#e9ecef", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "seed": 101004, - "version": 1, - "versionNonce": 201004, - "isDeleted": false, - "boundElements": null, - "updated": 1, - "link": null, - "locked": false - }, - { - "id": "text_thin_hook", - "type": "text", - "x": 260, - "y": 169, - "width": 190, - "height": 50, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "roundness": null, - "seed": 101005, - "version": 1, - "versionNonce": 201005, - "isDeleted": false, - "boundElements": null, - "updated": 1, - "link": null, - "locked": false, - "text": "Thin Git hook\nhook/pre-push", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": null, - "originalText": "Thin Git hook\nhook/pre-push", - "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "a2" }, { "id": "box_runner_workflow", "type": "rectangle", "x": 510, - "y": 135, + "y": 134.23824229153433, "width": 250, "height": 120, "angle": 0, @@ -190,21 +91,22 @@ "type": 3 }, "seed": 101006, - "version": 1, - "versionNonce": 201006, + "version": 4, + "versionNonce": 1247635398, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "a5" }, { "id": "text_runner_workflow", "type": "text", - "x": 510, - "y": 157, - "width": 250, - "height": 68, + "x": 518.2487477573853, + "y": 169.48738529234777, + "width": 235.62998494244425, + "height": 45, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -217,30 +119,31 @@ "frameId": null, "roundness": null, "seed": 101007, - "version": 1, - "versionNonce": 201007, + "version": 76, + "versionNonce": 92696154, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740007453, "link": null, "locked": false, - "text": "Managed runner\nCLI + pre-push workflow\nbin/pushgate.mjs", + "text": "hook/pre-push\ninvokes managed runner", "fontSize": 18, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, - "originalText": "Managed runner\nCLI + pre-push workflow\nbin/pushgate.mjs", + "originalText": "hook/pre-push\ninvokes managed runner", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "a6" }, { "id": "box_config_path_policy", "type": "rectangle", "x": 510, - "y": 330, + "y": 329.23824229153433, "width": 250, - "height": 90, + "height": 52.05902499192098, "angle": 0, "strokeColor": "#495057", "backgroundColor": "#e6fcf5", @@ -255,21 +158,22 @@ "type": 3 }, "seed": 101008, - "version": 1, - "versionNonce": 201008, + "version": 32, + "versionNonce": 719682118, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739998002, "link": null, - "locked": false + "locked": false, + "index": "a7" }, { "id": "text_config_path_policy", "type": "text", - "x": 510, - "y": 349, + "x": 511.52895654342035, + "y": 338.9883272601656, "width": 250, - "height": 50, + "height": 25, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -282,28 +186,29 @@ "frameId": null, "roundness": null, "seed": 101009, - "version": 1, - "versionNonce": 201009, + "version": 34, + "versionNonce": 2035726534, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739994198, "link": null, "locked": false, - "text": "Config + path policy\n.pushgate.yml + git diff", + "text": "configs + diff", "fontSize": 20, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, - "originalText": "Config + path policy\n.pushgate.yml + git diff", + "originalText": "configs + diff", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "a8" }, { "id": "box_deterministic_checks", "type": "rectangle", "x": 830, - "y": 110, + "y": 109.23824229153433, "width": 330, "height": 230, "angle": 0, @@ -320,19 +225,20 @@ "type": 3 }, "seed": 101010, - "version": 1, - "versionNonce": 201010, + "version": 4, + "versionNonce": 738219206, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "a9" }, { "id": "text_deterministic_checks", "type": "text", - "x": 850, - "y": 135, + "x": 851.1426365626985, + "y": 134.23824229153433, "width": 290, "height": 25, "angle": 0, @@ -347,28 +253,29 @@ "frameId": null, "roundness": null, "seed": 101011, - "version": 1, - "versionNonce": 201011, + "version": 11, + "versionNonce": 1334638470, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739870803, "link": null, "locked": false, "text": "Deterministic checks", "fontSize": 20, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Deterministic checks", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aA" }, { "id": "box_check_diff_size", "type": "rectangle", "x": 850, - "y": 180, + "y": 179.23824229153433, "width": 135, "height": 40, "angle": 0, @@ -385,19 +292,20 @@ "type": 3 }, "seed": 101022, - "version": 1, - "versionNonce": 201022, + "version": 4, + "versionNonce": 916085574, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "aB" }, { "id": "text_check_diff_size", "type": "text", - "x": 850, - "y": 190, + "x": 851.1426365626985, + "y": 188.8464811843234, "width": 135, "height": 20, "angle": 0, @@ -412,28 +320,29 @@ "frameId": null, "roundness": null, "seed": 101023, - "version": 1, - "versionNonce": 201023, + "version": 14, + "versionNonce": 1971629018, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739870803, "link": null, "locked": false, "text": "Diff size", "fontSize": 16, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Diff size", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aC" }, { "id": "box_check_secrets_scan", "type": "rectangle", "x": 1005, - "y": 180, + "y": 179.23824229153433, "width": 135, "height": 40, "angle": 0, @@ -450,19 +359,20 @@ "type": 3 }, "seed": 101024, - "version": 1, - "versionNonce": 201024, + "version": 4, + "versionNonce": 843366854, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "aD" }, { "id": "text_check_secrets_scan", "type": "text", - "x": 1005, - "y": 190, + "x": 1005.7617577084657, + "y": 189.23824229153433, "width": 135, "height": 20, "angle": 0, @@ -477,28 +387,29 @@ "frameId": null, "roundness": null, "seed": 101025, - "version": 1, - "versionNonce": 201025, + "version": 10, + "versionNonce": 324015814, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739870803, "link": null, "locked": false, "text": "Secrets scan", "fontSize": 16, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Secrets scan", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aE" }, { "id": "box_check_typecheck", "type": "rectangle", "x": 850, - "y": 240, + "y": 239.23824229153433, "width": 135, "height": 40, "angle": 0, @@ -515,19 +426,20 @@ "type": 3 }, "seed": 101026, - "version": 1, - "versionNonce": 201026, + "version": 4, + "versionNonce": 510101574, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "aF" }, { "id": "text_check_typecheck", "type": "text", - "x": 850, - "y": 250, + "x": 850.7617577084657, + "y": 248.8464811843234, "width": 135, "height": 20, "angle": 0, @@ -542,28 +454,29 @@ "frameId": null, "roundness": null, "seed": 101027, - "version": 1, - "versionNonce": 201027, + "version": 13, + "versionNonce": 443949210, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739870803, "link": null, "locked": false, "text": "Typecheck", "fontSize": 16, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Typecheck", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aG" }, { "id": "box_check_tests", "type": "rectangle", "x": 1005, - "y": 240, + "y": 239.23824229153433, "width": 135, "height": 40, "angle": 0, @@ -580,19 +493,20 @@ "type": 3 }, "seed": 101028, - "version": 1, - "versionNonce": 201028, + "version": 4, + "versionNonce": 1080733382, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "aH" }, { "id": "text_check_tests", "type": "text", "x": 1005, - "y": 250, + "y": 248.8464811843234, "width": 135, "height": 20, "angle": 0, @@ -607,28 +521,29 @@ "frameId": null, "roundness": null, "seed": 101029, - "version": 1, - "versionNonce": 201029, + "version": 11, + "versionNonce": 132992518, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739870803, "link": null, "locked": false, "text": "Tests", "fontSize": 16, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "Tests", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aI" }, { "id": "box_check_more", "type": "rectangle", "x": 927, - "y": 295, + "y": 294.23824229153433, "width": 135, "height": 28, "angle": 0, @@ -645,21 +560,22 @@ "type": 3 }, "seed": 101030, - "version": 1, - "versionNonce": 201030, + "version": 4, + "versionNonce": 599143750, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, - "locked": false + "locked": false, + "index": "aJ" }, { "id": "text_check_more", "type": "text", - "x": 927, - "y": 299, + "x": 927.7617577084657, + "y": 298.23824229153433, "width": 135, - "height": 20, + "height": 21.6, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -672,36 +588,37 @@ "frameId": null, "roundness": null, "seed": 101031, - "version": 1, - "versionNonce": 201031, + "version": 8, + "versionNonce": 319528070, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, "locked": false, "text": "...", "fontSize": 16, - "fontFamily": 5, + "fontFamily": 6, "textAlign": "center", "verticalAlign": "middle", "containerId": null, "originalText": "...", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.35, + "index": "aK" }, { "id": "box_ai_review", "type": "rectangle", "x": 1230, - "y": 150, - "width": 190, - "height": 90, + "y": 129.11695653506274, + "width": 198.7765370268224, + "height": 145.71713524777425, "angle": 0, "strokeColor": "#495057", "backgroundColor": "#d8f5a2", - "fillStyle": "solid", + "fillStyle": "hachure", "strokeWidth": 2, - "strokeStyle": "solid", + "strokeStyle": "dashed", "roughness": 1, "opacity": 100, "groupIds": [], @@ -710,21 +627,22 @@ "type": 3 }, "seed": 101032, - "version": 1, - "versionNonce": 201032, + "version": 53, + "versionNonce": 203605338, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740043102, "link": null, - "locked": false + "locked": false, + "index": "aL" }, { "id": "text_ai_review", "type": "text", - "x": 1230, - "y": 169, - "width": 190, - "height": 50, + "x": 1244.042852139392, + "y": 166.08899732836335, + "width": 167.14865940367287, + "height": 70.46350600994654, "angle": 0, "strokeColor": "#1e1e1e", "backgroundColor": "transparent", @@ -737,30 +655,31 @@ "frameId": null, "roundness": null, "seed": 101033, - "version": 1, - "versionNonce": 201033, + "version": 134, + "versionNonce": 1813276102, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740047370, "link": null, "locked": false, - "text": "AI review\nClaude / Copilot", - "fontSize": 20, - "fontFamily": 5, + "text": "(Optional)\nAI review\nClaude / Copilot", + "fontSize": 18.790268269319068, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, - "originalText": "AI review\nClaude / Copilot", + "originalText": "(Optional)\nAI review\nClaude / Copilot", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aM" }, { "id": "box_verdict", "type": "rectangle", "x": 1480, - "y": 150, + "y": 132.34354454306373, "width": 230, - "height": 90, + "height": 124.4695363080712, "angle": 0, "strokeColor": "#495057", "backgroundColor": "#f1f3f5", @@ -775,19 +694,20 @@ "type": 3 }, "seed": 101012, - "version": 1, - "versionNonce": 201012, + "version": 24, + "versionNonce": 967676998, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740055086, "link": null, - "locked": false + "locked": false, + "index": "aN" }, { "id": "text_verdict", "type": "text", - "x": 1480, - "y": 169, + "x": 1480.7617577084657, + "y": 168.23824229153433, "width": 230, "height": 50, "angle": 0, @@ -802,33 +722,43 @@ "frameId": null, "roundness": null, "seed": 101013, - "version": 1, - "versionNonce": 201013, + "version": 28, + "versionNonce": 190718234, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [ + { + "id": "arrow_verdict_to_remote", + "type": "arrow" + }, + { + "id": "KQZEo-ja0bvZNMKB6N7If", + "type": "arrow" + } + ], + "updated": 1782740122113, "link": null, "locked": false, - "text": "Transcript + verdict\npass / warn / block", + "text": "Process results:\npass / warn / block", "fontSize": 20, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, - "originalText": "Transcript + verdict\npass / warn / block", + "originalText": "Process results:\npass / warn / block", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aO" }, { "id": "box_remote_ci", "type": "rectangle", - "x": 1770, - "y": 150, + "x": 1821.7249272226338, + "y": 67.38221462774456, "width": 220, "height": 90, "angle": 0, - "strokeColor": "#495057", - "backgroundColor": "#fff0f6", + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", "fillStyle": "solid", "strokeWidth": 2, "strokeStyle": "solid", @@ -840,24 +770,25 @@ "type": 3 }, "seed": 101014, - "version": 1, - "versionNonce": 201014, + "version": 72, + "versionNonce": 1681397190, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740128113, "link": null, - "locked": false + "locked": false, + "index": "aP" }, { "id": "text_remote_ci", "type": "text", - "x": 1770, - "y": 169, + "x": 1821.7249272226338, + "y": 86.38221462774456, "width": 220, - "height": 50, + "height": 25, "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", "fillStyle": "solid", "strokeWidth": 2, "strokeStyle": "solid", @@ -867,28 +798,34 @@ "frameId": null, "roundness": null, "seed": 101015, - "version": 1, - "versionNonce": 201015, + "version": 76, + "versionNonce": 726765978, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [ + { + "id": "KQZEo-ja0bvZNMKB6N7If", + "type": "arrow" + } + ], + "updated": 1782740128113, "link": null, "locked": false, - "text": "Git remote + CI\nfinal enforcement", + "text": "Push to remote", "fontSize": 20, - "fontFamily": 5, + "fontFamily": 8, "textAlign": "center", "verticalAlign": "middle", "containerId": null, - "originalText": "Git remote + CI\nfinal enforcement", + "originalText": "Push to remote", "autoResize": false, - "lineHeight": 1.25 + "lineHeight": 1.25, + "index": "aQ" }, { "id": "arrow_push_to_hook", "type": "arrow", - "x": 210, - "y": 195, + "x": 452.2117456596352, + "y": 199.55422287132683, "width": 50, "height": 0, "angle": 0, @@ -905,11 +842,11 @@ "type": 2 }, "seed": 101016, - "version": 1, - "versionNonce": 201016, + "version": 68, + "versionNonce": 327754650, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739947535, "link": null, "locked": false, "points": [ @@ -927,15 +864,16 @@ "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aR" }, { - "id": "arrow_hook_to_runner", + "id": "arrow_config_to_runner", "type": "arrow", - "x": 450, - "y": 195, - "width": 60, - "height": 0, + "x": 635, + "y": 330, + "width": 0, + "height": 75, "angle": 0, "strokeColor": "#495057", "backgroundColor": "transparent", @@ -949,12 +887,12 @@ "roundness": { "type": 2 }, - "seed": 101017, - "version": 1, - "versionNonce": 201017, + "seed": 101018, + "version": 2, + "versionNonce": 173189638, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739748184, "link": null, "locked": false, "points": [ @@ -963,8 +901,8 @@ 0 ], [ - 60, - 0 + 0, + -75 ] ], "lastCommittedPoint": null, @@ -972,15 +910,16 @@ "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aT" }, { - "id": "arrow_config_to_runner", + "id": "arrow_runner_to_gates", "type": "arrow", - "x": 635, - "y": 330, - "width": 0, - "height": -75, + "x": 760, + "y": 194.63000339874526, + "width": 70, + "height": 0, "angle": 0, "strokeColor": "#495057", "backgroundColor": "transparent", @@ -994,12 +933,12 @@ "roundness": { "type": 2 }, - "seed": 101018, - "version": 1, - "versionNonce": 201018, + "seed": 101019, + "version": 3, + "versionNonce": 116413274, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739827686, "link": null, "locked": false, "points": [ @@ -1008,8 +947,8 @@ 0 ], [ - 0, - -75 + 70, + 0 ] ], "lastCommittedPoint": null, @@ -1017,13 +956,14 @@ "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aU" }, { - "id": "arrow_runner_to_gates", + "id": "arrow_deterministic_to_ai", "type": "arrow", - "x": 760, - "y": 195, + "x": 1160, + "y": 194.63000339874526, "width": 70, "height": 0, "angle": 0, @@ -1039,12 +979,12 @@ "roundness": { "type": 2 }, - "seed": 101019, - "version": 1, - "versionNonce": 201019, + "seed": 101020, + "version": 3, + "versionNonce": 1593890842, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739827686, "link": null, "locked": false, "points": [ @@ -1062,14 +1002,15 @@ "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aV" }, { - "id": "arrow_deterministic_to_ai", + "id": "arrow_ai_to_verdict", "type": "arrow", - "x": 1160, - "y": 195, - "width": 70, + "x": 1420, + "y": 194.23824229153433, + "width": 60, "height": 0, "angle": 0, "strokeColor": "#495057", @@ -1084,12 +1025,12 @@ "roundness": { "type": 2 }, - "seed": 101020, - "version": 1, - "versionNonce": 201020, + "seed": 101034, + "version": 4, + "versionNonce": 904017542, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782739831036, "link": null, "locked": false, "points": [ @@ -1098,7 +1039,7 @@ 0 ], [ - 70, + 60, 0 ] ], @@ -1107,15 +1048,16 @@ "endBinding": null, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aW" }, { - "id": "arrow_ai_to_verdict", + "id": "arrow_verdict_to_remote", "type": "arrow", - "x": 1420, - "y": 195, - "width": 60, - "height": 0, + "x": 1710, + "y": 194.23824229153433, + "width": 117.11181579651361, + "height": 81.38173468269662, "angle": 0, "strokeColor": "#495057", "backgroundColor": "transparent", @@ -1129,12 +1071,12 @@ "roundness": { "type": 2 }, - "seed": 101034, - "version": 1, - "versionNonce": 201034, + "seed": 101021, + "version": 30, + "versionNonce": 843197786, "isDeleted": false, - "boundElements": null, - "updated": 1, + "boundElements": [], + "updated": 1782740116446, "link": null, "locked": false, "points": [ @@ -1143,43 +1085,125 @@ 0 ], [ - 60, - 0 + 117.11181579651361, + 81.38173468269662 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, + "startBinding": { + "elementId": "text_verdict", + "focus": -0.7471329430810584, + "gap": 1 + }, + "endBinding": { + "elementId": "kALyER5KQ0iu_esvDIMyA", + "focus": 0, + "gap": 10.638815021180081 + }, "startArrowhead": null, "endArrowhead": "arrow", - "elbowed": false + "elbowed": false, + "index": "aX" }, { - "id": "arrow_verdict_to_remote", + "id": "hG-_UtBmdtviMcbGa0ITs", + "type": "rectangle", + "x": 1828.6680582931028, + "y": 221.09560077672182, + "width": 220, + "height": 90, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 794124294, + "version": 110, + "versionNonce": 904399834, + "isDeleted": false, + "boundElements": [], + "updated": 1782740132179, + "link": null, + "locked": false, + "index": "aY" + }, + { + "id": "kALyER5KQ0iu_esvDIMyA", + "type": "text", + "x": 1828.6680582931028, + "y": 240.09560077672182, + "width": 220, + "height": 25, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 519532358, + "version": 132, + "versionNonce": 89306822, + "isDeleted": false, + "boundElements": [ + { + "id": "arrow_verdict_to_remote", + "type": "arrow" + } + ], + "updated": 1782740132179, + "link": null, + "locked": false, + "text": "Block push", + "fontSize": 20, + "fontFamily": 8, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": null, + "originalText": "Block push", + "autoResize": false, + "lineHeight": 1.25, + "index": "aZ" + }, + { + "id": "KQZEo-ja0bvZNMKB6N7If", "type": "arrow", - "x": 1710, - "y": 195, - "width": 60, - "height": 0, + "x": 1712.1796636793686, + "y": 194.96707777473068, + "width": 103.39201383781779, + "height": 77.92672239766006, "angle": 0, - "strokeColor": "#495057", + "strokeColor": "#1e1e1e", "backgroundColor": "transparent", - "fillStyle": "solid", + "fillStyle": "hachure", "strokeWidth": 2, "strokeStyle": "solid", "roughness": 1, "opacity": 100, "groupIds": [], "frameId": null, + "index": "aa", "roundness": { "type": 2 }, - "seed": 101021, - "version": 1, - "versionNonce": 201021, + "seed": 1560341254, + "version": 35, + "versionNonce": 261421894, "isDeleted": false, "boundElements": null, - "updated": 1, + "updated": 1782740123447, "link": null, "locked": false, "points": [ @@ -1188,21 +1212,31 @@ 0 ], [ - 60, - 0 + 103.39201383781779, + -77.92672239766006 ] ], "lastCommittedPoint": null, - "startBinding": null, - "endBinding": null, + "startBinding": { + "elementId": "text_verdict", + "focus": 0.8011878089397827, + "gap": 1.4179059709028934 + }, + "endBinding": { + "elementId": "text_remote_ci", + "focus": 0.7272696977157177, + "gap": 8.35924869092753 + }, "startArrowhead": null, "endArrowhead": "arrow", "elbowed": false } ], "appState": { - "viewBackgroundColor": "#ffffff", - "gridSize": 20 + "gridSize": 20, + "gridStep": 5, + "gridModeEnabled": false, + "viewBackgroundColor": "#ffffff" }, "files": {} -} +} \ No newline at end of file