• v0.1.1 5bbe099eaa

    v0.1.1
    All checks were successful
    ci/woodpecker/push/woodpecker Pipeline was successful
    ci/woodpecker/tag/woodpecker Pipeline was successful
    Stable

    foosinn released this 2026-10-14 16:38:43 +00:00 | 0 commits to main since this release

    Fixes

    • tui: Draw a mixer right before the output without a panic
    • manager: Read the preset again after a move on the device
    • manager: Stop spinning while a connect retry runs
    • manager: Drop unwritten edits with the session
    • state: End a preview when the device goes to its scene
    • app: Leave Escape to an open menu instead of closing the editor
    • app: Clamp the grid cursor when a row loses stops
    • tui: Keep the editor row on the block after it changes
    • ctl: Time out a write whose state reads got no answer
    • session: Allow only one value, scene mode or bypass per Grid edit
    • tui: Stop waiting for a block when the device goes away
    • tui: Esc ends a scene preview outside the scenes too
    • tui: Restore the terminal before the manager shuts down
    • tui: Clamp a step count that does not fit an i32
    • capture: Do not overflow on a huge pcapng timestamp resolution
    • capture: Keep the reports before a cut-off last packet
    • transport: Drop chunks before a FIRST and cap message size
    • capture: Ignore comments, ascii columns and offsets in hex text
    • manager: Wait for a handshake before opening the device again
    • manager: Release a lost session off the manager thread
    • manager: Keep the device list when listing fails
    • manager: Wait for closes and handshakes on shutdown
    • manager: Wait for a picked device that is not listed
    • session: Allow a preset save only into a user preset folder
    • session: Subscribe before waking the handshake's last request
    • session: Drop the pending entry when a request cannot be sent
    • session: Make close atomic so the bye goes out once
    • session: Cap inflated bodies at 16 MiB
    • session: Scrub the device name, cloud endpoint and backup user id
    • state: Keep list elements when pruning json
    • ctl: Leave the compressed flag out of live records
    • Let the udev rule match the Quad Cortex mini
    • ctl: Reject decode --raw with --json
    • ctl: Print held back meters when the throttle period ends
    • ctl: Make capture save --type required in clap
    • app: Start one timer per notice
    • app: Keep one traffic channel per webview
    • app: Step knobs by the param step
    • state: Merge side-chain flags, expression pedals and stomps
    • *: Treat unknown capture mode as a closed dialog
    • state: Drop scene values while the scene is unknown

    Refactoring

    • tui: Drop overlay resets that never run
    • proto: Read action and request_id from the struct
    • session: Drop the always-zero time from the session id
    • ctl: Fix a stale doc comment and move render tests to the end
    • app: Remove the knob's text entry
    • app: Remove the unused Tabs and Unavailable components
    • app: Remove the never passed locked and clipping props
    • state: Drop the unused Category::ALL

    Tests

    • proto: Compare enum values between cleaned and carved protos

    Documentation

    • openspec: Drop the locked block from the gallery scenario
    • openspec: Refuse cab actions while capture mode is unknown
    • openspec: Plan the spec sync after the code review

    Build

    • Bump the version to 0.1.1
    Downloads
  • v0.1.0 70ec8ba58f

    v0.1.0
    All checks were successful
    ci/woodpecker/push/woodpecker Pipeline was successful
    ci/woodpecker/tag/woodpecker Pipeline was successful
    Stable

    foosinn released this 2026-10-14 14:34:11 +00:00 | 63 commits to main since this release

    Features

    • *: Add Rust HID transport, protocol codec, session and read-only CLI
    • ctl: Show preset grid positions from list order
    • catalog: Add empty cortex-catalog crate
    • catalog: Decode the model repository into a catalog
    • catalog: Resolve cloned models in the catalog
    • *: Hand the model repository from the handshake to the caller
    • ctl: Name preset blocks from the model catalog
    • ctl: Name preset params and show step labels
    • ctl: Show Neural Capture names and drop string keys
    • ctl: Leave out empty slots and hidden params in preset output
    • ctl: Use the model catalog in cortexctl preset
    • ctl: Name IR loader blocks after their IR
    • catalog: Add the ModelRepo symbol table to the catalog
    • catalog: Keep units and display attributes per catalog param
    • catalog: Convert normalized param values to real values and text
    • ctl: Show preset params in real units
    • ctl: Warn about catalog symbols the table doesn't know
    • catalog: Label the EQ filter type params
    • catalog: Give catalog params their steps and value text
    • ctl: Use the catalog's value text in preset output
    • session: Tell whether the device firmware is verified
    • state: Add cortex-state with a preset grid view
    • *: Map catalog categories to UI categories
    • ctl: Print presets from the shared preset view
    • state: Keep a device state current from device messages
    • state: Merge partial grid updates into the device state
    • *: Turn session events into traffic records
    • state: Dump a capture's preset view as JSON
    • state: Merge port changes from partial grid updates
    • app: Add the cortex-app crate with an empty window
    • session: Let a session be closed through a shared reference
    • app: Add the device manager
    • app: Play a recorded capture as a mock device
    • app: Connect the device manager to the frontend
    • app: Add the Svelte frontend project
    • app: Add design tokens and category icons
    • app: Add the frontend's device and traffic stores
    • app: Show the live device state in the window
    • app: Add the UI store and a shortcut registry
    • app: Add the Knob and numeric entry
    • app: Add the remaining UI primitives
    • app: Tell the frontend which firmware is verified
    • app: Draw the Grid
    • app: Add the read-only parameter editor
    • app: Add the app shell
    • app: Make blocks square and split Grid and editor for good
    • *: Draw the split where the device shows it
    • app: Retry permission errors instead of waiting for the user
    • state: Name the input and output ports
    • state: Give rows' inputs and outputs their port names
    • ctl: Print port names in cortexctl preset
    • app: Show port names on the Grid
    • state: Carry each param's real value in the view
    • app: Pick the editor view by EQ model id
    • app: Compute the EQ response curve
    • app: Add the EQ band card
    • app: Add the parametric EQ view
    • app: Add the graphic EQ view
    • app: Show EQs in their own view in the editor
    • state: Carry the shown scene in the preset view
    • state: Let the state preview a scene
    • app: Add the view_scene command
    • app: Pass viewScene from the store to the source
    • app: Add the scene panel
    • app: Show the scene panel on the right of the editor dock
    • app: Show a preview hint over the Grid
    • app: Remove the scene dropdown from the top bar
    • app: Name the scene panel without an id
    • state: Merge the bypass scene mode
    • state: Build edit messages in the state
    • state: Apply edits to the state locally
    • session: Let the session send allowed writes
    • *: Add write commands to cortexctl
    • app: Give the manager's link a write call
    • *: Send the user's edits from the manager
    • app: Drop stale echoes of the app's writes
    • *: Add the edit command to the app's IPC
    • app: Pass edits from the store to the source
    • app: Make param controls editable
    • app: Edit the open block from the editor
    • app: Add a Follow scenes menu to params and bypass
    • app: Switch the device to the previewed scene
    • *: Let the session send undo, redo and preset saves
    • state: Follow the preset location, undo history and loads
    • state: Keep the user's preset list in the state
    • state: Build undo, redo, save, save as and load in the state
    • *: Add cortexctl presets
    • ctl: Add undo, redo, save and save-as to cortexctl
    • app: Read the location, preset list and undo history on connect
    • app: Send undo, redo, save, save as and load from the manager
    • app: Add the action command to the app's IPC
    • app: Pass actions from the store to the source
    • app: Add undo, redo and save shortcuts
    • app: Add Undo, Redo, Save and Save As to the top bar
    • app: Add a slot list for the preset folder
    • app: Open the preset list from the preset name
    • app: Add the Save as dialog
    • app: Clear the selection when the device loads a preset
    • app: Show a dash for a preset without a name
    • catalog: Read hidden, internal and plugin flags from the catalog
    • catalog: List the models the browser offers, with their tags
    • session: Let the session add and remove blocks
    • state: Apply removed blocks and whole blocks to the state
    • state: Keep the IR and capture libraries and the favorites
    • state: Build add, remove, set IR and set capture in the state
    • *: Add cortexctl models, irs and captures
    • ctl: Add cortexctl add-block, remove-block, set-ir and set-capture
    • app: Read the favorite models and captures on connect
    • app: Send block actions and say when the device does not take one
    • app: Give the browser's model list from the manager
    • *: Add the browser_models command and the new types to the bindings
    • app: Fetch the browser's model list once per connection
    • *: Add the model browser
    • app: Add blocks from the "+" of an empty slot
    • app: Replace a block with "Change model"
    • app: Remove blocks with Delete and a block context menu
    • app: Pick IRs and captures in the editor
    • *: Load empty slots from the preset list
    • *: Name the capture blocks like the official app
    • catalog: Convert a real value back to a normalized one
    • catalog: Turn typed text into a param value
    • *: Give each param view its step
    • state: Turn typed text into a value for a preset param
    • tui: Add the cortex-tui crate
    • tui: Run the terminal app's event loop
    • tui: Add the key table, the help overlay and the hint line
    • tui: Lay out the screen with the top bar and the banner line
    • tui: Say which size the terminal app needs
    • tui: Draw the Grid with power icons and markers
    • tui: Show connection states, the firmware line and notices
    • tui: Move the Grid cursor with hjkl, arrows, 0 and $
    • tui: Jump between the parts with F-keys and g keys
    • tui: Draw the editor for the item at the Grid cursor
    • tui: Say in one place why an edit or action can't happen
    • tui: Step values in the editor
    • tui: Add the fuzzy picker
    • tui: Type values and pick options in the editor
    • tui: Follow scenes with s and bypass from the Grid with Space
    • tui: Draw the scene panel in two columns
    • tui: Preview and switch scenes from the scene panel
    • tui: Add the model browser
    • tui: Add, change and remove blocks from the Grid
    • tui: Pick IRs and captures in the editor
    • tui: Load presets from a picker
    • tui: Undo with u and redo with Ctrl-R
    • tui: Save and save as from the command line
    • tui: Pick a device with F12
    • tui: Scroll the help and describe saving and mock mode
    • tui: Fit the screen at 90 by 26
    • tui: Draw 3-column gaps and let names grow with the terminal
    • tui: Draw the routing lines of splits and mixes
    • tui: Stop the Grid cursor on splitters and mixers
    • tui: Show splitters and mixers read-only in the editor
    • tui: Show the scenes in one column
    • tui: List only the captures of the block's version in the picker
    • catalog: Name replaced models legacy like the official app
    • session: Allow the Neural Capture writes in the session
    • state: Keep the capture mode state from the device
    • state: Name the capture states and IO params and check capture actions
    • ctl: Add the capture commands and capture watch to cortexctl
    • state: Show capture IO values in real units
    • state: Keep the name of the last saved capture
    • manager: Send capture actions from the device manager
    • tui: Add the capture screen to the terminal app
    • tui: Show the closed face and the connection pages
    • tui: Edit the capture IO page in real units
    • tui: Show the running, ready and error faces
    • tui: Close capture mode with x, asking once a capture started
    • tui: Save a capture from the ready face
    • tui: Switch A/B by itself every 10 seconds
    • tui: Show A/B as two boxes and save on the same page
    • state: Keep the monitoring cab in the capture state
    • state: Show the capture cab like a Grid block
    • state: Turn cab actions into the official app's messages
    • session: Let the session send the capture cab's writes
    • state: Read typed values for the capture cab's params
    • tui: Show the monitoring cab in a tab of the IO page
    • tui: Edit the capture cab's params like the editor does
    • *: Pick the capture cab's model in the model browser
    • tui: Pick the capture cab's IR from the IR library
    • tui: Turn the capture cab on and off with c
    • app: Ship Instrument Sans and JetBrains Mono with the app
    • app: Use the redesign's palette, text sizes and category hues
    • app: Restyle the primitives after the redesign
    • app: Rebuild the top bar and drop the utility bar
    • app: Draw the Grid as lanes with wide blocks
    • app: Restyle the model browser and the file pickers
    • app: Add or change a block from a picker under its slot
    • app: Rebuild the editor header and param layout
    • app: Show one parametric EQ band at a time
    • app: Restyle the graphic EQ
    • app: Show the scenes as a card and restyle the shell's extras

    Fixes

    • transport: Treat EPIPE on HID write as delivered
    • *: Send ModelRepo READ as the last handshake step
    • ctl: Exit quietly when stdout is a closed pipe
    • *: Let monitor subscribe before the handshake
    • ctl: Close the monitor session cleanly when stdout closes
    • *: Give monitor an event receiver that starts after the handshake
    • ctl: Notice a closed stdout in monitor while the device is quiet
    • session: Drop the handshake's event subscription once it is used
    • session: Report a disconnect to subscribers added after it
    • session: Assert the read-only allow-list before every write
    • session: Check the read-only allow-list where messages are queued
    • *: Close the session cleanly when the handshake or preset read fails
    • ctl: Pick step labels by label count
    • *: Take the CPU total as the percentage it is
    • app: Keep the traffic panel's columns from shrinking
    • *: Draw the split as the device does, with rounded corners
    • state: Merge a moved split from partial grid updates
    • app: Fit the parametric EQ into a low dock
    • app: Keep the Grid's layers inside the Grid
    • state: Drop removed stomps and the names of cleared IRs
    • app: Wait for a Grid answer before a block action counts as taken
    • *: Load captures only into blocks of their version
    • tui: Keep the hint line whole at 101 columns
    • session: Allow toggle_ab_model as the A/B write, not the cab sim bypass
    • state: Take capture messages as an open dialog and clear errors on a new state
    • ctl: Read the pushed capture state and keep capture watch connected
    • manager: Reconnect a device that sends nothing for 2 seconds

    Refactoring

    • ctl: Rename a shadowed variable in the param renderer
    • *: Move the scripted mock device into cortex-session
    • app: Split EQ params into bands and the rest
    • *: Move the device manager into its own crate
    • *: Put the manager's specta derives behind a feature
    • tui: Share the editor's bar, toggle and options widgets
    • tui: Share a block's editor rows

    Tests

    • session: Test that the handshake hands over the model repository
    • state: Test the preset view's params
    • state: Test scenes and bypass in the preset view
    • state: Test markers, splitter, mixer and IO in the preset view
    • state: Test the preset view without a catalog
    • app: Test Grid selection by click and keyboard
    • app: Test the traffic panel
    • state: Test that Grid updates skip the previewed scene
    • session: Add the scrubbed edit capture
    • state: Replay the edit capture against local edits
    • app: Test that edits stay local in mock mode
    • session: Shorten the lines of the block write tests
    • tui: Build test states from the committed captures
    • app: Show the legacy names in the browser fixture
    • session: Echo capture writes from the scripted device
    • ctl: Add a mock device that plays the recorded capture run
    • session: Let the test device keep talking or go quiet
    • state: Test the checks of the cab actions

    Documentation

    • Verify end to end on hardware, fix usbmon capture command
    • Record that Quad Cortex mini support is untested
    • openspec: Verify HID access with and without the udev rule
    • Verify the Linux setup guide, mark WSL2 part untested
    • openspec: Add review fixes as tasks 10.1-10.3
    • openspec: Add second review fixes as tasks 11.1-11.3
    • openspec: Add review round 1 fixes as tasks 12.1-12.3
    • openspec: Add review round 3 fixes as tasks 14.1-14.2
    • openspec: Name the real read-only entry point in design D7
    • openspec: Add review round 4 fix as task 15.1
    • openspec: Describe the real keepalive order in design D6
    • openspec: Plan show-model-names change
    • Document the model repository in the protocol notes
    • Describe the named preset output in the README
    • openspec: Plan IR loader names in preset output
    • openspec: Plan real units in preset output
    • catalog: Document real values and the symbol table
    • Document how to update the symbol table
    • Mention real units in the README
    • openspec: Plan EQ filter type labels
    • Document the step label rule and the EQ filter types
    • Note a second BYPASS check on the device
    • openspec: Plan desktop GUI scaffold
    • openspec: Plan Rust 1.99 as the minimum version
    • Document the device state messages
    • app: Describe building and running the desktop app
    • openspec: Plan square blocks and a permanent Grid / editor split
    • openspec: Plan retrying permission errors after a replug
    • Explain the udev delay after plugging in
    • openspec: Plan naming the IO ports
    • Record the port numbering in the protocol notes
    • openspec: Plan the EQ editors
    • openspec: Plan the scene preview
    • Mention the scene preview in the README
    • Document how the official app writes to the device
    • openspec: Plan editing the loaded preset
    • Document the edit capture
    • state: Point the scene rule to protocol §10.3
    • ctl: Document the CLI's write commands
    • Record the cortexctl write probe
    • Describe the app as an editor in the README
    • openspec: Plan undo, save and the preset list
    • Document save, undo and the preset list
    • openspec: Say in the specs that the app and CLI can write
    • Document the new cortexctl commands in the README
    • Record the undo and save probe on the device
    • Describe undo, save and the preset list in the README
    • Check undo, save and the preset list with the device
    • Record that the bank labels match the device
    • openspec: Plan adding, replacing and removing blocks
    • Document block adds, removes, libraries and favorites
    • Describe the block and listing commands in the README
    • Describe adding, replacing and removing blocks in the README
    • Record the block probe on the device
    • Plan loading empty slots from the preset list
    • Confirm the version 2 string of captures
    • openspec: Plan the terminal app
    • Describe the terminal app in the README
    • openspec: Plan the split lines and selectable splitters and mixers
    • openspec: Plan the scene panel in one column
    • openspec: Plan the capture picker by version
    • openspec: Plan the legacy label for replaced models
    • Document replaces on a model
    • openspec: Plan the Neural Capture commands
    • openspec: Plan the capture commands with the names from the official app
    • Describe capture mode in the README
    • Document the Neural Capture messages, states and IO params
    • Record the Neural Capture hardware probe
    • Document what the capture wizard shows on the device
    • openspec: Plan the capture screen in the terminal app
    • tui: Describe the capture screen in the README
    • openspec: Plan auto A/B on the capture screen
    • openspec: Plan the A/B boxes and the save form on the ready face
    • Record the capture screen's device run
    • openspec: Plan the monitoring cab on the capture screen
    • Describe the capture dialog's monitoring cab sim
    • openspec: Plan the session gate for the capture cab
    • tui: Describe the capture cab in the README and the help
    • openspec: Plan the desktop redesign after Main Grid v2
    • Add screenshots of the desktop and terminal app
    • Rework the README around the desktop and terminal app
    • openspec: Plan CI and releases on Forgejo
    • openspec: Scope commits by crate folder, not by spec
    • Describe the commit convention
    • Say where to download releases and what they need

    Build

    • *: Require Rust 1.99
    • License the project under Apache 2.0 only
    • app: Take the app version from Cargo.toml
    • app: Move the frontend to Node 26

    CI

    • Check pushes and pull requests in Woodpecker
    • Check the tag against the version and build release binaries
    • Pack the release binaries with the udev rule
    • Generate release notes from the conventional commits
    • Publish tagged releases on Forgejo with notes and checksums
    Downloads