Skip to content

refactor: extract inline tests to sibling _tests.rs files (130 god-files)#835

Merged
senamakel merged 10 commits into
tinyhumansai:mainfrom
jwalin-shah:refactor/extract-tests-to-siblings
Apr 26, 2026
Merged

refactor: extract inline tests to sibling _tests.rs files (130 god-files)#835
senamakel merged 10 commits into
tinyhumansai:mainfrom
jwalin-shah:refactor/extract-tests-to-siblings

Conversation

@jwalin-shah
Copy link
Copy Markdown
Contributor

Summary

Moves inline #[cfg(test)] mod tests { ... } blocks out of 130 oversized source files into sibling *_tests.rs files referenced via #[path = \"...\"] mod tests;. Purely mechanical: test bodies and production code are byte-identical, only the location changes.

Motivation

Keep production files under the project's ~500-line guideline so Claude-assisted tooling (smart_outline, llm-tldr, grep-based navigation) doesn't have to chew through ~50% test scaffolding to understand a module. Median file in this PR shed 300–900 lines of test boilerplate from the source view.

How it was done

  • Ran a mechanical extractor that:
    • Found the first #[cfg(test)] block in each file
    • Located its matching close brace via a Rust-aware brace counter (strings, char literals, raw strings, line/block comments ignored)
    • Wrote the body (dedented) to <base>_tests.rs
    • Replaced the block in the source with:
      ```rust
      #[cfg(test)]
      #[path = "_tests.rs"]
      mod tests;
      ```
  • Preserved non-standard mod names (e.g. `api/rest.rs` uses `mod key_bytes_from_string_tests`)
  • Skipped any file where multiple `#[cfg(test)]` blocks made the extraction non-mechanical:
    • `src/openhuman/channels/runtime/dispatch.rs` (two separately-named test mods)
    • `src/openhuman/life_capture/index.rs` (five `#[cfg(test)]` blocks)

Verification

  • `cargo build --tests` green on the resulting tree
  • Stats: 260 files changed, ~43k insertions / ~43k deletions (move, not net add)
  • Note: `cargo test --lib` would silently skip integration tests under `tests/*.rs`, so always verify with `cargo build --tests` for this kind of refactor

Non-goals

  • No behavior change
  • No API change
  • No test additions / removals
  • No production code edits

Test plan

  • `cargo build --tests --manifest-path Cargo.toml` passes
  • `cargo fmt --check` passes
  • Spot-check 3–5 pairs to confirm test bodies are byte-identical to what was previously inline
  • CI green

@jwalin-shah jwalin-shah requested a review from a team April 23, 2026 14:49
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 23, 2026

Important

Review skipped

Too many files!

This PR contains 274 files, which is 124 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 9bfcd5f5-2d32-4722-b738-b73edf51b2a2

📥 Commits

