Skip to content

Releases: FrankFu916/seattrellis

SeatTrellis v2.0.0

Choose a tag to compare

@FrankFu916 FrankFu916 released this 26 Aug 06:14

SeatTrellis 2.0.0 — first stable release of the Rust-only line

The Python implementation is retired. v2 runs natively on macOS, Windows and Linux with no Python/Node runtime, and all student data stays local.

Downloads: CLI + backend binaries for three platforms are attached by CI (SHA256SUMS included). Desktop bundles (.app/.dmg, .msi/NSIS, .deb) are attached by the Tauri desktop bundles workflow (DESKTOP-SHA256SUMS). Releases ship unsigned by owner decision — verify checksums; on first launch macOS needs right-click → Open and Windows may show a SmartScreen prompt. CLI users can also cargo install seattrellis_cli once the crates.io publication lands.


SeatTrellis 2.0.0 is the first stable release of the complete Rust rewrite. The Python implementation is retired: v2 runs natively on macOS, Windows and Linux with no Python, Node or other runtime dependencies, and all student data stays on the local machine. Teachers get a React workbench (in the desktop app or any browser), while automation users get a 27-command CLI — both speak to the same Rust core.

Highlights for teachers

  • Import a roster (CSV or Excel), set up the classroom, choose rules and goals, generate and compare candidate seating plans, fine-tune by hand, track history and fair rotation across terms, and export or print — entirely offline.
  • Hard constraints (fixed seats, must/cannot sit together, minimum distance, groups) are always satisfied in any plan marked Solved, and every plan is re-verified by an independent validator before it reaches you.
  • Soft preferences (front seats for poor eyesight, tall students in back, score balance, fair rotation, avoiding recent neighbors, cooling-off) are optimized with explainable per-rule scoring, so every plan can answer "why is this student here?".
  • Public exports anonymize names and identifiers automatically; teacher exports keep the detail you need for your own use.

