Port doublets to stable Rust, migrate deps to crates.io, update CI/CD#48
Port doublets to stable Rust, migrate deps to crates.io, update CI/CD#48
Conversation
Adding .gitkeep for PR creation (default mode). This file will be removed when the task is complete. Issue: #47
🚨 Solution Draft FailedThe automated solution draft encountered an error: 🤖 Models used:
📎 Failure log uploaded as Gist (6699KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
|
🤖 AI Work Session Started Starting automated work session at 2026-04-13T15:40:56.056Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. |
🚨 Solution Draft FailedThe automated solution draft encountered an error: 🤖 Models used:
📎 Failure log uploaded as Gist (4636KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
|
Please reuse unfinished work from logs provided below, if these are contain best practices, try to commit as soon as possible, to keep as much work as you can as fast as you can, so it will be less likely to get the execution process terminated with unfinished work. https://gist.githubusercontent.com/konard/dba1632796b5c0d4ac4a1db94f59f122/raw/3f8139ee0b15da4757bcb52146132652f0249049/solution-draft-log-pr-1776076882065.txt We need to ensure all changes are correct, consistent, validated, tested, logged and fully meet each and all discussed requirements (check issue description and all comments in issue and in pull request). Ensure all CI/CD checks pass. |
|
🤖 AI Work Session Started Starting automated work session at 2026-04-14T07:53:41.115Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. |
Remove all 12 nightly feature gates and migrate to stable equivalents: - Replace Try trait usage with explicit is_break() checks on Flow - Replace fn_traits/unboxed_closures on Fuse with .call() method - Replace type_alias_impl_trait with -> impl Trait return position - Replace default_free_fn with Default::default() and PhantomData - Migrate mem/trees deps from git submodules to crates.io packages - Adapt to new platform-mem 0.3.0 RawMem API (grow_filled/shrink) - Adapt to platform-trees 0.3.3 renamed traits (SzbTree -> RecursiveSizeBalancedTree) - Resolve dual LinkType trait bounds (data vs trees crates) - Replace Range<T> iteration with while loops (Step trait is nightly-only) - Fix borrow checker issues by collecting iterators before mutation - Update rust-toolchain.toml from nightly-2022-08-22 to stable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add resolver = "2" to workspace Cargo.toml - Export FuntyPart from data-rs crate for disambiguation - Remove unused imports (error::Error, LinksTree, RelativeCircularLinkedList) - Rewrite handler tests for new Fuse .call() API (no more fn_traits) - Remove box_syntax from dyn test, use Box::new with Global allocator Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix all clippy warnings: semicolons, map_or, into_iter, dead code allows - Update rustfmt.toml for stable Rust (remove nightly-only options) - Add .gitignore for target/ and log files - Add Rust CI/CD scripts from pipeline template (replacing JS scripts) - Use LinksConstants::default() instead of Default::default() - Allow pre-existing clippy lints that need future cleanup Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace ci.yml and benchmark.yml with release.yml from template - Use stable Rust toolchain (dtolnay/rust-toolchain@stable) - Replace JavaScript CI scripts with Rust scripts (rust-script) - Add detect-changes, version-check, changelog-pr, deploy-docs jobs - Add auto-release and manual-release with crates.io publishing - Add changelog fragment for stable Rust migration (issue #47) - All checkout steps include submodules: true Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Documents the nightly-to-stable migration, dependency modernization, and CI/CD pipeline update with technical challenges and solutions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix should_panic reason to match actual assertion message - Fix uninlined_format_args in test files (auto-fix applied) - Remove unused _deleted variable in extensions test - Add #[allow(dead_code)] for utility test functions - Remove unused targets Vec in store_internals test - Fix cast_sign_loss warning with explicit allow - Fix or_fun_call by binding to local variable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The data-rs submodule's published crate doesn't export FuntyPart, and we can't modify the submodule. Add a crate::funty::<T>(n) helper that does the same u8->T conversion, removing the dependency on FuntyPart being publicly exported from the data crate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These dependencies are now consumed from crates.io (platform-mem 0.3.0, platform-trees 0.3.3) instead of git submodules. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds documentation for Link, Doublet, Doublets/DoubletsExt traits, Error, Fuse, Store types, and all public methods. Includes crate-level and module-level documentation for rustdoc generation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $30.557200📊 Context and tokens usage:Claude Opus 4.6:
Total: (521.3K + 44.8M cached) input tokens, 126.0K output tokens, $28.812422 cost Claude Haiku 4.5: (2 sub-agent calls) Sub-agent calls:
Total: (93.8K + 1.7M cached) input tokens, 14.5K output tokens, $0.364350 cost Claude Sonnet 4.6: Total: (72.2K + 2.8M cached) input tokens, 18.6K / 64K (29%) output tokens, $1.380428 cost 🤖 Models used:
📎 Log file uploaded as Gist (13986KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
🔄 Auto-restart 1/3Detected uncommitted changes from previous run. Starting new session to review and commit or discard them. Uncommitted files: Auto-restart will stop after changes are committed or discarded, or after 2 more iterations. Please wait until working session will end and give your feedback. |
🔄 Auto-restart 1/3 LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $1.317755📊 Context and tokens usage:Claude Opus 4.6:
Total: (47.2K + 1.5M cached) input tokens, 8.7K output tokens, $1.265334 cost Claude Sonnet 4.6: Total: (10.6K + 8.2K cached) input tokens, 684 / 64K (1%) output tokens, $0.052421 cost 🤖 Models used:
📎 Log file uploaded as Gist (16005KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
This reverts commit aa6b4dd.
|
Use latest https://crates.io/crates/platform-data, to fully remove dev-deps/data-rs and dev-deps folder. Also think, can we really to get rid of funty like we did in Numbers, and use LinkReference instead of LinkType name in all packages? How can we keep all LinkReference types and TreesLinkType in sync? Do we need tree-rs to depend on Numbers? Or most of the issue can be solved locally in doublets-rs? What about data-rs? If we really do need funty, add issues in dependencies, so where needed they also include it for compatibility. |
|
🤖 AI Work Session Started Starting automated work session at 2026-04-14T09:28:51.836Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. |
Replace the local path dependency on dev-deps/data-rs (platform-data 0.1.0-beta.3) with the published crates.io package platform-data 1.0.0. Remove the data-rs git submodule, dev-deps directory, and .gitmodules file. Also remove unused num-traits direct dependency (it comes transitively via platform-data and platform-trees). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Analysis: funty, LinkReference, and trait synchronization1. Migration to platform-data 1.0.0 ✅ DoneCommitted in 8add2ef: migrated from local 2. Can we get rid of funty?Short answer: Not without changes to upstream dependencies.
However, If we wanted to eliminate
3. Can we use LinkReference instead of LinkType?
These three traits have overlapping but different requirements:
All three ARE implemented for the same concrete types ( 4. How to keep them in sync?Option A (recommended): Unify at the Option B: Add Option C (current): Keep the dual-bound approach. doublets uses 5. RecommendationThe cleanest path forward is Option A: file an issue on
For now, the current dual-bound approach ( Should I file issues on the upstream repositories to propose Option A? |
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $3.321545📊 Context and tokens usage:Claude Opus 4.6:
Total: (77.6K + 4.5M cached) input tokens, 14.4K output tokens, $3.075171 cost Claude Haiku 4.5: Total: (41.2K + 1.5M cached) input tokens, 8.3K / 64K (13%) output tokens, $0.246374 cost 🤖 Models used:
📎 Log file uploaded as Gist (2519KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
|
Based on #48 (comment), please report issues to Numbers, trees-rs, data-rs, so all use depend on Numbers instead of funty, and Numbers should support all features we require in trees-rs, data-rs and doublets-rs. |
|
🤖 AI Work Session Started Starting automated work session at 2026-04-14T10:09:18.608Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. |
Filed upstream issues for funty → Numbers unificationBased on the analysis in the previous comment, I've filed issues in all three upstream repositories to unify on Execution order (dependencies flow top-down):
After all three are resolved:
|
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $1.243396📊 Context and tokens usage:Claude Opus 4.6:
Total: (40.0K + 863.3K cached) input tokens, 8.5K output tokens, $0.890285 cost Claude Haiku 4.5: Total: (96.3K + 1.7M cached) input tokens, 13.3K / 64K (21%) output tokens, $0.353111 cost 🤖 Models used:
📎 Log file uploaded as Gist (2115KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
🔄 Auto-restart 1/3Detected uncommitted changes from previous run. Starting new session to review and commit or discard them. Uncommitted files: Auto-restart will stop after changes are committed or discarded, or after 2 more iterations. Please wait until working session will end and give your feedback. |
🔄 Auto-restart 1/3 LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $0.291127📊 Context and tokens usage:
Total: (20.4K + 244.1K cached) input tokens, 1.7K output tokens, $0.291127 cost 🤖 Models used:
📎 Log file uploaded as Gist (3496KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
|
After linksplatform/trees-rs#31 and linksplatform/data-rs#17 and linksplatform/Numbers#147 are applied. We can use latest version of https://crates.io/crates/platform-num as well as latest versions of trees-rs and data-rs, now we can fully support LinkReference, and also fully drop num_traits dependency, as https://crates.io/crates/platform-num reexports everything. We also now can drop any LinkType and replace it with LinkReference. If something is still missing - report bug at https://github.com/linksplatform/Numbers, or/and tree-rs/data-rs upstream libraries. |
|
🤖 AI Work Session Started Starting automated work session at 2026-04-14T14:34:36.501Z The PR has been converted to draft mode while work is in progress. This comment marks the beginning of an AI work session. Please wait for the session to finish, and provide your feedback. |
- Upgrade platform-data 1.0.0 → 2.0.0, platform-trees 0.3.3 → 0.3.4 - Add platform-num 0.8.0 as direct dependency - Replace all data::LinkType with data::LinkReference throughout - Remove TreesLinkType alias (no longer needed, both crates use LinkReference) - Remove crate::funty helper, use T::from_byte() from LinkReference trait - Replace .as_usize() (funty) with .as_() (num_traits::AsPrimitive) - Replace += / -= with plain assignment (LinkReference lacks AddAssign) All 306 tests pass, clippy clean, fmt clean, docs generate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Migrated to LinkReference and latest depsPer the request, this commit upgrades to the latest upstream crates and unifies the type system: Dependency upgrades
Type system unification
Results
|
🤖 Solution Draft LogThis log file contains the complete execution trace of the AI solution draft process. 💰 Cost: $4.395137📊 Context and tokens usage:Claude Opus 4.6:
Total: (95.8K + 6.3M cached) input tokens, 17.0K output tokens, $4.191119 cost Claude Haiku 4.5: Total: (64.0K + 834.5K cached) input tokens, 8.1K / 64K (13%) output tokens, $0.204018 cost 🤖 Models used:
📎 Log file uploaded as Gist (2766KB)Now working session is ended, feel free to review and add any feedback on the solution draft. |
✅ Ready to mergeThis pull request is now ready to be merged:
Monitored by hive-mind with --auto-restart-until-mergeable flag |
Summary
This PR ports the doublets crate from nightly Rust to stable Rust, migrates all dependencies from git submodules to crates.io packages, unifies the type system on
LinkReference, and modernizes the CI/CD pipeline.Changes
try_trait_v2,fn_traits,unboxed_closures,default_free_fn,type_alias_impl_trait,box_syntax, etc.) and replaced with stable equivalentsplatform-num0.8.0 (new direct dependency forLinkReferencetrait)platform-data2.0.0 (was local path dep viadev-deps/data-rssubmodule, now usesLinkReferenceinstead ofLinkType)platform-trees0.3.4 (wastrees-rssubmodule, now usesLinkReferenceinstead ofLinkType)platform-mem0.3.0 (wasmem-rssubmodule)dev-deps/directory, all submodules, and.gitmodulesnum-traitsdirect dependency (re-exported viaplatform-num)data::LinkType+trees::LinkTypedual bounds with singleLinkReferencetrait:TreesLinkTypealias (no longer needed)crate::funty()helper function, replaced withT::from_byte()fromLinkReference.as_usize()(funty) with.as_()(num_traitsAsPrimitive)+=/-=operators with plain assignment (LinkReference uses PrimInt without NumAssign)docs/case-studies/issue-47/with detailed analysisKey technical decisions
Trytrait usage replaced with explicitFlow::is_break()checksfn_traits/unboxed_closuresonFusereplaced with.call()methodRange<T>iteration (requires nightlyStep) replaced with while loopsLinkReferencetrait fromplatform-numreplaces bothdata::LinkTypeandtrees::LinkTypeTesting
cargo clippy --all-targets --all-featurespasses with-D warningscargo fmt --all -- --checkpassescargo doc --workspace --no-depsgenerates documentation without warningsCI/CD status
All CI jobs pass:
Closes #47
Co-Authored-By: Claude Opus 4.6 noreply@anthropic.com