Add TinyBus module integration and release binaries - #2
Conversation
Updated the pinned commit for the vendored tinybus submodule to incorporate upstream fixes or improvements. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Add a `module` feature that compiles the crate as both an rlib and a cdylib, enabling it to be loaded as a TinyBus dynamic module. The feature depends on `docx` and pulls in the `tinybus`, `tinybus-module`, and `tokio` dependencies to support the bus runtime and CPU-bound document synthesis on the blocking pool. A new `bus` module is conditionally compiled to expose the `GenerateDocx` service over the bus. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
… module The Cargo.lock file is updated to include new dependencies required by the tinybus and tinybus-module crates, which are now used by the tinydocs project. The test files are also adjusted to reflect the new import order and formatting changes. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Introduce an optional `module` feature that builds TinyDocs as a loadable TinyBus dynamic library, exposing DOCX generation through the TinyBus ABI. Add a CI job that builds the module and runs an end-to-end test against the real TinyBus loader, and extend the release workflow to build native modules for Linux, macOS, and Windows, attaching them as assets to GitHub releases. Update documentation and roadmap to reflect the new capability. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The ASCII tree in the README used a closing corner character for the docx directory entry, which made it appear as the last item in the listing. The character has been changed to a tee junction so the tree correctly indicates that additional entries follow below. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The `module_export!` macro now lives inside a private `mod exports` block so the `#[allow]` lint exception cannot accidentally suppress warnings for undocumented Rust API items. The `map_error` helper was changed to accept a reference instead of an owned value, and the test was updated accordingly. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The module-level doc comment in the end-to-end test now wraps `TinyDocs` and `TinyBus` in backticks so that the names are rendered as code in generated documentation, improving readability. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The module-level documentation contained a Rust intra-doc link that could not resolve, causing a documentation build warning. The link has been replaced with plain backtick formatting to keep the reference readable without relying on a broken cross-reference. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The TinyBus module code and its associated tests have been moved from the main library into a dedicated `crates/tinydocs-module` workspace member. This removes the `module` feature flag and the `tinybus`, `tinybus-module`, and `tokio` dependencies from the root crate, keeping the core library focused on document generation without the bus runtime. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Extract the TinyBus cdylib adapter from the main library into a private `tinydocs-module` workspace crate, removing the `module` feature flag and the `src/bus/` directory. This keeps vendored TinyBus dependencies out of the published crate's manifest while preserving the same build and test commands, now scoped with `--package tinydocs-module`. The shared library artifact is renamed from `libtinydocs` to `libtinydocs_module` to match the new crate name. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The import order in service and test files has been adjusted to follow the convention of grouping external crate imports before internal ones, and the Cargo.lock reflects the addition of the `tinydocs` dependency alongside the `zip` crate for the module. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Added a new error constant `MODULE_FAILED_ERROR` and a catch-all arm in the `map_error` function to handle any error variants not explicitly matched, ensuring that all errors are mapped to a valid D-Bus error name instead of causing a panic at runtime. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
📝 WalkthroughWalkthroughAdds a private TinyBus ChangesTinyBus DOCX module
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Client
participant ModuleHost
participant TinyBusBroker
participant TinyDocsModule
participant TinyDocs
Client->>ModuleHost: Load tinydocs-module
ModuleHost->>TinyBusBroker: Start module and broker
TinyDocsModule->>TinyBusBroker: Register BUS_NAME and OBJECT_PATH
Client->>TinyBusBroker: Call GenerateDocx(DocumentSpec)
TinyBusBroker->>TinyDocsModule: Dispatch request
TinyDocsModule->>TinyDocs: Generate DOCX on blocking worker
TinyDocs-->>TinyDocsModule: Return DOCX bytes
TinyDocsModule-->>TinyBusBroker: Return DOCX bytes
TinyBusBroker-->>Client: Return GenerateDocx result
Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Add a per-file 90% line coverage check to the CI workflow and extend the release pipeline to package TinyBus source and native bundles, replacing the previous per-platform module artifact uploads with a unified bundle that includes the TinyBus host binary, module, checksums, and documentation. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The shell script for checking file coverage was not marked as executable, which prevented it from running in CI workflows. Changing the file mode to 100755 ensures it can be executed directly. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Update the per-file coverage requirement from 80% to 90% across all source files, add the coverage check script to the CI contract in multiple documents, and revise release artifact descriptions to reflect installable bundles with host, module, allowlist, and documentation instead of standalone native module assets. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The coverage data file was removed from the repository as it is a generated artifact that should not be tracked in version control. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
There was a problem hiding this comment.
Actionable comments posted: 7
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/release.yml:
- Around line 158-166: Pin every release-workflow action reference—including
actions/checkout, dtolnay/rust-toolchain, Swatinem/rust-cache,
actions/upload-artifact, and actions/download-artifact—to reviewed immutable
full commit SHAs, replacing the mutable version tags while preserving each
action’s existing configuration.
- Around line 113-114: Replace the targeted cargo update command after the
version edits with a workspace-wide update using cargo update --workspace.
Ensure the resulting Cargo.lock entries for both modified workspace packages are
aligned before subsequent --locked builds.
In `@crates/tinydocs-module/src/service/test.rs`:
- Line 3: Remove the crate-level Clippy suppressions from
crates/tinydocs-module/src/service/test.rs:3-3 and
crates/tinydocs-module/tests/module_e2e.rs:3-3. Replace every resulting unwrap
and expect usage in the affected test code with explicit assertions or
propagated errors, without weakening lint or test guardrails.
In `@crates/tinydocs-module/tests/module_e2e.rs`:
- Around line 14-16: Remove the #[ignore] attribute from
built_cdylib_loads_and_generates_a_docx_over_the_bus in
crates/tinydocs-module/tests/module_e2e.rs. In crates/tinydocs-module/Cargo.toml
lines 14-25, define a named E2E feature and configure the module_e2e test target
with required-features for it. In .github/workflows/ci.yml lines 68-71, enable
that E2E feature and remove the -- --ignored test argument.
In `@docs/specs/tinybus-module.md`:
- Around line 41-45: Update the wire-error documentation in tinybus-module.md to
include ai.tinyhumans.tinydocs.Error.ModuleFailed and state that it represents
remaining or unexpected module failures. Also align the corresponding README.md
and module documentation with this complete set of reported wire errors.
In `@README.md`:
- Around line 93-98: Update the loader-test instructions in README.md lines
93-98 and docs/plans/tinybus-module.md lines 29-31 to use the host-specific
release artifact: provide commands for Linux, macOS, and Windows, or explicitly
require TINYDOCS_TEST_MODULE to point to the corresponding .so, .dylib, or .dll
path. Keep both documentation locations identical.
In `@vendor/tinybus`:
- Line 1: Update the vendored TinyBus gitlink at vendor/tinybus to an existing
commit from the tinyhumansai/tinybus remote, replacing the unresolvable
dd6063afc71ed82d2c9609f83fdbab758b96c2ed while preserving the intended ABI
source.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 6e156947-b1b6-4a5c-9625-3dc25b3985c8
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (14)
.github/workflows/ci.yml.github/workflows/release.ymlAGENTS.mdCargo.tomlREADME.mdROADMAP.mdcrates/tinydocs-module/Cargo.tomlcrates/tinydocs-module/src/lib.rscrates/tinydocs-module/src/service/mod.rscrates/tinydocs-module/src/service/test.rscrates/tinydocs-module/tests/module_e2e.rsdocs/plans/tinybus-module.mddocs/specs/tinybus-module.mdvendor/tinybus
| perl -0pi -e 's/(\[package\][\s\S]*?\nversion = ")[^"]+(")/$1$ENV{NEXT_VERSION}$2/' crates/tinydocs-module/Cargo.toml | ||
| cargo update -p "$CRATE_NAME" --precise "$NEXT_VERSION" |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
workflow=.github/workflows/release.yml
grep -F 'cargo update --workspace' "$workflow"Repository: tinyhumansai/tinydocs
Length of output: 159
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== release workflow outline/sections =="
wc -l .github/workflows/release.yml
nl -ba .github/workflows/release.yml | sed -n '1,230p'
echo
echo "== version update and cargo update/search =="
rg -n "NEXT_VERSION|CRATE_NAME|tinydocs|Cargo.toml|cargo build|cargo publish|cargo test|cargo package|cargo update|--locked|--workspace" .github/workflows/release.yml crates -S
echo
echo "== workspace manifests =="
find crates -maxdepth 3 -name Cargo.toml -print | sort
for f in $(find crates -name Cargo.toml -print); do
echo "--- $f"
nl -ba "$f" | sed -n '1,80p'
doneRepository: tinyhumansai/tinydocs
Length of output: 273
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
workflow = Path(".github/workflows/release.yml")
lines = workflow.read_text().splitlines()
for i,l in enumerate(lines, 1):
if "cargo update" in l or "perl -0pi" in l or "NEXT_VERSION" in l:
print(f"{i}: {l}")
PYRepository: tinyhumansai/tinydocs
Length of output: 544
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== release workflow relevant lines =="
awk '{printf "%6d\t%s\n", NR, $0}' .github/workflows/release.yml | sed -n '80,135p'
echo
echo "== version update and cargo update/search =="
grep -RInE "NEXT_VERSION|CRATE_NAME|tinydocs|Cargo.toml|cargo build|cargo publish|cargo test|cargo package|cargo update|--locked|--workspace" .github/workflows/release.yml crates 2>/dev/null || true
echo
echo "== workspace manifests =="
find crates -maxdepth 3 -name Cargo.toml -print 2>/dev/null | sort | while read -r f; do
printf -- "--- %s\n" "$f"
awk '{printf "%6d\t%s\n", NR, $0}' "$f" | sed -n '1,90p'
done
echo
echo "== root workspace Cargo.toml =="
if [ -f Cargo.toml ]; then
awk '{printf "%6d\t%s\n", NR, $0}' Cargo.toml
fiRepository: tinyhumansai/tinydocs
Length of output: 11173
🌐 Web query:
Cargo cargo update --workspace after manifest version changes documentation
💡 Result:
The cargo update --workspace command is designed to update dependencies as recorded in the Cargo.lock file, specifically targeting packages defined within your workspace [1][2]. According to the official Cargo documentation, the --workspace (or -w) flag is primarily useful for updating Cargo.lock after you have manually changed version numbers in your Cargo.toml files [1][2]. When you use this flag, Cargo attempts to update only the packages defined in the workspace, while other packages are updated only if they do not already exist in the lockfile [1][3]. It is important to note that the cargo update command does not automatically modify or write to your Cargo.toml files to reflect new version requirements [4]. The command updates the dependency versions pinned in the Cargo.lock file based on the constraints already present in your manifest [2][5]. If you are looking to automatically update the version requirements inside your Cargo.toml files (e.g., upgrading a dependency to the latest version), you would typically use external tools like cargo-edit (specifically the cargo upgrade command) rather than cargo update [4][6]. In summary: - cargo update --workspace: Updates Cargo.lock to match changes you have already made in Cargo.toml [1][2]. - Cargo.toml changes: You must manually edit these or use other tools; cargo update will not update them for you [4].
Citations:
- 1: https://doc.rust-lang.org/stable/cargo/commands/cargo-update.html
- 2: https://doc.rust-lang.org/cargo/commands/cargo-update.html
- 3: https://dev-doc.rust-lang.org/beta/cargo/commands/cargo-update.html
- 4: A method to update manifest version requirements (like cargo-edit's
cargo-upgrade) rust-lang/cargo#10498 - 5: https://github.com/rust-lang/cargo/blob/master/doc/man/generated_txt/cargo-update.txt
- 6: https://doc.rust-lang.org/nightly/nightly-rustc/src/cargo/ops/cargo_update.rs.html
Update the whole workspace lock after the version edits.
The release workflow edits both Cargo.toml and crates/tinydocs-module/Cargo.toml, then records Cargo.lock and later uses --locked builds. cargo update -p "$CRATE_NAME" --precise "$NEXT_VERSION" only refreshes tinydocs; run cargo update --workspace instead so both workspace package entries in the lockfile stay aligned.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/release.yml around lines 113 - 114, Replace the targeted
cargo update command after the version edits with a workspace-wide update using
cargo update --workspace. Ensure the resulting Cargo.lock entries for both
modified workspace packages are aligned before subsequent --locked builds.
| - uses: actions/checkout@v7 | ||
| with: | ||
| ref: ${{ needs.publish.outputs.tag }} | ||
| persist-credentials: false | ||
| submodules: true | ||
|
|
||
| - uses: dtolnay/rust-toolchain@stable | ||
|
|
||
| - uses: Swatinem/rust-cache@v2 |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== workflow outline =="
wc -l .github/workflows/release.yml
sed -n '1,230p' .github/workflows/release.yml
echo
echo "== uses lines =="
rg -n '^\s+-\s+uses:\s+|uses:\s+' .github/workflows/release.ymlRepository: tinyhumansai/tinydocs
Length of output: 6765
Security Misconfiguration (CWE-829): Inclusion of Functionality from Untrusted Control Sphere
Reachability: Internal
Pin release-workflow actions to full commit SHAs.
The release workflow runs actions while resolving the release commit, building the module, and uploading assets that gh release create publishes as release assets. Mutable tag references like actions/checkout@v7, dtolnay/rust-toolchain@stable, Swatinem/rust-cache@v2, actions/upload-artifact@v4, and actions/download-artifact@v5 can execute changed upstream code in that trusted path. Pin each uses: reference to a reviewed full commit SHA.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/release.yml around lines 158 - 166, Pin every
release-workflow action reference—including actions/checkout,
dtolnay/rust-toolchain, Swatinem/rust-cache, actions/upload-artifact, and
actions/download-artifact—to reviewed immutable full commit SHAs, replacing the
mutable version tags while preserving each action’s existing configuration.
| @@ -0,0 +1,30 @@ | |||
| //! Unit tests for the `TinyBus` service declaration. | |||
|
|
|||
| #![allow(clippy::unwrap_used)] | |||
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Remove crate-level Clippy suppressions.
These attributes suppress lint checks for all current and future code in each test crate. Replace unwrap and expect control flow with explicit assertions or error propagation.
crates/tinydocs-module/src/service/test.rs#L3-L3: remove the crate-levelclippy::unwrap_usedsuppression.crates/tinydocs-module/tests/module_e2e.rs#L3-L3: remove the crate-levelclippy::unwrap_usedandclippy::expect_usedsuppressions.
As per coding guidelines, do not weaken guardrails with blanket allow attributes, relaxed lints, ignored tests, or loosened CI.
📍 Affects 2 files
crates/tinydocs-module/src/service/test.rs#L3-L3(this comment)crates/tinydocs-module/tests/module_e2e.rs#L3-L3
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/tinydocs-module/src/service/test.rs` at line 3, Remove the crate-level
Clippy suppressions from crates/tinydocs-module/src/service/test.rs:3-3 and
crates/tinydocs-module/tests/module_e2e.rs:3-3. Replace every resulting unwrap
and expect usage in the affected test code with explicit assertions or
propagated errors, without weakening lint or test guardrails.
Source: Coding guidelines
| #[tokio::test(flavor = "multi_thread", worker_threads = 2)] | ||
| #[ignore = "requires TINYDOCS_TEST_MODULE to point at the built cdylib"] | ||
| async fn built_cdylib_loads_and_generates_a_docx_over_the_bus() { |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Run the module E2E test without #[ignore].
The test is skipped by normal test runs. CI overrides that skip with --ignored. Use an explicit E2E feature and a required-features test target instead.
crates/tinydocs-module/tests/module_e2e.rs#L14-L16: remove the#[ignore]attribute.crates/tinydocs-module/Cargo.toml#L14-L25: add a named E2E feature and a[[test]]target that requires it..github/workflows/ci.yml#L68-L71: enable the E2E feature and remove-- --ignored.
As per coding guidelines, do not weaken guardrails with blanket allow attributes, relaxed lints, ignored tests, or loosened CI.
📍 Affects 3 files
crates/tinydocs-module/tests/module_e2e.rs#L14-L16(this comment)crates/tinydocs-module/Cargo.toml#L14-L25.github/workflows/ci.yml#L68-L71
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@crates/tinydocs-module/tests/module_e2e.rs` around lines 14 - 16, Remove the
#[ignore] attribute from built_cdylib_loads_and_generates_a_docx_over_the_bus in
crates/tinydocs-module/tests/module_e2e.rs. In crates/tinydocs-module/Cargo.toml
lines 14-25, define a named E2E feature and configure the module_e2e test target
with required-features for it. In .github/workflows/ci.yml lines 68-71, enable
that E2E feature and remove the -- --ignored test argument.
Source: Coding guidelines
| The argument is the same Serde document contract used by the Rust API. A | ||
| successful response contains a complete DOCX zip container. Invalid input and | ||
| writer failures use the distinct wire names | ||
| `ai.tinyhumans.tinydocs.Error.InvalidInput` and | ||
| `ai.tinyhumans.tinydocs.Error.GenerationFailed`. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
Document the fallback wire error.
crates/tinydocs-module/src/service/mod.rs Line 46 maps remaining errors to ai.tinyhumans.tinydocs.Error.ModuleFailed. This specification lists only two wire names. Document this third name and its condition so clients can handle every reported wire error.
As per coding guidelines, keep README.md, docs/, and module documentation aligned with behavior changes in the same commit.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@docs/specs/tinybus-module.md` around lines 41 - 45, Update the wire-error
documentation in tinybus-module.md to include
ai.tinyhumans.tinydocs.Error.ModuleFailed and state that it represents remaining
or unexpected module failures. Also align the corresponding README.md and module
documentation with this complete set of reported wire errors.
Source: Coding guidelines
| Run the real loader test locally after building the release artifact: | ||
|
|
||
| ```sh | ||
| TINYDOCS_TEST_MODULE="$PWD/target/release/libtinydocs_module.so" \ | ||
| cargo test --package tinydocs-module --test module_e2e -- --ignored | ||
| ``` |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Use host-specific module paths in the loader-test instructions.
The commands select only the Linux .so file. They fail on macOS and Windows despite the documented .dylib and .dll artifacts.
README.md#L93-L98: provide Linux, macOS, and Windows commands, or requireTINYDOCS_TEST_MODULEto contain the host-specific artifact path.docs/plans/tinybus-module.md#L29-L31: use the same platform-specific instruction asREADME.md.
As per coding guidelines, keep README.md, docs/, and module documentation aligned with behavior changes in the same commit.
📍 Affects 2 files
README.md#L93-L98(this comment)docs/plans/tinybus-module.md#L29-L31
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@README.md` around lines 93 - 98, Update the loader-test instructions in
README.md lines 93-98 and docs/plans/tinybus-module.md lines 29-31 to use the
host-specific release artifact: provide commands for Linux, macOS, and Windows,
or explicitly require TINYDOCS_TEST_MODULE to point to the corresponding .so,
.dylib, or .dll path. Keep both documentation locations identical.
Source: Coding guidelines
| @@ -1 +1 @@ | |||
| Subproject commit ddc63e3f9c6e99e0be4ef0effac4d35442711cc4 | |||
| Subproject commit dd6063afc71ed82d2c9609f83fdbab758b96c2ed | |||
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
expected="dd6063afc71ed82d2c9609f83fdbab758b96c2ed"
actual="$(git ls-tree HEAD -- vendor/tinybus | awk '{print $3}')"
test "$actual" = "$expected"
git -C vendor/tinybus cat-file -e "${expected}^{commit}"
git -C vendor/tinybus show --no-patch --format=fuller "$expected"
git -C vendor/tinybus grep -n -E 'abi|loader|broker|module' "$expected" -- '*.rs'
rg -n 'TinyBus|GenerateDocx|abi|loader|broker' Cargo.toml crates/tinydocs-module docs/specs/tinybus-module.mdRepository: tinyhumansai/tinydocs
Length of output: 335
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "HEAD gitlink targets:"
git ls-tree HEAD -- vendor/tinybus || true
echo
echo "Submodule config files:"
git ls-files | rg '(^|\.)gitmodules$|vendor/tinybus|Cargo\.toml|tinydocs-module|specs/tinybus-module\.md' || true
echo
echo "Search relevant identifiers:"
rg -n 'TinyBus|GenerateDocx|abi|loader|broker|tinybus-module|generate-docx' Cargo.toml crates tinydocs docs vendor 2>/dev/null || trueRepository: tinyhumansai/tinydocs
Length of output: 4373
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo ".gitmodules:"
cat -n .gitmodules
echo
echo "vendor/tinybus files:"
git ls-tree -r HEAD -- vendor/tinybus | sed -n '1,120p'
echo
echo "remote refs availability for expected gitlink:"
expected="dd6063afc71ed82d2c9609f83fdbab758b96c2ed"
remote_url="$(git config --get submodule.vendor/tinybus.url || true)"
echo "submodule_url=$remote_url"
git ls-remote "$remote_url" HEAD main master "${expected%0}"*" ${expected}*" 2>/dev/null || true
git ls-remote "$remote_url" "refs/tags/*" 2>/dev/null | sed -n '1,80p' || true
echo
echo "substate entries if present:"
git config -f .gitmodules --list | rg 'submodule\.vendor/tinybus|path|url|branch' || true
git show --name-status --no-rename -- .gitmodules 2>/dev/null | sed -n '1,80p' || trueRepository: tinyhumansai/tinydocs
Length of output: 651
Fix the vendored TinyBus gitlink to an available commit.
The .gitmodules entry points vendor/tinybus to https://github.com/tinyhumansai/tinybus, but dd6063afc71ed82d2c9609f83fdbab758b96c2ed cannot be resolved from that remote. Clean clones will fail at git submodules update before the TinyBus ABI v1 test or module build can run. Pin the submodule to an existing tinyhumansai/tinybus commit that matches the intended ABI source.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@vendor/tinybus` at line 1, Update the vendored TinyBus gitlink at
vendor/tinybus to an existing commit from the tinyhumansai/tinybus remote,
replacing the unresolvable dd6063afc71ed82d2c9609f83fdbab758b96c2ed while
preserving the intended ABI source.
Source: Coding guidelines
Summary
Integrate TinyDocs with TinyBus module ABI v1 and ship it as a target-specific dynamic library. The vendored TinyBus gitlink now tracks canonical
mainatdd6063a, and a privatetinydocs-moduleworkspace crate exposes DOCX generation through the real TinyBus loader and broker while keeping the publishedtinydocscrate bus-agnostic.Following the current
tinyhumansai/rust-templaterelease pattern, releases include the crates.io package, pinned TinyBus source, and installable Linux/macOS bundles containing the matching TinyBus host, TinyDocs module, SHA-256modules.tomlallowlist, and operational documentation.Related issue
None.
API or behavior changes
Adds the TinyBus service
ai.tinyhumans.tinydocs.Docxat/ai/tinyhumans/tinydocs/Docxwith:GenerateDocx(DocumentSpec) -> Vec<u8>The existing public Rust API and default
tinydocsdependency tree are unchanged.Validation
cargo fmt --all -- --checkcargo clippy --all-targets --all-features -- -D warningscargo build --all-targets --all-featurescargo test --all-features.github/scripts/check-file-coverage.sh 90 coverage.json(all root source files at 96.88% or higher)RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-featurescargo +1.88 build --all-targets --all-featurescargo package --locked --package tinydocscdylibbuild and realModuleHostloader E2E callTests
Adds unit coverage for module identity, generated dispatch members, and wire error mapping. Adds an end-to-end test that loads the compiled dynamic library through TinyBus's ABI gate, waits for the module to become ready, calls
GenerateDocxthrough a proxy, and verifies the returned DOCX signature.Documentation
Adds an implemented module specification, implementation record, README build/loading instructions, trust constraints, coverage workflow, and release bundle documentation.
Checklist
.envcontents are included