Reviewing files that changed from the base of the PR and between f94fe99 and bcfa63f.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • app/src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (274)
  • app/src-tauri/src/core_process.rs
  • app/src-tauri/src/core_process_tests.rs
  • app/src-tauri/src/whatsapp_scanner/idb.rs
  • app/src-tauri/src/whatsapp_scanner/idb_tests.rs
  • src/api/rest.rs
  • src/api/rest_tests.rs
  • src/core/all.rs
  • src/core/all_tests.rs
  • src/core/cli.rs
  • src/core/cli_tests.rs
  • src/core/event_bus/events.rs
  • src/core/event_bus/events_tests.rs
  • src/core/event_bus/native_request.rs
  • src/core/event_bus/native_request_tests.rs
  • src/core/jsonrpc.rs
  • src/core/jsonrpc_tests.rs
  • src/openhuman/about_app/catalog.rs
  • src/openhuman/about_app/catalog_tests.rs
  • src/openhuman/agent/dispatcher.rs
  • src/openhuman/agent/dispatcher_tests.rs
  • src/openhuman/agent/harness/archivist.rs
  • src/openhuman/agent/harness/archivist_tests.rs
  • src/openhuman/agent/harness/definition.rs
  • src/openhuman/agent/harness/definition_tests.rs
  • src/openhuman/agent/harness/parse.rs
  • src/openhuman/agent/harness/parse_tests.rs
  • src/openhuman/agent/harness/session/runtime.rs
  • src/openhuman/agent/harness/session/runtime_tests.rs
  • src/openhuman/agent/harness/session/transcript.rs
  • src/openhuman/agent/harness/session/transcript_tests.rs
  • src/openhuman/agent/harness/session/turn.rs
  • src/openhuman/agent/harness/session/turn_tests.rs
  • src/openhuman/agent/harness/subagent_runner/ops.rs
  • src/openhuman/agent/harness/subagent_runner/ops_tests.rs
  • src/openhuman/agent/harness/tool_filter.rs
  • src/openhuman/agent/harness/tool_filter_tests.rs
  • src/openhuman/agent/harness/tool_loop.rs
  • src/openhuman/agent/harness/tool_loop_tests.rs
  • src/openhuman/agent/multimodal.rs
  • src/openhuman/agent/multimodal_tests.rs
  • src/openhuman/agent/prompts/mod.rs
  • src/openhuman/agent/prompts/mod_tests.rs
  • src/openhuman/agent/triage/evaluator.rs
  • src/openhuman/agent/triage/evaluator_tests.rs
  • src/openhuman/agent/triage/routing.rs
  • src/openhuman/agent/triage/routing_tests.rs
  • src/openhuman/autocomplete/core/engine.rs
  • src/openhuman/autocomplete/core/engine_tests.rs
  • src/openhuman/billing/schemas.rs
  • src/openhuman/billing/schemas_tests.rs
  • src/openhuman/channels/bus.rs
  • src/openhuman/channels/bus_tests.rs
  • src/openhuman/channels/controllers/definitions.rs
  • src/openhuman/channels/controllers/definitions_tests.rs
  • src/openhuman/channels/controllers/ops.rs
  • src/openhuman/channels/controllers/ops_tests.rs
  • src/openhuman/channels/controllers/schemas.rs
  • src/openhuman/channels/controllers/schemas_tests.rs
  • src/openhuman/channels/providers/discord/api.rs
  • src/openhuman/channels/providers/discord/api_tests.rs
  • src/openhuman/channels/providers/discord/channel.rs
  • src/openhuman/channels/providers/discord/channel_tests.rs
  • src/openhuman/channels/providers/email_channel.rs
  • src/openhuman/channels/providers/email_channel_tests.rs
  • src/openhuman/channels/providers/imessage.rs
  • src/openhuman/channels/providers/imessage_tests.rs
  • src/openhuman/channels/providers/irc.rs
  • src/openhuman/channels/providers/irc_tests.rs
  • src/openhuman/channels/providers/lark.rs
  • src/openhuman/channels/providers/lark_tests.rs
  • src/openhuman/channels/providers/linq.rs
  • src/openhuman/channels/providers/linq_tests.rs
  • src/openhuman/channels/providers/matrix.rs
  • src/openhuman/channels/providers/matrix_tests.rs
  • src/openhuman/channels/providers/mattermost.rs
  • src/openhuman/channels/providers/mattermost_tests.rs
  • src/openhuman/channels/providers/presentation.rs
  • src/openhuman/channels/providers/presentation_tests.rs
  • src/openhuman/channels/providers/qq.rs
  • src/openhuman/channels/providers/qq_tests.rs
  • src/openhuman/channels/providers/signal.rs
  • src/openhuman/channels/providers/signal_tests.rs
  • src/openhuman/channels/providers/telegram/channel.rs
  • src/openhuman/channels/providers/telegram/channel_tests.rs
  • src/openhuman/channels/providers/web.rs
  • src/openhuman/channels/providers/web_tests.rs
  • src/openhuman/channels/providers/whatsapp.rs
  • src/openhuman/channels/providers/whatsapp_storage.rs
  • src/openhuman/channels/providers/whatsapp_storage_tests.rs
  • src/openhuman/channels/providers/whatsapp_tests.rs
  • src/openhuman/channels/providers/whatsapp_web.rs
  • src/openhuman/channels/providers/whatsapp_web_tests.rs
  • src/openhuman/channels/routes.rs
  • src/openhuman/channels/routes_tests.rs
  • src/openhuman/composio/bus.rs
  • src/openhuman/composio/bus_tests.rs
  • src/openhuman/composio/client.rs
  • src/openhuman/composio/client_tests.rs
  • src/openhuman/composio/ops.rs
  • src/openhuman/composio/ops_tests.rs
  • src/openhuman/composio/providers/gmail/post_process.rs
  • src/openhuman/composio/providers/gmail/post_process_tests.rs
  • src/openhuman/composio/schemas.rs
  • src/openhuman/composio/schemas_tests.rs
  • src/openhuman/composio/tools.rs
  • src/openhuman/composio/tools_tests.rs
  • src/openhuman/config/ops.rs
  • src/openhuman/config/ops_tests.rs
  • src/openhuman/config/schema/channels.rs
  • src/openhuman/config/schema/channels_tests.rs
  • src/openhuman/config/schema/load.rs
  • src/openhuman/config/schema/load_tests.rs
  • src/openhuman/config/schema/proxy.rs
  • src/openhuman/config/schema/proxy_tests.rs
  • src/openhuman/config/schemas.rs
  • src/openhuman/config/schemas_tests.rs
  • src/openhuman/context/manager.rs
  • src/openhuman/context/manager_tests.rs
  • src/openhuman/context/summarizer.rs
  • src/openhuman/context/summarizer_tests.rs
  • src/openhuman/cost/tracker.rs
  • src/openhuman/cost/tracker_tests.rs
  • src/openhuman/credentials/ops.rs
  • src/openhuman/credentials/ops_tests.rs
  • src/openhuman/credentials/profiles.rs
  • src/openhuman/credentials/profiles_tests.rs
  • src/openhuman/credentials/schemas.rs
  • src/openhuman/credentials/schemas_tests.rs
  • src/openhuman/cron/ops.rs
  • src/openhuman/cron/ops_tests.rs
  • src/openhuman/cron/scheduler.rs
  • src/openhuman/cron/scheduler_tests.rs
  • src/openhuman/cron/store.rs
  • src/openhuman/cron/store_tests.rs
  • src/openhuman/doctor/core.rs
  • src/openhuman/doctor/core_tests.rs
  • src/openhuman/embeddings/ollama.rs
  • src/openhuman/embeddings/ollama_tests.rs
  • src/openhuman/embeddings/openai.rs
  • src/openhuman/embeddings/openai_tests.rs
  • src/openhuman/embeddings/store.rs
  • src/openhuman/embeddings/store_tests.rs
  • src/openhuman/integrations/apify.rs
  • src/openhuman/integrations/apify_tests.rs
  • src/openhuman/integrations/parallel.rs
  • src/openhuman/integrations/parallel_tests.rs
  • src/openhuman/learning/linkedin_enrichment.rs
  • src/openhuman/learning/linkedin_enrichment_tests.rs
  • src/openhuman/learning/reflection.rs
  • src/openhuman/learning/reflection_tests.rs
  • src/openhuman/local_ai/ops.rs
  • src/openhuman/local_ai/ops_tests.rs
  • src/openhuman/local_ai/schemas.rs
  • src/openhuman/local_ai/schemas_tests.rs
  • src/openhuman/local_ai/service/ollama_admin.rs
  • src/openhuman/local_ai/service/ollama_admin_tests.rs
  • src/openhuman/local_ai/service/public_infer.rs
  • src/openhuman/local_ai/service/public_infer_tests.rs
  • src/openhuman/memory/conversations/store.rs
  • src/openhuman/memory/conversations/store_tests.rs
  • src/openhuman/memory/ingestion.rs
  • src/openhuman/memory/ingestion_tests.rs
  • src/openhuman/memory/ops.rs
  • src/openhuman/memory/ops_tests.rs
  • src/openhuman/memory/rpc_models.rs
  • src/openhuman/memory/rpc_models_tests.rs
  • src/openhuman/memory/schemas.rs
  • src/openhuman/memory/schemas_tests.rs
  • src/openhuman/memory/store/client.rs
  • src/openhuman/memory/store/client_tests.rs
  • src/openhuman/memory/store/unified/documents.rs
  • src/openhuman/memory/store/unified/documents_tests.rs
  • src/openhuman/memory/store/unified/events.rs
  • src/openhuman/memory/store/unified/events_tests.rs
  • src/openhuman/memory/store/unified/profile.rs
  • src/openhuman/memory/store/unified/profile_tests.rs
  • src/openhuman/memory/store/unified/query.rs
  • src/openhuman/memory/store/unified/query_tests.rs
  • src/openhuman/memory/store/unified/segments.rs
  • src/openhuman/memory/store/unified/segments_tests.rs
  • src/openhuman/memory/tree/global_tree/digest.rs
  • src/openhuman/memory/tree/global_tree/digest_tests.rs
  • src/openhuman/memory/tree/score/extract/llm.rs
  • src/openhuman/memory/tree/score/extract/llm_tests.rs
  • src/openhuman/memory/tree/score/mod.rs
  • src/openhuman/memory/tree/score/mod_tests.rs
  • src/openhuman/memory/tree/score/store.rs
  • src/openhuman/memory/tree/score/store_tests.rs
  • src/openhuman/memory/tree/source_tree/bucket_seal.rs
  • src/openhuman/memory/tree/source_tree/bucket_seal_tests.rs
  • src/openhuman/memory/tree/source_tree/store.rs
  • src/openhuman/memory/tree/source_tree/store_tests.rs
  • src/openhuman/memory/tree/store.rs
  • src/openhuman/memory/tree/store_tests.rs
  • src/openhuman/providers/compatible.rs
  • src/openhuman/providers/compatible_tests.rs
  • src/openhuman/providers/reliable.rs
  • src/openhuman/providers/reliable_tests.rs
  • src/openhuman/providers/traits.rs
  • src/openhuman/providers/traits_tests.rs
  • src/openhuman/routing/provider.rs
  • src/openhuman/routing/provider_tests.rs
  • src/openhuman/screen_intelligence/engine.rs
  • src/openhuman/screen_intelligence/engine_tests.rs
  • src/openhuman/screen_intelligence/schemas.rs
  • src/openhuman/screen_intelligence/schemas_tests.rs
  • src/openhuman/security/pairing.rs
  • src/openhuman/security/pairing_tests.rs
  • src/openhuman/security/policy.rs
  • src/openhuman/security/policy_tests.rs
  • src/openhuman/security/secrets.rs
  • src/openhuman/security/secrets_tests.rs
  • src/openhuman/skills/ops.rs
  • src/openhuman/skills/ops_tests.rs
  • src/openhuman/skills/schemas.rs
  • src/openhuman/skills/schemas_tests.rs
  • src/openhuman/socket/ws_loop.rs
  • src/openhuman/socket/ws_loop_tests.rs
  • src/openhuman/subconscious/engine.rs
  • src/openhuman/subconscious/engine_tests.rs
  • src/openhuman/subconscious/schemas.rs
  • src/openhuman/subconscious/schemas_tests.rs
  • src/openhuman/subconscious/store.rs
  • src/openhuman/subconscious/store_tests.rs
  • src/openhuman/team/schemas.rs
  • src/openhuman/team/schemas_tests.rs
  • src/openhuman/threads/ops.rs
  • src/openhuman/threads/ops_tests.rs
  • src/openhuman/threads/schemas.rs
  • src/openhuman/threads/schemas_tests.rs
  • src/openhuman/tokenjuice/reduce.rs
  • src/openhuman/tokenjuice/reduce_tests.rs
  • src/openhuman/tokenjuice/rules/builtin.rs
  • src/openhuman/tokenjuice/rules/builtin_tests.rs
  • src/openhuman/tokenjuice/rules/loader.rs
  • src/openhuman/tokenjuice/rules/loader_tests.rs
  • src/openhuman/tools/impl/agent/complete_onboarding.rs
  • src/openhuman/tools/impl/agent/complete_onboarding_tests.rs
  • src/openhuman/tools/impl/agent/delegate.rs
  • src/openhuman/tools/impl/agent/delegate_tests.rs
  • src/openhuman/tools/impl/browser/browser.rs
  • src/openhuman/tools/impl/browser/browser_open.rs
  • src/openhuman/tools/impl/browser/browser_open_tests.rs
  • src/openhuman/tools/impl/browser/browser_tests.rs
  • src/openhuman/tools/impl/computer/keyboard.rs
  • src/openhuman/tools/impl/computer/keyboard_tests.rs
  • src/openhuman/tools/impl/computer/mouse.rs
  • src/openhuman/tools/impl/computer/mouse_tests.rs
  • src/openhuman/tools/impl/filesystem/git_operations.rs
  • src/openhuman/tools/impl/filesystem/git_operations_tests.rs
  • src/openhuman/tools/impl/network/composio.rs
  • src/openhuman/tools/impl/network/composio_tests.rs
  • src/openhuman/tools/impl/network/http_request.rs
  • src/openhuman/tools/impl/network/http_request_tests.rs
  • src/openhuman/tools/impl/system/proxy_config.rs
  • src/openhuman/tools/impl/system/proxy_config_tests.rs
  • src/openhuman/tools/ops.rs
  • src/openhuman/tools/ops_tests.rs
  • src/openhuman/tools/schema.rs
  • src/openhuman/tools/schema_tests.rs
  • src/openhuman/tree_summarizer/store.rs
  • src/openhuman/tree_summarizer/store_tests.rs
  • src/openhuman/voice/audio_capture.rs
  • src/openhuman/voice/audio_capture_tests.rs
  • src/openhuman/voice/schemas.rs
  • src/openhuman/voice/schemas_tests.rs
  • src/openhuman/voice/server.rs
  • src/openhuman/voice/server_tests.rs
  • src/openhuman/webhooks/ops.rs
  • src/openhuman/webhooks/ops_tests.rs
  • src/openhuman/webhooks/router.rs
  • src/openhuman/webhooks/router_tests.rs
  • src/openhuman/webhooks/schemas.rs
  • src/openhuman/webhooks/schemas_tests.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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 and usage tips.

