v1.3.0 PR - #8
Merged
Merged
Conversation
Implement the initial version of the OXDOOR package format, a zip-based distribution standard for BBS doors. This includes the formal V1 specification, crate-level validation logic, and a new CLI command for inspecting package metadata and integrity. - Add OXDOOR V1 specification to design and documentation - Implement package parsing and validation in `oxidebbs-door` - Introduce `doors package inspect` subcommand to `oxidebbs-server` - Update sysop CLI documentation with package management details - Add dependencies for zip processing and SHA-256 checksums
Add a new `import` subcommand to the `doors package` toolset. This command allows sysops to simulate the installation of OXDOOR packages, providing a detailed analysis of target paths, configuration changes, and potential conflicts before any changes are applied. - Add `doors package import --dry-run` to the server CLI - Implement structural validation and installation planning logic - Provide JSON output support for automated tooling - Expand documentation with import usage examples
Add the core implementation for importing OXDOOR packages into the system. This enables the actual deployment of door resources and database registration, complementing the previously added dry-run capability. - Implement the full import workflow with database synchronization - Add `--enable` flag to activate doors immediately after import - Add `--no-check` flag to bypass post-installation validation - Include menu category metadata in import plans and reports - Provide actionable follow-up commands after successful installation
…oorError - Updated `CliError` in `sysop_cli.rs` to store `DoorError` as a `Box`. - Implemented a custom `From` implementation for converting `DoorError` to `CliError`. - Modified `SysopError` in `lib.rs` to store `DoorError` as a `Box` and added a corresponding `From` implementation. Enhance ZMODEM tests for byte escaping - Changed test data in `zdle_escape_does_not_escape_normal_bytes` to use a byte string for clarity. Update OxDoor package format documentation - Replaced references to `artifacts/` with `tests/` in `OXDOOR_FORMAT_V1.md`. - Clarified package import behavior and added details about the `--enable` and `--replace` flags. - Updated documentation to reflect the new structure and rules for OxDoor packages. Add constants for default configurations in OxideBBS core - Introduced `constants.rs` to define default time limit for door runs and default TCP port for Binkp. - Added unit tests in `constants_test.rs` to verify the expected values of the constants.
- Updated terminal profile to use PETSCII charset instead of ASCII fallback. - Added PETSCII encode/decode functionality with comprehensive tests. - Introduced `TerminalCharset::Petscii` for configuration. - Enhanced documentation and changelog to reflect PETSCII integration. - Established a policy for character translation and terminal profile persistence.
- Set versioning to workspace-based for multiple crates: oxidebbs-core, oxidebbs-db, oxidebbs-door, oxidebbs-ftn, oxidebbs-network, oxidebbs-oxidenet, oxidebbs-server, oxidebbs-sysop, oxidebbs-telnet, oxidebbs-term, oxidebbs-transfer. - Updated software version to 1.3.0 in relevant test cases and documentation. - Improved ANSI parser to handle ECMA-48 private parameter bytes and bounded accumulation for parameters, intermediates, and OSC payloads. - Enhanced CP437 encoding/decoding to support low-range glyphs and preserve structural control bytes. - Fixed transaction handling in database migrations and insert operations to ensure atomicity. - Updated documentation to reflect architectural changes and versioning guide. - Marked stress test for 50,000 entries as ignored to maintain default test speed.
- Transitioned active release work from v1.3.0 to v1.4.0 in TASKS.md. - Added new release plan document for v1.4.0, detailing scope, phases, and implementation tasks. - Documented completion of C64/PETSCII terminal features in v1.3.0 and outlined pending work for v1.4.0. - Established phase status map and candidate coverage matrix for v1.4.0. - Included ADRs relevant to v1.4.0 and clarified known scope tensions.
There was a problem hiding this comment.
Pull request overview
This PR prepares the OxideBBS v1.3.0 release by bumping versions across the workspace and docs, hardening DB/network reliability (transactional behavior and migration safety), and documenting/landing new terminal + door packaging capabilities (PETSCII + .oxdoor format/docs).
Changes:
- Release/version bump to 1.3.0 across workspace metadata, docs site, Docker compose/image tags, and test fixtures.
- Reliability improvements: transactional DB operations for
insert_network_pathand transactional wrapping for migrations 5→6 and 6→7. - New/expanded features and docs: PETSCII/CP437/ANSI parser updates,
.oxdoorpackage format + inspection support, and updated architecture/release planning documentation.
Reviewed changes
Copilot reviewed 62 out of 64 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| VERSION | Bump release version to 1.3.0. |
| scripts/bump-version.sh | Update workspace version in [workspace.package] during bumps. |
| README.md | Refresh feature descriptions (C64/PETSCII wording). |
| package.json | Docs site version bump to 1.3.0. |
| package-lock.json | Lockfile version bump to 1.3.0. |
| docs/project/sysop-cli.md | Document new doors package CLI commands and policy statements. |
| docs/project/doors.md | Document .oxdoor inspect/import and door policy wording. |
| docs/project/docker.md | Update Docker image tags/examples to 1.3.0. |
| docs/OXDOOR_FORMAT_V1.md | Add docs-site page for .oxdoor format (pointer to design spec). |
| docs/about/changelog.md | Add v1.3.0 changelog entry dated 2026-08-05. |
| docs/.vitepress/config.mts | Add nav links for OxDoor format page. |
| design/VERSIONING_GUIDE.md | Document centralized workspace versioning. |
| design/TASKS.md | Add v1.4.0 tracking section; mark PETSCII work complete. |
| design/SPEC.md | Update spec for PETSCII/CP437 low-range and ANSI parser behavior. |
| design/RELEASE_v1_4_PLAN.md | Add v1.4 release plan document. |
| design/RELEASE_v1_3_PLAN.md | Close v1.3 plan and summarize what shipped vs. moved to v1.4. |
| design/PRD.md | Point post-v1.3 candidates to v1.4 plan. |
| design/OXDOOR_FORMAT_V1.md | Add full .oxdoor format specification. |
| design/ARCHITECTURE.md | Update crate list and dependency direction. |
| design/adr/0034-petscii-translation-and-terminal-profile-persistence.md | Add/record accepted ADR for PETSCII translation + persistence policy. |
| crates/oxidebbs-transfer/src/zmodem.rs | Minor test tweak and add additional unit tests. |
| crates/oxidebbs-transfer/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-term/src/lib.rs | Implement CP437 low-range glyph policy + PETSCII charset encode/decode and defaults. |
| crates/oxidebbs-term/src/ansi_parser.rs | Add CSI/OSC bounds and private-parameter-byte handling; saturate overflowing params. |
| crates/oxidebbs-term/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-telnet/src/transport.rs | Simplify/clarify loopback read_byte behavior. |
| crates/oxidebbs-telnet/src/telnet/mod.rs | Replace telnet implementation with new parser/session module and tests. |
| crates/oxidebbs-telnet/src/telnet.rs | Remove prior telnet implementation. |
| crates/oxidebbs-telnet/src/lib.rs | Update re-exports to the new telnet module surface. |
| crates/oxidebbs-telnet/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-sysop/src/lib.rs | Adjust DoorError wrapping to box source errors. |
| crates/oxidebbs-sysop/Cargo.toml | Workspace-version + dependency hygiene tweaks. |
| crates/oxidebbs-server/src/sysop_cli.rs | Adjust DoorError wrapping to box source errors. |
| crates/oxidebbs-server/src/setup.rs | Default generated C64 profile to charset = "petscii". |
| crates/oxidebbs-server/src/config.rs | Add petscii charset validation and default C64 profile to PETSCII. |
| crates/oxidebbs-server/src/commands/db.rs | Update test fixture versions to 1.3.0. |
| crates/oxidebbs-server/Cargo.toml | Workspace-version + dependency cleanup; add zip workspace dep usage. |
| crates/oxidebbs-oxidenet/src/lib.rs | Update test fixture versions to 1.3.0. |
| crates/oxidebbs-oxidenet/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-network/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-ftn/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-door/src/oxdoor_package.rs | Add .oxdoor package inspection/validation implementation + tests. |
| crates/oxidebbs-door/src/lib.rs | Export .oxdoor inspection API and add related error variants. |
| crates/oxidebbs-door/Cargo.toml | Add zip/sha2/hex deps and workspace-versioning. |
| crates/oxidebbs-db/src/oxidenet_repo.rs | Update test fixture versions to 1.3.0. |
| crates/oxidebbs-db/src/network_repo.rs | Transactional insert_network_path + password storage comment + test + ignore stress test. |
| crates/oxidebbs-db/src/migrations.rs | Wrap migrations 5→6 and 6→7 in transactions. |
| crates/oxidebbs-db/src/db_writer.rs | Minor cleanup around shutdown signaling. |
| crates/oxidebbs-db/Cargo.toml | Switch to version.workspace = true. |
| crates/oxidebbs-core/tests/constants_test.rs | Add tests for new core constants. |
| crates/oxidebbs-core/src/lib.rs | Export new constants module from core. |
| crates/oxidebbs-core/src/constants.rs | Introduce default time limit + default BinkP port constants. |
| crates/oxidebbs-core/Cargo.toml | Workspace-versioning + dependency cleanup. |
| crates/oxidebbs-binkp/Cargo.toml | Switch to version.workspace = true. |
| config/oxidebbs.example.toml | Default C64 profile charset to petscii. |
| compose.yaml | Default Docker image tag to 1.3.0. |
| CHANGELOG.md | Trailing newline cleanup. |
| Cargo.toml | Set [workspace.package] version = "1.3.0"; dependency hygiene updates. |
| Cargo.lock | Lockfile updates for removed/updated deps and versions. |
| AGENTS.md | Update repo guidance for 12-crate implemented workspace and dependency direction. |
| .github/workflows/release.yml | Update examples to v1.3.0. |
| .github/rust-code-generation/SKILL.md | Update referenced guidance docs list. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+153
to
+182
| ParserState::WillOpt => { | ||
| let opt = byte; | ||
| self.state = ParserState::Data; | ||
| reply.extend_from_slice(&[IAC, DO, opt]); | ||
| Some(TelnetEvent::Negotiation { | ||
| command: TelnetCommand::Will, | ||
| option: opt, | ||
| accepted: true, | ||
| }) | ||
| } | ||
| ParserState::WontOpt => { | ||
| let opt = byte; | ||
| self.state = ParserState::Data; | ||
| reply.extend_from_slice(&[IAC, DONT, opt]); | ||
| Some(TelnetEvent::Negotiation { | ||
| command: TelnetCommand::Wont, | ||
| option: opt, | ||
| accepted: false, | ||
| }) | ||
| } | ||
| ParserState::DoOpt => { | ||
| let opt = byte; | ||
| self.state = ParserState::Data; | ||
| reply.extend_from_slice(&[IAC, WILL, opt]); | ||
| Some(TelnetEvent::Negotiation { | ||
| command: TelnetCommand::Do, | ||
| option: opt, | ||
| accepted: true, | ||
| }) | ||
| } |
| }; | ||
| let cmd = TelnetCommand::from(next); | ||
| match cmd { | ||
| TelnetCommand::Iac => return Ok(Some(IAC)), |
Comment on lines
+296
to
+309
| TelnetCommand::Sb => { | ||
| // consume until SE | ||
| loop { | ||
| let opt_sb = self.transport.read_byte().await?; | ||
| let b = match opt_sb { | ||
| None => return Err(TelnetError::Incomplete), | ||
| Some(b) => b, | ||
| }; | ||
| if b == SE { | ||
| break; | ||
| } | ||
| } | ||
| continue; | ||
| } |
Comment on lines
+822
to
+830
| fn validate_id_characters(package_path: &Path, field: &str, value: &str) -> Result<(), DoorError> { | ||
| if value.chars().any(|ch| ch == '/' || ch == '\\' || ch == ':') { | ||
| return Err(DoorError::InvalidDoorPackage { | ||
| path: package_path.to_path_buf(), | ||
| message: format!("{field} must not contain path separators"), | ||
| }); | ||
| } | ||
| Ok(()) | ||
| } |
Comment on lines
+1561
to
+1563
| #[cfg(test)] | ||
| mod broken_nested_tests { | ||
| use super::*; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request introduces the 1.3.0 release of OxideBBS, with a focus on improved network and database reliability, expanded crate features, and updated documentation to reflect the current state of the project. The most important changes include workspace-wide version updates, enhanced transactional safety for network path database operations, new core constants, and documentation reflecting full crate implementation and new features.
Release and Versioning Updates:
VERSIONfile, Docker image tags, and test fixtures. [1] [2] [3] [4] [5] [6] [7]Database Reliability and Transactions:
insert_network_pathinoxidebbs-dbnow ensures atomicity: if any insert fails, the transaction is rolled back, preventing partial writes. A new test verifies this behavior. [1] [2]Core Features and Constants:
constantsmodule inoxidebbs-core, providingDEFAULT_TIME_LIMIT_MINUTESandDEFAULT_BINKP_PORT, with corresponding tests. [1] [2] [3]Documentation and Crate Structure:
Miscellaneous Improvements:
These updates collectively enhance the reliability, maintainability, and clarity of the OxideBBS codebase and documentation.