Added

  • Native Excel roster import for .xlsx/.xlsm: first worksheet, supporting shared strings, inline strings, cached formula results, numbers, booleans and loss-free leading zeros. Limits: 20 MiB per file, 10,000 data rows, 256 columns. Formulas without cached values, encrypted workbooks and legacy .xls files are rejected with clear messages.
  • project-export --template <teacher|public> (default teacher; public forces anonymization of names and identifiers) and --orientation <portrait|landscape|auto> (default auto: print-html prints A4 landscape, other formats portrait).
  • Desktop shell (Tauri 2): native open/save dialogs, drag-and-drop roster import, a content security policy on the workbench page, and a session token injected into webview memory only — never into URLs, logs or disk. File bytes move exclusively through dialog-granted paths.
  • Loopback API hardening: every /api/* request path is normalized and requires the Bearer session token; DNS-rebinding, cross-origin and oversized-body protections are enforced for all endpoints.

Fixed

  • The desktop app's native open/save dialogs now actually open (the workbench page is served from the loopback backend, which Tauri treats as a remote origin, so the file-bridge commands were silently rejected by the command ACL); byte-moving commands still accept only dialog-granted paths. Drag-and-drop roster import works in the desktop app again.
  • Closed an authentication bypass where non-canonical /api/... spellings (for example an extra leading slash) skipped the Bearer token check.
  • Same seed plus same input now yields byte-identical results across runs: floating-point soft-cost summation happens in a deterministic order. This restores the reproducibility promise that parity fixtures and regression tests depend on.
  • The desktop app's native open/save dialogs now actually open. The workbench page is served from the loopback backend, which Tauri treats as a remote origin, so the file-bridge commands were silently rejected by the command ACL; they are now granted explicitly, and byte-moving commands still accept only dialog-granted paths. Drag-and-drop import works in the desktop app again (Tauri's own drop handler no longer intercepts the HTML5 drag events).
  • repair now really reserves locked empty seats: they leave the solve domain entirely and can no longer be occupied by anyone.
  • Exit codes are unified: a proven-infeasible result exits 3 on solve, candidates, project-rotate and project-solve alike, and invalid input (such as a student count mismatch) exits 2 instead of 70.
  • Negative soft-rule weights are now rejected as the rules reference promises; weight must be an integer from 0 to 1,000,000 inclusive, and weight combinations can no longer overflow.
  • A non-empty string-reference rules.hard block in a native solve request (the CLI's problem.json) is rejected with guidance toward the top-level index-pair form instead of being silently ignored — previously such constraints were dropped while the plan still claimed hard_constraints_satisfied: true.
  • Rotation: column group registers aggregate correctly (they used to fragment into one group per student); loading a saved rotation plan repeatedly works (draft ids are unique per load); fairness spread uses the whole-class basis (missing history categories count as 0), so the summary no longer overstates fairness.
  • Project references that point outside the project root (for example outputs_dir: "../x") are rejected instead of creating directories and writing files outside the project.
  • Migration refuses files whose schema_version is newer than supported instead of silently rewriting them to an older version.
  • Export text honors the Chinese locale consistently across formats: SVG, HTML and print HTML render “空座”, “教室前方” and “N 名学生 · M 个座位 · 可行” like the other export formats.
  • XLSX export truncates cell text at Excel's 32,767-character limit instead of producing a corrupt workbook; PNG/PDF exports with no usable system font now carry a warning in the export envelope and print it to stderr instead of silently rendering no text.
  • Project archives are extracted with real byte limits (per file and total), so a forged zip can no longer inflate past the configured caps.
  • Web workbench: scratch mode can no longer seat one student in two seats; the first launch follows the system language; a 409 revision conflict shows a friendly message and refreshes automatically; a top-level error boundary catches unexpected UI crashes; error toasts no longer surface raw English transport text; production builds ship without sourcemaps.

Changed

  • Migration coverage is explicit: only rosters, layouts and projects provide v1→v2 migration steps. Snapshots, candidate sets, rulesets and other kinds fail with a clear error instead of a fake migration. --in-place rewrites keep a hidden transactional backup whose name embeds a unique transaction id, so repeated runs never overwrite each other.
  • Plain export covers seven formats (svg, html, png, pdf, xlsx, docx, pptx); the printable print-html stays exclusive to project-export.
  • Unknown soft-rule names and unconsumed rule shapes are rejected on the native solve path (previously they were silently ignored), matching the behavior of the workbench validation path.
  • The editor protocol documentation and schemas now match the real wire format: the retired hard_constraints field is gone from the editor state, and the validation object attached to command responses is registered in the published JSON Schema.
  • Desktop releases ship unsigned with SHA256SUMS / DESKTOP-SHA256SUMS for integrity verification (owner decision, 2026-08-26). On first launch, macOS requires right-click → Open, and Windows may show a SmartScreen prompt.

Upgrade & compatibility

  • From v1.9.x: open your project with seattrellis_cli schema-migrate or the workbench migration flow — rosters, classroom layouts and project files migrate automatically with a backup taken first. Other v1 artifact kinds are reported as non-migratable rather than half-converted.
  • From v2 release candidates (rc.1/rc.2): projects and artifacts are compatible; re-export saved plans if you depend on the exact bytes of editor-state documents (the schema was aligned to the wire format).
  • The Python package stays frozen at 1.9.0 on the v1.x-maintenance branch; it receives no v2 features and is no longer a dependency of anything in v2.

Privacy

  • All data is processed locally. There are no accounts, no telemetry and no cloud sync. Real student data must never be committed to public repos; the repository ships fictional examples only.
  • Public exports are anonymized at a single central policy layer and are covered by release-time scans for scores, notes, special needs, height, vision and un-anonymized identifiers.

Known limitations

  • Right-to-left scripts (Arabic, Hebrew, ...) render in logical order in PNG/PDF exports without bidirectional shaping; HTML/SVG exports are unaffected because the browser does the layout.
  • Legacy binary .xls files are not supported (use .xlsx/.xlsm or CSV).
  • XLSX import numbers rows after skipping blank rows inside the sheet.
  • An unexpected panic exits with code 101, which is outside the frozen exit-code table (0/2/3/4/5/70/130).
  • Windows and Linux installers/bundles are built by CI on the release tag; this repository's local release inspection covers macOS arm64.

SeatTrellis v2.0.0-rc.2 — Release Candidate 2

Choose a tag to compare

@FrankFu916 FrankFu916 released this 14 Aug 05:20

SeatTrellis v2.0.0-rc.2 — Release Candidate 2

SeatTrellis v2 is the Rust-only line of the local-first classroom seating tool: import a roster, generate a seating plan, adjust it manually, and export to print or share. This is the second release candidate of v2.0.0.

What changed since rc.1

  • Fixed a generate regression: switching from a saved class back to the scratch workspace could leave a stale room selection and make the next generation fail with "unknown room template". The workbench now resets to a valid catalog room, and room/goal errors show an actionable localized message instead of a generic retry prompt.
  • Rule-document validation moved fully to the Rust backend (new /api/v1/rules/validate endpoint); the React workbench no longer re-derives rule field taxonomy — Rust is the single source of truth.
  • MSRV CI now tests the whole workspace at Rust 1.88 (not just the core crate).
  • Removed leftover Python packaging/Streamlit artifacts from the repository.

What is in this release

  • Rust-only runtime: the CLI, the local loopback server and the desktop shell contain no Python runtime; installers are small (5–20 MB target).
  • The full classroom workflow in the workbench: roster import with column-mapping preview, class generation with candidate plans, drag-and-drop editing with undo, repair of constrained plans, rotation planning, and export to SVG / HTML / print-HTML / PNG / PDF / XLSX / DOCX / PPTX.
  • v1 project migration: project files and artifacts migrate automatically with backups.
  • Privacy: local-only processing, no accounts or cloud sync; public exports are anonymized automatically.
  • 12 official artifact kinds have strict typed schemas; parity with the frozen v1.9.0 oracle is verified by byte-stable golden replay and cross-language differentials.

Install

Desktop installers are attached to this Release (per platform). The CLI and App-server binaries are also attached.

Code signing status

rc.2 is distributed unsigned. Every release asset is integrity-protected via SHA-256 checksums and SLSA provenance — verify before installing.

  • macOS: first launch shows "unidentified developer." Control-click the app → Open → Open, or System Settings → Privacy & Security → Open Anyway. The .dmg SHA-256 is in SHA256SUMS.
  • Windows: SmartScreen may show "Windows protected your PC" — More info → Run anyway after verifying the SHA-256 (Get-FileHash). Windows 11 Smart App Control may block the installer; use the portable build.
  • Linux: install via the .deb; verify against SHA256SUMS.

If you see anything other than the described warnings, do not bypass it — report it to us instead.

Release assets

  • Desktop installers (Windows / macOS / Linux)
  • seattrellis_cli and seattrellis_app binaries for Windows / macOS / Linux
  • SHA256SUMS — asset checksums

SeatTrellis v2.0.0-rc.1 — Release Candidate 1

Choose a tag to compare

@FrankFu916 FrankFu916 released this 13 Aug 07:55

SeatTrellis v2.0.0-rc.1 — Release Candidate 1

SeatTrellis v2 is the Rust-only line of the local-first classroom seating tool: import a roster, generate a seating plan, adjust it manually, and export to print or share. This is the first release candidate of v2.0.0.

What is in this release

  • Rust-only runtime: the CLI, the local loopback server and the desktop shell contain no Python runtime; installers are small (5–20 MB target).
  • The full classroom workflow in the workbench: roster import with column-mapping preview, class generation with candidate plans, drag-and-drop editing with undo, repair of constrained plans, rotation planning, and export to SVG / HTML / print-HTML / PNG / PDF / XLSX / DOCX / PPTX.
  • v1 project migration: project files and artifacts migrate automatically with backups.
  • Privacy: local-only processing, no accounts or cloud sync; public exports are anonymized automatically.
  • 12 official artifact kinds have strict typed schemas; parity with the frozen v1.9.0 oracle is verified by byte-stable golden replay and cross-language differentials.

Install

Desktop installers are attached to this Release (per platform). The CLI and App-server binaries are also attached.

Code signing status

rc.1 is distributed unsigned. Every release asset is integrity-protected via SHA-256 checksums and SLSA provenance — verify before installing.

  • macOS: first launch shows "unidentified developer." Control-click the app → Open → Open, or System Settings → Privacy & Security → Open Anyway. The .dmg SHA-256 is in SHA256SUMS.
  • Windows: SmartScreen may show "Windows protected your PC" — More info → Run anyway after verifying the SHA-256 (Get-FileHash). Windows 11 Smart App Control may block the installer; use the portable build.
  • Linux: install via the .deb; verify against SHA256SUMS.

If you see anything other than the described warnings, do not bypass it — report it to us instead.

Release assets

  • Desktop installers (Windows / macOS / Linux)
  • seattrellis_cli and seattrellis_app binaries for Windows / macOS / Linux
  • SHA256SUMS — asset checksums

SeatTrellis v1.9.0 — final v1 line release (frozen oracle)

Choose a tag to compare

@FrankFu916 FrankFu916 released this 13 Aug 07:22

SeatTrellis v1.9.0 — Final v1-line release

This is the final release of the SeatTrellis v1 line (Python). After v1.9.0 the v1 line enters maintenance; all new development continues on the Rust-only v2 line.

What is in this release

  • CLI parity completion since v1.8.4: validate --history-dir, project-validate --strict, project-solve --candidates/--report, project-export --candidate and the full export format set; project-info prints the project Defaults section.
  • All 12 official artifact kinds now have strict typed DTOs and generated schemas (v2 side); the golden corpus grew to 38 CLI goldens and 41 parity fixtures, with byte-stable replay fully green.

Install (Python package)

pip install seattrellis==1.9.0
# or download the wheel/sdist from this Release:
pip install seattrellis-1.9.0-py3-none-any.whl

Verify assets (macOS/Linux):

shasum -a 256 -c SHA256SUMS

Desktop

No new desktop bundle is attached to this Release. If you need the legacy v1 desktop application, download the desktop bundles from the v1.8.4 release — they remain the final v1 desktop builds. The actively maintained desktop experience is the Rust/Tauri preview line (desktop-v* tags).

Migrating to v2

Project files and artifacts can be migrated automatically by the v2 workbench or CLI (schema-migrate / project migration panel), with automatic backups before each migration. v2 is a Rust-only implementation; installers contain no Python runtime.

Release assets

  • seattrellis-1.9.0-py3-none-any.whl — universal wheel
  • seattrellis-1.9.0.tar.gz — source distribution
  • SHA256SUMS — asset checksums

SeatTrellis Desktop v0.1.2 Preview

Pre-release

Choose a tag to compare

@FrankFu916 FrankFu916 released this 02 Aug 02:34
f23bfdd

Compact Rust/Tauri desktop preview built from the current main branch.

This release contains native Rust/Tauri bundles only: macOS .app/.dmg, Windows .msi/NSIS, and a compact Linux .deb. It does not contain Python, Streamlit, or an internal/ Python runtime. The Linux AppImage is intentionally omitted because bundling GTK/WebKit makes it much larger.

The preview is unsigned and remains separate from Python v1.x. Signing, notarisation, clean-machine installation checks, and full Python feature parity remain before the future Rust v2.0.0 release.

SeatTrellis Desktop v0.1.1 Preview

Pre-release

Choose a tag to compare

@FrankFu916 FrankFu916 released this 02 Aug 02:23
c615519

Rust/Tauri desktop preview built from the current main branch.

Downloads on this page are native Rust/Tauri bundles only; they do not contain Python, Streamlit, or an internal Python runtime. The preview is unsigned and remains separate from Python v1.x. Signing, notarisation, clean-machine installation checks, and full Python feature parity remain before the future Rust v2.0.0 release.

SeatTrellis Desktop v0.1.0 Preview

Pre-release

Choose a tag to compare

@FrankFu916 FrankFu916 released this 02 Aug 02:15
0e9d5fa

Initial Rust/Tauri desktop preview.

This preview is separate from the Python v1.x releases and is intended to demonstrate the compact offline desktop path. It is unsigned; signing, notarisation, clean-machine installation checks, and full Python feature parity remain before the future Rust v2.0.0 release.

SeatTrellis v1.8.4

Choose a tag to compare

@FrankFu916 FrankFu916 released this 01 Aug 09:49
3ec0361

SeatTrellis v1.8.4

User-facing changes

  • Reworked roster import review in the React and desktop workbench. The review now uses localized, teacher-facing wording, keeps the confirmation action beside the import changes, and makes the required preview step clear.
  • Added native open and save dialogs to the desktop workbench while keeping browser upload and download fallbacks.
  • Added advanced settings for importing and downloading rules JSON and irregular-room layout JSON, plus loading multiple historical snapshots for fair rotation and recent-neighbor scoring.
  • Added ordinary controls for irregular classrooms, repeatable apart/together/fixed-seat requests, bulk relationship editing, and visual layout editing.
  • Added localized error messages across generation, editing, export, and project operations so backend exception text is not shown to teachers.
  • Added export templates, field-level privacy controls, name anonymization, A4 orientation, and page scaling to the React and desktop export flow.
  • Added project history, privacy checks, backup and restore, rotation comparison, and printable group registers to the workbench.

Engineering and maintenance

  • React and desktop clients now share the versioned application API for advanced rules, layout, history, project, and export operations.
  • Added browser acceptance coverage for roster import, advanced file settings, rotation generation, project recovery, and bundle restore.
  • Refreshed the bundled React workbench so packaged desktop builds include the current import and advanced-settings flow.
  • Python and the optional Rust backend remain available side by side; Python remains the default solver.
  • CI covers Python 3.11 through 3.14 on Linux, macOS, and Windows, plus Rust, native extensions, security, packaging, and Chromium checks.

Upgrade

python -m pip install --upgrade "seattrellis[all]==1.8.4"

SeatTrellis 1.8.4 supports Python 3.11 through 3.14. Existing CLI commands, project files, the React workbench, the Streamlit compatibility shell, and Python/Rust backend selection remain compatible.

Known limitations

  • Desktop packages are currently unsigned preview bundles. Signed Windows/macOS installers, notarization, and clean-machine installation checks remain on the desktop roadmap.
  • The Rust component remains an optional experimental backend and is not the default solver.

Full details in CHANGELOG.

SeatTrellis v1.8.3

Choose a tag to compare

@FrankFu916 FrankFu916 released this 01 Aug 07:36
ee5b582

SeatTrellis v1.8.3

User-facing changes

  • Improved roster import review: column mapping and import mode changes now clear stale previews, and the confirmation action is shown directly with the review result.
  • Added clearer import feedback for incomplete previews, conflicts, and successful changes, with Chinese and English wording kept in sync.
  • Added batch project migration with a preflight review, shared-reference checks, and safe rollback when a write fails.
  • Added an unsaved-changes warning to the React workbench so local seating edits are less likely to be lost.
  • Added a desktop --version option and rebuilt the bundled React workbench with the latest import and editing flow.

Engineering and maintenance

  • Added the project migration batch API and browser coverage for the multi-project workflow.
  • Kept the optional Rust backend and Python backend available side by side; Python remains the default.
  • Updated the roadmap, package metadata, documentation, and release checks for the 1.8.3 line.
  • CI now covers Python 3.11 through 3.14 on Linux, macOS, and Windows, plus native-extension, Rust, security, and browser E2E checks.

Upgrade

python -m pip install --upgrade "seattrellis[all]==1.8.3"

SeatTrellis 1.8.3 supports Python 3.11 through 3.14. Existing CLI commands, project files, the React workbench, the Streamlit compatibility shell, and Python/Rust backend selection remain compatible.

Known limitations

  • Desktop packages are currently preview builds. Signed installers, native file dialogs, and notarization remain on the desktop roadmap.
  • The Rust component remains an optional experimental backend and is not the default solver.

Full details in CHANGELOG.

SeatTrellis v1.8.2

Choose a tag to compare

@FrankFu916 FrankFu916 released this 31 Jul 16:00

SeatTrellis v1.8.2

User-facing changes

  • Added multi-period rotation plans, so teachers can prepare several future
    seating arrangements and review fairness and repeated-neighbour summaries.
  • Added local project backup and restore with .seattrellis.zip, a recent
    projects listing, and a privacy scan before sharing a class folder.
  • Added an optional pywebview desktop preview that opens the same React
    workbench as the browser command and cleans up its local service on exit.

Engineering and maintenance

  • Added the versioned rotation_plan artifact, JSON Schema export, CLI
    commands, and the /api/v1/classes/rotation contract.
  • Project bundles reject path traversal and symlink entries, validate their
    manifest before restore, and keep the desktop API behind a per-session local
    bearer token.
  • Added Python and browser coverage for rotation plans, project bundles, the
    desktop preview, and the release packaging path.

Upgrade

python -m pip install --upgrade "seattrellis[all]==1.8.2"

SeatTrellis 1.8.2 supports Python 3.11 through 3.14. Existing CLI commands,
project files, the React workbench, the Streamlit compatibility shell, and
Python/Rust backend selection remain compatible.

Known limitations

  • The pywebview desktop command is a preview. Signed Windows/macOS installers,
    native file dialogs, and notarization are still planned.
  • The React workbench still needs its full history browser and project-package
    controls; the shared CLI and API operations are already available.
  • The Rust component remains an optional experimental backend and is not the
    default solver.

Full details in CHANGELOG.