Add package metadata required for crates.io publication:
- Description
- MIT license
- Repository URL
- Keywords and categories
- Version requirement for libmarathon dependency
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Addresses CodeQL cleartext-logging alerts (#1, #2, #3) by implementing
session ID redaction for CLI output.
Changes:
- Extract marathonctl into standalone crate (crates/marathonctl)
- Add session ID redaction showing only first 8 characters by default
- Add --show-sensitive/-s flag for full session IDs when debugging
- Implement beautiful ratatui-based UI module with inline viewport
- Add .envrc to .gitignore for secure token management
- Document GitHub token setup in CONTRIBUTING.md
The CLI now provides a secure-by-default experience while maintaining
debugging capabilities through explicit opt-in flags. Session IDs are
redacted to format "abc-def-..." unless --show-sensitive is specified.
UI module provides easy-to-use builder APIs (ui::table, ui::grid, ui::list)
that render beautiful terminal output without hijacking the terminal.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Rename `macros` crate to `libmarathon-macros` for better discoverability on crates.io
- Update all imports from `macros::` to `libmarathon_macros::`
- Add crates.io metadata (description, license, repository, homepage, etc.)
- Bump version to 0.1.1
- Add version requirement for libmarathon-macros dependency
this commit includes a whole lotta fuck yeah, a whole lotta we fuckin
got this, and a lot of "please change the future."
i hope it works.
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
- marathonctl now supports spawn/delete entity commands
- Fixed session state bug (was transitioning to Left every 5s)
- Fixed entity broadcast to detect Added<NetworkedEntity>
- Added AppCommandQueue pattern for app-level control commands
References: #131, #132
Added --db-path and --control-socket arguments to app binary to enable
running multiple instances simultaneously.
Updated marathonctl to use clap with --socket argument for targeting
different instances.
Enables multi-client testing with isolated databases and control sockets.
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
Implemented headless mode using MinimalPlugins and ScheduleRunnerPlugin
to enable running the app without rendering, controlled via Unix socket.
Changes:
- Added conditional compilation based on 'headless' feature flag
- Use MinimalPlugins with 60 FPS ScheduleRunner in headless mode
- Skip rendering plugins (Camera, Rendering, DebugUI, SessionUI)
- Made cube mesh/material assets optional for headless spawning
- Direct NetworkingPlugin + PersistencePlugin instead of MarathonPlugin
- Use app.run() instead of platform executor in headless mode
This enables:
- Running multiple instances for multi-client testing
- Automated testing via marathonctl without GUI overhead
- Background server instances for development
- CI/CD integration for networking tests
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
The session UI panel was not updating when networking started via
control socket because poll_engine_events used commands.insert_resource
which queued updates until end of schedule. The UI could run before
the command was applied.
Fixed by:
- Initialize CurrentSession at startup in offline state (session.rs)
- Use direct ResMut mutation in poll_engine_events (engine_bridge.rs)
- Check session.state instead of resource existence (session_ui.rs)
This ensures Bevy's change detection triggers immediately when engine
events update the session state.
Refs #131, #132
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
now the entire networking and persistence stack is zero-copy with
single-allocation, single-copy reads.
Closes#128
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>