Skip to content

Add TinyBus module integration and release binaries - #2

Merged
senamakel merged 18 commits into
mainfrom
tinydocs-tinybus-module
Aug 10, 2026
Merged

Add TinyBus module integration and release binaries#2
senamakel merged 18 commits into
mainfrom
tinydocs-tinybus-module

Conversation

@senamakel

@senamakel senamakel commented Aug 10, 2026

Copy link
Copy Markdown
Member

Summary

Integrate TinyDocs with TinyBus module ABI v1 and ship it as a target-specific dynamic library. The vendored TinyBus gitlink now tracks canonical main at dd6063a, and a private tinydocs-module workspace crate exposes DOCX generation through the real TinyBus loader and broker while keeping the published tinydocs crate bus-agnostic.

Following the current tinyhumansai/rust-template release pattern, releases include the crates.io package, pinned TinyBus source, and installable Linux/macOS bundles containing the matching TinyBus host, TinyDocs module, SHA-256 modules.toml allowlist, and operational documentation.

Related issue

None.

API or behavior changes

Adds the TinyBus service ai.tinyhumans.tinydocs.Docx at /ai/tinyhumans/tinydocs/Docx with:

  • GenerateDocx(DocumentSpec) -> Vec<u8>
  • distinct wire errors for invalid input and generation failures

The existing public Rust API and default tinydocs dependency tree are unchanged.

Validation

  • cargo fmt --all -- --check
  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo build --all-targets --all-features
  • cargo 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-features
  • cargo +1.88 build --all-targets --all-features
  • cargo package --locked --package tinydocs
  • Release cdylib build and real ModuleHost loader E2E call
  • Linux native bundle assembled and SHA-256 allowlist verified locally

Tests

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 GenerateDocx through 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

  • The change is focused on one logical change
  • No secrets, tokens, or .env contents are included
  • Public crate packaging remains independently verifiable

senamakel and others added 13 commits August 10, 2026 18:09
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>
@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a private TinyBus cdylib adapter for DOCX generation. The change adds the GenerateDocx service, unit and end-to-end tests, workspace integration, CI validation, platform release artifacts, and documentation.

Changes

TinyBus DOCX module

Layer / File(s) Summary
Workspace and module contract
Cargo.toml, crates/tinydocs-module/Cargo.toml, crates/tinydocs-module/src/lib.rs, docs/specs/tinybus-module.md, vendor/tinybus
The workspace includes tinydocs-module. The crate builds rlib and cdylib outputs. The module identity, ABI, and GenerateDocx contract are documented.
DOCX service implementation
crates/tinydocs-module/src/service/mod.rs
The service registers BUS_NAME and OBJECT_PATH, exposes GenerateDocx, runs generation on a blocking worker, maps errors, and exports module metadata.
Service and loader validation
crates/tinydocs-module/src/service/test.rs, crates/tinydocs-module/tests/module_e2e.rs, .github/workflows/ci.yml
Tests validate service identity, dispatch members, error names, module loading, readiness, and DOCX output. CI builds the release module and runs the ignored loader test.
Release and usage integration
.github/workflows/release.yml, README.md, AGENTS.md, ROADMAP.md, docs/plans/tinybus-module.md
Release automation publishes tinydocs, builds Linux/macOS/Windows module libraries, and attaches them to a GitHub release. Documentation describes building, loading, testing, and distributing the 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
Loading

Possibly related PRs

Poem

I’m a rabbit with a module to load,
DOCX bytes now hop down the road.
TinyBus calls, workers run bright,
CI checks the library right.
Release crates bloom on every shore—
GenerateDocx opens the door! 🐇

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: TinyBus module integration and target-specific release binaries.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

senamakel and others added 5 commits August 10, 2026 18:32
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>
@senamakel
senamakel merged commit 59aeb8b into main Aug 10, 2026
10 of 11 checks passed

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 3b300d3 and 6fd5f55.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (14)
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • AGENTS.md
  • Cargo.toml
  • README.md
  • ROADMAP.md
  • crates/tinydocs-module/Cargo.toml
  • crates/tinydocs-module/src/lib.rs
  • crates/tinydocs-module/src/service/mod.rs
  • crates/tinydocs-module/src/service/test.rs
  • crates/tinydocs-module/tests/module_e2e.rs
  • docs/plans/tinybus-module.md
  • docs/specs/tinybus-module.md
  • vendor/tinybus

Comment on lines +113 to 114
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"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 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'
done

Repository: 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}")
PY

Repository: 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
fi

Repository: 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:


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.

Comment on lines +158 to +166
- 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 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.yml

Repository: 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)]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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-level clippy::unwrap_used suppression.
  • crates/tinydocs-module/tests/module_e2e.rs#L3-L3: remove the crate-level clippy::unwrap_used and clippy::expect_used suppressions.

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

Comment on lines +14 to +16
#[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() {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 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

Comment on lines +41 to +45
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`.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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

Comment thread README.md
Comment on lines +93 to +98
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
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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 require TINYDOCS_TEST_MODULE to contain the host-specific artifact path.
  • docs/plans/tinybus-module.md#L29-L31: use the same platform-specific instruction as README.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

Comment thread vendor/tinybus
@@ -1 +1 @@
Subproject commit ddc63e3f9c6e99e0be4ef0effac4d35442711cc4
Subproject commit dd6063afc71ed82d2c9609f83fdbab758b96c2ed

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ 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.md

Repository: 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 || true

Repository: 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' || true

Repository: 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant