Releases: foci-rs/foci
Releases · foci-rs/foci
Release list
v0.4.0-rc.1
Changelog
All notable changes to this project will be documented in this file.
[0.4.0-rc.1] - 2026-09-29
🚀 Features
Ci
- Gate RTIC tmc_control future size and free SRAM
- Add release-tag prerelease classification script
- Add release CI-gate verification script
General
- Workspace orchestrator
- Add klipper-foci installer bootstrap entry point
Site
- Scaffold Astro + Starlight project
- Wire up FOCI logo and favicon
- Apply FOCI brand color theme
- Add site structure and stub content pages
- Set the site fonts to Nunito and Fira Code
Tools
- Add board parity dictionary finder
- Add board surface comparison and allowlist
- Add ELF dictionary extraction
- Add board parity CLI entry point
- Add commissioning vocabulary generator
🐛 Bug Fixes
Board-Parity
- Allow Ouroboros to omit empty reserve-pin categories
- Stop allowing RESERVE_PINS_LED omission
Ci
- Skip string/char literals and comments when brace-matching cfg(test)
- Exclude build metadata from prerelease classification
- Handle malformed gh JSON and multiple main-push CI runs
- Verify the release tag's commit is still on main
General
- Assert every trace metadata field in the cross-board guard too
- Anchor RTIC priority extraction to each task
- Reject --version with no value instead of looping forever
Host
- Point pytest.ini at the klipper-foci workspace split paths
Site
- Disable Astro CLI telemetry in build and CI
- Correct spurious foci/ nesting from a dispatch mistake
- Fix illegible header logo and dark-mode background seam
- Give header/sidebar a distinct brand shade with matching icon
- Show the FOCI title text next to the header logo
- Match accent text color to the logo's actual green
- Give the home page its own title
Tools
- Harden parity dictionary scan and error path
- Reconcile parity allowlist with real dictionary
- Reject non-trace stack artifacts
- Adopt explicit ruff rule selection and clear the backlog
- Forbid defmt calls in board ISR-body sources
- Re-anchor the stack-gate wrong-ELF guard on a trace-only symbol
- Match generator's EXPECTED_RESERVED to the manifest
- Match the stack-frame gate's symbol to the renamed trace fn
- Harden vocabulary guard against SCREAMING_SNAKE forms
- Correct the vocabulary baseline for the PositionTune renumber
- Point the vocabulary generator at the split package path
- Keep the stack frame gate working on rustc 1.98
📚 Documentation
General
- Stop referencing the removed klipper-foci-tuning package
- Describe the renamed FOCI_AUTOTUNE ACTION values
- Add a motion-safety disclaimer to the README
- Point repository and installer URLs at the foci-rs org
- Simplify the README
Site
- Add Ouroboros installation guide
- Add Ouroboros Klipper configuration page
- Fill in the Ouroboros bring-up page
- Add the Ouroboros tuning page
- Add symptom-based troubleshooting content
- Add the FOCI config reference page
- Add the FOCI G-code reference page
- Correct the homing_current reference entry
- Add motion validation steps to the tuning guide
- Add the sensorless homing guide
- Match console output examples to the new wording
- Correct the pid_velocity_limit range
- State the per-board run current limit
- Tie homing_current to the board run current limit
- Rewrite the homepage around what FOCI does
- Point the installation links at the foci-rs org
Tools
- Use the rc.1 spelling in the release version examples
🎨 Styling
General
- Reformat a line-wrapped assertion string to fit ruff's line width
Site
- Lighten body, sidebar and table of contents text
Tools
- Remove tracker IDs from the ruff configuration
🧪 Testing
Board-Parity
- Require current-limit shutdown
- Require matching velocity-limit evidence capability
General
- Guard commission reply sink delegation
- Guard active diagnostic reply sink delegation
- Guard board USB transport parity
- Guard commissioning backend shared core use
- Guard shared TMC request runner usage
- Add board policy parity guard
- Cover impedance diagnostic replies
- Let one pytest invocation collect every Python suite
- Update reply-sink guard for the removed reproduction forwarders
- Update parity guard for masked/unmasked stop split
- Check stop_physical_stepper_inner in the parity guard
- Guard Ouroboros disarm against re-adding position reset
- Guard trace lifecycle event-stream parity across boards
- Guard Ouroboros trace metadata against placeholder regression
- Guard Ouroboros trace product-string switch against regression
- Enforce USB interrupt handoff ordering
- Remove orphaned Stage-B reply-family asserts and allowlist entries
- Restore coverage for three removed reply fragments
- Guard against tests that read outside the repository
- Drop the guard against a removed request classifier
- Drop the removed phase advance restore from the runner guard
- Drop the guard for the trace-only USB product string
Parity
- Enforce watchdog task isolation
- Require stage b core replies
- Pin board-specific limit capabilities
Protocol
- Require Stage-B v4 board forwarders
Tools
- Guard TMC status masks
- Sync runner-delegation guards to production autotune
- Add vocabulary baseline extractor and consistency guard
- Reserve phase codes 22-25 in the vocabulary generator
- Update vocabulary baseline for inner-phase renames
- Rename shape-order map for fixed-gain-amplitude
- Guard against retired lifecycle vocabulary
- Follow Ouroboros' maintenance policy into the shared driver
⚙️ Miscellaneous Tasks
Ci
- Move CI-invoked tool scripts into tools/ci
General
- Update vocabulary baseline for integral_resume action
- Remove the one-shot vocabulary baseline extractor
Submodules
- Add the ouroboros-fw and foci-trace submodules
Tools
- Fix lint findings in the vocabulary baseline extractor
- Remove slop comments and a fixable lint suppression
- Add the gain floor trace identifier to the vocabulary baseline
- Add position_tune to the vocabulary baseline
- Use the foci-rs org in the release gate examples
Vocabulary
- Refresh the baseline drift guard for the relabeled phases
🏗️ Build
General
- Register the board host-test packages in the workspace
- Optimize commissioning hot path for speed
- Restore size-optimized release profile
- Register foci-firmware-macros in the workspace
- Size the defmt RTT buffer for the gain-floor capture dump
- Patch foci-firmware-macros to the local submodule path
- Optimize the dev profile for size
- Correct the workspace repository URL
- Add cargo-release config for shared workspace versioning
- Add git-cliff changelog config
- Pin the Rust toolchain to 1.98.1
Tools
- Add the release recipe
- Stop generating a changelog file on release
- Tag klipper-foci with the workspace version
- Abort the release before committing when the tag already exists
- Let the release recipe take an explicit version