fix(antd-go): make 03-files example self-contained and runnable - #91
Merged
Conversation
Replace placeholder /path/to/file.txt and /path/to/output.txt with a real tempfile that is written, uploaded, downloaded back, content- asserted byte-equal, and cleaned up on exit. Mirrors the antd-py 04_files.py reference shape so the example works against a live daemon under `ant dev example all -l go`. Previously crashed with `HTTP 400: Bad request: invalid path` because the daemon correctly rejected the nonexistent path. 01-connect and 02-data audited at the same time — neither has path or filesystem dependencies; both run clean against a live daemon. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 18, 2026
Nic-dorman
added a commit
that referenced
this pull request
May 19, 2026
…ruby/zig (#93) * fix(examples): make 04-files runnable across cpp/rust/elixir/lua/php/ruby/zig The 04-files examples in 7 SDKs were shaped as documentation snippets with hardcoded /tmp/example.txt (or /path/to/myfile.txt) placeholder paths. Against a live daemon, the daemon returns HTTP 400 "Bad request: invalid path" and the example exits 1 (php exits 255 — same root cause, PHP-style uncaught exception). Observed in the dev2 sweep on 2026-05-18. Rewrite each example using the antd-py 04_files.py / antd-go 03-files post-PR-#91 pattern: * Create a real temp directory (language-idiomatic — sys_get_temp_dir in PHP, std::env::temp_dir in Rust, System.tmp_dir in Elixir, std::filesystem::temp_directory_path in C++, Dir.mktmpdir in Ruby, /tmp/antd-... fallback in Lua/Zig). * Write a known file (hello.txt) and a subdir with a known file (mydir/file_in_dir.txt). * Call file_cost on the real path. * Upload + download + assert byte-equal round-trip on hello.txt. * Upload + download + assert byte-equal round-trip on the directory's inner file. * Clean up the temp directory on exit (defer/finally/block-scope). * Exit non-zero with a clear message on assertion failure. Plus: expand the ruby adapter in ant-dev/cmd_example.py to dispatch the existing 04_files.rb and 06_private_data.rb examples — they were on disk but never wired into the runner, so the sweep silently skipped them and "passed" ruby in 5s without running them. Verified end-to-end on dev2 with `ant dev example files -l <lang>` for each of the 7 affected SDKs against `ant dev start --enable-evm`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(examples): trim 04-files to file-only + fix per-SDK signature bugs dev2 sweep on the prior commit surfaced two distinct issues: 1. Directory upload is broken in the daemon. `POST /v1/dirs/upload/public` returns `HTTP 500 Internal error: encryption failed: I/O error: Is a directory (os error 21)` — the daemon attempts encryption on the directory path itself instead of recursing into files. Reproduces in cpp/rust/lua/zig (the SDKs whose new examples exercised this path). File upload/download works correctly on the same temp directory. Daemon fix is its own ticket; the example sidesteps by removing the dir_upload_public / dir_download_public step. 2. Three SDKs had wrong argument counts on `file_cost` in the original stub examples, hidden because the daemon errored at 400 first: * antd-elixir: was `file_cost(client, path, true, false)` (4 args). Function signature is `/3`. Drop the trailing `false`. * antd-ruby: was `file_cost(path, true, false)` (3 args). Signature is `/2`. Drop the trailing `false`. * antd-php: `fileCost()` returns an `UploadCostEstimate` object; printed it with string interpolation, which is a PHP fatal. Use `$cost->cost` and `$cost->chunkCount` properties. What remains in each example: temp dir creation → write hello.txt with known content → file_cost → file_upload_public → file_download_public → read back → assert byte-equal round-trip → cleanup. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Nic-dorman
added a commit
that referenced
this pull request
May 21, 2026
Cuts v0.8.0 atop v0.7.1. Substantial breaking-change roll-up of the put/get rename, the private-file PUT/GET gap close, and several minor surface cleanups -- bundled here so the v1.0 cut can ship stable on top. ## Breaking (antd daemon) - feat(antd)!: bind to 127.0.0.1 by default on REST and gRPC (#107). Previously bound 0.0.0.0; use --bind-rest / --bind-grpc to override. - chore: remove dead graph_entry surface from antd proto + 5 SDKs (#92). GraphService and its 4 RPCs are gone; REST mounts dropped. - chore: remove dir_upload_public / dir_download_public surface (#95). Use file_put_public on a directory path instead; the daemon recurses. - feat(antd)!: normalize put/get convention + close private-file PUT and GET gaps (#115). Method renames across proto + REST + SDKs: data_put_private -> data_put data_get_private -> data_get file_upload_public -> file_put_public file_download_public -> file_get_public New: file_put / file_get for the private file path (previously only the public variant existed). New typed results: DataPutResult, DataPutPublicResult, FilePutResult, FilePutPublicResult; PutResult is now annotated as chunk_put only. ## Additive - feat(antd): honor payment_mode on gRPC put/cost paths and REST cost endpoints (#114). Optional kwarg threaded through every put/cost signature; empty/omitted maps to "auto" so older clients keep working. - feat: external-signer public uploads + single-chunk prepare/finalize across 15 SDKs (#90). - docs+spec: openapi.yaml refreshed for the v1.0 surface, including POST /v1/chunks/prepare and /v1/chunks/finalize for single-chunk external-signer publish (#126). ## SDK fan-out (PaymentMode + put/get convention, all 15) #116 antd-go, #117 antd-py/ruby/elixir, #118 antd-rust, #119 antd-csharp, #120 antd-java, #121 antd-swift, #122 antd-dart, #123 antd-kotlin, #124 antd-cpp, #125 antd-js/php/zig/lua, #127 antd-mcp. ## SDK example + build fixes - fix(antd-go): make 03-files example self-contained and runnable (#91) - fix(examples): make 04-files runnable across cpp/rust/elixir/lua/php/ruby/zig (#93) - fix(examples): runnable dart 04_files + java Example03Files; add java Example03Chunks (#94) - feat: gRPC transport example for antd-py and antd-rust (#113) - feat(antd-py): 07_external_signer example + ant-dev dispatcher entry (#98) - feat(antd-js): 07-external-signer example + antd-py empty-payments fix (#99) - feat(rust/go): 07-external-signer examples (#100) - feat(antd-csharp): 07_external_signer example (#101) - feat(antd-java): 07_external_signer example (#102) - feat(antd-kotlin): 07_external_signer example (#103) - feat(antd-dart): 07_external_signer example (#104) - feat(antd-ruby): 07_external_signer example (#105) - feat(antd-php): 07_external_signer example (#106) - chore(antd-kotlin): drop stale GraphDescendant from local proto copy (#108) ## Docs / infra - docs: external-signer flow reference + ABI + python smoke test (#97) - docs: add SECURITY.md with threat model and disclosure policy (#109) - docs!: refresh per-SDK READMEs + llms-full.txt + openapi.yaml for v1.0 surface (#126) - ci: add Go lint + test + vuln scanning for antd-go (#112) - ci: extend antd-rust to sibling-repo parity (fmt + clippy + audit + doc) (#111) - ci: skip antd/openapi.yaml and llms-full.txt from triggering CI (#128) - chore(scripts): add full-stack + integration sweep helpers (#96) - fix(antd-rust): regenerate Cargo.lock to unbreak --locked CI (#110) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
antd-go/examples/03-files/main.gowas shaped as a documentation snippet rather than a runnable example. It hardcoded:When invoked against a live daemon (e.g. via
ant dev example all -l go), the daemon correctly rejected the nonexistent path withHTTP 400: Bad request: invalid pathand the example exited 1.Change
Rewrite the example to be self-contained, mirroring the
antd-py/examples/04_files.pyreference shape:FileCost→FileUploadPublic→FileDownloadPublicagainst the real path.defer os.RemoveAll).Audited
01-connectand02-dataat the same time — neither has path or filesystem dependencies, both already work against a live daemon, no changes needed.Test plan
go build ./...clean inantd-go/examples/03-files/.01-connectand02-datastill build clean.ant dev start --enable-evm:<tmpdir>/hello.txt.downloadedHello from a file on Autonomi!Out of scope
03_chunks,05_graph,06_private_data) — different ticket, broader cross-SDK coverage work.07_external_signerexample to exercise the new prepare/finalize surface — different ticket.🤖 Generated with Claude Code