Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
2c8b1c7
test: keep selection gestures visible in short workspaces
JavaZeroo Oct 26, 2026
01b7513
test: report early local shell exits without hiding failures
JavaZeroo Oct 26, 2026
2bd7e45
docs: record margin state validation
JavaZeroo Oct 26, 2026
997d1f1
test: preserve supervised raw ConPTY Ctrl-C regression
JavaZeroo Oct 26, 2026
3dd0b9e
ci: prepare owned Ubuntu fixture for strict local shell tests
JavaZeroo Oct 26, 2026
5c768b4
test: retain Ctrl-C evidence when cleanup operations fail
JavaZeroo Oct 26, 2026
28b8a77
test: require Job containment before hosted shell worker setup
JavaZeroo Oct 26, 2026
c44ae98
Merge commit '2bd7e45' into fix/conpty-ctrl-c-r36
JavaZeroo Oct 26, 2026
ab15be1
docs: distinguish historical Ctrl-C failure from current retests
JavaZeroo Oct 26, 2026
3b1d384
docs: describe strict hosted shell prerequisites and failure evidence
JavaZeroo Oct 26, 2026
fc581e6
test: audit hosted WSL fixture job cleanup by process identity
JavaZeroo Oct 26, 2026
6c15ea2
fix: preserve complete More capture and execute ECH
JavaZeroo Oct 26, 2026
a0a829d
test: wait for owned helper readiness before Job identity audit
JavaZeroo Oct 26, 2026
b25d892
fix: retain shell prefix before exit validation
JavaZeroo Oct 26, 2026
c20f19e
docs: record More EOF and ECH regression evidence
JavaZeroo Oct 26, 2026
264a80e
test: separate owned fixture cleanup from image identity diagnostics
JavaZeroo Oct 26, 2026
274f3b2
docs: record bounded takeover evidence and remaining regression gaps
JavaZeroo Oct 26, 2026
ab1593b
test: use canonical row text in native shell observations
JavaZeroo Oct 26, 2026
bea167d
test: validate Copy error bitmap against capture-time native geometry
JavaZeroo Oct 26, 2026
cc30eab
docs: preserve unresolved controller exit failure under R2
JavaZeroo Oct 26, 2026
4211763
test: wait for actual paste echo before retaining selection
JavaZeroo Oct 26, 2026
fba3659
docs: publish native observation counterfactuals and scope
JavaZeroo Oct 26, 2026
2817391
test: recognize workspace output independently of OSC titles
JavaZeroo Oct 26, 2026
693cbed
docs: publish bounded workspace completion oracle evidence
JavaZeroo Oct 26, 2026
6b9506c
fix: accept empty UTF-8 terminal title payloads
JavaZeroo Oct 26, 2026
0e1fb58
ci: retain empty-title regression and bounded restore contracts
JavaZeroo Oct 26, 2026
5ae4a57
docs: state transport oracle CSI syntax boundary precisely
JavaZeroo Oct 26, 2026
38e2d7c
docs: preserve empty-title proof and separate original normal failure
JavaZeroo Oct 26, 2026
51283fd
docs: index legal empty-title regression evidence
JavaZeroo Oct 26, 2026
c646135
ci: trigger candidate title checks on renderer changes
JavaZeroo Oct 26, 2026
2e0dadd
docs: track pre-read rejection oracle separately under R2
JavaZeroo Oct 26, 2026
f17a34d
test: accept rejected workflow stopped before receiver read
JavaZeroo Oct 26, 2026
eba9cf0
docs: index proven pre-read receiver stop regression
JavaZeroo Oct 26, 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
5 changes: 5 additions & 0 deletions .github/workflows/alpha-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ jobs:
- name: Build release candidate and test helpers
timeout-minutes: 10
run: cmake --build build-alpha --config Release --parallel 2
- name: Prepare fixed hosted local shell fixture
timeout-minutes: 7
run: python -m tools.prepare_hosted_shells --out local/alpha/hosted-shells
- name: Require complete CTest including actual system clipboard
id: ctest
timeout-minutes: 20
Expand Down Expand Up @@ -182,6 +185,7 @@ jobs:
dist/build-info.json
local/alpha/smoke/validation.json
local/alpha/test-summary.json
local/alpha/hosted-shells/summary.json
- name: Preserve bounded public package diagnostics on failure
if: failure()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand All @@ -192,6 +196,7 @@ jobs:
path: |
local/alpha/smoke/validation.json
local/alpha/test-summary.json
local/alpha/hosted-shells/summary.json
- name: Preserve explicit system workflow evidence allowlist
if: always()
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
Expand Down
16 changes: 16 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@ jobs:
run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build build --config Release --parallel 2
- name: Verify shell preparation guards and oracles
run: python -m unittest tools.test_prepare_hosted_shells tools.test_owned_job_cleanup -v
- name: Prepare hosted Windows shell prerequisites
if: runner.os == 'Windows'
run: python -m tools.prepare_hosted_shells --out local/hosted-shells
- name: Preserve sanitized shell preparation result
if: always() && runner.os == 'Windows'
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
with:
name: hosted-shell-preparation
retention-days: 14
if-no-files-found: warn
path: local/hosted-shells/summary.json
- name: Test
env:
TERMFORGE_REQUIRE_SYSTEM_CLIPBOARD: ${{ runner.os == 'Windows' && '1' || '0' }}
Expand All @@ -55,6 +68,7 @@ jobs:
build/test-artifacts/selection-context/
build/test-artifacts/text-actions/
build/test-artifacts/raw-console-receiver/
build/test-artifacts/conpty-ctrl-c/run-*/**/sample.json
build/test-artifacts/workflow-fixture/run-*/validation.json
build/test-artifacts/workflow-fixture/run-*/stdout.json
build/test-artifacts/workflow-fixture/run-*/cases/*/capture.bin
Expand Down Expand Up @@ -82,6 +96,7 @@ jobs:
build/test-artifacts/workflow-sessions/run-*/fixtures/*/capture.bin.workflow.json
build/test-artifacts/workflow-sessions/run-*/fixtures/*/capture.bin.receiver.json
build/test-artifacts/workflow-sessions/run-*/fixtures/*/capture.bin.progress.jsonl
!build/test-artifacts/**/_private/**
- name: Full ASCII state replay
run: python -m experiments.core.run --out build/test-artifacts/replay-ascii
- name: Full Unicode state replay
Expand All @@ -108,3 +123,4 @@ jobs:
!build/test-artifacts/workflow-sessions/**/*.identity
!build/test-artifacts/workflow-sessions/**/sample.json
!build/test-artifacts/**/_resources-private/**
!build/test-artifacts/**/_private/**
6 changes: 6 additions & 0 deletions .github/workflows/core-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:
- 'experiments/core/**'
- 'experiments/conpty/**'
- 'experiments/shell/**'
- 'experiments/presentation/**'
- 'experiments/differential/**'
- 'experiments/measure/**'
- 'experiments/candidates/alacritty/**'
Expand All @@ -17,6 +18,7 @@ on:
- 'experiments/core/**'
- 'experiments/conpty/**'
- 'experiments/shell/**'
- 'experiments/presentation/**'
- 'experiments/differential/**'
- 'experiments/measure/**'
- 'experiments/candidates/alacritty/**'
Expand Down Expand Up @@ -81,6 +83,9 @@ jobs:
- name: Build and test candidate shell on Windows
if: runner.os == 'Windows'
run: cmake --build build --config Release --target shell_test_launcher && ctest --test-dir build -C Release -R candidate_shell_tui --output-on-failure
- name: Verify empty-title GUI and UTF-8 conversion on Windows
if: runner.os == 'Windows'
run: cmake --build build --config Release --target candidate_title_test renderer_metrics_test && ctest --test-dir build -C Release -R "^(candidate_title|renderer_metrics)$" --no-tests=error --output-on-failure
- name: Build real application capture on Windows
if: runner.os == 'Windows'
run: cmake --build build --config Release --target real_app_capture
Expand Down Expand Up @@ -133,3 +138,4 @@ jobs:
build/test-artifacts/candidate-fuzz/
build/test-artifacts/measure-compare/
build/test-artifacts/measure-interactive/
!build/test-artifacts/**/_private/**
17 changes: 17 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ if(WIN32)
target_link_libraries(core_measure PRIVATE Psapi)
add_subdirectory(experiments/receive)
add_subdirectory(experiments/conpty)
add_executable(conpty_ctrl_c_probe experiments/conpty/ctrl_c_probe.cpp)
termforge_warnings(conpty_ctrl_c_probe)
target_compile_definitions(conpty_ctrl_c_probe PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0A00)
add_executable(presentation_probe experiments/presentation/presentation.cpp)
termforge_warnings(presentation_probe)
target_compile_definitions(presentation_probe PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN UNICODE _UNICODE)
Expand Down Expand Up @@ -205,6 +208,15 @@ if(BUILD_TESTING)
target_link_libraries(runtime_observation_test PRIVATE termforge_core d2d1 dwrite gdi32 user32 imm32 ole32 oleaut32 uuid bcrypt)
if(TERMFORGE_BUILD_CANDIDATE_ADAPTER)
termforge_candidate_shell(runtime_observation_test)
add_executable(candidate_title_test experiments/shell/candidate_title_test.cpp experiments/shell/shell_launch.cpp)
termforge_warnings(candidate_title_test)
target_compile_definitions(candidate_title_test PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN UNICODE _UNICODE)
target_link_libraries(candidate_title_test PRIVATE termforge_core d2d1 dwrite gdi32 user32 imm32 ole32 oleaut32 uuid bcrypt)
termforge_candidate_shell(candidate_title_test)
add_dependencies(candidate_title_test termforge_shell_assets)
add_test(NAME candidate_title COMMAND candidate_title_test)
set_tests_properties(candidate_title PROPERTIES TIMEOUT 35
ENVIRONMENT "TERMFORGE_TEST_ARTIFACTS=${PROJECT_BINARY_DIR}/test-artifacts")
endif()
add_dependencies(runtime_observation_test termforge_shell_assets)
add_test(NAME runtime_observation COMMAND runtime_observation_test)
Expand Down Expand Up @@ -244,6 +256,9 @@ if(BUILD_TESTING)
target_link_libraries(workspace_state_test PRIVATE termforge_core)
termforge_warnings(workspace_state_test)
add_test(NAME workspace_state COMMAND workspace_state_test)
add_executable(transport_completion_test experiments/shell/transport_completion_test.cpp)
termforge_warnings(transport_completion_test)
add_test(NAME transport_completion COMMAND transport_completion_test)
if(TERMFORGE_BUILD_CANDIDATE_ADAPTER)
add_test(NAME candidate_core COMMAND candidate_core_test)
endif()
Expand Down Expand Up @@ -286,10 +301,12 @@ if(BUILD_TESTING)
set_tests_properties(workflow_system_content PROPERTIES TIMEOUT 30)
termforge_add_python_test(workflow_system_runner -m unittest research.ime.test_workflow_system_runner -v)
set_tests_properties(workflow_system_runner PROPERTIES TIMEOUT 30)
termforge_add_python_test(copy_error_frame -m unittest experiments.shell.test_copy_error_frame -v)
if(WIN32)
termforge_add_python_test(research_guards -m unittest discover -s research/tests -v)
termforge_add_python_test(receive -m unittest experiments.receive.test_receive -v)
termforge_add_python_test(conpty -m unittest experiments.conpty.test_conpty -v)
termforge_add_python_test(conpty_ctrl_c -m unittest experiments.conpty.test_ctrl_c -v)
termforge_add_python_test(presentation -m unittest experiments.presentation.test_presentation -v)
termforge_add_python_test(shell -m unittest experiments.shell.test_shell -v)
termforge_add_python_test(selection_bytes -m unittest experiments.shell.test_selection_bytes -v)
Expand Down
Loading