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:
parent
278a4b28c8
commit
ad1e58d966
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 `
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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" `
|
||||
|
|
|
|||
|
|
@ -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" `
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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."
|
||||
|
|
|
|||
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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'))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 })'
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
16
package.json
16
package.json
|
|
@ -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
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
@ -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'
|
||||
|
|
@ -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 {
|
||||
|
|
@ -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`
|
||||
|
|
@ -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`
|
||||
|
|
@ -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'
|
||||
|
|
@ -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`
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
@ -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.
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
@ -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
|
||||
|
|
@ -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`
|
||||
|
|
@ -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'))
|
||||
|
|
@ -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
|
||||
|
|
@ -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:
|
||||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
Loading…
Reference in New Issue