@jwalin-shah
Copy link
Copy Markdown
Contributor Author

closing/reopening to retrigger CI after fmt fix (empty commit didn't trigger)

@senamakel
Copy link
Copy Markdown
Member

damn this is too big of a PR 😅 in an ideal case small PRs are great.. helps debug things better.

i agree with the design decision. if we can resolve the merge conflicts then will merge this asap before it breaks future code @jwalin-shah

…les)

Moves inline `#[cfg(test)] mod tests { ... }` blocks out of 137 oversized
source files into sibling `*_tests.rs` files referenced via
`#[path = "..."] mod tests;`. Purely mechanical: test bodies and production
code are byte-identical, only the location changes.

Motivation: keep production files under the project's ~500-line guideline so
Claude-assisted tooling (smart_outline, llm-tldr, grep-based navigation)
doesn't have to chew through ~50% test scaffolding to understand a module.

One import tweak: threads/ops_tests.rs needs an explicit
`use crate::openhuman::threads::title::collapse_whitespace;` because the
original inline tests referenced a helper that the containing ops.rs module
does not import or re-export (inline tests could see it via crate-internal
visibility; the sibling needs it in scope).

Verification: `cargo build --tests --manifest-path Cargo.toml` green.
(Note: `cargo test --lib` silently skips `tests/*.rs` — always use
`cargo build --tests` to catch extraction errors.)

