184 lines
47 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Tutorial Execution Report</title>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<style>
:root {
--bg: #0d1117; --panel: #161b22; --border: #30363d;
--text: #c9d1d9; --muted: #8b949e; --accent: #58a6ff;
--pass: #2ea043; --fail: #f85149; --info: #d29922;
--code-bg: #0b0f14;
}
* { box-sizing: border-box; }
body {
margin: 0; background: var(--bg); color: var(--text);
font: 14px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
header {
position: sticky; top: 0; z-index: 10; background: var(--panel);
border-bottom: 1px solid var(--border); padding: 12px 20px;
display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
}
header h1 { font-size: 16px; margin: 0; font-weight: 600; }
.pill { padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.pill.pass { background: rgba(46,160,67,.15); color: var(--pass); }
.pill.fail { background: rgba(248,81,73,.15); color: var(--fail); }
.pill.skip { background: rgba(210,153,34,.15); color: var(--info); }
select { background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 4px 8px; }
main { max-width: 1600px; margin: 0 auto; padding: 16px; }
.tutorial-title { font-size: 20px; font-weight: 700; margin: 24px 0 8px; color: #fff; }
.row {
display: grid; grid-template-columns: 1fr 1fr; gap: 0;
border: 1px solid var(--border); border-radius: 8px; margin: 10px 0; overflow: hidden;
}
.row.preamble, .row.section { grid-template-columns: 1fr; }
.col { padding: 14px 18px; min-width: 0; }
.col.left { border-right: 1px solid var(--border); }
.row.preamble .col.left, .row.section .col.left { border-right: none; }
.col.right { background: var(--panel); }
/* A row containing any failed step is tinted red end-to-end so it's
impossible to miss when scanning the report. */
.row.has-fail { border-color: var(--fail); box-shadow: 0 0 0 1px var(--fail); }
.row.has-fail .col.left { background: rgba(248,81,73,.07); border-right-color: var(--fail); }
.row.has-fail .col.right { background: rgba(248,81,73,.12); }
.col-label { font-size: 11px; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); margin-bottom: 8px; }
.md :first-child { margin-top: 0; }
.md h1 { font-size: 22px; } .md h2 { font-size: 18px; } .md h3 { font-size: 15px; }
.md pre { background: var(--code-bg); border: 1px solid var(--border); border-radius: 6px; padding: 12px; overflow-x: auto; }
.md code { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; }
.md :not(pre) > code { background: rgba(110,118,129,.2); padding: .15em .4em; border-radius: 4px; }
.md table { border-collapse: collapse; margin: 8px 0; }
.md th, .md td { border: 1px solid var(--border); padding: 5px 10px; }
.md blockquote { border-left: 3px solid var(--border); margin: 8px 0; padding: 2px 12px; color: var(--muted); }
.exec { margin-bottom: 14px; }
.exec:last-child { margin-bottom: 0; }
.exec-head { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.badge { font-size: 11px; font-weight: 700; padding: 1px 8px; border-radius: 4px; }
.badge.pass { background: rgba(46,160,67,.15); color: var(--pass); }
.badge.fail { background: rgba(248,81,73,.15); color: var(--fail); }
.badge.info { background: rgba(210,153,34,.15); color: var(--info); }
.kind { font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.note { color: var(--muted); font-size: 12.5px; margin-bottom: 6px; }
pre.cmd { background: var(--code-bg); border: 1px solid var(--border); border-left: 3px solid var(--accent); border-radius: 6px; padding: 10px 12px; margin: 0 0 6px; overflow-x: auto; white-space: pre-wrap; word-break: break-word; }
pre.output { background: #010409; border: 1px solid var(--border); border-radius: 6px; padding: 10px 12px; margin: 0; overflow-x: auto; max-height: 360px; overflow-y: auto; color: #b9c1ca; }
pre.cmd, pre.output { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12px; line-height: 1.45; }
.empty { color: var(--muted); font-style: italic; font-size: 12.5px; }
details summary { cursor: pointer; color: var(--accent); font-size: 12px; margin-bottom: 4px; }
</style>
</head>
<body>
<header>
<h1>Tutorial Execution Report</h1>
<span id="summary"></span>
<label style="margin-left:auto; font-size:12px; color:var(--muted)">Tutorial
<select id="picker"></select>
</label>
</header>
<main id="main"></main>
<script id="report-data" type="application/json">{"generated_platform": "Darwin", "summary": {"passed": 10, "failed": 13, "skipped": 0}, "tutorials": [{"meta": {"name": "Running This Execution-Zone Module Against logoscore", "platform": "Darwin (ext=dylib)", "release": "(none)"}, "rows": [{"md": "# Running This Execution-Zone Module Against logoscore\n\n`logos-execution-zone` is a Logos `core` module that wraps the\n[Logos execution-zone wallet library](https://github.com/logos-blockchain/lssa)\n(`wallet_ffi`) to provide wallet lifecycle, account management, balance and\nblock queries, transfers, pinata claiming, and account-id encoding. This\ndoc-test exercises **this** execution-zone-module commit end-to-end through the\nheadless `logoscore` runtime:\n\n1. Build the `logoscore` CLI and the `lgpm` local package manager from their\n published flakes. `logoscore` is the headless frontend for `logos-liblogos`,\n so building it brings in the whole module-runtime stack (`logos_host`,\n `liblogos_core`, the IPC layer).\n2. Build **this** execution-zone module as an installable `.lgx` package\n straight from its own flake's `#lgx` output, **pinned to the commit under\n test** \u2014 so the module you run is built from exactly what is checked out\n here, not the latest published release.\n3. Install the `.lgx` into a `./modules` directory with `lgpm`.\n4. Start `logoscore` in daemon mode (`-D`), load `logos_execution_zone`,\n introspect it with `module-info`, and call its wallet-free methods \u2014\n verifying the module actually runs and round-trips real values through\n `wallet_ffi`.\n\nThe methods exercised here \u2014 `name`/`version` and the base58 account-id codec\n(`account_id_to_base58` / `account_id_from_base58`) \u2014 are the module's\ndeterministic, **offline** surface: they need neither an open wallet nor a live\nsequencer, so a green run is reproducible in CI. The stateful operations\n(creating accounts, transfers, sync, pinata claims) require a running\nsequencer and network, and are covered by the module's unit tests (mocked\n`wallet_ffi`) and integration tests (real `wallet_ffi`) instead.\n\nBecause the module is built from the commit under test and then loaded and\ncalled through a real `logoscore` daemon, a green run is real evidence that\nthis change keeps the execution-zone module loadable and callable.\n\n**What you'll build:** This `logos_execution_zone` module, packaged as `.lgx`, installed with `lgpm`, and called through a `logoscore` daemon.\n\n**What you'll learn:**\n\n- How to build the `logoscore` runtime and the `lgpm` package manager from their flakes\n- How a module's flake exposes a ready-to-install `.lgx` via its `#lgx` output\n- How to install an `.lgx` into a modules directory with `lgpm`\n- How to start the `logoscore` daemon, load a module, introspect it, and call its methods\n- How to shut the daemon down and confirm it has exited\n\n## Prerequisites\n\n- **Nix** with flakes enabled. Install from [nixos.org](https://nixos.org/download.html), then enable flakes:\n\n```bash\nmkdir -p ~/.config/nix\necho 'experimental-features = nix-command flakes' >> ~/.config/nix/nix.conf\n```\n\nVerify: `nix flake --help >/dev/null 2>&1 && echo \"Flakes enabled\"`\n\n- **A Linux or macOS machine.**", "execs": []}, {"md": "## Step 1: Build logoscore\n\nBuild the `logoscore` CLI from its published flake. The result is symlinked to\n`./logos/`. `logoscore` is the headless frontend for `logos-liblogos`, so this\none build brings in the whole module-runtime stack the daemon needs.", "execs": []}, {"md": "### 1.1 Build the CLI\n\n```bash\nnix build 'github:logos-co/logos-logoscore-cli' --out-link ./logos\n```\n\nThe build produces `logos/bin/logoscore` plus bundled runtime libraries\nand a `logos/modules/` directory containing the built-in\n`capability_module` (required for the auth handshake when loading\nmodules).", "execs": [{"kind": "run", "cmd": "nix build 'github:logos-co/logos-logoscore-cli' --out-link ./logos", "status": "pass", "exit_code": 0, "output": "unpacking 'github:logos-co/logos-logoscore-cli/859c365ea15acd27cc9acfcebbb092d26d491585' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/f0fe8cbfeb1fe62d934b4abf8c300047a49420c9?narHash=sha256-uCCoJJRVCUUO6j03GO6/02%2BuuLd9GaAi/0dHaiW2bXs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-liblogos/0c0a23db48e7b816ebf356457d9da5f84510072d?narHash=sha256-EoVyFkgOnikgxw2kJK6s09Ys2xmTZvEAcDyyDC6vXfk%3D' into the Git cache...\nunpacking 'github:logos-co/logos-container-subprocess/f4860708a982b361a2e25c5260e13800bcee126e?narHash=sha256-PP/2tFfwrbqTzbZKVl46I96xz/ZZj7hi9C3/QeLHtQE%3D' into the Git cache...\nunpacking 'github:logos-co/logos-container/15adc74f829f0cc662bce4f0bfae917cd50e7db4?narHash=sha256-RJjquPiZz3/LkJaFUGpDxFbt1%2BpaBiVtbbxjVhDMR3o%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-loader-qt/331760de70938e98a8756aaf2cdbe99e763376f2?narHash=sha256-GHyeMvVho8AWDeWb8cKQQLU0dIM0ynsnrJkvS2Q6Ihs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/182d850e722c820b3640a09541d7c469ef79f0e6?narHash=sha256-q1Q2MCax3L1RLfcS40sDStVipK6dhfiPHYk31YeGyUI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-lidl/8c95d4f0cc6a10195c70ed71e85b7a4cddca02f8?narHash=sha256-8l2tE2K5nY1grcFROQHC1By1jVI0NrfkS3k2v2y6R2I%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module/a3e288a71d6f79445db598b0ffcca2ee435596b9?narHash=sha256-Ym3i52f5MWuZy8Qas3%2Bzfoxz%2BmxQUsyW%2BQol1no6kDs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-loader/7ed7a5a97e1ad9142187d755c4ce56ed17d69f18?narHash=sha256-v1eIGPXTnW0oCwEvEjEoBLeoidUh3ZomDGQY9m/ucNw%3D' into the Git cache...\nunpacking 'github:logos-co/logos-protocol/9de4165ab68ece4071647026cb2596bed8a8d7e2?narHash=sha256-j9U4wPlHdN5oA%2B65h1SAo/s2YUHvNYKxij4/pCqEtAs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-qt-sdk/812369213719773f6486755a30c476a699469b37?narHash=sha256-wjbHmczSG8VUMlRkIp3pviVTLPTzReDbIRfBpqnlQr4%3D' into the Git cache...\nunpacking 'github:logos-co/logos-package-manager/8a6b72f28b1e73b6d753eaabe7eba13bf425f04e?narHash=sha256-vHxdyGdW3Ai3/Omspw5drtJXzXyN0TWuCYet95A5h6E%3D' into the Git cache...\nunpacking 'github:logos-co/logos-package/ff93a0df15ceab255f27687d22d962ea2737efbe?narHash=sha256-Cti0DhkzyLQs98BSzcHWMLtGXpa3n%2BR%2B5upfSw6vKdQ%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-appimage/2428125a4a1b34ad9119efa97edb98676283e3da?narHash=sha256-S8IMfdDc%2B2Wwri0krLDsIUwSqmwanmvHAJWHOFo8ykk%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-dir/3d155cab09051703a0b02ff2de166a53c30cbca8?narHash=sha256-HrVJguPxhIoZMCH%2Bx8Wooa0tE6slUhgNOU6P89t2uQc%3D' into the Git cache...\nunpacking 'github:logos-co/process-stats/33ace1270f90c89b3565e803139c0970fcd1ce8f?narHash=sha256-hTVAnDREBQOVHML6KU3K7Ge0CRBqnFIg7uYL7qDnD8o%3D' into the Git cache...\nunpacking 'github:logos-co/logos-qt-sdk/8d0e5d98990261407b50600d886158a1f78e1b1c?narHash=sha256-Z8nAECXYUx4mt0fH9Q9IFpLlAZc%2Bm/Z43GD8mZEIoKE%3D' into the Git cache...\nunpacking 'github:logos-co/logos-test-modules/a410e0518395652e1b16daf0ec3e1baa5a6b5d28?narHash=sha256-sWcmtIOwF9WMpF6JpwO1JymMQ6CObRuUbvdwwej1HTY%3D' into the Git cache...\nunpacking 'github:logos-co/logos-liblogos/2321de0365249e7223cac9ea2ac321fa0a2495c7?narHash=sha256-LvenATy%2B0mzX2jKp%2B4KxB5Uuky3KXnHYy8FX18qSLHs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/25c88f4d48fa95ea4437194bcf60bd8d0cf84a74?narHash=sha256-gbBYvyEDxBHF8iACAE/dFcljBkIUTWr1rP3gBLj62JI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module/194778491ef4dd36967ac40cc2fec6b8a8b1d660?narHash=sha256-ehePoUEd/u3Ng0TvCmjocXYJWWH6P61PA7tNpgV59lo%3D' into the Git cache...\nunpacking 'github:logos-co/logos-package-manager/9101875bc103214855bc6217834e22e66802ed86?narHash=sha256-HMkuqSLdScAWTwXEWjhqx9Yk82GiPzPIfRaHTvjG730%3D' into the Git cache...\nunpacking 'github:logos-co/logos-logoscore-cli/454e0696e9417acaac2c0b6dc1f209b5838c7635?narHash=sha256-GcOMQ8xSSsSHQCx6W59Pk/YEmzbeZQ9YWGH1MaxeTVI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-liblogos/03ffaa379ed22999dafa07ef8da905ef519bfb29?narHash=sha256-BU6lNRaWyyyPdw5M4yF9P0tsX8tLISmB9EIemw6rSSQ%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-client/04cd350d639bcc8d9dcac6133e57e5eacfc2400a?narHash=sha256-hqlxEK1knlm4YtHCgXSKKuwO7RKII0/GIikKNOR5f5g%3D' into the Git cache...\nunpacking 'github:logos-co/logos-test-modules/029d1c37ad988e08fd3e9bfcc0956c78ea7962d1?narHash=sha256-9tFJItLlCW8BebZOfClMD%2BRZC1R8%2BzLkY3JBOPnnU/g%3D' into the Git cache...\nunpacking 'github:logos-co/logos-logoscore-cli/0c0a4a18b1543b5ccb8bc4cd336317a59202f706?narHash=sha256-jsqiS5Xy9%2BlKCBhbSzEr9TJrhcAisCODo0LMfT32kTA%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-appimage/8fcc56b5afcc313ca917cf3487be082ae2f0184c?narHash=sha256-VzzOBZEIuPWaqDf8YgmVW/VbA3POFwLU5qAruMFw/JA%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-dir/4937262f55cf8be942263255dd0801e3e3878bc9?narHash=sha256-lQ/tc/owFa7Yjh8MXe0Fn2GodQXVGmpOZwe5gBEcENA%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-logos-module-install/89cc9ea91275396d589c767d76926459ac77ef20?narHash=sha256-0QH146bzL2kKBYJq2yA35iPwug55j2xjEyKCS7tjhvg%3D' into the Git cache...\nunpacking 'github:logos-co/logos-package-manager/39118d6c52226e88a77c6ff7d1196229f56b757e?narHash=sha256-pU7GShEizE8HkDGvR9NWZPqksiGyvfcWodtFyc318TM%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-lgx/9d8f8602b1574ec9ac4c9b31ae0c92570221c268?narHash=sha256-XbBPcMuDFA/SxYVw9TIRQbhie5Vj5MqwdU%2BGh1iR1LA%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-builder/b0e41abf3e14c0534b41933c5f8e3fc697319037?narHash=sha256-sUGiatEU51cyZeATc3P/8b0myrAkCKavePpFwtkKxAI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-plugin-qt/8c45eca86db8fba8689326c35d0ec8c2b3cdd9a0?narHash=sha256-EGHUsyKaA7IjnBKNysFD62Qlqsd0GyxyhbuYNAS0%2BTg%3D' into the Git cache...\nunpacking 'github:logos-co/logos-standalone-app/a749953e0e9f3d716856d2bd818cd5757aeb065d?narHash=sha256-k05qvbRM2fR7SAEKaElXZNtneWJx/IN/yEx4JMnxv1A%3D' into the Git cache...\nunpacking 'github:logos-co/logos-design-system/f6e95ae24ede3871c380f8250feffd17d173f5a4?narHash=sha256-D6W7oC80cT7pg95kSpxO0jtoVj1hG9A151CciCSZaBc%3D' into the Git cache...\nunpacking 'github:logos-co/logos-test-framework/44816073a437fde4203e140b896e70a387c0678a?narHash=sha256-BINVw7hztdrDkoDSdmnKZes7A15g1SmXKjIHpjZv/3I%3D' into the Git cache...\nunpacking 'github:logos-co/nix-bundle-lgx/3c44d99b9d8dbd8a135b44b5b328e6175650305e?narHash=sha256-HOwg1N4NfGYq579IppVPpVjPDZfYQGndXGlcl1VRXXo%3D' into the Git cache...\nunpacking 'github:logos-co/logos-package/118ccc4efd04eb0c4d541be8db7f1075e014ac39?narHash=sha256-l/tL39ZVNz3nWpE9zWpC/kg11QHSQJ2HHp3W3yv1pNI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-builder/260c755b387cfa973f55236ce4edeba7b7a21e9b?narHash=sha256-5phZWUuzqb3yIygCPIY5hSG6SrvOr0hnk0Zo5Y4X66A%3D' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/eb71a1aa90e05a98814138779680de2ea60a9ff2?narHash=sha256-Z0nOivZhmNWprngIAxx1ZwpZPKH3EvZRTPzr3nTrMgs%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module/780894dd40ebc8eded0fa97b1729286f31571cfb?narHash=sha256-CV7R%2BlwNIP0baXZtE9uNjqu7qDLiANwyGfMkHfTjcl0%3D' into the Git cache...\nunpacking 'github:logos-co/logos-plugin-qt/8f8260e6f9aba54b55bf8cc88ddb673dabb7512b?narHash=sha256-a%2BT5XY7KL1eFREtj4fzdMFnhD9BR8juSg9bQObbMeEQ%3D' into the Git cache...\nunpacking 'github:logos-co/logos-plugin-qt/f58fbaa25acbc547ae2671e2cddcc1517d6643f0?narHash=sha256-QwLWoeYn0yMrldG63dWaH2lqyYFn7qgTi5XFlrgCJSc%3D' into the Git cache...\nunpacking 'github:logos-co/logos-standalone-app/f812b43f73f3c264ee0f8a8354f40721431d6846?narHash=sha256-7IqnkRG1CkOKfiw5qf1o%2BKg9ci%2BMKlcJNXgrg6GyYXk%3D' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/d77c3dd616384addfcc8c5607860466850fdfcf2?narHash=sha256-PfpmvkXyDnQRW0dcnIthGKE17rm5bwm8KLbEqJcm9kM%3D' into the Git cache...\nunpacking 'github:logos-co/logos-design-system/6176f0d7a5dfeb64a7f0f98e7ca2bf71a4804772?narHash=sha256-QSSCCE4eKGiIS5PqHDfk9Lj4VFmeCh18khbFWrGxvvc%3D' into the Git cache...\nunpacking 'github:logos-co/logos-liblogos/be7c8fd8e89e9c7506421735e18dc85bde0c1cb2?narHash=sha256-HKgY1cbcm1BgFau0KBJba0pKGNZ/7oJMcqJMhPDQ20Q%3D' into the Git cache...\nunpacking 'github:logos-co/logos-qt-mcp/c5223b4b640add09e461983b8fddbd12c8b31f4f?narHash=sha256-rebrtH1UxC1hDuwQBwyYbGzNCrnuuqiVL7OvzUhk65k%3D' into the Git cache...\nunpacking 'github:logos-co/logos-view-module-runtime/21dddc380eca36e7e865cf5a437f63e0e16f30d3?narHash=sha256-6NNZG9FTaLRKwJZxtFWySlfiTanh25AmJK5Ru%2BS9HrM%3D' into the Git cache...\nunpacking 'github:logos-co/logos-test-framework/ee081954096f602b47308c6dc7d00fb71d5dcdc7?narHash=sha256-LcZnXuNTCyFQS7rhOHF3sy%2BoF6PNq/H1MLPHch08XrU%3D' into the Git cache...\ncopying path '/nix/store/jc3mfa7ybzh32bkvdj5xiib1vkx8jy6x-source' from 'https://cache.nixos.org'...\nunpacking 'github:logos-co/logos-capability-module/13441afc8e8af8cfd22d6e007c6f46874eac97d9?narHash=sha256-LaQ5EuAVZeW6H2JUaBXtXfke6ZZvsqgE9qfeFueKAHI%3D' into the Git cache...\nunpacking 'github:logos-co/logos-module-builder/fd07679ecfa1b2d8cfdd06799f3e03ed385b57f6?narHash=sha256-u%2BGUBX0Evswa2tRwuUybsiUU%2B7O0wnNh33GJDBwk9ps%3D' into the Git cache...\nunpacking 'github:logos-co/logos-plugin-qt/68090d0a976224ca1c3c606c486a9ac3dd7a4559?narHash=sha256-yDxv9Cv5VEJDVqHz9qYCU3UXv%2BkCIjRoD90A7uGYuGU%3D' into the Git cache...\nunpacking 'github:logos-co/logos-cpp-sdk/f5a127dd11589c8fc6db0a1bd4332d09ac080bb6?narHash=sha256-ZamVbPJxW364RFOa0WnYTJV7AiEjnUcOgfxIbfNgTO0%3D' into the Git cache...\nunpacking 'github:logos-co/logos-capability-module/0013e7653eb1b23d5495e39f149259bd60dc1db4?narHash=sha256-8wFILW1oMS1L77Ff4bcC/5W9dytNe6I1rhf5AHhQW2U%3D' into the Git cache...\nthese 65 paths will be fetched (70.0 MiB download, 547.7 MiB unpacked):\n /nix/store/k385hp16fsc8llfacr3phmmwnlfymdrz-bash-5.3p3\n /nix/store/i0fy7kjl7pn4rbk67cvi1hf332yxydlz-boost-1.87.0\n /nix/store/2blqfsz18yp066ky15nvkihcvwqq7bqz-boost-1.87.0-dev\n /nix/store/vs6s6pyvplqfydn5nc5bc65vk4kl2bam-brotli-1.1.0-lib\n /nix/store/7q428fv2c4hy8qi1sj6n1djgrpc0i5ls-bzip2-1.0.8\n /nix/store/kbq0liixw7m2zwq26sdav41m4blaxdwy-cups-2.4.12-lib\n /nix/store/h02zsqlr12xcvvxqm5pfzs7v7pr23zxv-dns-root-data-2025-04-14\n /nix/store/ryagpsd3yniv3gbsciwykwv6a2lv14l4-double-conversion-3.3.1\n /nix/store/sh3nkingr02ny57qk3wswy1yhcilsaf8-fmt-10.2.1\n /nix/store/fq5vfwngsda7wnc0qfvnb73wx1zw75h6-freetype-2.13.3\n /nix/store/cwdz2vy0kkc17aw2s1b3sw7wspy8rs7j-gettext-0.25.1\n /nix/store/kqldrch5kkd3gli81iyqga4b5xahwayc-glib-2.84.4\n /nix/store/fs5knwhd8fhm7gjj5wq39j5sc5rr15fv-gmp-with-cxx-6.3.0\n /nix/store/8xb4mk3i9hzhdjr7wb8dgpz6pin42afx-gnutls-3.8.10\n /nix/store/lxzs5j6ywzl51jnd093diy1v9i7260rz-icu4c-76.1\n /nix/store/2m9qm23q9pw260raj6gpgbmkabcly0lr-krb5-1.22.1-lib\n /nix/store/qa7ix7a1zzs7w45c7c86d3v4razgsdbr-lgx-lib-0.1.0\n /nix/store/gl76ki4d1zbdr2b0q4rm3r3milypy7vx-libb2-0.98.1\n /nix/store/8qhdaryhrcvz2mfgvhci2j63qa22bjsl-libcxx-19.1.7\n /nix/store/2a46a4y1gzassmm0498ybdhj7i0fkvd9-libevent-2.1.12\n /nix/store/vzzkad9sba320sc46r3bfadxf1z1cg7c-libffi-39\n /nix/store/kd3szgd2rwcysjr9qp1wcv7fz8z6n20n-libiconv-1.17\n /nix/store/clci1zxqwa39qp135b1lfbbwad9qa4g0-libiconv-109\n /nix/store/dlzsiqfwvwz13x3ql8zjjgz16ribdfg1-libidn2-2.3.8\n /nix/store/1hzi3q31h7jr4wlpm8w91h4s90paj2wx-libjpeg-turbo-3.1.1\n /nix/store/3phm5w9qv904sk76q4srxml0b8dc8iqp-libpng-apng-1.6.49\n /nix/store/nq1slnkngwk353qfcfmglw0y8xxs677d-libpq-17.6\n /nix/store/xbpw0yw65al9vrnskqw9zycxlw0r2h1c-libresolv-83\n /nix/store/5gavp9kbhxmxx3zaj7ajblk463432any-libsodium-1.0.20\n /nix/store/287gda10k7lpgij3qjk2rs9k7ridfqzs-libtasn1-4.20.0\n /nix/store/bb660sql9f5ix965g8bwdqarar11v5xc-libunistring-1.3\n /nix/store/d7f41cas0kczsdys7iwxhg9fimmihim8-libxml2-2.14.5\n /nix/store/5ajnwyr3d4p8z14fgp8hbh166cg0wafk-logos-cpp-sdk-headers-0.2.0\n /nix/store/kr6y3ihxr67c8ryq738rm1f4fh05raih-logos-cpp-sdk-lib-0.2.0\n /nix/store/ass8l7zjgx2g7hmb5rr7ig13s0bqz2jq-logos-liblogos\n /nix/store/qx02jqfhgyi7vcgymddp390ffz3s046c-logos-liblogos-bin-0.1.0\n /nix/store/89bapy5k74w61k3gmv5s7mqmp4x2vx70-logos-liblogos-headers-0.1.0\n /nix/store/hsmgbchm3al217dg7567a7zlgvn5s8j2-logos-logoscore-cli\n /nix/store/gzhmkig8qhr4qrmn4f28jjs6dz3zdd0f-logos-logoscore-cli-bin-0.1.0\n /nix/store/0a8p2xxw774w1zjipjzim91sjzbfp0si-logos-module-loader-qt-bin-0.1.0\n /nix/store/mhrc7ixklki7drkz6b4dsg888f3qavv1-logos-module-loader-qt-build-0.1.0\n /nix/store/mxng24nz5c50mrbq0mz7sphlm60fsca8-logos-protocol-lib-0.1.0\n /nix/store/vlwgs24yh1kxlv5p6g4wdm4rbc53qwiq-logos-qt-sdk-lib-0.1.0\n /nix/store/cb4hvwbjrf7q8rq8lfk9gm33f5lx3s68-md4c-0.5.2-lib\n /nix/store/9saar1bhdgvvp0vxk46mzwzpm7vas91v-nettle-3.10.2\n /nix/store/hs7wcady8i97dqq7qiaiaq05srnq6yih-nlohmann_json-3.11.3\n /nix/store/0ais7wnqw8xzj0331c2jka53s6g14wqb-openssl-3.5.1\n /nix/store/bpawzvf8z4yjmwr3zc7haxhv99sl8s2a-openssl-3.5.1-bin\n /nix/store/4fwifkd3zn4m6y7zacyhpwy5frj63knk-openssl-3.5.1-dev\n /nix/store/0c5s1gnq8mr276cb8pk6n4n09q7h5fvn-p11-kit-0.25.5\n /nix/store/9akz133p77hk9dn1q5j66pg5vnz0hj2k-pcre2-10.44\n /nix/store/a9aq909fc6ymnawnk877qcs4gklzm1c1-qtbase-6.9.2\n /nix/store/gga7qy2lhqj6zwq0kg2q0r7mrwjfcrav-qtbase-6.9.2-only-plugins-qml\n /nix/store/fn7iqppsl6z7ikbspxnjirwdz345w8mj-qtdeclarative-6.9.2\n /nix/store/a0z4ipq0hcakknsi5f1icgpdmch3simf-qtremoteobjects-6.9.2\n /nix/store/6mjqccb1hfr5mffqz80icfvh8w0lvqmf-qtsvg-6.9.2\n /nix/store/zl2xd67ccxzn1mkhlxql04qjgs7y4274-qttranslations-6.9.2\n /nix/store/bbz30hcqd2p6g8qp26aq1n58a92203cq-spdlog-1.15.2\n /nix/store/vrhjlpnqn999pk2j95pj9inzxk12dzxg-sqlite-3.50.2\n /nix/store/pzhlz6i8jzjk8fibz51jq9k4bnl0jlpc-unbound-1.23.1-lib\n /nix/store/czicqca5jsi2qq2lah11h1p4abrrga8r-unixODBC-2.3.12\n /nix/store/yj80w3ph1aj452z6bvc4gld85a1393aj-xcbuild-0.1.1-unstable-2019-11-20\n /nix/store/5bqq0ws6akawcx31shp9bl2v1b2jdchv-xz-5.8.1\n /nix/store/nx8r6a40877h1dmb8cm7lhl1ch2yb4jc-zlib-1.3.1\n /nix/store/lik04w1qipzcdpzclr8z44bzm9xfmvii-zstd-1.5.7\ncopying path '/nix/store/8qhdaryhrcvz2mfgvhci2j63qa22bjsl-libcxx-19.1.7' from 'https://cache.nixos.org'...\ncopying path '/nix/store/0ais7wnqw8xzj0331c2jka53s6g14wqb-openssl-3.5.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/k385hp16fsc8llfacr3phmmwnlfymdrz-bash-5.3p3' from 'https://cache.nixos.org'...\ncopying path '/nix/store/vs6s6pyvplqfydn5nc5bc65vk4kl2bam-brotli-1.1.0-lib' from 'https://cache.nixos.org'...\ncopying path '/nix/store/gl76ki4d1zbdr2b0q4rm3r3milypy7vx-libb2-0.98.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/7q428fv2c4hy8qi1sj6n1djgrpc0i5ls-bzip2-1.0.8' from 'https://cache.nixos.org'...\ncopying path '/nix/store/clci1zxqwa39qp135b1lfbbwad9qa4g0-libiconv-109' from 'https://cache.nixos.org'...\ncopying path '/nix/store/xbpw0yw65al9vrnskqw9zycxlw0r2h1c-libresolv-83' from 'https://cache.nixos.org'...\ncopying path '/nix/store/5gavp9kbhxmxx3zaj7ajblk463432any-libsodium-1.0.20' from 'https://cache.nixos.org'...\ncopying path '/nix/store/1hzi3q31h7jr4wlpm8w91h4s90paj2wx-libjpeg-turbo-3.1.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/5ajnwyr3d4p8z14fgp8hbh166cg0wafk-logos-cpp-sdk-headers-0.2.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/cb4hvwbjrf7q8rq8lfk9gm33f5lx3s68-md4c-0.5.2-lib' from 'https://cache.nixos.org'...\ncopying path '/nix/store/9akz133p77hk9dn1q5j66pg5vnz0hj2k-pcre2-10.44' from 'https://cache.nixos.org'...\ncopying path '/nix/store/zl2xd67ccxzn1mkhlxql04qjgs7y4274-qttranslations-6.9.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/5bqq0ws6akawcx31shp9bl2v1b2jdchv-xz-5.8.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/nx8r6a40877h1dmb8cm7lhl1ch2yb4jc-zlib-1.3.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/h02zsqlr12xcvvxqm5pfzs7v7pr23zxv-dns-root-data-2025-04-14' from 'https://cache.nixos.org'...\ncopying path '/nix/store/2a46a4y1gzassmm0498ybdhj7i0fkvd9-libevent-2.1.12' from 'https://cache.nixos.org'...\ncopying path '/nix/store/kd3szgd2rwcysjr9qp1wcv7fz8z6n20n-libiconv-1.17' from 'https://cache.nixos.org'...\ncopying path '/nix/store/vzzkad9sba320sc46r3bfadxf1z1cg7c-libffi-39' from 'https://cache.nixos.org'...\ncopying path '/nix/store/287gda10k7lpgij3qjk2rs9k7ridfqzs-libtasn1-4.20.0' from 'https://cache.nixos.org'...\ncopying path '/nix/store/hs7wcady8i97dqq7qiaiaq05srnq6yih-nlohmann_json-3.11.3' from 'https://cache.nixos.org'...\ncopying path '/nix/store/vrhjlpnqn999pk2j95pj9inzxk12dzxg-sqlite-3.50.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/3phm5w9qv904sk76q4srxml0b8dc8iqp-libpng-apng-1.6.49' from 'https://cache.nixos.org'...\ncopying path '/nix/store/sh3nkingr02ny57qk3wswy1yhcilsaf8-fmt-10.2.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/ryagpsd3yniv3gbsciwykwv6a2lv14l4-double-conversion-3.3.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/fs5knwhd8fhm7gjj5wq39j5sc5rr15fv-gmp-with-cxx-6.3.0' from 'https://cache.nixos.org'...\ncopying path '/nix/store/lxzs5j6ywzl51jnd093diy1v9i7260rz-icu4c-76.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/lik04w1qipzcdpzclr8z44bzm9xfmvii-zstd-1.5.7' from 'https://cache.nixos.org'...\ncopying path '/nix/store/fq5vfwngsda7wnc0qfvnb73wx1zw75h6-freetype-2.13.3' from 'https://cache.nixos.org'...\ncopying path '/nix/store/bbz30hcqd2p6g8qp26aq1n58a92203cq-spdlog-1.15.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/kr6y3ihxr67c8ryq738rm1f4fh05raih-logos-cpp-sdk-lib-0.2.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/9saar1bhdgvvp0vxk46mzwzpm7vas91v-nettle-3.10.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/bb660sql9f5ix965g8bwdqarar11v5xc-libunistring-1.3' from 'https://cache.nixos.org'...\ncopying path '/nix/store/dlzsiqfwvwz13x3ql8zjjgz16ribdfg1-libidn2-2.3.8' from 'https://cache.nixos.org'...\ncopying path '/nix/store/2m9qm23q9pw260raj6gpgbmkabcly0lr-krb5-1.22.1-lib' from 'https://cache.nixos.org'...\ncopying path '/nix/store/pzhlz6i8jzjk8fibz51jq9k4bnl0jlpc-unbound-1.23.1-lib' from 'https://cache.nixos.org'...\ncopying path '/nix/store/bpawzvf8z4yjmwr3zc7haxhv99sl8s2a-openssl-3.5.1-bin' from 'https://cache.nixos.org'...\ncopying path '/nix/store/4fwifkd3zn4m6y7zacyhpwy5frj63knk-openssl-3.5.1-dev' from 'https://cache.nixos.org'...\ncopying path '/nix/store/nq1slnkngwk353qfcfmglw0y8xxs677d-libpq-17.6' from 'https://cache.nixos.org'...\ncopying path '/nix/store/i0fy7kjl7pn4rbk67cvi1hf332yxydlz-boost-1.87.0' from 'https://cache.nixos.org'...\ncopying path '/nix/store/cwdz2vy0kkc17aw2s1b3sw7wspy8rs7j-gettext-0.25.1' from 'https://cache.nixos.org'...\ncopying path '/nix/store/d7f41cas0kczsdys7iwxhg9fimmihim8-libxml2-2.14.5' from 'https://cache.nixos.org'...\ncopying path '/nix/store/czicqca5jsi2qq2lah11h1p4abrrga8r-unixODBC-2.3.12' from 'https://cache.nixos.org'...\ncopying path '/nix/store/yj80w3ph1aj452z6bvc4gld85a1393aj-xcbuild-0.1.1-unstable-2019-11-20' from 'https://cache.nixos.org'...\ncopying path '/nix/store/2blqfsz18yp066ky15nvkihcvwqq7bqz-boost-1.87.0-dev' from 'https://cache.nixos.org'...\ncopying path '/nix/store/kqldrch5kkd3gli81iyqga4b5xahwayc-glib-2.84.4' from 'https://cache.nixos.org'...\ncopying path '/nix/store/0c5s1gnq8mr276cb8pk6n4n09q7h5fvn-p11-kit-0.25.5' from 'https://cache.nixos.org'...\ncopying path '/nix/store/8xb4mk3i9hzhdjr7wb8dgpz6pin42afx-gnutls-3.8.10' from 'https://cache.nixos.org'...\ncopying path '/nix/store/kbq0liixw7m2zwq26sdav41m4blaxdwy-cups-2.4.12-lib' from 'https://cache.nixos.org'...\ncopying path '/nix/store/qa7ix7a1zzs7w45c7c86d3v4razgsdbr-lgx-lib-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/a9aq909fc6ymnawnk877qcs4gklzm1c1-qtbase-6.9.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/gga7qy2lhqj6zwq0kg2q0r7mrwjfcrav-qtbase-6.9.2-only-plugins-qml' from 'https://cache.nixos.org'...\ncopying path '/nix/store/6mjqccb1hfr5mffqz80icfvh8w0lvqmf-qtsvg-6.9.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/fn7iqppsl6z7ikbspxnjirwdz345w8mj-qtdeclarative-6.9.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/mxng24nz5c50mrbq0mz7sphlm60fsca8-logos-protocol-lib-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/vlwgs24yh1kxlv5p6g4wdm4rbc53qwiq-logos-qt-sdk-lib-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/89bapy5k74w61k3gmv5s7mqmp4x2vx70-logos-liblogos-headers-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/a0z4ipq0hcakknsi5f1icgpdmch3simf-qtremoteobjects-6.9.2' from 'https://cache.nixos.org'...\ncopying path '/nix/store/mhrc7ixklki7drkz6b4dsg888f3qavv1-logos-module-loader-qt-build-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/0a8p2xxw774w1zjipjzim91sjzbfp0si-logos-module-loader-qt-bin-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/qx02jqfhgyi7vcgymddp390ffz3s046c-logos-liblogos-bin-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/ass8l7zjgx2g7hmb5rr7ig13s0bqz2jq-logos-liblogos' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/gzhmkig8qhr4qrmn4f28jjs6dz3zdd0f-logos-logoscore-cli-bin-0.1.0' from 'https://logos-co.cachix.org'...\ncopying path '/nix/store/hsmgbchm3al217dg7567a7zlgvn5s8j2-logos-logoscore-cli' from 'https://logos-co.cachix.org'...\n", "note": ""}]}, {"md": "## Step 2: Build the lgpm package manager\n\n`lgpm` installs `.lgx` packages into a modules directory and scans what is\ninstalled. Build it from the `logos-package-manager` flake and link it as\n`./lgpm`.", "execs": []}, {"md": "### 2.1 Build lgpm\n\n```bash\nnix build 'github:logos-co/logos-package-manager#cli' -o lgpm\n```\n\nThe executable is at `./lgpm/bin/lgpm`.", "execs": [{"kind": "run", "cmd": "nix build 'github:logos-co/logos-package-manager#cli' -o lgpm", "status": "pass", "exit_code": 0, "output": "unpacking 'github:logos-co/logos-package-manager/05b2cf853a81cc61d6c6e81b6f2b5ef2a9466c24' into the Git cache...\nthis path will be fetched (266.7 KiB download, 930.4 KiB unpacked):\n /nix/store/hjbalsji7fh3pk3gi6fhgvpgbmnz6jd6-logos-package-manager-cli-1.0.0\ncopying path '/nix/store/hjbalsji7fh3pk3gi6fhgvpgbmnz6jd6-logos-package-manager-cli-1.0.0' from 'https://logos-co.cachix.org'...\n", "note": ""}]}, {"md": "## Step 3: Build and install this execution-zone module\n\nBuild **this** execution-zone module's `.lgx` straight from its flake's\n`#lgx` output and install it into a local `./modules` directory with `lgpm`.\nEvery module built with\n[`logos-module-builder`](https://github.com/logos-co/logos-module-builder)\nexposes a ready-to-install `#lgx`.\n\n> The `` in the URL is what pins the build to a specific commit: the\n> doc-test runner expands it to a concrete ref. Locally that is this\n> checkout's `HEAD` (see `run.sh`); in CI it is the commit being tested. With\n> no pin it falls back to the latest `master`.", "execs": []}, {"md": "### 3.1 Build the module's .lgx\n\nBuild the `#lgx` output and link it as `./lez-lgx`. (This compiles the\nmodule and the `wallet_ffi` library it depends on through Nix, so the\nfirst build is slow.)\n\n```bash\n# From inside the clone this is simply: nix build '.#lgx'\nnix build 'github:logos-blockchain/logos-execution-zone-module/f3e7055753d9b75d310a2a1a066e7171939e2132#lgx' -o lez-lgx\n```\n\nThe `.lgx` package is now under `./lez-lgx/`:\n\n```bash\nls lez-lgx/*.lgx\n```", "execs": [{"kind": "run", "cmd": "nix build 'github:logos-blockchain/logos-execution-zone-module/f3e7055753d9b75d310a2a1a066e7171939e2132#lgx' -o lez-lgx", "status": "fail", "exit_code": 1, "output": "unpacking 'github:logos-blockchain/logos-execution-zone-module/f3e7055753d9b75d310a2a1a066e7171939e2132' into the Git cache...\nerror: syntax error, unexpected '}', expecting ';'\n at \u00abgithub:logos-blockchain/logos-execution-zone-module/f3e7055\u00bb/flake.nix:8:3:\n 7| logos-execution-zone.url = \"github:logos-blockchain/logos-execution-zone\"\n 8| };\n | ^\n 9|\n", "note": "exit code 1"}, {"kind": "run", "cmd": "ls lez-lgx/*.lgx", "status": "fail", "exit_code": 1, "output": "ls: lez-lgx/*.lgx: No such file or directory\n", "note": "exit code 1"}]}, {"md": "### 3.2 Seed the modules directory with the bundled capability module\n\n`logos_execution_zone` is loaded through the host's capability layer, so\nthe modules directory also needs the `capability_module` that ships with\n`logoscore`. Copy it across first.\n\n```bash\nmkdir -p modules\ncp -RL ./logos/modules/. ./modules/\n\n```", "execs": [{"kind": "run", "cmd": "mkdir -p modules\ncp -RL ./logos/modules/. ./modules/\n", "status": "pass", "exit_code": 0, "output": "", "note": ""}]}, {"md": "### 3.3 Install the .lgx with lgpm\n\nInstall the freshly-built package into `./modules`. `logos_execution_zone`\nis a `core` module, so it goes to `--modules-dir`. The package is unsigned\n(a local dev build), so we pass `--allow-unsigned`.\n\n```bash\n./lgpm/bin/lgpm --modules-dir ./modules --allow-unsigned install --file lez-lgx/*.lgx\n```", "execs": [{"kind": "run", "cmd": "./lgpm/bin/lgpm --modules-dir ./modules --allow-unsigned install --file lez-lgx/*.lgx", "status": "fail", "exit_code": 1, "output": "Installing from file: lez-lgx/*.lgx... FAILED\nError: Source plugin file does not exist or is not a file: lez-lgx/*.lgx\n", "note": "exit code 1"}]}, {"md": "### 3.4 Confirm the install\n\nScan the directory and confirm the module landed:\n\n```bash\n./lgpm/bin/lgpm --modules-dir ./modules list\n```", "execs": [{"kind": "run", "cmd": "./lgpm/bin/lgpm --modules-dir ./modules list", "status": "fail", "exit_code": 0, "output": "Found 1 installed module(s):\n\nNAME VERSION TYPE CATEGORY \n----------------------------------------------------------------------\ncapability_module 1.0.0 core security \n", "note": "expected 'logos_execution_zone' not found in output"}]}, {"md": "## Step 4: Run the daemon and call the module\n\nStart `logoscore` in daemon mode pointed at `./modules`, then use the client\nsubcommands to load `logos_execution_zone`, introspect it, and call several\nof its methods. Daemon output is captured in `logs.txt`.", "execs": []}, {"md": "### 4.1 Start the daemon\n\nStart logoscore in daemon mode in the background, capturing output to\n`logs.txt`:\n\n```bash\nlogoscore -D -m ./modules > logs.txt &\n```\n\nThe `-D` flag starts the daemon. The client subcommands below connect to\nthis running process via the config written under `~/.logoscore/`.", "execs": [{"kind": "run", "cmd": "sh -c './logos/bin/logoscore -D -m ./modules > logs.txt 2>&1 &'", "status": "pass", "exit_code": 0, "output": "", "note": ""}]}, {"md": "```bash\nsleep 3\n```", "execs": [{"kind": "run", "cmd": "sleep 3", "status": "pass", "exit_code": 0, "output": "", "note": ""}]}, {"md": "### 4.2 Inspect the startup log\n\nReview the daemon's startup output:\n\n```bash\ncat logs.txt\n```", "execs": [{"kind": "run", "cmd": "cat logs.txt", "status": "pass", "exit_code": 0, "output": "[2026-06-20 18:56:39.402] [warning] [logos] Module capability_module carries no usable logos_protocol_version (pre-protocol build) \u2014 loading permissively\n[2026-06-20 18:56:39.458] [info] [logos] [capability_module] [LogosProviderObject] LogosAPIProvider: detected LogosProviderPlugin for \"capability_module\"\n[2026-06-20 18:56:39.458] [info] [logos] [capability_module] [LogosProviderObject] LogosAPIProvider: registering LogosProviderObject directly for \"capability_module\"\n[2026-06-20 18:56:39.458] [info] [logos] [capability_module] [LogosProviderObject] LogosProviderBase::init called\n[2026-06-20 18:56:39.458] [info] [logos] [capability_module] [LogosProviderObject] ModuleProxy: created, wrapping LogosProviderObject \"capability_module\"\n[2026-06-20 18:56:39.459] [info] [logos] [capability_module] RemoteTransportHost: Created registry host with URL: \"local:logos_capability_module_303592db1f8c\"\n[2026-06-20 18:56:39.459] [info] [logos] [capability_module] RemoteTransportHost: Published object: \"capability_module\"\n[2026-06-20 18:56:39.459] [info] [logos] [capability_module] [LogosProviderObject] LogosAPIProvider: successfully published \"capability_module\"\n[2026-06-20 18:56:39.660] [info] [logos] [capability_module] [LogosProviderObject] Saving token for module: \"capability_module\"\n[2026-06-20 18:56:39.660] [info] [logos] Module loaded: capability_module\nLogoscore daemon started (pid 4967, instance 303592db1f8c)\nDaemon state: /tmp/doctest-test-1d1o58_t/.logoscore/daemon/state.json\nLocal client config: /tmp/doctest-test-1d1o58_t/.logoscore/client/config.json\n", "note": ""}]}, {"md": "### 4.3 Check daemon status\n\nVerify the daemon is running:\n\n```bash\nlogoscore status\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore status", "status": "pass", "exit_code": 0, "output": "{\"daemon\":{\"pid\":4967,\"status\":\"running\",\"version\":\"1.0.0\"},\"modules\":[{\"name\":\"capability_module\",\"status\":\"loaded\"}],\"modules_summary\":{\"crashed\":0,\"loaded\":1,\"not_loaded\":0}}\n", "note": ""}]}, {"md": "### 4.4 List discovered modules\n\n`logos_execution_zone` should be visible in the scan directory:\n\n```bash\nlogoscore list-modules\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore list-modules", "status": "fail", "exit_code": 0, "output": "[{\"name\":\"capability_module\",\"status\":\"loaded\"}]\n", "note": "expected 'logos_execution_zone' not found in output"}]}, {"md": "### 4.5 Load the module\n\nLoad `logos_execution_zone` into the running daemon:\n\n```bash\nlogoscore load-module logos_execution_zone\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore load-module logos_execution_zone", "status": "fail", "exit_code": 3, "output": "{\"code\":\"MODULE_LOAD_FAILED\",\"known_modules\":[\"capability_module\"],\"message\":\"Failed to load module 'logos_execution_zone'.\",\"status\":\"error\"}\n", "note": "exit code 3"}]}, {"md": "### 4.6 Confirm the module is loaded\n\nRe-run `status`; the module that was `not_loaded` before now reports\n`loaded`:\n\n```bash\nlogoscore status\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore status", "status": "fail", "exit_code": 0, "output": "{\"daemon\":{\"pid\":4967,\"status\":\"running\",\"version\":\"1.0.0\"},\"modules\":[{\"name\":\"capability_module\",\"status\":\"loaded\"}],\"modules_summary\":{\"crashed\":0,\"loaded\":1,\"not_loaded\":0}}\n", "note": "expected 'logos_execution_zone' not found in output"}]}, {"md": "### 4.7 Introspect the module with module-info\n\n`module-info` lists the methods the module exposes \u2014 the same methods you\ncan `call`:\n\n```bash\nlogoscore module-info logos_execution_zone\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore module-info logos_execution_zone", "status": "fail", "exit_code": 3, "output": "{\"code\":\"MODULE_NOT_FOUND\",\"message\":\"Module 'logos_execution_zone' not found.\",\"status\":\"error\"}\n", "note": "exit code 3"}]}, {"md": "### 4.8 Read the module name\n\n`name` returns the module's own identifier \u2014 the simplest possible\nround-trip through the loaded plugin over liblogos' IPC:\n\n```bash\nlogoscore call logos_execution_zone name\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore call logos_execution_zone name", "status": "fail", "exit_code": 4, "output": "{\"code\":\"RPC_FAILED\",\"message\":\"callModuleMethod('logos_execution_zone','name') RPC call failed.\",\"status\":\"error\"}\n", "note": "exit code 4"}]}, {"md": "### 4.9 Read the module version\n\n`version` returns the module's semantic version (`1.0.0`), matching\n`metadata.json`:\n\n```bash\nlogoscore call logos_execution_zone version\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore call logos_execution_zone version", "status": "fail", "exit_code": 4, "output": "{\"code\":\"RPC_FAILED\",\"message\":\"callModuleMethod('logos_execution_zone','version') RPC call failed.\",\"status\":\"error\"}\n", "note": "exit code 4"}]}, {"md": "### 4.10 Encode an account id to base58\n\n`account_id_to_base58` takes a 32-byte account id as 64 hex characters\nand returns its base58 form. This is a pure encoding helper in\n`wallet_ffi` \u2014 no open wallet and no network required, so it runs\nentirely offline:\n\n```bash\nlogoscore call logos_execution_zone account_id_to_base58 aaaaaaaa...aaaa # 64 hex chars\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore call logos_execution_zone account_id_to_base58 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "status": "fail", "exit_code": 4, "output": "{\"code\":\"RPC_FAILED\",\"message\":\"callModuleMethod('logos_execution_zone','account_id_to_base58') RPC call failed.\",\"status\":\"error\"}\n", "note": "exit code 4"}]}, {"md": "### 4.11 Round-trip it back to hex\n\n`account_id_from_base58` is the inverse: feed it the base58 string we just\nproduced and it returns the original 64-hex account id. Encoding then\ndecoding the same id and recovering the input is a deterministic,\nend-to-end proof that the codec \u2014 and the IPC path to this module \u2014 work:\n\n```bash\n# Encode, then decode the result back \u2014 the round-trip returns the input.\nB58=$(logoscore call logos_execution_zone account_id_to_base58 aaaa...aaaa)\nlogoscore call logos_execution_zone account_id_from_base58 \"$B58\"\n```", "execs": [{"kind": "run", "cmd": "ENC=$(./logos/bin/logoscore call logos_execution_zone account_id_to_base58 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\nB58=$(printf '%s' \"$ENC\" | sed -n 's/.*\"result\":\"\\([^\"]*\\)\".*/\\1/p')\necho \"encoded: $B58\"\n./logos/bin/logoscore call logos_execution_zone account_id_from_base58 \"$B58\"\n", "status": "fail", "exit_code": 4, "output": "encoded: \n{\"code\":\"RPC_FAILED\",\"message\":\"callModuleMethod('logos_execution_zone','account_id_from_base58') RPC call failed.\",\"status\":\"error\"}\n", "note": "exit code 4"}]}, {"md": "### 4.12 Reject malformed base58\n\nDecoding obvious garbage fails cleanly: `account_id_from_base58` returns\nan empty result rather than crashing the module or the daemon:\n\n```bash\nlogoscore call logos_execution_zone account_id_from_base58 '!!!not-base58!!!'\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore call logos_execution_zone account_id_from_base58 '!!!not-base58!!!'", "status": "fail", "exit_code": 4, "output": "{\"code\":\"RPC_FAILED\",\"message\":\"callModuleMethod('logos_execution_zone','account_id_from_base58') RPC call failed.\",\"status\":\"error\"}\n", "note": "exit code 4"}]}, {"md": "### 4.13 Stop the daemon\n\nShut the daemon down cleanly:\n\n```bash\nlogoscore stop\n```\n\nThe daemon removes its state file and exits.", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore stop", "status": "pass", "exit_code": 0, "output": "{\"message\":\"Daemon shutting down.\",\"status\":\"ok\"}\n", "note": ""}]}, {"md": "```bash\nsleep 2\n```", "execs": [{"kind": "run", "cmd": "sleep 2", "status": "pass", "exit_code": 0, "output": "", "note": ""}]}, {"md": "### 4.14 Confirm the daemon has stopped\n\nWith no daemon running, the client reports `not_running` and exits\nnon-zero, so we add `|| true` to let the doc-test assert on the output:\n\n```bash\nlogoscore status\n```", "execs": [{"kind": "run", "cmd": "./logos/bin/logoscore status || true", "status": "pass", "exit_code": 0, "output": "{\"daemon\":{\"instance_id\":\"303592db1f8c\",\"status\":\"not_running\",\"version\":\"1.0\"},\"modules\":[],\"rpc_error\":\"core_service not reachable\"}\n", "note": ""}]}]}]}</script>
<script>
const DATA = JSON.parse(document.getElementById("report-data").textContent);
if (window.marked) { marked.setOptions({ gfm: true, breaks: false }); }
const mdToHtml = (s) => window.marked ? marked.parse(s || "") : ("<pre>" + (s || "") + "</pre>");
const sum = DATA.summary;
document.getElementById("summary").innerHTML =
`<span class="pill pass">${sum.passed} passed</span> ` +
(sum.failed ? `<span class="pill fail">${sum.failed} failed</span> ` : "") +
(sum.skipped ? `<span class="pill skip">${sum.skipped} skipped</span>` : "");
const picker = document.getElementById("picker");
DATA.tutorials.forEach((t, i) => {
const o = document.createElement("option");
o.value = i; o.textContent = t.meta.name; picker.appendChild(o);
});
function execHtml(e) {
const badge = `<span class="badge ${e.status}">${e.status.toUpperCase()}</span>`;
const kind = `<span class="kind">${e.kind}${e.exit_code !== undefined ? " · exit " + e.exit_code : ""}</span>`;
let h = `<div class="exec"><div class="exec-head">${badge}${kind}</div>`;
if (e.note) h += `<div class="note">${escapeHtml(e.note)}</div>`;
if (e.cmd) h += `<pre class="cmd">${escapeHtml(e.cmd)}</pre>`;
const out = (e.output || "").trim();
if (out) {
const long = out.split("\n").length > 12;
if (long) {
h += `<details><summary>output (${out.split("\n").length} lines)</summary><pre class="output">${escapeHtml(out)}</pre></details>`;
} else {
h += `<pre class="output">${escapeHtml(out)}</pre>`;
}
}
h += `</div>`;
return h;
}
function escapeHtml(s) {
return String(s).replace(/[&<>]/g, c => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;" }[c]));
}
function render(idx) {
const t = DATA.tutorials[idx];
const main = document.getElementById("main");
main.innerHTML = "";
const h = document.createElement("div");
h.className = "tutorial-title";
h.textContent = t.meta.name + " — " + t.meta.platform;
main.appendChild(h);
t.rows.forEach(row => {
const isStructural = row.execs.length === 0 &&
(/^#\s|^##\s/.test(row.md.trim()));
const div = document.createElement("div");
const hasExec = row.execs.length > 0;
const hasFail = row.execs.some(e => e.status === "fail");
div.className = "row" + (hasExec ? "" : (isStructural ? " section" : " preamble")) +
(hasFail ? " has-fail" : "");
const left = document.createElement("div");
left.className = "col left";
left.innerHTML = `<div class="md">${mdToHtml(row.md)}</div>`;
div.appendChild(left);
if (hasExec || !isStructural) {
const right = document.createElement("div");
right.className = "col right";
if (hasExec) {
right.innerHTML = `<div class="col-label">Executed</div>` +
row.execs.map(execHtml).join("");
} else {
right.innerHTML = `<div class="col-label">Executed</div>` +
`<div class="empty">No commands run for this step.</div>`;
}
div.appendChild(right);
}
main.appendChild(div);
});
}
function slug(s) {
return String(s).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
}
function indexFromHash() {
const raw = decodeURIComponent(location.hash.replace(/^#/, ""));
if (!raw) return 0;
if (/^\d+$/.test(raw) && +raw < DATA.tutorials.length) return +raw;
const i = DATA.tutorials.findIndex(
t => slug(t.meta.name) === raw || t.meta.name === raw
);
return i >= 0 ? i : 0;
}
function show(idx) { picker.value = idx; render(idx); }
picker.addEventListener("change", () => {
location.hash = slug(DATA.tutorials[+picker.value].meta.name);
render(+picker.value);
});
window.addEventListener("hashchange", () => show(indexFromHash()));
show(indexFromHash());
</script>
</body>
</html>