Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
cd94afa
feat(tui): add native Ratatui shell and owned engine sessions
voltcrash Oct 24, 2026
92c1a52
test(tui): add vp tasks and real PTY lifecycle checks
voltcrash Oct 24, 2026
c04b80d
docs(tui): record native shell lifecycle gate
voltcrash Oct 24, 2026
04cf9e3
feat(tui): bundle offline content and shared mode options
voltcrash Oct 24, 2026
0ae75a8
feat(tui): add validated settings and private custom text editor
voltcrash Oct 24, 2026
e2cb285
feat(tui): map keyboard capabilities and Unicode display coordinates
voltcrash Oct 24, 2026
93edbaf
feat(tui): persist versioned settings and private local results
voltcrash Oct 24, 2026
2f75486
feat(tui): connect local history export and opt-in native replay
voltcrash Oct 24, 2026
6a78b0e
docs(tui): record durable history and privacy acceptance checks
voltcrash Oct 24, 2026
e3c89d0
build(tui): stamp source versions and smoke all bundled modes
voltcrash Oct 24, 2026
791c790
build(tui): package licensed archives and verify isolated installs
voltcrash Oct 24, 2026
ba66f8e
ci(tui): build five native targets separately from website delivery
voltcrash Oct 24, 2026
3bb6bd4
fix(tui): complete custom passages and preserve multiline input
voltcrash Oct 24, 2026
a0bc1da
fix(tui): handle Windows suspend limits and drain macOS PTY output
voltcrash Oct 24, 2026
8ec5bad
fix(tui): project stopped-input feedback without losing UTF-16 units
voltcrash Oct 24, 2026
fdcbc64
test(tui): prove crash-safe history and label unknown stored formats
voltcrash Oct 24, 2026
93393d6
test(tui): retain PTY sessions while verifying macOS cleanup
voltcrash Oct 24, 2026
2ea0cd4
docs(tui): record fresh builds archives and platform findings
voltcrash Oct 24, 2026
8ac5964
fix(tui): keep current-word input and editor caret inside their viewp…
voltcrash Oct 24, 2026
ec8bd2c
test(tui): drain terminal restoration output before waiting for suspend
voltcrash Oct 24, 2026
6a2432a
build(tui): preserve pinned license bytes on Windows checkouts
voltcrash Oct 24, 2026
90b0231
build(tui): resolve native archive paths without Unix find
voltcrash Oct 24, 2026
febeeb1
build(tui): freeze archive provenance before native compilation
voltcrash Oct 24, 2026
0ee6b5e
test(tui): verify extracted binary and source revisions match
voltcrash Oct 24, 2026
5e22b3b
test(tui): exercise native input and history through portable PTYs
voltcrash Oct 24, 2026
1495a30
fix(tui): archive epoch-dated license files in Windows zip bundles
voltcrash Oct 24, 2026
69ffa1f
test(tui): answer ConPTY cursor queries from parsed terminal state
voltcrash Oct 24, 2026
832ea3c
ci(tui): separate shared parity from native terminal flow checks
voltcrash Oct 24, 2026
a496c78
docs(tui): record source proof and native terminal portability checks
voltcrash Oct 24, 2026
9878d57
test(tui): capture bounded ConPTY startup diagnostics and exit status
voltcrash Oct 24, 2026
52a3a3e
fix(tui): decode plain-text separators without truncating Unicode units
voltcrash Oct 24, 2026
5703c1f
test(tui): write complete ConPTY cursor-response packets atomically
voltcrash Oct 24, 2026
34519d9
docs(tui): record verified five-platform candidate artifacts
voltcrash Oct 24, 2026
21e1e4b
docs(migration): close automated gates and record terminal blocker
voltcrash Oct 24, 2026
3dafa0f
chore(tui): integrate merged engine and website stages
voltcrash Oct 24, 2026
13e75c8
build(tui): support Linux and macOS release targets only
voltcrash Oct 24, 2026
b574386
test(tui): cover Kitty key encoding fallback and resumed cleanup
voltcrash Oct 24, 2026
407ff9a
fix(tui): explain Kitty negotiation and basic word-delete fallback
voltcrash Oct 24, 2026
b65f0d1
docs(tui): adopt owner Linux macOS merge and verification scope
voltcrash Oct 24, 2026
a663ed3
test(tui): exercise real Linux emulator input and keyboard restoration
voltcrash Oct 24, 2026
b147a12
ci(tui): require real Kitty and Alacritty emulator regressions
voltcrash Oct 24, 2026
6523d49
ci(tui): install Alacritty XKB runtime dependency
voltcrash Oct 24, 2026
1ebdc37
fix(tui): forward vp development and build arguments correctly
voltcrash Oct 24, 2026
593ffa7
test(tui): stabilize emulator keymaps and cover Ghostty defaults
voltcrash Oct 24, 2026
1d0f6d9
fix(tui): avoid legacy Backspace duplication in enhanced terminals
voltcrash Oct 24, 2026
b745dc5
docs(tui): define owner macOS check after merge and publication gate
voltcrash Oct 24, 2026
6f6b25f
test(tui): await mapped emulator windows and stamp binary evidence
voltcrash Oct 24, 2026
60cf7ce
docs(tui): retain eight real emulator compatibility runs
voltcrash Oct 24, 2026
d8c2c3e
docs(tui): pass four-target merge gates and retain release candidates
voltcrash Oct 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Preserve the verified upstream license bytes on Windows checkouts.
docs/rust-engine/third-party/*.LICENSE text eol=lf
4 changes: 2 additions & 2 deletions .github/workflows/oxytype-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
# Workspace packages bundled into the backend and frontend.
runtime-packages:
- 'packages/{challenges,contracts,funbox,schemas,typing-engine,typing-fixtures,util,web-shared}/**'
- 'crates/**'
- 'crates/{typing-engine,typing-engine-wasm}/**'
- 'Cargo.{toml,lock}'
- 'rust-toolchain.toml'
- 'scripts/{engine,prepare-engine}.ts'
Expand All @@ -84,7 +84,7 @@ jobs:
- 'packages/**'
- '!**/*.md'
engine:
- 'crates/**'
- 'crates/{typing-engine,typing-engine-wasm}/**'
- 'Cargo.{toml,lock}'
- 'rust-toolchain.toml'
- 'scripts/{engine,prepare-engine}.ts'
Expand Down
180 changes: 180 additions & 0 deletions .github/workflows/terminal-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
name: Terminal binaries