Intentionally NOT extracted (multi-block test files — non-mechanical):
- src/openhuman/channels/runtime/dispatch.rs (two separately-named mods)
- src/openhuman/life_capture/index.rs (five #[cfg(test)] blocks)

No behavior change, no API change, no test additions/removals.
Forces a real file change so GitHub Actions re-runs Type Check on this PR
after the earlier fmt-only commit didn't trigger workflows.
@jwalin-shah jwalin-shah force-pushed the refactor/extract-tests-to-siblings branch from 6cdd623 to 47a43c8 Compare April 25, 2026 09:11
@jwalin-shah
Copy link
Copy Markdown
Contributor Author

Rebased onto main (49 commits ahead), all 21 merge conflicts resolved. cargo build --tests green (0 errors, 1 pre-existing warning). cargo fmt --check clean. Ready for merge @senamakel

jwalinsshah and others added 4 commits April 25, 2026 02:40
# Conflicts:
#	src/openhuman/agent/prompts/mod.rs
#	src/openhuman/config/schema/load.rs
#	src/openhuman/integrations/parallel.rs
#	src/openhuman/local_ai/ops.rs
#	src/openhuman/local_ai/schemas.rs
#	src/openhuman/local_ai/service/public_infer.rs
@senamakel senamakel self-assigned this Apr 26, 2026
@senamakel senamakel merged commit e0e7e1b into tinyhumansai:main Apr 26, 2026
9 checks passed
sanil-23 added a commit to sanil-23/openhuman that referenced this pull request Apr 26, 2026
Upstream's tinyhumansai#835 (refactor: extract inline tests to sibling _tests.rs)
collided with this branch's inline-test edits in 4 memory-tree files.
Resolution: take upstream's external-file declaration in each main
.rs and migrate the chunk_id 4-arg + new fanout tests into the
existing _tests.rs siblings:

* bucket_seal.rs / bucket_seal_tests.rs — 4-arg chunk_id +
  fanout_at_l1_triggers_l2_seal + upper_level_does_not_seal_below_fanout
* global_tree/digest_tests.rs — 4-arg chunk_id (2 callsites)
* score/mod_tests.rs — 4-arg chunk_id (1 callsite)
* store_tests.rs — 4-arg chunk_id (1 callsite)

catalog.rs collided with upstream's two new notifications_*
Capability entries — kept all three side by side.

Tests: source_tree 39/39, full memory_tree suite 336/336, bin
compiles. The level-aware should_seal, truncate_for_embed, LLM
summariser, and quota-meter fixes from the prior commits all merged
cleanly outside the conflict regions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
jwalin-shah pushed a commit to jwalin-shah/openhuman that referenced this pull request Apr 26, 2026
…ation)

