Skip to content

Releases: foci-rs/foci

Release list

v0.4.0-rc.1

v0.4.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 29 Sep 08:48
9f3e956

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