on:
pull_request:
branches: [main, "stack/**", "t3/rust-engine-migration"]
paths:
- "crates/typing-engine/**"
- "crates/oxytype-tui/**"
- "Cargo.*"
- "rust-toolchain.toml"
- ".cargo/**"
- ".node-version"
- "package.json"
- "pnpm-workspace.yaml"
- "pnpm-lock.yaml"
- "scripts/terminal*"
- "docs/rust-engine/terminal*"
- "docs/rust-engine/third-party/**"
- ".github/workflows/terminal-release.yml"
push:
tags: ["terminal-v*"]
workflow_dispatch:

permissions:
contents: read

concurrency:
group: terminal-${{ github.event_name }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref_type != 'tag' }}

env:
OXYTYPE_BUILD_REV: ${{ github.sha }}
CARGO_TERM_COLOR: always

jobs:
binaries:
name: native (${{ matrix.target }})
timeout-minutes: 30
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- { os: ubuntu-24.04, target: x86_64-unknown-linux-gnu }
- { os: ubuntu-24.04-arm, target: aarch64-unknown-linux-gnu }
- { os: macos-15-intel, target: x86_64-apple-darwin }
- { os: macos-15, target: aarch64-apple-darwin }
env:
MACOSX_DEPLOYMENT_TARGET: "15.0"
steps:
- uses: actions/checkout@v7.0.1
with:
persist-credentials: false
- uses: voidzero-dev/setup-vp@v1.21.2
with:
node-version-file: .node-version
run-install: false
- uses: actions/cache@v5.0.3
with:
path: |
~/.cargo/registry
target
key: terminal-${{ matrix.target }}-${{ hashFiles('Cargo.lock', 'rust-toolchain.toml') }}
- name: Native formatting
run: vp run engine:fmt
- name: Archive portability regressions
run: vp run terminal:test:release-tools
- name: Native lint
run: vp exec cargo clippy --locked -p typing-engine -p oxytype-tui --all-targets -- -D warnings
- name: Shared engine fixtures
run: vp exec cargo test --locked -p typing-engine
- name: Native terminal input and durable history
run: vp run terminal:test
- name: POSIX terminal lifecycle and persistence
run: vp run terminal:test:pty
- name: Build licensed versioned archive
run: vp run terminal:package -- --target ${{ matrix.target }}
- name: Verify extracted binary without runtime tools or checkout files
run: vp run terminal:archive-smoke -- --target ${{ matrix.target }}
- name: Upload candidate archives and checksums
uses: actions/upload-artifact@v7.0.2
with:
name: terminal-${{ matrix.target }}
path: |
target/terminal-release/*.tar.gz
target/terminal-release/*.sha256
retention-days: 14
if-no-files-found: error

emulators:
name: Linux emulator (${{ matrix.emulator }})
runs-on: ubuntu-24.04
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
emulator: [kitty, alacritty]
env:
LIBGL_ALWAYS_SOFTWARE: "true"
steps:
- uses: actions/checkout@v7.0.1
with:
persist-credentials: false
- uses: voidzero-dev/setup-vp@v1.21.2
with:
node-version-file: .node-version
run-install: false
- uses: actions/cache@v5.0.3
with:
path: |
~/.cargo/registry
target
key: terminal-emulator-${{ matrix.emulator }}-${{ hashFiles('Cargo.lock', 'rust-toolchain.toml') }}
- name: Install distribution emulator and isolated display tools
run: |
vp exec sudo apt-get update
vp exec sudo apt-get install --no-install-recommends -y ${{ matrix.emulator }} xvfb xdotool libxkbcommon-x11-0 fonts-dejavu-core fonts-noto-cjk fonts-noto-color-emoji
- name: Real key encoding, Unicode, resize, history and cleanup
run: vp run terminal:test:emulator -- --emulator ${{ matrix.emulator }} --command /usr/bin/${{ matrix.emulator }} --evidence target/terminal-emulator-evidence
- name: Retain exact emulator versions and test traces
if: always()
uses: actions/upload-artifact@v7.0.2
with:
name: emulator-${{ matrix.emulator }}
path: target/terminal-emulator-evidence
retention-days: 14
if-no-files-found: warn

source:
name: corresponding source
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v7.0.1
with:
persist-credentials: false
- uses: voidzero-dev/setup-vp@v1.21.2
with:
node-version-file: .node-version
run-install: false
- name: Vendor and prove an offline source build
run: vp run terminal:source
- uses: actions/upload-artifact@v7.0.2
with:
name: terminal-source
path: |
target/terminal-release/*-source.tar.gz
target/terminal-release/*-source.tar.gz.sha256
retention-days: 14
if-no-files-found: error

publish:
name: authorized tagged release
if: github.event_name == 'push' && github.ref_type == 'tag' && github.repository == 'voltcrash/oxytype'
needs: [binaries, emulators, source]
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
contents: write
steps:
- uses: actions/checkout@v7.0.1
with:
persist-credentials: false
- uses: voidzero-dev/setup-vp@v1.21.2
with:
node-version-file: .node-version
run-install: false
- name: Require recorded real terminal verification
run: vp run terminal:release-gate
- uses: actions/download-artifact@v8.0.2
with:
pattern: terminal-*
path: release
merge-multiple: true
- name: Verify all platform/source checksums
run: vp exec python3 scripts/terminal_release.py checksums --archive release
- name: Publish the explicitly pushed terminal tag
env:
GH_TOKEN: ${{ github.token }}
run: vp exec gh release create "$GITHUB_REF_NAME" release/*.tar.gz release/SHA256SUMS --verify-tag --title "Oxytype terminal ${GITHUB_REF_NAME#terminal-v}" --notes-file docs/rust-engine/terminal-release-notes.md
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -142,3 +142,6 @@ frontend/playwright-report/
# Rust / generated Wasm and type bindings
/target/
/packages/typing-engine/generated/

# Python terminal verification/release tooling
__pycache__/
Loading
Loading