{
  "checker": {
    "details": {
      "checks": [
        {
          "check": "install",
          "details": {
            "argv": [
              "npm",
              "run",
              "build"
            ],
            "blocker": "product invocation failed: {\"returncode\": 0, \"stdout\": \"B\\ndist/renderer/assets/remove-background-BXzc9560.js                      23.95 kB \\u2502 gzip:     9.86 kB \\u2502 map:    106.22 kB\\ndist/renderer/assets/astro-JHDYjn39.js                                  24.07 kB \\u2502 gzip:     7.63 kB \\u2502 map:     29.10 kB\\ndist/renderer/assets/fr-BC2onEz9-Dc1KqFHa.js                            24.18 kB \\u2502 gzip:     4.31 kB \\u2502 map:     43.39 kB\\ndist/renderer/assets/agent-model-7YCj_f5Q.js                            24.29 kB \\u2502 gzip:     9.59 kB \\u2502 map:     87.52 kB\\ndist/renderer/assets/StudioWindow-eNmWqXKp.js                           25.41 kB \\u2502 gzip:     8.52 kB \\u2502 map:     63.10 kB\\ndist/renderer/assets/vue-Bg0byEaI.js                                    25.73 kB \\u2502 gzip:     3.24 kB \\u2502 map:     38.44 kB\\ndist/renderer/assets/AutomationsPage-B1FQAXYk.js                        26.20 kB \\u2502 gzip:     8.79 kB \\u2502 map:     77.32 kB\\ndist/renderer/assets/ka-jyoLzyDE-BU45urC7.js                            26.23 kB \\u2502 gzip:     4.46 kB \\u2502 map:     44.42 kB\\ndist/renderer/assets/scss-DHtrkMkT.js                                   27.24 kB \\u2502 gzip:     4.22 kB \\u2502 map:     38.29 kB\\ndist/renderer/assets/be-CrQ0smca-BYVdQd18.js                            27.87 kB \\u2502 gzip:     2.29 kB \\u2502 map:     50.02 kB\\ndist/renderer/assets/model-D-fyIO2A.js                                  28.68 kB \\u2502 gzip:    11.46 kB \\u2502 map:    102.41 kB\\ndist/renderer/assets/views-G922LFAz.js                                  29.00 kB \\u2502 gzip:    10.47 kB \\u2502 map:    113.42 kB\\ndist/renderer/assets/sh-latn-sRy4Tuaj-De-tA-2J.js                       29.61 kB \\u2502 gzip:     5.42 kB \\u2502 map:     54.72 kB\\ndist/renderer/assets/FilesPage-C_YLbEIi.js                              29.94 kB \\u2502 gzip:     9.42 kB \\u2502 map:     78.47 kB\\ndist/renderer/assets/sr-cyrl-Dpzrbd0W-yGc0Jz1j.js                       31.40 kB \\u2502 gzip:     5.66 kB \\u2502 map:     55.17 kB\\ndist/renderer/assets/OfficeWindow-Dd52qPo9.js                           31.40 kB \\u2502 gzip:    11.10 kB \\u2502 map:     83.58 kB\\ndist/renderer/assets/<secret>.js                            31.74 kB \\u2502 gzip:     6.91 kB \\u2502 map:     56.06 kB\\ndist/renderer/assets/filter-run-B4Gsy9rN.js                             31.90 kB \\u2502 gzip:    11.97 kB \\u2502 map:    161.26 kB\\ndist/renderer/assets/decimal-BqzAOtAh.js                                31.99 kB \\u2502 gzip:    12.97 kB \\u2502 map:    189.25 kB\\ndist/renderer/assets/agent-Cc6K73Dp.js                                  32.12 kB \\u2502 gzip:    10.16 kB \\u2502 map:     99.29 kB\\ndist/renderer/assets/sh-cyrl-BpCRFOmq-UY09gie6.js                       32.32 kB \\u2502 gzip:     5.53 kB \\u2502 map:     57.09 kB\\ndist/renderer/assets/agent-H16ylOOK.js                                  33.63 kB \\u2502 gzip:    12.09 kB \\u2502 map:     92.65 kB\\ndist/renderer/assets/gl-DZGc-K_G-D9_oxkqv.js                            33.68 kB \\u2502 gzip:     4.29 kB \\u2502 map:     60.75 kB\\ndist/renderer/assets/ConnectionsPage-DLysLQqD.js                        33.94 kB \\u2502 gzip:    10.90 kB \\u2502 map:     84.22 kB\\ndist/renderer/assets/read-BBjrXKzd.js                                   34.54 kB \\u2502 gzip:    13.20 kB \\u2502 map:    139.65 kB\\ndist/renderer/assets/zones-names-BOTMh4sA.js                            34.80 kB \\u2502 gzip:    12.34 kB \\u2502 map:     81.14 kB\\ndist/renderer/assets/OverviewPage-D2P0iCun.js                           38.38 kB \\u2502 gzip:    11.35 kB \\u2502 map:    107.71 kB\\ndist/renderer/assets/cs-CmAteokq-BI5q4aVA.js                            39.80 kB \\u2502 gzip:    10.10 kB \\u2502 map:     72.26 kB\\ndist/renderer/assets/Markdown-CiDZDb2l.js                               40.90 kB \\u2502 gzip:    13.97 kB \\u2502 map:    272.66 kB\\ndist/renderer/assets/voice-BCdPrB7c.js                                  41.22 kB \\u2502 gzip:    16.48 kB \\u2502 map:    144.14 kB\\ndist/renderer/assets/shellscript-CLZ0U2zV.js                            41.52 kB \\u2502 gzip:     6.12 kB \\u2502 map:     56.48 kB\\ndist/renderer/assets/agent-D2atN716.js                                  43.28 kB \\u2502 gzip:    16.16 kB \\u2502 map:    125.59 kB\\ndist/renderer/assets/es-DcaaHPU_-CnHE1eri.js                            44.17 kB \\u2502 gzip:     6.31 kB \\u2502 map:     80.07 kB\\ndist/renderer/assets/pl-9fg-ESVt-Bv_p-a9x.js                            46.13 kB \\u2502 gzip:     7.82 kB \\u2502 map:     80.05 kB\\ndist/renderer/assets/et-B_spaleu-H7jVbiHv.js                            47.25 kB \\u2502 gzip:    11.62 kB \\u2502 map:     85.35 kB\\ndist/renderer/assets/is-BT8UVRze-DWEBuJpb.js                            48.45 kB \\u2502 gzip:    12.97 kB \\u2502 map:     86.89 kB\\ndist/renderer/assets/shapes-CQHR3ORT.js                                 48.58 kB \\u2502 gzip:    13.92 kB \\u2502 map:     91.38 kB\\ndist/renderer/assets/RoomScene-Dz6UxEyC.js                              48.64 kB \\u2502 gzip:    17.36 kB \\u2502 map:    184.73 kB\\ndist/renderer/assets/css-LbU1hoFO.js                                    49.06 kB \\u2502 gzip:    11.94 kB \\u2502 map:     60.60 kB\\ndist/renderer/assets/agent-CEAk4VG9.js                                  56.33 kB \\u2502 gzip:    20.13 kB \\u2502 map:    174.50 kB\\ndist/renderer/assets/sv-CFm5y56M-DeQDoAsB.js                            56.85 kB \\u2502 gzip:    14.64 kB \\u2502 map:    102.68 kB\\ndist/renderer/assets/bg-CrQqGwni-B5xv6TfF.js                            56.97 kB \\u2502 gzip:     4.76 kB \\u2502 map:    100.86 kB\\ndist/renderer/assets/menus-EJND8bU0.js                                  57.15 kB \\u2502 gzip:    19.19 kB \\u2502 map:    227.67 kB\\ndist/renderer/assets/html-B2cKP6UN.js                                   57.28 kB \\u2502 gzip:    11.78 kB \\u2502 map:     72.95 kB\\ndist/renderer/assets/engine-javascript-DQIjgwkj.js                      57.69 kB \\u2502 gzip:    20.22 kB \\u2502 map:    190.69 kB\\ndist/renderer/assets/markdown-BYOwaDjH.js                               59.37 kB \\u2502 gzip:     5.70 kB \\u2502 map:     82.28 kB\\ndist/renderer/assets/import-itHZKgvy.js                                 61.82 kB \\u2502 gzip:    23.85 kB \\u2502 map:    241.98 kB\\ndist/renderer/assets/commands-vFVqye2C.js                               62.53 kB \\u2502 gzip:    22.67 kB \\u2502 map:    219.38 kB\\ndist/renderer/assets/DocsWindow-DnqNss1p.js                             63.85 kB \\u2502 gzip:    21.10 kB \\u2502 map:    240.27 kB\\ndist/renderer/assets/uk-Dir3oxLs-DGVpthWV.js                            64.03 kB \\u2502 gzip:     8.63 kB \\u2502 map:    109.80 kB\\ndist/renderer/assets/th-DWX5iPSo-CFfNau1h.js                            68.66 kB \\u2502 gzip:    13.17 kB \\u2502 map:    114.48 kB\\ndist/renderer/assets/python-gzcpVVnB.js                                 69.98 kB \\u2502 gzip:     9.13 kB \\u2502 map:     95.19 kB\\ndist/renderer/assets/grc-DOlGgO8T-DANBReIg.js                           71.66 kB \\u2502 gzip:     8.86 kB \\u2502 map:    123.07 kB\\ndist/renderer/assets/model-DNQ942BT.js                                  77.61 kB \\u2502 gzip:    27.87 kB \\u2502 map:    305.45 kB\\ndist/renderer/assets/cy-BBPa6z2x-Cag4snSk.js                            80.24 kB \\u2502 gzip:    19.25 kB \\u2502 map:    144.76 kB\\ndist/renderer/assets/ga-Cn6LkudM-CDuqe3gr.js                            82.11 kB \\u2502 gzip:    20.28 kB \\u2502 map:    145.06 kB\\ndist/renderer/assets/ru-v4l-ayaq-DLdM0nWP.js                            85.00 kB \\u2502 gzip:    17.14 kB \\u2502 map:    144.83 kB\\ndist/renderer/assets/core-1aX5q1Mt.js                                   93.41 kB \\u2502 gzip:    29.46 kB \\u2502 map:    351.71 kB\\ndist/renderer/assets/model-DhrBjttS.js                                  94.79 kB \\u2502 gzip:    32.40 kB \\u2502 map:    343.77 kB\\ndist/renderer/assets/micromark-extension-gfm-Vf8wCYfs.js                95.48 kB \\u2502 gzip:    26.72 kB \\u2502 map:    585.07 kB\\ndist/renderer/assets/SlidesWindow-KcpNI6qM.js                           95.76 kB \\u2502 gzip:    25.92 kB \\u2502 map:    293.54 kB\\ndist/renderer/assets/jszip.min-CMUAYIqb.js                              96.00 kB \\u2502 gzip:    28.54 kB \\u2502 map:    215.88 kB\\ndist/renderer/assets/store-WFkfY5sy.js                                  96.52 kB \\u2502 gzip:    32.90 kB \\u2502 map:    324.24 kB\\ndist/renderer/assets/i18n-Bi-LUMh1.js                                   98.25 kB \\u2502 gzip:    27.93 kB \\u2502 map:    140.67 kB\\ndist/renderer/assets/engine-D5CbTXFF.js                                104.56 kB \\u2502 gzip:    34.30 kB \\u2502 map:    379.61 kB\\ndist/renderer/assets/en-gb-B7Al27b_-COWGBqwJ.js                        105.42 kB \\u2502 gzip:    26.44 kB \\u2502 map:    189.67 kB\\ndist/renderer/assets/lv-Q2BBHnzp-CLjYDJHB.js                           112.72 kB \\u2502 gzip:    16.01 kB \\u2502 map:    212.11 kB\\ndist/renderer/assets/TerminalSurface-bWYobY0Z.js                       119.49 kB \\u2502 gzip:    33.39 kB \\u2502 map:    264.12 kB\\ndist/renderer/assets/SettingsPage-DhWl6e9d.js                          127.96 kB \\u2502 gzip:    37.66 kB \\u2502 map:    369.86 kB\\ndist/renderer/assets/nl-BHQJ6Gvn-8_OIBsy0.js                           138.48 kB \\u2502 gzip:    36.56 kB \\u2502 map:    249.09 kB\\ndist/renderer/assets/CalcWindow-Dp0s-UMh.js                            142.44 kB \\u2502 gzip:    46.73 kB \\u2502 map:    485.16 kB\\ndist/renderer/assets/model-DNnXoOfp.js                                 147.68 kB \\u2502 gzip:    50.53 kB \\u2502 map:    594.33 kB\\ndist/renderer/assets/cu-CBUlrW6Y-BRCy0UAr.js                           168.84 kB \\u2502 gzip:    26.53 kB \\u2502 map:    286.56 kB\\ndist/renderer/assets/javascript-BzbQS41l.js                            174.86 kB \\u2502 gzip:    16.66 kB \\u2502 map:    236.02 kB\\ndist/renderer/assets/tsx-BOvsFOI6.js                                   175.56 kB \\u2502 gzip:    16.65 kB \\u2502 map:    236.69 kB\\ndist/renderer/assets/jsx-Bz0zcwM4.js                                   177.82 kB \\u2502 gzip:    16.75 kB \\u2502 map:    238.95 kB\\ndist/renderer/assets/CanvasWindow-B6GmQfDI.js                          179.36 kB \\u2502 gzip:    54.71 kB \\u2502 map:    586.70 kB\\ndist/renderer/assets/af-DK_CjRn6-CZxsvT2y.js                           179.58 kB \\u2502 gzip:    38.76 kB \\u2502 map:    318.58 kB\\ndist/renderer/assets/typescript-j_1H8WHN.js                            181.11 kB \\u2502 gzip:    16.27 kB \\u2502 map:    244.36 kB\\ndist/renderer/assets/HermesPage-zgDHAqXG.js                            235.86 kB \\u2502 gzip:    72.45 kB \\u2502 map:    885.34 kB\\ndist/renderer/assets/de-ch-1901-hVThVHVb-_Xg3_np3.js                   264.39 kB \\u2502 gzip:    71.37 kB \\u2502 map:    471.99 kB\\ndist/renderer/assets/de-1996-BL6awyxG-BjfWxQKM.js                      266.99 kB \\u2502 gzip:    72.00 kB \\u2502 map:    475.71 kB\\ndist/renderer/assets/de-1901-CWoAOigE-BlgpCKr2.js                      270.09 kB \\u2502 gzip:    72.75 kB \\u2502 map:    481.22 kB\\ndist/renderer/assets/export-LJ5Jn4ui.js                                308.91 kB \\u2502 gzip:   107.51 kB \\u2502 map:    796.97 kB\\ndist/renderer/assets/dist-D5rDAEXt.js                                  328.89 kB \\u2502 gzip:    99.72 kB \\u2502 map:  1,395.89 kB\\ndist/renderer/assets/xterm-mKtjl5O_.js                                 332.43 kB \\u2502 gzip:    83.47 kB \\u2502 map:    678.50 kB\\ndist/renderer/assets/no-B8ItS0F3-Cjg1mxae.js                           341.74 kB \\u2502 gzip:    89.07 kB \\u2502 map:    600.85 kB\\ndist/renderer/assets/nb-DI8u59ch-BfDSp4tN.js                           341.75 kB \\u2502 gzip:    89.08 kB \\u2502 map:    600.89 kB\\ndist/renderer/assets/nn-ntZvarUK-BWT83oy8.js                           341.75 kB \\u2502 gzip:    89.08 kB \\u2502 map:    600.89 kB\\ndist/renderer/assets/write-BAc6Id2J.js                                 457.41 kB \\u2502 gzip:   133.94 kB \\u2502 map:  1,994.67 kB\\ndist/renderer/assets/es-BoWHTINf.js                                    485.93 kB \\u2502 gzip:   153.58 kB \\u2502 map:  2,113.23 kB\\ndist/renderer/assets/live-CRAgrweR.js                                  566.44 kB \\u2502 gzip:   131.85 kB \\u2502 map:  2,261.12 kB\\ndist/renderer/assets/echarts-A_6jy6Zu.js                               574.44 kB \\u2502 gzip:   194.85 kB \\u2502 map:  3,160.52 kB\\ndist/renderer/assets/esm-BgqheGRM.js                                   697.15 kB \\u2502 gzip:   186.28 kB \\u2502 map:  3,220.76 kB\\ndist/renderer/assets/hu-DVk7Y_ka-Ct1fysVO.js                           765.45 kB \\u2502 gzip:   172.52 kB \\u2502 map:  1,382.38 kB\\ndist/renderer/assets/index-CGlCVJpm.js                                 965.56 kB \\u2502 gzip:   298.25 kB \\u2502 map:  3,122.62 kB\\ndist/renderer/assets/comments-CpCiXoyB.js                            1,018.32 kB \\u2502 gzip:   287.55 kB \\u2502 map:  2,342.29 kB\\ndist/renderer/assets/es-BFF72Q6c.js                                  2,379.55 kB \\u2502 gzip:   552.83 kB \\u2502 map:  7,938.07 kB\\ndist/renderer/assets/SheetsWindow-CVy8nq7h.js                        3,819.45 kB \\u2502 gzip: 1,072.14 kB \\u2502 map: 11,626.81 kB\\n\\n\\u2713 built in 23.67s\\n\", \"stderr\": \"[plugin builtin:vite-reporter] \\n(!) Some chunks are larger than 500 kB after minification. Consider:\\n- Using dynamic import() to code-split the application\\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\\n\\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \\u001b[0msrc/features/applications/ApplicationsOverlay.tsx is dynamically imported by src/shell/Desktop.tsx, src/shell/surfaces/MainSurface.tsx but also statically imported by src/shell/surfaces/CommandSurface.tsx, dynamic import will not move module into another chunk.\\n\\n\\u001b[33m[INEFFECTIVE_DYNAMIC_IMPORT] \\u001b[0msrc/shell/surfaces/CommandSurface.tsx is dynamically imported by src/shell/ShellRoot.tsx but also statically imported by src/shell/AskOverlay.tsx, dynamic import will not move module into another chunk.\\n\\n\\n  dist/electron/main.mjs      1.4mb \\u26a0\\ufe0f\\n  dist/electron/main.mjs.map  2.6mb\\n\\n\\u26a1 Done in 292ms\\n\\n  dist/electron/preload.cjs       45.3kb\\n  dist/electron/preload.cjs.map  104.8kb\\n\\n\\u26a1 Done in 5ms\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 0,
            "stderr": "[plugin builtin:vite-reporter] \n(!) Some chunks are larger than 500 kB after minification. Consider:\n- Using dynamic import() to code-split the application\n- Use build.rolldownOptions.output.codeSplitting to improve chunking: https://rolldown.rs/reference/OutputOptions.codeSplitting\n- Adjust chunk size limit for this warning via build.chunkSizeWarningLimit.\n[33m[INEFFECTIVE_DYNAMIC_IMPORT] [0msrc/features/applications/ApplicationsOverlay.tsx is dynamically imported by src/shell/Desktop.tsx, src/shell/surfaces/MainSurface.tsx but also statically imported by src/shell/surfaces/CommandSurface.tsx, dynamic import will not move module into another chunk.\n\n[33m[INEFFECTIVE_DYNAMIC_IMPORT] [0msrc/shell/surfaces/CommandSurface.tsx is dynamically imported by src/shell/ShellRoot.tsx but also statically imported by src/shell/AskOverlay.tsx, dynamic import will not move module into another chunk.\n\n\n  dist/electron/main.mjs      1.4mb \u26a0\ufe0f\n  dist/electron/main.mjs.map  2.6mb\n[excerpt truncated]",
            "stdout": "B\ndist/renderer/assets/remove-background-BXzc9560.js                      23.95 kB \u2502 gzip:     9.86 kB \u2502 map:    106.22 kB\ndist/renderer/assets/astro-JHDYjn39.js                                  24.07 kB \u2502 gzip:     7.63 kB \u2502 map:     29.10 kB\ndist/renderer/assets/fr-BC2onEz9-Dc1KqFHa.js                            24.18 kB \u2502 gzip:     4.31 kB \u2502 map:     43.39 kB\ndist/renderer/assets/agent-model-7YCj_f5Q.js                            24.29 kB \u2502 gzip:     9.59 kB \u2502 map:     87.52 kB\ndist/renderer/assets/StudioWindow-eNmWqXKp.js                           25.41 kB \u2502 gzip:     8.52 kB \u2502 map:     63.10 kB\ndist/renderer/assets/vue-Bg0byEaI.js                                    25.73 kB \u2502 gzip:     3.24 kB \u2502 map:     38.44 kB\ndist/renderer/assets/AutomationsPage-B1FQAXYk.js                        26.20 kB \u2502 gzip:     8.79 kB \u2502 map:     77.32 kB\ndist/renderer/assets/ka-jyoLzyDE-BU45urC7.js                            26.23 kB \u2502 gzip:     4.46 kB \u2502 map:     44.42 kB\ndist/renderer/assets/scss-DHtrkMkT.js                                   27.24 kB \u2502 gzip:     4.22 kB \u2502 map:     38.29 kB\ndist/renderer/assets/be-CrQ0smca-BYVdQd18.js                            27.87 kB \u2502 gzip:     2.29 kB \u2502 map:  \n[excerpt truncated]",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        },
        {
          "check": "credentials_error",
          "details": {
            "argv": [
              "/root/.local/bin/hermes",
              "-z",
              "say hello"
            ],
            "blocker": "product did not produce a clear credential error: {\"returncode\": 1, \"stdout\": \"\", \"stderr\": \"hermes -z: agent failed: Hermes is not connected to any AI provider yet. Run `hermes model` to pick one, type `/login` in chat, or add a key with `hermes auth add <provider>`. (Advanced: put an API key such as OPENROUTER_API_KEY in ~/.hermes/.env.)\\n\", \"needs_credentials\": false, \"needs_browser\": false}",
            "kind": "cli",
            "needs_browser": false,
            "needs_credentials": false,
            "returncode": 1,
            "stderr": "hermes -z: agent failed: Hermes is not connected to any AI provider yet. Run `hermes model` to pick one, type `/login` in chat, or add a key with `hermes auth add <provider>`. (Advanced: put an API key such as OPENROUTER_API_KEY in ~/.hermes/.env.)",
            "stdout": "",
            "working": false
          },
          "optional": false,
          "status": "FAIL"
        }
      ],
      "scope": "partial checks",
      "working": false
    },
    "status": "FAIL"
  },
  "deviations": [
    "npm run build (vite build) was OOM-killed by the 1.8 GB guest (node reached ~1.6 GB RSS, no swap; kernel log: oom-kill node). Fix was guest-side: added a 4 GB /swapfile and ran with NODE_OPTIONS=--max-old-space-size=1200. No repo change.",
    "README Node.js 22.12+ requirement: Ubuntu 24.04 apt ships Node 18.19; installed Node 22.23.3 from nodejs.org instead.",
    "npm run bootstrap: Electron binary download failed (TypeError: fetch failed) on this guest; the script warned and continued. npm run dev would need it and a display.",
    "hermes setup was skipped (no terminal); no provider configured, so hermes -z exits 1 with the provider error."
  ],
  "fault_owner": "prerequisite",
  "main_blocker": "No model provider credentials in the VM, and no display for the Electron shell. Both are prerequisites, not repo defects. Build and bootstrap succeed.",
  "operation": "Build Herald OS desktop (npm run build) and Hermes agent 'say hello' (hermes -z) to confirm the runtime answers; the agent call is the README 'Hermes answers' check. Only the build and the credential-gated failure were exercised.",
  "operation_scope": "Build and Hermes install are complete. The agent operation needs a model provider (Nous Portal sign-in or an API key via 'hermes model' / 'hermes auth add <provider>' / ~/.hermes/.env), which this VM does not have and must not obtain. The Herald OS shell itself (npm run dev) is an Electron GUI that needs a display; this headless guest has none and the Electron binary download failed, so the GUI was not started.",
  "outcome": "blocked",
  "steps": [
    "apt-get install git curl xz-utils build-essential python3-venv python3-pip (prerequisites)",
    "Installed Node.js v22.23.3 from nodejs.org tarball to /usr/local/bin (README needs Node >=22.12; apt ships 18)",
    "npm run bootstrap (README step 3): rc=0; upstream synced, npm workspaces installed, bridge plugin linked into /root/.hermes/plugins; Electron binary download failed (fetch failed), bootstrap continued",
    "npm run build (README Development): rc=0 with 1.5 GB swap added (see deviations)",
    "curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash (README 'macOS' step 1): rc=0; hermes at /root/.local/bin/hermes",
    "bash scripts/bootstrap.sh re-run with Hermes present: rc=0, 'managed install: /root/.hermes/hermes-agent'",
    "hermes -z 'say hello' (README 'hermes doctor'/'hermes' check): rc=1, 'Hermes is not connected to any AI provider yet'"
  ],
  "stuck_step": "README 'Herald OS on macOS from source' step 5 / 'Hermes answers': hermes -z 'say hello' needs a configured AI provider. Also step 4 'npm run dev' needs an Electron binary and a display.",
  "suggested_fix": "Provide a model provider in the VM (e.g. set OPENROUTER_API_KEY in ~/.hermes/.env or run 'hermes auth add <provider>'), then run 'hermes -z \"say hello\"' to get a real answer. For the GUI, run npm run dev on a machine with a display, or under Xvfb with Electron installed. No repo patch is needed; fault_owner is prerequisite, not repo or test."
}