Resolves conflicts after main absorbed:
  - tinyhumansai#835 inline-test extraction to sibling _tests.rs files
  - tinyhumansai#803 memory namespaces (Memory trait gained `namespace` arg + `namespace_summaries`)
  - tinyhumansai#839 memory_tree retrieval RPC handlers
  - install.sh resolver / smoke test changes

Conflict resolutions:
  - src/openhuman/agent/prompts/mod.rs + mod_tests.rs:
      kept branch's snapshot_pair production code (UserFilesSection now prefers
      session-frozen MemorySnapshot over workspace files), then applied tinyhumansai#835's
      extraction by moving the inline mod tests block to mod_tests.rs sibling.
      Tests retain the `curated_snapshot: None` additions from 1976ba4.
  - src/openhuman/agent/harness/subagent_runner/ops.rs + ops_tests.rs: same
      pattern — kept branch's session-snapshot wiring, extracted inline tests
      to ops_tests.rs sibling.
  - src/core/all.rs: kept both webview_apis (main) and life_capture +
      curated_memory (branch) controller registrations.
  - scripts/install.sh: kept branch's clearer "Resolved URL was empty…" diag
      and the test_install.sh resolver-unit-test job in installer-smoke.yml.

Compatibility patches:
  - ops_tests.rs NoopMemory updated to new Memory trait (namespace arg on
    store/get/list/forget, RecallOpts on recall, added namespace_summaries).
  - help/prompt.rs test fixture gets curated_snapshot: None.

cargo build --tests passes locally on darwin-aarch64.
senamakel pushed a commit that referenced this pull request Apr 29, 2026
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
AusAgentSmith pushed a commit to AusAgentSmith/openhuman that referenced this pull request May 23, 2026
…les) (tinyhumansai#835)

Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
AusAgentSmith pushed a commit to AusAgentSmith/openhuman that referenced this pull request May 23, 2026
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.

3 participants