chore: declutter top-level repo layout (#11890)

Remove one-off incident docs and committed test-results noise, move
dev/repro/bench tools under tests/tools, and relocate i18next config
into config/ so the GitHub root scrolls to the description faster.
This commit is contained in:
Jinjing 2026-08-01 00:25:35 -07:00 committed by GitHub
parent 278a4b28c8
commit ad1e58d966
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
86 changed files with 89 additions and 3561 deletions

2
.github/CODEOWNERS vendored
View File

@ -2,4 +2,4 @@
/src/renderer/src/i18n/locales/ @brennanb2025
/config/scripts/*localization*.mjs @brennanb2025
/config/scripts/*locale*.mjs @brennanb2025
/i18next.config.ts @brennanb2025
/config/i18next.config.ts @brennanb2025

View File

@ -13,7 +13,7 @@ on:
branches:
- Jinwoo-H/windows-update-survival
paths:
- 'tools/daemon-relocation-spike/**'
- 'tests/tools/daemon-relocation-spike/**'
- '.github/workflows/daemon-relocation-spike.yml'
workflow_dispatch: {}
@ -76,7 +76,7 @@ jobs:
# --keep-work-dir so the per-tier daemon stdout/stderr logs survive
# for the artifact upload (the spike otherwise removes work-dir),
# which is what diagnoses a tier that fails to reach ready.
node tools/daemon-relocation-spike/spike.mjs `
node tests/tools/daemon-relocation-spike/spike.mjs `
--app-dir dist/win-unpacked `
--work-dir "$work" `
--tier $tier `

View File

@ -135,7 +135,7 @@ jobs:
run: |
New-Item -ItemType Directory -Force artifacts | Out-Null
$log = "artifacts/crash-survival-output.log"
node tools/win-crash-survival-e2e/run.mjs `
node tests/tools/win-crash-survival-e2e/run.mjs `
--expect "$env:EXPECT" `
--exe-path "$env:ORCA_EXE" `
--soak-seconds 8 2>&1 | Tee-Object -FilePath $log

View File

@ -20,7 +20,7 @@ on:
branches:
- Jinwoo-H/windows-update-survival
paths:
- 'tools/win-update-e2e/**'
- 'tests/tools/win-update-e2e/**'
- '.github/workflows/win-update-e2e.yml'
workflow_dispatch:
inputs:
@ -125,7 +125,7 @@ jobs:
ORCA_E2E_DIAG_DIR: artifacts/diag
run: |
$log = "artifacts/harness-output.log"
node tools/win-update-e2e/run.mjs `
node tests/tools/win-update-e2e/run.mjs `
--from "$env:FROM_EXE" `
--to "$env:TO_EXE" `
--expect "$env:EXPECT" `

View File

@ -16,7 +16,7 @@ on:
paths:
- 'src/main/daemon/**'
- 'src/main/pty/**'
- 'tools/win-update-e2e/**'
- 'tests/tools/win-update-e2e/**'
- 'config/electron-builder.config.cjs'
- '.github/workflows/win-update-survival-e2e.yml'
workflow_dispatch:
@ -97,7 +97,7 @@ jobs:
$exe = "dist/orca-windows-setup.exe"
if (-not (Test-Path $exe)) { throw "Installer not found at $exe" }
$log = "artifacts/survival-output.log"
node tools/win-update-e2e/run.mjs `
node tests/tools/win-update-e2e/run.mjs `
--from "$exe" `
--to "$exe" `
--expect "$env:EXPECT" `

4
.gitignore vendored
View File

@ -70,7 +70,7 @@ coverage/
prod-release-scan-*.md
# Benchmark run output
/tools/benchmarks/results/*.json
/tests/tools/benchmarks/results/*.json
/.bench-fixtures/
# Temp
@ -132,4 +132,4 @@ src/renderer/src/i18n/locales/.ja-catalog-cache.json
src/renderer/src/i18n/locales/.es-catalog-cache.json
# Bench result JSONs are working artifacts
tools/benchmarks/results/terminal-pipeline-*.json
tests/tools/benchmarks/results/terminal-pipeline-*.json

File diff suppressed because it is too large Load Diff

View File

@ -3106,11 +3106,11 @@
"oracle": "Resolve the launched instance's real main PID from inside Electron, force-kill only that PID, require it to die, require one command-line-scoped daemon PID and the stamped interactive shell PID to remain live, relaunch with persisted state, require the daemon PID to remain identical, read the exact shell PID and a per-shell environment sentinel back through the exact restored tab, then require a successful Windows Application event-log query with zero matching pwsh FailFast events across the full crash-to-input window.",
"commands": [
"pnpm exec vitest run --config config/vitest.config.ts config/scripts/win-crash-survival-e2e.test.mjs",
"node tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path \"$env:ORCA_EXE\" --soak-seconds 8"
"node tests/tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path \"$env:ORCA_EXE\" --soak-seconds 8"
],
"testFiles": [
"config/scripts/win-crash-survival-e2e.test.mjs",
"tools/win-crash-survival-e2e/run.mjs"
"tests/tools/win-crash-survival-e2e/run.mjs"
],
"assertionRefs": [
{
@ -3124,7 +3124,7 @@
]
},
{
"file": "tools/win-crash-survival-e2e/run.mjs",
"file": "tests/tools/win-crash-survival-e2e/run.mjs",
"assertions": [
"force-killing only the real Electron main leaves the exact scoped daemon and stamped interactive shell alive",
"packaged relaunch adopts the unchanged daemon and reads the survivor shell's environment sentinel through the restored terminal"
@ -3136,7 +3136,7 @@
"date": "2026-07-18",
"runner": "ci",
"platform": "windows",
"command": "node tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path \"$env:ORCA_EXE\" --soak-seconds 8",
"command": "node tests/tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path \"$env:ORCA_EXE\" --soak-seconds 8",
"result": "passed",
"durationSeconds": 61,
"summary": "The packaged branch build's real main died; the same daemon and shell PIDs survived; the event-log scan found zero FailFast events; relaunch adopted the unchanged daemon; and terminal input read the survivor shell sentinel back."
@ -6004,14 +6004,14 @@
"oracle": "Runtime tests assert the exact PTY write sequence and failure cleanup; orchestration tests assert dispatch/coordinator use the agent prompt path; the live CLI harness dispatches a 32KB task to a fake Codex-like TUI and requires marker present, bracketed paste present, zero unframed line breaks, and submit observed.",
"commands": [
"pnpm exec vitest run --config config/vitest.config.ts src/shared/agent-prompt-injection.test.ts src/main/runtime/orca-runtime.test.ts src/main/runtime/rpc/methods/orchestration.test.ts src/main/runtime/orchestration/coordinator.test.ts",
"node tools/repro-orchestration-long-prompt.mjs --cli out/bin/orca-dev --mode codex-like --size-kb 32 --timeout-ms 20000"
"node tests/tools/repro-orchestration-long-prompt.mjs --cli out/bin/orca-dev --mode codex-like --size-kb 32 --timeout-ms 20000"
],
"testFiles": [
"src/shared/agent-prompt-injection.test.ts",
"src/main/runtime/orca-runtime.test.ts",
"src/main/runtime/rpc/methods/orchestration.test.ts",
"src/main/runtime/orchestration/coordinator.test.ts",
"tools/repro-orchestration-long-prompt.mjs"
"tests/tools/repro-orchestration-long-prompt.mjs"
],
"assertionRefs": [
{
@ -6047,7 +6047,7 @@
]
},
{
"file": "tools/repro-orchestration-long-prompt.mjs",
"file": "tests/tools/repro-orchestration-long-prompt.mjs",
"assertions": [
"fake Codex-like worker observes submit after long orchestration dispatch",
"32KB task marker survives before submit",
@ -6069,7 +6069,7 @@
"date": "2026-07-07",
"runner": "local",
"platform": "macos",
"command": "node tools/repro-orchestration-long-prompt.mjs --cli out/bin/orca-dev --mode codex-like --size-kb 32 --timeout-ms 20000",
"command": "node tests/tools/repro-orchestration-long-prompt.mjs --cli out/bin/orca-dev --mode codex-like --size-kb 32 --timeout-ms 20000",
"result": "passed",
"durationSeconds": 2.2,
"summary": "Live dev-runtime repro passed: expectedSpecBytes=32830, hasSubmit=true, rawContainsMarker=true, hasBracketedPasteFrame=true, unframedLineBreaks=0, contractOk=true."

View File

@ -22,7 +22,7 @@ const testFilePatterns = [
'config/**/*.{test,spec}.{js,cjs,mjs,ts,tsx}',
'src/**/*.{test,spec}.{js,cjs,mjs,ts,tsx}',
'tests/**/*.{test,spec}.{js,cjs,mjs,ts,tsx}',
'tools/**/*.{test,spec}.{js,cjs,mjs,ts,tsx}'
'tests/tools/**/*.{test,spec}.{js,cjs,mjs,ts,tsx}'
]
const realZshUsage =
/(?:spawnSync|execFileSync|spawn)\(\s*['"](?:\/(?:usr\/)?bin\/)?zsh['"]|spawnSync\(\s*['"]which['"]\s*,\s*\[\s*['"]zsh['"]|name:\s*['"]zsh['"]\s*,\s*path:\s*executablePath/

View File

@ -6,7 +6,7 @@
* pnpm bench:multi-workspace-typing [-- --panes 8 --rate-kbps 512 \
* --keys 48 --cadence-ms 250 --cpu-workers 4 --label before-fix]
*
* Results land in tools/benchmarks/results/multi-workspace-typing-*.json.
* Results land in tests/tools/benchmarks/results/multi-workspace-typing-*.json.
* Run once per build/config with distinct --label values, then diff the
* totalMs/inputHalfMs/echoHalfMs percentiles.
*/

View File

@ -82,13 +82,17 @@ async function extractToTemporaryCatalog(root, tempDir) {
const outputPattern = path.join(tempDir, '{{language}}.json')
// Why: extraction output is evidence for this check, not another committed
// catalog that feature authors must keep synchronized.
await execFileAsync(process.execPath, [cliPath, 'extract', '--sync-primary', '--quiet'], {
cwd: root,
env: {
...process.env,
ORCA_I18N_EXTRACTION_OUTPUT: outputPattern.split(path.sep).join('/')
await execFileAsync(
process.execPath,
[cliPath, '--config', 'config/i18next.config.ts', 'extract', '--sync-primary', '--quiet'],
{
cwd: root,
env: {
...process.env,
ORCA_I18N_EXTRACTION_OUTPUT: outputPattern.split(path.sep).join('/')
}
}
})
)
return JSON.parse(await fs.readFile(path.join(tempDir, 'en.json'), 'utf8'))
}

View File

@ -1,16 +1,16 @@
import { readFileSync } from 'node:fs'
import { describe, expect, it, vi } from 'vitest'
import { parseArgs } from '../../tools/win-crash-survival-e2e/cli-args.mjs'
import { buildCrashAssertions } from '../../tools/win-crash-survival-e2e/crash-assertions.mjs'
import { scanPwshFailFast } from '../../tools/win-crash-survival-e2e/crash-step.mjs'
import { selectScopedDaemon } from '../../tools/win-crash-survival-e2e/daemon-identity.mjs'
import { parseArgs } from '../../tests/tools/win-crash-survival-e2e/cli-args.mjs'
import { buildCrashAssertions } from '../../tests/tools/win-crash-survival-e2e/crash-assertions.mjs'
import { scanPwshFailFast } from '../../tests/tools/win-crash-survival-e2e/crash-step.mjs'
import { selectScopedDaemon } from '../../tests/tools/win-crash-survival-e2e/daemon-identity.mjs'
import {
reattachSentinelMatches,
selectCreatedTabId
} from '../../tools/win-crash-survival-e2e/reattach-proof.mjs'
import { quotePowerShellLiteral } from '../../tools/win-update-e2e/powershell-runner.mjs'
import { closeApp, resolveElectronMainPid } from '../../tools/win-update-e2e/app-driver.mjs'
import { isPidAlive } from '../../tools/win-update-e2e/daemon-processes.mjs'
} from '../../tests/tools/win-crash-survival-e2e/reattach-proof.mjs'
import { quotePowerShellLiteral } from '../../tests/tools/win-update-e2e/powershell-runner.mjs'
import { closeApp, resolveElectronMainPid } from '../../tests/tools/win-update-e2e/app-driver.mjs'
import { isPidAlive } from '../../tests/tools/win-update-e2e/daemon-processes.mjs'
describe('win-crash-survival-e2e proof contracts', () => {
it('keeps the packaged proof manually dispatchable without a PR trigger', () => {
@ -59,7 +59,7 @@ describe('win-crash-survival-e2e proof contracts', () => {
})
it('scans for FailFast only after the post-crash input probe', () => {
const harness = readFileSync('tools/win-crash-survival-e2e/run.mjs', 'utf8')
const harness = readFileSync('tests/tools/win-crash-survival-e2e/run.mjs', 'utf8')
const scanIndex = harness.indexOf('const { events: failFastEvents }')
const probeIndex = harness.indexOf('reattachProven = await proveReattachedShell')
expect(scanIndex).not.toBe(-1)
@ -163,7 +163,7 @@ describe('win-crash-survival-e2e proof contracts', () => {
})
it('requires the real packaged main for the crash proof but permits fallback cleanup', async () => {
const harness = readFileSync('tools/win-crash-survival-e2e/run.mjs', 'utf8')
const harness = readFileSync('tests/tools/win-crash-survival-e2e/run.mjs', 'utf8')
expect(harness).toContain(
'resolveElectronMainPid(session.app, { allowLauncherFallback: false })'
)

View File

@ -22,7 +22,7 @@ export default defineConfig({
'src/**/*.test.tsx',
'config/scripts/**/*.test.ts',
'config/scripts/**/*.test.mjs',
'tools/**/*.test.mjs',
'tests/tools/**/*.test.mjs',
'tests/e2e/**/*.unit.test.ts'
],
// Why: the full suite runs heavy TS transforms plus real git/http fixtures;

View File

@ -98,23 +98,23 @@
"test:e2e:ssh-docker-terminal-parking": "node config/scripts/run-ssh-docker-terminal-parking-e2e.mjs",
"test:e2e:nested-runtime-ssh": "node config/scripts/run-nested-runtime-ssh-e2e.mjs",
"test:e2e:source-control-scale": "pnpm run ensure:electron-runtime && npx playwright test tests/e2e/source-control-large-file-count.spec.ts --config tests/playwright.config.ts --project electron-headless --workers=1",
"win-update-e2e": "node tools/win-update-e2e/run.mjs",
"win-crash-survival-e2e": "node tools/win-crash-survival-e2e/run.mjs",
"win-update-e2e": "node tests/tools/win-update-e2e/run.mjs",
"win-crash-survival-e2e": "node tests/tools/win-crash-survival-e2e/run.mjs",
"test:e2e:ssh-codex-artifacts-repro": "node config/scripts/run-ssh-codex-artifacts-repro-e2e.mjs",
"test:e2e:headful": "pnpm run ensure:electron-runtime && npx playwright test --config tests/playwright.config.ts --project electron-headful",
"test:e2e:terminal-ime-native": "node config/scripts/run-terminal-ibus-hangul-e2e.mjs",
"test:e2e:computer": "vitest run --config tests/e2e/vitest.config.ts",
"bench:idle-cpu": "pnpm run ensure:electron-runtime && node config/scripts/run-idle-cpu-benchmark.mjs",
"bench:macos-computer-helper-owner-loss": "node config/scripts/macos-computer-helper-owner-loss-benchmark.mjs",
"bench:startup": "pnpm run ensure:electron-runtime && node tools/benchmarks/startup-time-bench.mjs",
"bench:daemon-coldstart": "pnpm run ensure:electron-runtime && node tools/benchmarks/daemon-coldstart-bench.mjs",
"bench:startup": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/startup-time-bench.mjs",
"bench:daemon-coldstart": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/daemon-coldstart-bench.mjs",
"bench:hang-watchdog-memory": "pnpm run ensure:electron-runtime && node config/scripts/hang-watchdog-memory-benchmark.mjs",
"bench:main-thread-jank": "pnpm run ensure:electron-runtime && node tools/benchmarks/main-thread-jank-bench.mjs",
"bench:worktree-deletion": "node tools/benchmarks/worktree-deletion-dev-bench.mjs",
"bench:main-thread-jank": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/main-thread-jank-bench.mjs",
"bench:worktree-deletion": "node tests/tools/benchmarks/worktree-deletion-dev-bench.mjs",
"bench:zustand-selector-fanout": "node config/scripts/zustand-selector-fanout-benchmark.mjs",
"bench:multi-workspace-typing": "pnpm run ensure:electron-runtime && node config/scripts/run-multi-workspace-typing-bench.mjs",
"bench:cold-park-reveal": "pnpm run ensure:electron-runtime && node tools/benchmarks/terminal-cold-park-reveal-bench.mjs",
"bench:cold-park-resource": "pnpm run ensure:electron-runtime && node tools/benchmarks/terminal-cold-park-resource-bench.mjs",
"bench:cold-park-reveal": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/terminal-cold-park-reveal-bench.mjs",
"bench:cold-park-resource": "pnpm run ensure:electron-runtime && node tests/tools/benchmarks/terminal-cold-park-resource-bench.mjs",
"bench:compare": "node config/scripts/compare-benchmark-artifacts.mjs"
},
"dependencies": {

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@ import { Session, type SubprocessHandle } from './session'
// Benchmark harness for the terminal performance initiative: measures the
// daemon-side ingest rate (Session.handleSubprocessData -> HeadlessEmulator
// write + pending-output recording + client fanout) for the same workload
// shapes as tools/benchmarks/terminal-pipeline-bench.mjs. Bare headless
// shapes as tests/tools/benchmarks/terminal-pipeline-bench.mjs. Bare headless
// xterm parses these at ~80-100 MB/s; the end-to-end Orca pipeline measured
// 2-15 MB/s (baseline-jul02) — this isolates the daemon layer's share.
// Run with:

View File

@ -1,123 +0,0 @@
# PR #11293 + PR #11177 semantic integration R1
## Result
- #11293 base: `a9d8be94df2b750c9d363fc8310567dd7e5504cd`
- Preserved contributor commit: `eb76873ce7b9564b248f7317924e6c49b4001b13`
(`JeongUk Park <jeongph.dev@gmail.com>`, cherry-picked from `2cb6a50e3`)
- Integration commit: `c1b329b72f25d8701769be52d0c400c5eaf29510`
- Finalized #11177 reference: `dc2b59723dcc8cbf2cf44ebe0511323551e9d3b3`
- Upstream xterm source: `53a98a720ae4a973e384fa2440880d09537132f3`
- Published runtime/source-map version: `6.1.0-beta.287`
- Final pnpm patch hash:
`db949d673197f31341f8cac2b25acff4cf6073725bfb6c6d3ca2ed02cfd5c898`
The integration retains #11293/#11011's transaction IDs, pending-composition record,
tracked timers, input/blur/disposal ownership, stale-end rejection, and
Japanese/Chinese/Korean reconciliation. It layers #11177's Korean won/backtick native
forwarding, compatible optional helper interface, accepted/settled events, immediate
restart balance, runtime version, and complete generated artifact set.
Immediate restart cancels the superseded finalizer timer and settles its lifecycle before
the new transaction is accepted, while retaining the stronger pending byte record until
the restarted composition supplies authoritative text. This preserves both
`accepted, settled, accepted, settled` and Korean final-consonant transfer (`아아`, not
`앙아`). When a browser/test double omits `CompositionEvent.data`, the fallback uses
#11177's shortest ordered keypress merge; data-bearing Chromium/IBus paths retain
#11293's distinct-following-keypress contract.
## Authorship and history
JeongUk Park's original contributor authorship is preserved in its own commit before the
integration fix. The exact #11293 base remains intact, including its existing
AmethystLiang and nwparker-authored history. No commit was squashed or rewritten.
## Red control
The final 16-test CJS/ESM transaction suite was run against exact round-six parent
`be7b9b85574266d2da114e3171020db645262bc1`.
- Result: 2 failed, 14 passed.
- Both failures were the intended immediate-full-restart controls.
- Parent events were `accepted, accepted`; the candidate reports
`accepted, settled, accepted`.
The candidate passes all 16 tests and produces `한글` exactly once.
## IME and terminal validation
| Gate | Result |
| ----------------------------------------------- | ----------------------------- |
| Exact #11011 composition suite from `a76760649` | 42/42 passed |
| Exact #11177 ten-file matrix from `dc2b59723` | 127/127 passed |
| Combined current IME superset | 13 files, 218/218 passed |
| Focused transaction/won/#11293 suite | 4 files, 75/75 passed |
| Broad terminal-pane suite | 200 files, 2,673/2,673 passed |
| Native IBus workflow contract tests | 4/4 passed |
The native Linux IBus harness was not run because the integration host is macOS
(`Darwin`); the harness requires Linux/X11 and running it here would violate the
no-GUI/no-input-source-change constraint.
## Artifact and supply-chain integrity
A clean checkout of upstream xterm `53a98a7` received the publication substitutions and
the semantic source union. Upstream `tsgo -b ./tsconfig.all.json`, webpack CJS, and
production esbuild ESM builds passed. A fixture-local self-package link prevented Orca's
ancestor `node_modules` typings from contaminating the clean upstream compile.
| Artifact | SHA-256 |
| ------------------- | ------------------------------------------------------------------ |
| `lib/xterm.js` | `81b4efd747ab4188635955ef60dcc02a4c4920039fad4c9b898ff93710ff8b3a` |
| `lib/xterm.mjs` | `13afb1a5bb49e2bbc8ff8b2867b71b0c8e61f6fb25f49af69ac8f25b72ccf24f` |
| `lib/xterm.js.map` | `2f4394dbed6e3a5baeab2b7fb24ce6e5f940ebbab728d30c093ff8fa0f8ebb4d` |
| `lib/xterm.mjs.map` | `4d7b8a4775bca851c4c19aac70543b2881dad7af27e4f5397403ddb59ec3f090` |
- The final patch applies cleanly to the pristine npm package.
- All patched package files match the installed pnpm package byte-for-byte.
- All 24 lockfile references use the raw patch SHA-256.
- Frozen and frozen-offline installs passed, including native dependency validation.
- CJS and ESM DCS probes both report `xterm.js(6.1.0-beta.287)`.
- Both maps contain the matching `src/common/Version.ts` source.
## Repository gates
- Node, CLI, and web typechecks: passed.
- Full repository lint: passed, including type-aware/native code-quality, reliability,
max-lines, localization, and bundled-skill gates.
- Changed-code-quality and React Doctor: 0 new findings.
- Changed TypeScript formatting: passed.
- Electron Vite production build: passed with existing chunking/CSS warnings.
- `git diff --check`: passed.
One lint invocation intentionally overlapped the Electron build and observed the build's
ephemeral `electron.vite.config.*.mjs` disappear during scanning. The standalone final
lint rerun passed; this was concurrent command interference, not a source failure.
## Latest main compatibility
- Fetched `origin/main`: `a7c8b8e07161ec05c44dbf2a0d11dad9c71a4710`
- Conflict-free merge tree: `95f1aa9fa14d3664adb9aa20a3c35f0ee481979d`
- Materialized merge frozen-offline install: passed.
- Materialized merge IME superset: 13 files, 218/218 passed.
- Materialized merge Node/CLI/web typechecks: passed.
## Security, performance, platform, and workspace audit
- No dependency version or dependency graph changed; `pnpm-lock.yaml` changes only the
xterm patch hash references.
- No filesystem, shell, Git, provider, credential, IPC, HTML injection, or network
surface changed.
- No unbounded timer or collection was added. Superseded finalizers are canceled and
removed from the tracked timer set; the large-observation performance guard remains
green.
- macOS won/backtick routing remains behind the existing input-source feature gate.
Linux and Windows retain their existing paths, including Windows IME ownership tests.
- Forwarded native text still enters `terminal.input()` and xterm's existing ordered
`onData` transport. Local PTYs, SSH/remote runtimes, git worktrees, and folder
workspaces therefore share the established transport with no host-local assumption.
- No Git command, provider-specific review behavior, path handling, or native module
baseline changed.
No push, merge, GitHub/Slack comment, reaction, GUI automation, window focus, or system
input-source change was performed.

View File

@ -1,130 +0,0 @@
# PR #11293 + PR #11177 semantic integration R2
## Result
- R1 product: `c1b329b72f25d8701769be52d0c400c5eaf29510`
- R1 evidence: `1d60de49452ebd7cf0b5e3255c5c48d83d96220a`
- R2 product: `2f5811d7f6e45c0da925ed4b17f68a558b974497`
- Integration base: `a9d8be94df2b750c9d363fc8310567dd7e5504cd`
- Preserved contributor commit:
`eb76873ce7b9564b248f7317924e6c49b4001b13`
(`JeongUk Park <jeongph.dev@gmail.com>`)
- Upstream xterm source: `53a98a720ae4a973e384fa2440880d09537132f3`
- Runtime/source-map version: `6.1.0-beta.287`
- Final xterm patch hash:
`642f6920fa1fdcbd740542f81895b092f383e9bfa926aa3967c4197729c5e40b`
Verifier A's P2 and P3 are fixed in both installed package formats. A restarted
transaction now rejects a pre-update end that repeats the retained prior
transaction's end observation, so the delayed stale sequence emits `AB`, not
`AA`. Deferred composition-position and view work is coalesced by ownership
slot and canceled on restart, bounding the 256-transaction same-task burst at
three tracked timers instead of 769; all tracked state drains to zero.
The retained pending composition record remains separate from accepted/settled
lifecycle settlement. This preserves immediate restart balance, Korean final
consonant reconciliation, Japanese/Chinese ordering, #11052 newline ownership,
and #11177 won/backtick forwarding.
## Parent red and candidate green
The exact verifier A R1 oracle was read and retained as the control:
- R1 installed CJS/ESM oracle: 10 passed, 4 failed of 14.
- Intended failures: delayed stale end in CJS and ESM, plus the timer bound in
CJS and ESM.
- R2 full verifier oracle: 14/14 passed.
- Tracked focused R2 regression:
`terminal-ime-xterm-adversarial.test.ts`, 4/4 passed.
- The tracked regression SHA-256 is
`69b48b8733b407e8cb2ddd716bbd6dbb87ec12696e950ecaf0e738b67af9512f`.
The regression uses real installed xterm DOM listeners and separately imports
the CJS and ESM bundles. It asserts exact PTY bytes, the four-timer ceiling,
timer drainage, and disposal.
## IME and terminal validation
| Gate | Result |
| ----------------------------------------- | ----------------------------- |
| Exact #11011 historical suite | 42/42 passed |
| Exact #11177 ten-file historical matrix | 127/127 passed |
| #11052 Enter/newline matrix | 3 files, 49/49 passed |
| Current combined IME matrix | 14 files, 222/222 passed |
| Full verifier A adversarial oracle | 14/14 passed |
| Focused tracked P2/P3 CJS+ESM regressions | 4/4 passed |
| Broad terminal-pane suite | 201 files, 2,677/2,677 passed |
The combined matrix covers accepted/settled restarts, stale/duplicate ends,
Korean/Japanese/Chinese reconciliation, won/backtick forwarding, Enter and
deferred newline behavior, blur, disposal, Linux candidates, and Windows
ownership guards.
## Artifact and lock integrity
The exact upstream xterm checkout at `53a98a7` compiled with `tsgo`, webpack
CJS, and production esbuild ESM. The installed package reconstructed from the
committed pnpm patch matches the build/package fixture byte-for-byte for the
four artifacts and all modified upstream sources.
| Artifact | SHA-256 |
| ------------------- | ------------------------------------------------------------------ |
| `lib/xterm.js` | `c624587a60f1ed497255262c8d894d7e83e7345e6477be1167a0531b56aedfe8` |
| `lib/xterm.mjs` | `53e259559fb78c996ad5d3cfd608a8e77285e3d39b4f445719ec2ce4eea1b6e0` |
| `lib/xterm.js.map` | `ecb49132c05a0042b563b2434756a985806cb58f024ceecec698f8cec232f509` |
| `lib/xterm.mjs.map` | `5413dad5ed07bf66a8d382e0e3da1cb3b41578f34a275e1dc5e47cbc4ae0054a` |
Both maps contain the exact rebuilt `CompositionHelper.ts` sources content
with SHA-256
`6cffe8b2aeb6d8279d1315c1c26fe7f270370e66ddc5ef43faf5b73e18c337a1`.
All 24 lockfile references use the final raw patch hash. A frozen offline
install passed and selected the matching pnpm virtual-store package.
## Repository gates
- Node, CLI, and web typechecks passed.
- Full lint passed, including native and type-aware code-quality, reliability,
max-lines ratchet, localization, and bundled-skill checks.
- Changed-code quality and React Doctor reported zero new findings.
- Changed TypeScript formatting passed.
- Clean-worktree `git diff --check` passed; the generated patch also applies
cleanly and reconstructs exact source and artifacts.
- Electron Vite production build passed with existing chunking and CSS
pseudo-element warnings.
- Frozen offline install and native dependency validation passed.
## Latest main compatibility
- Fetched `origin/main`:
`238d3a1ea167396a1b38275846cea0dd5059b04a`
- Conflict-free synthetic merge tree:
`8d3178427df19c4e3b4d96287d66a354106b1f0b`
- Materialized merge frozen-offline install: passed.
- Materialized merge IME matrix: 14 files, 222/222 passed.
- Materialized merge Node, CLI, and web typechecks: passed.
## Platform, transport, security, and performance audit
The R2 product changes only the xterm patch, its lock hash, and deterministic
tests. No Orca PTY, SSH, remote-runtime, folder-workspace, git-worktree,
filesystem, provider, IPC, credential, HTML, or network path changed.
Forwarded text still enters xterm's ordered `onData` transport for local,
remote, and SSH terminals. Linux and Windows routing remains unchanged, while
macOS won forwarding retains its existing runtime and modifier gates.
The new timer slots are constant-space and are cleared on supersession,
callback completion, and disposal. The 256-transaction burst emitted all 256
Hangul commits exactly once and drained both pending state and the timer set.
No dependency version or graph changed.
## Bounded gaps
- The host is Darwin, so the native Linux IBus harness was unavailable.
- No GUI automation, window focus, or system input-source change was used.
- No physical macOS, Linux, Windows, Japanese, Chinese, or Korean IME journey
was run.
- No live SSH or folder-workspace native-IME journey was run; deterministic
transport and ownership suites cover those invariant paths.
No push, merge, comment, reaction, GUI action, window focus, or input-source
mutation was performed.

View File

@ -1,168 +0,0 @@
# PR #11293 + PR #11177 semantic integration R3
## Result
- R2 evidence HEAD: `6c26dbae39d5c9bd338b6fd3c425a3545d1bf050`
- R2 product: `2f5811d7f6e45c0da925ed4b17f68a558b974497`
- R3 product: `06e3ec2db829b8b5e4cf40f0018fa896ca267c87`
- Integration base: `a9d8be94df2b750c9d363fc8310567dd7e5504cd`
- Preserved contributor commit:
`eb76873ce7b9564b248f7317924e6c49b4001b13`
(`JeongUk Park <jeongph.dev@gmail.com>`)
- Upstream xterm source: `53a98a720ae4a973e384fa2440880d09537132f3`
- Runtime/source-map version: `6.1.0-beta.287`
- Final xterm patch SHA-256:
`936fabb7682c1f7d37b9c7f49f3130c4141b6c32974f202e6f03bafaa42350ba`
R3 replaces R2's data-equality stale-end heuristic with transaction-owned observable
progress. Each composition records its starting textarea value and selection. An end
belongs to the current transaction only after the transaction has visibly changed that
value or selection, an input/deferred position callback has observed that change, or its
non-empty data matches the current transaction's own non-empty `compositionupdate`.
An ambiguous end is held in one tracked, callback-owned timer slot. If native
textarea/selection progress lands later in the same task, the end is accepted and
finalized; otherwise it remains stale and the transaction waits for its true end. This
fixes all three R2 correctness failures:
- a legitimate repeated no-update `가` commit with visible `가` to `가가` progress emits
`가가` with balanced `accepted, settled, accepted, settled`;
- a data-less stale end immediately after restart no longer consumes the new transaction,
and its true `B` emits final `AB`;
- a stale `end('A')` after the restarted `update('B')` but before textarea mutation no
longer emits `AA`; the true end emits final `AB`.
Immediate restart still settles the old lifecycle before accepting the new transaction,
while retained pending bytes remain available for Korean final-consonant reconciliation.
The Orca composition route does not forward provisional session-end data marked as
pending reconciliation.
## Parent red and candidate green
The complete verifier A R2 installed-bundle oracle was read and reproduced against the
R2 product:
- R2: 20 passed, 6 failed of 26.
- The six expected failures were the repeated no-update false positive, data-less stale
end, and stale end after current update, each in installed CJS and ESM.
- Verifier A's other 20 CJS/ESM controls remained green, including the R1 stale-end
sequence and timer-bound/race cases.
R3 validation combined verifier A's 26 tests, verifier B's repeated no-update test in CJS
and ESM, and the R1 14-test oracle:
- R3 verifier/R1 oracle matrix: 42/42 passed.
- Tracked installed CJS/ESM xterm plus Orca route regressions: 27/27 passed.
- Combined focused regression run: 55/55 passed.
- Tracked regression SHA-256:
`ed375b0ccba820a80385ddb2c0104fb3a37dc285cadfce6f1482483d9cdef086`.
Tracked regressions cover repeated no-update commits with progress before the end and
progress later in the same task, the original data-bearing stale end, the data-less stale
end, current-update-before-textarea stale end, same-data with and without progress, the
four-timer ceiling, timer drainage, disposal, and forced canceled-callback races.
Verifier B also reported ten trailing-whitespace additions in the R2 patch. The regenerated
R3 patch removes them: `git show --check`, `git diff --check HEAD^ HEAD`, and working-tree
`git diff --check` all pass.
## IME and terminal validation
| Gate | Result |
| ----------------------------------------------------- | ----------------------------- |
| Exact #11011 historical suite | 42/42 passed |
| Exact #11177 ten-file historical matrix | 127/127 passed |
| Exact inherited #11052 Enter/newline cases | 49/49 passed |
| Current #11052/route set with R3 reconciliation test | 50/50 passed |
| Current combined IME matrix | 14 files, 233/233 passed |
| Verifier A R2 + verifier B + R1 oracles | 42/42 passed |
| Focused tracked CJS/ESM and route regressions | 27/27 passed |
| Broad terminal-pane suite | 201 files, 2,688/2,688 passed |
| Verifier B R2 native Linux IBus shared local-PTY path | 60/60 exact sequences passed |
The combined matrix covers accepted/settled immediate restarts, stale and duplicate ends,
Korean final-consonant transfer, Japanese/Chinese ordering, #11052 Enter/deferred newline,
#11177 won/backtick forwarding, blur, disposal, Linux candidates, Windows ownership, and
bounded timer/callback ownership.
## Artifact and lock integrity
The exact upstream xterm checkout at `53a98a7` compiled with TypeScript, webpack CJS, and
production esbuild ESM. The committed pnpm patch applies to the matching pristine package;
the reconstructed package, installed package, and synthetic-merge installed package match
byte-for-byte for all modified source and generated artifacts.
| Artifact | SHA-256 |
| ------------------- | ------------------------------------------------------------------ |
| `lib/xterm.js` | `605f406ca62d58e3bdc4367a53b338a0504ef023d4b67d9ce55a0ebe4ef6e575` |
| `lib/xterm.mjs` | `3073b72926335549c5b8b3549da091035be489c774e08f2b71780b92a00db6dc` |
| `lib/xterm.js.map` | `1e2492bd1fbe8147dd9b6e47c875e4b11478c9f42c5cb24b27b8bb54482d8189` |
| `lib/xterm.mjs.map` | `851ad7e138f5a73a7ae74a404269a9a5cf1fd618c7c13db856f0b345499a09bb` |
Both maps contain the exact rebuilt `CompositionHelper.ts` sources content with SHA-256
`a2d5f3252e73c8da40e2fca91281789f8cc98ae16387d679d21b93218b697b4c`.
All 24 lockfile references use the final raw patch hash. Frozen-offline installation
passed for both the R3 product and the latest-main synthetic merge.
## Repository gates
- Node, CLI, and web typechecks passed.
- Full lint passed, including native and type-aware code-quality, reliability,
max-lines ratchet, localization, and bundled-skill checks.
- Changed-code quality, changed React Doctor, and changed React Doctor lint reported zero
new findings.
- Changed TypeScript formatting and `git diff --check` passed.
- Electron Vite production build passed with existing chunking and CSS pseudo-element
warnings.
- Exact package/source/artifact reconstruction and frozen-offline install passed.
The full-repository formatter check was run and reported 20 unrelated pre-existing files,
including documentation, workflows, reliability config, and renderer files untouched by
R3. No unrelated formatting was rewritten; all R3 TypeScript files pass the formatter.
## Latest main compatibility
- Fetched `origin/main`:
`ef55429f3d2ce3fbbcc542e4dcc8a6b36e464455`
- Conflict-free synthetic merge tree:
`5613493fa46eaedabcc86c7041bc2369a2031d38`
- Materialized merge frozen-offline install: passed.
- Materialized merge IME matrix: 14 files, 233/233 passed.
- Materialized merge Node, CLI, and web typechecks: passed.
- Materialized merge CJS, ESM, and both maps match the R3 hashes above.
## Security, performance, platform, and workspace audit
The dependency graph and versions are unchanged; `pnpm-lock.yaml` changes only the xterm
patch hash references. The production dependency audit reports no known vulnerabilities.
The all-dependency audit was also run and reported five existing development-tool
advisories: one moderate and four high, through `shadcn > postcss` and
`electron-builder > minimatch > brace-expansion`. R3 adds no package and does not alter
those dependency paths.
R3 changes no PTY, SSH, remote-runtime, folder-workspace, git-worktree, filesystem,
provider, Git command, IPC, credential, HTML, or network path. Forwarded bytes still use
xterm's ordered `onData` transport for local, SSH, and remote terminals. Linux and Windows
routing is unchanged; macOS won forwarding retains the existing runtime/modifier gates.
Deferred composition work remains constant-space: position, view, end, and finalizer work
each owns at most one tracked slot, superseded callbacks cannot clear newer slots, and all
slots are removed on callback completion, restart, cancellation, blur, or disposal. The
4,096-transaction verifier controls and tracked 256-transaction burst emit exact ordered
bytes and fully drain tracked state.
## Bounded gaps
- The host is Darwin, so the native Linux IBus harness was unavailable.
- Verifier B independently ran the exact R2 package on isolated Debian/Xvfb/IBus and
passed 60/60 local-PTY byte sequences; R3 changes only end ownership classification and
retains that transport path.
- No GUI automation, window focus, or system input-source change was used.
- No physical macOS, Linux, Windows, Japanese, Chinese, or Korean IME journey was run.
- No live SSH or folder-workspace native-IME journey was run; deterministic transport and
ownership suites cover those invariant paths.
- The repository-wide formatter and dependency audit retain the unrelated baseline
findings described above.
No push, merge, comment, reaction, GUI action, window focus, or input-source mutation was
performed.

View File

@ -15,7 +15,7 @@
* may legitimately "fail" while the bug reproduces, not CI regression gates).
* Entry point: pnpm bench:multi-workspace-typing (see
* config/scripts/run-multi-workspace-typing-bench.mjs for knobs). Results are
* written as JSON to tools/benchmarks/results/ for A/B comparison.
* written as JSON to tests/tools/benchmarks/results/ for A/B comparison.
*/
import type { Page, TestInfo } from '@stablyai/playwright-test'
import { type ChildProcess, spawn } from 'node:child_process'

View File

@ -11,12 +11,12 @@
* (event-loop-stall probe) while pid identity checks run.
*
* Usage:
* node tools/benchmarks/daemon-coldstart-bench.mjs --label baseline
* node tests/tools/benchmarks/daemon-coldstart-bench.mjs --label baseline
* [--iterations 3] [--linger-ms 15000] [--timeout-ms 240000]
* [--exe <path-to-packaged-Orca.exe>]
*
* Prereq (when not using --exe): `pnpm build:electron-vite` so out/ exists.
* Results: tools/benchmarks/results/daemon-coldstart-<label>-<timestamp>.json
* Results: tests/tools/benchmarks/results/daemon-coldstart-<label>-<timestamp>.json
*/
import { spawn, spawnSync } from 'node:child_process'
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from 'node:fs'

View File

@ -15,7 +15,7 @@
* emitted them, so spawn churn and OS warnings can be correlated by timestamp.
*
* Usage:
* node tools/benchmarks/main-thread-jank-bench.mjs --label baseline
* node tests/tools/benchmarks/main-thread-jank-bench.mjs --label baseline
* [--duration-s 120] [--warmup-s 20] [--fixture-dir <path>]
* [--exe <path-to-packaged-Orca>] [--headless] [--no-log-stream]
*
@ -24,7 +24,7 @@
* --headless exists only for smoke-testing the harness itself.
*
* Prereq (when not using --exe): `pnpm build:electron-vite` so out/ exists.
* Results: tools/benchmarks/results/main-thread-jank-<label>-<timestamp>.json
* Results: tests/tools/benchmarks/results/main-thread-jank-<label>-<timestamp>.json
*/
import { spawn, spawnSync } from 'node:child_process'
import { existsSync, mkdirSync, writeFileSync } from 'node:fs'

View File

@ -9,7 +9,7 @@
* reports per-phase timings across iterations.
*
* Usage:
* node tools/benchmarks/startup-time-bench.mjs --label baseline
* node tests/tools/benchmarks/startup-time-bench.mjs --label baseline
* [--iterations 5] [--files 28000] [--fixture-dir <path>]
* [--state-profile none|restored-local-tabs] [--session-tabs 200]
* [--github-repos 3] [--gh-hang-ms 30000]
@ -24,7 +24,7 @@
* turns a 2.5s execSync timeout into a minutes-long main-thread stall.
*
* Prereq (when not using --exe): `pnpm build:electron-vite` so out/ exists.
* Results: tools/benchmarks/results/startup-<label>-<timestamp>.json
* Results: tests/tools/benchmarks/results/startup-<label>-<timestamp>.json
*/
import { spawn, spawnSync } from 'node:child_process'
import {

View File

@ -56,7 +56,7 @@ function parseArgs() {
for (const arg of process.argv.slice(2)) {
if (arg === '--help' || arg === '-h') {
console.log(
'Usage: node tools/benchmarks/terminal-cold-park-resource-bench.mjs [--label=name] [--worktrees=N] [--scrollback-lines=N] [--report=path] [--keep]'
'Usage: node tests/tools/benchmarks/terminal-cold-park-resource-bench.mjs [--label=name] [--worktrees=N] [--scrollback-lines=N] [--report=path] [--keep]'
)
process.exit(0)
}
@ -454,7 +454,7 @@ async function main() {
args.reportPath ??
path.join(
rootDir,
'tools',
'tests', 'tools',
'benchmarks',
'results',
`cold-park-res-${args.label}-${stamp}.json`

View File

@ -57,7 +57,7 @@ function parseArgs() {
for (const arg of process.argv.slice(2)) {
if (arg === '--help' || arg === '-h') {
console.log(
'Usage: node tools/benchmarks/terminal-cold-park-reveal-bench.mjs [--label=name] [--cycles=N] [--scrollback-lines=N] [--report=path] [--keep]'
'Usage: node tests/tools/benchmarks/terminal-cold-park-reveal-bench.mjs [--label=name] [--cycles=N] [--scrollback-lines=N] [--report=path] [--keep]'
)
process.exit(0)
}
@ -582,7 +582,7 @@ async function main() {
args.reportPath ??
path.join(
rootDir,
'tools',
'tests', 'tools',
'benchmarks',
'results',
`cold-park-${args.label}-${stamp}.json`

View File

@ -10,7 +10,7 @@
* to xterm.js's parser/buffer for that byte pattern.
*
* Usage:
* node tools/benchmarks/terminal-headless-parse-bench.mjs
* node tests/tools/benchmarks/terminal-headless-parse-bench.mjs
* [--size-mb 10] [--cols 114] [--rows 85] [--scrollback 5000]
*/
import { performance } from 'node:perf_hooks'

View File

@ -100,7 +100,7 @@ function parseArgs() {
function printHelp() {
console.log(`Usage:
node tools/benchmarks/terminal-perf-bench.mjs [options]
node tests/tools/benchmarks/terminal-perf-bench.mjs [options]
Options:
--label=NAME Label recorded in the report filename/JSON. Default: run.
@ -109,7 +109,7 @@ Options:
--cycles=N Workspace switch cycles. Default: ${defaultCycles}.
--shell=PATH Shell override for created tabs (e.g. cmd.exe). Default: app default.
--scenarios=a,b Subset of tab-create,tab-switch,workspace-switch.
--report=PATH Report JSON path. Default: tools/benchmarks/results/terminal-perf-<label>-<ts>.json.
--report=PATH Report JSON path. Default: tests/tools/benchmarks/results/terminal-perf-<label>-<ts>.json.
--keep Keep the temp fixture and user data dir.`)
}
@ -591,7 +591,7 @@ async function main() {
args.reportPath ??
path.join(
rootDir,
'tools',
'tests', 'tools',
'benchmarks',
'results',
`terminal-perf-${args.label}-${stamp}.json`

View File

@ -19,12 +19,12 @@
* agent floods output" complaint, quantified.
*
* Usage (run in EACH terminal being compared, same machine, on AC power):
* node tools/benchmarks/terminal-pipeline-bench.mjs --label m2max-2026-07-02
* node tests/tools/benchmarks/terminal-pipeline-bench.mjs --label m2max-2026-07-02
* [--size-mb 10] [--iterations 5] [--dsr-count 200] [--skip-load]
* [--fixtures ascii-log,cjk-emoji,agent-tui,styles-stress]
*
* Aggregate results from all terminals into one comparison table:
* node tools/benchmarks/terminal-pipeline-bench.mjs report [--label <filter>]
* node tests/tools/benchmarks/terminal-pipeline-bench.mjs report [--label <filter>]
*
* Protocol notes: keep hands off the keyboard during a run (stdin is parsed
* for DSR replies), use a comparable window size everywhere, avoid tmux/screen
@ -32,7 +32,7 @@
* deliberately pathological (every cell restyled); read it as a ceiling probe,
* not a realistic workload. Complementary manual metric: Typometer for true
* keypress->pixel latency this probe stops at the parser reply.
* Results: tools/benchmarks/results/terminal-pipeline-<label>-<timestamp>.json
* Results: tests/tools/benchmarks/results/terminal-pipeline-<label>-<timestamp>.json
*/
import { mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'
import os from 'node:os'
@ -552,7 +552,7 @@ async function main() {
}
}
console.log(`\nSaved: ${outPath}`)
console.log('Compare terminals: node tools/benchmarks/terminal-pipeline-bench.mjs report')
console.log('Compare terminals: node tests/tools/benchmarks/terminal-pipeline-bench.mjs report')
process.exit(0)
}

View File

@ -12,7 +12,7 @@
* Attaches over CDP to an already-running dev app:
*
* ORCA_DEV_USER_DATA_PATH=... REMOTE_DEBUGGING_PORT=9455 pn dev
* node tools/benchmarks/workspace-switch-paint-latency.mjs --port 9455
* node tests/tools/benchmarks/workspace-switch-paint-latency.mjs --port 9455
*
* Exits non-zero when the median first-paint exceeds --budget (default 200ms),
* which makes it usable directly as a `git bisect run` predicate.

View File

@ -34,14 +34,14 @@ This spike does **not** reintroduce stock node.
```
# Real run (Windows, needs a packaged win-unpacked build):
node tools/daemon-relocation-spike/spike.mjs \
node tests/tools/daemon-relocation-spike/spike.mjs \
--app-dir <path-to-win-unpacked> \
--work-dir <scratch-dir> \
[--tier full|no-gpu|minimal] \
[--keep-work-dir]
# Offline logic validation (any OS, no build, no launch):
node tools/daemon-relocation-spike/spike.mjs --selftest
node tests/tools/daemon-relocation-spike/spike.mjs --selftest
```
Exit code is `0` only when the run **PASSES**: daemon ready, PTY echo

View File

@ -11,8 +11,8 @@ const USAGE = `
daemon-relocation-spike minimal relocated daemon-host file-set probe (Windows)
Usage:
node tools/daemon-relocation-spike/spike.mjs --app-dir <win-unpacked> --work-dir <temp out> [--tier <t>]
node tools/daemon-relocation-spike/spike.mjs --selftest
node tests/tools/daemon-relocation-spike/spike.mjs --app-dir <win-unpacked> --work-dir <temp out> [--tier <t>]
node tests/tools/daemon-relocation-spike/spike.mjs --selftest
Required (launch mode):
--app-dir <path> Path to a packaged win-unpacked build (contains Orca.exe)

View File

@ -472,7 +472,7 @@ function fakeCoordinatorMain() {
async function main() {
if (hasFlag('help')) {
console.log(`Usage:
node tools/repro-orchestration-long-prompt.mjs [--mode codex-like|wire] [--size-kb 80]
node tests/tools/repro-orchestration-long-prompt.mjs [--mode codex-like|wire] [--size-kb 80]
The parent mode requires a running Orca runtime and creates temporary Orca
terminals. The fake worker records whether orchestration dispatch delivered a

View File

@ -10,7 +10,7 @@ All watched/churned directories live under `os.tmpdir()`, never the repo.
## Reproduce the bug (in-process watcher, pre-fix architecture)
```
node tools/repro-watcher-crash-7547/run.cjs delete-root 3 15000
node tests/tools/repro-watcher-crash-7547/run.cjs delete-root 3 15000
```
Spawns `child.cjs`, which uses `@parcel/watcher` **in-process** the way
@ -37,7 +37,7 @@ Build first so the forked entry exists, then run from the repo root:
```
npx electron-vite build
node tools/repro-watcher-crash-7547/fixed-child.cjs 15000
node tests/tools/repro-watcher-crash-7547/fixed-child.cjs 15000
```
`fixed-child.cjs` esbuild-bundles the real `src/main/ipc/parcel-watcher-process.ts`

View File

@ -32,7 +32,7 @@ const MODIFIER = process.platform === 'darwin' ? 'Meta' : 'Control'
const replayRoot = path.join(os.tmpdir(), 'garble-rig')
const REPLAY_A = path.join(replayRoot, 'frames-A.jsonl')
const REPLAY_B = path.join(replayRoot, 'frames-B.jsonl')
const REPLAY_SCRIPT = path.resolve('tools/terminal-garble-session-replay.mjs')
const REPLAY_SCRIPT = path.resolve('tests/tools/terminal-garble-session-replay.mjs')
const PANE_COUNT = Number(argValue('--panes', '2'))
const TAB_COUNT = Number(argValue('--tabs', '1'))
const CLICK_COUNT = Number(argValue('--clicks', '3'))

View File

@ -19,7 +19,7 @@ The fix re-architected the daemon into a standalone, relocated
that is spawned **detached** and **survives main-process death**.
There is already a harness proving the daemon survives a Windows **update**
([`tools/win-update-e2e`](../win-update-e2e/README.md)). This harness proves the
([`tests/tools/win-update-e2e`](../win-update-e2e/README.md)). This harness proves the
daemon survives a **crash** of the main process, so that guarantee can't silently
regress. It **reuses win-update-e2e's shared modules** (app driver, daemon
discovery, onboarding seed, PowerShell runner, platform guard, table renderer)
@ -70,7 +70,7 @@ a CLI usage error).
```powershell
pnpm win-crash-survival-e2e --expect survival
# or explicitly point at an installed exe:
node tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path "C:\Users\<you>\AppData\Local\Programs\orca\Orca.exe"
node tests/tools/win-crash-survival-e2e/run.mjs --expect survival --exe-path "C:\Users\<you>\AppData\Local\Programs\orca\Orca.exe"
```
### Flags

View File

@ -21,7 +21,7 @@ leaves the detached terminal daemon + its pwsh shell alive, with no pwsh FailFas
the surviving daemon instead of forking a new one. See #7742.
Usage:
node tools/win-crash-survival-e2e/run.mjs --expect <profile> [--exe-path <Orca.exe>] [options]
node tests/tools/win-crash-survival-e2e/run.mjs --expect <profile> [--exe-path <Orca.exe>] [options]
Required:
--expect <profile> Assertion profile:

View File

@ -7,7 +7,7 @@ the update — and whether any console/terminal window flashes.
> **Companion harness:** proving the daemon survives a **crash** of the main
> process (GitHub #7742), rather than an update, lives in
> [`tools/win-crash-survival-e2e`](../win-crash-survival-e2e/README.md). It reuses
> [`tests/tools/win-crash-survival-e2e`](../win-crash-survival-e2e/README.md). It reuses
> the shared modules in this directory (app driver, daemon discovery, PowerShell
> runner, platform guard, table renderer).
@ -42,7 +42,7 @@ pnpm win-update-e2e --from <setup.exe> --to <setup.exe> --expect <profile>
pnpm win-update-e2e --from-release v1.4.124-rc.9 --to-release v1.4.125-rc.1 --expect cold-restore
```
Or directly: `node tools/win-update-e2e/run.mjs --from ... --to ... --expect ...`
Or directly: `node tests/tools/win-update-e2e/run.mjs --from ... --to ... --expect ...`
### Flags
@ -146,7 +146,7 @@ pnpm win-update-e2e \
Read-only, touches nothing — print what isolated mode would snapshot on this machine:
```
node tools/win-update-e2e/registry-shortcut-backup.mjs
node tests/tools/win-update-e2e/registry-shortcut-backup.mjs
```
## What it does
@ -180,13 +180,13 @@ Each probe module runs on its own so the harness's own instruments are testable:
```
# Opens a real transient console window and asserts the watch catches it:
node tools/win-update-e2e/window-watch.mjs --selftest
node tests/tools/win-update-e2e/window-watch.mjs --selftest
# Read-only: list daemon processes + PID files on this machine:
node tools/win-update-e2e/daemon-processes.mjs [--user-data <dir>] [--scope <substr>]
node tests/tools/win-update-e2e/daemon-processes.mjs [--user-data <dir>] [--scope <substr>]
# Emit the current visible-window snapshot as JSON:
powershell -File tools/win-update-e2e/window-enum.ps1
powershell -File tests/tools/win-update-e2e/window-enum.ps1
```
## Files

View File

@ -13,8 +13,8 @@ const USAGE = `
win-update-e2e packaged NSIS update proof harness (Windows only)
Usage:
node tools/win-update-e2e/run.mjs --from <setup.exe> --to <setup.exe> --expect <profile> [options]
node tools/win-update-e2e/run.mjs --from-release <tag> --to-release <tag> --expect <profile>
node tests/tools/win-update-e2e/run.mjs --from <setup.exe> --to <setup.exe> --expect <profile> [options]
node tests/tools/win-update-e2e/run.mjs --from-release <tag> --to-release <tag> --expect <profile>
Installer source (version N, then N+1) path or release tag on each side:
--from <path> Local orca-windows-setup.exe for the base version (N)