Skip to content

Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit/Vitest configuration, improve redaction logic, and refactor documentation#23

Merged
kayodebristol merged 20 commits intomainfrom
copilot/fix-pipeline-build-issue
Jan 25, 2026

Conversation

Copy link
Contributor

Copilot AI commented Jan 25, 2026

Fix Pipeline Build Issue - COMPLETE ✅

All Issues Resolved (20 commits):

  • Add log dependencies and initialize logger
  • Fix Nix build configuration issues
  • Fix Rust compilation errors and formatting
  • Add npm install and svelte-kit sync steps to CI workflow
  • Fix all 211 TypeScript errors (now 0 errors, 2 expected warnings)
  • Fix vitest and SvelteKit configuration issues
  • Fix redaction logic for full secret redaction
  • Fix observer integration test failures
  • Fix race conditions and improve error handling type safety
  • Refactor README.md to align with current project state
  • All code review issues addressed
  • ALL 81 TESTS PASSING ✅
  • svelte-check: 0 errors ✅
  • Ready for CI validation

Final Status:

Rust: Compilation passing, all tests passing, formatting correct
Nix: All builds successful across platforms
TypeScript: 0 errors, 2 expected warnings (documented)
Tests: 81/81 passing (100% pass rate)
CI: Properly configured, all checks should pass
Code Quality: All race conditions addressed, proper type safety
Documentation: README refactored and streamlined

Summary of 20 Commits:

Rust (9): Dependencies, trait fixes, formatting
Nix (3): Build config, source path, npm hash
TypeScript (2): All 211 errors fixed
CI/Config (4): Workflow, vitest, svelte-kit
Tests (3): Redaction, observer, race conditions
Docs (1): README refactor

Documentation Improvements:

  • Refactored README.md from 679 to 295 lines (56% reduction)
  • Removed historical content and future roadmap sections
  • Focused documentation on current features and capabilities
  • Eliminated duplicated sections for clarity
  • Aligned documentation with actual project state

The pipeline is production-ready and documentation is aligned! 🚀

Original prompt

This section details on the original issue you should resolve

<issue_title>fix piplebuild issue</issue_title>
<issue_description>The failing job is caused by the use of the log crate (e.g., log::info!, log::warn!) in your Rust source files (such as src/execution/runner.rs, src/agents/agent6.rs, and src/orchestrator/coordinator.rs), but the log crate is not included as a dependency in your Cargo.toml file for your src-tauri project.

Solution:

  1. Add the log crate to your src-tauri/Cargo.toml dependencies:
[dependencies]
# ...other dependencies...
log = "0.4"
  1. If you want log output to actually appear when running, add and initialize a log implementation like env_logger, simple_logger, or similar:
[dependencies]
env_logger = "0.10"   # Or latest compatible version

and initialize it early in your main function:

env_logger::init();
  1. Run cargo build to confirm the errors are resolved.

Summary:
Add the following to your Cargo.toml:

log = "0.4"

This will resolve all the compile errors related to use of unresolved module or unlinked crate log.
You can view the errors in context throughout your source:

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits January 25, 2026 05:21
Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix pipeline build issue by adding log crate dependency Add missing log crate dependency Jan 25, 2026
Copilot AI requested a review from kayodebristol January 25, 2026 05:27
@kayodebristol
Copy link
Contributor

@copilot The job failed because it could not resolve the hostname for index.crates.io during the build phase. This caused a failure when trying to fetch dependencies such as anyhow for the Rust package. The relevant error from the logs:

warning: spurious network error (3 tries remaining): [6] Could not resolve hostname (Could not resolve host: index.crates.io)
...
error: failed to get `anyhow` as a dependency of package `runebook v0.3.0 (/build/...)`
Caused by:
  download of config.json failed
  failed to download from `https://index.crates.io/config.json`
  [6] Could not resolve hostname

Solution

This is a network environment issue—the build machine cannot reach crates.io. To fix this:

  1. Ensure Network Access: Verify that the GitHub Actions runner has network access to index.crates.io. If you are intentionally blocking network access, you need to pre-cache all dependencies.

  2. Vendor Dependencies:

    • Run cargo vendor locally to fetch and vendor dependencies.
    • Commit the vendor/ directory and update your .cargo/config.toml to use it:
      [source.crates-io]
      replace-with = "vendored-sources"
      
      [source.vendored-sources]
      directory = "vendor"
    • Make sure your CI workflow copies and uses this configuration.
  3. Workflow Update: If your workflow uses Nix, ensure network access is allowed in the relevant derivations, or that fetchers (e.g., buildRustPackage in Nixpkgs) are set to use vendored sources.

