Skip to content

v1.3.0 PR - #8

Merged
sphildreth merged 9 commits into
mainfrom
sph.2026-06-07.03
Aug 5, 2026
Merged

v1.3.0 PR#8
sphildreth merged 9 commits into
mainfrom
sph.2026-06-07.03

Conversation

@sphildreth

Copy link
Copy Markdown
Owner

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:

  • All crate and workspace versions are updated to 1.3.0, including the root VERSION file, Docker image tags, and test fixtures. [1] [2] [3] [4] [5] [6] [7]

Database Reliability and Transactions:

  • insert_network_path in oxidebbs-db now ensures atomicity: if any insert fails, the transaction is rolled back, preventing partial writes. A new test verifies this behavior. [1] [2]
  • Database migrations 5→6 and 6→7 are now wrapped in transactions for consistency and safety. [1] [2] [3]

Core Features and Constants:

  • Introduced a new constants module in oxidebbs-core, providing DEFAULT_TIME_LIMIT_MINUTES and DEFAULT_BINKP_PORT, with corresponding tests. [1] [2] [3]

Documentation and Crate Structure:

  • Documentation and crate comments now reflect that all 12 crates are fully implemented, with detailed descriptions of each crate’s responsibilities and updated dependency relationships. [1] [2]
  • Updated dependency lists and Rust generation rules in documentation to reflect new features (e.g., serial/modem support, new dependencies).

Miscellaneous Improvements:

  • Improved error handling, clarified comments on cleartext BinkP passwords, and updated configuration and workflow files for accuracy and consistency. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]

These updates collectively enhance the reliability, maintainability, and clarity of the OxideBBS codebase and documentation.

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.
Copilot AI lite review requested due to automatic review settings August 5, 2026 22:25
@sphildreth
sphildreth merged commit df9e055 into main Aug 5, 2026
7 checks passed
@sphildreth
sphildreth deleted the sph.2026-06-07.03 branch August 5, 2026 22:31

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_path and transactional wrapping for migrations 5→6 and 6→7.
  • New/expanded features and docs: PETSCII/CP437/ANSI parser updates, .oxdoor package 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::*;
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.

2 participants