Thank you for your interest in contributing! This guide will help you get started.
- Code of Conduct
- Getting Started
- Development Setup
- Project Architecture
- Development Workflow
- Coding Standards
- Testing
- Submitting Changes
Please keep collaboration respectful and constructive:
- Be respectful and inclusive
- Welcome newcomers and help them learn
- Focus on constructive feedback
- Assume good intentions
We strongly recommend enabling MFA on your GitHub account. SignPath Foundation requires MFA for SignPath access and recommends it for source code repository access as well.
To enable MFA on GitHub: GitHub Two-Factor Authentication
- Rust 1.92+ (see
rust-toolchain.toml) - Git
- (Optional) Basic familiarity with CDISC SDTM standards
- Check GitHub Issues
- Look for
good-first-issueorhelp-wantedlabels - Comment on an issue before starting work
git clone https://github.com/YOUR_USERNAME/trial-submission-studio.git
cd trial-submission-studio
git remote add upstream https://github.com/rubentalstra/trial-submission-studio.gitrustup show
rustup toolchain install 1.92# Build all crates
cargo build
# Run the GUI application
cargo run --package tss-gui
# Run tests
cargo test
# Run lints
cargo clippyWhen adding or updating dependencies, regenerate the third-party licenses file:
# Install cargo-about (one-time)
cargo install cargo-about
# Generate licenses (re-run when deps change)
cargo about generate about.hbs -o THIRD_PARTY_LICENSES.mdNote: You may see a warning about
GPL-2.0being a deprecated license identifier. This is from an upstream dependency and can be safely ignored—the file generates successfully.
This file is embedded in the application and displayed in Help > Third-Party Licenses.
Trial Submission Studio is organized as a 6-crate Rust workspace:
| Crate | Purpose |
|---|---|
tss-gui |
Desktop GUI application (Iced 0.14.0 with Elm architecture) |
tss-submit |
Mapping, normalization, validation, and export pipeline |
tss-ingest |
CSV discovery and parsing |
tss-standards |
CDISC standards loader |
tss-updater |
Auto-update functionality |
tss-updater-helper |
macOS app bundle swap helper |
crates/- All Rust cratesstandards/- Embedded CDISC standards (SDTM, ADaM, SEND, CT)mockdata/- Test datasetsdocs/- Technical documentation
- Create a branch from
main - Make changes in the appropriate crate
- Add or update tests
- Run quality checks:
cargo fmt cargo clippy cargo test - Open a pull request
- Use
cargo fmtfor formatting - Address all
cargo clippywarnings - Prefer explicit types for public APIs
- Write actionable, user-facing error messages
- Keep business logic out of GUI and I/O layers
- Maintain deterministic, auditable behavior
- Prefer pure functions in mapping and validation
- Standards are embedded locally (no external API calls during validation)
- Unit tests: Per-function/module tests
- Integration tests: End-to-end workflows
# All tests
cargo test
# Specific crate
cargo test --package tss-submit
# With output
cargo test -- --nocaptureUse conventional commits:
feat:new featuresfix:bug fixesdocs:documentationtest:testsrefactor:code refactoringperf:performance improvementschore:maintenance
- Keep PRs focused and scoped
- Reference related issues
- Include tests for new functionality
- Update documentation if needed
Open an issue or start a discussion on GitHub.