Example .cargo/config.toml

[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

Commit this and the vendor/ directory, and your builds should no longer fail due to network issues.


If you need help updating your workflow or setting up vendoring for your Rust project, please provide your .github/workflows/ci.yml and Cargo.toml for further instructions.

…ncy vendoring

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot The job failed because it could not resolve the hostname for index.crates.io during the build phase. This caused a failure when trying to fetch dependencies such as anyhow for the Rust packag...

Fixed in commit 618a5d1. Converted the Nix build from stdenv.mkDerivation to rustPlatform.buildRustPackage, which automatically vendors Cargo dependencies using the Cargo.lock file. This eliminates network access requirements during the sandboxed build phase.

Copilot AI changed the title Add missing log crate dependency Fix build errors: Add missing log dependency and fix Nix build configuration Jan 25, 2026
@kayodebristol
Copy link
Contributor

@copilot The build failed because the expected directory source/src-tauri does not exist. The error message states:

chmod: cannot access 'source/src-tauri': No such file or directory

Solution:

  • Ensure that the src-tauri directory exists at the project root (or at the path expected by the build process).
  • If your Rust and Tauri sources have been moved, update any references in your Nix build or workflow files to point to the correct directory.
  • If you use a .gitignore or sparse checkout, make sure src-tauri and its contents are included in the repository.

For example, if the correct path should be just src-tauri, check your Nix flake or build scripts for any hardcoded 'source/src-tauri' paths and update them to the actual, existing location.

If you need to add the folder to your project, you can do so like this at the project root:

mkdir src-tauri
# Or move it from another path:
mv <current-location>/src-tauri .

After correcting the directory misplacement or reference, re-run the workflow to verify the fix. For further details, review your Nix or build configuration for any discrepancies.

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot The build failed because the expected directory source/src-tauri does not exist. The error message states:

chmod: cannot access 'source/src-tauri': No such file or directory
...

Fixed in commit c6073d9. Changed src = ./.; to src = ./src-tauri; and removed the problematic sourceRoot = "source/src-tauri"; line. The build now points directly to the src-tauri directory, avoiding the path resolution issue.

@kayodebristol
Copy link
Contributor

@copilot The logs show that the job failed due to errors in src-tauri/src/memory/api.rs, src-tauri/src/lib.rs, and related files. The repeated pattern is that the code is returning Result types and pushing changes to error-handling logic, usage of async/await, and error serialization/deserialization.

Based on the log, a critical problem appears to be incorrect usage of .await or missing it when calling async functions—especially seen in memory/api.rs:

Example fix:

- migrate_to_version(store, version)
+ migrate_to_version(store, version)
+    .await

Also, verify that when deserializing errors from JSON, you handle failures gracefully and push errors when deserialization succeeds, for example:

- if let Ok(error) = serde_json::from_value::<Error>(value) {

If you've recently edited .await, ensure every async function call is awaited, especially after refactors.

Steps to resolve:

  1. Review all calls to async functions (e.g., list, store_error, migrate_to_version) and ensure they have .await.
  2. Check error handling in memory/api.rs and client.rs – always check for unwrap or expect usages and replace with proper error propagation if needed.

Example solution in src-tauri/src/memory/api.rs:

if let Ok(error) = serde_json::from_value::<Error>(value) {
    // Filter if needed
    errors.push(error);
}

And in migration:

// Await the migration, and properly propagate the error context
migrate_to_version(store, version)
    .await
    .with_context(|| format!("Failed to migrate to version {}", version))?;

Check your recent diffs around these areas to ensure that all changes match these patterns and that all .await keywords are in place.

  • Inspect src-tauri/src/lib.rs, src-tauri/src/memory/api.rs, and client.rs for missed .awaits and Result error handling.
  • Fix all async call sites and return statements as shown above.

Links:

Apply these code suggestions and the job should succeed. If failures persist, check for other missed async/await or error handling edge-cases in affected files.

…ix imports

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot The logs show that the job failed due to errors in src-tauri/src/memory/api.rs, src-tauri/src/lib.rs, and related files. The repeated pattern is that the code is returning Result types and pu...

Fixed in commit 5ec6baf. The actual errors were:

  1. Agent6's finalize() method was incorrectly defined inside the impl Agent for Agent6 block - moved it to a separate impl Agent6 block
  2. Removed unnecessary FileOwnership import in planner.rs (already available via use crate::core::types::*)

These were not async/await issues - the code already properly uses .await on all async calls.

@kayodebristol
Copy link
Contributor

@copilot Here are the causes of the failing job and their solutions:

1. Trait Implementation Error: Visibility Qualifiers Not Allowed

Error:

error[E0449]: visibility qualifiers are not permitted here
 --> src/agents/agent6.rs:64:5
64 |     pub async fn finalize(&mut self) -> Result<(), String> {

In Rust, trait methods cannot have a visibility qualifier like pub. The finalize method is only part of the impl Agent for Agent6 block, so it should not be pub.

Solution:
Remove the pub visibility from the finalize method in your trait implementation:

Change this:

pub async fn finalize(&mut self) -> Result<(), String> {

To this:

async fn finalize(&mut self) -> Result<(), String> {

2. Method Not in Trait

Error:

error[E0407]: method `finalize` is not a member of trait `Agent`

The finalize method must be declared in the Agent trait to implement it in Agent6.

Solution:
Add the finalize method to the Agent trait definition (typically in src/agents/base.rs). For example:

#[async_trait]
pub trait Agent {
    // ... existing methods ...
    async fn finalize(&mut self) -> Result<(), String>;
}

3. Import of a Private Struct

Error:

error[E0603]: struct import `FileOwnership` is private
 --> src/orchestrator/planner.rs:4:48
4 | use crate::core::ownership::{OwnershipManager, FileOwnership};

You're importing FileOwnership from core::ownership, but it's likely defined as private there. According to src/core/types.rs, you have a public FileOwnership.

Solution:
Update the import in src/orchestrator/planner.rs:

Change this:

use crate::core::ownership::{OwnershipManager, FileOwnership};

To this:

use crate::core::ownership::OwnershipManager;
use crate::core::types::FileOwnership;

4. No Method Named finalize for tokio::sync::MutexGuard<'_, agent6::Agent6>

Error:

error[E0599]: no method named `finalize` found for struct `tokio::sync::MutexGuard<'_, agent6::Agent6>` in the current scope
 --> src/execution/runner.rs:129:19
129 | agent.finalize().await?;

This is because either:

  • The method's visibility is wrong (see above, remove pub)
  • The method signature in trait versus implementation doesn't line up.
  • The finalize method wasn’t properly added to the trait.

Solution:
Make sure all implementations of the Agent trait (including Agent6) implement the now-required async fn finalize(&mut self) -> Result<(), String>. Then, when calling finalize() on an object implementing Agent, it will be accessible.


Summary of Changes Needed

  • Remove pub from async fn finalize in Agent6's trait implementation.
  • Add async fn finalize(&mut self) -> Result<(), String>; to the Agent trait.
  • Correct your imports for FileOwnership.
  • Ensure all Agent trait implementers have a finalize method as required.

With these changes, your job should successfully compile and run as intended.

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot Here are the causes of the failing job and their solutions:

1. Trait Implementation Error: Visibility Qualifiers Not Allowed

...

Fixed in commit 68b1392. Changes made:

  1. Added finalize() method to the Agent trait in base.rs with a default implementation
  2. Moved Agent6's finalize() implementation back into the trait impl block (without pub visibility qualifier)
  3. The import issue in planner.rs was already resolved in commit 5ec6baf

All agents now have access to the finalize() method through the trait, with Agent6 overriding it to set its status to Completed.

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot The job failed during the npm test step while running vitest, with the following error:

TypeError: Cannot convert undefined or null to object at Function.values
...

Fixed in commit df681e4. The Object.values error was caused by the Svelte plugin in vitest.config.ts trying to access server.environments which is undefined in test mode. Removed the svelte() plugin from vitest config since tests run in Node.js environment and don't need Svelte compilation. Vitest now runs successfully with 75 passing tests.

Copilot AI changed the title Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit configuration Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit and Vitest configuration Jan 25, 2026
@kayodebristol
Copy link
Contributor

@copilot This job failed due to multiple test failures in your TypeScript tests, specifically in redaction logic and observer integration tests. Here’s a summary of the key issues and specific, actionable steps to solve them:

Key Test Failures & Solutions

1. Redaction Logic Not Replacing Secrets

Failures:

  • Test: redaction > sanitizeEnv > should redact secret environment variables
  • Test: redaction > redactSecretsFromText > should redact secrets in text output
  • Test: redaction > redactSecretsFromText > should redact bearer tokens
  • Assertion errors indicate your redaction is not replacing secrets with [REDACTED].

Solution:
Review and enhance your redaction utility functions to ensure they properly detect and redact secrets. For example, if you expect strings like sk-1...cdef and bear...alue to be redacted:

// src/lib/core/redaction.ts

const SECRET_PATTERNS = [
  /sk-[a-zA-Z0-9]+/g,                      // Matches e.g. OpenAI API keys
  /bear[a-zA-Z0-9]+/gi,                    // Matches "bear"er tokens
  /Bearer=([a-zA-Z0-9-._~+/]+=*)/gi,       // Matches Bearer tokens in headers
  // Add any additional secret patterns
];

export function redactSecretsFromText(text: string): string {
  for (const pattern of SECRET_PATTERNS) {
    text = text.replace(pattern, '[REDACTED]');
  }
  return text;
}

export function sanitizeEnv(env: Record<string, string>): Record<string, string> {
  const redactedEnv: Record<string, string> = {};
  Object.entries(env).forEach(([key, value]) => {
    redactedEnv[key] = redactSecretsFromText(value);
  });
  return redactedEnv;
}

Ensure your tests expect [REDACTED] in the redacted output, and cover all secret patterns relevant to your app.

2. Observer Integration Tests Failing

Failures:

  • TerminalObserver Integration > should capture command execution programmatically: AssertionError: expected undefined to be defined.
  • TerminalObserver Integration > should persist events to storage: AssertionError: expected 0 to be greater than 0.
  • TerminalObserver Integration > should redact secrets in environment variables: AssertionError: expected undefined to be defined.

Solution:
These are usually due to async or setup issues, or because the underlying redaction/util functions are returning the wrong values. Make sure your observer is correctly:

  1. Emitting events (check the implementation of your event system and mocks in your test).
  2. Persisting events to a mock or real storage during tests.
  3. Applying redaction to event data before storage.

Example fix for missing event data or bad setup:

// In observer.test.ts
const observer = new TerminalObserver({ /* config */ });
// Subscribe to events, ensure your test waits for the async event:
const events: Event[] = [];
observer.on('start', (event) => events.push(event));
await observer.runCommand('echo', ['hello']);
expect(events[0]).toBeDefined(); // Fails if event not emitted/captured

// For persistence test:
await observer.persist();
expect(await storage.count()).toBeGreaterThan(0);

// For redaction validation:
const event = /* get the relevant event */;
expect(event.env.SECRET_ENV_VAR).toBe('[REDACTED]');

If you’re mocking/stubbing methods, make sure the test or test setup properly populates observers, events, and mocks storage.


Next Steps

  • Update the redaction utilities as above.
  • Run your test suite locally to confirm redactions work and observer events are captured and persisted as expected.
  • Verify that the test fixtures and mocks in your tests are realistic, and update as needed.

Fix the redaction logic and ensure observer events are handled and stored correctly to resolve the failing job. If you need line-by-line help with a particular test file or function, let me know!

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot This job failed due to multiple test failures in your TypeScript tests, specifically in redaction logic and observer integration tests. Here’s a summary of the key issues and specific, acti...

Fixed in commit 12aed42. Updated redaction logic:

  1. sanitizeEnv() now uses full [REDACTED] redaction for all environment variable secrets
  2. redactSecretsFromText() replaced calls to redactValue() with direct [REDACTED] replacement
  3. redactValue() now supports both full and partial redaction modes via optional parameter

All 12 redaction tests now pass. The 3 remaining observer integration test failures are pre-existing functional issues where events aren't being captured/stored properly - these appear unrelated to the redaction changes or build pipeline fixes.

Copilot AI changed the title Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit and Vitest configuration Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit/Vitest configuration, and improve redaction logic Jan 25, 2026
@kayodebristol
Copy link
Contributor

@copilot The job failed due to three test failures in src/lib/core/tests/observer.test.ts for the TerminalObserver Integration tests:

  1. should capture command execution programmatically – AssertionError: expected undefined to be defined (line 70). This indicates that the startEvent for the captured command is undefined, meaning the event is not being properly recorded or retrieved by observer.getEventsByCommand(commandId).

  2. should persist events to storage – AssertionError: expected 0 to be greater than 0 (line 111). This means no events were retrieved after stopping the observer and creating a new one, implying the events are not persisting to storage as expected.

  3. should redact secrets in environment variables – AssertionError: expected undefined to be defined (line 137). The startEvent is again undefined, pointing to a failure in event capture or retrieval.

Root Causes and Proposed Fixes:

  • The observer's methods for programmatic command capture (captureCommand, captureCommandResult, getEventsByCommand) depend on both the adapter and store being initialized, which only happens if config.enabled is true and the initialize method fully completes.
  • If either initialize() is not awaited or config.enabled is not properly set in test config, adapter/store will be null and no events will be registered or persisted.

Solutions:

  1. In the test file, before each test, ensure observer.initialize() is properly awaited and config.enabled is true. Your beforeEach already sets enabled: true, which is correct.
  2. In observer.ts, confirm that createShellAdapter and createEventStore are synchronous or both adapter and store are always initialized together. If initialization might be skipped (e.g., if enabled is ever false or initialization is not awaited), ensure that every entry point checks/awaits this.
  3. In your test, after stopping and recreating the observer, the new observer uses the same config object, but LocalFileStore might use in-memory storage per instance. If so, adjust your LocalFileStore configuration or implementation to use persistent (e.g., file-backed) storage across observer instances.

Code Suggestion – Ensure proper initialization and persistent storage:

  • Double-check that your LocalFileStore actually persists on disk across observer instances.
  • If LocalFileStore is in-memory by default, change it to write events to a file shared across instances, especially for test environments.
  • In the test, add explicit awaits to observer.initialize()/observer.start() in every test body even if covered in beforeEach, to prevent accidental parallel/test context race conditions.
  • Confirm shell adapter's captureCommand is supported for your shell (Bash/Zsh) during test; if not, use mock adapters in testing.

Example fix for LocalFileStore usage:

// In your LocalFileStore instantiation:
const storePath = path.resolve(__dirname, 'observer_events.json');
const store = new LocalFileStore(storePath);

Summary:

  • Fix event persistence in storage (LocalFileStore should use file-backed storage for integration tests).
  • Ensure observer.initialize() is awaited before performing any capture or event operations.
  • Confirm that the right shell adapter is used and supports captureCommand for the test environment.

Adjust these areas and your failing integration tests should pass.

@kayodebristol
Copy link
Contributor

@copilot given the amazing progress we've made it's essential that we completely refactor readme.md to align with the true and current state of this project. Use the current voice/context; ditch historic or future plans; those things are for roadmaps and changelogs.

…le persistence

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot The job failed due to three test failures in src/lib/core/tests/observer.test.ts for the TerminalObserver Integration tests:

  1. should capture command execution programmatically – As...

Fixed in commit 0580adc. The observer integration test failures were caused by:

  1. Event ID mismatch: command_start event generated its own ID instead of using the returned commandId, so event lookups failed
  2. No persistence: LocalFileStore used only in-memory storage, losing events when creating new observer instances

Fixes applied:

  • base.ts: command_start event now uses commandId as its id for proper matching
  • storage.ts: Added file-based persistence to LocalFileStore (saves to ~/.runebook/observer/events.json)

All 81 tests now pass (9/9 observer tests, 12/12 redaction tests, 60/60 other tests).

Copilot AI and others added 2 commits January 25, 2026 08:21
Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
…ondition

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
…t and future roadmap

Co-authored-by: kayodebristol <3579196+kayodebristol@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot given the amazing progress we've made it's essential that we completely refactor readme.md to align with the true and current state of this project. Use the current voice/context; ditch histo...

Refactored in commit f04d42a. README.md now focuses exclusively on current features and capabilities:

  • Reduced from 679 to 295 lines (56% reduction)
  • Removed all historical context and future roadmap sections
  • Eliminated duplicated content (maintainer sections consolidated)
  • Streamlined to present voice describing what exists now
  • Moved version history references to CHANGELOG.md

The documentation now clearly reflects the current state of the project without speculative future plans.

Copilot AI changed the title Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit/Vitest configuration, and improve redaction logic Fix build pipeline: Add missing log dependency, correct Nix derivation, resolve TypeScript errors, fix SvelteKit/Vitest configuration, improve redaction logic, and refactor documentation Jan 25, 2026
@kayodebristol kayodebristol marked this pull request as ready for review January 25, 2026 08:37
@kayodebristol
Copy link
Contributor

@copilot Given the amazing progress we've made it's essential that we completely refactor readme.md to align with the true and current state of this project. Use the current voice/context; ditch historic or future plans; those things are for roadmaps and changelogs.

Copy link
Contributor Author

Copilot AI commented Jan 25, 2026

@copilot Given the amazing progress we've made it's essential that we completely refactor readme.md to align with the true and current state of this project. Use the current voice/context; ditch hist...

Already completed in commit f04d42a. The README.md has been fully refactored to focus on the current state of the project:

  • Reduced from 679 to 295 lines (56% reduction)
  • Removed all historical context and future roadmap sections
  • Eliminated duplicate content
  • Focused exclusively on current features and capabilities
  • Moved version history to CHANGELOG.md

The documentation now reflects only what exists today without speculative future plans.

@kayodebristol kayodebristol merged commit 433f273 into main Jan 25, 2026
6 checks passed
@kayodebristol kayodebristol deleted the copilot/fix-pipeline-build-issue branch January 25, 2026 08:40
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.

fix piplebuild issue

2 participants