‹ Reports
The Dispatch

The Dispatch Demo - CADmium-Co/CADmium


Executive Summary

CADmium is a web-based CAD program designed for home hobbyists to create 3D printable designs. Developed by CADmium-Co, the project is in its early prototype stage, aiming for an MVP release by April 2024. The project leverages Rust for its core engine and modern web technologies like SvelteKit and Tailwind for the UI. The development trajectory is positive, with active contributions focusing on both feature additions and stability improvements.

Notable Elements

Recent Activity

Team Members and Contributions

Collaboration Patterns

Issues and PRs

Risks

CI/CD Pipeline Issues

Feature Complexity

Limited Collaboration

Of Note

  1. High Activity Level: The project shows a high level of recent activity, indicating strong momentum towards the MVP release.
  2. Focus on User Experience: Enhancements like CubeGizmo improvements (#16) and workbench renaming (#21) highlight a focus on making the software more user-friendly.
  3. Comprehensive Type Safety: Extensive use of TypeScript types and type guards improves overall code quality and reduces runtime errors.

Conclusion

The CADmium project is progressing well towards its MVP release with active development focusing on both new features and stability improvements. However, ongoing CI/CD pipeline issues pose a significant risk to productivity. The team shows strong individual contributions but limited direct collaboration, which could affect the resolution of complex issues. Overall, the project is on a positive trajectory but requires attention to CI/CD challenges and enhanced collaboration for sustained progress.

Quantified Commit Activity Over 14 Days

Developer Avatar Branches PRs Commits Files Changes
av8ta 1 3/3/0 3 7 4601
Matt Ferraro 3 1/1/1 19 8 2223
Dimitris Zervas 1 3/1/0 1 4 119
None (drewbt) 0 3/0/0 0 0 0
None (bherbruck) 0 1/0/0 0 0 0
Drayton Munster (dwmunster) 0 1/0/0 0 0 0
Shane (Sosho) Chang (soshochang) 0 1/0/0 0 0 0

PRs: created by that dev and opened/merged/closed-unmerged during the period

Detailed Reports

Report On: Fetch commits



Project Overview

CADmium is an innovative CAD (Computer-Aided Design) program designed to run directly in a web browser. It aims to provide a lightweight, user-friendly interface for home hobbyists who want to design parts for 3D printing and other personal projects. The project is spearheaded by the organization CADmium-Co and is currently in the early prototype stage, targeting an MVP (Minimum Viable Product) release by April 2024. The software leverages the Rust-based boundary representation engine truck, and integrates with modern web technologies like SvelteKit and Tailwind for its UI. The overall trajectory of the project is positive, with active development and a clear roadmap towards more comprehensive features and potential monetization through a hosted version.

Team Members and Recent Activities

av8ta

Dimitris Zervas (dzervas)

Matt Ferraro (MattFerraro)

Shane (Sosho) Chang (soshochang)

19daysago--Replace Gizmo CubeGizmo(#9)Gizmo replaced CubeGizmo(custom copy Gizmo)update axis colors,redu font size add font color remove circle remove opacity changeadd gray cube position x y z axis textCubeGizmo-fix axis label text getting cut off certain positionsCubeGizmo-hide axis text when axis orthogonal viewCubeGizmo-orient camera when faces clickedCubeGizmo-add triangle controls rotate when triangle controls clickedCubeGizmo-fix triangle up down accidentally deleted lineCubeGizmo-remove unused code original Gizmorun formatter rename.d.ts files.ts remove unused CubeGizmoEvents CubeGizmoSlots.ts file by Shane(Sosho)Chang(soshochang)

bherbruck

No recent commits.

dwmunster

No recent commits.

drewbt

No recent commits.

Analysis and Patterns

The recent activities indicate that Matt Ferraro is the most active contributor over the past two weeks. His focus has been on stabilizing core functionalities like extrusion and fusion of solids within the CAD system. He has also been updating documentation and improving test coverage.

av8ta has been actively involved in maintaining build configurations and updating dependencies. This includes significant changes to CI workflows and package management files.

Dimitris Zervas contributed a notable feature allowing users to rename workbenches within the application.

Shane Chang's last significant contribution was replacing the Gizmo component with CubeGizmo for better user interaction in visualizing axes.

There are no recent contributions from bherbruck, dwmunster or drewbt.

The collaboration appears limited based on commit messages; most contributors seem to work independently on their respective tasks. This could be due to the modular nature of the project or efficient task allocation among team members.

Overall,the project shows healthy development activity focusing both on new features and stability improvements.The team is making steady progress toward their MVP release target.

Report On: Fetch issues



Recent Activity Analysis

Recent GitHub issue activity for the CADmium project has been notably high, with several issues being created and closed within the last few days. This suggests a period of intense development and possibly a sprint to address critical tasks.

Anomalies and Themes

Several issues (#20, #17, #16) involve complex technical challenges such as implementing new features or refactoring existing code. The presence of detailed comments and discussions indicates active collaboration among contributors. Notably, issues like #17 and #16 involve significant mathematical and algorithmic work, suggesting a focus on improving the core functionality and stability of the software.

Issues like #24 (Failed Deployments) and #25 (Rework CI triggers) highlight ongoing problems with the project's CI/CD pipeline, which could be affecting productivity and reliability. The urgency of these issues is underscored by their recent creation and the fact that they remain open.

Another theme is the enhancement of user experience and interface elements, as seen in issues #27 (Implement Zoom To Pointer) and #16 (CubeGizmo - add curved arrow controls). These improvements are crucial for making the software more intuitive and user-friendly.

Issue Details

Most Recently Created Issues

  1. #30: Rust build touchup

    • Priority: High
    • Status: Open
    • Created: 0 days ago
  2. #29: Add devcontainer

    • Priority: Medium
    • Status: Open
    • Created: 0 days ago
  3. #27: Implement Zoom To Pointer

    • Priority: High
    • Status: Open
    • Created: 0 days ago
  4. #26: Add Rust build and testing instructions to the README

    • Priority: Medium
    • Status: Open
    • Created: 0 days ago
  5. #25: Rework CI triggers

    • Priority: High
    • Status: Open
    • Created: 0 days ago
  6. #24: Failed Deployments

    • Priority: Critical
    • Status: Open
    • Created: 0 days ago
  7. #20: [DRAFT] Ability to create sketches against solid faces

    • Priority: High
    • Status: Open
    • Created: 0 days ago
  8. #17: Move Constraint solver into a separate crate and put it onto a solid mathematical foundation

    • Priority: High
    • Status: Open
    • Created: 1 day ago
    • Updated: 0 days ago
  9. #16: CubeGizmo - add curved arrow controls and light blue color on controls when moused over

    • Priority: Medium
    • Status: Open
    • Created: 1 day ago
    • Updated: 0 days ago
  10. #14: Simplify angle derivative in apply_torsion_forces

    • Priority: Medium
    • Status: Open
    • Created: 1 day ago
    • Updated: 0 days ago

Most Recently Updated Issues

  1. #17: Move Constraint solver into a separate crate and put it onto a solid mathematical foundation

    • Priority: High
    • Status: Open
    • Created: 1 day ago
    • Updated: 0 days ago
  2. #16: CubeGizmo - add curved arrow controls and light blue color on controls when moused over

    • Priority: Medium
    • Status: Open
    • Created: 1 day ago
    • Updated: 0 days ago
  3. #14: Simplify angle derivative in apply_torsion_forces

    • Priority: Medium
    • Status: Open
    • Created: 1 day ago
    • Updated**: 0 days ago

Report On: Fetch pull requests



Analysis of Pull Requests for CADmium-Co/CADmium

Open Pull Requests

  1. PR #30: Rust build touchup

    • Created: 0 days ago
    • Details: This PR aims to improve the Rust development build process by using the dev profile, better utilizing turbo, and running build:dev before listening for Rust file changes.
    • Notable Changes:
    • Fixes in CI configuration.
    • Adjustments in package.json files.
    • Potential Issues: No immediate issues noted. The PR is very recent and might need more review.
  2. PR #29: Add devcontainer

    • Created: 0 days ago
    • Details: Adds a development container configuration to the project.
    • Files Added: .devcontainer/devcontainer.json, .devcontainer/scripts/on-create.sh, .github/dependabot.yml
    • Potential Issues: None noted. This PR is beneficial for standardizing development environments.
  3. PR #20: [DRAFT] Ability to create sketches against solid faces

    • Created: 0 days ago
    • Details: Adds functionality to create sketches on solid faces but currently faces two major issues related to identifying the owning solid and determining the correct normal.
    • Potential Issues: The draft status indicates that it is not ready for merging and requires further development and problem-solving.
  4. PR #16: CubeGizmo - add curved arrow controls and light blue color on controls when moused over

    • Created: 1 day ago
    • Details: Enhances the CubeGizmo with curved arrow controls for camera rotation and visual feedback when hovered over.
    • Comments: Positive feedback from reviewers, with suggestions for future improvements like gradual camera movement and touch support.
    • Potential Issues: None noted; reviewers are supportive of merging after local testing.
  5. PR #14: Simplify angle derivative in apply_torsion_forces

    • Created: 1 day ago
    • Details: Replaces the finite difference approximation with an analytical derivative in apply_torsion_forces.
    • Comments: Awaiting testing before merging.
    • Potential Issues: None noted; awaiting further testing.
  6. PR #13: Added feature rotate about scene floor

    • Created: 2 days ago
    • Details: Updates the README to include a new feature about rotating around the scene floor.
    • Potential Issues: Minimal impact as it only updates documentation.
  7. PR #12: Update +page.svelte

    • Created: 2 days ago
    • Details: Removes scroll bars in the application.
    • Comments: Awaiting screenshots and additional details from the author before merging.
    • Potential Issues: Requires more information to ensure it doesn't negatively impact other parts of the UI.
  8. PR #10: Update README.md

    • Created: 2 days ago
    • Details: Updates the README with minor changes.
    • Potential Issues: Minimal impact as it only updates documentation.
  9. PR #8: Start working on EvolutionLog and OpLog

    • Created: 44 days ago, edited 4 days ago
    • Details: Introduces EvolutionLog and OpLog functionalities with multiple commits over time.
    • Potential Issues: This PR has been open for a long time, indicating it might be a complex change that needs thorough review and testing.

Closed Pull Requests

  1. PR #28: Readme: fix some links

    • Closed State: Merged
    • Notable Changes: Fixed broken links in the README file.
  2. PR #23: Add watching & rebuilding of rust sourcecode

    • Closed State: Merged
    • Notable Changes: Introduced a watch mode for Rust source code changes, updated node and pnpm versions.
  3. PR #21: Add ability to rename the workbench

    • Closed State: Merged
    • Notable Changes: Added functionality to rename the workbench via double-clicking.
  4. PR #19: Update README.md

    • Closed State: Merged
    • Notable Changes: Updated URLs in the README file to point to the correct repository.
  5. PR #15: Update dev instructions

    • Closed State: Merged
    • Updated development instructions in README and removed an unnecessary key from package.json.
  6. PR #4: Test out github actions

    • Closed without merging.
    • Reason: The project moved from Vercel to GitHub Pages, making this action redundant.
  7. & 8. Other closed PRs such as PRs #9, #7, #6, #5, #3, and #2 were merged successfully with various improvements ranging from fixing tests, refactoring code, adding comments, fixing deployment issues, and converting projects to TypeScript.

Summary

  • The most critical open PRs are those created recently (#30, #29, #20, #16) as they introduce new features or significant changes that need careful review.
  • Draft PRs like #20 need more development before they can be considered for merging.
  • Closed PRs indicate active maintenance and improvements in both documentation and functionality.
  • Special attention should be given to long-standing open PRs like #8 which may require additional resources or focus to resolve effectively.

Report On: Fetch PR 30 For Assessment



PR #30: Rust build touchup

Summary of Changes

This pull request aims to improve the Rust development build process and fix continuous integration (CI) issues. The key changes include:

  1. CI Workflow Adjustments:

    • Removed redundant build steps and consolidated them for efficiency.
    • Ensured the Rust build uses the development profile.
    • Improved the use of Turbo, a task runner, to streamline the build process.
  2. Package Scripts Updates:

    • Simplified and optimized scripts in package.json and packages/cadmium/package.json.
    • Ensured that the Rust build runs before listening for file changes.

Detailed Changes

CI Workflow (.github/workflows/ci.yml)

  • Removed:
    • Redundant pnpm build:wasm and pnpm turbo run build steps.
    • Separate Rust test step (pnpm run test:rust).
  • Added:
    • Consolidated build step using pnpm build.
-      - name: Build cadmium
-        run: pnpm build:wasm
+      - name: Build cadmium
+        run: pnpm build
-      - name: Build
-        env:

-          BASE_PATH: "/${{ github.event.repository.name }}"
-        run: pnpm turbo run build
-      - name: Test Rust
-        run: pnpm run test:rust

Root package.json

  • Removed:
    • Redundant Rust-specific test script ("test:rust": "cd packages/cadmium && cargo test").
    • Separate WASM build scripts.
  • Updated:
    • Simplified engines.pnpm version requirement.
     "test": "turbo run test",
-    "test:rust": "cd packages/cadmium && cargo test",
     "clean": "turbo run clean",
     "lint": "turbo run lint",
-    "format": "turbo run format",
-    "build:wasm:dev": "wasm-pack build --target web packages/cadmium --dev --no-typescript",
-    "build:wasm": "wasm-pack build --target web packages/cadmium && ./packages/cadmium/patchpackage.cjs"
+    "format": "turbo run format"
   },
   "engines": {
     "node": ">=20.13.1",
-    "pnpm": ">=9.1.2"
+    "pnpm": ">=9.1.0"

packages/cadmium/package.json

  • Updated:
    • Consolidated and optimized development and build scripts.
    • Ensured the Rust dev build runs before listening for file changes.
-    "dev": "onchange 'src/**/*.rs' -- pnpm run build:dev",
-    "build:dev": "cargo check && pnpm run build:wasm",
-    "build:wasm": "wasm-pack build --target web && ./patchpackage.cjs",
+    "dev": "pnpm run build:dev; onchange 'src/**/*.rs' -- pnpm run build:dev",
+    "build:dev": "cargo check && wasm-pack build --target web --dev && ./patchpackage.cjs",
+    "build": "wasm-pack build --target web && ./patchpackage.cjs",

Code Quality Assessment

The changes in this PR are well-targeted towards improving the development workflow and CI efficiency. Here are some observations:

  1. Efficiency:

    • The consolidation of steps in the CI workflow reduces redundancy, which should speed up the CI process.
    • Using Turbo effectively to manage tasks ensures that dependencies are handled efficiently.
  2. Simplicity:

    • The updates to package.json scripts simplify the commands, making them easier to understand and maintain.
    • Removing redundant steps and consolidating similar tasks helps in maintaining a cleaner codebase.
  3. Correctness:

    • The changes ensure that the Rust development builds use the correct profile (--dev), which is crucial for accurate testing during development.
    • By running cargo check before building WASM, it ensures that only compilable code proceeds, reducing potential errors early in the pipeline.
  4. Maintainability:

    • The updated scripts are more maintainable due to their simplicity and reduced redundancy.
    • Future developers will find it easier to understand and modify these scripts as needed.

Recommendations

  1. Documentation:

    • Update any relevant documentation or README files to reflect these changes in the development workflow.
  2. Testing:

    • Ensure thorough testing of these changes in different environments to catch any edge cases or platform-specific issues.

Overall, this PR significantly improves the development workflow and CI efficiency for the CADmium project, making it a valuable addition to the codebase.

Report On: Fetch Files For Assessment



Source Code Assessment

1. .github/workflows/ci.yml

Structure and Quality:

  • CI Workflow Definition: The file defines a CI workflow named CI that triggers on various events like push and pull_request.
  • Concurrency Control: Uses concurrency to manage deployment runs, ensuring only one deployment runs at a time.
  • Job Definitions:
    • Build and Test Job:
    • Runs on ubuntu-latest.
    • Steps include checking out code, caching build setup, setting up Node.js, installing dependencies, building the project, and running tests.
    • Uses various GitHub Actions such as actions/checkout, actions/cache, pnpm/action-setup, actions/setup-node, and jetli/wasm-pack-action.
    • Deploy Job:
    • Depends on the build job.
    • Runs on ubuntu-latest.
    • Permissions for pages and id-token are set to write.
    • Deploys using actions/deploy-pages.

Observations:

  • Efficiency: The use of caching (actions/cache) and concurrent deployment control is efficient.
  • Completeness: Covers essential steps for building, testing, and deploying the project.
  • Maintainability: The file is well-structured and easy to follow.

2. applications/web/src/routes/(CADmium)/BottomBar.svelte

Structure and Quality:

  • Script Section:
    • Imports necessary stores and utilities.
    • Defines a logging function for debugging.
    • Uses Svelte reactive statements ($:) to manage state.
  • Template Section:
    • Renders a bottom bar with workbench buttons.
    • Handles renaming of workbenches with input fields and event listeners for blur and keydown events.
    • Uses Svelte's {#each} block for iterating over workbenches.

Observations:

  • Reactivity: Utilizes Svelte's reactivity effectively with stores and reactive statements.
  • User Interaction: Provides intuitive user interactions for renaming workbenches and switching between them.
  • Logging: Includes logging for debugging purposes, which can be useful during development but should be removed or disabled in production.

3. packages/shared/projectUtils.ts

Structure and Quality:

  • Utility Functions:
    • Contains various utility functions for managing project state, sending messages to WebAssembly (Wasm), handling sketch operations, etc.
    • Functions are well-defined with clear responsibilities.
  • TypeScript Features:
    • Utilizes TypeScript types and interfaces for type safety.
    • Includes type guards to ensure runtime type checks.

Observations:

  • Modularity: Functions are modular and focused on specific tasks, enhancing readability and maintainability.
  • Type Safety: Extensive use of TypeScript types and type guards improves type safety and reduces potential runtime errors.
  • Logging: Includes logging for debugging purposes.

4. packages/shared/typeGuards.ts

Structure and Quality:

  • Type Guards:
    • Defines numerous type guards for different message types used in the application.
    • Ensures that messages conform to expected structures before processing them.

Observations:

  • Type Safety: Type guards are crucial for ensuring type safety at runtime, especially when dealing with dynamic data structures.
  • Readability: The file is long but necessary due to the extensive type checks required. Consider breaking it into smaller modules if it grows further.

5. packages/shared/types.d.ts

Structure and Quality:

  • Type Definitions:
    • Contains type definitions for various entities used throughout the project (e.g., Entity, Project, WorkBench).
    • Defines interfaces for messages exchanged between JavaScript and Rust/Wasm.

Observations:

  • Comprehensiveness: Provides comprehensive type definitions that cover most aspects of the project's data structures.
  • Consistency: Consistent use of TypeScript interfaces ensures uniformity in data handling across the project.

6. packages/cadmium/src/extrusion.rs

Structure and Quality:

  • Rust Code for Extrusion Functionality:
    • Implements extrusion-related functionality using Rust's capabilities.
    • Recent commits indicate active development and improvements in this area.

Observations:

  • Complexity Management: The file is large, indicating complex functionality. Consider modularizing if possible to improve maintainability.
  • Documentation: Ensure adequate comments/documentation to explain complex logic, especially for future maintainers.

7. packages/cadmium/src/main.rs

Structure and Quality:

  • Main Entry Point:
    • Defines the main function which sets up initial conditions, creates geometric shapes, performs operations like fusion, and outputs results.

Observations:

  • Clarity: The main function is clear in its purpose but could benefit from additional comments explaining each step in detail.
  • Modularity: Consider breaking down complex operations into separate functions/modules for better readability.

8. packages/cadmium/src/oplog/mod.rs

Structure and Quality:

  • Operation Logs Handling:
    • Manages operation logs which are critical for tracking changes and debugging issues in the application.

Observations:

  • Efficiency: Recent commits indicate optimizations (e.g., simplifying hash functions).
  • Maintainability: Ensure that log management is efficient and does not introduce performance bottlenecks.

Summary

Overall, the source code files exhibit good structure and quality with a focus on modularity, type safety (using TypeScript), efficient CI/CD practices, and comprehensive utility functions. There are areas where additional documentation or modularization could further enhance maintainability, especially in larger files like extrusion.rs. The use of logging is prevalent across files, which is beneficial during development but should be managed appropriately in production environments.