docs: fixes from an end-to-end dogfooding run of every runnable doc - #461
Open
weboko wants to merge 27 commits into
Open
docs: fixes from an end-to-end dogfooding run of every runnable doc#461weboko wants to merge 27 commits into
weboko wants to merge 27 commits into
Conversation
Verified against Basecamp 0.2.3 and the ETH<->LEZ swap app 0.4.4 on Linux. - install: the released AppImage is named LogosBasecamp-Desktop-<version>-<commit>-<arch>, so the literal launch command in the doc matched no file; use the downloaded name. Mounting the .dmg is a separate step from dragging the app. - install-and-load-a-module: there is no Modules view. The sidebar is Applications, Package Manager and Settings; module status/CPU/memory and Load/Unload live in Settings > Module Inspector. The local-package button is Install Local Package, and installs go through an Install Package? confirmation listing dependency changes. - swap: the app is 0.4.4 and has six tabs (Market, Swap, History, Sell, Refund, Setup). There is no Config tab, so Step 3 is rewritten as a check against the Market detail pane. Setup has four cards with different button labels, the LEZ HTLC program ID was stale, the Market column is SELLER, and the toolbar button is Manage Repositories. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tools
Ran all four build-modules tutorials end to end on Linux.
- start-a-logos-module-from-the-cli: 'cp -RL ./logos/modules/.' fails because nothing
creates ./logos in the prebuilt-binary flow (that step belongs to the Nix flow in the
delivery-node doc). Dropped it. 'nix build .#lgx' also produces a -dev variant the
released lgpm rejects, so the doc now builds .#lgx-portable. Prose said module_info;
the command is module-info.
- wrap-a-c-library: the 0.2.0 #with-external-lib template scaffolds external_lib_impl.*,
not external_lib_interface.h/_plugin.*, so the rm removed nothing. The info box saying
the template scaffolds a hand-written Qt plugin no longer holds.
- build-a-logos-cpp-ui-module: same problem, the 0.2.0 #ui-qml-backend template scaffolds
ui_example_backend.{h,cpp}.
- build-and-run-a-logos-core-module: the lm methods sample showed doSomething, but the
template exposes greet and getStatus. lgpd registry names are the internal names
(chat_module), and downloads are written as <name>-<version>.lgx. On Linux the Basecamp
data directory is ~/.local/share/Logos/LogosBasecamp, not ~/.config. Added a warning
that .#lgx/.#lgx-portable at the tutorial-v1 pin emit a manifest without content hashes
that lgpm 0.2.1 refuses, with the nix bundle workaround.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
… command Run against the live LEZ testnet with the wallet CLI. - run-lez-wallet-via-cli: the pinned v0.2.1 builds a wallet whose program IDs no longer match the testnet, so "wallet check-health" panics with "Local ID for authenticated transfer program is different from remote". v0.2.4 returns the documented "All looks good!". The transfer step also silently did nothing: sending to a recipient that was never initialised is dropped by the sequencer (chain-info reports "Transaction is None"), so the recipient now gets its own auth-transfer init step. After that the doc's exact numbers appear (113 / 37). Also documented the first-run password prompt and recovery phrase, and the spurious "All pollers failed". - transfer-native-tokens / create-and-transfer-custom-tokens: nine code blocks were wrapped in stray quadruple backticks, so the published pages rendered a literal fence marker inside the block and lost highlighting and the copy button. Also corrected the claim that a transfer initialises an uninitialised recipient - reproduced twice that it does not, and that it fails silently. - trade-tokens-on-lez-amm-program: "wallet config set sequencer_addr" returns "Error: Unknown field" because the address lives inside a sequencers array; "wallet change-network testnet" is the working equivalent. - write-and-deploy-lez-program-with-scaffold: the whole documented flow completed with no container runtime, so Docker/Podman is not an unconditional prerequisite. - set-up-shared-private-lez-account: a wallet holds one sealing key and cannot reprint its public key, so tell the reader to save it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…dshake - run-logos-node-blockchain-storage-delivery: the storage download pinned 2.1.2 against 2.1.0's root hash, so "lgpd download" fails outright; corrected to 2.1.2's hash, which downloads cleanly. The install and verification lines still said 2.1.0. The storage config also used a relative data-dir, which run-logos-storage-node.md explicitly warns against - reproduced with this doc's own layout: the module writes to <base>/storage-data while the directory the doc creates stays empty. - run-a-logos-blockchain-node-from-cli: the headless faucet call returns 403 and an OAuth2 sign-in page, so it cannot be scripted as written. Also aligned the release label with the 0.2.2 peers the doc lists, noted the extra arrays in /network/info, and softened the one-hour bootstrap claim (a real run sat in ProlongedBootstrapPeriod far longer). - send-1-1-messages-logos-chat: the shipped chat_ui 0.2.2 has no intro-bundle handshake. Rewrote Step 2 for the address-based flow (copy your hex address, New chat > Direct message, paste, Create), verified by exchanging messages between two instances. Package names in the catalogue are Chat Module and Chat. - run-logos-storage-node / set-up-and-use-logos-storage-ui: logoscore prints JSON when piped, so the sample outputs were replaced; the Storage category lists one package whose core module comes in as a dependency. - run-logos-delivery-node: added the --config-dir workaround for running a second daemon alongside another guide's. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contradictions and regressions the previous commits left behind:
- swap: Step 2 still promised a Config tab that Step 3 says 0.4.4 removed;
retitle Step 3 (it no longer confirms configuration) and document the red
"Fix validation errors before fetching balances" banner a reader hits there.
- core module: registry install example still said chat_module.lgx one line
after establishing the name is <name>-<version>.lgx.
- storage node: logoscore prints the table when attached to a terminal and
JSON only when piped, so the JSON-only samples showed a reader following
along something they will not see. Restored the table with the real
versions, kept a line about the piped behaviour.
- chat: the intro and What to expect still described the intro-bundle
handshake the Step 2 rewrite removed, and both screenshots showed the old
UI ("Generate Intro Bundle", "+ new", logos-chat-ui checkboxes). Replaced
with the shipped 0.2.3 UI, and reordered Steps 2-3 so no step depends on
the next one.
- custom tokens: `wallet token new --supply-account-id` was offered as a
workaround for the silent-drop bug, but it only claims the supply account
at creation time and cannot fund a second holder. Say what actually works.
- Drop the now-unreferenced modules-icon.png; fix Step 2's heading level.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
|
@weboko Thanks for this! Any way we can get a check like this to run once in a while, like once a month or something? |
…-2026-08 # Conflicts: # docs/basecamp/swap-eth-and-lez-tokens-in-logos-basecamp.md # docs/blockchain/get-started/run-a-logos-blockchain-node-from-cli.md # docs/lez/transfer-tokens/create-and-transfer-custom-tokens-on-the-logos-execution-zone.md # docs/run-a-node/get-started/run-logos-node-blockchain-storage-delivery.md
…age from the branch
… check, and Basecamp dev data directory
…ller-failure note
…logue, offer pane and disabled-accept reason Checked against Basecamp 0.2.3 with swap/swap_ui 0.4.6: - the Package Manager toolbar button is Manage Repositories, not Repositories - installing a package opens Install Package?, not an Add Application window listing Required Packages; that wording predates the current dialogue - the offer detail pane has no Hashlock row. The hashlock derives from the preimage the buyer's own app invents on accept, so it cannot exist before the offer is taken, and the receipt is where it first appears - the disabled Accept button explains itself above the button, and the usual reason is an unfunded Ethereum address, which was not among the examples
…public account creation output - deployment/tui-zone exists only on the tui-zone-tutorial branch, so the documented `cd logos-blockchain/deployment/tui-zone` immediately after a clone fails with No such file or directory. Check out the branch first. The demo link pointed at tree/master/deployment/tui-zone, which 404s, and the claim that master carries a fuller implementation was not true — master has no tui-zone directory at all. - `wallet account new public` prints the account ID and its public key (pk), not the account ID alone.
…ure while running Reproduced twice: after a daemon restart against an existing state directory, `logoscore call blockchain_module start` returns METHOD_FAILED/RPC_FAILED while the node actually comes up, peers with 18-35 nodes and syncs. The existing troubleshooting entry blames an unreachable daemon or an unloaded module, neither of which applies, so the tutorial's happy path reads as a hard failure. Also note that /cryptarchia/info can return 408 under sync load while /network/info answers.
Option A installs Chat 0.2.2 from the Basecamp catalogue while Option B pinned v0.1.0, the oldest tag in logos-chatsdk-ui and older than every published release. The two options therefore ran different apps, and v0.1.0 predates the address-based contact flow that Step 2 now describes.
Both storage guides print `(v)` in the VERSION column of a block presented as literal terminal output, while `lgpm list` actually prints the version number. Since the same step pins `--version 2.1.2` immediately above, a reader comparing their terminal against the doc sees a mismatch. Verified against real output.
logos-scaffold 0.3.0 only partly honours [localnet].port: it writes the value into sequencer_config.json and polls it for readiness, but sequencer_service still binds its --port default of 3040, and .scaffold/wallet/wallet_config.json keeps sequencer_addr at http://127.0.0.1:3040. Verified by setting port = 3055: localnet start still failed with 'Address already in use' against the process on 3040, and after starting the sequencer by hand on 3055 its log stayed empty while deploy and wallet topup both reported success against 3040. That silent cross-talk is the dangerous part, so the warning tells readers to free 3040 rather than to change the port.
…e token `wallet token send` to a brand-new public account is discarded by the sequencer with no error: the hash is printed, chain-info reports `Transaction is None`, the sender balance is unchanged and the recipient stays Uninitialized. Verified the alternatives too. `auth-transfer init` gives the account to the authenticated-transfer program, not the token program, and the send is still discarded. `token mint` against a fresh account is discarded the same way, while minting to the supply account created by `token new` succeeds (1337 -> 1837, included in a block). So a public holding account only ever comes from --supply-account-id, which Step 2 never said.
…fine the swap hashlock note build-and-run-logos-blockchain-node-app-ui showed `curl /cryptarchia/info` returning the flat `mode` object, which is what `logoscore call` returns; the HTTP endpoint nests under cryptarchia_info and names the field `state`, with a top-level `phase`. Verified against a running node. Also corrected the release notes pointer: the notes have no 'testnet bootstrap peers' string to search for, the peers live under the Initialize Your Node section. Refined the swap offer-pane note after checking swap-ui/src/qml/OfferBoard.qml at swap_ui-v0.4.6, as AGENTS.md requires: the Hashlock row does exist but is bound to `visible: hashlock !== ""`, so it appears only for an offer that already carries one rather than being absent outright.
`lm metadata` on a module built from the 0.2.0 template also prints a 'Display name' line and a 'Protocol' line, neither of which appeared in the doc's expected-output block.
… installs Step 1 has you install Blockchain Module v0.2.3, but the Initial peers example was still labelled 'for release 0.2.2'. The addresses themselves are correct — the 0.2.2 and 0.2.3 release notes list an identical peer set — so this only aligns the label with the version the same procedure installs.
'override`flake.nix` at build time' renders as 'overrideflake.nix'.
`wallet account new private-accounts-key` prints the key node's path (for example `/1`) followed by npk and vpk; there is no `chain_index` label in the output for a reader to look for. Also mention the --cci flag, which is the place a chain index is actually supplied.
The vendor step promises to copy the C-binding header and shared library into ./lib, but `find /nix/store -name libp2p.so -path '*cbind*'` matches nothing: the cbind derivation ships `liblibp2p.so`. The header lands and the library does not, silently, so the later `logos_module()` build is missing the library the step said it vendored. Verified against a real build of the module: the only .so under the cbind store path is nim-libp2p-cbind-dev/lib/liblibp2p.so, and the corrected find copies it.
…ed output Step 3's build line targets `example_service_discovery`, which does not exist: cmake fails with 'No rule to make target'. The project's targets are tutorial_0..tutorial_11, so the real one is tutorial_9_service_discovery and the binary lands in build/tutorial/, not build/examples/. The expected-output block described an older program entirely — a 'demo-service' advertisement, 16Uiu2HAk-style peer IDs, 'matched the advertiser', 'Signed XPR is 288 bytes' and a closing 'Done'. The tutorial actually advertises 'demo-chat-service', prints 12D3KooW peer IDs and 'found 1 provider(s)', decodes the XPR rather than reporting its byte size, and ends with '=== Tutorial 9 Complete ==='. Replaced it with a real run's output and noted the libp2p DBG lines that surround it.
The tutorial's own module source does not compile against the current
logos-libp2p-module:
error: no matching function for call to
'Libp2pModule::discoStartAdvertising(const std::string&, const std::string&)'
The generated API takes serviceId, serviceData and an advertisement string, and
the upstream example (tutorial_9_service_discovery.cpp) passes "" for the third.
The inline comment claiming it 'requires BOTH serviceId and serviceData'
reinforced the wrong arity, so it is reworded too.
…core can load The prerequisites install released logoscore 0.2.2, but Step 3 builds both modules with `nix build .#install`, which emits a -dev variant that release refuses: Warning: module 'libp2p_module' ... installed for variant 'linux-amd64-dev' which is not supported on this platform and will not be loadable: supported variants [linux-x86_64, linux-amd64]. Step 4's load-module then fails with MODULE_LOAD_FAILED, so the doc could not work as written. The flake also exposes .#install-portable, which produces variant linux-amd64; verified that both modules then load and the whole Step 4 lifecycle runs (startDiscovery, getPeerInfo, advertise, discover, stopDiscovery). This mirrors the .#lgx vs .#lgx-portable trap already documented for the CLI module tutorial. Also corrected the getPeerInfo sample peer ID, which used a 16Uiu2 prefix while the module emits 12D3KooW.
…ctually is A real three-node run returns `"data":"dmVyc2lvbj0x"`, not `"data":"version=1"` — the service data is base64-encoded in the discover result. The prose said the entry 'carries the serviceData (version=1)', which sends a reader looking for a plaintext value that is not there. Verified: dmVyc2lvbj0x decodes to version=1.
weboko
requested review from
kashepavadan
and removed request for
kashepavadan
September 1, 2026 21:20
Contributor
Author
|
@kashepavadan I put it to be run once a month |
weboko
marked this pull request as ready for review
September 1, 2026 21:21
Contributor
Author
|
@kashepavadan @cheny0 can you review? I clarified some items but still would like someone else to take a look as I am not sure in some parts alternatively, maybe, should I split this PR in couple? pre doc package? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes found by running the runnable docs end to end on a Linux host, as a new user would. Every change is backed by an actual run.
What was executed this pass
Basecamp 0.2.3 driven on a virtual display (package install → Settings → Module Inspector → load); the ETH↔LEZ swap app upgraded to 0.4.6 and taken through catalogue → setup → LEZ activation → live market; the LEZ wallet CLI against the public testnet (init, Piñata claim, transfer, balances); a Logos Blockchain node from the CLI (install → module → config → start → peers → faucet); a storage node (uploaded a file, downloaded Farewell to Westphalia — checksum matched the doc exactly); a six-node Mix network (upload via node 5, download via node 6, SURB path confirmed in the log); a delivery node (live ENR); and a core module built from the template, packaged and called via
logoscore.Repo-wide checks:
docusaurus buildpasses withonBrokenLinks: throw, Vale is clean on all changed files, all 80 referenced GitHub repos resolve, everylogos-module-builderpin and template name exists, and all image references resolve.Fixes in this PR
blockchain/zone-sdk/inscribe-data-on-chain-using-zone-sdkcd logos-blockchain/deployment/tui-zonestraight after cloning fails — that directory exists only on thetui-zone-tutorialbranch. Reproduced on a real clone. The demo link (tree/master/…) 404s and the claim thatmasterholds a fuller implementation is false:masterhas notui-zoneat all.basecamp/swap-eth-and-lez-tokens-…messaging/get-started/send-1-1-messages-logos-chatv0.1.0, the oldest tag inlogos-chatsdk-uiand older than every published release, while Option A installs 0.2.2 from the catalogue — the two options ran different apps, and v0.1.0 predates the address-based flow Step 2 describes.blockchain/get-started/run-a-logos-blockchain-node-from-clistartreturnsMETHOD_FAILED/RPC_FAILEDwhile the node actually comes up and syncs (reproduced twice). The existing troubleshooting entry blames an unreachable daemon or unloaded module, neither of which applies. Also noted/cryptarchia/inforeturning408under sync load while/network/infoanswers.lez/transfer-tokens/transfer-native-tokens-…wallet account new publicprints the account ID and its public key, not the ID alone.lez/programs/write-and-deploy-lez-program-with-scaffold[localnet].portinscaffold.tomllooks like a workaround but isn't: scaffold writes it intosequencer_config.jsonand polls it, while the sequencer binary still binds its--portdefault of 3040 andwallet_config.jsonkeeps pointing at 3040 — sodeployandwallet topupsilently talk to whatever else is on 3040 and report success. Added a warning telling readers to free the port instead.storage/…/run-logos-storage-node,…/run-mix-network-of-storage-nodeslgpm listsample output printed(v)in the VERSION column of a block shown as literal terminal output; the real output prints2.1.2, the very version the step above pins.peer-discovery/…/build-logos-core-module-that-uses-service-discovery-api./lib, butfind /nix/store -name libp2p.so -path '*cbind*'matches nothing — the derivation shipsliblibp2p.so, so the library was silently skipped (findexits 0 either way). The build line targetsexample_service_discovery, which does not exist: cmake fails withNo rule to make target; the real target istutorial_9_service_discovery, and it lands inbuild/tutorial/, notbuild/examples/. And the expected-output block described an older program entirely —demo-service,16Uiu2HAk…peer IDs, "matched the advertiser", "Signed XPR is 288 bytes", "Done". The tutorial's own C++ then fails to compile — it callsdiscoStartAdvertising(serviceId, serviceData)while the generated API takes three arguments (upstream passes""), and the inline comment "requires BOTH" reinforced the wrong arity. Step 3 builds with.#install, which emits alinux-amd64-devvariant that the releasedlogoscorefrom this doc's own prerequisites refuses (MODULE_LOAD_FAILED);.#install-portableis the loadable one. Finally the Step 5 result shows"data":"version=1"where the field is actually base64 (dmVyc2lvbj0x). All corrected against a real build, and the full three-node DHT discovery now runs: the discoverer finds the advertiser on port 9001 knowing only the bootstrap node.lez/transfer-tokens/create-and-transfer-custom-tokens-…wallet token sendto a fresh public account is silently discarded — hash printed,Transaction is None, sender unchanged, recipient stillUninitialized. Verified the alternatives:auth-transfer inithands the account to the wrong program and the send still fails, andtoken mintto a fresh account is discarded too, while minting to the--supply-account-idholder works (1337 → 1837). Added a warning explaining that a public holding account only ever comes from token creation.blockchain/node-app/build-and-run-logos-blockchain-node-app-uicurl /cryptarchia/infosample showed the flatmodeobject — that is thelogoscore callshape; the HTTP endpoint nests undercryptarchia_infowithstateplus a top-levelphase. Also, the release notes contain no "testnet bootstrap peers" string to search for; the peers sit underInitialize Your Node.core/…/wrap-a-c-library-as-a-logos-core-modulelm metadataexpected-output block was missing theDisplay nameandProtocollines the tool actually prints.lez/get-started/run-lez-wallet-via-clilibpcsclite-dev/pcsc-lite-develprerequisite (the wallet pullspcsc-sys, whose build script fails without it) and generalised the poller note:init,pinata claimandsendall printError: All pollers failedand exit non-zero on transactions that settle fine.Plus three small corrections:
wallet account new private-accounts-keyprints the key node'spath(e.g./1), not achain_indexas the private-transfer page claimed; the Basecamp node page labelled its peer example "release 0.2.2" while Step 1 installs 0.2.3 (the addresses are identical in both releases' notes), and a missing space before a code span rendered asoverrideflake.nixin the peer-discovery tutorial.Earlier commits on this branch (module versions and root hashes,
logoscoreconfig key paths, absolutedata-dir, Basecamp Module Inspector wording,module-info, LGX variant guidance) were re-verified against live systems this pass rather than taken on trust.Software issues for the owning teams — not doc bugs
auth-transfer sendprints the hash thenError: All pollers failed(exit 1), while the transfer settles — verified 113→106 / 37→44 with the tx on chain. Any script checking exit status sees a good transfer as failed.blockchain_modulestartreports failure on a node that starts fine (see the doc row above). The documented happy path reads as a hard failure on any restart./cryptarchia/inforeturns HTTP 408 under sync load while/network/inforeturns 200 — this is the endpoint the tutorial tells operators to poll.lgpm0.2.1 rejects packages from thetutorial-v1builder —.#lgxemits a manifest with nohashesblock:Package validation failed: Missing content hashes in manifest. Reproduced; the doc's preferred packaging path is unusable with the tools its own prerequisites install, and thenix bundleworkaround is documented in the meantime.rzup install r0vmfails behind a TLS-inspecting proxy withInvalidCertificate(UnknownIssuer)against api.github.com, where curl/git to the same host succeed.logos-scaffold0.3.0 only partly honours[localnet].port, causing silent cross-talk. Withport = 3055set,localnet startstill failed against the process on 3040; starting the sequencer by hand on 3055 left its log completely empty whiledeploy(5/5 "submitted") andwallet topupboth reported success — they had gone to an unrelated sequencer on 3040. On any shared machine a developer's deploys and faucet claims are submitted to someone else's sequencer and reported as successful.Correction to an earlier claim on this PR: the blockchain faucet backend is not auth-gated.
POST /web/faucet-backend/<key>returns202 {"status":"queued"}today, exactly as documented.Not covered
Run on a shared host with ~1-3 GB of free RAM, which bounds a few things. The risc0 proving path (private/shielded LEZ transfers, the AMM trade) OOMs — the public paths are all verified. The full swap trade needs real Sepolia ETH from a browser PoW faucet. Docker-based flows (the LEZ indexer's local stack) cannot run: no
CAP_SYS_ADMIN. Anything needing a fully-syncedOnlineblockchain node (the faucet balance check, joining Blend as a core node) needs ~1h of sync that restarts lose.Where a GUI step could not be driven I have said so rather than implied coverage: the C++ UI module builds and launches, but clicking Add in its view was not exercised (
nix runOOM-killed); the delivery API module builds, but its two-instance messaging run was not; and the chat and mixnet docs' two-instance message exchanges were not.Thirty of the seventy pages are prose-only — verified by scan to contain no shell blocks and no command lines — so the repo-wide checks above are the meaningful verification for them.