Repository navigation
Update links-notation to 0.23.0, use its binary links notation, and fail CI on outdated dependencies unless an open issue holds them back - #107
Merged
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #104
…gin-react to 6.1.2 Rust (rust/ and rust/wasm lock files) and C# (the library and the lino-structure-probe example) move to links-notation 0.23.0. The only dependency cargo update leaves behind is minicov 0.3.8, which wasm-bindgen-test 0.3.79 pins with =0.3.8.
…y links notation
links-notation 0.23.0 ships the binary links notation (packets, the LiNo
mapping and the canonical text form) that link-cli carried as
src/protocol/{packet,mapping,format}.rs. The protocol module now re-exports
links_notation::binary (including the packet module, so
link_cli::protocol::packet keeps working) and keeps only the transport:
framing, detection, server, client and the store archive.
- BinaryError converts into the ProtocolError variant of the same name.
- The text size limit left DecodeLimits upstream; TextLinoProtocol has its own
max_text_bytes and the new ProtocolLimits pairs it with the binary limits
for read_any_document, MessageFormat::protocol and ServerOptions.
- BinaryLinoProtocol::encode checks its limits too, as upstream does.
- Transport tests moved to protocol_transport_tests.rs.
…anifest The dependency check now reads every manifest git tracks (examples and case-study reproductions included), which found the external-range reproduction's Cargo.lock eight updates behind; it is updated and still reproduces. Dependabot watches the same directories, and a policy test keeps the two in sync. A dependency that cannot be updated yet is held back by a comment on its manifest line linking the issue that blocks it (Cargo.toml '#', .csproj '<!-- -->', workflow '#'). The check reads the issue: open means held back (listed, not a failure), closed means outdated again.
…f a copy of binary links notation links-notation 0.23.0 ships the binary links notation that link-cli carried its own copy of (ArityRange, LinksPacket, LinoMapping, LinoFormat, SectionPlanner, LinoStreamReader). The copy is removed; the protocols, server, client and store archive use the upstream codec and PacketReader. Text framing stays link-cli's own, so its size limit moves from DecodeLimits.MaxTextBytes to TextLinoProtocol.MaxTextBytes, and the new ProtocolLimits record carries both budgets. The binary protocol now checks its limits when writing too, so it refuses what its peer would reject. Codec errors still surface as LinoProtocolException with the same kind.
Point the protocol spec, architecture notes and READMEs at the upstream codec instead of the removed copies, document the new defaults (depth 64, string bytes, text limit on the transport) and the dependency hold-back rule, and add the Rust changelog fragment listing the breaking changes.
konard
marked this pull request as ready for review
October 7, 2026 00:49
…comment regexp CodeQL flagged /<!--.*?-->/ (js/bad-tag-filter). Only the text up to the end of the PackageReference line is searched, so the issue URL is taken from it directly.
Member
Author
Working session summaryI've updated PR #107 and marked it ready for review: #107. All CI workflows pass on the latest commit, 6623b0e. Dependencies (R1, R2):
Binary links notation from the upstream package (issue comment):
Rest of the working session summary (2 KB)This summary was automatically extracted from the AI working session output. |
Member
Author
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $8.474493📊 Context and tokens usage:Claude Opus 5.5: (3 sub-sessions)
Total: (14.6K new + 448.4K cache writes + 13.3M cache reads) input tokens, 128.8K output tokens, $8.474493 cost 🤖 Models used:
📎 Log file uploaded as Gist (5406KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
Member
Author
🎉 Auto-mergedThis pull request has been automatically merged by hive-mind.
Auto-merged by hive-mind with --auto-merge flag |
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.
Closes #104.
Every dependency in the repository is now on its latest release. Both ports take binary links notation from
links-notation0.23.0 instead of carrying their own copy, as the issue comment asked. TheDependenciesworkflow now checks every manifest git tracks, and it holds a dependency back only while a linked issue is open.Dependency updates
links-notationrust/Cargo.toml,rust/wasm(lock)Link.Foundation.Links.Notationcsharp/…Library.csproj,examples/lino-structure-probevitejs/package.json@vitejs/plugin-reactjs/package.jsonbitflags,cfg-if,libc,rustix,syn,thiserror,thiserror-impl,unicode-identdocs/case-studies/issue-100/evidence/external-range/rust/Cargo.lockThe issue was opened at 0.16.1 → 0.22.0.
mainreached 0.22.0 in #106, and 0.23.0 has been released since. The case-study lock file was stale because the old check read only the three project directories. Its reproduction still printsReproducedafter the update.After
cargo update,cargo update --dry-runprints noUpdatinglines inrust/,rust/wasm/or the case-study crate.minicovstays at 0.3.8 becausewasm-bindgen-testpins it with=0.3.8.cargo update --dry-runreports it asUnchanged, notUpdating.Binary links notation from
links-notation(issue comment)links-notation0.23.0 ships the binary links notation that #105 introduced here:links_notation::binaryin Rust andLink.Foundation.Links.Notation.Binaryin C#. Upstream provides everything link-cli needs, so the copies are deleted:rust/src/protocol/{packet,mapping,format}.rs.Protocol/{ArityRange,LinksPacket,LinoMapping,LinoFormat,SectionPlanner,LinoStreamReader}.cs.Together that is about 1 700 lines in C# and the matching Rust modules.
link-cli keeps only the transport around the notation. The text framing, protocol detection,
LinksServer/LinksClient,RemoteLinksand the store archive (--export-binary/--import-binary) all use the upstream codec.Evidence that nothing was lost:
docs/protocol/binary-links-notation-vectors.txtstill pass byte for byte in both ports (84 documents × 12 option sets, plus raw packets).examples/tcp/run-interop.sh,examples/tcp/run-interop.sh csharpandexamples/archive/run-interop.shpass. Rust and C# servers, clients and archives still interoperate.Breaking changes
These are released as major in both ports.
encode_document,decode_document,parse_document,LinksPacket::from_bytes/read_fromreturnProtocolErrorBinaryError. Every protocol, server, client and archive function still returnsProtocolError, andFrom<BinaryError>keeps the kind and messageFoundation.Data.Doublets.Cli.Protocol.{LinksPacket, ArityRange, DecodeLimits, LinoMapping, LinoFormat, …}Link.Foundation.Links.Notation.Binary.*.LinoStreamReaderbecomesPacketReader. The protocols still throw onlyLinoProtocolException, with the codec exception asInnerExceptionDecodeLimits::max_text_bytes/DecodeLimits.MaxTextBytesTextLinoProtocol::max_text_bytes/TextLinoProtocol.MaxTextBytes(64 MiB). Framing text is transport, not notationDecodeLimitsinServerOptions::limits,read_any_document,MessageFormat::protocol(and the C# equivalents)ProtocolLimits { binary, max_text_bytes }(Default,Unlimited)max_string_bytes, 64 MiB of strings a packet may expand toBinaryLinoProtocolchecks its limits when writing, so it refuses (Unencodable) a packet its peer would rejectRelease notes:
rust/changelog.d/20261007_120000_issue_104_links_notation_binary.mdandcsharp/.changeset/issue-104-links-notation-binary.md.Dependency freshness in CI
.github/scripts/check-latest-dependencies.mjs, run by.github/workflows/dependencies.ymlon pull requests and daily, now checks the following:Every manifest git tracks (
git ls-files): projects, examples and case-study reproductions alike. That covers everyCargo.toml,.csproj,package.json(plus itspackage-lock.json) and workflow (actions, Node.js/.NET versions, installed tools).Every tracked
Cargo.lock: the check fails ifcargo update --dry-runprints anyUpdatingline.Blockers: a dependency that cannot be updated yet is held back only by a comment on its manifest line that links the issue explaining the blocker:
The check looks the issue up through the GitHub API, using the workflow's
GITHUB_TOKENwithissues: read:Dependabot watches the same directories (
/rust,/rust/wasm, the case-study crate,/csharp,/examples/lino-structure-probeand both case-study C# projects). A new policy test fails if a directory the check reads is missing from.github/dependabot.yml.Limitation: JSON has no comments, so an npm dependency cannot be held back this way. An outdated npm dependency always fails the check.
Tests
rust/tests/protocol_packet_tests.rs). The transport tests move torust/tests/protocol_transport_tests.rs, which adds:BinaryError→ProtocolErrorconversion;ProtocolLimitskeeps the binary and text budgets separate;ProtocolLimits::unlimited().#inside quotes;Local results:
cargo fmt --check, andcargo clippy --all-targets --all-features -D warnings(rust/andrust/wasm/).cargo test: 38 test binaries, all passing.dotnet build: 0 warnings.dotnet test: 447/447.node --test .github/scripts/: 70/70.Release
The release workflows publish once this is merged:
There is no npm publishing workflow in this repository. The WebAssembly workbench is built by
WebAssembly CIand deployed to Pages, so there is nothing to publish to npm.Changes
.github/dependabot.yml.github/scripts/check-latest-dependencies.mjs.github/scripts/check-latest-dependencies.test.mjs.github/scripts/workflow-policy.test.mjs.github/workflows/dependencies.ymlcsharp/.changeset/issue-104-links-notation-binary.mdcsharp/Foundation.Data.Doublets.Cli.Library/Foundation.Data.Doublets.Cli.Library.csprojcsharp/Foundation.Data.Doublets.Cli.Library/Protocol/ArityRange.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinksClient.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinksOperation.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinksPacket.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinksServer.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinoFormat.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinoMapping.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinoProtocolException.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinoProtocols.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/LinoStreamReader.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/SectionPlanner.cscsharp/Foundation.Data.Doublets.Cli.Library/Protocol/StoreArchive.cscsharp/Foundation.Data.Doublets.Cli.Tests/Protocol/BinaryLinksNotationTests.cscsharp/Foundation.Data.Doublets.Cli.Tests/Protocol/LinksServerTests.cscsharp/Foundation.Data.Doublets.Cli.Tests/Protocol/LinoProtocolCodecTests.cscsharp/Foundation.Data.Doublets.Cli.Tests/Protocol/RemoteLinksTests.cscsharp/Foundation.Data.Doublets.Cli.Tests/Protocol/StoreArchiveTests.cscsharp/Foundation.Data.Doublets.Cli/Program.cscsharp/README.mddocs/ARCHITECTURE.mddocs/REQUIREMENTS.mddocs/case-studies/issue-100/evidence/external-range/rust/Cargo.lockdocs/protocol/binary-links-notation.mdexamples/lino-structure-probe/LinoStructureProbe.csprojjs/package-lock.jsonjs/package.jsonrust/Cargo.lockrust/Cargo.tomlrust/README.mdrust/changelog.d/20261007_120000_issue_104_links_notation_binary.mdrust/src/protocol/archive.rsrust/src/protocol/client.rsrust/src/protocol/error.rsrust/src/protocol/format.rsrust/src/protocol/links_operations.rsrust/src/protocol/mapping.rsrust/src/protocol/mod.rsrust/src/protocol/packet.rsrust/src/protocol/protocols.rsrust/src/protocol/remote_links.rsrust/src/protocol/server.rsrust/tests/protocol_packet_tests.rsrust/tests/protocol_transport_tests.rs