mirror of
https://github.com/stablyai/orca.git
synced 2026-10-30 16:47:34 +00:00
test: strengthen CLI, lifecycle, bundle and build coverage (audit 8) (#32777)
* test: audit repository visibility and session-search CLI coverage * test: verify service identities and public skill-sharing output * test: verify terminal retry commands and unsuccessful navigation attempts * test: exercise bulk-close refusal and printed legacy prompt receipts * test: audit host discovery and agent launch recovery identities * test: audit ACP replay, lifecycle, and hook delivery coverage * test: audit automation errors and build artifact guards * test: audit mobile bridge and bundle lifecycle coverage * docs: reconcile audit tracker with input-ownership changes --------- Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
This commit is contained in:
@@ -22,11 +22,8 @@ afterAll(() => {
|
||||
rmSync(deployment, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
it('ships the SDK as a deployment artifact', () => {
|
||||
expect(ORCAD_ARTIFACTS.map((artifact) => artifact.filename)).toContain(ORCAD_LINEAR_SDK_ENTRY)
|
||||
})
|
||||
|
||||
it("resolves linear-sdk.ts's lazy require from the deployed server under plain Node", () => {
|
||||
expect(ORCAD_ARTIFACTS.map((artifact) => artifact.filename)).toContain(ORCAD_LINEAR_SDK_ENTRY)
|
||||
const server = join(deployment, ORCAD_SERVER_ENTRY_FILENAME)
|
||||
writeFileSync(
|
||||
server,
|
||||
|
||||
@@ -212,41 +212,34 @@ describe('Windows server prebuild cache inputs', () => {
|
||||
)
|
||||
})
|
||||
|
||||
it('covers the bundled compiler-spawn implementation', () => {
|
||||
expect(WINDOWS_PREBUILD_CACHE_INPUTS).toEqual(
|
||||
expect.arrayContaining(
|
||||
[
|
||||
'run-process',
|
||||
'spawn-resolution',
|
||||
'process-tree-termination',
|
||||
'process-tree-kill-gate',
|
||||
'spawn-observer',
|
||||
'bounded-output-sink',
|
||||
'growing-byte-buffer',
|
||||
'child-termination-reporter',
|
||||
'process-spec',
|
||||
'windows-command-line',
|
||||
'windows-cmd-shim-resolution',
|
||||
'windows-system-binary',
|
||||
'windows-tree-kill'
|
||||
].map((name) => `src/packages/process-host/src/${name}.ts`)
|
||||
)
|
||||
)
|
||||
expect(WINDOWS_PREBUILD_CACHE_INPUTS).toEqual(
|
||||
expect.arrayContaining([
|
||||
'src/packages/process-host/.gitignore',
|
||||
'src/packages/process-host/package.json',
|
||||
'src/packages/process-host/scripts/build-dist.mjs',
|
||||
'src/packages/process-host/tsconfig.json'
|
||||
])
|
||||
)
|
||||
})
|
||||
const compilerInputs = [
|
||||
...[
|
||||
'run-process',
|
||||
'spawn-resolution',
|
||||
'process-tree-termination',
|
||||
'process-tree-kill-gate',
|
||||
'spawn-observer',
|
||||
'bounded-output-sink',
|
||||
'growing-byte-buffer',
|
||||
'child-termination-reporter',
|
||||
'process-spec',
|
||||
'windows-command-line',
|
||||
'windows-cmd-shim-resolution',
|
||||
'windows-system-binary',
|
||||
'windows-tree-kill'
|
||||
].map((name) => `src/packages/process-host/src/${name}.ts`),
|
||||
'src/packages/process-host/.gitignore',
|
||||
'src/packages/process-host/package.json',
|
||||
'src/packages/process-host/scripts/build-dist.mjs',
|
||||
'src/packages/process-host/tsconfig.json'
|
||||
]
|
||||
const cacheInputs = [...new Set([...WINDOWS_PREBUILD_CACHE_INPUTS, ...compilerInputs])]
|
||||
|
||||
it('reuses native binaries across app versions but invalidates every other manifest field', () => {
|
||||
const repository = mkdtempSync(join(tmpdir(), 'orca-prebuild-version-key-'))
|
||||
temporary.push(repository)
|
||||
const source = resolve(import.meta.dirname, '../..')
|
||||
for (const relative of WINDOWS_PREBUILD_CACHE_INPUTS) {
|
||||
for (const relative of cacheInputs) {
|
||||
mkdirSync(dirname(join(repository, relative)), { recursive: true })
|
||||
cpSync(join(source, relative), join(repository, relative))
|
||||
}
|
||||
@@ -261,11 +254,11 @@ describe('Windows server prebuild cache inputs', () => {
|
||||
}
|
||||
})
|
||||
|
||||
it.each(WINDOWS_PREBUILD_CACHE_INPUTS)('invalidates a changed %s input', (file) => {
|
||||
it.each(cacheInputs)('invalidates a changed %s input', (file) => {
|
||||
const repository = mkdtempSync(join(tmpdir(), 'orca-prebuild-key-'))
|
||||
temporary.push(repository)
|
||||
const source = resolve(import.meta.dirname, '../..')
|
||||
for (const relative of WINDOWS_PREBUILD_CACHE_INPUTS) {
|
||||
for (const relative of cacheInputs) {
|
||||
mkdirSync(dirname(join(repository, relative)), { recursive: true })
|
||||
cpSync(join(source, relative), join(repository, relative))
|
||||
}
|
||||
|
||||
@@ -150,6 +150,17 @@ describe('Windows server prebuild cache workflow', () => {
|
||||
expect(actionSteps.some((step) => step.uses === 'actions/cache/save@v5')).toBe(false)
|
||||
expect(build.if).toBeUndefined()
|
||||
expect(build['continue-on-error']).toBeUndefined()
|
||||
for (const command of [
|
||||
'pnpm build:orcad',
|
||||
'pnpm test:node-server --artifact ${{ runner.os',
|
||||
'node out/orcad/orcad.js --orcad-smoke-load-check'
|
||||
]) {
|
||||
const gate = steps.find((step) => {
|
||||
const firstLine = step.run?.split('\n')[0]
|
||||
return firstLine === command || firstLine?.startsWith(`${command} `)
|
||||
})
|
||||
expect(gate, command).toBeDefined()
|
||||
}
|
||||
for (const gate of steps.filter((step) =>
|
||||
/require-slots|--smoke|pnpm build:orcad$|test:node-server|--orcad-smoke-load-check/.test(
|
||||
step.run ?? ''
|
||||
|
||||
@@ -13,16 +13,12 @@ for (const { name, resolveInvocation } of [
|
||||
{ name: 'oxlint', resolveInvocation: () => resolveOxlintInvocation(repoRoot) }
|
||||
]) {
|
||||
describe(`${name} CLI invocation`, () => {
|
||||
it('runs under this process node without a batch shim', () => {
|
||||
it('launches the installed CLI without a shell', () => {
|
||||
const { command, prefixArgs } = resolveInvocation()
|
||||
expect(command).toBe(process.execPath)
|
||||
expect(prefixArgs).toHaveLength(1)
|
||||
expect(prefixArgs[0]).not.toMatch(/\.(cmd|bat)$/i)
|
||||
expect(existsSync(prefixArgs[0])).toBe(true)
|
||||
})
|
||||
|
||||
it('launches the installed CLI without a shell', () => {
|
||||
const { command, prefixArgs } = resolveInvocation()
|
||||
const result = spawnSync(command, [...prefixArgs, '--help'], {
|
||||
cwd: repoRoot,
|
||||
encoding: 'utf8',
|
||||
|
||||
@@ -136,5 +136,14 @@ describe('packaged orcad template', () => {
|
||||
)
|
||||
|
||||
expect(() => resealSignedWindowsApp(appDir, list)).not.toThrow()
|
||||
const manifest = JSON.parse(
|
||||
await readFile(join(templateDir, ORCAD_TEMPLATE_MANIFEST_FILENAME), 'utf8')
|
||||
)
|
||||
const signedBytes = await readFile(
|
||||
join(templateDir, ORCAD_TEMPLATE_TARGETS_DIR, 'win32-x64', ...conpty.split('/'))
|
||||
)
|
||||
expect(manifest.targets['win32-x64'].files[conpty]).toBe(
|
||||
createHash('sha256').update(signedBytes).digest('hex')
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -40,7 +40,6 @@ it('loads the copied process package from an unpacked CLI without checkout depen
|
||||
|
||||
describe('process-host output packaging guard', () => {
|
||||
const { assertProcessHostOutputBuilt } = require('../packaged-runtime-node-modules.cjs')
|
||||
const electronBuilderConfig = require('../electron-builder.config.cjs')
|
||||
|
||||
async function builtPackage() {
|
||||
const packageDir = await mkdtemp(join(tmpdir(), 'orca-process-host-output-'))
|
||||
@@ -112,8 +111,4 @@ describe('process-host output packaging guard', () => {
|
||||
await removeTree(packageDir)
|
||||
}
|
||||
})
|
||||
|
||||
it('runs in beforePack', () => {
|
||||
expect(String(electronBuilderConfig.beforePack)).toContain('assertProcessHostOutputBuilt()')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -25,10 +25,10 @@ Completion requires no unreviewed or stale test files, no unresolved support/scr
|
||||
| Area | Reviewer | Next batch |
|
||||
| ---------------------------------------------------------- | -------------- | -------------------------------- |
|
||||
| `cloud/` | `audit_cloud` | Reconciled at batch 6 checkpoint |
|
||||
| `src/main/acp/` | `audit_cloud` | Continue after `main-0001` |
|
||||
| `config/` | `audit_config` | Continue after `config-0007` |
|
||||
| `mobile/` | `audit_mobile` | Continue after `mobile-0006` |
|
||||
| Remaining `src/`, `native/`, `tests/`, `.github/`, `docs/` | root | Continue after `root-0071` |
|
||||
| `src/main/acp/` | `audit_cloud` | Continue after `main-0002` |
|
||||
| `config/` | `audit_config` | Continue after `config-0008` |
|
||||
| `mobile/` | `audit_mobile` | Continue after `mobile-0007` |
|
||||
| Remaining `src/`, `native/`, `tests/`, `.github/`, `docs/` | root | Continue after `root-0078` |
|
||||
|
||||
Ownership is disjoint. Within an area, continue in tracked path order after the last batch; explicitly include nonstandard/inline cases and support candidates before closing the area.
|
||||
|
||||
@@ -52,9 +52,11 @@ Batch validation lives in `reviews/<area>-<batch>-validation.json`. Local log pa
|
||||
|
||||
[PR #32576](https://github.com/stablyai/orca/pull/32576) merged another 150 original files and 1,228 case records, plus two Cloud manifest re-reviews and two upstream CI re-reviews with 20 case records and 93 explicit parameter inputs. Its 82 changed test/support files removed 625 net lines, including four obsolete benchmarks and two private mobile suites whose distinct controls transferred into passing actual-host/public-reader cases. Mobile separately records 315 domain rows and 15 runtime traversal policies; config records 182 explicit controls and 536 input occurrences. Its full PR aggregate and all applicable checks passed; squash commit `633da07af5f82659641870677753d378c1ee5c65`.
|
||||
|
||||
The current batch adds 117 original files and 767 case records: 16 CLI files, 51 ACP test/support files and 50 config files. It checks actual CLI receipts, retry deadlines and headless recovery admission; ACP lifecycle, child cleanup and recorded-response boundaries; mobile web actions and CI admission conditions. Duplicate or redundant assertions are removed while distinct controls transfer to retained cases. Upstream re-reviews preserve the existing process-host and CLI controls and repair cache admission and exact capped-output assertions. Source review counts are not runtime test totals.
|
||||
[PR #32681](https://github.com/stablyai/orca/pull/32681) merged another 117 original files and 767 case records, plus upstream re-reviews. Its full PR aggregate and all applicable checks passed; squash commit `9b6a2e8ff1fe97701a40995cd26e019da3af3f2c`.
|
||||
|
||||
At this checkpoint, 1,137 present files are reviewed, 15 are removed, none are stale and 15,832 candidates remain pending. The 47 superseding records cover 46 distinct files, including a second cache review after Windows 2025 warming changed upstream. Cloud runner/workflow mapping is reconciled at its pinned checkpoint; repository-wide reconciliation and the remaining candidates are still required.
|
||||
The current batch adds 171 original files and 1,256 case records: 21 CLI files, 50 main-process test/support files, 50 config files and 50 mobile files. The decisions retain 1,140 cases, fix 96, consolidate 16 and remove four, leaving 1,236 declarations. Repairs observe exact CLI errors and request identities, ACP lifecycle and cleanup, actual mobile root-detach and bundle activation, and build/workflow admission. Duplicate controls transfer into retained cases before removal. Source review counts are not runtime test totals.
|
||||
|
||||
At this checkpoint, 1,308 present files are reviewed, 15 are removed, none are stale and 15,663 candidates remain pending. The superseding graph review covers all nine current declarations and 22 expanded runtime cases. Cloud runner/workflow mapping is reconciled at its pinned checkpoint; repository-wide reconciliation and the remaining candidates are still required.
|
||||
|
||||
Further completed review records:
|
||||
|
||||
@@ -124,6 +126,11 @@ Further completed review records:
|
||||
| `main-0001` | 51 | 311 | Exercise ACP lifecycle and cleanup boundaries; transfer duplicate recording controls and independently check response data. |
|
||||
| `config-0007` | 50 | 310 | Observe actual mobile web actions, evaluate CI admission conditions and retain independent asset and serializer oracles. |
|
||||
| `upstream-0001–0005` | 46 + 1 re-review | 483 | Recheck comment-only CLI changes; evaluate cache admission, require named Windows build steps and observe exact capped output. |
|
||||
| `root-0072–0078` | 21 | 163 | Require structured CLI errors and exact request identities; observe actual host replies before acknowledgement. |
|
||||
| `main-0002` | 50 | 337 | Exercise ACP replay and lifecycle, child cleanup, hook delivery and independent observer timing. |
|
||||
| `config-0008` | 50 | 257 | Evaluate workflow gates, reseal failures and all compiler-key inputs; trim redundant inventory checks. |
|
||||
| `mobile-0007` | 50 | 499 | Exercise actual root detach, byte-window flow, bundle staging/activation and cache-independent failure retention. |
|
||||
| `upstream-0006` | 1 re-review | 9 | Retain exact graph/opacity collections after additive ownership metadata; all 22 expanded cases pass. |
|
||||
|
||||
Two production findings are recorded in `reviews/cloud-0005-validation.json`: audit rows added after `stop()` can still persist at the batch threshold, and queue overflow during an in-flight reserve-ledger insert can lose a queued identity. That batch reproduced and recorded them without changing production behavior. Cloud-only relay test/typecheck/lint build the unchanged process-host package before resolving its compiled exports; this prerequisite was validated with generated outputs absent.
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
{"path":"cloud/packages/relay-contract/src/region-correction.test.ts","sha256":"2bc2283532e846e23d76f646a229ce2607aa298364c45054397c4598d21fd901","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/cloud-0005.jsonl"}
|
||||
{"path":"cloud/pnpm-workspace.yaml","sha256":"cc73133e9076d1f8ed3a81e348f21eeddde99c4f17080ceeda3734678e54c287","declarations":0,"signals":[],"status":"reviewed","review":"reviews/cloud-0006.jsonl"}
|
||||
{"path":"config/ci/windows-ssh-provider/preview-ssh/test-preview-diagnostics.ps1","sha256":"510890d7569f3c94c36c529d3faf06f58a4771c809aadbd44c203dc483905e76","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0004.jsonl"}
|
||||
{"path":"config/ci/wsl-lifecycle/test-wsl-lifecycle-command.ps1","sha256":"9940bafa4cf1c49a942d3124bab44392c55f1b48b947d23378b1101a992926b5","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/ci/wsl-lifecycle/test-wsl-lifecycle-command.ps1","sha256":"9940bafa4cf1c49a942d3124bab44392c55f1b48b947d23378b1101a992926b5","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/docker/daemon-shutdown-descendants/fixture.cjs","sha256":"e2b08adaf1eba269f447e87c0c2e2d7b8e0ff19affb73804c0f60adbd3559539","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0004.jsonl"}
|
||||
{"path":"config/scripts/__fixtures__/node-pty-1.1.0-unix-pty.cc","sha256":"5e1005d6bdcfbe97b486ee415419fe7adae99035047f07340fbad36419e0bae6","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0004.jsonl"}
|
||||
{"path":"config/scripts/adhoc-build-pinned-commit.test.mjs","sha256":"9dac5bf5e5285a462285c2f4c83c596232067a20589d3692096aebb4615837b8","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0001.jsonl"}
|
||||
@@ -345,9 +345,10 @@
|
||||
{"path":"config/scripts/ci-pr-concurrency-keys.test.mjs","sha256":"f5398086e249edb18c03449537d100b1caad45b9c91f8d31db5bd5e6669418e0","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
{"path":"config/scripts/ci-runner-metrics.test.mjs","sha256":"7463288007fe48ca69f6d3c8b2ff73c27fe7647c50d2fdb67ecd7f4e5fd348b8","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
{"path":"config/scripts/ci-shard-assignment.test.mjs","sha256":"ebe2d5835132ce31c4e1d3d6242162d5d360a5a79ce5994c1e46991c516305e7","declarations":10,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-dependency-graph.test.mjs","sha256":"e36792c6c01fb6254c2e9df003a3098f6c690d05501ba1a66edef84784d2a344","declarations":9,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0037.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-dependency-graph.test.mjs","sha256":"65dcbc081dbd95fca0e54df98e0838d2a71b36b2922eba9946918c5143b77cc4","declarations":9,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/upstream-0006.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-exclusion-coverage.test.mjs","sha256":"168ee39a012a696f3194431343a1ad65f5383953e1257be5bc1f477cf656d971","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-indirect-inputs.test.mjs","sha256":"889522b7c214e3bc9fbb316fb9f10b63e76dfbe877be3656ef65606e96e90cf9","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0006-rereview.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-input-ownership.test.mjs","sha256":"ed61e9909420fe36d93cb2ea29aae49b94235b3fc2ea8268a5d20f20d123e48b","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/ci-unit-module-cache-contents.test.mjs","sha256":"f89bd81882148559661a1d395103f50551a1bd90e5bf21d3ab9a375a7d3fda46","declarations":11,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-module-cache.test.mjs","sha256":"95732ce3f71161193222becceded03c79a24a72900356897d343952b2fa0637d","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/upstream-0001.jsonl"}
|
||||
{"path":"config/scripts/ci-unit-plan.test.mjs","sha256":"1a16e86d7f12d5224e27ba96f021cbb1c6d2765e8143ae0ead98b7ebb55f268c","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0002.jsonl"}
|
||||
@@ -576,55 +577,55 @@
|
||||
{"path":"config/scripts/nsis-process-check.test.mjs","sha256":"3e98c4a6691c3c3e837e314c4c3873e5dde3029f3466d6173d604304fde9034b","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0007.jsonl"}
|
||||
{"path":"config/scripts/orca-dev-bin.test.mjs","sha256":"72e310e8352642bbebc79d7af2d5f1dfc27ef22aeecdee908647554bc6fe8d98","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0007.jsonl"}
|
||||
{"path":"config/scripts/orcad-artifact-version.test.mjs","sha256":"1719290765653c08b356a7efd4843f27ea69e237d906f569afa400785f87841e","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0007.jsonl"}
|
||||
{"path":"config/scripts/orcad-daemon-protocol-crossing.test.mjs","sha256":"7bc40140f435815f5d2cb8c80923d2e2ee39465c2d1489ffe1737bceeed75ecf","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-e2e-change-scope.test.mjs","sha256":"3cdbd8cbcda4afb7cd905272662a8f7fa7e544d30a0fd7d167348e71844db0f1","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-entry-build.test.mjs","sha256":"9e9bd77508c756f20b30dc147442c4041b37cf4eec411c79ec38b36419362487","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-linear-sdk-package.test.mjs","sha256":"7d2dd278c6b0f9e69d921d4f0c1151a6330e1eff90bf4a878e964cb1b107487f","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-mobile-web-bundle.test.mjs","sha256":"c7743be2e8d9f0da14faf2b8443bebe28051e7b8d3c05ad18dd4e388f33110d4","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-prebuild-node-gyp.test.mjs","sha256":"a9016ff688177b12a2742bd262b3b12ebcd2912cbfb243941f9694754505a30c","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-prebuild-slot-contents.test.mjs","sha256":"51ed277626854565ca4a859745cda814a1481321c67efa4310493026d2c22860","declarations":20,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-prebuild-smoke-child.cjs","sha256":"5f0ee5ba87e87581e01988cd58324bbf6ba5d8a53aa79ab4d1990528e4326118","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-prebuild-smoke.mjs","sha256":"befcefeca6b105890e8164e21cfc34b1b4bd6b5b4c19171e23e735445ea0e888","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-template-test-fixture.mjs","sha256":"8d9c1782dbab7ff912497c35da8c72ae2775e52f83fb25aacf0a09ab4e89cf59","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-terminal-smoke-change-scope.mjs","sha256":"ed06f3a6c31f3494a36a9fd37075efb16158a66e581c31af12831169913de7bc","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-terminal-smoke-change-scope.test.mjs","sha256":"1ef3ca907b916438fe371ded603ab75fea893846e8bbc776a7da6152a6c4fec8","declarations":6,"signals":["named","declarations","auxiliary","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-watcher-package.test.mjs","sha256":"2614605ad17e34616cb1a7fd86e1b31de63e03b95b744c850ba21c5bcecb6da6","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-windows-cli-launcher.test.mjs","sha256":"25f827184d4775436178068f7b84bca54726b09f013b6ba2bf86bada0b5d5c27","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-windows-prebuild-cache.test.mjs","sha256":"2cd17341dd66ad24242fb7e4b580dc0696b1dc804c1c9648c6f189797a2ebb99","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-windows-prebuild-workflow.test.mjs","sha256":"36b2dbaac68357fbbcb7519b3aa117ce225ea3e90d0f73c7ce1914e9788ee5a3","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-windows-process-tree.test.mjs","sha256":"cf10901acdca1e5fdcb5454ba6fabbff5dde191be88e293b0653613e22f110d2","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-windows-security.test.mjs","sha256":"c1e1a122cece351b621d473a38176e34e0fe74cc8fcb433cc6c9874d4bee69c1","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/oxc-cli-invocation.test.mjs","sha256":"1894472448825382daf982d3467bd42db60fa69c51abb723425c0cc50de2dd4e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/package-electron-runtime-contract.test.mjs","sha256":"3bc14c429063f76364ff8fee0df7b6cc5f1a4694be68e5ae443688d6ca750c9d","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/package-linux-formats-appimage.test.mjs","sha256":"5101c49215e59d4f134debc781d082edcebc96c5affb265d37d52dfec8e04ccc","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/package-linux-formats.test.mjs","sha256":"3ea08599ba04e4fc23d30300d07e046c3bb16733a8511c64fdc63c5c572df6da","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-node-pty-prebuild-prune.test.mjs","sha256":"ab2220eb75bd347ff298036270caf5856f89a664698c6214d8e743322ac2778c","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-orcad-template.test.mjs","sha256":"c8fb50aa3028748918646435f56b91a531b3361a868a5fa71e21daad442ea3ee","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-process-host.test.mjs","sha256":"0e7d2eb5aa3464585289820b1816d0ffb8b864e70301f29e6bf6725592f3bfa6","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-repository-input-exclusion.test.mjs","sha256":"e9bbfe295a257bed13eeb64088c122708bd740b0c6b900fe2aeaf604df072f2c","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-source-map-prune.test.mjs","sha256":"1c1af45c0875c905f87df3ab3b38c239a8251b31d575bbb3fb84f93c5dfdbb7a","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/packaged-windows-only-runtime-files.test.mjs","sha256":"43bc7cfb21bd302631b600ea620dc516c235454a7ae63fca3c4da1f56ad787d8","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/patched-dependencies-frozen-install.test.mjs","sha256":"0d61820a95fad3e7f129948d7470333cb883d118284aec5dfa5ec308ab15c6a5","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pdfjs-viewer-assets-stream.test.ts","sha256":"27515e47a0621afedebe546952814c4879e2cdf2439cdf980d24e8aedbdb84fe","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pinned-bun-executable.test.mjs","sha256":"73bb05d065e0323a2f9d497f2a6df40d0799a5e505f3f554c9ebf58d7542f86d","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pinned-node-downloads.test.mjs","sha256":"f6f09a8050ce90e006e5cdc8e64058e3c8f0180a92b5e6961080f60aeda09cd7","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/plain-node-entry-guard.test.ts","sha256":"7a79f568b7512c04e844c2147455f4aca1685e9601dad06fb91ab100d35ef412","declarations":18,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/playwright-focused-workflow-selection.test.mjs","sha256":"1e89ae6339b842736243ee03d029fbd301e8c589b2f3b77d687b501004399d65","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/plugin-command-bindings-benchmark.mjs","sha256":"a13639dfe4ac4133d99fe2fd06d8b837991b6f33ed609a63ed429a4340635b2c","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/plugin-message-budget-benchmark.mjs","sha256":"bd9be0362bfd1f627d174981431b00e7305fe521a731eac3d844a1d1e97ad644","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/plugin-shortcut-conflicts-benchmark.mjs","sha256":"b77d33ce228808af0ba2e3b878c7264150e022226f1d20e682052c2411fac3dd","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pnpm-cli-invocation.test.mjs","sha256":"749ffdfec14c5a2e00f6b782a18c7099c90868dbf1d7a7ec40b6a4ef38efd125","declarations":15,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pnpm-lockfile-root-importer.test.mjs","sha256":"81b9dbfbcd8b99a184a74c0aa2297c838ff2268440ffe6d6957ca0aaefd1bc7d","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pnpmfile-global-virtual-store.test.mjs","sha256":"ff5c1a6ef50a9004f0a272bf8cb0db268dc6c3595c9182dea306c65993b2af2f","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-aggregate-gate.test.mjs","sha256":"7c3928fce9f109f9d11e77401a65ed932b8606f5a6223d9d96c0eb84200cb87c","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-auxiliary-preflight-admission.test.mjs","sha256":"fa0e7b4d18b668a0c7f316117f7bc592f37896df6bf72b40f82732ca7f434c7f","declarations":23,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-cross-version-launch-route.test.mjs","sha256":"3af73910445b641673263926f27d4d506680abaa10973eedd229a0eac126e262","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-cross-version-send-path.test.mjs","sha256":"6a377f5e303622eac5bf8744068acec9cc0bb530d59e5d47aaf2bfe3e4760944","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-daemon-protocol.test.mjs","sha256":"ffd9b9cfb042a490a40603c29e9ffca11993516d0f364f08ccf190f408e03c03","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-format-route.test.mjs","sha256":"9c92b66bf3fa0e0dccbfd3e48a46d673ad6c69fcd11c964205da20c697dc5e15","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-process-host.test.mjs","sha256":"eee031871b42c0fdba1aaba3a31d79e928fe16a22005fed9bc6948174cb2e387","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-released-phone.test.mjs","sha256":"53599c94f17b69d0d76947fb92f78c686d0f6505e70f06063117db24f753b8a9","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-code-change-scope-test-inputs.test.mjs","sha256":"0754652d379f2cdc745aa752f862f881d2b6f8512075a5be2a45a6d8dc11c8bc","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/orcad-daemon-protocol-crossing.test.mjs","sha256":"7bc40140f435815f5d2cb8c80923d2e2ee39465c2d1489ffe1737bceeed75ecf","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-e2e-change-scope.test.mjs","sha256":"3cdbd8cbcda4afb7cd905272662a8f7fa7e544d30a0fd7d167348e71844db0f1","declarations":11,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-entry-build.test.mjs","sha256":"9e9bd77508c756f20b30dc147442c4041b37cf4eec411c79ec38b36419362487","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-linear-sdk-package.test.mjs","sha256":"8403f60c9929604a71fc4362e86f9ac08f89d9795cca5db72352c7acf2bf3795","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-mobile-web-bundle.test.mjs","sha256":"c7743be2e8d9f0da14faf2b8443bebe28051e7b8d3c05ad18dd4e388f33110d4","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-prebuild-node-gyp.test.mjs","sha256":"a9016ff688177b12a2742bd262b3b12ebcd2912cbfb243941f9694754505a30c","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-prebuild-slot-contents.test.mjs","sha256":"51ed277626854565ca4a859745cda814a1481321c67efa4310493026d2c22860","declarations":20,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-prebuild-smoke-child.cjs","sha256":"5f0ee5ba87e87581e01988cd58324bbf6ba5d8a53aa79ab4d1990528e4326118","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-prebuild-smoke.mjs","sha256":"befcefeca6b105890e8164e21cfc34b1b4bd6b5b4c19171e23e735445ea0e888","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-template-test-fixture.mjs","sha256":"8d9c1782dbab7ff912497c35da8c72ae2775e52f83fb25aacf0a09ab4e89cf59","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-terminal-smoke-change-scope.mjs","sha256":"ed06f3a6c31f3494a36a9fd37075efb16158a66e581c31af12831169913de7bc","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-terminal-smoke-change-scope.test.mjs","sha256":"1ef3ca907b916438fe371ded603ab75fea893846e8bbc776a7da6152a6c4fec8","declarations":6,"signals":["named","declarations","auxiliary","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-watcher-package.test.mjs","sha256":"2614605ad17e34616cb1a7fd86e1b31de63e03b95b744c850ba21c5bcecb6da6","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-windows-cli-launcher.test.mjs","sha256":"25f827184d4775436178068f7b84bca54726b09f013b6ba2bf86bada0b5d5c27","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-windows-prebuild-cache.test.mjs","sha256":"af70c2d4b63b1e313ab5d6543c09e3125702dcc3a856be0f65a5e81940b277c3","declarations":12,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-windows-prebuild-workflow.test.mjs","sha256":"41c29bcd2cf6afd8b47d6606068799cb69d59b5761042688bf7e182ea8e37ce2","declarations":13,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-windows-process-tree.test.mjs","sha256":"cf10901acdca1e5fdcb5454ba6fabbff5dde191be88e293b0653613e22f110d2","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/orcad-windows-security.test.mjs","sha256":"c1e1a122cece351b621d473a38176e34e0fe74cc8fcb433cc6c9874d4bee69c1","declarations":10,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/oxc-cli-invocation.test.mjs","sha256":"24221e6231e0f52a71a03d83935260a802082f8c0e35ae15c1e54bb78ccbe8cd","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/package-electron-runtime-contract.test.mjs","sha256":"3bc14c429063f76364ff8fee0df7b6cc5f1a4694be68e5ae443688d6ca750c9d","declarations":5,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/package-linux-formats-appimage.test.mjs","sha256":"5101c49215e59d4f134debc781d082edcebc96c5affb265d37d52dfec8e04ccc","declarations":9,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/package-linux-formats.test.mjs","sha256":"3ea08599ba04e4fc23d30300d07e046c3bb16733a8511c64fdc63c5c572df6da","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-node-pty-prebuild-prune.test.mjs","sha256":"ab2220eb75bd347ff298036270caf5856f89a664698c6214d8e743322ac2778c","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-orcad-template.test.mjs","sha256":"3fc464b27befc7dbd0459807a4e55e53419441e12dbb5a7c1eea5ebfa9f0c04e","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-process-host.test.mjs","sha256":"157961fa6721ad241076c4b6a4dfa9c400a6182a888fba3adcecff593ad49d7f","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-repository-input-exclusion.test.mjs","sha256":"e9bbfe295a257bed13eeb64088c122708bd740b0c6b900fe2aeaf604df072f2c","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-source-map-prune.test.mjs","sha256":"1c1af45c0875c905f87df3ab3b38c239a8251b31d575bbb3fb84f93c5dfdbb7a","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/packaged-windows-only-runtime-files.test.mjs","sha256":"43bc7cfb21bd302631b600ea620dc516c235454a7ae63fca3c4da1f56ad787d8","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/patched-dependencies-frozen-install.test.mjs","sha256":"0d61820a95fad3e7f129948d7470333cb883d118284aec5dfa5ec308ab15c6a5","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pdfjs-viewer-assets-stream.test.ts","sha256":"27515e47a0621afedebe546952814c4879e2cdf2439cdf980d24e8aedbdb84fe","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pinned-bun-executable.test.mjs","sha256":"73bb05d065e0323a2f9d497f2a6df40d0799a5e505f3f554c9ebf58d7542f86d","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pinned-node-downloads.test.mjs","sha256":"f6f09a8050ce90e006e5cdc8e64058e3c8f0180a92b5e6961080f60aeda09cd7","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/plain-node-entry-guard.test.ts","sha256":"7a79f568b7512c04e844c2147455f4aca1685e9601dad06fb91ab100d35ef412","declarations":18,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/playwright-focused-workflow-selection.test.mjs","sha256":"1e89ae6339b842736243ee03d029fbd301e8c589b2f3b77d687b501004399d65","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/plugin-command-bindings-benchmark.mjs","sha256":"a13639dfe4ac4133d99fe2fd06d8b837991b6f33ed609a63ed429a4340635b2c","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/plugin-message-budget-benchmark.mjs","sha256":"bd9be0362bfd1f627d174981431b00e7305fe521a731eac3d844a1d1e97ad644","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/plugin-shortcut-conflicts-benchmark.mjs","sha256":"b77d33ce228808af0ba2e3b878c7264150e022226f1d20e682052c2411fac3dd","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pnpm-cli-invocation.test.mjs","sha256":"749ffdfec14c5a2e00f6b782a18c7099c90868dbf1d7a7ec40b6a4ef38efd125","declarations":15,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pnpm-lockfile-root-importer.test.mjs","sha256":"81b9dbfbcd8b99a184a74c0aa2297c838ff2268440ffe6d6957ca0aaefd1bc7d","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pnpmfile-global-virtual-store.test.mjs","sha256":"ff5c1a6ef50a9004f0a272bf8cb0db268dc6c3595c9182dea306c65993b2af2f","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-aggregate-gate.test.mjs","sha256":"7c3928fce9f109f9d11e77401a65ed932b8606f5a6223d9d96c0eb84200cb87c","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-auxiliary-preflight-admission.test.mjs","sha256":"fa0e7b4d18b668a0c7f316117f7bc592f37896df6bf72b40f82732ca7f434c7f","declarations":23,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-cross-version-launch-route.test.mjs","sha256":"3af73910445b641673263926f27d4d506680abaa10973eedd229a0eac126e262","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-cross-version-send-path.test.mjs","sha256":"6a377f5e303622eac5bf8744068acec9cc0bb530d59e5d47aaf2bfe3e4760944","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-daemon-protocol.test.mjs","sha256":"ffd9b9cfb042a490a40603c29e9ffca11993516d0f364f08ccf190f408e03c03","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-format-route.test.mjs","sha256":"9c92b66bf3fa0e0dccbfd3e48a46d673ad6c69fcd11c964205da20c697dc5e15","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-process-host.test.mjs","sha256":"eee031871b42c0fdba1aaba3a31d79e928fe16a22005fed9bc6948174cb2e387","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-released-phone.test.mjs","sha256":"53599c94f17b69d0d76947fb92f78c686d0f6505e70f06063117db24f753b8a9","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope-test-inputs.test.mjs","sha256":"0754652d379f2cdc745aa752f862f881d2b6f8512075a5be2a45a6d8dc11c8bc","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/config-0008.jsonl"}
|
||||
{"path":"config/scripts/pr-code-change-scope.test.mjs","sha256":"3a496d6cf85eb7c61b02de31cc0201941f8d5b248911a5bba353b9480a9cfc75","declarations":41,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-codex-unit-only-selection.test.mjs","sha256":"511b4da7fa4c870ab10a50a10149709a836421afd587223d2383a03f8f89cefe","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"config/scripts/pr-e2e-gate-contract.test.mjs","sha256":"d4470377ba8b1a333e524880ce1b20d1056bae72c7e7f74bfdcbee465cf4e058","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -1072,7 +1073,7 @@
|
||||
{"path":"mobile/src/components/mobile-markdown-preview-placeholder.test.ts","sha256":"5edfbc066a772b09fe02c5aab4010686106eeea39b57bd5e622dc23a5b973c26","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-markdown-selectable.test.tsx","sha256":"5ddbbe0c391aa7b60d54d69347568a6429abb57247171a95a94751bc630eb85a","declarations":3,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-markdown-table.test.tsx","sha256":"722fe0ea49d167b647d79354fec3a97282fd736acf98f6cd45e82f770b6c52ea","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-markdown-tree.test.ts","sha256":"c94502323ce19c85dab9d78f0456ed0b0bb0aba47d9b9c047ee958c47786130e","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/components/mobile-markdown-tree.test.ts","sha256":"c94502323ce19c85dab9d78f0456ed0b0bb0aba47d9b9c047ee958c47786130e","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-markdown-visual-lines.test.ts","sha256":"258d48357045d42db0decb7a3beca0528a55660539cc09c0cc7b3876799f3551","declarations":9,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-pr-sidebar-presentation.test.ts","sha256":"eb638cc6ddbfe0ef151ccb416ab9c0f5a08026429eb70e3b853f6421e071dc26","declarations":7,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
{"path":"mobile/src/components/mobile-rich-markdown-editor-keyboard-inset.test.ts","sha256":"02bb35a7b63b2d0c143d4f02292fe07ebdb5ceea8727117079467ed236f2f823","declarations":3,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0003.jsonl"}
|
||||
@@ -1235,55 +1236,55 @@
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-page-client-identity.test.ts","sha256":"132deaf9422035a157dff54926bd2c3562c77b7a261b9dc451899f873224562a","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0006.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-port-pair-test-harness.test.ts","sha256":"feb80260765c9886b16a1190d27ffa3806c29ff52f9e502fdb1857893372ef04","declarations":3,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0006.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-reply-chunking.test.ts","sha256":"47ef2e395bdace4db88db81c478b2678b29ab33d141bdc3b8795da398a9f09fb","declarations":32,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0006.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-route-update.test.ts","sha256":"faf63a08bb7605689d8e304f67bfb0bc8de7476bb0923e9b12ce088c3160d407","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-client-frames.test.ts","sha256":"53b4e3bd28942e4adc7ca91a7acde6b584ee9b054860c98be0346d9835221741","declarations":41,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-client.test.ts","sha256":"e93b8c4c3d7512d43692e2d61abd2f0b84832358d65879f33829bb91f7a419cd","declarations":16,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-envelope.test.ts","sha256":"e133c4b6bcc3d2fe48ec5718c411ed50402d0f38cb0f0f8b26d172f396a12fdd","declarations":12,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.test.ts","sha256":"eaec2c56c30181a5c76ee85296c15dbe7d74222627bf76960cf0769834960355","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-screencast-encoder.test.ts","sha256":"4f3de540de57ce71358874e7e23109fad3e842ae31226b68742e5fe7e61d658d","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/orca-bridge-page-channel.test.ts","sha256":"151fba00d645c90c13dc6c3de7ac57d056cfdbc6fa464a57e50aca56f997bd2c","declarations":5,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-async-storage.test.ts","sha256":"5a04ccf8f0a2a513e98ba13a777283630cbbd4a727486308961ff5aedbd086b4","declarations":17,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-back-consumers.test.ts","sha256":"a2a771e6fbe8874bb8f6e9204d0f6e78fd1f8d01358b5f0b7fa5238a042a246d","declarations":9,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-bootstrap.test.ts","sha256":"7ea252333636d647902ee28f6379a0f3ff424261e90326a070915d4cebdc1282","declarations":12,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-fault-boundary.test.tsx","sha256":"c6f263af3cd6a8043aa91ed74ce676e499077302f5be710f9f40c741b2262115","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-first-paint-through-the-bridge.test.ts","sha256":"da5f19ca4056b5a469a686731782a93f6b259a78e6bfc7b24e0ab54ae770b0ca","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-first-paint.test.tsx","sha256":"bad3d5be7b344ee80ca0ac0720d6516443849778f65b54da5e5ec2b9ed480357","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/use-native-verbs.test.tsx","sha256":"e02d2dfd3618362d06d384b973146c10fbaffad9c9d71b201768db1f2567e5fe","declarations":12,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/cancelled-navigation-target.test.ts","sha256":"7e3da246c6eed7620efdfac1190baced026f1c8a43bf0f53217b809030b410d0","declarations":5,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/catch-all-page-route-states.test.tsx","sha256":"e54fe71a9eba2e2253ddd9d5bf8b60a3691ecabd5814b5b5478c742aa90f460f","declarations":7,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/catch-all-page-route.test.tsx","sha256":"dc948c839aa30793c2fac3bd5c1933d54bff25d98619ea6abf053e26df3e0b5f","declarations":17,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store-file-system.test.ts","sha256":"a1fc1b27c34fe898e80aa179bb50ddbcb97836f73661f99d0a85781d88711ec0","declarations":3,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store-host-removal-race.test.ts","sha256":"e1128863cb0234365292c0660940bc1de0534fd905aad7bc61cff0084772323e","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store.test.ts","sha256":"a87b0f8b91c3d9c22d9d126f038fba9cffd8f5c0438b613194186df551492bfd","declarations":37,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-in-page-cleanup.test.tsx","sha256":"237d0d56cf80d4943fa0c03793536a1770147d71b4efd8f53009afddaa8dbe9c","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-layout-class-change.test.tsx","sha256":"63b36cb609eb55e9fa7bdff0fb9e4bd6b154bea7d9b1e13be715546a88afe0e8","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-leave-session.test.tsx","sha256":"aee8d900d39a19a259c07dc95a8a1bf860c45ace1f628002f535f7655477b612","declarations":5,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-page-storage.test.tsx","sha256":"0ee7eb30ec95bf11c019c3b9ae2706a7749b3456d1aabc0323c90e48d9a3a184","declarations":7,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-session.test.ts","sha256":"d7ebc8e7536b2770a7677676fa54da657cff7be309b3fc6d39517ba26af0f4f0","declarations":14,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-sidebar-matrix.test.tsx","sha256":"69f5a102063e53e0516e04e555a5f758ed50fec6da4d906f4213c040aa0a004d","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-two-hosts.test.tsx","sha256":"fa186ecb0bc710e2d42dd216a7741fbe72797f5090666c5a7cc5544f27eee499","declarations":1,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/media-handle-registry.test.ts","sha256":"f9934416540242d54b20c193c620e25e0a54b0372b19cb0f276ecabb6ddc1e51","declarations":17,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-agent-history-route.test.tsx","sha256":"7c846d0991c8c19b1cfd3eb8dde0776adfa07b76dcb6cb344d74ac1860bbae3a","declarations":7,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-back-claim-state.test.ts","sha256":"932fdbc5db6af0fc993b528d50c0d36ffc4cb804e505e2c0ef124c4696cd17db","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-dev-facts.test.ts","sha256":"ff94133cbc24def50cf4046f8784f4653443d4e1a4d660e533daee98069281f8","declarations":3,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-failed-update-fallback.test.ts","sha256":"669ddc6f9a1d47a440e2c9a5984fed228021d69c66f11d4cb31ff73e2b2bc77c","declarations":9,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-files-route.test.tsx","sha256":"5477ca3128015b664af433749d3c7a51915bdf486dc19a2f03b003c4af0a309d","declarations":9,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-host-list-route.test.tsx","sha256":"2a4db8b072b6c58f11b4d65cad7ff7726c68af32f58491b54fe53db344eeef5d","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-keyboard-overlay-screen.test.tsx","sha256":"a6c7d32c8f1028a2e2e8f9662e99d0c5d09ca3ff8b44b8fea957f69355a32925","declarations":1,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-offline-grant-staleness.test.ts","sha256":"8e14c1b1bf6124f416cd15274876e7f29f0e63d32e9860f8d97ba7e2ff88a5ee","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-page-route-wall.test.ts","sha256":"2e442d914f1659b4ac9fadeefb8e20c645aa0176ba1a8ad1a61412c1edb37548","declarations":8,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-reachability.test.ts","sha256":"25a5699aef620faaf96814d4f10150ce222e3dc4a6cb463a5ee42663cd530ca5","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-refused-update-decision.test.ts","sha256":"bfa984fbeaae4d3434699083e3ed8ed7d63d6186c14b1f2a956878d188f325ed","declarations":18,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-safe-area-screen.test.tsx","sha256":"f36601ae0ef9b7a2210da7913abe81d42c9749347dc9a7c426ff4d688e32e166","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-effects.test.ts","sha256":"c0b063e1ed602c0d8fcebb373e40d56fa63d263a29896adaf8ca6e0bbf854160","declarations":12,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-grants.test.ts","sha256":"822c641cfcb6c27a312169252d0e573206f969d40ef29cf42b3f19c6d0349eb5","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-route.test.tsx","sha256":"fdab5c38fa31e62cbb0932e0e5f622cd46e7d613e4704ee9929fcee7132a2470","declarations":8,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-test-fixtures.ts","sha256":"71aead13da7fcbe9f7b4862841dc3c61c80fff43afe417baf9dbeaf7b07123bb","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session.test.ts","sha256":"b763ec6a1cda548711c0c5e48e83eba3a9ef420a478cad281d412f262b2aa2e6","declarations":73,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure-log.test.ts","sha256":"a383c62a1bb43ceeb005a1307dff7c0a216ef02c92ee68cbbbcf0970c7caadb8","declarations":11,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure-record.test.ts","sha256":"babed53d858c8e931a5fccbfa06bf037b145afd3c3bb017fc0aa6d597876ac44","declarations":18,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure.test.ts","sha256":"0d7d9c6f147d297b8187b227eae7dd7a46364ea87bc887ee71f815856957f110","declarations":8,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/native-stack-return.test.ts","sha256":"bc9464361bca2cc154dd61d6936e1b5f13285d7cefa89b454951e8d45cc1b4c6","declarations":5,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-route-update.test.ts","sha256":"faf63a08bb7605689d8e304f67bfb0bc8de7476bb0923e9b12ce088c3160d407","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-client-frames.test.ts","sha256":"fcac49936346fd71941c5f15c57ae827fdc792c4e81d6792eb51c0b46c70aa37","declarations":41,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-client.test.ts","sha256":"d0921860731581952ce78188be69efd1bfa65816c79effd43b269c5f6c4d5260","declarations":16,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-rpc-envelope.test.ts","sha256":"da17e03757c0fd187075ecf290ab9d88a0bd0b883ea6608b231eb96060d798f6","declarations":11,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.test.ts","sha256":"eaec2c56c30181a5c76ee85296c15dbe7d74222627bf76960cf0769834960355","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/bridge-screencast-encoder.test.ts","sha256":"4f3de540de57ce71358874e7e23109fad3e842ae31226b68742e5fe7e61d658d","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/orca-bridge-page-channel.test.ts","sha256":"151fba00d645c90c13dc6c3de7ac57d056cfdbc6fa464a57e50aca56f997bd2c","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-async-storage.test.ts","sha256":"c0239b703eb3cb0c80f3f97ad9da127ea4fc4791a6b6fdb79c48a9e2fc2887bd","declarations":17,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-back-consumers.test.ts","sha256":"a2a771e6fbe8874bb8f6e9204d0f6e78fd1f8d01358b5f0b7fa5238a042a246d","declarations":9,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-bootstrap.test.ts","sha256":"7ea252333636d647902ee28f6379a0f3ff424261e90326a070915d4cebdc1282","declarations":12,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-fault-boundary.test.tsx","sha256":"c6f263af3cd6a8043aa91ed74ce676e499077302f5be710f9f40c741b2262115","declarations":4,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-first-paint-through-the-bridge.test.ts","sha256":"da5f19ca4056b5a469a686731782a93f6b259a78e6bfc7b24e0ab54ae770b0ca","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/page-first-paint.test.tsx","sha256":"bad3d5be7b344ee80ca0ac0720d6516443849778f65b54da5e5ec2b9ed480357","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/bridge/use-native-verbs.test.tsx","sha256":"8a0425aa016425d437251ceed46e22ffe7f1f2be95403e2bf7776a6d59881d9e","declarations":10,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/cancelled-navigation-target.test.ts","sha256":"7e3da246c6eed7620efdfac1190baced026f1c8a43bf0f53217b809030b410d0","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/catch-all-page-route-states.test.tsx","sha256":"e54fe71a9eba2e2253ddd9d5bf8b60a3691ecabd5814b5b5478c742aa90f460f","declarations":7,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/catch-all-page-route.test.tsx","sha256":"dc948c839aa30793c2fac3bd5c1933d54bff25d98619ea6abf053e26df3e0b5f","declarations":17,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store-file-system.test.ts","sha256":"a1fc1b27c34fe898e80aa179bb50ddbcb97836f73661f99d0a85781d88711ec0","declarations":3,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store-host-removal-race.test.ts","sha256":"06ce0ba245851e3742715a3716a8eceb6f15e6b4c67ea9cc7a8572a5a79acc02","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/generation-store.test.ts","sha256":"a87b0f8b91c3d9c22d9d126f038fba9cffd8f5c0438b613194186df551492bfd","declarations":37,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-in-page-cleanup.test.tsx","sha256":"3236bb70004c89ff5ca244ee886876ffd148b88a94929d5cd66f8fc8aa9d6c6f","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-layout-class-change.test.tsx","sha256":"63b36cb609eb55e9fa7bdff0fb9e4bd6b154bea7d9b1e13be715546a88afe0e8","declarations":4,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-leave-session.test.tsx","sha256":"aee8d900d39a19a259c07dc95a8a1bf860c45ace1f628002f535f7655477b612","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-page-storage.test.tsx","sha256":"641be86b8de82c28a6d8eadeb3985540c3909a8946c7dabe8ce9d8da9bdc7ff2","declarations":7,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-session.test.ts","sha256":"38f77bc88d93db131b00da6a9d33ae6dd5df20a55e0491167c9182d1d702c9d0","declarations":14,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-sidebar-matrix.test.tsx","sha256":"69f5a102063e53e0516e04e555a5f758ed50fec6da4d906f4213c040aa0a004d","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/host-area-two-hosts.test.tsx","sha256":"fa186ecb0bc710e2d42dd216a7741fbe72797f5090666c5a7cc5544f27eee499","declarations":1,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/media-handle-registry.test.ts","sha256":"a06d35ffbb46a0294f3464ed3bacf4fbe4e9e0b02e4ef4d22eefa91844b1e2d2","declarations":17,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-agent-history-route.test.tsx","sha256":"7c846d0991c8c19b1cfd3eb8dde0776adfa07b76dcb6cb344d74ac1860bbae3a","declarations":7,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-back-claim-state.test.ts","sha256":"932fdbc5db6af0fc993b528d50c0d36ffc4cb804e505e2c0ef124c4696cd17db","declarations":6,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-dev-facts.test.ts","sha256":"fd0cb1508ae0dc3ba139b910dbabbe04c8bbe76f4e0565c18356a7fd28e54aed","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-failed-update-fallback.test.ts","sha256":"24af9d271b7e9c8ed36ee034e1140c08dd06bf9f1f0a91b1c696e6fc656e462a","declarations":8,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-files-route.test.tsx","sha256":"5477ca3128015b664af433749d3c7a51915bdf486dc19a2f03b003c4af0a309d","declarations":9,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-host-list-route.test.tsx","sha256":"2a4db8b072b6c58f11b4d65cad7ff7726c68af32f58491b54fe53db344eeef5d","declarations":4,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-keyboard-overlay-screen.test.tsx","sha256":"a6c7d32c8f1028a2e2e8f9662e99d0c5d09ca3ff8b44b8fea957f69355a32925","declarations":1,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-offline-grant-staleness.test.ts","sha256":"8e14c1b1bf6124f416cd15274876e7f29f0e63d32e9860f8d97ba7e2ff88a5ee","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-page-route-wall.test.ts","sha256":"2e442d914f1659b4ac9fadeefb8e20c645aa0176ba1a8ad1a61412c1edb37548","declarations":8,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-reachability.test.ts","sha256":"25a5699aef620faaf96814d4f10150ce222e3dc4a6cb463a5ee42663cd530ca5","declarations":4,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-refused-update-decision.test.ts","sha256":"834813af0b57e7c0f24062c09ea210ec1ae5e53b2e9062fe1fa2fdc4382e9765","declarations":17,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-safe-area-screen.test.tsx","sha256":"f36601ae0ef9b7a2210da7913abe81d42c9749347dc9a7c426ff4d688e32e166","declarations":2,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-effects.test.ts","sha256":"6284cea18ef9dea64c63476e347c66bb0ad8ee4d870b604a3cabd92fc07ab0fa","declarations":12,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-grants.test.ts","sha256":"b6150c6d46ab5c264221a43e1489649b5f54ac5acb79d51d97110eb7758ad4d0","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-route.test.tsx","sha256":"fdab5c38fa31e62cbb0932e0e5f622cd46e7d613e4704ee9929fcee7132a2470","declarations":8,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session-test-fixtures.ts","sha256":"446dc683c6a149dd495d07cac8547827ea7bf49fce906a0e003689fbe546f80d","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-session.test.ts","sha256":"2bacfdff1a49cd43d3cba202766c095120ed5598c06721382cd48eaa48157ff9","declarations":72,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure-log.test.ts","sha256":"d838d7174d4af515dbbc2f8f3ad61f22b7e047e115a75be9bb6962906624d93e","declarations":11,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure-record.test.ts","sha256":"babed53d858c8e931a5fccbfa06bf037b145afd3c3bb017fc0aa6d597876ac44","declarations":18,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/mobile-web-shell-update-failure.test.ts","sha256":"f36c7b85bbf245654a451190bb34b9db44175fbdfc320dc2d65c41d817997aab","declarations":8,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/native-stack-return.test.ts","sha256":"bc9464361bca2cc154dd61d6936e1b5f13285d7cefa89b454951e8d45cc1b4c6","declarations":5,"signals":["named","declarations"],"status":"reviewed","review":"reviews/mobile-0007.jsonl"}
|
||||
{"path":"mobile/src/mobile-web-shell/page-haptics.test.ts","sha256":"576b2c11d6c4430b817cc715c1a24898ca9e3c69fc63b1f34f9138c201032ae7","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/page-route-policy.test.ts","sha256":"d421c503dcad7dee9c8dec0e4121571b276daf1b667412874746d1645c5e4f31","declarations":46,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/mobile-web-shell/page-safe-area-insets.test.ts","sha256":"1f842fabd4726539c11ebd4277af2fb7ca2876d0eac82b5990aa14f67a64f04e","declarations":2,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
@@ -1548,7 +1549,7 @@
|
||||
{"path":"mobile/src/session/mobile-terminal-diagnostics.test.ts","sha256":"635064801e5e7d12665371623b8cafff302934a768ced77e26df83f9e46f214b","declarations":4,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-inventory-request.test.ts","sha256":"84b85332b44f1ac0b9accfa7ace5e06f433bb385051e8bbe75eac618bbcd8917","declarations":3,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-prune-decision.test.ts","sha256":"800040a125e94384ffd5403d09b3499050f76c33197945bf5ecf5eac3eb236df","declarations":6,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-records.test.ts","sha256":"48f88d39f8938647b4311fe821e705fff5f819ec89cd7d91a65e1b7204f0708c","declarations":18,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-records.test.ts","sha256":"cb78a9ae53427b603d159982a4e25df3252886c5dc3f83e9d878207ea756e5f1","declarations":19,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-stream-subscribe.test.ts","sha256":"ff8ad415f5572ce040ea4021aeea81aef6a99d68f8c5a2fea3eb2f6eb00f0cca","declarations":1,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-tab-agent.test.ts","sha256":"6b4258513b08f63f9b5f427c901133537c60f2e13115492e0e1e831aaf2cf71a","declarations":21,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
{"path":"mobile/src/session/mobile-terminal-viewport-resubscribe.test.ts","sha256":"7a0a0584afb4e2ada2df25b33f8e9c0e1ea1b973598cc1b005b1f8b05ab41570","declarations":30,"signals":["named","declarations"],"status":"unreviewed"}
|
||||
@@ -2304,27 +2305,27 @@
|
||||
{"path":"src/cli/handlers/orchestration/worker-output.test.ts","sha256":"edb6aa60817383bc900222aa0d7e96c0e1c67dd043d2b9b9573fa6221ba492eb","declarations":20,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/upstream-0002.jsonl"}
|
||||
{"path":"src/cli/handlers/profile-state-recovery-admission.test.ts","sha256":"4cacf01920be971eb3db5f3d925822cd39cd1ab5967b9a342a5d9a66f204d728","declarations":10,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0071.jsonl"}
|
||||
{"path":"src/cli/handlers/profile-state.test.ts","sha256":"ba6e85e57389cfcd1bde3f7ca103cbbe647fa3db63baf425ae2f46933e3b6148","declarations":19,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0071.jsonl"}
|
||||
{"path":"src/cli/handlers/repo-visibility.test.ts","sha256":"a67305c6ef886420547ef542f7396dc0e473833645386b5d1824c69a583ac317","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/search.test.ts","sha256":"43d21cbbb67b9ab28aa7477e00feafb6b3bcd52b1fddccc90d867760b8970f5d","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/serve-restore.test.ts","sha256":"5cb756b7ef37269b8d44fd21b812fb3320c2fb04410d3be5cdfda5016193f334","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/serve-service.test.ts","sha256":"f975e0e90980462a0ca79f242de386abd370433011133782c441cd2a69e956dd","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/skill-sharing.test.ts","sha256":"7fb2a54a7cafd0c126cbd1752c89c106e40a51138987bd735ce09d230a588cce","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/speech.test.ts","sha256":"ee511572cc3598a915acbcadbac22fa5ed1d4a531e7bbc91705f1d640f0af6f1","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/terminal-daemon.test.ts","sha256":"777f5509389b90c616ed47f63c179654354411d97c5b195bede59479baa935e4","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/terminal-set-pane-title.test.ts","sha256":"44911b0d72d37fe02590b4ee80aff409dd8dfb570e24882d7f5be798d85a1d5e","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/terminal-split.test.ts","sha256":"b5523bf17eff2b8463679147102da38e80964136e4c3457d74c5fda1d139b808","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/terminal-switch-paired-reveal.test.ts","sha256":"7e5a5b68ca3661cc5e74709b1b182c14092c1e8a77b955c479d72590ba040d2b","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/terminal.test.ts","sha256":"5cabc0c0cd7c6f4e15b0ae6bc7b48127b5dddb53364e2bbff553eb3f83a4b11c","declarations":26,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/worktree-gitlab-link.test.ts","sha256":"5f4b53084195e07adf03a9a42306cb968d3a0a6dfb5a5cd8b9ecc2003110bf06","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/host-selector-alternatives.test.ts","sha256":"c6f43603bc7dfd0783b55fcca09c911276271a7c73e7a917f49529e38a2f6fe2","declarations":19,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-agent-launch.test.ts","sha256":"322e7db82d46cda23d02e169d68f8c7d5eefa4122f457da0f4ab94722be1a80d","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-extra-agent-args.test.ts","sha256":"c1f53136d1599662d0ea88933ff50d0462a45648cf737aecf07756cfa6cd7857","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-identifiers.test.ts","sha256":"a6d1b044810527d3ada6f3d937a32454021e9709915da7db0c41367469e57dfb","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-run-output.test.ts","sha256":"ee26e41d06cd8723e9ef31149c5d4b9ce43ba62c3fec9469ae3caad503236216","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-schedule.test.ts","sha256":"d13e1d9779a098c40245187a6e3dc8cb94948132a2a0f11e206ec56935cd72db","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-session-reuse.test.ts","sha256":"36e0bbeeafd7749f3c9b487de61d87d1e944d2e38e654118d2197b83d9b5af06","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-source-context.test.ts","sha256":"5236c91873c9afbb7c8bf2fda93b99403cb3d721c44062ec26d28d4b83f695f0","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-automation-target.test.ts","sha256":"44893f78a541d2603ed67a3e3f2f199352bf95ae9c1dd886e935e526d65afb20","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/handlers/repo-visibility.test.ts","sha256":"a67305c6ef886420547ef542f7396dc0e473833645386b5d1824c69a583ac317","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0072.jsonl"}
|
||||
{"path":"src/cli/handlers/search.test.ts","sha256":"2fc10cd2e192c002ede3373f43eccef337f9df983966d5d47a8ea251ad4a2f3b","declarations":16,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0072.jsonl"}
|
||||
{"path":"src/cli/handlers/serve-restore.test.ts","sha256":"5cb756b7ef37269b8d44fd21b812fb3320c2fb04410d3be5cdfda5016193f334","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0073.jsonl"}
|
||||
{"path":"src/cli/handlers/serve-service.test.ts","sha256":"4c1ecc4dc8f6448daab7e228eb123310b3979f5344d8cc534a4fd23aba58e7b4","declarations":9,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0073.jsonl"}
|
||||
{"path":"src/cli/handlers/skill-sharing.test.ts","sha256":"6a798e8b0e37b088c95a51c9ef50b1e7f9152d337b86edcdd20a47a724c731cd","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0073.jsonl"}
|
||||
{"path":"src/cli/handlers/speech.test.ts","sha256":"88bfc162adacfe9e776d5967f3c943e19cf606c228ef82ffc9ce459b860db842","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0073.jsonl"}
|
||||
{"path":"src/cli/handlers/terminal-daemon.test.ts","sha256":"777f5509389b90c616ed47f63c179654354411d97c5b195bede59479baa935e4","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0074.jsonl"}
|
||||
{"path":"src/cli/handlers/terminal-set-pane-title.test.ts","sha256":"e32fe0fd8af85fdb69ee8e63033adac4eff51dcc74831c119d79292bc7bfc9be","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0074.jsonl"}
|
||||
{"path":"src/cli/handlers/terminal-split.test.ts","sha256":"93e0fd412d420df1bc2318c1b37a48dc9a28b54842dff04931e940eaeead6663","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0074.jsonl"}
|
||||
{"path":"src/cli/handlers/terminal-switch-paired-reveal.test.ts","sha256":"c10d50f619133b395c730bb2f5cd8d668c68e61559c1f7eb47273c26a4a84e3b","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0074.jsonl"}
|
||||
{"path":"src/cli/handlers/terminal.test.ts","sha256":"937a39e0d3ce1db894793c510030928f7cc9952eea0f224bc617632e62eb74fa","declarations":26,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0075.jsonl"}
|
||||
{"path":"src/cli/handlers/worktree-gitlab-link.test.ts","sha256":"5f4b53084195e07adf03a9a42306cb968d3a0a6dfb5a5cd8b9ecc2003110bf06","declarations":12,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0076.jsonl"}
|
||||
{"path":"src/cli/host-selector-alternatives.test.ts","sha256":"f9bccc3fd42deb446f1bb1137cc996fe0a01b5151b37fa4b08bb317593418f3e","declarations":19,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0076.jsonl"}
|
||||
{"path":"src/cli/index-agent-launch.test.ts","sha256":"643308cd22bc5f435c103c183b1bbe6d2ecbee796d180fe52f5365f9d2bf49ba","declarations":11,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0077.jsonl"}
|
||||
{"path":"src/cli/index-automation-extra-agent-args.test.ts","sha256":"79e39821f8cf59e91381a3960e4c300900e7606af8e9f22771241eff21997dd8","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-identifiers.test.ts","sha256":"051415c7ad8a4efdd446e966f2e28c0163ece9be96b399fc6faf0b91871681d5","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-run-output.test.ts","sha256":"5fb31bf5aeaf49dfdbc7e23df93c9e0630ec6f2477923600e153e44d4179cd7d","declarations":16,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-schedule.test.ts","sha256":"91424b5f89a01da6f01a4c6c4964b7e14b4437be2154c5716e779e2f26862383","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-session-reuse.test.ts","sha256":"0fb338933aa24f71b74afc61885d4c75fc04c2d46cd0ebc9346c29c1cb20dd13","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-source-context.test.ts","sha256":"5d7a62a49173a01636e299be8610c410379b9c36c0715e2c7a29a731ecc17553","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-automation-target.test.ts","sha256":"33f3c663db85ecb8cf045f1f94e16e45f1e67a75961128d82c7936d551a55766","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/root-0078.jsonl"}
|
||||
{"path":"src/cli/index-device-commands.test.ts","sha256":"168c15e24b5c979eefc68079e943e210a08cf3c30e8d5da5e9108c387af3ef6a","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-environment-commands.test.ts","sha256":"187a9ccdbbc5b8e0c548e7feb67a6bad0d10894a9da78b4ef9fba91a0e451f51","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/index-file-open-headless.test.ts","sha256":"a63f0a8a89af8b870234fd18795ed073b0d95b2ac9dd44bc2b18c7a8a80f62b0","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -2366,40 +2367,40 @@
|
||||
{"path":"src/cli/retry-request-flag.test.ts","sha256":"408bd66c100156b5dc97633cad968b69e1f0e0ab1e33a5157aac79dd3c0d5c8d","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime-client-deferral.test.ts","sha256":"18db4ee7965bb9a4b7fe88deaef32871ea696e729cf8c484a2b26b31f0b41609","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime-client.test.ts","sha256":"bdc41c12f76402c804fb9bf3979e5ee4c27ea78999d9020fdbbb427082cc1d6a","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/client-execution-host.test.ts","sha256":"22271bb4118be426af7e28f3065c889c551b129e25b6ec8faee90d496d1130df","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/client-execution-host.test.ts","sha256":"f201a41d5bff2c306d58718889bd0f8a5da03a17b6d0e2e17d4ac53d44ded53a","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/client-recovery.test.ts","sha256":"1ba7eb7f929583306fac80920c132939c12c5410d0c44c80256ab16153f33262","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/envelope-schema.test.ts","sha256":"4cdeb2d325114e2e6b6f0f40c4ea879556160658ab6148a4c209b9cf632b3c06","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/environments.test.ts","sha256":"fa9d00e1ce14de888cc634f8ad597dfc267ff6999bdb495d82e95908a29bbc35","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/envelope-schema.test.ts","sha256":"966b6083e19d6176b26c867d9ce784cf41017eb56ee216d6ec480e151a2470dc","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/environments.test.ts","sha256":"9bfae8e34d9bcf0357e2e43b2d1e1c1c34dbf64ef8cfb65182d8f0113fa331a1","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-preflight.test.ts","sha256":"03a8f4efad2dff73126fd5b5a61e6072ce601ced4b076286f0e48ca603057571","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-replaced-app-restart.test.ts","sha256":"392db88322aff759429e755a7084677511dff27c8d59746ce17447603055b547","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-runtime.test.ts","sha256":"2527679ab17a7241b44f46bcae7c88992e301782b0d5ff2f346a4ff17ee2b0bf","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-replaced-app-restart.test.ts","sha256":"b8b0d3adb762446f26c282082c0cd975fbd95313a15bb14cb49ec93c7349c97a","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-runtime.test.ts","sha256":"aa525b9c91b91a9c77b3d7c9680fa9efcf7beef94059cdf2aac2696fdd03b036","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-serve-supervise.test.ts","sha256":"c590bf2c18f1b95548b0095cf61d8d216475485f758fa88a30ef8717fb660b0a","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch-user-data-path.test.ts","sha256":"6c182c2a1b231eee54eb08096a90067cbaa352970edde58408743b84a0773c38","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch.test.ts","sha256":"768fdb77d018744c2f75bd6fdf2120b9915e3103145d876987882d17474115fe","declarations":21,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/launch.test.ts","sha256":"1d43f3b692deae64f29450638f404903ee1cabf899f64fe43748cf7a75d2d50f","declarations":21,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/orchestration-recovery-command.test.ts","sha256":"359edcb11e836fb884fe651bd3d4b8f93bd68d2d500ef7fcd0dc776aceec6c45","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/profile-state-recovery-launch.test.ts","sha256":"e9509e550cbebd7a5e69940023fe7c89b4b5aef1dbf2359c1ebce0e17dcbb47d","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-access-denied.test.ts","sha256":"9f930c634ff2268100f5095143a5547d99e30bd9e610f421085dfae0ca37f876","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-listener-probe.test.ts","sha256":"1f60a5e88fde12f15710ddc313e969636f17971f6ea4eb545b9dba008f0c22e0","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-source-fence.test.ts","sha256":"90098e20457bfd07c1b4b9e9d48959b53d5cdafea532d68e1b29c0979a8bd4b1","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-appimage-update.test.ts","sha256":"09c6748bd546b2895c5c08943fcf3b5b42249369e3a35d00ee5757be69d11773","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-bundle-park.test.ts","sha256":"ab74523efb085653a0c9af545705fe30ea883089a6409b66f652e1fab5b7b995","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-electron-preflight.test.ts","sha256":"676f7cb9366afa40bb652f729a8a724684b68b66ecb3fc701a2c1aebf2814546","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-access-denied.test.ts","sha256":"e7db83f591a18273e13cdba60f9ff90b0b0ab3f3f02e8741022e00f2b0f9a7b9","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-listener-probe.test.ts","sha256":"aa6f8cda814c6c468942bf4e23191f8188608ad6ce1760db99c152f1cd429287","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/runtime-source-fence.test.ts","sha256":"d53598f61d398a18d6787c5429f22db71c97e0a5beee41e942ba450cc202d5b1","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-appimage-update.test.ts","sha256":"d427be8911a4ed8c6a1ceaeaef9f0e1a16fe0d988fcf2546e85c23de007e243d","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-bundle-park.test.ts","sha256":"3913e051908b042afc1603389f9c3493519af4753afeb1ddeaf8b3e4800d52f8","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-electron-preflight.test.ts","sha256":"1f8bf52ec4965401a24a68f881686934fd8c4fa1ea56249376a551f5f1f34c9e","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-init-signal-process.test-fixture.ts","sha256":"e42fdd775f2b4bfa7527d4008d03d1835e466e7fdd4616dde47fb83335c66708","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-install-hold.test.ts","sha256":"8d0ee5ccadea837f6a24546fbebfbfec92e9c6fd858b85434cb181ed68257423","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-orcad-launch.test.ts","sha256":"bbbb59270bc074697a6f7468c595fc448e389db1db318f71421376930c7e84c1","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-orcad-launch.test.ts","sha256":"73413f4dbba2103131631ace4bf57143f5f169790117e6a030f3788cf8417fc5","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-pairing-redaction.test.ts","sha256":"d51df8f035378330564f000183d8c4726a069b9b60c74bb5230e7e05281a7b95","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-pid1-init-reaper.test.ts","sha256":"83f5ea88f7f1db184e97cb774e00649f56ad775ef41c6b5c02dc6b28d1b0a2c0","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-service-unit.test.ts","sha256":"7d8e7ec90f9ad8b8d92417d8691998b14ffb33feee5f26eb57e09c00594e787b","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-signal-exit-diagnostic.test.ts","sha256":"84738e7cfa84b1382b45c460de563517f22a19f3c46c22c2797fc812a8e3501f","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-speech-recognizer.test.ts","sha256":"04d91e3923f20a90393303dbdddb23eb01401eda500858b825d6b7211e5af3b2","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-supervised-service.test.ts","sha256":"ac0c15f01a55a1183f6d92524af0387e49fd538250745119c280b741695d42ca","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-speech-recognizer.test.ts","sha256":"e71bf1a42e586e8896af3d0903af7fa9543d0ab94ca8c1d5b5a996c5685504a4","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-supervised-service.test.ts","sha256":"2248afd1b995650125c897838ee8292c37a4fc12f4cfa38a43ea443eb15cf66f","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-supervisor-policy.test.ts","sha256":"49fd22fada03ff772ec616865da26b8dc87e5cc4b03bb5af070b8ac30263d16e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-supervisor-relocation.test.ts","sha256":"f68b96682ed1172a769725e0b84270e3dfbb1476f238ae60a709ae2fbc7795c2","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-supervisor-relocation.test.ts","sha256":"008116a0b10518353eca380347e3bb59bc4f2612150a8c92ce479db817f8529a","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/serve-update-supervisor-gate.test.ts","sha256":"36f6f77793a0c7f908af8c6deb73526825afd5a39dc3ed6ef393d1e277b301ff","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/status-caller.test.ts","sha256":"c60a95cb98d010d5704fe5553c15d2f486a5fa1b507429fc7dc9524bbe0d0391","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/status.test.ts","sha256":"0b9219834e58890e6d04578a714ebf4ffab813291d2471ca3a1021577d50668b","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/status-caller.test.ts","sha256":"c69f3a55756260fc8afeaaf799ffe2093d87b7f4e05bf2ea0573c6112e81fe60","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/status.test.ts","sha256":"ba2ec26061f20dc49b5ebea0102820ded9abab396ca8dfaa03d26230731cfb35","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/transport-framing.test.ts","sha256":"e02265ab16efc3390e3813a8d48420e08e5a1f06dd8154bef23efbe5e4dfd094","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/transport.test.ts","sha256":"8c02e5f805b9bc7f517a034898a1c3800b07ea43105313ce436b013b917d0d96","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/transport.test.ts","sha256":"f87c50916097ca41f76bbbf1996a0e2b7e3a003fed4f81ae700870f0513e738e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/types.test.ts","sha256":"d1daf682022e3488ba2c5b03abfdefbc5bc6ac931fb5beb451727ff7203c0a9d","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/websocket-transport-error.test.ts","sha256":"aea0a319b6160bc01e59c35268cc38c684c2b526b552fd437a2120aef1e46e37","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/runtime/websocket-transport.test.ts","sha256":"124b9349af252de1da7d0bd865a0762f9c9f1915cdc52f196744151e852bcf8c","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -2411,7 +2412,7 @@
|
||||
{"path":"src/cli/skills-reference-selector.test.ts","sha256":"d39cb0b19806aea4a4b6e449dc8315f4e15c73f8a7818fe6f317dab0dbd4c777","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/skills.test.ts","sha256":"253083f9310aa2bb2a483d806e6120f73cd7467545bcfd7c2aecdd6965591ae2","declarations":18,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/specs/account.test.ts","sha256":"f43848bbff3bccfadf29879f652885ae61a714d65bdf603d1fc4f93b15bce33b","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/specs/bundled-guide-flags.test.ts","sha256":"2ad4ac38ce48c92751bededb004be72e5d64e3f9ba92994c7277c9b65898e1fc","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/specs/bundled-guide-flags.test.ts","sha256":"1899f14c6f032b9e803b558ed07dee28522a7144096f12cafaf6a322471b5993","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/specs/cli-command-names-parity.test.ts","sha256":"8599f8ad3d9dd03c16146c1b67357b3c3e9a7e7d4887129a88eaafe5a1e855c5","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/specs/profile-state.test.ts","sha256":"690cbc4526f7150e2136374ad23d5186dcc93484f3b83b0b6edc720af7aeb095","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/cli/terminal-format.test.ts","sha256":"54f6299c95fceca5ec01070cd11f64e907718f3e013f8b81d0d3de10b7b29ccb","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -2474,56 +2475,56 @@
|
||||
{"path":"src/main/acp/acp-structured-managed-runtime.test.ts","sha256":"2796f5b90bddb4dac2ecaa4b9e50dd5a0c668ef5636ea54db1489939855b61a8","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0001.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-missing-model.test.ts","sha256":"51627f8046a7219ad4e4b6a8887082d6486173a72d9b391f28417870df325061","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0001.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-omp-recordings.test.ts","sha256":"4934b3c55093a7d32389794f42051d7ce8783b8afc4fcb50d0c38af1edabd498","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0001.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-opencode-recordings.test.ts","sha256":"7cc8a8725c092c08d32aee6b443138b40614764c77cc2fd4758761dc8ce9489f","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-options.test.ts","sha256":"580767f2d5abfe5846b0b1470e0821eb7eb635ca3620b77274dd22d1334f941e","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-private-temp.test.ts","sha256":"7f3f1712024f74d8a063b933ab945c8e3cd45c3e17a6bc0e837ac137b8aae387","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-prompt-failure.test.ts","sha256":"e155c62f47704e53e8fa5cc2d7932bf6b42edb258b76f64765775f5faca891fe","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-publish-at-spawn.test.ts","sha256":"56bfdec90d02eb62ce3d9bc6bcb9150479d11ed48bfaed8543a4591d6fa896a3","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-request-admission.test.ts","sha256":"c7de739eb2454b01476054315c70572dabd2b051ddc7793c782113ee59a7de56","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-lifecycle.test.ts","sha256":"f552aa8bb72f25293fcb89a252771417547b653d3f06539a3236aa0ab10e26c5","declarations":22,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-recordings.test.ts","sha256":"53b65b968401272a83387d1d3b64c132345c1af4509dc0507d78a947bafa9c6e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-resume.test.ts","sha256":"89ef45f80c58f86bc7a040f8d3d32b658a82b8762262fd21a857f4a27ac3175d","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-teardown.test.ts","sha256":"38fb35b33520e421fbbdf7cfbc8f0189417753111915f892c8c99ff998ce746f","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter.test.ts","sha256":"574f29232dec5b64f5e96bdc429321dcba32baba6fd53d10f6a6f58277d86e5b","declarations":23,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-sign-in.test.ts","sha256":"b0553b81fb1813cf1dc889e3ac8d5bbd9cd94a58200a63f1ebbfcf5f03e6ea30","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-steer.test.ts","sha256":"008de939d55c2f33f95d911337c1b25f0eda925aa82da44ca98db9744b22fd13","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-text-message-ownership.test.ts","sha256":"22c16cb71f4484c965832fd4bfa1cbdd8cb2f839203e0b1ab38cb1f604f4a8ff","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-text-stream-identity.test.ts","sha256":"674ecdab94d13c1c0a022c3a1395c630061cd79b119f86f56565f896289b5272","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-evidence.test.ts","sha256":"77b33e6910a554e0473f05a4f7630ca2e8560e96d9e003a989e7b89f7214f3fd","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-results.test.ts","sha256":"64e452fded1e36ebf772e722dad2dc3e17538e68c1546872548d42b60efae14c","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-words.test.ts","sha256":"743b57921a646f29be33c76ced475c3478c43dc6d1dfbd8891d68cd03c0caf5e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-background-tasks.test.ts","sha256":"c65dd0c12dab53580869c9aa1bb508f1ff8e6ca47d098ea0c062283dc72ce422","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-dialect.test.ts","sha256":"cc22b08ce22c691ebb0095f73f868490c6f2c4cb5b3704a8e83c522161b2cd29","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-generic.test.ts","sha256":"47e126463a4134d3546deb8dff29e87626352326fb973c3ba4cc5f7737b61bd3","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-grok-subagent-retention.test.ts","sha256":"577de81617ce647e2248cea2de07408b8707c9b7ae787419f17ad2c60350956f","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-grok-subagents.test.ts","sha256":"1235a8daddc42b530b5323cea509c55d6091775b518d4653d1cb833d7f0598c1","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-joins.test.ts","sha256":"937bc1b35ad39fe71e1b477871aff7370a5f849448f15d2a96ef7a1534841394","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-open-enums.test.ts","sha256":"799baa895edf4b7a53420e87f43c8544820dbc20060fbbed8b71182897c34aab","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-opencode-dialect.test.ts","sha256":"b26c09c8724011e969650e2caf350b53845f25361df185faa13a38d35cf378b4","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-recordings.test.ts","sha256":"bcfee295f489a786fa6e93495d5ed89da6d989b0faf8582ddb1bad2477a19101","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-recovery.test.ts","sha256":"21975b67122a5e0232a091d24a799d92a8cac8262358ce348fb6e5ec775db5e4","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-routing.test.ts","sha256":"cd8c718119eb2e5163ce8f42643faec0c7ac9917d5f38e9ad110a306db8044ae","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-timeline-turn-failures.test.ts","sha256":"5c8a9751405802a49753e56fdd7643e615082130c4744fd8fb685cefb5d5f829","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-visuals-skill.test.ts","sha256":"4b3d01ca12dbe68621720b3b0a917c088f37763dfca33626da0a1be59cf83e5b","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-write-queue-retention.test.ts","sha256":"82759a50778660c8a1927c7b7bd729fdaf8d794ca74449e6613cf7db09718d7e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/active-view-persistence-boundary.test.ts","sha256":"0cc8d43ce212fd09ab1dcc8e09c02defcc4164aad597e1aa9d33d557aa847ff3","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/active-view-preference-sync-flush-veto.test.ts","sha256":"d57826d67c5520b698a6fd8a373314c21fcdbc96c3a38a646671f72c99989bc4","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/active-view-preference.test.ts","sha256":"bebaa0501474f9f356f4e9355fd5038b8c830938abb5f5316ce433bd11e28ad9","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-auth-restart-preservation.test.ts","sha256":"5f44791c59dd3e9911447837c78c7ab66b8961fd23f5afce8feea5a603d4201f","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-awake-service-platform-assertions.test.ts","sha256":"d68a9d1f00417cb6633bb08438f3b79bc3cdaeb78254125f1539a8c5ab2ffb6f","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-awake-service.test.ts","sha256":"712a75e6a53fd300c824e6d7895a942cffb989a88607ac196db86a77e3652574","declarations":17,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-cli-version-probe.test.ts","sha256":"0a48d02f4eaed96c0e83724b0d31e37a1cdb4a39b9048364ecc9f5efa562d9de","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/agent-home-login-shell.test.ts","sha256":"8f18bd9abcad2abc9bdd92228848e1310e20bd6ad6d74b009fc8617c21cb8ab3","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/agent-hook-memory-sftp.test-fixture.ts","sha256":"96d056f67d17b5357b89222fb20931fbd3217464814f619c5d98bcfb31365d71","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/agent-transition-detector.test.ts","sha256":"69db62a74d26cd5a2d8f583e43fa3ba96b902c92170ab174c3d55bd26d018c61","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/branch-rename-failure-output.test.ts","sha256":"ad3c1245a6faf68571be005c11b2838b97e9598659f3a77c4e11e7de4c92b625","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/claude-cancel-capture.test-fixture.ts","sha256":"53891b0963172217692b93874a13f38a26be58a1f3ac9860095b123962efb398","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/claude-terminal-interrupt-capture.test-fixture.ts","sha256":"7c2f13a54a0a1bd4f1349c700c69c944243350da02d5a8472892570736ac2a5b","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/cursor-replay-guard.test.ts","sha256":"0eedb5219871402eb33b92d5ef4709b3e9009118fe3975b3b89ede2299dc1a0f","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/ended-process-reconciliation.test.ts","sha256":"3ad0e0fbca74bd54d6f81ce1966a1362da92d4af4b149283fc96837450532fcf","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts","sha256":"c20a1872790551bccd277081b33925580380542812cc356a8d0508f9a5e82681","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/first-work-branch-rename.test.ts","sha256":"2eb9b911104b5986581516ab755ed408dd39e57781c0fe5c20387e6051b673dd","declarations":34,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/first-work-folder-rename.test.ts","sha256":"73af85142e62c3193a4a1266c172c3c3e6919925bfff8362348ee3dc4ec79043","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/acp/acp-structured-opencode-recordings.test.ts","sha256":"db5a5c468ee8a51ef0b6d2f61640f1293968c4fbc43fb1e43e3ace626a73e052","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-options.test.ts","sha256":"580767f2d5abfe5846b0b1470e0821eb7eb635ca3620b77274dd22d1334f941e","declarations":9,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-private-temp.test.ts","sha256":"d1461291069713d5e3d3aa598a6937bb0291417ecae4be20436542348349b4de","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-prompt-failure.test.ts","sha256":"e155c62f47704e53e8fa5cc2d7932bf6b42edb258b76f64765775f5faca891fe","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-publish-at-spawn.test.ts","sha256":"56bfdec90d02eb62ce3d9bc6bcb9150479d11ed48bfaed8543a4591d6fa896a3","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-request-admission.test.ts","sha256":"6451b4e94ca44c2436ad1224793881ed68b53e6cf171467c2952fd97394bd5fd","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-lifecycle.test.ts","sha256":"865163901f94d1b8a262147942bd0b045f5355f22dcf233a024da21dff6659cd","declarations":22,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-recordings.test.ts","sha256":"00f5a4deb7331c2b4fb8a20e564b0451e71f30e59d978a2a1ac9b9704d52128d","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-resume.test.ts","sha256":"ff9a7786a73508aaf2d9aa04a343fcc5996f53d3d89beae46f211c0427a3bc49","declarations":13,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter-teardown.test.ts","sha256":"2b058ad92b8a7b76e0611aebf2085ecbf3fd913a3ce51cd302696cb5acb50439","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-session-adapter.test.ts","sha256":"0e4d57d74150abe124824df601dba4b117de6c8b669571cebe9621013d8aab32","declarations":23,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-sign-in.test.ts","sha256":"b0553b81fb1813cf1dc889e3ac8d5bbd9cd94a58200a63f1ebbfcf5f03e6ea30","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-structured-steer.test.ts","sha256":"7fd57161d4bd76fcc440a1042ff23f257b3cccc07890730a5f43b44945c0c7ef","declarations":11,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-text-message-ownership.test.ts","sha256":"22c16cb71f4484c965832fd4bfa1cbdd8cb2f839203e0b1ab38cb1f604f4a8ff","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-text-stream-identity.test.ts","sha256":"674ecdab94d13c1c0a022c3a1395c630061cd79b119f86f56565f896289b5272","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-evidence.test.ts","sha256":"77b33e6910a554e0473f05a4f7630ca2e8560e96d9e003a989e7b89f7214f3fd","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-results.test.ts","sha256":"64e452fded1e36ebf772e722dad2dc3e17538e68c1546872548d42b60efae14c","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-background-task-words.test.ts","sha256":"db610b74c7ca5b1bec25bae9d5cb6550c1e1c07667a9c64f9d6d15fd08e296df","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-background-tasks.test.ts","sha256":"c65dd0c12dab53580869c9aa1bb508f1ff8e6ca47d098ea0c062283dc72ce422","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-dialect.test.ts","sha256":"cc22b08ce22c691ebb0095f73f868490c6f2c4cb5b3704a8e83c522161b2cd29","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-generic.test.ts","sha256":"dd4b61ada239ad9e0be5395509d45b3e8d54c59bc0a1ca43fba1242a47d27fdc","declarations":11,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-grok-subagent-retention.test.ts","sha256":"577de81617ce647e2248cea2de07408b8707c9b7ae787419f17ad2c60350956f","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-grok-subagents.test.ts","sha256":"1235a8daddc42b530b5323cea509c55d6091775b518d4653d1cb833d7f0598c1","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-joins.test.ts","sha256":"937bc1b35ad39fe71e1b477871aff7370a5f849448f15d2a96ef7a1534841394","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-open-enums.test.ts","sha256":"799baa895edf4b7a53420e87f43c8544820dbc20060fbbed8b71182897c34aab","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-opencode-dialect.test.ts","sha256":"81e0473138ddb66f2d43a8cd63745ddd400fa9fab92dc7a3d450cfaa65c620eb","declarations":2,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-recordings.test.ts","sha256":"bcfee295f489a786fa6e93495d5ed89da6d989b0faf8582ddb1bad2477a19101","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-recovery.test.ts","sha256":"26f1f7dc8943bf282d534831e93ed289c50d9e870dea2b6e4ac9fd83621de52f","declarations":5,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-routing.test.ts","sha256":"cd8c718119eb2e5163ce8f42643faec0c7ac9917d5f38e9ad110a306db8044ae","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-timeline-turn-failures.test.ts","sha256":"5c8a9751405802a49753e56fdd7643e615082130c4744fd8fb685cefb5d5f829","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-visuals-skill.test.ts","sha256":"4b3d01ca12dbe68621720b3b0a917c088f37763dfca33626da0a1be59cf83e5b","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/acp/acp-write-queue-retention.test.ts","sha256":"82759a50778660c8a1927c7b7bd729fdaf8d794ca74449e6613cf7db09718d7e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/active-view-persistence-boundary.test.ts","sha256":"0cc8d43ce212fd09ab1dcc8e09c02defcc4164aad597e1aa9d33d557aa847ff3","declarations":1,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/active-view-preference-sync-flush-veto.test.ts","sha256":"6b71df6ec58f04729cf9b52c577d3d8915f16abb08e05efaeaa9f75ba3c105b8","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/active-view-preference.test.ts","sha256":"2ac2f17b3133d8b3dd46c2ac8a05820fd0c4a4a0123bc13e15ac6aff50cefaaa","declarations":5,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-auth-restart-preservation.test.ts","sha256":"8ded145a06c2bdb72843ad44460300d8de9cb8e82f5ea3026dc18199d851bde4","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-awake-service-platform-assertions.test.ts","sha256":"319285152521198e671eb12284926ef1166d7ff1cb1fe1355f4a2029e69828c1","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-awake-service.test.ts","sha256":"e281a2b0661163f01db6c85ae4257a15e706c455ebeae80b02d59231b56753ba","declarations":17,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-cli-version-probe.test.ts","sha256":"88e27ebd63a6d917eafa2684a964c799c91feb3b31569b3413b26c46071dff3c","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/agent-home-login-shell.test.ts","sha256":"4315b3ae29ecf5200d5be62ca5ca3b1588a035fc75548d0296d304c3385ec2dc","declarations":8,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/agent-hook-memory-sftp.test-fixture.ts","sha256":"96d056f67d17b5357b89222fb20931fbd3217464814f619c5d98bcfb31365d71","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/agent-transition-detector.test.ts","sha256":"69db62a74d26cd5a2d8f583e43fa3ba96b902c92170ab174c3d55bd26d018c61","declarations":12,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/branch-rename-failure-output.test.ts","sha256":"ad3c1245a6faf68571be005c11b2838b97e9598659f3a77c4e11e7de4c92b625","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/claude-cancel-capture.test-fixture.ts","sha256":"f0c9fa411cbd9cf4a4d0c7355ddbdb0064e8a9f1841c9fdcddf36a0a51b0170c","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/claude-terminal-interrupt-capture.test-fixture.ts","sha256":"0972f03a0d1cff0fbbb4f1c8569f65dc0105b4d19e695c5be01064b6d1cd79b0","declarations":0,"signals":["auxiliary"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/cursor-replay-guard.test.ts","sha256":"0eedb5219871402eb33b92d5ef4709b3e9009118fe3975b3b89ede2299dc1a0f","declarations":4,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/ended-process-reconciliation.test.ts","sha256":"075517c71965120d951b9688ceb0e7e0511a539c6db29129da782ea908906f8b","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/first-work-branch-rename-wsl-move.test.ts","sha256":"ee4a0d2bfbafa7a8462ce6556c667e7bed56ba4eef2e6a9ccae2dc1f86efd380","declarations":7,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/first-work-branch-rename.test.ts","sha256":"889b68aef7a793e3a47830f9cd1895b1e3fed03bb58ef152ca5b54763819c61a","declarations":34,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/first-work-folder-rename.test.ts","sha256":"73af85142e62c3193a4a1266c172c3c3e6919925bfff8362348ee3dc4ec79043","declarations":6,"signals":["named","declarations","ci-unit"],"status":"reviewed","review":"reviews/main-0002.jsonl"}
|
||||
{"path":"src/main/agent-hooks/grok-replay-guard.test.ts","sha256":"c2eb57af001f6887d80f8e250429d18e2a0d45726503798117ed965a2fa9cd41","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/hook-process-capture.test.ts","sha256":"6302a4b709e44c1bed213ce058ad45758b2537b5f7784631f67c6a4e592d6364","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-hooks/hook-script-outside-orca.test.ts","sha256":"0e531317f8bbf32b0e277627c51d14e51a20d9ab0a72c0c7b6f13fe5844f702f","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -2678,11 +2679,11 @@
|
||||
{"path":"src/main/agent-launch/agent-launch-pane-attachment.test.ts","sha256":"a0e8b2645d3a380dc1733d5f4147ef06dfd2a24f0e16b16b502ebd966b79de5a","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-launch/startup-agent-worktree-create.test.ts","sha256":"0f4c3744f99fd9c262ad97834198e94f5eab97844e3e0f3400c81ef09253b7e4","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-state-file-reader.test.ts","sha256":"ec6fb23da2dcf7fa91637f5fc373a7da827977878c0cf2d59dd56e0c3f1c2846","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-trust-presets.test.ts","sha256":"e73442554c5f57f66daea288409b5e550b7ff2afee73a516dcbf8fe8cfe265d6","declarations":18,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-trust-presets.test.ts","sha256":"cb3207ecbb1b2083f75d5a5759c2e2b07d40ede5512914295d70531ee8403a57","declarations":18,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-turn-idle-verdict.test.ts","sha256":"7a431b812178e4253659f1a6762c9faa0de075b9e7d53b9c82861a8c32bb4add","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-workspace-trust-guard-failure.test.ts","sha256":"e4d32d5dee3a092d442fb543b9ee0bb6594195b0fa3c5a8bc432da6ba8f59629","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-workspace-trust-spawn.test.ts","sha256":"fc519d7ff4b339d68283b86cc9474cfdf3ae6658a5c4a327e44661acaf22fb53","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-workspace-trust.test.ts","sha256":"80fd0bd7219eed31107b8ad0334a555aeeb634f014798c7c865f646fa5763875","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/agent-workspace-trust.test.ts","sha256":"0e3c5f213cf31fab76080ab08bc6889679f57df779f93866f71ec57dd84c6908","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ai-vault-search/session-search-agent-compatibility.test.ts","sha256":"adc99446e0a19247be94e35d34462f7f371c6aa6dcd7743a287118527e1d5f82","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ai-vault-search/session-search-anonymous-write-memory.test.ts","sha256":"bea80350f91076da5e29731c859d0853c92e408cbb485861dffefb275d058935","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ai-vault-search/session-search-child-service.test.ts","sha256":"6dfd648579c6842eb9b4ed0680255b461e71c23d3017c5fe3eef8abce75a860e","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -2933,7 +2934,7 @@
|
||||
{"path":"src/main/artifacts/artifact-recovery-directory-fsync.test.ts","sha256":"985707a6107f71c728af336afeed08a3bc3e3c32a29b2b2749a769a6680196ff","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/artifacts/artifact-share-record-allocation.test.ts","sha256":"e81f35fbb9382ad0eb49b11398a4edcd562597c3d3c3b4b3a0d07ed4125a9694","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/artifacts/artifact-share-record-store.test.ts","sha256":"90696ed02f0421b2f30947dd6fc14d23d6e94cd51f42bb2b2a5ebc35a53172ec","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/asar-transparent-fs.test.ts","sha256":"44f25547b2e77d010cd887cab39247847e5868e527172a58b8b2997345965953","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/asar-transparent-fs.test.ts","sha256":"2399d9420a31639553570c01df21092f7765c8a5e0fb63db47fa9fbda78f6802","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/automations/automation-dispatch-host-fence.test.ts","sha256":"45e9a4f88a82d94f20068969c7313a29b7a302cee03ba96465089f67ee055088","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/automations/automation-owner-fencing.test.ts","sha256":"6b7098e5e1bc7cae38fa13b3ba6783c5aa4eb3f14209370249a4ea6c0215b0bc","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/automations/automation-owner-migration.test.ts","sha256":"f5dca6a2a70de07344ef5fd139b1095dcc5c54cae22ff13770eadfc11ae57212","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -3857,7 +3858,7 @@
|
||||
{"path":"src/main/crash-reporting/renderer-recovery-circuit-breaker.test.ts","sha256":"bce5979406dac82e41046ad37c24de3e3ef4b293ac530627e26f60f2ed24f99c","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/crash-reporting/self-initiated-tree-kill-log.test.ts","sha256":"7162ff190012232402adc95a8404faa30b6bb9e02fc228ece42e5cfc74cc7208","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/crash-reporting/suppressed-process-gone-breadcrumb.test.ts","sha256":"9a7289fcc308d714e5429be6f8a86ddd5906d30a176ea635b35179247420cc06","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/credential-file-protection.test.ts","sha256":"d0eb32f1e3c1002a155b4c7b490fb5a155e66f0d40efba4bba3985cc4caa6e22","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/credential-file-protection.test.ts","sha256":"444b91d482575ab9496e50f9b884bc232c6976c86da717bd13b338d03e854af1","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/credentials/saved-credential-readability.test.ts","sha256":"7605a514632682b776a173bbc0a1d962538ce6b24c110b31de35f3166ec3b117","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/cursor/hook-command.live-shell.test.ts","sha256":"9a58ac05e1a0eedc1fc8d4c132ebb1aa9b35eb715484dea129ba37bdf04a2d0c","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/cursor/hook-service.test.ts","sha256":"3897113da2e55319064c6cc78e80db1bc2a9c7430c3fe3986e545a3dab01911e","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -4157,9 +4158,9 @@
|
||||
{"path":"src/main/droid/hook-service.test.ts","sha256":"1656f842ba6caf66e93998c57762ea4e3984a80354b7da147cba7a0374485d2b","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/dsh/dsh-home-patch.test.ts","sha256":"bde1e5dc487c68efab358b123fd3026631a5cf812e921e003cfeef89d394d175","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/dsh/hook-service.test.ts","sha256":"fe330a28374c8f424cd7cf6bb18cb592be7395dcdcb60d0ebad031f4d34c3995","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/durable-file-write-syscall-proof.test.ts","sha256":"df903751ef79befd305e0f868bd2a022fabb747740e4fec4f246bdf9d7c5d345","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/durable-file-write.test.ts","sha256":"71e6a8da7027ef3ece71697a8ca661454fdbc84f5c30d29f1d3734ac4ac13837","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/electron-updater-mac-staging-contract.test.ts","sha256":"f68f572ecf8b90791a9f61beebd75e8d3016d47da3e025a28bde13570fe58b51","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/durable-file-write-syscall-proof.test.ts","sha256":"c63b925984088bf8044249ba913457033487feb5a5a97108033267bb5c0d82d6","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/durable-file-write.test.ts","sha256":"89afc0138bbc02209899cead6712c4e14ee0b1c77b35ed0c163669082175d189","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/electron-updater-mac-staging-contract.test.ts","sha256":"4332bce31a725d714b349d47cf0bccbac17f521bced4352f8e329dc0673e3100","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/emulator/android/adb-devices.test.ts","sha256":"77e3dae178e97475585fee72fda1c5d31699c71bc8c750e5d9d9565365b9e4fb","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/emulator/android/android-app-control.test.ts","sha256":"90233ee5fe9ff497192177c5721cbf64c3239410696ccd2b19dd022dc4eadca4","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/emulator/android/android-capability-operations.test.ts","sha256":"1b56918ca04a6090ae435eafba36f30f4969fccb75c76e371821406bb63f79bb","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -4198,18 +4199,18 @@
|
||||
{"path":"src/main/ephemeral-vm/runtime-service.test.ts","sha256":"f00463bbbdaff7373d44cdf7a9b16f042e09656b0871e338dd7aa7839572466a","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ephemeral-vm/runtime-ssh-cleanup.test.ts","sha256":"09fdba44fb8c2b08365ee669971a75e7175bdc967e2ff8bda4d7b61092861485","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ephemeral-vm/runtime-ssh.test.ts","sha256":"394ad81d4bf3efb40c962e32d033385a9a0dec66c3c2aadb693d8fa7e82c7c2d","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/execution-host-workspace-trust.test.ts","sha256":"5cf9e071cd1617d359ab93dd49d5430a0b556a6e317fb00134c28f0508fe0ecd","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/execution-host-workspace-trust.test.ts","sha256":"e3251fb5d665b84af5ed7aee374d85907f2e960c5cdfa8d71e6996c4933cb116","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversation-delivery-receipts.test.ts","sha256":"5e1d044c888a6ccc03efafd832089b998ca696495d971cc563f3717dc7e97692","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversation-reopen.test.ts","sha256":"381dde0c5995c8555a44bf9d125a03b200cb36a8c98b01d72069dcd7d81c5eeb","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversation-seam.test-fixture.ts","sha256":"31119e1d06d2d7c459e856b01f66f00466ac612449360e9926a3ef07aae42fd1","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversation-seam.test.ts","sha256":"16aff902d939764836f06dd1a83506e51d84c834d31ec4d3269a3ca0cdce3177","declarations":32,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversation.test-fixture.ts","sha256":"9f0e46a4f5e05aa0f3e2a05417564e7d75ed69198a22086dae754ad65c081b06","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-conversations/external-conversations-install.test.ts","sha256":"44bad89a2c7c114b6303a37fc9bfc2a0d25724f1044f834d979c87628168b562","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-editor-launch-process-host.test.ts","sha256":"1db587e14332fcec5e4170adb73f52f66df4db6b8c2145d5918c623d2d875b12","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-editor-launch.test.ts","sha256":"6ed6f55ccac106b9e044c8407f9b985107909392fa493acee875f57061bc15d9","declarations":37,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-history-session.test.ts","sha256":"c9e38fe00d7a6bd151e8a78859bf8722274d59f032151b9c88f924fe53b4d611","declarations":20,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-xdg-data-dirs-handoff.test.ts","sha256":"ee27de016b1ba30f44c319de42ea7d57a5e673da81365a9247448ac7bdaf1ffa","declarations":15,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-xdg-data-dirs-no-config-launch.test.ts","sha256":"aa7749fb9eaa5cce56b30c2e29eddf1de194633aceb3c36cb4c242b29c884cfd","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-editor-launch-process-host.test.ts","sha256":"5e98b469e11eba91428d537aeb1207c1ce02e43b3efadd045c73834eada4fd50","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/external-editor-launch.test.ts","sha256":"ab4291a0126f7cf9e372d6c7c95a9a4d6ed02dca9221d6b0a4d1259d0d59cdd5","declarations":37,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-history-session.test.ts","sha256":"b1d41921c1cac914ba12e62e7274119bb5e8a364b64cb58d48588cd292fb7d26","declarations":20,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-xdg-data-dirs-handoff.test.ts","sha256":"003801a4f10971c628f80eeffa46060182f0d4059c3e31368d8b21200b6073cf","declarations":15,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/fish-xdg-data-dirs-no-config-launch.test.ts","sha256":"ac8fb04e78e1467d5c5db67ae7cc321d8c77b1762d519a127d3a2b043f6465c0","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/folder-upgrade-worktree-path.test.ts","sha256":"1cea9303d5bc6dee1a4ee04e1ef6d47cd1f11f65804f22e0e51e15aa183377c8","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/foreign-sqlite-readers/foreign-sqlite-reader-client-worker-lifecycle.test.ts","sha256":"482e271b150fa4c67dc0add996b8b51efe1db4e2595ae1fa5b1bb127958490dd","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/foreign-sqlite-readers/foreign-sqlite-reader-client.test.ts","sha256":"0c70d85b7297f48249ee79879fee21e696d24392f03f13d35438e8189dd002c2","declarations":18,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -4227,7 +4228,7 @@
|
||||
{"path":"src/main/ghostty/parser.test.ts","sha256":"a7784610b22de0fccdaa2ee4e32578fd6783933b108c7c6202d8f775a79cd4a4","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ghostty/theme-import.test.ts","sha256":"f9fc4f30944bb0beb150e3250e0cfd44ca2062c70a6a2aa1f9b7ef655492a7fd","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ghostty/theme-resolution.test.ts","sha256":"f0ddf7b6050dd803052d97559a7f979090b965cf58c196feaf6f5ac52a955027","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/git-bash.test.ts","sha256":"f38aae71c51edde7e903c0af584488ac306bbe15eaa61efd16ac1d624b0c8a1c","declarations":19,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/git-bash.test.ts","sha256":"dc23426f93cc070f07429fc77c60f8bd4fee617b43c8195b47e39767be833f52","declarations":19,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/git/add-sparse-worktree.test.ts","sha256":"406939ea7dff213fd5f96859a35d88f74a5ba8ed88b3590e8ad3b7e320c90daa","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/git/admission-tier-plumbing.test.ts","sha256":"937501396ceb31c935c71a7f5620391848fa301fc8d8beaed7a45c149e5f9fe1","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/git/base-ref-search-selector.test.ts","sha256":"cb4f3e446e5afdb8ce41d01dcd1605717bb2b50ab727be758a747fcd89bb4ad9","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -4581,17 +4582,17 @@
|
||||
{"path":"src/main/hermes/hermes-config-remote-adapter.test.ts","sha256":"49ec6e9eedd2be0616b36547815427e6e8a2f76fc718e40e4e9105eca9334333","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hermes/hermes-config-source-edits.test.ts","sha256":"a04cda20d0177e684f83e13905a150a024ba1507b2b57a0a098d9db26c46facf","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hermes/hook-service.test.ts","sha256":"9e7bcb9182a378f63db0d24403afa5812f6d8c34ad82fde8e567857118202b46","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hook-archive-timeout-observation.test.ts","sha256":"c91cf34371fd28601da62fda98a088162f4df2b1f6d20835223627cee5de8953","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hook-termination-real-process.test.ts","sha256":"c5394110e1d86c6118b9e4901222bfd4ba48d9aace6d6fb86079193d964202cf","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-archive-exit-observation.test.ts","sha256":"e78af32aecf057f4c980332ac8d590c0e3c44d48c2a58c54b715315694b22c39","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-effective-hook-resolution.test.ts","sha256":"48a7aa063aead0104716fab3111ea6347875dd6ee4b43a6ef41657f6c7b7d76a","declarations":22,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-issue-command.test.ts","sha256":"9b24893036df007d29f69e2570f608976b730cadc9203490e48700ec37759ea7","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-orca-yaml-parsing.test.ts","sha256":"dbae8b1c35538fa939c1826efbef2c7f9c4876fdcc50fd0b4aed75c7be86a16e","declarations":30,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-runner.test.ts","sha256":"f7e0de5ce90ad70a4450d802757e8fcd885ead2199172c1064cba7b3cc2ad53e","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-setup-runner-script.test.ts","sha256":"efa4e234b92044390bca861bfd6625924865184d495ccc3e58b60cecfe99ce96","declarations":20,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-test-fixtures.ts","sha256":"808ebca99f3b2ed2252e77c48d39011b7e2b07c724ff3dac41b39b91b9592b2b","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks.test.ts","sha256":"5ef17b7e66ecc44835f8b5d44370940c1baa5a4f122c481df1acb63c1a11fb48","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/host-tree-removal-asar.electron.test.ts","sha256":"6ec0bc5f0d7808a641cbfe256458b863e58fa9118b036e122773b55611c94c40","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hook-archive-timeout-observation.test.ts","sha256":"67bd344cdeee70758cbd6d579e8cb21a2dc96ce35c8e710f45c8616865c3d545","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hook-termination-real-process.test.ts","sha256":"16adaf715bd8378eeb816f85358198ba6a6a9f4df2756d31b2733f0ee790a1d1","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-archive-exit-observation.test.ts","sha256":"d6485ba63e4821891883aff9c04615748da4ec6075cef75af9ebbce7f7bb5e2a","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-effective-hook-resolution.test.ts","sha256":"0347452f969d3d4db12b24e006852a93ec3a83844b989e1852a4d48fdabcbfdb","declarations":22,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-issue-command.test.ts","sha256":"ea7e2ebe43833c9acd654c311c4de9db8d40f64fe5efbb757bab19b4ffbe12dd","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-orca-yaml-parsing.test.ts","sha256":"8736b48db722a22500e72a09cf37807146b336fa07bb8736d158db434c531e44","declarations":30,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-runner.test.ts","sha256":"8ce868684f15768618dcf901a4022a74569cd27d4affa12b29eeaab3bbc79800","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-setup-runner-script.test.ts","sha256":"b77e2ba9eedce139bf2864c7a7f2215ec53671be117453b6aa946ce6cef169ef","declarations":20,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks-test-fixtures.ts","sha256":"78cece7be247ac1663e8a8817994f9d94152169d94649afbed817a09a75df5ca","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/main/hooks.test.ts","sha256":"14487d6df8d056bea9b021f4efaa171063ebed476cf0a2786d74d9e80a9a8ad9","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/host-tree-removal-asar.electron.test.ts","sha256":"b391f80d2f60a4e6818bd0d7ef04a5e7788e4ef36a96f42c0950dce29fa14476","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/host/deferred-secret-protection-report.test.ts","sha256":"417a597dfc0399038f24e116908be3b24cad89cf96bbf0e4954532fb3e7ef75b","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/host/electron-http-client.test.ts","sha256":"0d4e30e3bfc37e6a7156432c64f6f95b1908609c5145bbe634749b761d0f85ea","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/host/electron-repo-icon-fetch.test.ts","sha256":"02f1e5378ee37cb5a8641abb4924bcf762656a62e04c9a501b380c0a22480315","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -4607,7 +4608,7 @@
|
||||
{"path":"src/main/i18n/system-language.test.ts","sha256":"b620bec3e7adad99822567dfb7d8198fa4d4060100713413b2964c7d67cf3450","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/image-file-signature.test.ts","sha256":"3851232874c5761392e0faf4bc255d9edb9be52cf8992c2e84f72207aa1874b5","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/integration-credential-file-windows-acl.test.ts","sha256":"3311a029d526446b26dfdf4b246715a85ff1eb42ef25d983dba08e742ca050c5","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/integration-state-file-cache.test.ts","sha256":"de33c497f35df333d9ea7d61a5fa99895638cf1058356718b87f81b72ff928d3","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/integration-state-file-cache.test.ts","sha256":"294a6a0aeb24d52b12a6dca9a7cdf3b0b04715d565c0c10b4eb4b0ccc1e1beae","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/integration-token-file-cache.test.ts","sha256":"c2823183f003be3b9ab5acda278627673e27b57436feb3ca961b11cca27effed","declarations":7,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ipc/account-sign-in-link-opener.test.ts","sha256":"006a48f67b06c1d531d698cfd88eff571aa54e58d12ab444c89570e11ecd453e","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/main/ipc/agent-hooks.test.ts","sha256":"94f1a100dbde8e63bb718a63ae1fba9f88eb47f8b06a5f9c47a6a8f28696c04c","declarations":19,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -9314,10 +9315,10 @@
|
||||
{"path":"src/renderer/src/components/automations/use-selected-automation-run-history.test.tsx","sha256":"70f695922a8f06d096461dd72af520a94b00c47e9ca9204d4f83a6e743ca3b81","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-cookie-import-google-disclosure.test.tsx","sha256":"1157a585d772c0ab6ed8ca68d87419c00eb386b99ff94eaa2f2285ca8a3cee13","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-favicon.test.tsx","sha256":"8703d162b00e162802e240988467f6f99cca3363111c7ba2a1af2748a043cfe0","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.chrome-parity.test.tsx","sha256":"be73960b25b6a00ce36e9b9c054e330a446ba09fc26bf033898e3b7ca49a0935","declarations":16,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.chrome-parity.test.tsx","sha256":"c5f2640aaca024b828a1a80b77b86e53ec7c340be6327dde6f5f91481f656e0f","declarations":15,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.dead-guest.test.tsx","sha256":"ea303fff92e9092a5af167c722f282d6d3d8d9de25b257983b5bddf2e6939974","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.drag-focus.test.tsx","sha256":"52556203eb50459b241f6a6e9dfe935c793be3b5b78c2bacb4fc58d21e7f7f4e","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.failure-remount.test.tsx","sha256":"c4d9e6cc34d515b7213a7f0e6317adaf634cb3fef9b19de8af5350bee69acb6a","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.failure-remount.test.tsx","sha256":"933d9ec2c0853dfca3b03cb0d758055edb26a8219bdba72534d954a5d9f5ceb3","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.markup.test.tsx","sha256":"48ba3f39b149eb370eaf7e2f59b6d5c7b9fd126d8e4448cb3ddba9e7f75188d1","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.popup-notices.test.tsx","sha256":"9d4b0016ca8d72f9327e29c4112861bac0f6e469e8e2926bdb4a70f849a4d404","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/ClientHostedBrowserPagePane.test.tsx","sha256":"a5d28276ea2bbf9fb809d69f1ec240d04bc332d065e8c4b3e869c65c136cf57a","declarations":14,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -9411,8 +9412,8 @@
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-address-bar-navigation.test.ts","sha256":"9137c33164c2519e2332b15db816afa9825ff8d6cae833b5b08ba9c659925fa9","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-download-progress.test.ts","sha256":"6aedcd30cfead457b11889d22fcdf768bbcec19ba360df5699771576dfbfd0b9","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-file-editor-open.test.ts","sha256":"8dd636f94f08c4656dd8131d5ee05fcfda2b0212e9405c640180b1ca4c95a211","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-load-failure-overlay.test.tsx","sha256":"2110072fd81c051e073a920ad7776be0f22e9cce03595bb7eac2bcd3c46e3704","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-notices.test.ts","sha256":"9ea0bbf72acf0192b532eaa9ffea7f64b8f6a960793f291448c4bff6c461bdf1","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-load-failure-overlay.test.tsx","sha256":"04f42dcad871ca0fa14e06afd52bcee4e3f3f439c92c826a090f50b6a6b7606b","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-notices.test.ts","sha256":"76c0568dbeca70131936fbc7187a8dfd175a1feb558eec79bfa0985df3454d70","declarations":8,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-page-download-activity.test.ts","sha256":"207cbe3195517ee2c13b0541311d7c59212bbbdd5d8c853e6558f8cfd38c5193","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-reload-action.test.ts","sha256":"18e3eaf93c171e9b18b34571fb7c77849a8a64477917fae7959087f849b5a863","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/browser-pane/navigate/browser-webview-load-failure.test.ts","sha256":"9f73acc3f4c39550246939709c1f7d465b733ea302967f165918822633edb332","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -10238,7 +10239,7 @@
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-claude-sign-in.test.tsx","sha256":"53522e80d25f81ab17af24c25e9249225d28797ca7379703358a2c007df688a2","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-compaction-visibility.test.ts","sha256":"9506b1f3ec1b95ec7dfc00b45ebf8f916eddaf1cbc6e74b9802fa8e4d7a3bf15","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-autogrow.test.tsx","sha256":"8e22f65c3a813a8ccbfae00897a9f872f899897d74f79d71ec30ed45ea694640","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-composition.test.tsx","sha256":"cfff0482f446469a47c45c33bb655978d16df7e3949811602efd7dd8e90f4765","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-composition.test.tsx","sha256":"d208c757a8ed4797fe4c86dc28cb78f0c0942b4709016573dd48521dd05a3f12","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-draft-addition.test.ts","sha256":"af229d0548dee226bce9bf8f4d3779b1dd38d92232e6d1bd2ff4e7e959a4105d","declarations":11,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-draft-comparison.test.ts","sha256":"c29967f4713b03376d0b0835a9e52f436773acc438063e066f05eb8a3f068754","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-composer-draft-indexeddb.test.ts","sha256":"4ed04498e2e52561210b102054876187768ed657a570ff11a74428a5728cbf7d","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -10324,7 +10325,7 @@
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-split-shortcut.test.ts","sha256":"11b6a639f30b4bd9bcb47661c517d8109ab6027d84e12e94a00cd6c5159c2381","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-store-fanout.perf.test.tsx","sha256":"9876019a56e3c19517bcd20a5102e1ceaf33ef4eeb23e12200628768ad1cb3dc","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-structured-question-test-fixtures.ts","sha256":"def9d0b589ac7c9a87d2010556332582c9fd0005b67c81009e92b28e091c664e","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-structured-send-composition-clear.test.tsx","sha256":"dbfd7ba38810620179ac651739570605f57e013b9a4f668c75ebfc05bdbbf011","declarations":9,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-structured-send-composition-clear.test.tsx","sha256":"f691d67b7da3278d70ba07904a7e5b6e13d86fc0f665974d09debd4919af42a8","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-structured-session-notices.command-failure.test.tsx","sha256":"74442a07b04237b625c008ae5738c08ae36987765ec5ea6f1c44f8873ebb8a1b","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-structured-session-notices.create-message.test.tsx","sha256":"ba53cf51a1068b97bb6d71eeea44a9d1fd3dc74cf04db4a5064359b4a96cc831","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/renderer/src/components/native-chat/native-chat-subagent-delegation.test.ts","sha256":"470d24efee849475b9a8e9fd52446866bfadfd94f8272ac191a95bb6c6f848be","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -14730,12 +14731,13 @@
|
||||
{"path":"src/shared/browser-client-hosting-eligibility.test.ts","sha256":"aac127f9eff67e0c635a871d027699b44fa2bfa73b61e76ca749c4ecd9aef02b","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-cookie-import-sources.test.ts","sha256":"450d53ee5309a169d8aa714abef1bffa8a7b483476b0ff734f7028a3caf095f6","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-grab-types.test.ts","sha256":"7f988ec598bd89c31e539670df35c3c0273c14ae26ea5ced5d5903fb9778d87c","declarations":6,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-load-failure.test.ts","sha256":"376852d61ede1cb177300e456df6c1ca9dcb26c35d219c1fee2445ad7346991a","declarations":4,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-network-tunnel-protocol.test.ts","sha256":"f7b540ea4139d6e47a125fbafe8f0b74074bf47024cfc98d7b8a0d240ecc5dd3","declarations":5,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-network-tunnel-stream-framing.test.ts","sha256":"9b731f3efc696b5b174516bc2750e55782ee787f308c7eef9cbb9fe8c2707f36","declarations":13,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-page-zoom.test.ts","sha256":"a71aac62969f29dff8d7940cb1ef2f8204c39d9edbe60b202da0b792ef85856d","declarations":3,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-profile-scope.test.ts","sha256":"2783d81222a54b2c7598aac58fa819c68a874c25e1e610835e46c5868dc974fc","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-screencast-protocol.test.ts","sha256":"714117e4e49bffa4c7c72b00dc9182012b7deb42db10f0fb135aafd7179cacde","declarations":10,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-url.test.ts","sha256":"479be8508a2c057b3eab6464c03f431fe6348cf970c0b52c3ffff7a739bf23af","declarations":27,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/browser-url.test.ts","sha256":"54cb2b70dac165e605f43036fb17e250de3df1c6b33a601dced4e7c7e3c65dda","declarations":26,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/bundled-ripgrep.test.ts","sha256":"73f266c06609baccf839078d823aea120904712c7b633609ec9dcc1a0fe489df","declarations":1,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/bundled-skill-locations.test.ts","sha256":"0da2ed5db5b1bd46a787b450df66097f9a1429909ab9c2d445c25455696c87b5","declarations":2,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
{"path":"src/shared/bundled-skill-summary.test.ts","sha256":"f9ea2596c040ef0e3ed8cee93eed276322657737ee387b35be38d62973770453","declarations":12,"signals":["named","declarations","ci-unit"],"status":"unreviewed"}
|
||||
@@ -15890,7 +15892,7 @@
|
||||
{"path":"tests/e2e/browser-guest-runtime-oracle.ts","sha256":"dbd9650c19f830dadd6cee4c715a915e06c56185bcc83d58d101fcdef33cb4be","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-loading-surface-oracle.ts","sha256":"451541e15a21f1e170a3a6dbb2bfa3b726bed5ee31973b36a72264e146ef3981","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-loading-surface.spec.ts","sha256":"1ac60d6585c444cd2ff6eabe8200e1a09ed67205511ab94381ff229bdfae157c","declarations":1,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-local-https-certificate-trust.spec.ts","sha256":"255f4ff06055b11fd7f8e417ab56b8b8d0a115e292a95f55c57a01314ccb61f9","declarations":2,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-local-https-certificate-trust.spec.ts","sha256":"bfb3e3a6f7a29961110de9c5ebcd4ffbc74bb7d12cf3674778b0ff1c2ea38471","declarations":2,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-pointer-input-dispatch.spec.ts","sha256":"a61a51fbbfbba827ad9acc64ac54088d2defac2bf4cd328c83f0a2687a6781d2","declarations":1,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-reload-feedback.spec.ts","sha256":"cd44d0c1c5e92fac62c725e7b03a8eb7c83c55bdb2f1f1dcd3392b999686504c","declarations":2,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/browser-settings-preview.spec.ts","sha256":"7c1344749f4020bdc32e1ffca123ebd17e62a5ee6e9ff06f5452b6e22accc4ce","declarations":1,"signals":["named","declarations","auxiliary"],"status":"unreviewed"}
|
||||
@@ -16165,7 +16167,7 @@
|
||||
{"path":"tests/e2e/helpers/layout-latency-probe.ts","sha256":"581912c84230046730a32ff6f6b629fdfb5a214bb7a500616b0431f607c1ff92","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/layout-owner-build.ts","sha256":"80697cf0934e3b022978c6ab84c26dfbac076971d1bc52708533f1d4d919bb22","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/legacy-relay-docker-host.ts","sha256":"45ae79e3f98f8fbf47fa355863c910d3c4e9f80b47d88840439f0e6289419f6a","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/local-https-test-server.ts","sha256":"bf651cf3a57a7eacbbd52ededc2b3114ec33a8fce429ac5c077e1bd1fedcd5bd","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/local-https-test-server.ts","sha256":"d7e54a21b8a0fcac6f4417f1ede13ce6952e10c336dd6da02097c2d32152a54f","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/main-terminal-layout.ts","sha256":"0e89d44fe132760cc644829807310f6ca4919716370272e1e4079b13838f3eb1","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/markdown-editor-fixture.ts","sha256":"a15a8f85a5b9a77d5e85cdbec9732616f846e5dab71cc95e103bbe9874c486c2","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
{"path":"tests/e2e/helpers/markdown-inline-image.ts","sha256":"75cd44eeb87a8f6c9b17dd3d1c590a18a655020ece5015e8ff315619a84354b6","declarations":0,"signals":["auxiliary"],"status":"unreviewed"}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"source_commit": "41b5cf015be7970a23e91d4ce76d52d781db4e1b",
|
||||
"scanned_source_files": 37112,
|
||||
"source_commit": "cb508dc745545c7d66ad4cea78d987e1742e547e",
|
||||
"scanned_source_files": 37119,
|
||||
"counts": {
|
||||
"files": 16969,
|
||||
"files": 16971,
|
||||
"declarations": 118926,
|
||||
"reviewed": 1137,
|
||||
"reviewed": 1308,
|
||||
"stale": 0,
|
||||
"unreviewed": 15832,
|
||||
"unreviewed": 15663,
|
||||
"removed": 15
|
||||
},
|
||||
"reviewed_original_declarations": 8117,
|
||||
"reviewed_original_declarations": 9373,
|
||||
"areas": {
|
||||
".github": {
|
||||
"files": 3,
|
||||
@@ -24,10 +24,10 @@
|
||||
"unreviewed": 0
|
||||
},
|
||||
"config": {
|
||||
"files": 607,
|
||||
"reviewed": 333,
|
||||
"files": 608,
|
||||
"reviewed": 383,
|
||||
"stale": 0,
|
||||
"unreviewed": 274
|
||||
"unreviewed": 225
|
||||
},
|
||||
"docs": {
|
||||
"files": 106,
|
||||
@@ -37,9 +37,9 @@
|
||||
},
|
||||
"mobile": {
|
||||
"files": 1266,
|
||||
"reviewed": 279,
|
||||
"reviewed": 329,
|
||||
"stale": 0,
|
||||
"unreviewed": 987
|
||||
"unreviewed": 937
|
||||
},
|
||||
"native": {
|
||||
"files": 17,
|
||||
@@ -49,15 +49,15 @@
|
||||
},
|
||||
"src/cli": {
|
||||
"files": 185,
|
||||
"reviewed": 67,
|
||||
"reviewed": 88,
|
||||
"stale": 0,
|
||||
"unreviewed": 118
|
||||
"unreviewed": 97
|
||||
},
|
||||
"src/main": {
|
||||
"files": 6627,
|
||||
"reviewed": 52,
|
||||
"reviewed": 102,
|
||||
"stale": 0,
|
||||
"unreviewed": 6575
|
||||
"unreviewed": 6525
|
||||
},
|
||||
"src/packages": {
|
||||
"files": 16,
|
||||
@@ -78,10 +78,10 @@
|
||||
"unreviewed": 5407
|
||||
},
|
||||
"src/shared": {
|
||||
"files": 1301,
|
||||
"files": 1302,
|
||||
"reviewed": 4,
|
||||
"stale": 0,
|
||||
"unreviewed": 1297
|
||||
"unreviewed": 1298
|
||||
},
|
||||
"src/wsl-guest": {
|
||||
"files": 45,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,163 @@
|
||||
{
|
||||
"batch": "root-0072",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"files": 2,
|
||||
"original_declarations": 18,
|
||||
"final_declarations": 18,
|
||||
"original_explicit_parameter_rows": 13,
|
||||
"runtime_cases": 28,
|
||||
"decisions": {
|
||||
"keep": 16,
|
||||
"fix": 1,
|
||||
"consolidate": 1
|
||||
},
|
||||
"records_sha256": "e26d86fbd4e9737b57da4c3ae37724d25eaf01171494af9bb6c3b85351ad3727",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/repo-visibility.test.ts src/cli/handlers/search.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0072-baseline-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-baseline-tests.log",
|
||||
"log_sha256": "06fde7b98f73763128237c9cb0fef6b89884b50fb99937ca892d7f6be5f1bbef",
|
||||
"report": "/tmp/orca-root-0072-baseline-tests.json",
|
||||
"report_sha256": "7f3b8a2e3a8cd9b84a91f7f48c8b0143ce71a7d99b4607cbe80a9ee2fb2eb276",
|
||||
"passed": 28,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "reviewed-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/repo-visibility.test.ts src/cli/handlers/search.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0072-reviewed-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-reviewed-tests.log",
|
||||
"log_sha256": "77578fdf9a61737c8b3082b0a4499d34a2fde8464a4bfb5c953a70b92be02444",
|
||||
"report": "/tmp/orca-root-0072-reviewed-tests.json",
|
||||
"report_sha256": "db8cc799038ad65eaac0c3812afa62dc9a73b2df67b392e73bfe56f511501792",
|
||||
"passed": 28,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/repo-visibility.test.ts src/cli/handlers/search.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0072-final-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-final-tests.log",
|
||||
"log_sha256": "0441dcd40d715aa9f67c601594c3dc48b7207e3965cb89d5ac952edbc2826f54",
|
||||
"report": "/tmp/orca-root-0072-final-tests.json",
|
||||
"report_sha256": "2f26101d6d44c63ca55c1b9e171e7642fd5353ef48b0a2d229446b93d47d67aa",
|
||||
"passed": 28,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "typecheck",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc"
|
||||
},
|
||||
{
|
||||
"name": "lint",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/handlers/repo-visibility.test.ts src/cli/handlers/search.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "format",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/handlers/repo-visibility.test.ts src/cli/handlers/search.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0072-format.log",
|
||||
"log_sha256": "db18dad3f63a09aac07c06d926b7ad30fe62fa1a7057638a0ec63e29eb052d36"
|
||||
}
|
||||
],
|
||||
"mutation": {
|
||||
"mutation": "wrong CLI error code with unchanged malformed-cursor guidance",
|
||||
"production_path": "src/cli/handlers/search.ts",
|
||||
"original_production_sha256": "7e48f2bd7c7454b7ed1dd183284ba021a9d583f07e0765e1717370def69551d3",
|
||||
"reviewed_test_sha256": "2fc10cd2e192c002ede3373f43eccef337f9df983966d5d47a8ea251ad4a2f3b",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/search.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0072-mutation-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 19,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"source_sha256": "43d21cbbb67b9ab28aa7477e00feafb6b3bcd52b1fddccc90d867760b8970f5d",
|
||||
"production_mutant_sha256": "5e272d4fd5d53b3ce65c34c8e14d660d62d6ad5024af4214eca8396115df37f0",
|
||||
"report": "/tmp/orca-root-0072-mutation-original.json",
|
||||
"report_sha256": "18964339385f0e4c5c819c7848d9cc96f50501c7c4e5546e0c412afd46517603",
|
||||
"log": "/tmp/orca-root-0072-mutation-original.log",
|
||||
"log_sha256": "cfdc390e6773d748b1b07f176ead81e7b3258b73d02c979706d2b6ac28d12ef3"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/search.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0072-mutation-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 18,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "raises a malformed cursor through the CLI error channel",
|
||||
"failureMessages": [
|
||||
"Error: expected Error: The host did not recognise that --… { …(2) } to match object { code: 'invalid_argument', …(1) }\n(1 matching property omitted from actual)\n at Assertion.__VITEST_REJECTS__ (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2480:33)\n at Assertion.propertyGetter (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1607:27)\n at Reflect.get (<anonymous>)\n at Object.proxyGetter [as get] (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1696:22)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/search.test.ts:239:6\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source_sha256": "2fc10cd2e192c002ede3373f43eccef337f9df983966d5d47a8ea251ad4a2f3b",
|
||||
"production_mutant_sha256": "5e272d4fd5d53b3ce65c34c8e14d660d62d6ad5024af4214eca8396115df37f0",
|
||||
"report": "/tmp/orca-root-0072-mutation-reviewed.json",
|
||||
"report_sha256": "af98aef17f41e7b692ed4e0d0de22170754084da343997456d498863e6a135e1",
|
||||
"log": "/tmp/orca-root-0072-mutation-reviewed.log",
|
||||
"log_sha256": "3a984879db81320fbe4662027288cfa089fe04c0c4fb38ba89dd2e9ebd043ecc"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
"original_source_repin": [
|
||||
{
|
||||
"path": "src/cli/handlers/repo-visibility.test.ts",
|
||||
"earlier_source_commit": "41b5cf015be7970a23e91d4ce76d52d781db4e1b",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"sha256": "a67305c6ef886420547ef542f7396dc0e473833645386b5d1824c69a583ac317",
|
||||
"bytes_identical": true
|
||||
},
|
||||
{
|
||||
"path": "src/cli/handlers/search.test.ts",
|
||||
"earlier_source_commit": "41b5cf015be7970a23e91d4ce76d52d781db4e1b",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"sha256": "43d21cbbb67b9ab28aa7477e00feafb6b3bcd52b1fddccc90d867760b8970f5d",
|
||||
"bytes_identical": true
|
||||
}
|
||||
],
|
||||
"integrity": {
|
||||
"exact_original_case_slices_verified": 18,
|
||||
"exact_parameter_rows_verified": 13,
|
||||
"original_and_reviewed_hashes_verified": true,
|
||||
"production_restoration_verified": true,
|
||||
"original_snapshot_sha256": "f528ef3f87d800ae46102db9bb54a92eaa64a1b50429fbf3e6c86c9e09f55a46",
|
||||
"plan_sha256": "0472472b1994ad42b6ff7e24afc7bfc954c82f5b0463c5818aad72b4a33b230c"
|
||||
},
|
||||
"limitations": [
|
||||
"These Linux CLI tests mock RuntimeClient.call and the remote getter. No real socket, runtime launch, native platform execution or server integration is claimed.",
|
||||
"All eighteen declarations and thirteen explicit table rows are retained; the two-file suite expands to twenty-eight passing runtime cases.",
|
||||
"Supported-agent expectations check forwarding only; imported registry values do not independently establish registry completeness.",
|
||||
"Supporting production and test-fixture reads do not complete reviews of other pending test files.",
|
||||
"The baseline ran in audit-7 at the earlier source pin; both original test files were independently verified byte-identical at the audit-8 source pin."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"batch": "root-0073",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"files": 4,
|
||||
"original_declarations": 22,
|
||||
"final_declarations": 22,
|
||||
"original_explicit_parameter_rows": 2,
|
||||
"runtime_cases": 23,
|
||||
"decisions": {
|
||||
"keep": 18,
|
||||
"fix": 4
|
||||
},
|
||||
"records_sha256": "0c0654f6a25dec4e33da21d06defe2d5259b978c7878821721ae0f99479a5b52",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/serve-restore.test.ts src/cli/handlers/serve-service.test.ts src/cli/handlers/skill-sharing.test.ts src/cli/handlers/speech.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0073-baseline-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-baseline-tests.log",
|
||||
"log_sha256": "c73a648d372b89979f6f4a66f3f64e09066c3f731ad256aafa5a81a26cc1b6e7",
|
||||
"report": "/tmp/orca-root-0073-baseline-tests.json",
|
||||
"report_sha256": "48999792c96d13f31ee6cf4bca4ea3d75951ed0e5dbfb14754ff9a1c588d7ddc",
|
||||
"passed": 23,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "reviewed-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/serve-restore.test.ts src/cli/handlers/serve-service.test.ts src/cli/handlers/skill-sharing.test.ts src/cli/handlers/speech.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0073-reviewed-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-reviewed-tests.log",
|
||||
"log_sha256": "46ba788ff5816fcfe363967270b2cabd91abcd7ff094851a607c8db3004e721d",
|
||||
"report": "/tmp/orca-root-0073-reviewed-tests.json",
|
||||
"report_sha256": "e6eb9c589fe7830b581c41179dad4622e5c5ef201b873e3e65d6ab328ae4afc6",
|
||||
"passed": 23,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/serve-restore.test.ts src/cli/handlers/serve-service.test.ts src/cli/handlers/skill-sharing.test.ts src/cli/handlers/speech.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0073-final-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-final-tests.log",
|
||||
"log_sha256": "7a9eeab91043d64f1069f1eb1d051f4f47f922a00b6df1983aa1826ad14ee1e4",
|
||||
"report": "/tmp/orca-root-0073-final-tests.json",
|
||||
"report_sha256": "f1cb954b1c06c6a8a237d833833528f01cad18bffb2e91a253466829505f70e1",
|
||||
"passed": 23,
|
||||
"failed": 0
|
||||
},
|
||||
{
|
||||
"name": "final-typecheck",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-final-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc"
|
||||
},
|
||||
{
|
||||
"name": "final-lint",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/handlers/serve-restore.test.ts src/cli/handlers/serve-service.test.ts src/cli/handlers/skill-sharing.test.ts src/cli/handlers/speech.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-final-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "final-format",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/handlers/serve-restore.test.ts src/cli/handlers/serve-service.test.ts src/cli/handlers/skill-sharing.test.ts src/cli/handlers/speech.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0073-final-format.log",
|
||||
"log_sha256": "35ee3988aac8bc6d864d11c4439e914cb311b470610a854a7fc0436d2abcdf6b"
|
||||
}
|
||||
],
|
||||
"mutations": [
|
||||
{
|
||||
"defect": "extra-publish-version",
|
||||
"production_path": "src/cli/handlers/skill-sharing.ts",
|
||||
"test_path": "src/cli/handlers/skill-sharing.test.ts",
|
||||
"original_production_sha256": "bf5845add572551a6f280cef5225e865991df4c45c19494c49ea524f1092ec44",
|
||||
"mutant_production_sha256": "3b538a71de43d1cdcf15c410b84c7c0317c0615ea2b99960e085ee937e0aab4c",
|
||||
"original_test_sha256": "7fb2a54a7cafd0c126cbd1752c89c106e40a51138987bd735ce09d230a588cce",
|
||||
"reviewed_test_sha256": "6a798e8b0e37b088c95a51c9ef50b1e7f9152d337b86edcdd20a47a724c731cd",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/skill-sharing.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-extra-publish-version-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 8,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "7fb2a54a7cafd0c126cbd1752c89c106e40a51138987bd735ce09d230a588cce",
|
||||
"production_sha256": "3b538a71de43d1cdcf15c410b84c7c0317c0615ea2b99960e085ee937e0aab4c",
|
||||
"report": "/tmp/orca-root-0073-extra-publish-version-original.json",
|
||||
"report_sha256": "e7407518c8e223c7c5ae06f3e9fcae3018269dc76da50ace6f8ac46fbd269617",
|
||||
"log": "/tmp/orca-root-0073-extra-publish-version-original.log",
|
||||
"log_sha256": "c366587a1a266d7de53d6c8e2e16f25f278ece76d05d796184244dc25aa65715"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/skill-sharing.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-extra-publish-version-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 7,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "publishes multiple explicit skills and prints only public output",
|
||||
"messages": [
|
||||
"AssertionError: expected { version: { …(3) }, …(6) } to deeply equal { …(6) }\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/skill-sharing.test.ts:142:39\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "6a798e8b0e37b088c95a51c9ef50b1e7f9152d337b86edcdd20a47a724c731cd",
|
||||
"production_sha256": "3b538a71de43d1cdcf15c410b84c7c0317c0615ea2b99960e085ee937e0aab4c",
|
||||
"report": "/tmp/orca-root-0073-extra-publish-version-reviewed.json",
|
||||
"report_sha256": "7753609cfdd60c114cade6a29bedb302896e14f1dd5aa97f43004e3aa32522b2",
|
||||
"log": "/tmp/orca-root-0073-extra-publish-version-reviewed.log",
|
||||
"log_sha256": "743fb765893f52d050dbf42e2cd17fbfa3edc975256d82b937650943380b812d"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
{
|
||||
"defect": "wrong-speech-upgrade-code",
|
||||
"production_path": "src/cli/handlers/speech.ts",
|
||||
"test_path": "src/cli/handlers/speech.test.ts",
|
||||
"original_production_sha256": "79e43816a4806ee25e288eda351dc43114bc605a719e68545aca731cab193551",
|
||||
"mutant_production_sha256": "6e780662fd25f82e514781a2a58becd74da677538d1efa71159df7a3a74acc53",
|
||||
"original_test_sha256": "ee511572cc3598a915acbcadbac22fa5ed1d4a531e7bbc91705f1d640f0af6f1",
|
||||
"reviewed_test_sha256": "88bfc162adacfe9e776d5967f3c943e19cf606c228ef82ffc9ce459b860db842",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/speech.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-wrong-speech-upgrade-code-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 4,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "ee511572cc3598a915acbcadbac22fa5ed1d4a531e7bbc91705f1d640f0af6f1",
|
||||
"production_sha256": "6e780662fd25f82e514781a2a58becd74da677538d1efa71159df7a3a74acc53",
|
||||
"report": "/tmp/orca-root-0073-wrong-speech-upgrade-code-original.json",
|
||||
"report_sha256": "2c85bf9226ca128e34b4a61f25a861c97cca4b49c2a3722aa7bd45f9e1fcf8b5",
|
||||
"log": "/tmp/orca-root-0073-wrong-speech-upgrade-code-original.log",
|
||||
"log_sha256": "e1536fcc03d351070ab727ff109b21a81cc36887986e722b21ad6d640ea85ce3"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/speech.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-wrong-speech-upgrade-code-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 3,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "names the update instead of surfacing method_not_found",
|
||||
"messages": [
|
||||
"Error: expected Error: This Orca server cannot store a vo… { …(2) } to match object { code: 'incompatible_runtime', …(1) }\n(1 matching property omitted from actual)\n at Assertion.__VITEST_REJECTS__ (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2480:33)\n at Assertion.propertyGetter (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1607:27)\n at Reflect.get (<anonymous>)\n at Object.proxyGetter [as get] (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1696:22)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/speech.test.ts:38:73\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "88bfc162adacfe9e776d5967f3c943e19cf606c228ef82ffc9ce459b860db842",
|
||||
"production_sha256": "6e780662fd25f82e514781a2a58becd74da677538d1efa71159df7a3a74acc53",
|
||||
"report": "/tmp/orca-root-0073-wrong-speech-upgrade-code-reviewed.json",
|
||||
"report_sha256": "5b215618f911862cf9f8f0b8354bd55644ab550b319c9297fb1fc959c7c9a5ca",
|
||||
"log": "/tmp/orca-root-0073-wrong-speech-upgrade-code-reviewed.log",
|
||||
"log_sha256": "cc6b2b118b1855e9289f7eb0eef6ec9eea90443ce482afb92ca10c2d0906438a"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
{
|
||||
"defect": "wrong-uninstall-unit",
|
||||
"production_path": "src/cli/handlers/serve-service.ts",
|
||||
"test_path": "src/cli/handlers/serve-service.test.ts",
|
||||
"original_production_sha256": "f2b43b8cf468a9ea4df8a53288cfc1dc4cd9acffa9bbbdcde455336d6adb4213",
|
||||
"mutant_production_sha256": "e6d4a9ddf5c4c401cea7807a57c412a2ebdad3807c3d59a2ad80ea4f37d82e31",
|
||||
"original_test_sha256": "f975e0e90980462a0ca79f242de386abd370433011133782c441cd2a69e956dd",
|
||||
"reviewed_test_sha256": "4c1ecc4dc8f6448daab7e228eb123310b3979f5344d8cc534a4fd23aba58e7b4",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/serve-service.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-wrong-uninstall-unit-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 9,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "f975e0e90980462a0ca79f242de386abd370433011133782c441cd2a69e956dd",
|
||||
"production_sha256": "e6d4a9ddf5c4c401cea7807a57c412a2ebdad3807c3d59a2ad80ea4f37d82e31",
|
||||
"report": "/tmp/orca-root-0073-wrong-uninstall-unit-original.json",
|
||||
"report_sha256": "01835a81370a3f6e4a22d1b2cfc6ba1a3409363d6b43e1248184948ff71726dd",
|
||||
"log": "/tmp/orca-root-0073-wrong-uninstall-unit-original.log",
|
||||
"log_sha256": "587edc469e8f7fc025cd9aadc9e250be0ea071cde98f9de057b8ca635835e838"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/serve-service.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0073-wrong-uninstall-unit-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 8,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "uninstalls by stopping the service and removing the unit",
|
||||
"messages": [
|
||||
"AssertionError: expected [ …(2) ] to deeply equal [ …(2) ]\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/serve-service.test.ts:118:19\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "4c1ecc4dc8f6448daab7e228eb123310b3979f5344d8cc534a4fd23aba58e7b4",
|
||||
"production_sha256": "e6d4a9ddf5c4c401cea7807a57c412a2ebdad3807c3d59a2ad80ea4f37d82e31",
|
||||
"report": "/tmp/orca-root-0073-wrong-uninstall-unit-reviewed.json",
|
||||
"report_sha256": "7ddb2f9b38b13685d3e405a8c8c45f8699b7883fed902a3cf4c6aaf2bbc248b9",
|
||||
"log": "/tmp/orca-root-0073-wrong-uninstall-unit-reviewed.log",
|
||||
"log_sha256": "5e79c779f013ceea65004fb088c2669eb8e2e310dcbd6d35917e38bad128db21"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
}
|
||||
],
|
||||
"corrected_initial_typecheck": {
|
||||
"exit_code": 1,
|
||||
"log": "/tmp/orca-root-0073-typecheck.log",
|
||||
"log_sha256": "85f5b1f99309da92e0dd4f8d56bcda762c94c120307613759b493198c6632dbc",
|
||||
"reason": "The generic ReturnType of overloaded vi.fn included a constructable mock; the context now accepts RuntimeClient.call directly. Final CLI typecheck passes."
|
||||
},
|
||||
"integrity": {
|
||||
"exact_original_case_slices_verified": 22,
|
||||
"exact_parameter_rows_verified": 2,
|
||||
"original_and_reviewed_hashes_verified": true,
|
||||
"production_restoration_verified": true,
|
||||
"original_snapshot_sha256": "d7266d30ac393a1a523460db269d5f755ad9d16c6388e22282597860aa6a5095",
|
||||
"plan_sha256": "00c7607db411c448d145f01e0aaeca44c7acc7cc0fda6e78943807467ccda99a"
|
||||
},
|
||||
"limitations": [
|
||||
"All twenty-two declarations and both explicit remote-environment table rows remain, expanding to twenty-three runtime cases.",
|
||||
"Real temporary unit, launcher and brake files ran on Linux; injected launchctl/systemctl/loginctl dependencies establish command construction and parsing, not native manager integration.",
|
||||
"The service-launcher title is corrected to profile skip and bare Linux CLI refusal; no mounted-AppImage input or coverage is claimed.",
|
||||
"Speech stdin tests cover concatenation, trimming, TTY, blank and post-read character overflow; they do not establish the early streaming-byte cap.",
|
||||
"Skill sharing uses a mocked runtime RPC. No actual publish, upload, credential use, socket or app launch occurred.",
|
||||
"Supporting source reads do not complete reviews of other pending tests."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"batch": "root-0074",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"files": 4,
|
||||
"original_declarations": 17,
|
||||
"final_declarations": 17,
|
||||
"original_explicit_parameter_rows": 6,
|
||||
"runtime_cases": 20,
|
||||
"decisions": {
|
||||
"keep": 14,
|
||||
"consolidate": 1,
|
||||
"fix": 2
|
||||
},
|
||||
"records_sha256": "423047d428a7c494e0167c5e8f817e61c4f38fcabd8374663d130aba2df33dd0",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal-daemon.test.ts src/cli/handlers/terminal-set-pane-title.test.ts src/cli/handlers/terminal-split.test.ts src/cli/handlers/terminal-switch-paired-reveal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0074-baseline-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-baseline-tests.log",
|
||||
"log_sha256": "c0d2e3a943929f68738540764f4c4c41557f08c9161df2eab67f715e2d63e836",
|
||||
"report": "/tmp/orca-root-0074-baseline-tests.json",
|
||||
"report_sha256": "4770fe845d7deaab699da41cfb267b9bd51a99f3fcd3a921cee6a630739f614e",
|
||||
"passed": 20,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "reviewed-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal-daemon.test.ts src/cli/handlers/terminal-set-pane-title.test.ts src/cli/handlers/terminal-split.test.ts src/cli/handlers/terminal-switch-paired-reveal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0074-reviewed-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-reviewed-tests.log",
|
||||
"log_sha256": "1976a35a452fe45d5d58bb3a8e8c490bae97ac289278cd50a22a43fff3b31523",
|
||||
"report": "/tmp/orca-root-0074-reviewed-tests.json",
|
||||
"report_sha256": "2872709eaee7168c67afc7f59145f2d2d0bb5c66a097fc8dc99e7de8ed74cf21",
|
||||
"passed": 20,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal-daemon.test.ts src/cli/handlers/terminal-set-pane-title.test.ts src/cli/handlers/terminal-split.test.ts src/cli/handlers/terminal-switch-paired-reveal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0074-final-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-final-tests.log",
|
||||
"log_sha256": "1a854eb5fefd35a6f644f405b35831aaf857056680bb7722f1e9729e325d0f75",
|
||||
"report": "/tmp/orca-root-0074-final-tests.json",
|
||||
"report_sha256": "f57ea8a8b1f3953d18f6af0db0609f867ed98161d4e6d8725ab56c2243e1dc46",
|
||||
"passed": 20,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "typecheck",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc"
|
||||
},
|
||||
{
|
||||
"name": "final-lint",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/handlers/terminal-daemon.test.ts src/cli/handlers/terminal-set-pane-title.test.ts src/cli/handlers/terminal-split.test.ts src/cli/handlers/terminal-switch-paired-reveal.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-final-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "final-format",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/handlers/terminal-daemon.test.ts src/cli/handlers/terminal-set-pane-title.test.ts src/cli/handlers/terminal-split.test.ts src/cli/handlers/terminal-switch-paired-reveal.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0074-final-format.log",
|
||||
"log_sha256": "35207f2f3e89aaf068e034763d42e61db5af1469492b58685c7fdd9b6f5aef93"
|
||||
}
|
||||
],
|
||||
"mutations": [
|
||||
{
|
||||
"defect": "dropped-retry-command",
|
||||
"production_path": "src/cli/handlers/terminal.ts",
|
||||
"test_path": "src/cli/handlers/terminal-split.test.ts",
|
||||
"original_production_sha256": "d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96",
|
||||
"mutant_production_sha256": "d1bd742ccfc0c1c6be7d59df757dd8df11c92852d237e5feffe040ea26e83a06",
|
||||
"original_test_sha256": "b5523bf17eff2b8463679147102da38e80964136e4c3457d74c5fda1d139b808",
|
||||
"reviewed_test_sha256": "93e0fd412d420df1bc2318c1b37a48dc9a28b54842dff04931e940eaeead6663",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal-split.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0074-dropped-retry-command-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 3,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "b5523bf17eff2b8463679147102da38e80964136e4c3457d74c5fda1d139b808",
|
||||
"production_sha256": "d1bd742ccfc0c1c6be7d59df757dd8df11c92852d237e5feffe040ea26e83a06",
|
||||
"report": "/tmp/orca-root-0074-dropped-retry-command-original.json",
|
||||
"report_sha256": "fcde3b332de8687c1921fb5725c6e9f95b5c1755efb66bdf2ee6dc8115aedbc8",
|
||||
"log": "/tmp/orca-root-0074-dropped-retry-command-original.log",
|
||||
"log_sha256": "186c28d7cb51ee88cea2d80da260d2894657234804420c90244011449b3351d7"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal-split.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0074-dropped-retry-command-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 2,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "sends the retry to a host that can resume the split",
|
||||
"messages": [
|
||||
"AssertionError: expected \"vi.fn()\" to be called once with arguments: [ 'terminal.split', \u2026(1) ]\n\nReceived:\n\n 1st vi.fn() call:\n\n [\n \"terminal.split\",\n {\n- \"command\": \"agent --task 1\",\n+ \"command\": undefined,\n \"direction\": undefined,\n \"retrySplit\": \"leaf-1\",\n \"terminal\": \"term_1\",\n },\n ]\n\n\nNumber of calls: 1\n\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2265:10)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:1958:14)\n at Proxy.methodWrapper (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1737:25)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/terminal-split.test.ts:52:18\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "93e0fd412d420df1bc2318c1b37a48dc9a28b54842dff04931e940eaeead6663",
|
||||
"production_sha256": "d1bd742ccfc0c1c6be7d59df757dd8df11c92852d237e5feffe040ea26e83a06",
|
||||
"report": "/tmp/orca-root-0074-dropped-retry-command-reviewed.json",
|
||||
"report_sha256": "b6723269a8509c1f4ced3bdb995a669f772b595722cb4f7fa0385881442118b8",
|
||||
"log": "/tmp/orca-root-0074-dropped-retry-command-reviewed.log",
|
||||
"log_sha256": "d090f2c0d0eb371448c0146faeebd52cff320b13db3d671fdeadb595a665a08e"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
{
|
||||
"defect": "skipped-unsuccessful-reveal",
|
||||
"production_path": "src/cli/handlers/terminal.ts",
|
||||
"test_path": "src/cli/handlers/terminal-switch-paired-reveal.test.ts",
|
||||
"original_production_sha256": "d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96",
|
||||
"mutant_production_sha256": "0b0dc4654fe040d70dc3f40d157a0fc1a083339032edc48cdaaf4c143d546103",
|
||||
"original_test_sha256": "7e5a5b68ca3661cc5e74709b1b182c14092c1e8a77b955c479d72590ba040d2b",
|
||||
"reviewed_test_sha256": "c10d50f619133b395c730bb2f5cd8d668c68e61559c1f7eb47273c26a4a84e3b",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal-switch-paired-reveal.test.ts",
|
||||
"-t",
|
||||
"keeps navigated false",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0074-skipped-unsuccessful-reveal-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "7e5a5b68ca3661cc5e74709b1b182c14092c1e8a77b955c479d72590ba040d2b",
|
||||
"production_sha256": "0b0dc4654fe040d70dc3f40d157a0fc1a083339032edc48cdaaf4c143d546103",
|
||||
"report": "/tmp/orca-root-0074-skipped-unsuccessful-reveal-original.json",
|
||||
"report_sha256": "c5774c6cb12abd611cbab8f741e581855a0066826a0a826bf135bf1b9a6d9b16",
|
||||
"log": "/tmp/orca-root-0074-skipped-unsuccessful-reveal-original.log",
|
||||
"log_sha256": "1096f572f782c983f0d127b261681cc2074db5179d7e7b5637a1bfab534b7b17"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal-switch-paired-reveal.test.ts",
|
||||
"-t",
|
||||
"keeps navigated false",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0074-skipped-unsuccessful-reveal-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "keeps navigated false when no local desktop shows that environment",
|
||||
"messages": [
|
||||
"AssertionError: expected \"vi.fn()\" to be called once with arguments: [ ObjectContaining{\u2026}, 'term-1' ]\n\nNumber of calls: 0\n\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2265:10)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:1958:14)\n at Proxy.methodWrapper (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1737:25)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/terminal-switch-paired-reveal.test.ts:61:54\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "c10d50f619133b395c730bb2f5cd8d668c68e61559c1f7eb47273c26a4a84e3b",
|
||||
"production_sha256": "0b0dc4654fe040d70dc3f40d157a0fc1a083339032edc48cdaaf4c143d546103",
|
||||
"report": "/tmp/orca-root-0074-skipped-unsuccessful-reveal-reviewed.json",
|
||||
"report_sha256": "e0b76b2c9958f68e4c7fa249ad7d27e530ee9eb136a7d74d928e484c460ba542",
|
||||
"log": "/tmp/orca-root-0074-skipped-unsuccessful-reveal-reviewed.log",
|
||||
"log_sha256": "1567188986d2f235834e1976efdaff1096662bc5cc9104e02c1f773cff5d91ca"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
}
|
||||
],
|
||||
"integrity": {
|
||||
"exact_original_case_slices_verified": 17,
|
||||
"exact_parameter_rows_verified": 6,
|
||||
"original_and_reviewed_hashes_verified": true,
|
||||
"production_restoration_verified": true,
|
||||
"original_snapshot_sha256": "16901cc670b78cdf2f7769e3ecddf175bf153540c6ec0ecdebccddeacfe3675d",
|
||||
"plan_sha256": "811787c67a35851492d672001c48cb6053426bdae0948f0583787193d357aab4"
|
||||
},
|
||||
"limitations": [
|
||||
"All seventeen declarations and six explicit table rows remain, expanding to twenty passing runtime cases.",
|
||||
"Tests run in Linux with mocked runtime RPC, status and desktop-reveal adapter; no actual terminal split, native focus, window reveal or application launch occurred.",
|
||||
"The skipped-reveal mutation deliberately selects only the unsuccessful-fallback case: its original version passes and its reviewed version fails. Other routing cases are covered by the full suite, not claimed as mutation passes.",
|
||||
"The capability constant is a negotiation input; these cases prove retry admission and command forwarding, not protocol-registry completeness.",
|
||||
"Raw spec-usage assertions moved into the actual printed command-help path.",
|
||||
"Supporting source reads do not complete reviews of other pending suites."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{"path":"src/cli/handlers/terminal-daemon.test.ts","sha256":"777f5509389b90c616ed47f63c179654354411d97c5b195bede59479baa935e4","reviewed_sha256":"777f5509389b90c616ed47f63c179654354411d97c5b195bede59479baa935e4","source_commit":"88b47bc7d8785e615b2e79a5dc75ab1991cc2265","reviewer":"root","status":"reviewed","decision":"keep","classification":"Terminal-daemon liveness and severed-process recovery text","rationale":"Retain seven independent output controls for live/exited/unverifiable and old hosts, process-ceiling states, severed sessions and explicit restart consequences. These formatter tests do not claim process liveness integration.","evidence":["src/cli/handlers/terminal-daemon.ts","src/shared/pty-process-ceiling-state.ts"],"evidence_sha256":{"src/cli/handlers/terminal-daemon.ts":"e1d9e06263a59133a909b6d82c08759cb184585c4359052050d13b9415752be2","src/shared/pty-process-ceiling-state.ts":"02d2cd410ea6a62c7b44b16498a60877c36b38af692de8a82a97b3c314a4595e"},"evidence_source_sha256":{"src/cli/handlers/terminal-daemon.ts":"e1d9e06263a59133a909b6d82c08759cb184585c4359052050d13b9415752be2","src/shared/pty-process-ceiling-state.ts":"02d2cd410ea6a62c7b44b16498a60877c36b38af692de8a82a97b3c314a4595e"},"cases":[{"line":17,"title":"reports a live daemon and its process ceiling","start":389,"end":703,"source_sha256":"19ced75360c7d14aabdc5143506aaaf68ed3ce86194f520b894412bbe05d025f","decision":"keep","reason":"The concrete live PID and enabled 200-process ceiling must appear, without the misleading historical OK result.","parameter_inputs":[]},{"line":24,"title":"reports a ceiling that is off and why","start":707,"end":1001,"source_sha256":"961a0ef19818309206da12fdba588530a7033e51d90cba43c7430dad8f217e56","decision":"keep","reason":"A disabled ceiling must expose its concrete no-user-manager reason.","parameter_inputs":[]},{"line":32,"title":"never says OK for a daemon that is gone","start":1005,"end":1497,"source_sha256":"f3f8a03811a87cd0b11fe273f1eeca0b8b5937427c0a1200b8bc38e5f002e8ab","decision":"keep","reason":"An exited PID must show exit and next-terminal guidance without stale OK or ceiling text.","parameter_inputs":[]},{"line":48,"title":"reports unverifiable when the host cannot prove either way","start":1501,"end":1884,"source_sha256":"e47b775e66b95c4078cf81c8471d2dcce4181a7cbc42739c5505146c80b3eab1","decision":"keep","reason":"Unverifiable liveness must preserve the concrete PID and inability-to-answer detail.","parameter_inputs":[]},{"line":61,"title":"says liveness is unverifiable against a host that does not report it","start":1888,"end":2117,"source_sha256":"056e2870344aec1e5f38f3b7ee60e110a17c84f46e7631830e20bdc29ff45f46","decision":"keep","reason":"An older host omitting daemon liveness must report unverifiable instead of assuming OK.","parameter_inputs":[]},{"line":67,"title":"says a restart ends running processes and only resumable agents come back","start":2121,"end":2627,"source_sha256":"f9f79f0a8ff85fa13106923342e62e710274a892097c63ef73a48f6d8b38d55f","decision":"keep","reason":"A severed daemon with three sessions must show its PID, process-ending consequence and distinct resumable-agent versus shell recovery guidance.","parameter_inputs":[]},{"line":79,"title":"does not describe an exited severed daemon as still hosting terminals","start":2631,"end":3056,"source_sha256":"0cd2f6250a4c0eb768268a3f9d1029535049867ab1206c30ea58957d83a9d649","decision":"keep","reason":"An exited daemon with stale severed metadata must not claim it still hosts terminals.","parameter_inputs":[]}],"original_declarations":7,"final_declarations":7,"validation":"reviews/root-0074-validation.json"}
|
||||
{"path":"src/cli/handlers/terminal-set-pane-title.test.ts","sha256":"44911b0d72d37fe02590b4ee80aff409dd8dfb570e24882d7f5be798d85a1d5e","reviewed_sha256":"e32fe0fd8af85fdb69ee8e63033adac4eff51dcc74831c119d79292bc7bfc9be","source_commit":"88b47bc7d8785e615b2e79a5dc75ab1991cc2265","reviewer":"root","status":"reviewed","decision":"consolidate","classification":"Pane-title RPC validation and printed command help","rationale":"Keep all four declarations and four explicit title/omitted-title rows. Move direct spec-usage assertions into actual printHelp output, retaining required-title/reset guidance and avoiding parallel raw-inventory assertions.","evidence":["src/cli/handlers/terminal.ts","src/cli/help.ts","src/cli/specs/terminal-set-pane-title.ts","src/cli/flags.ts","src/cli/selectors.ts"],"evidence_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/help.ts":"7833f058dafd74316b80ea310f2f0827556462c0019b9f45b4b84648f8a334a0","src/cli/specs/terminal-set-pane-title.ts":"3a0de75f3ad72400f1a973e55aeb16b65517710b362b81e0cce44d6001a9b8ee","src/cli/flags.ts":"349612a17cb9f8ee9c40a423ede075719327a4a05a6071df3059052f05a14125","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259"},"evidence_source_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/help.ts":"7833f058dafd74316b80ea310f2f0827556462c0019b9f45b4b84648f8a334a0","src/cli/specs/terminal-set-pane-title.ts":"3a0de75f3ad72400f1a973e55aeb16b65517710b362b81e0cce44d6001a9b8ee","src/cli/flags.ts":"349612a17cb9f8ee9c40a423ede075719327a4a05a6071df3059052f05a14125","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259"},"cases":[{"line":11,"title":"sends an explicit title %j to the pane method","start":377,"end":1390,"source_sha256":"a9451a8294e8072b219c9d77208205adfaf683158cff46a66935f883e17745aa","decision":"keep","reason":"Both REVIEWER and explicit empty title go through actual parsing to the pane-specific RPC with exact terminal/title payload; printed response preserves set/reset semantics.","parameter_inputs":[{"line":11,"expression":"'REVIEWER'","row":1,"source_sha256":"fa282eda0328ee2cf5e742970dd847e97eee9be9a56bd518c30a468e331b9baf"},{"line":11,"expression":"''","row":2,"source_sha256":"6f49cdbd80e1b95d5e6427e1501fc217790daee87055fa5b4e71064288bddede"}]},{"line":45,"title":"refuses a missing title before resolving a terminal (%j)","start":1394,"end":1979,"source_sha256":"94a3fe6f08a5396f691f9507a093eda129ea1f7142bd52fade56e372a7bdd5c8","decision":"keep","reason":"Both omitted title and valueless title must reject invalid_argument before resolving a terminal or invoking any RPC.","parameter_inputs":[{"line":45,"expression":"{ args: [] }","row":1,"source_sha256":"95f9ed9c5e522df7a8eeb1eb0107db77eb81e3d6f12f6027112fc0eba66d9eb5"},{"line":45,"expression":"{ args: ['--title'] }","row":2,"source_sha256":"329c6adba18b4fdea320eed5ff0759f9c5c6768ebfe8c12eb8889a2a60c76148"}]},{"line":63,"title":"propagates an older host refusal without falling back to tab rename","start":1983,"end":2589,"source_sha256":"37981e8de7f44ba392976630d31aa7229840725a90ad7f75defa82356548eb94","decision":"keep","reason":"A typed older-host method_not_found refusal must propagate after one call, preventing a tab-rename fallback.","parameter_inputs":[]},{"line":82,"title":"documents a required pane-scoped title and explicit clearing","start":2593,"end":3176,"source_sha256":"2f298dca28a0adcfb0984e05392507e56ce9afab572f3cbba161864b0812368f","decision":"consolidate","reason":"Require required-title usage and pane-scoped explicit-reset guidance in actual command help; remove direct raw-spec lookup/usage assertions that duplicate the printed path.","parameter_inputs":[]}],"original_declarations":4,"final_declarations":4,"validation":"reviews/root-0074-validation.json"}
|
||||
{"path":"src/cli/handlers/terminal-split.test.ts","sha256":"b5523bf17eff2b8463679147102da38e80964136e4c3457d74c5fda1d139b808","reviewed_sha256":"93e0fd412d420df1bc2318c1b37a48dc9a28b54842dff04931e940eaeead6663","source_commit":"88b47bc7d8785e615b2e79a5dc75ab1991cc2265","reviewer":"root","status":"reviewed","decision":"fix","classification":"Split retry capability negotiation and command preservation","rationale":"Keep all three declarations; replace a structural double/cast with an actual RuntimeClient and complete checked status response. The admitted retry now requires exactly one complete split RPC including the original command, rather than only terminal/retry IDs.","evidence":["src/cli/handlers/terminal.ts","src/cli/flags.ts","src/cli/selectors.ts","src/cli/runtime/client.ts","src/cli/runtime/status.ts","src/shared/runtime-session-contracts.ts"],"evidence_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/flags.ts":"349612a17cb9f8ee9c40a423ede075719327a4a05a6071df3059052f05a14125","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259","src/cli/runtime/client.ts":"c4c1f46b104c735c5aaca645d27bc2ff06d5e07fcbfc6bf4abdcda274c60db7a","src/cli/runtime/status.ts":"535ddaeeba36bff01ff4f9c90b0fe2c9c8911d5adb44def565becfe709c2abf6","src/shared/runtime-session-contracts.ts":"bcb48d72fded5e4ad080cb7d3791b66594810241bf1585c44310edddaeaf2e8f"},"evidence_source_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/flags.ts":"349612a17cb9f8ee9c40a423ede075719327a4a05a6071df3059052f05a14125","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259","src/cli/runtime/client.ts":"c4c1f46b104c735c5aaca645d27bc2ff06d5e07fcbfc6bf4abdcda274c60db7a","src/cli/runtime/status.ts":"535ddaeeba36bff01ff4f9c90b0fe2c9c8911d5adb44def565becfe709c2abf6","src/shared/runtime-session-contracts.ts":"bcb48d72fded5e4ad080cb7d3791b66594810241bf1585c44310edddaeaf2e8f"},"cases":[{"line":36,"title":"sends the retry to a host that can resume the split","start":1216,"end":1730,"source_sha256":"d365a6e556815570854bb61d09c7a23520c74605ca08951ec0cb3c53a72ac96d","decision":"fix","reason":"An admitted retry must send exactly the terminal, original agent command, optional direction and leaf retry identity once. Dropping only the command passes the original partial payload assertion and fails this reviewed case.","parameter_inputs":[]},{"line":51,"title":"refuses rather than splitting again on a host without the capability","start":1830,"end":2103,"source_sha256":"2f71166b4f1e8cdf2bc9d2e23378109a20b0111968984ed2f3eff13fde4de626","decision":"keep","reason":"A reachable older host without the capability must refuse the retry before terminal.split, preventing a duplicate command launch.","parameter_inputs":[]},{"line":61,"title":"refuses a blank retry id instead of making a fresh split","start":2206,"end":2493,"source_sha256":"3a29e71fab6d3df711c4c0883caf3a96119d2428cece5b4faf412b539b7769d0","decision":"keep","reason":"An explicitly blank retry ID must reject before any split RPC, rather than becoming a fresh split.","parameter_inputs":[]}],"original_declarations":3,"final_declarations":3,"validation":"reviews/root-0074-validation.json"}
|
||||
{"path":"src/cli/handlers/terminal-switch-paired-reveal.test.ts","sha256":"7e5a5b68ca3661cc5e74709b1b182c14092c1e8a77b955c479d72590ba040d2b","reviewed_sha256":"c10d50f619133b395c730bb2f5cd8d668c68e61559c1f7eb47273c26a4a84e3b","source_commit":"88b47bc7d8785e615b2e79a5dc75ab1991cc2265","reviewer":"root","status":"reviewed","decision":"fix","classification":"Paired-runtime desktop-reveal adapter routing","rationale":"Keep all three declarations and both local/already-navigated table rows. Replace the structural client cast with a RuntimeClient and typed call/getter spies; require an attempted fallback even when it returns false, so echoed false is not mistaken for attempted navigation.","evidence":["src/cli/handlers/terminal.ts","src/cli/paired-terminal-desktop-reveal.ts","src/cli/selectors.ts","src/cli/runtime/client.ts"],"evidence_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/paired-terminal-desktop-reveal.ts":"735b3279c537a4376a5bdede9d4d0e812f8c0071107b198a8e77f4d81d9e00eb","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259","src/cli/runtime/client.ts":"c4c1f46b104c735c5aaca645d27bc2ff06d5e07fcbfc6bf4abdcda274c60db7a"},"evidence_source_sha256":{"src/cli/handlers/terminal.ts":"d28b29ea922c4e37660641a9d88b943fb8747a4605864b6326b6c0c31f396b96","src/cli/paired-terminal-desktop-reveal.ts":"735b3279c537a4376a5bdede9d4d0e812f8c0071107b198a8e77f4d81d9e00eb","src/cli/selectors.ts":"26e124328769c825047780114ca14cdb99fb8850f59a4e92665f84781ad43259","src/cli/runtime/client.ts":"c4c1f46b104c735c5aaca645d27bc2ff06d5e07fcbfc6bf4abdcda274c60db7a"},"cases":[{"line":39,"title":"shows the terminal in the local desktop when the windowless server cannot (#24688)","start":1314,"end":1954,"source_sha256":"a804e7ff5b6323dd69c1d1402fbf9339bc68e7c2e7c9041ba6cda88dcbd78b69","decision":"keep","reason":"An unsuccessful remote host focus must request host navigation, invoke the local reveal adapter with the remote client/terminal and merge its true result into printed output.","parameter_inputs":[]},{"line":53,"title":"keeps navigated false when no local desktop shows that environment","start":1958,"end":2327,"source_sha256":"f29098ec506c3e6f61497440fd1a4000e6a9283ad78bf7668fa6ea3bc21d1758","decision":"fix","reason":"When local reveal returns false, require the adapter to be called exactly once with the intended remote client/terminal and preserve false. A focused mutation run proves the original case passes if reveal is skipped, while this reviewed case fails.","parameter_inputs":[]},{"line":62,"title":"leaves %s alone","start":2331,"end":2811,"source_sha256":"5cb1420baa05e4fc804a276ada4d920fdc9aac6190e760b770c7e6e4880c8ef2","decision":"keep","reason":"Both local non-navigation and already-navigated remote host rows must skip fallback and preserve their respective focus verdicts.","parameter_inputs":[{"line":63,"expression":"['a local terminal the host could not navigate to', false, false]","row":1,"source_sha256":"9eba061c4f5ad437349fb76c13e5c3dc2e7e3b90224c4d6b32a512d112b517d5"},{"line":64,"expression":"['a remote host that navigated itself', true, true]","row":2,"source_sha256":"d185678aa3264e19b13a8ec8c0001100c6ad3ef6d3d540a196ef36fe76218142"}]}],"original_declarations":3,"final_declarations":3,"validation":"reviews/root-0074-validation.json"}
|
||||
@@ -0,0 +1,229 @@
|
||||
{
|
||||
"batch": "root-0075",
|
||||
"source_commit": "88b47bc7d8785e615b2e79a5dc75ab1991cc2265",
|
||||
"files": 1,
|
||||
"original_declarations": 26,
|
||||
"final_declarations": 26,
|
||||
"original_explicit_parameter_rows": 10,
|
||||
"runtime_cases": 33,
|
||||
"decisions": {
|
||||
"keep": 21,
|
||||
"fix": 3,
|
||||
"consolidate": 2
|
||||
},
|
||||
"records_sha256": "faf0c36b4250863129058ef08c7f8c6f041e6869a24320e2b10059f7c4a39399",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0075-baseline-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-baseline-tests.log",
|
||||
"log_sha256": "118afb46e306d1d051167705ba2ad39209ca34ad472557298c1156a4d83ff929",
|
||||
"report": "/tmp/orca-root-0075-baseline-tests.json",
|
||||
"report_sha256": "b7755bec2575008da29feb8586474cf6684b0182422d372e8b785a6a7aefd197",
|
||||
"passed": 33,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "reviewed-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0075-reviewed-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-reviewed-tests.log",
|
||||
"log_sha256": "cffcab09a4775eac30be1f50212533acf7be73b7f33827659cb8805a28fe3185",
|
||||
"report": "/tmp/orca-root-0075-reviewed-tests.json",
|
||||
"report_sha256": "f8eb8f357e054aa88d08dc2836cf8707836baf5c82d7901af0e2d24471d25399",
|
||||
"passed": 33,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/terminal.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0075-final-tests.json",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-final-tests.log",
|
||||
"log_sha256": "5ea367c671c31b0651e51ad7acaeca78afd13f8a6844cd696aa86ebe7de52190",
|
||||
"report": "/tmp/orca-root-0075-final-tests.json",
|
||||
"report_sha256": "d313231f350ebc9fed32128a0f6594dc5b9e525cc6bf30c825c979b686b2b161",
|
||||
"passed": 33,
|
||||
"failed": 0,
|
||||
"skipped": 0
|
||||
},
|
||||
{
|
||||
"name": "typecheck",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc"
|
||||
},
|
||||
{
|
||||
"name": "lint",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/handlers/terminal.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"name": "format",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/handlers/terminal.test.ts",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0075-format.log",
|
||||
"log_sha256": "40b223ad82c15debd657ab48f9473de002f232b3b9952793cf227fcea706bc3e"
|
||||
}
|
||||
],
|
||||
"mutations": [
|
||||
{
|
||||
"defect": "wrong-bulk-close-method",
|
||||
"production_path": "src/cli/handlers/terminal-close.ts",
|
||||
"test_path": "src/cli/handlers/terminal.test.ts",
|
||||
"original_production_sha256": "af0cd1c7e113b4c158a5a0996399e8acee70b47576fac26b0dd6e35ce97e3bbd",
|
||||
"mutant_production_sha256": "d564cae40d83c8f850d26159bdee0f95347e6d234521c558a01f42feb3efc9f8",
|
||||
"original_test_sha256": "5cabc0c0cd7c6f4e15b0ae6bc7b48127b5dddb53364e2bbff553eb3f83a4b11c",
|
||||
"reviewed_test_sha256": "937a39e0d3ce1db894793c510030928f7cc9952eea0f224bc617632e62eb74fa",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal.test.ts",
|
||||
"-t",
|
||||
"fails safely before mutation when the host predates bulk close",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0075-wrong-bulk-close-method-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "5cabc0c0cd7c6f4e15b0ae6bc7b48127b5dddb53364e2bbff553eb3f83a4b11c",
|
||||
"production_sha256": "d564cae40d83c8f850d26159bdee0f95347e6d234521c558a01f42feb3efc9f8",
|
||||
"report": "/tmp/orca-root-0075-wrong-bulk-close-method-original.json",
|
||||
"report_sha256": "9b65e3974f9f25074f2b7be22c8e8090d06bc5f569a5eb444c443b9d7a5a0672",
|
||||
"log": "/tmp/orca-root-0075-wrong-bulk-close-method-original.log",
|
||||
"log_sha256": "8ed30fda5dc9a3b6af9f25da652193fb16b1abea481554d644170a090ceff695"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal.test.ts",
|
||||
"-t",
|
||||
"fails safely before mutation when the host predates bulk close",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0075-wrong-bulk-close-method-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "fails safely before mutation when the host predates bulk close",
|
||||
"messages": [
|
||||
"AssertionError: expected \"vi.fn()\" to be called once with arguments: [ 'terminal.closeAll', \u2026(1) ]\n\nReceived:\n\n 1st vi.fn() call:\n\n [\n- \"terminal.closeAll\",\n+ \"terminal.closeAll-wrong\",\n {\n \"worktree\": \"id:repo::/worktree\",\n },\n ]\n\n\nNumber of calls: 1\n\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2265:10)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:1958:14)\n at Proxy.methodWrapper (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1737:25)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/terminal.test.ts:262:18\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "937a39e0d3ce1db894793c510030928f7cc9952eea0f224bc617632e62eb74fa",
|
||||
"production_sha256": "d564cae40d83c8f850d26159bdee0f95347e6d234521c558a01f42feb3efc9f8",
|
||||
"report": "/tmp/orca-root-0075-wrong-bulk-close-method-reviewed.json",
|
||||
"report_sha256": "35545ba9dabfa4b6c11a0a6e7ee8a265ddf699e8c8f45d2e341abecbdef68e1a",
|
||||
"log": "/tmp/orca-root-0075-wrong-bulk-close-method-reviewed.log",
|
||||
"log_sha256": "20db840aac4811c1c5b14c6bd0b0b51fadf56ba3a5c9c289f247ddc0c9575451"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
{
|
||||
"defect": "unprinted-legacy-receipt",
|
||||
"production_path": "src/cli/handlers/terminal-send.ts",
|
||||
"test_path": "src/cli/handlers/terminal.test.ts",
|
||||
"original_production_sha256": "81dd60339ec2e08180a2f362fe95325309104d1ac5147d19e8f176476d60b972",
|
||||
"mutant_production_sha256": "de4e718b9178f25f1f50d28772d249e2424c00d5f36ea0320596175049753f1d",
|
||||
"original_test_sha256": "5cabc0c0cd7c6f4e15b0ae6bc7b48127b5dddb53364e2bbff553eb3f83a4b11c",
|
||||
"reviewed_test_sha256": "937a39e0d3ce1db894793c510030928f7cc9952eea0f224bc617632e62eb74fa",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal.test.ts",
|
||||
"-t",
|
||||
"labels an old-host response as non-idempotent without claiming submission",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0075-unprinted-legacy-receipt-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "5cabc0c0cd7c6f4e15b0ae6bc7b48127b5dddb53364e2bbff553eb3f83a4b11c",
|
||||
"production_sha256": "de4e718b9178f25f1f50d28772d249e2424c00d5f36ea0320596175049753f1d",
|
||||
"report": "/tmp/orca-root-0075-unprinted-legacy-receipt-original.json",
|
||||
"report_sha256": "74d431621f973e45548c7ab731d5a5d2b5438f1e95e3adaf4d4b51090ad93fb4",
|
||||
"log": "/tmp/orca-root-0075-unprinted-legacy-receipt-original.log",
|
||||
"log_sha256": "7d219894d96be53d52ca7a7b136c17b40fed766758aeb738f4860ac49090a392"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/handlers/terminal.test.ts",
|
||||
"-t",
|
||||
"labels an old-host response as non-idempotent without claiming submission",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0075-unprinted-legacy-receipt-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "labels an old-host response as non-idempotent without claiming submission",
|
||||
"messages": [
|
||||
"AssertionError: expected undefined to deeply equal { \u2026(7) }\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/handlers/terminal.test.ts:607:75\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "937a39e0d3ce1db894793c510030928f7cc9952eea0f224bc617632e62eb74fa",
|
||||
"production_sha256": "de4e718b9178f25f1f50d28772d249e2424c00d5f36ea0320596175049753f1d",
|
||||
"report": "/tmp/orca-root-0075-unprinted-legacy-receipt-reviewed.json",
|
||||
"report_sha256": "02d6cdad3fb5e04e48a09d24c04450d29d1ff4e6c13be6e9f598a128773afa74",
|
||||
"log": "/tmp/orca-root-0075-unprinted-legacy-receipt-reviewed.log",
|
||||
"log_sha256": "06930a5ae4b0d2184ab7dbcc53ec4c728adb11d4366f05720bb5251300ebffeb"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
}
|
||||
],
|
||||
"integrity": {
|
||||
"exact_original_case_slices_verified": 26,
|
||||
"exact_parameter_rows_verified": 10,
|
||||
"original_and_reviewed_hashes_verified": true,
|
||||
"production_restoration_verified": true,
|
||||
"original_snapshot_sha256": "6c96569c94bcad40ae39dba4ef96ea6631f85d1df84d5545d0c19b05c6c6b73f",
|
||||
"plan_sha256": "b5aac7d0aa080789dd73796829462c43984bb2e3316d6604c789b785c137201b"
|
||||
},
|
||||
"limitations": [
|
||||
"All 26 declarations and ten explicit table rows remain, expanding to 33 runtime cases. Text-only/bare-Enter and failed/retried send sequences remain separate within-case controls.",
|
||||
"Both mutations select only the intended individual case. Each original case passes and each reviewed case fails; no whole-suite mutation result is claimed. The final whole suite passes after restoring production.",
|
||||
"RuntimeClient.call and optional full status response are mocked on Linux; no real PTY close, prompt delivery, shell spawn, socket, native focus or application launch is claimed.",
|
||||
"The original bulk-close compatibility case failed during active-worktree lookup. It now uses an explicit identity and verifies that the refusal is from the intended bulk-close RPC.",
|
||||
"The legacy accepted prompt receipt is now inspected in printed JSON. The permission-refusal case retains its exact human output, with its title narrowed to that observable result.",
|
||||
"Redundant checks of absent fields on injected response objects were removed after preserving error/output controls.",
|
||||
"Supporting source reads do not complete reviews of other pending suites."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,216 @@
|
||||
{
|
||||
"batch": "root-0076",
|
||||
"source_commit": "f1157821ce03d7c59323f95a4bac521f13bb841e",
|
||||
"files": 2,
|
||||
"original_declarations": 31,
|
||||
"final_declarations": 31,
|
||||
"original_explicit_parameter_rows": 15,
|
||||
"runtime_cases": 42,
|
||||
"decisions": {
|
||||
"keep": 25,
|
||||
"fix": 6
|
||||
},
|
||||
"records_sha256": "9a599a8e9bf6e8e70a78345e8853ca272d7d40a4627fb149ce81b4f4aa13a71a",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-baseline-tests.log",
|
||||
"log_sha256": "f2845bc80091c3230762e3d867680edb54616360624d92c610f564b8378f9617",
|
||||
"report": "/tmp/orca-root-0076-baseline-tests.json",
|
||||
"report_sha256": "abd99f607a0ff167c0c28e63100045c7efafe2c6938081d6ec5b5bf83326fa0b",
|
||||
"passed": 42,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/worktree-gitlab-link.test.ts src/cli/host-selector-alternatives.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0076-baseline-tests.json"
|
||||
},
|
||||
{
|
||||
"name": "reviewed-tests",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-reviewed-tests.log",
|
||||
"log_sha256": "d372fe8063bea759efbfc3c7c3b08f6a0d401393a8e1a47dc9670020718e8389",
|
||||
"report": "/tmp/orca-root-0076-reviewed-tests.json",
|
||||
"report_sha256": "f238e5bd31a1e0dfbd75b5f8331640be7fb0285eed57135a9090233f73ee3b6c",
|
||||
"passed": 42,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/worktree-gitlab-link.test.ts src/cli/host-selector-alternatives.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0076-reviewed-tests.json"
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-final-tests.log",
|
||||
"log_sha256": "a6a119c0c5d12f6d240746056b5103bd66a4d873012067d860e3a35eae00ae26",
|
||||
"report": "/tmp/orca-root-0076-final-tests.json",
|
||||
"report_sha256": "1564867f71ab410cfa9db06d5e56368d9eeb5fec6dc9c85510fe32b193cae47b",
|
||||
"passed": 42,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/handlers/worktree-gitlab-link.test.ts src/cli/host-selector-alternatives.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0076-final-tests.json"
|
||||
},
|
||||
{
|
||||
"name": "typecheck",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli"
|
||||
},
|
||||
{
|
||||
"name": "lint",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/handlers/worktree-gitlab-link.test.ts src/cli/host-selector-alternatives.test.ts"
|
||||
},
|
||||
{
|
||||
"name": "format",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0076-format.log",
|
||||
"log_sha256": "f7d4472c764bac071baf02327ea2896a18dbfba33f5bda7f35e855a39e61f8f4",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/handlers/worktree-gitlab-link.test.ts src/cli/host-selector-alternatives.test.ts"
|
||||
}
|
||||
],
|
||||
"mutations": [
|
||||
{
|
||||
"defect": "wrong-unknown-target-error-code",
|
||||
"production_path": "src/cli/host-selector-alternatives.ts",
|
||||
"test_path": "src/cli/host-selector-alternatives.test.ts",
|
||||
"original_production_sha256": "baf6d2f05cd5615c1e14bc9b6f77d1691084ccc984cb1dd19df36bacfa86e047",
|
||||
"mutant_production_sha256": "a2ca75c509a6363eff025f9e4deac8855e5be5937086586d5645ee27a9b28bf8",
|
||||
"original_test_sha256": "c6f43603bc7dfd0783b55fcca09c911276271a7c73e7a917f49529e38a2f6fe2",
|
||||
"reviewed_test_sha256": "f9bccc3fd42deb446f1bb1137cc996fe0a01b5151b37fa4b08bb317593418f3e",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/host-selector-alternatives.test.ts",
|
||||
"-t",
|
||||
"rejects an unknown target instead of letting it filter to nothing",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0076-wrong-unknown-target-error-code-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "c6f43603bc7dfd0783b55fcca09c911276271a7c73e7a917f49529e38a2f6fe2",
|
||||
"production_sha256": "a2ca75c509a6363eff025f9e4deac8855e5be5937086586d5645ee27a9b28bf8",
|
||||
"report": "/tmp/orca-root-0076-wrong-unknown-target-error-code-original.json",
|
||||
"report_sha256": "8df7477c3beae09fa3d88be85aa7b26a3eddf6c51b466edf6e1ee55f47df184d",
|
||||
"log": "/tmp/orca-root-0076-wrong-unknown-target-error-code-original.log",
|
||||
"log_sha256": "3bfded2c06173bad28f3e7e5fc0e9797cbf80e38ee92fb176a04cdbfbc3fff82"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/host-selector-alternatives.test.ts",
|
||||
"-t",
|
||||
"rejects an unknown target instead of letting it filter to nothing",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0076-wrong-unknown-target-error-code-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "rejects an unknown target instead of letting it filter to nothing",
|
||||
"messages": [
|
||||
"Error: expected Error: Unknown SSH target in --host ssh:n\u2026 { \u2026(2) } to match object { code: 'invalid_argument', \u2026(1) }\n(4 matching properties omitted from actual)\n at Assertion.__VITEST_REJECTS__ (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2480:33)\n at Assertion.propertyGetter (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1607:27)\n at Reflect.get (<anonymous>)\n at Object.proxyGetter [as get] (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1696:22)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/host-selector-alternatives.test.ts:85:6\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:1632:35\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:26\n at file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3338:20\n at new Promise (<anonymous>)\n at runWithCancel (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:3333:10)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "f9bccc3fd42deb446f1bb1137cc996fe0a01b5151b37fa4b08bb317593418f3e",
|
||||
"production_sha256": "a2ca75c509a6363eff025f9e4deac8855e5be5937086586d5645ee27a9b28bf8",
|
||||
"report": "/tmp/orca-root-0076-wrong-unknown-target-error-code-reviewed.json",
|
||||
"report_sha256": "1c117fda85477daf01691747f0a31d5690d58820af1da8b01f7da2c721b39b51",
|
||||
"log": "/tmp/orca-root-0076-wrong-unknown-target-error-code-reviewed.log",
|
||||
"log_sha256": "c8fb77bb1a78600b6997e1255ff93ce5b617fef6f19eaadbe01b25c1f5e76cac"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
},
|
||||
{
|
||||
"defect": "fallback-on-unrelated-error",
|
||||
"production_path": "src/cli/host-selector-alternatives.ts",
|
||||
"test_path": "src/cli/host-selector-alternatives.test.ts",
|
||||
"original_production_sha256": "baf6d2f05cd5615c1e14bc9b6f77d1691084ccc984cb1dd19df36bacfa86e047",
|
||||
"mutant_production_sha256": "c861df45dae838b7010bc04ca8bb2ff4a3eaa3dcc2f0ad647b13007ab03df44a",
|
||||
"original_test_sha256": "c6f43603bc7dfd0783b55fcca09c911276271a7c73e7a917f49529e38a2f6fe2",
|
||||
"reviewed_test_sha256": "f9bccc3fd42deb446f1bb1137cc996fe0a01b5151b37fa4b08bb317593418f3e",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/host-selector-alternatives.test.ts",
|
||||
"-t",
|
||||
"returns nothing rather than masking the error it was enriching",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0076-fallback-on-unrelated-error-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "c6f43603bc7dfd0783b55fcca09c911276271a7c73e7a917f49529e38a2f6fe2",
|
||||
"production_sha256": "c861df45dae838b7010bc04ca8bb2ff4a3eaa3dcc2f0ad647b13007ab03df44a",
|
||||
"report": "/tmp/orca-root-0076-fallback-on-unrelated-error-original.json",
|
||||
"report_sha256": "41e11b39818df805704939f68c7972b1976cd894139cd50e79c85899a6f4168a",
|
||||
"log": "/tmp/orca-root-0076-fallback-on-unrelated-error-original.log",
|
||||
"log_sha256": "23f08ab64c8c38c372ae41eb924f1d86dcb8e3e91f211f4e8269a2d5a9fc7ce5"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/host-selector-alternatives.test.ts",
|
||||
"-t",
|
||||
"returns nothing rather than masking the error it was enriching",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0076-fallback-on-unrelated-error-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "returns nothing rather than masking the error it was enriching",
|
||||
"messages": [
|
||||
"AssertionError: expected \"vi.fn()\" to be called once with arguments: [ 'ssh.listTargetSummaries' ]\n\nReceived:\n\n 1st vi.fn() call:\n\nCompared values have no visual difference.\n\n 2nd vi.fn() call:\n\n [\n- \"ssh.listTargetSummaries\",\n+ \"ssh.listTargets\",\n ]\n\n\nNumber of calls: 2\n\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2265:10)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:1958:14)\n at Proxy.methodWrapper (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1737:25)\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/host-selector-alternatives.test.ts:151:18\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "f9bccc3fd42deb446f1bb1137cc996fe0a01b5151b37fa4b08bb317593418f3e",
|
||||
"production_sha256": "c861df45dae838b7010bc04ca8bb2ff4a3eaa3dcc2f0ad647b13007ab03df44a",
|
||||
"report": "/tmp/orca-root-0076-fallback-on-unrelated-error-reviewed.json",
|
||||
"report_sha256": "e85cff2988e6333af2bdf1add11d925285f689f62c7607abb61c90649cdb863a",
|
||||
"log": "/tmp/orca-root-0076-fallback-on-unrelated-error-reviewed.log",
|
||||
"log_sha256": "94fd8bed87b1cbc7d76adec029c8df1d128189afd2d63d3dda6a3205fe9bc3f3"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"Baseline was rerun with verified original Git bytes installed; reviewed bytes were restored in finally. The initial unconstrained startup run is superseded.",
|
||||
"Mutation comparisons run only their named focused case; final whole batches passed with clean production restored.",
|
||||
"Runtime/child-process endpoints are mocked. No app, native focus, SSH connection or terminal launch was performed."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"batch": "root-0077",
|
||||
"source_commit": "f1157821ce03d7c59323f95a4bac521f13bb841e",
|
||||
"files": 1,
|
||||
"original_declarations": 11,
|
||||
"final_declarations": 11,
|
||||
"original_explicit_parameter_rows": 6,
|
||||
"runtime_cases": 15,
|
||||
"decisions": {
|
||||
"keep": 7,
|
||||
"fix": 4
|
||||
},
|
||||
"records_sha256": "260988b313fe8394cddb5cc0f65a815329c8a70e683bb380af1bcbb73dabb3ce",
|
||||
"commands": [
|
||||
{
|
||||
"name": "baseline-tests",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0077-baseline-tests.log",
|
||||
"log_sha256": "7bc447c06e3ce21d8c90e59edc37516448b6fd2396154769ae2e778aec89936e",
|
||||
"report": "/tmp/orca-root-0077-baseline-tests.json",
|
||||
"report_sha256": "ba71ceb38876fcdc9fae2f018a578726fc1d7800f54cb6d957d5d1aa03be0042",
|
||||
"passed": 15,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/index-agent-launch.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0077-baseline-tests.json"
|
||||
},
|
||||
{
|
||||
"name": "final-tests",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0077-final-tests.log",
|
||||
"log_sha256": "4155e8070a41602aa10fabfbd19266aec8a3d37878d9e3ef2ab645288a5721ce",
|
||||
"report": "/tmp/orca-root-0077-final-tests.json",
|
||||
"report_sha256": "ae7a04af04327911c8c7847a01aab802aef8435a23a95650576fd0b80b738afe",
|
||||
"passed": 15,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/cli/index-agent-launch.test.ts --reporter=default --reporter=json --outputFile=/tmp/orca-root-0077-final-tests.json"
|
||||
},
|
||||
{
|
||||
"name": "typecheck",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0077-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm tc:cli"
|
||||
},
|
||||
{
|
||||
"name": "lint",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0077-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxlint src/cli/index-agent-launch.test.ts"
|
||||
},
|
||||
{
|
||||
"name": "format",
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0077-format.log",
|
||||
"log_sha256": "40b223ad82c15debd657ab48f9473de002f232b3b9952793cf227fcea706bc3e",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm exec oxfmt --check src/cli/index-agent-launch.test.ts"
|
||||
}
|
||||
],
|
||||
"mutations": [
|
||||
{
|
||||
"defect": "replace-recovery-identity",
|
||||
"production_path": "src/cli/agent-launch-request.ts",
|
||||
"test_path": "src/cli/index-agent-launch.test.ts",
|
||||
"original_production_sha256": "a16a500dfccfb671f4400d9e49bdf97d6f032e44b5fe405da62f5777a7c9ccb4",
|
||||
"mutant_production_sha256": "e6e284f62515d1992846a83d5317f5c5e1543be73e1a760ee69346344c318dcb",
|
||||
"original_test_sha256": "322e7db82d46cda23d02e169d68f8c7d5eefa4122f457da0f4ab94722be1a80d",
|
||||
"reviewed_test_sha256": "643308cd22bc5f435c103c183b1bbe6d2ecbee796d180fe52f5365f9d2bf49ba",
|
||||
"results": [
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/index-agent-launch.test.ts",
|
||||
"-t",
|
||||
"returns an exact recovery command and removes blind retry advice after a lost reply",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0077-replace-recovery-identity-original.json"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "322e7db82d46cda23d02e169d68f8c7d5eefa4122f457da0f4ab94722be1a80d",
|
||||
"production_sha256": "e6e284f62515d1992846a83d5317f5c5e1543be73e1a760ee69346344c318dcb",
|
||||
"report": "/tmp/orca-root-0077-replace-recovery-identity-original.json",
|
||||
"report_sha256": "faea00c71bda386d9fd9929a6df9aa7318c96c3c71eecdb5e8e0da6d84613a46",
|
||||
"log": "/tmp/orca-root-0077-replace-recovery-identity-original.log",
|
||||
"log_sha256": "c423b9605d5c6e337d1b9cbb4a859c2f35422066fe675a5646b3c44db6c30b3b"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/index-agent-launch.test.ts",
|
||||
"-t",
|
||||
"returns an exact recovery command and removes blind retry advice after a lost reply",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0077-replace-recovery-identity-reviewed.json"
|
||||
],
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "returns an exact recovery command and removes blind retry advice after a lost reply",
|
||||
"messages": [
|
||||
"AssertionError: expected [ [ 'agent.launchReplay', \u2026(1) ] ] to deeply equal [ [ 'agent.launchReplay', \u2026(1) ] ]\n at /home/neil/orca/workspaces/orca/comprehensive-test-audit-8/src/cli/index-agent-launch.test.ts:195:27\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "643308cd22bc5f435c103c183b1bbe6d2ecbee796d180fe52f5365f9d2bf49ba",
|
||||
"production_sha256": "e6e284f62515d1992846a83d5317f5c5e1543be73e1a760ee69346344c318dcb",
|
||||
"report": "/tmp/orca-root-0077-replace-recovery-identity-reviewed.json",
|
||||
"report_sha256": "2e2b869eb44d7b0747a4ff147eb64fa9bc6874b6675a078d324d8970c7087346",
|
||||
"log": "/tmp/orca-root-0077-replace-recovery-identity-reviewed.log",
|
||||
"log_sha256": "1b3fd6b222a6f999b4ade2b8589f60cb0effde2cba2e479252c3ab8cdbb2d995"
|
||||
}
|
||||
],
|
||||
"production_restored": true,
|
||||
"test_restored": true
|
||||
}
|
||||
],
|
||||
"limitations": [
|
||||
"Baseline was rerun with verified original Git bytes installed; reviewed bytes were restored in finally. The initial unconstrained startup run is superseded.",
|
||||
"Mutation comparisons run only their named focused case; final whole batches passed with clean production restored.",
|
||||
"Runtime/child-process endpoints are mocked. No app, native focus, SSH connection or terminal launch was performed."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,244 @@
|
||||
{
|
||||
"batch": "root-0078",
|
||||
"status": "implemented-and-validated",
|
||||
"reviewer": "root",
|
||||
"source_commit": "d514d6155256aa3a65b499023f20b5d88e0c2b92",
|
||||
"review_records_sha256": "f5e12cf38d4488c6896a493207c302d0ce59f9f7441606a200714e951ada9950",
|
||||
"reviewed_files": 7,
|
||||
"original_declarations": 38,
|
||||
"final_declarations": 38,
|
||||
"explicit_parameter_rows": 34,
|
||||
"parameter_declarations": 9,
|
||||
"runtime_cases_per_full_run": 63,
|
||||
"case_decisions": {
|
||||
"keep": 25,
|
||||
"fix": 13,
|
||||
"consolidate": 0,
|
||||
"remove": 0
|
||||
},
|
||||
"scope": "Complete source review of seven automation CLI suites, every helper and all 34 literal parameter rows. Real CLI parsing/dispatch/formatting with controlled RuntimeClient endpoints, no actual runtime/app or provider launch.",
|
||||
"changes": [
|
||||
"Require machine-readable incompatible_runtime/invalid_argument error envelopes while preserving original independent messages and no-RPC/exit controls.",
|
||||
"Verify exact extra-argument probe/owner/update call count and order, including explicit empty clearing without a probe.",
|
||||
"Use actual runNow arrival and held-response latches; always release and await command in finally.",
|
||||
"Restore process.exitCode in suite teardown even after failed negative assertions."
|
||||
],
|
||||
"runtime_results": [
|
||||
{
|
||||
"phase": "baseline",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"src/cli/index-automation-identifiers.test.ts",
|
||||
"src/cli/index-automation-run-output.test.ts",
|
||||
"src/cli/index-automation-schedule.test.ts",
|
||||
"src/cli/index-automation-session-reuse.test.ts",
|
||||
"src/cli/index-automation-source-context.test.ts",
|
||||
"src/cli/index-automation-target.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0078-baseline-tests.json"
|
||||
],
|
||||
"environment": {
|
||||
"ORCA_BACKGROUND_LAUNCH": "1"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"passed": 63,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"report": "/tmp/orca-root-0078-baseline-tests.json",
|
||||
"report_sha256": "cfadbb568b5273090ce4bb814117b4e233ca7374c119f684e2b737ac1d367ade",
|
||||
"log": "/tmp/orca-root-0078-baseline-tests.log",
|
||||
"log_sha256": "96ffcfc527463ef4c948bdec3166729ea07aff5ef961bd882ef8f545df2def9d"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"pnpm",
|
||||
"test",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"src/cli/index-automation-identifiers.test.ts",
|
||||
"src/cli/index-automation-run-output.test.ts",
|
||||
"src/cli/index-automation-schedule.test.ts",
|
||||
"src/cli/index-automation-session-reuse.test.ts",
|
||||
"src/cli/index-automation-source-context.test.ts",
|
||||
"src/cli/index-automation-target.test.ts",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0078-reviewed-tests.json"
|
||||
],
|
||||
"environment": {
|
||||
"ORCA_BACKGROUND_LAUNCH": "1"
|
||||
},
|
||||
"exit_code": 0,
|
||||
"passed": 63,
|
||||
"failed": 0,
|
||||
"skipped": 0,
|
||||
"report": "/tmp/orca-root-0078-reviewed-tests.json",
|
||||
"report_sha256": "55f94bd8afacc8b1632e55265f83c96f4f4b12838b500ae45f55745954137700",
|
||||
"log": "/tmp/orca-root-0078-reviewed-tests.log",
|
||||
"log_sha256": "2d59da56df3ee710b2b7f108545786d04ee75929cc4a871bd012d94aeeca829b"
|
||||
}
|
||||
],
|
||||
"checks": [
|
||||
{
|
||||
"command": [
|
||||
"pnpm",
|
||||
"tc:cli"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0078-typecheck.log",
|
||||
"log_sha256": "64350cfafba2dd6bb61adf325923dc3c41762eb81a276ff9302796e6e77b09bc"
|
||||
},
|
||||
{
|
||||
"command": [
|
||||
"pnpm",
|
||||
"exec",
|
||||
"oxlint",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"src/cli/index-automation-identifiers.test.ts",
|
||||
"src/cli/index-automation-run-output.test.ts",
|
||||
"src/cli/index-automation-schedule.test.ts",
|
||||
"src/cli/index-automation-session-reuse.test.ts",
|
||||
"src/cli/index-automation-source-context.test.ts",
|
||||
"src/cli/index-automation-target.test.ts"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0078-lint.log",
|
||||
"log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
{
|
||||
"command": [
|
||||
"pnpm",
|
||||
"exec",
|
||||
"oxfmt",
|
||||
"--check",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"src/cli/index-automation-identifiers.test.ts",
|
||||
"src/cli/index-automation-run-output.test.ts",
|
||||
"src/cli/index-automation-schedule.test.ts",
|
||||
"src/cli/index-automation-session-reuse.test.ts",
|
||||
"src/cli/index-automation-source-context.test.ts",
|
||||
"src/cli/index-automation-target.test.ts"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"log": "/tmp/orca-root-0078-format.log",
|
||||
"log_sha256": "d38ef7f6c5e8515a02e29c284d71d413480469939dd75a1fdc61a61cc6b17e67"
|
||||
}
|
||||
],
|
||||
"mutation": {
|
||||
"defect": "Old host refusal misclassified as invalid_argument instead of incompatible_runtime",
|
||||
"scope": "Regular source copies under /tmp; shared node_modules supplies dependencies only. No shared production source writes.",
|
||||
"production_path": "src/cli/handlers/automations.ts",
|
||||
"test_path": "src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"original_production_sha256": "5c1f6de04c20b428dcc7d975a840bd187cdd01e14d881f083d10a907bb6a2ef6",
|
||||
"mutant_production_sha256": "fb4016eca6253d7defbfd0da4233ebf2496f82ccb3af3d46a3fd73eb32a5c70e",
|
||||
"original_test_sha256": "c1f53136d1599662d0ea88933ff50d0462a45648cf737aecf07756cfa6cd7857",
|
||||
"reviewed_test_sha256": "79e39821f8cf59e91381a3960e4c300900e7606af8e9f22771241eff21997dd8",
|
||||
"results": [
|
||||
{
|
||||
"phase": "isolated-baseline",
|
||||
"command": [
|
||||
"node",
|
||||
"config/scripts/run-vitest.mjs",
|
||||
"run",
|
||||
"--config",
|
||||
"config/vitest.config.ts",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"-t",
|
||||
"refuses nonempty extras",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0078-wrong-compatibility-code-isolated-baseline.json"
|
||||
],
|
||||
"cwd": "/tmp/orca-root-0078-mutation-repo",
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "79e39821f8cf59e91381a3960e4c300900e7606af8e9f22771241eff21997dd8",
|
||||
"production_sha256": "5c1f6de04c20b428dcc7d975a840bd187cdd01e14d881f083d10a907bb6a2ef6",
|
||||
"report": "/tmp/orca-root-0078-wrong-compatibility-code-isolated-baseline.json",
|
||||
"report_sha256": "0142b5f8635701dd9438ef26bac851030f2d5a5eaf84c4ce6da6edd2d7ab4e68",
|
||||
"log": "/tmp/orca-root-0078-wrong-compatibility-code-isolated-baseline.log",
|
||||
"log_sha256": "eef9d6cb93038570afa8560e956975a169a5e56a8c1c546e9a33194aaba0fea1"
|
||||
},
|
||||
{
|
||||
"phase": "original",
|
||||
"command": [
|
||||
"node",
|
||||
"config/scripts/run-vitest.mjs",
|
||||
"run",
|
||||
"--config",
|
||||
"config/vitest.config.ts",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"-t",
|
||||
"refuses nonempty extras",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0078-wrong-compatibility-code-original.json"
|
||||
],
|
||||
"cwd": "/tmp/orca-root-0078-mutation-repo",
|
||||
"exit_code": 0,
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"failures": [],
|
||||
"test_sha256": "c1f53136d1599662d0ea88933ff50d0462a45648cf737aecf07756cfa6cd7857",
|
||||
"production_sha256": "fb4016eca6253d7defbfd0da4233ebf2496f82ccb3af3d46a3fd73eb32a5c70e",
|
||||
"report": "/tmp/orca-root-0078-wrong-compatibility-code-original.json",
|
||||
"report_sha256": "c931908269e6a00ac8d03c298815538a73ce13242c0cb5d5c4ff6e843b2da048",
|
||||
"log": "/tmp/orca-root-0078-wrong-compatibility-code-original.log",
|
||||
"log_sha256": "804daf1914014d7833d293d2d3ff28fed42fb73a3cc1ea29ad4263c430d992b3"
|
||||
},
|
||||
{
|
||||
"phase": "reviewed",
|
||||
"command": [
|
||||
"node",
|
||||
"config/scripts/run-vitest.mjs",
|
||||
"run",
|
||||
"--config",
|
||||
"config/vitest.config.ts",
|
||||
"src/cli/index-automation-extra-agent-args.test.ts",
|
||||
"-t",
|
||||
"refuses nonempty extras",
|
||||
"--maxWorkers=1",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-root-0078-wrong-compatibility-code-reviewed.json"
|
||||
],
|
||||
"cwd": "/tmp/orca-root-0078-mutation-repo",
|
||||
"exit_code": 1,
|
||||
"passed": 0,
|
||||
"failed": 1,
|
||||
"failures": [
|
||||
{
|
||||
"title": "refuses nonempty extras on a runtime that would drop them",
|
||||
"messages": [
|
||||
"AssertionError: expected { id: 'local', ok: false, \u2026(2) } to match object { ok: false, error: { \u2026(2) } }\n(3 matching properties omitted from actual)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:2066:10)\n at Proxy.<anonymous> (file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/index.aTZaPVhf.js:1958:14)\n at Proxy.methodWrapper (file:///home/neil/.local/share/pnpm/store/v11/links/@/chai/6.3.0/25b5fcf6626be1440275f25f04f4b64170f3760bb1da107f5691c470b8dd65d1/node_modules/chai/index.js:1737:25)\n at /tmp/orca-root-0078-mutation-repo/src/cli/index-automation-extra-agent-args.test.ts:124:59\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async file:///home/neil/.local/share/pnpm/store/v11/links/@/vitest/5.0.5/33cbff1369a4b9daff886ded552569e103d10620b524069c589409db81774c01/node_modules/vitest/dist/chunks/run.BPv-BBRv.js:2801:20"
|
||||
]
|
||||
}
|
||||
],
|
||||
"test_sha256": "79e39821f8cf59e91381a3960e4c300900e7606af8e9f22771241eff21997dd8",
|
||||
"production_sha256": "fb4016eca6253d7defbfd0da4233ebf2496f82ccb3af3d46a3fd73eb32a5c70e",
|
||||
"report": "/tmp/orca-root-0078-wrong-compatibility-code-reviewed.json",
|
||||
"report_sha256": "9dc71bcf5f0acd4b092143981342f1a0ae3bef829e049f9bf11ff97138a29242",
|
||||
"log": "/tmp/orca-root-0078-wrong-compatibility-code-reviewed.log",
|
||||
"log_sha256": "0c4b673addb11d033fdf0565dad4579abe1e7e0af8123effb4a47489e13153cb"
|
||||
}
|
||||
],
|
||||
"copied_production_restored": true,
|
||||
"copied_test_restored": true,
|
||||
"shared_production_unchanged": true,
|
||||
"shared_test_unchanged": true
|
||||
},
|
||||
"restoration": {
|
||||
"production_source_unchanged": true,
|
||||
"isolated_mutated_sources_restored": true
|
||||
},
|
||||
"limitations": [
|
||||
"Linux host only. Windows/POSIX guidance branches use a platform stub and do not run a native shell.",
|
||||
"Provider, paired-server and SSH identities are protocol fixtures at the runtime port; no live provider/network or native window is used.",
|
||||
"Shared test harness is supporting evidence, not completed automatically by use in this batch.",
|
||||
"Baseline completed before tracked test editing. Mutations run against regular source copies under /tmp; only node_modules points to shared dependencies."
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,126 @@
|
||||
{
|
||||
"batch": "upstream-0006",
|
||||
"reviewer": "/root/audit_config",
|
||||
"source_commit": "8f6283b32bcdefa746613e4c28d04bb1fe954eb9",
|
||||
"reviewed_source_commit": "a4a0e605eef4a3864b572213f81c17ecb26ded2c",
|
||||
"reviewed_files": 1,
|
||||
"original_declaration_sites": 9,
|
||||
"reviewed_declaration_sites": 9,
|
||||
"expanded_runtime_tests": 22,
|
||||
"body_input_rows": 2,
|
||||
"body_input_row_note": "Both package manifests are exercised within one runtime test; not added to the 22 runtime count.",
|
||||
"repeat_review": true,
|
||||
"production_changes": false,
|
||||
"test_source_changes": false,
|
||||
"decision_counts": {
|
||||
"keep": 9,
|
||||
"consolidate": 0,
|
||||
"fix": 0,
|
||||
"remove": 0
|
||||
},
|
||||
"review_scope": "Read full pinned test fixture, all nine declarations, complete literal parameter tuples and body rows, independent expected Map/Set, eight full production/support modules, Vitest configuration and ownership registry. Preserve every root-0037 control and immutable original provenance. All new writes are under /tmp; no shared tracked writes, Git mutations, hook processes or production mutations.",
|
||||
"environment": {
|
||||
"platform": "Linux",
|
||||
"node": "26.8.1",
|
||||
"vitest": "5.0.5",
|
||||
"typescript_api": "6.0.3",
|
||||
"yaml": "2.9.1",
|
||||
"ORCA_BACKGROUND_LAUNCH": "1",
|
||||
"isolated_tree": "/tmp/orca-root-0037-superseding-qi3z3yt4/isolated-tree",
|
||||
"dependency_link_manifest": "snapshot-manifest.json#/isolated_node_modules"
|
||||
},
|
||||
"checks": [
|
||||
{
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 node node_modules/vitest/vitest.mjs run --config ../validation/vitest.config.mjs --reporter=verbose --reporter=json --outputFile.json=../validation/upstream-tests.json",
|
||||
"cwd": "/tmp/orca-root-0037-superseding-qi3z3yt4/isolated-tree",
|
||||
"result": "One test file, 22 runtime tests passed, zero failures/skips/todos; upstream test and production copies unchanged.",
|
||||
"json_report": "/tmp/orca-root-0037-superseding-qi3z3yt4/validation/upstream-tests.json",
|
||||
"report_sha256": "f1bc4a4830cf76f670de5f58f8891bd56e2ed5f91beba6d90e977bfe00162a52",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 node node_modules/vitest/vitest.mjs run --config ../validation/matcher-vitest.config.mjs --reporter=verbose --reporter=json --outputFile.json=../validation/matcher-contract.json",
|
||||
"cwd": "/tmp/orca-root-0037-superseding-qi3z3yt4/isolated-tree",
|
||||
"result": "13 temporary matcher-contract tests passed: two positive metadata cases, seven graph collection mismatch rejections and four selected-array mismatch rejections. No production mutation.",
|
||||
"json_report": "/tmp/orca-root-0037-superseding-qi3z3yt4/validation/matcher-contract.json",
|
||||
"report_sha256": "27dbfceacac54209abae298a6a165864132210248f8713cd878cde49daabc80b",
|
||||
"exit_code": 0
|
||||
},
|
||||
{
|
||||
"command": "node validation/extract-case-evidence.mjs",
|
||||
"cwd": "/tmp/orca-root-0037-superseding-qi3z3yt4",
|
||||
"result": "TypeScript AST extraction confirms nine original/current declarations, 22 runtime expansions, unchanged fixture and all complete table values; records full original/current case source and SHA256.",
|
||||
"evidence": "/tmp/orca-root-0037-superseding-qi3z3yt4/case-evidence.json",
|
||||
"exit_code": 0
|
||||
}
|
||||
],
|
||||
"matcher_contract": {
|
||||
"additive_outer_metadata_allowed": true,
|
||||
"reverse_map_exact_keys": true,
|
||||
"nested_consumer_sets_exact_members": true,
|
||||
"opaque_set_exact_members": true,
|
||||
"selected_file_arrays_exact_length_values_and_order": true,
|
||||
"note": "Checked against installed Vitest 5.0.5. The isolated probe changes in-memory expected/actual objects only; upstream production source is never modified."
|
||||
},
|
||||
"integrity": {
|
||||
"original_sha256": "e36792c6c01fb6254c2e9df003a3098f6c690d05501ba1a66edef84784d2a344",
|
||||
"reviewed_sha256": "65dcbc081dbd95fca0e54df98e0838d2a71b36b2922eba9946918c5143b77cc4",
|
||||
"prior_records_sha256": "6a231512a66232ef22c2b06e88dcf863ba2491e14544cb068b41377d53d2531f",
|
||||
"case_evidence_sha256": "730a959b1348e1fc02c1b9987b5201491e734bcc561dd60d038201101175327f",
|
||||
"snapshot_manifest_sha256": "cecb6f03b199103378b76289a9f916f1819a51271eb086462556c138f8967dbe",
|
||||
"original_and_reviewed_bytes_verified": true,
|
||||
"isolated_source_copies_equal_pinned_snapshots": true,
|
||||
"immutable_original_sha256_and_source_commit_preserved": true,
|
||||
"agent_records_sha256": "94b8dd5f0fe93dc73f6b44d7d8b9fa9dfb4d7e5b931da6f05ad064d0e45150d8",
|
||||
"records_sha256": "6fb47ebe28b68fb7e8e3103ac6045d0689d23e00a8bfdd8a623f3a3797eda538"
|
||||
},
|
||||
"limitations": [
|
||||
"No fixture supplies checked ownership records: source closure/context invalidation, environment checks, declared input edge insertion and traversal boundaries require the dedicated ownership/selection suites.",
|
||||
"The new opaqueConsumers selection branch is read but not exercised; these fixtures use unitConsumers(graph.opaque, graph.reverse).",
|
||||
"This report supersedes one existing file review and nine case records; it does not create new audited files or add the 13 temporary matcher probes to audited test counts.",
|
||||
"The checked-in ownership registry was read as format/context evidence only; its production owners and stored digest values were not independently audited by this file review.",
|
||||
"Integrated repository-config validation is recorded in root_integration; no native app or platform matrix was launched locally."
|
||||
],
|
||||
"root_integration": {
|
||||
"integration_base_commit": "cb508dc745545c7d66ad4cea78d987e1742e547e",
|
||||
"package_artifacts_verified": 39,
|
||||
"agent_validation_sha256": "701f7125a5fad7d1b79c0a95f64f8ff85407579dce2bb793645d6222ea5baf3c",
|
||||
"agent_manifest_sha256": "6b222c1cc037393d78a4bce5464ae50f30b3e0d9cb60843c8fcec8b061ca5224",
|
||||
"inline_complete_case_and_fixture_evidence": true,
|
||||
"integrated_runtime_validation": {
|
||||
"command": [
|
||||
"node",
|
||||
"node_modules/vitest/vitest.mjs",
|
||||
"run",
|
||||
"--config",
|
||||
"config/vitest.config.ts",
|
||||
"config/scripts/ci-unit-dependency-graph.test.mjs",
|
||||
"--reporter=default",
|
||||
"--reporter=json",
|
||||
"--outputFile=/tmp/orca-audit8-integrated-graph-tests.json"
|
||||
],
|
||||
"environment": {
|
||||
"ORCA_BACKGROUND_LAUNCH": "1"
|
||||
},
|
||||
"passed": 22,
|
||||
"failed": 0,
|
||||
"exit_code": 0,
|
||||
"report": "/tmp/orca-audit8-integrated-graph-tests.json",
|
||||
"report_sha256": "2ed3d3d0e2568a474ba16abfee34c42b522077c6540d360a70ef2c444803c711",
|
||||
"log_sha256": "30afefea74e1eb67cd0393556a30bfed22448ce90b8c7e73bedbe3c9abe63228"
|
||||
},
|
||||
"setup_failures_and_resolution": [
|
||||
"Initial pnpm test stopped before Vitest because the dependency tree was incomplete; no test result was produced.",
|
||||
"An isolated follow-up pnpm exec attempted dependency reconciliation through a dependency symlink. Removed that symlink and restored only audit-8 dependencies with pnpm install --frozen-lockfile --ignore-scripts --config.enable-global-virtual-store=false. Tracked sources and lockfile remained unchanged.",
|
||||
"After the install, the default runner reached an unconfigured mise Bun shim. Used explicit Node with the repository Vitest config; all22 graph cases passed. No global Bun configuration was changed."
|
||||
],
|
||||
"code_quality": {
|
||||
"command": ["node", "config/scripts/check-changed-code-quality.mjs"],
|
||||
"exit_code": 0,
|
||||
"new_findings": 0,
|
||||
"changed_files_with_added_lines": 63,
|
||||
"log": "/tmp/orca-audit8-code-quality.log",
|
||||
"log_sha256": "894264631dc5654f0f1451d0b68de173489a6d1cc727316006de162219481e16"
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -6,11 +6,8 @@ import {
|
||||
BRIDGE_MAX_PENDING_REQUESTS,
|
||||
BRIDGE_MAX_SUBSCRIPTIONS
|
||||
} from './bridge-caps'
|
||||
import { BRIDGE_MAX_UNACKED_BYTES, BRIDGE_MAX_UNACKED_FRAMES } from '../bridge-host-subscriptions'
|
||||
import {
|
||||
BRIDGE_ACK_INTERVAL_BYTES,
|
||||
BRIDGE_ACK_INTERVAL_FRAMES
|
||||
} from './bridge-client-subscriptions'
|
||||
import { createFakeBridgePortPair } from './bridge-port-pair-test-harness'
|
||||
import { BRIDGE_ACK_INTERVAL_FRAMES } from './bridge-client-subscriptions'
|
||||
import { BRIDGE_PROTOCOL_VERSION, type BridgeHostMessage } from './bridge-envelope'
|
||||
import {
|
||||
BRIDGE_READY_RETRY_MAX_MS,
|
||||
@@ -527,10 +524,24 @@ describe('bridge client caps', () => {
|
||||
})
|
||||
|
||||
describe('bridge client acks', () => {
|
||||
it('stays well inside the window the shell ends a stream at', () => {
|
||||
// The shell's own numbers, not a copy of them: a window narrowed there has to fail here.
|
||||
expect(BRIDGE_ACK_INTERVAL_FRAMES * 4).toBeLessThanOrEqual(BRIDGE_MAX_UNACKED_FRAMES)
|
||||
expect(BRIDGE_ACK_INTERVAL_BYTES * 4).toBeLessThanOrEqual(BRIDGE_MAX_UNACKED_BYTES)
|
||||
it('keeps a byte-heavy stream alive beyond the host window', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
try {
|
||||
await pair.flush()
|
||||
const seen: unknown[] = []
|
||||
pair.client.subscribe('worktree.events', {}, (payload) => seen.push(payload))
|
||||
await pair.flush()
|
||||
const payload = 'x'.repeat(BRIDGE_MAX_MESSAGE_BYTES - 1024)
|
||||
for (let index = 0; index < 16; index += 1) {
|
||||
pair.rpc.streams[0]?.emit(payload)
|
||||
await pair.flush()
|
||||
}
|
||||
expect(seen).toEqual(Array.from({ length: 16 }, () => payload))
|
||||
expect(pair.rpc.streams[0]?.unsubscribes).toBe(0)
|
||||
} finally {
|
||||
pair.client.close()
|
||||
pair.host.dispose()
|
||||
}
|
||||
})
|
||||
|
||||
it('acks the last seq it read once the frame interval is due', () => {
|
||||
|
||||
@@ -101,6 +101,7 @@ describe('bridge round trip: requests', () => {
|
||||
const error = await answer.catch((caught: unknown) => caught)
|
||||
expect(error).toBeInstanceOf(Error)
|
||||
expect(readError(error).name).toBe('RpcTimeoutError')
|
||||
expect(error).toMatchObject({ code: 'ETIMEDOUT' })
|
||||
expect(readError(error).message).toBe('timed out after 50ms')
|
||||
expect(isRpcDeliveryUnknown(error)).toBe(true)
|
||||
expect(readError(readError(error).cause).message).toBe('socket closed')
|
||||
@@ -172,7 +173,11 @@ describe('bridge round trip: subscriptions', () => {
|
||||
}
|
||||
await pair.flush()
|
||||
}
|
||||
expect(onData).toHaveBeenCalledTimes(400)
|
||||
expect(onData.mock.calls.map(([payload]) => payload)).toEqual(
|
||||
Array.from({ length: 8 }, (_, batch) =>
|
||||
Array.from({ length: 50 }, (_, frame) => `frame-${batch}-${frame}`)
|
||||
).flat()
|
||||
)
|
||||
expect(pair.diagnostics).toEqual([])
|
||||
})
|
||||
|
||||
@@ -263,8 +268,10 @@ describe('bridge round trip: notifications and state', () => {
|
||||
|
||||
it('refuses a URL outside the grant without putting a frame on the wire', async () => {
|
||||
const pair = await ready(createFakeBridgePortPair())
|
||||
const sent = pair.toShell.length
|
||||
expect(pair.client.notifyExternalLink('javascript:alert(1)')).toBe(false)
|
||||
await pair.flush()
|
||||
expect(pair.toShell).toHaveLength(sent)
|
||||
expect(pair.externalLinks).toEqual([])
|
||||
expect(pair.hostDiagnostics).toEqual([])
|
||||
})
|
||||
|
||||
@@ -134,15 +134,10 @@ describe('bridge rpc envelope: page side', () => {
|
||||
})
|
||||
|
||||
describe('bridge rpc envelope: shell side', () => {
|
||||
it('grants every session the envelope', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
await pair.flush()
|
||||
expect(pair.client.getShellSession()?.grants.native).toContain(BRIDGE_RPC_ENVELOPE_GRANT)
|
||||
})
|
||||
|
||||
it('hands a request and a subscribe envelope to the native client options', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
await pair.flush()
|
||||
expect(pair.client.getShellSession()?.grants.native).toContain(BRIDGE_RPC_ENVELOPE_GRANT)
|
||||
void pair.client.sendRequest('worktree.ps', { a: 1 }, { timeoutMs: 50, envelope: ENVELOPE })
|
||||
void pair.client.sendRequest('worktree.ps', undefined, { envelope: ENVELOPE })
|
||||
pair.client.subscribe('terminal.subscribe', { terminal: 't' }, () => undefined, {
|
||||
@@ -184,7 +179,7 @@ describe('bridge rpc envelope: shell side', () => {
|
||||
})
|
||||
|
||||
describe('bridge rpc envelope: mixed versions', () => {
|
||||
it('an older page reading the new init ignores a grant name it does not know', () => {
|
||||
it('the current page reader accepts an unknown grant name in init', () => {
|
||||
const init = createBridgeInitFrame({
|
||||
sessionId: 's',
|
||||
buildId: 'b',
|
||||
|
||||
@@ -175,20 +175,23 @@ describe('what the page will not keep', () => {
|
||||
unhandled.push(reason)
|
||||
}
|
||||
process.on('unhandledRejection', record)
|
||||
const oversized = 'x'.repeat(PAGE_STORAGE_MAX_VALUE_CHARS + 1)
|
||||
const refusal = await refusalOf(
|
||||
pageAsyncStorage.multiSet([
|
||||
['orca:mobileStructuredSendOperations:v1', oversized],
|
||||
['orca:custom-accessory-keys', oversized]
|
||||
])
|
||||
)
|
||||
// Two turns, which is when an orphaned rejection is reported.
|
||||
await new Promise((resolve) => setImmediate(resolve))
|
||||
process.off('unhandledRejection', record)
|
||||
expect(unhandled).toEqual([])
|
||||
// The first pair is the one the caller is told about, and neither reached the wire.
|
||||
expect(refusal.key).toBe('orca:mobileStructuredSendOperations:v1')
|
||||
expect(writes).toEqual([])
|
||||
try {
|
||||
const oversized = 'x'.repeat(PAGE_STORAGE_MAX_VALUE_CHARS + 1)
|
||||
const refusal = await refusalOf(
|
||||
pageAsyncStorage.multiSet([
|
||||
['orca:mobileStructuredSendOperations:v1', oversized],
|
||||
['orca:custom-accessory-keys', oversized]
|
||||
])
|
||||
)
|
||||
// Two turns, which is when an orphaned rejection is reported.
|
||||
await new Promise((resolve) => setImmediate(resolve))
|
||||
expect(unhandled).toEqual([])
|
||||
// The first pair is the one the caller is told about, and neither reached the wire.
|
||||
expect(refusal.key).toBe('orca:mobileStructuredSendOperations:v1')
|
||||
expect(writes).toEqual([])
|
||||
} finally {
|
||||
process.off('unhandledRejection', record)
|
||||
}
|
||||
})
|
||||
|
||||
it('still keeps a value exactly at the bound, so the refusal above discriminates', async () => {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** The page's side of the verbs, over the real pair: what it sends, and what it refuses to send. */
|
||||
import type { ReactElement } from 'react'
|
||||
import { act, create } from 'react-test-renderer'
|
||||
import { act, create, type ReactTestRenderer } from 'react-test-renderer'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
// The provider module re-exports the screen hooks, and reaching the real ones imports the Expo
|
||||
@@ -26,6 +26,8 @@ import {
|
||||
type NativeVerbs
|
||||
} from './use-native-verbs'
|
||||
|
||||
const mounted: ReactTestRenderer[] = []
|
||||
|
||||
const held: { verbs: NativeVerbs | null } = { verbs: null }
|
||||
|
||||
function Screen(): null {
|
||||
@@ -44,7 +46,7 @@ function render(pair: BridgePortPair): ReactElement {
|
||||
async function mount(pair: BridgePortPair): Promise<NativeVerbs> {
|
||||
await pair.flush()
|
||||
act(() => {
|
||||
create(render(pair))
|
||||
mounted.push(create(render(pair)))
|
||||
})
|
||||
const verbs = held.verbs
|
||||
if (verbs === null) {
|
||||
@@ -58,26 +60,39 @@ beforeEach(() => {
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
act(() => {
|
||||
for (const tree of mounted.splice(0)) {
|
||||
tree.unmount()
|
||||
}
|
||||
})
|
||||
vi.useRealTimers()
|
||||
})
|
||||
|
||||
describe('a page calling a native verb', () => {
|
||||
it('writes through the shell and hears whether the pasteboard took it', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
const serveNativeVerb = vi.fn(async () => ({ written: true }))
|
||||
const pair = createFakeBridgePortPair({ serveNativeVerb })
|
||||
const verbs = await mount(pair)
|
||||
expect(verbs.granted).toBe(true)
|
||||
const written = verbs.writeClipboardText('copied')
|
||||
await pair.flush()
|
||||
await expect(written).resolves.toBe(true)
|
||||
expect(serveNativeVerb).toHaveBeenCalledWith('native.clipboard.write', {
|
||||
mime: 'text',
|
||||
value: 'copied'
|
||||
})
|
||||
// The whole point of the seam: it never reached the desktop's client.
|
||||
expect(pair.rpc.requests).toEqual([])
|
||||
})
|
||||
|
||||
it('reads through the shell', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
const serveNativeVerb = vi.fn(async () => ({ value: 'pasteboard' }))
|
||||
const pair = createFakeBridgePortPair({ serveNativeVerb })
|
||||
const verbs = await mount(pair)
|
||||
const read = verbs.readClipboardText()
|
||||
await pair.flush()
|
||||
await expect(read).resolves.toBe('pasteboard')
|
||||
expect(serveNativeVerb).toHaveBeenCalledWith('native.clipboard.read', { mime: 'text' })
|
||||
expect(pair.rpc.requests).toEqual([])
|
||||
})
|
||||
|
||||
@@ -117,12 +132,6 @@ describe('a shell that granted no native verbs', () => {
|
||||
// first would have put a request on the wire.
|
||||
expect(page.sent).toHaveLength(before)
|
||||
})
|
||||
|
||||
it('says so before it is called, so a caller can choose its own fallback', async () => {
|
||||
const pair = createFakeBridgePortPair()
|
||||
const verbs = await mount(pair)
|
||||
expect(verbs.granted).toBe(true)
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
@@ -255,30 +264,3 @@ describe('a code this page has never heard of', () => {
|
||||
expect(caught instanceof NativeVerbError && caught.reason).toBe('unreported')
|
||||
})
|
||||
})
|
||||
|
||||
describe('what the surface offers a screen', () => {
|
||||
it('carries no capability flag with nothing behind it', async () => {
|
||||
const pair = createFakeBridgePortPair({})
|
||||
const verbs = await mount(pair)
|
||||
// Pinned so an unread flag has to be added here on purpose. `canCaptureAudio` was one: four
|
||||
// grants read and answered to nobody, where the fence that actually holds is the per-verb
|
||||
// `ungranted` check every member already makes before a frame is sent. A flag no screen reads
|
||||
// is a capability negotiation that exists only in this file.
|
||||
expect(Object.keys(verbs).sort()).toEqual([
|
||||
'canNameMedia',
|
||||
'canPickMedia',
|
||||
'canReadClipboardText',
|
||||
'canWriteClipboardText',
|
||||
'granted',
|
||||
'nameMedia',
|
||||
'pickMedia',
|
||||
'readAudio',
|
||||
'readClipboardText',
|
||||
'readMedia',
|
||||
'releaseMedia',
|
||||
'startAudio',
|
||||
'stopAudio',
|
||||
'writeClipboardText'
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
@@ -20,7 +20,7 @@ vi.mock('../notifications/push-registration', () => ({
|
||||
unregisterPushForRemovedHost: async () => () => undefined
|
||||
}))
|
||||
|
||||
import { createGenerationStore, type GenerationStore } from './generation-store'
|
||||
import type { GenerationStore } from './generation-store'
|
||||
import { deriveHostCacheKey } from './host-cache-key'
|
||||
import { createMobileWebShellRuntime } from './mobile-web-shell-runtime'
|
||||
import { resetProcessGenerationStoreForTests } from './process-generation-store'
|
||||
@@ -67,13 +67,12 @@ function failure(hostId: string): MobileWebShellUpdateFailure {
|
||||
}
|
||||
}
|
||||
|
||||
function macrotask(): Promise<void> {
|
||||
return new Promise((resolve) => setTimeout(resolve, 0))
|
||||
}
|
||||
|
||||
/** Every read of `file` returns what was on disk when it was issued, a macrotask later, and the
|
||||
* first one starts the removal: the slow read a real device gives the other side's write. */
|
||||
function slowReadsOf(fileSystem: FakeGenerationFileSystem, file: string, onFirst: () => void) {
|
||||
/** Hold the first read until host removal has queued its cleanup behind this operation. */
|
||||
function slowReadsOf(
|
||||
fileSystem: FakeGenerationFileSystem,
|
||||
file: string,
|
||||
onFirst: () => Promise<void>
|
||||
) {
|
||||
const readText = fileSystem.readText.bind(fileSystem)
|
||||
let reads = 0
|
||||
fileSystem.readText = async (target) => {
|
||||
@@ -83,19 +82,12 @@ function slowReadsOf(fileSystem: FakeGenerationFileSystem, file: string, onFirst
|
||||
const text = await readText(target)
|
||||
reads += 1
|
||||
if (reads === 1) {
|
||||
onFirst()
|
||||
await onFirst()
|
||||
}
|
||||
await macrotask()
|
||||
return text
|
||||
}
|
||||
}
|
||||
|
||||
async function drain(): Promise<void> {
|
||||
for (let turn = 0; turn < 10; turn += 1) {
|
||||
await macrotask()
|
||||
}
|
||||
}
|
||||
|
||||
async function seedHosts(store: GenerationStore): Promise<void> {
|
||||
for (const hostId of [REMOVED, KEPT]) {
|
||||
const key = deriveHostCacheKey(hostId)
|
||||
@@ -109,15 +101,6 @@ function indexedHostKeys(fileSystem: FakeGenerationFileSystem): string[] {
|
||||
|
||||
type Sides = { session: () => GenerationStore; removeHost: (hostId: string) => Promise<void> }
|
||||
|
||||
const independentInstances: Sides = {
|
||||
session: () => createGenerationStore({ fileSystem: requireFileSystem() }),
|
||||
removeHost: async (hostId) => {
|
||||
const removal = createGenerationStore({ fileSystem: requireFileSystem() })
|
||||
void removal.forgetHostUpdateFailures(hostId)
|
||||
void removal.deleteHostCache(deriveHostCacheKey(hostId)).catch(() => undefined)
|
||||
}
|
||||
}
|
||||
|
||||
const productionSeams: Sides = {
|
||||
session: () => createMobileWebShellRuntime().createStore(),
|
||||
removeHost: (hostId) => removeHostAndCloseClient(hostId, () => undefined)
|
||||
@@ -136,9 +119,9 @@ async function removeDuringCommit(sides: Sides): Promise<FakeGenerationFileSyste
|
||||
const session = sides.session()
|
||||
await seedHosts(session)
|
||||
const staged = await session.stageGeneration(deriveHostCacheKey(OPENED), bundle())
|
||||
slowReadsOf(fileSystem, INDEX, () => void sides.removeHost(REMOVED))
|
||||
slowReadsOf(fileSystem, INDEX, () => sides.removeHost(REMOVED))
|
||||
await session.commitGeneration(staged)
|
||||
await drain()
|
||||
await session.readUpdateFailures()
|
||||
return fileSystem
|
||||
}
|
||||
|
||||
@@ -147,9 +130,9 @@ async function removeDuringRecord(sides: Sides): Promise<FakeGenerationFileSyste
|
||||
const fileSystem = requireFileSystem()
|
||||
const session = sides.session()
|
||||
await session.recordUpdateFailure(failure(REMOVED))
|
||||
slowReadsOf(fileSystem, LOG, () => void sides.removeHost(REMOVED))
|
||||
slowReadsOf(fileSystem, LOG, () => sides.removeHost(REMOVED))
|
||||
await session.recordUpdateFailure(failure(KEPT))
|
||||
await drain()
|
||||
await session.readUpdateFailures()
|
||||
return fileSystem
|
||||
}
|
||||
|
||||
@@ -158,18 +141,6 @@ beforeEach(() => {
|
||||
resetProcessGenerationStoreForTests()
|
||||
})
|
||||
|
||||
describe('two generation store instances over one cache', () => {
|
||||
it('lose the activation a removal lands inside', async () => {
|
||||
const fileSystem = await removeDuringCommit(independentInstances)
|
||||
expect(indexedHostKeys(fileSystem)).not.toContain(deriveHostCacheKey(OPENED))
|
||||
})
|
||||
|
||||
it("lose the failure a removal's forget lands inside", async () => {
|
||||
const fileSystem = await removeDuringRecord(independentInstances)
|
||||
expect(fileSystem.text(LOG)).toBeNull()
|
||||
})
|
||||
})
|
||||
|
||||
describe('host removal and the mounted shell session', () => {
|
||||
it("delete the removed host's tree and index entry, and only that host's", async () => {
|
||||
const fileSystem = await removeDuringCommit(productionSeams)
|
||||
|
||||
@@ -10,9 +10,28 @@ import { act, create, type ReactTestRenderer } from 'react-test-renderer'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
vi.mock('react-native', () => ({
|
||||
View: 'View',
|
||||
Keyboard: { dismiss: () => {} },
|
||||
AppState: { currentState: 'active', addEventListener: () => ({ remove: () => {} }) },
|
||||
Platform: { OS: 'ios' }
|
||||
}))
|
||||
vi.mock('../platform/clipboard', () => ({
|
||||
useClipboardWriter: () => ({ writeText: async () => {} }),
|
||||
useClipboardReader: () => ({ contents: async () => ({ text: false, image: false }) })
|
||||
}))
|
||||
vi.mock('../platform/haptics', () => ({
|
||||
triggerSuccess: () => {},
|
||||
triggerError: () => {},
|
||||
triggerSelection: () => {},
|
||||
triggerEdgeBump: () => {}
|
||||
}))
|
||||
vi.mock('../terminal/terminal-copy-gutter-preference', () => ({
|
||||
useTerminalCopyTrimsGutter: () => ({ current: false })
|
||||
}))
|
||||
vi.mock('../session/mobile-session-styles', () => ({ styles: { container: {}, kavInner: {} } }))
|
||||
vi.mock('../session/MobileSessionHeader', () => ({ MobileSessionHeader: () => null }))
|
||||
vi.mock('../session/MobileSessionContentRow', () => ({ MobileSessionContentRow: () => null }))
|
||||
vi.mock('../session/MobileSessionSheets', () => ({ MobileSessionSheets: () => null }))
|
||||
vi.mock('expo-keep-awake', () => ({
|
||||
activateKeepAwakeAsync: () => Promise.resolve(),
|
||||
deactivateKeepAwake: () => Promise.resolve()
|
||||
@@ -33,12 +52,16 @@ import { useMobileDictation, type UseMobileDictationResult } from '../hooks/use-
|
||||
import { createNativeAudioCapture, type NativeAudioEngine } from '../platform/native-audio'
|
||||
import { subscribeMobileTerminalSafely } from '../session/mobile-terminal-stream-subscribe'
|
||||
import { useMobileSessionTerminalSubscriptionFoundation } from '../session/use-mobile-session-terminal-subscription-foundation'
|
||||
import { useMobileSessionAccessorySelection } from '../session/use-mobile-session-accessory-selection'
|
||||
import { MobileSessionSurface } from '../session/MobileSessionSurface'
|
||||
import { createFakeRpcClient, type FakeRpcClient } from './bridge-host-test-fakes'
|
||||
import { createFakeBridgePortPair } from './bridge/bridge-port-pair-test-harness'
|
||||
import type { BridgeNativeVerb } from './bridge/bridge-native-verbs'
|
||||
import { routeViewOf } from './page-route-policy'
|
||||
|
||||
type FoundationScope = Parameters<typeof useMobileSessionTerminalSubscriptionFoundation>[0]
|
||||
type AccessoryScope = Parameters<typeof useMobileSessionAccessorySelection>[0]
|
||||
type SurfaceController = Parameters<typeof MobileSessionSurface>[0]['controller']
|
||||
|
||||
const HOST_AREA_GRANTS = routeViewOf(
|
||||
[
|
||||
@@ -106,8 +129,6 @@ describe('leaving a workspace inside the host-area page', () => {
|
||||
it('releases every terminal stream when the session root detaches, so the PTY is restored', async () => {
|
||||
const pair = hostAreaPair([])
|
||||
await pair.flush()
|
||||
// The real teardown `setMobileSessionRootRef` runs when the session root's ref detaches.
|
||||
const held: { clear: (() => void) | null } = { clear: null }
|
||||
const terminalUnsubsRef = { current: new Map<string, () => void>() }
|
||||
function SessionTerminals() {
|
||||
const scope = {
|
||||
@@ -127,36 +148,97 @@ describe('leaving a workspace inside the host-area page', () => {
|
||||
layoutSeqRef: { current: new Map() },
|
||||
nativeChatInputLeaseReadyRef: { current: false },
|
||||
clearNativeChatInputLease: () => {},
|
||||
showNativeChatRef: { current: false }
|
||||
showNativeChatRef: { current: false },
|
||||
worktreeId: 'folder:remote',
|
||||
isFloatingWorkspaceRoute: false,
|
||||
client: pair.client,
|
||||
connState: 'connected',
|
||||
setSelectModeActive: () => {},
|
||||
setCanPaste: () => {},
|
||||
toastSeqRef: { current: 0 },
|
||||
ptyModesRef: { current: new Map() },
|
||||
initialModesSeenRef: { current: new Set() },
|
||||
liveInputFocusTimerRef: { current: null },
|
||||
sessionTabActionSheetRequestSeqRef: { current: 0 },
|
||||
clearPendingLiveInputCommit: () => {},
|
||||
clearDelayedActionTimers: () => {},
|
||||
clearToastHideTimer: () => {},
|
||||
showToast: () => {},
|
||||
handleAccessoryKey: () => {},
|
||||
clearSessionTabActionSheetKeyboardListener: () => {}
|
||||
}
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the foundation destructures only the fields built above.
|
||||
const typed = scope as unknown as FoundationScope
|
||||
held.clear = useMobileSessionTerminalSubscriptionFoundation(typed).clearTerminalCache
|
||||
return null
|
||||
const foundation = useMobileSessionTerminalSubscriptionFoundation(typed)
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the accessory hook reads the listed scope and actual foundation callbacks.
|
||||
const accessoryScope = { ...scope, ...foundation } as unknown as AccessoryScope
|
||||
const accessory = useMobileSessionAccessorySelection(accessoryScope)
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the actual surface reads this ref callback; its presentation children are stubbed.
|
||||
const controller = accessory as unknown as SurfaceController
|
||||
return <MobileSessionSurface controller={controller} />
|
||||
}
|
||||
act(() => {
|
||||
create(<SessionTerminals />)
|
||||
})
|
||||
for (const terminal of ['pty-1', 'pty-2']) {
|
||||
terminalUnsubsRef.current.set(
|
||||
terminal,
|
||||
subscribeMobileTerminalSafely(
|
||||
pair.client,
|
||||
{ terminal, client: { id: 'phone' }, viewport: { cols: 60, rows: 30 } },
|
||||
() => {},
|
||||
() => {}
|
||||
const mounted: { tree: ReactTestRenderer | null } = { tree: null }
|
||||
try {
|
||||
act(() => {
|
||||
mounted.tree = create(<SessionTerminals />, { createNodeMock: () => ({}) })
|
||||
})
|
||||
for (const terminal of ['pty-1', 'pty-2']) {
|
||||
terminalUnsubsRef.current.set(
|
||||
terminal,
|
||||
subscribeMobileTerminalSafely(
|
||||
pair.client,
|
||||
{ terminal, client: { id: 'phone' }, viewport: { cols: 60, rows: 30 } },
|
||||
() => {},
|
||||
() => {}
|
||||
)
|
||||
)
|
||||
}
|
||||
await pair.flush()
|
||||
expect(
|
||||
pair.rpc.streams.map((stream) => [stream.method, stream.params, stream.unsubscribes])
|
||||
).toEqual([
|
||||
[
|
||||
'terminal.subscribe',
|
||||
{ terminal: 'pty-1', client: { id: 'phone' }, viewport: { cols: 60, rows: 30 } },
|
||||
0
|
||||
],
|
||||
[
|
||||
'terminal.subscribe',
|
||||
{ terminal: 'pty-2', client: { id: 'phone' }, viewport: { cols: 60, rows: 30 } },
|
||||
0
|
||||
]
|
||||
])
|
||||
act(() => mounted.tree?.unmount())
|
||||
mounted.tree = null
|
||||
await pair.flush()
|
||||
expect(pair.rpc.streams.map((stream) => stream.unsubscribes)).toEqual([1, 1])
|
||||
expect(terminalUnsubsRef.current.size).toBe(0)
|
||||
const params = {
|
||||
terminal: 'pty-after-detach',
|
||||
client: { id: 'phone' },
|
||||
viewport: { cols: 60, rows: 30 }
|
||||
}
|
||||
const unsubscribe = subscribeMobileTerminalSafely(
|
||||
pair.client,
|
||||
params,
|
||||
() => {},
|
||||
() => {}
|
||||
)
|
||||
await pair.flush()
|
||||
expect(pair.rpc.streams[2]).toMatchObject({
|
||||
method: 'terminal.subscribe',
|
||||
params,
|
||||
unsubscribes: 0
|
||||
})
|
||||
unsubscribe()
|
||||
await pair.flush()
|
||||
expect(pair.rpc.streams.slice(0, 2).map((stream) => stream.unsubscribes)).toEqual([1, 1])
|
||||
expect(pair.rpc.streams[2]?.unsubscribes).toBe(1)
|
||||
} finally {
|
||||
act(() => mounted.tree?.unmount())
|
||||
pair.client.close()
|
||||
pair.host.dispose()
|
||||
}
|
||||
await pair.flush()
|
||||
expect(pair.rpc.streams.map((stream) => stream.method)).toEqual([
|
||||
'terminal.subscribe',
|
||||
'terminal.subscribe'
|
||||
])
|
||||
act(() => held.clear?.())
|
||||
await pair.flush()
|
||||
// The desktop's mobile subscriber goes with each stream, and with it the phone-size fit.
|
||||
expect(pair.rpc.streams.map((stream) => stream.unsubscribes)).toEqual([1, 1])
|
||||
})
|
||||
|
||||
it('closes the microphone and lets the screen sleep when the composer unmounts', async () => {
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
* The page must read and write them exactly as a session page opened for that workspace does:
|
||||
* `orca:nativeChatTabs:<host>:<worktree>` (which tabs show the chat) and
|
||||
* `orca:terminalLiveInputDisabled:<host>:<worktree>` (the handles typing goes around). They are the
|
||||
* only workspace-scoped keys in `page-storage-keys.ts`; `init` carries none of them for this page,
|
||||
* workspace-scoped keys exercised here; `init` carries none of them for this page,
|
||||
* which reads each from the shell when it opens that workspace.
|
||||
*/
|
||||
import { act, create } from 'react-test-renderer'
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { act, create, type ReactTestRenderer } from 'react-test-renderer'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const store = vi.hoisted(() => new Map<string, string>())
|
||||
// Writes wait here until a case lands them, as a native store's queue holds them.
|
||||
@@ -59,6 +59,16 @@ function persisted(): void {
|
||||
}
|
||||
}
|
||||
|
||||
const mounted: ReactTestRenderer[] = []
|
||||
|
||||
afterEach(() => {
|
||||
act(() => {
|
||||
for (const tree of mounted.splice(0)) {
|
||||
tree.unmount()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
async function snapshotFor(routePathname: string, hostArea: boolean) {
|
||||
const held: { view: PageHostSnapshotView | null } = { view: null }
|
||||
function Probe() {
|
||||
@@ -66,7 +76,7 @@ async function snapshotFor(routePathname: string, hostArea: boolean) {
|
||||
return null
|
||||
}
|
||||
await act(async () => {
|
||||
create(<Probe />)
|
||||
mounted.push(create(<Probe />))
|
||||
})
|
||||
await act(async () => {})
|
||||
if (held.view === null) {
|
||||
|
||||
@@ -75,7 +75,7 @@ function wideStateFor(routes: MobileWebPageRoute[] | null, pathname = HOST_ROUTE
|
||||
}
|
||||
|
||||
describe('the page declaring it can own the host area', () => {
|
||||
it('is a manifest field the desktop may write and an old phone reads past', () => {
|
||||
it('accepts a true ownership declaration from the desktop and refuses false', () => {
|
||||
const [host] = desktopRoutes(true)
|
||||
expect(MobileWebBundleRouteSchema.safeParse(host).success).toBe(true)
|
||||
// `true` only: a desktop writing `false` is writing a field with no meaning.
|
||||
|
||||
@@ -218,19 +218,22 @@ describe('ending a handle', () => {
|
||||
|
||||
it('keeps going when the device refuses to delete one staged file', () => {
|
||||
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
||||
const failing = new MediaHandleRegistry({
|
||||
now: () => 1_000,
|
||||
discard: (uri) => {
|
||||
if (uri.endsWith('2.png')) {
|
||||
throw new Error('the OS reclaimed it first')
|
||||
try {
|
||||
const failing = new MediaHandleRegistry({
|
||||
now: () => 1_000,
|
||||
discard: (uri) => {
|
||||
if (uri.endsWith('2.png')) {
|
||||
throw new Error('the OS reclaimed it first')
|
||||
}
|
||||
deleted.push(uri)
|
||||
}
|
||||
deleted.push(uri)
|
||||
}
|
||||
})
|
||||
failing.mint([staged(1), staged(2), staged(3)])
|
||||
failing.releaseAll()
|
||||
expect(deleted).toHaveLength(2)
|
||||
expect(failing.liveCount()).toBe(0)
|
||||
warn.mockRestore()
|
||||
})
|
||||
failing.mint([staged(1), staged(2), staged(3)])
|
||||
failing.releaseAll()
|
||||
expect(deleted).toEqual([staged(1).uri, staged(3).uri])
|
||||
expect(failing.liveCount()).toBe(0)
|
||||
} finally {
|
||||
warn.mockRestore()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -12,14 +12,6 @@ describe('the shell dev facts line', () => {
|
||||
expect(line).not.toContain(READY.buildId)
|
||||
})
|
||||
|
||||
/** Absent rather than zero: the line is read at a glance on a device, and a count that is always
|
||||
* there is one nobody notices changing. */
|
||||
it('says nothing about dropped frames until one is dropped', () => {
|
||||
expect(formatMobileWebShellDevFacts({ ...READY, droppedBinaryFrames: 0 })).not.toContain(
|
||||
'dropped'
|
||||
)
|
||||
})
|
||||
|
||||
it('carries the running dropped-frame count once the stream has shed one', () => {
|
||||
expect(formatMobileWebShellDevFacts({ ...READY, droppedBinaryFrames: 1 })).toBe(
|
||||
`${PREFIX} · 2097152 B · 412 ms · 1 frame dropped`
|
||||
|
||||
@@ -7,18 +7,7 @@ import type {
|
||||
MobileWebShellUpdateNotice
|
||||
} from './mobile-web-shell-session-contract'
|
||||
|
||||
/**
|
||||
* Phase D of the hybrid RC emulator run, end to end and against a disk.
|
||||
*
|
||||
* The host is reachable and serves a generation whose assets do not arrive intact. Refusing them is
|
||||
* right — the fetch hashes every asset, and a truncated one is not a bundle. What the shell then
|
||||
* did was paint a refusal wall with a "Try again" over a generation already on disk that it would
|
||||
* have opened without being asked the moment the host went away.
|
||||
*
|
||||
* The reducer suite pins the decision; this pins the two things only a disk can answer: the refused
|
||||
* generation never reaches the cache, and the next launch asks the host again rather than living
|
||||
* under a fallback forever.
|
||||
*/
|
||||
/** Real session hook and generation store over an in-memory filesystem; manifest/fetch are stubbed. */
|
||||
type Doubles = {
|
||||
connection: { client: object | null; state: string }
|
||||
gates: {
|
||||
@@ -302,16 +291,6 @@ describe('an update the shell refuses while the host is reachable', () => {
|
||||
expect(cachedBuildIds(fileSystem)).toEqual([GOOD_BUILD_ID])
|
||||
})
|
||||
|
||||
it('serves the generation still inside that window, which is the same disk one field apart', async () => {
|
||||
const fileSystem = createFakeGenerationFileSystem()
|
||||
await cacheGeneration(fileSystem, GOOD_MANIFEST)
|
||||
|
||||
const mounted = await mountRoute(fileSystem)
|
||||
|
||||
expect(mounted.state()).toMatchObject({ kind: 'ready', buildId: GOOD_BUILD_ID })
|
||||
expect(mounted.updateNotice()).toBe('update-failed')
|
||||
})
|
||||
|
||||
it('writes down why on the device, which is all a release build keeps', async () => {
|
||||
const fileSystem = createFakeGenerationFileSystem()
|
||||
await cacheGeneration(fileSystem)
|
||||
|
||||
@@ -48,6 +48,7 @@ describe('an update this shell refused falls back to the generation that already
|
||||
|
||||
it('opens the cached generation rather than walling a host it can still reach', () => {
|
||||
const step = refused()
|
||||
expect(step.session.updateNotice).toBe('update-failed')
|
||||
expect(step.session.state).toEqual({ kind: 'activating', source: 'cache' })
|
||||
expect(withoutRecord(step.effects)).toEqual([
|
||||
{
|
||||
@@ -123,11 +124,6 @@ describe('an update this shell refused falls back to the generation that already
|
||||
expect(withoutRecord(step.effects)).toEqual([])
|
||||
})
|
||||
|
||||
it('serves the generation that is still inside the window, which is the case above inverted', () => {
|
||||
expect(refused().session.state).toEqual({ kind: 'activating', source: 'cache' })
|
||||
expect(refused().session.updateNotice).toBe('update-failed')
|
||||
})
|
||||
|
||||
it('shows the download failure when the cached bundle never carried the route, before any wall', () => {
|
||||
// The newer manifest claimed the route, so the cache lacking it is this download's failure.
|
||||
// Below the host's floor as well: the wall judges bytes about to be shown, and these are not.
|
||||
|
||||
@@ -62,7 +62,7 @@ function storeThat(fail: 'stage' | 'commit' | null): GenerationStore {
|
||||
commitGeneration:
|
||||
fail === 'commit'
|
||||
? reject
|
||||
: async () => ({ buildId: 'c', directory: 'd', manifest: MANIFEST }),
|
||||
: async () => ({ buildId: MANIFEST.buildId, directory: 'd', manifest: MANIFEST }),
|
||||
abortStagedGeneration: async () => undefined,
|
||||
openReusableAssets: async () => ({ has: () => false, check: async () => false }),
|
||||
sweepStagedGenerations: async () => undefined,
|
||||
@@ -81,7 +81,11 @@ function collect(): {
|
||||
return { events, send: (event) => events.push(event) }
|
||||
}
|
||||
|
||||
async function runDownload(client: RpcClient | null, store: GenerationStore) {
|
||||
async function downloadEvents(
|
||||
client: RpcClient | null,
|
||||
store: GenerationStore,
|
||||
downloads = new Set<AbortController>()
|
||||
) {
|
||||
const { events, send } = collect()
|
||||
await download({
|
||||
client,
|
||||
@@ -95,10 +99,14 @@ async function runDownload(client: RpcClient | null, store: GenerationStore) {
|
||||
setTimer: () => () => {}
|
||||
},
|
||||
startedAt: 0,
|
||||
downloads: new Set(),
|
||||
downloads,
|
||||
send
|
||||
})
|
||||
return events.filter((event) => event.type === 'download-failed')
|
||||
return events
|
||||
}
|
||||
|
||||
async function runDownload(client: RpcClient | null, store: GenerationStore) {
|
||||
return (await downloadEvents(client, store)).filter((event) => event.type === 'download-failed')
|
||||
}
|
||||
|
||||
describe('the manifest read', () => {
|
||||
@@ -191,7 +199,25 @@ describe('the download', () => {
|
||||
})
|
||||
|
||||
it('that lands whole reports no failure', async () => {
|
||||
expect(await runDownload(CLIENT, storeThat(null))).toEqual([])
|
||||
const downloads = new Set<AbortController>()
|
||||
const fetch = doubles.fetch
|
||||
doubles.fetch = () => {
|
||||
expect(downloads.size).toBe(1)
|
||||
return fetch()
|
||||
}
|
||||
expect(await downloadEvents(CLIENT, storeThat(null), downloads)).toEqual([
|
||||
{ type: 'download-staged', flow: 3 },
|
||||
{
|
||||
type: 'activated',
|
||||
flow: 3,
|
||||
generationDirectory: 'd',
|
||||
sessionId: 's',
|
||||
buildId: MANIFEST.buildId,
|
||||
totalBytes: 1,
|
||||
elapsedMs: 0
|
||||
}
|
||||
])
|
||||
expect(downloads.size).toBe(0)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -277,12 +303,46 @@ describe('a download that reuses the cached generation', () => {
|
||||
})
|
||||
|
||||
it('commits once when two downloads of the same build finish together', async () => {
|
||||
const { store } = await cachedStore()
|
||||
const { fileSystem, store } = await cachedStore()
|
||||
doubles.fetch = async () => UPDATE
|
||||
|
||||
const [first, second] = await Promise.all([runFor(store), runFor(store)])
|
||||
|
||||
expect([...first, ...second].filter((event) => event.type === 'download-failed')).toEqual([])
|
||||
expect((await store.readActiveGeneration(HOST))?.buildId).toBe(UPDATE.manifest.buildId)
|
||||
const moveDirectory = fileSystem.moveDirectory.bind(fileSystem)
|
||||
const moves: [string, string][] = []
|
||||
fileSystem.moveDirectory = async (from, to) => {
|
||||
moves.push([from, to])
|
||||
await moveDirectory(from, to)
|
||||
}
|
||||
try {
|
||||
const [first, second] = await Promise.all([runFor(store), runFor(store)])
|
||||
const expected = [
|
||||
{ type: 'download-staged', flow: 3 },
|
||||
{
|
||||
type: 'activated',
|
||||
flow: 3,
|
||||
generationDirectory: `/cache/mobile-web/${HOST}/generations/${UPDATE.manifest.buildId}`,
|
||||
sessionId: 's',
|
||||
buildId: UPDATE.manifest.buildId,
|
||||
totalBytes: UPDATE.manifest.totalBytes,
|
||||
elapsedMs: 0
|
||||
}
|
||||
]
|
||||
expect(first).toEqual(expected)
|
||||
expect(second).toEqual(expected)
|
||||
expect(moves).toEqual([
|
||||
[
|
||||
`${fileSystem.rootUri}/${HOST}/tmp/${UPDATE.manifest.buildId}`,
|
||||
`${fileSystem.rootUri}/${HOST}/generations/${UPDATE.manifest.buildId}`
|
||||
]
|
||||
])
|
||||
expect(await store.readActiveGeneration(HOST)).toEqual({
|
||||
buildId: UPDATE.manifest.buildId,
|
||||
directory: `${fileSystem.rootUri}/${HOST}/generations/${UPDATE.manifest.buildId}`,
|
||||
manifest: UPDATE.manifest
|
||||
})
|
||||
expect(fileSystem.bytes(`${HOST}/generations/${UPDATE.manifest.buildId}/app.js`)).toEqual(
|
||||
new Uint8Array(2)
|
||||
)
|
||||
} finally {
|
||||
fileSystem.moveDirectory = moveDirectory
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -33,19 +33,18 @@ describe('falling back to the cached generation after a failed download', () =>
|
||||
})
|
||||
|
||||
it('opens it under its own grants, not the ones the newer manifest declared', () => {
|
||||
const step = run(
|
||||
afterCacheRead(cachedOnlyNavigate).session,
|
||||
{ type: 'manifest-read', manifest: manifestWithClipboard },
|
||||
{ type: 'download-failed', cause: LINK_LOST }
|
||||
)
|
||||
const fetching = run(afterCacheRead(cachedOnlyNavigate).session, {
|
||||
type: 'manifest-read',
|
||||
manifest: manifestWithClipboard
|
||||
})
|
||||
expect([...fetching.session.routeGrants]).toEqual(['navigate', 'native.clipboard.read'])
|
||||
const step = run(fetching.session, { type: 'download-failed', cause: LINK_LOST })
|
||||
expect(step.session.state.kind).toBe('activating')
|
||||
expect([...step.session.routeGrants]).toEqual(['navigate'])
|
||||
})
|
||||
|
||||
it('carries a verb declared in the manifest through to the session grants', () => {
|
||||
// The whole path a verb takes before a page can call one: the desktop's manifest contract
|
||||
// admits the name, the phone's reader keeps it, and the route policy grants it because this
|
||||
// build implements it.
|
||||
// Project manifest facts through the actual reducer and route policy.
|
||||
const step = run(afterCacheRead(null).session, {
|
||||
type: 'manifest-read',
|
||||
manifest: manifestFacts({
|
||||
@@ -55,14 +54,6 @@ describe('falling back to the cached generation after a failed download', () =>
|
||||
})
|
||||
expect([...step.session.routeGrants]).toEqual(['navigate', 'native.clipboard.write'])
|
||||
})
|
||||
|
||||
it('had the newer grants before the download failed, so the case discriminates', () => {
|
||||
const step = run(afterCacheRead(cachedOnlyNavigate).session, {
|
||||
type: 'manifest-read',
|
||||
manifest: manifestWithClipboard
|
||||
})
|
||||
expect([...step.session.routeGrants]).toEqual(['navigate', 'native.clipboard.read'])
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/** The reducer's fixtures and drivers, shared by the suites that are split by concern rather than
|
||||
* by subject: one session, one set of gates, and the steps that get it to each state. */
|
||||
import { computeMobileWebBundleId } from '../../../src/shared/mobile-web-bundle/manifest-contract'
|
||||
import { MOBILE_WEB_BUNDLE_CAPABILITY } from '../../../src/shared/mobile-web-bundle/mobile-web-bundle-capability'
|
||||
export { createMobileWebShellSession } from './mobile-web-shell-session'
|
||||
import {
|
||||
@@ -34,30 +35,32 @@ export const ROUTE = '/h/host-1'
|
||||
export const PAGE_ROUTES = [{ pathname: '/h/[hostId]', grants: ['navigate'] }]
|
||||
|
||||
/** The manifest as the host sends it; facts below are projected from it. */
|
||||
const MANIFEST_ASSETS: MobileWebBundleManifestRead['assets'] = [
|
||||
{
|
||||
path: 'assets/app.js',
|
||||
sha256: '1'.repeat(64),
|
||||
byteLength: 1024,
|
||||
contentType: 'text/javascript'
|
||||
},
|
||||
{ path: 'assets/app.css', sha256: '2'.repeat(64), byteLength: 1024, contentType: 'text/css' },
|
||||
{
|
||||
path: 'assets/logo.svg',
|
||||
sha256: '3'.repeat(64),
|
||||
byteLength: 1024,
|
||||
contentType: 'image/svg+xml'
|
||||
},
|
||||
{ path: 'index.html', sha256: '4'.repeat(64), byteLength: 1024, contentType: 'text/html' }
|
||||
]
|
||||
|
||||
export const MANIFEST_WIRE: MobileWebBundleManifestRead = {
|
||||
schemaVersion: 1,
|
||||
buildId: 'b'.repeat(64),
|
||||
buildId: computeMobileWebBundleId(MANIFEST_ASSETS),
|
||||
minCompatibleRuntimeProtocolVersion: 2,
|
||||
runtimeProtocolVersion: 5,
|
||||
pageVersion: 1,
|
||||
entrypoint: 'index.html',
|
||||
totalBytes: 4096,
|
||||
assets: [
|
||||
{
|
||||
path: 'assets/app.js',
|
||||
sha256: '1'.repeat(64),
|
||||
byteLength: 1024,
|
||||
contentType: 'text/javascript'
|
||||
},
|
||||
{ path: 'assets/app.css', sha256: '2'.repeat(64), byteLength: 1024, contentType: 'text/css' },
|
||||
{
|
||||
path: 'assets/logo.svg',
|
||||
sha256: '3'.repeat(64),
|
||||
byteLength: 1024,
|
||||
contentType: 'image/svg+xml'
|
||||
},
|
||||
{ path: 'index.html', sha256: '4'.repeat(64), byteLength: 1024, contentType: 'text/html' }
|
||||
],
|
||||
assets: MANIFEST_ASSETS,
|
||||
routes: PAGE_ROUTES
|
||||
}
|
||||
|
||||
|
||||
@@ -171,17 +171,6 @@ describe('the connected flow', () => {
|
||||
expect(step.effects).toEqual([{ kind: 'download' }])
|
||||
})
|
||||
|
||||
it('still walls a listed route whose bundle this shell cannot read', () => {
|
||||
const step = run(afterCacheRead(null).session, {
|
||||
type: 'manifest-read',
|
||||
manifest: { ...MANIFEST, schemaVersion: 99 }
|
||||
})
|
||||
expect(step.session.state).toMatchObject({
|
||||
kind: 'wall',
|
||||
verdict: { reason: 'bundle-shell-too-old' }
|
||||
})
|
||||
})
|
||||
|
||||
it('walls a listed route whose page is older than this shell, as a desktop to update', () => {
|
||||
for (const manifest of [
|
||||
{ ...MANIFEST, pageVersion: 0 },
|
||||
@@ -453,12 +442,19 @@ describe('recovery follows the shell view contract', () => {
|
||||
|
||||
describe('try again', () => {
|
||||
it('clears both latches and restarts the flow', () => {
|
||||
const first = run(readySession().session, {
|
||||
const lost = run(readySession().session, {
|
||||
type: 'shell-failed',
|
||||
reason: 'render-process-gone'
|
||||
})
|
||||
const remounted = run(lost.session, { type: 'remounted', sessionId: 'session-remounted' })
|
||||
const first = run(remounted.session, {
|
||||
type: 'shell-failed',
|
||||
reason: 'document-load-failed'
|
||||
})
|
||||
const refetched = readyAgain(first.session, 'session-two')
|
||||
const failed = run(refetched.session, { type: 'shell-failed', reason: 'document-load-failed' })
|
||||
expect(failed.session.retriedOnce).toBe(true)
|
||||
expect(failed.session.remountedOnce).toBe(true)
|
||||
const retried = run(failed.session, { type: 'retry-pressed' })
|
||||
expect(retried.session.retriedOnce).toBe(false)
|
||||
expect(retried.session.remountedOnce).toBe(false)
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { computeMobileWebBundleId } from '../../../src/shared/mobile-web-bundle/manifest-contract'
|
||||
import type { MobileWebBundleFetchResult } from '../transport/mobile-web-bundle-fetch'
|
||||
import { createFakeGenerationFileSystem } from './generation-file-system-fake'
|
||||
import { createGenerationStore, MAX_CACHED_HOSTS } from './generation-store'
|
||||
import { deriveHostCacheKey } from './host-cache-key'
|
||||
@@ -52,9 +54,15 @@ describe('appendUpdateFailure', () => {
|
||||
expect(kept[0]?.at).toBe(10)
|
||||
})
|
||||
|
||||
// Pinned here because deriving it would make the failure log import the store that imports it.
|
||||
it('keeps a full per-host history for every cached host', () => {
|
||||
expect(MAX_UPDATE_FAILURES).toBe(MAX_UPDATE_FAILURES_PER_HOST * MAX_CACHED_HOSTS)
|
||||
const entries = Array.from({ length: MAX_CACHED_HOSTS }, (_, host) =>
|
||||
Array.from({ length: MAX_UPDATE_FAILURES_PER_HOST }, (_, offset) =>
|
||||
failure(`host-${host}`, host * MAX_UPDATE_FAILURES_PER_HOST + offset)
|
||||
)
|
||||
).flat()
|
||||
expect(appendAll(entries)).toEqual(entries)
|
||||
const extra = failure('host-0', entries.length)
|
||||
expect(appendAll([...entries, extra])).toEqual([...entries.slice(1), extra])
|
||||
})
|
||||
|
||||
it('drops a build id that is not a digest rather than keep host text', () => {
|
||||
@@ -89,9 +97,38 @@ describe('the generation store keeps the log', () => {
|
||||
it("outlives the host's own cache, which a recovery deletes", async () => {
|
||||
const fileSystem = createFakeGenerationFileSystem()
|
||||
const store = createGenerationStore({ fileSystem })
|
||||
await store.recordUpdateFailure(failure('host-1', 1))
|
||||
await store.deleteHostCache(deriveHostCacheKey('host-1'))
|
||||
expect(await store.readUpdateFailures()).toHaveLength(1)
|
||||
const host = deriveHostCacheKey('host-1')
|
||||
const assets = [
|
||||
{ path: 'index.html', sha256: '1'.repeat(64), byteLength: 1, contentType: 'text/html' }
|
||||
]
|
||||
const buildId = computeMobileWebBundleId(assets)
|
||||
const bundle: MobileWebBundleFetchResult = {
|
||||
manifest: {
|
||||
schemaVersion: 1,
|
||||
buildId,
|
||||
minCompatibleRuntimeProtocolVersion: 2,
|
||||
runtimeProtocolVersion: 2,
|
||||
entrypoint: 'index.html',
|
||||
totalBytes: 1,
|
||||
assets
|
||||
},
|
||||
assets: new Map([['index.html', new Uint8Array(1)]]),
|
||||
reused: [],
|
||||
totalBytes: 1,
|
||||
elapsedMs: 1
|
||||
}
|
||||
await store.commitGeneration(await store.stageGeneration(host, bundle))
|
||||
expect((await store.readActiveGeneration(host))?.buildId).toBe(buildId)
|
||||
expect(fileSystem.paths()).toContain(`${host}/generations/${buildId}/manifest.json`)
|
||||
expect(fileSystem.bytes(`${host}/generations/${buildId}/index.html`)).toEqual(new Uint8Array(1))
|
||||
const recorded = failure('host-1', 1)
|
||||
await store.recordUpdateFailure(recorded)
|
||||
await store.deleteHostCache(host)
|
||||
expect(fileSystem.paths().some((path) => path === host || path.startsWith(`${host}/`))).toBe(
|
||||
false
|
||||
)
|
||||
expect(await store.readActiveGeneration(host)).toBeNull()
|
||||
expect(await store.readUpdateFailures()).toEqual([recorded])
|
||||
})
|
||||
|
||||
it('reads a corrupt log as empty and keeps the entries that still parse', async () => {
|
||||
|
||||
@@ -80,7 +80,7 @@ describe('readFailureSide', () => {
|
||||
})
|
||||
|
||||
describe('updateFailureWallOf', () => {
|
||||
it('flattens each blocked verdict to one code', () => {
|
||||
it('flattens bundle availability and protocol-version verdicts to stable codes', () => {
|
||||
expect(updateFailureWallOf({ kind: 'blocked', reason: 'bundle-unavailable' })).toBe(
|
||||
'bundle-unavailable'
|
||||
)
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { MALFORMED_CURSOR_MESSAGE, SEARCH_HANDLERS } from './search'
|
||||
import { SEARCH_HANDLERS } from './search'
|
||||
import { AiVaultSearchResponseSchema } from '../../shared/ai-vault-search-contract'
|
||||
import type { AiVaultSearchResponse, AiVaultSearchStatus } from '../../shared/ai-vault-search-types'
|
||||
import { REPEATED_FLAG_SEPARATOR } from '../args'
|
||||
import { RuntimeClientError } from '../runtime/types'
|
||||
import { AI_VAULT_AGENTS } from '../../shared/ai-vault-types'
|
||||
import { RuntimeClient } from '../runtime-client'
|
||||
import { okFixture } from '../test-fixtures'
|
||||
|
||||
afterEach(() => vi.restoreAllMocks())
|
||||
|
||||
@@ -48,10 +50,6 @@ const statusResponse: AiVaultSearchStatus = {
|
||||
generation: 42
|
||||
}
|
||||
|
||||
function envelope(result: unknown) {
|
||||
return { id: 'request-1', ok: true, result, _meta: { runtimeId: 'runtime-1' } }
|
||||
}
|
||||
|
||||
async function runSearch(
|
||||
flags: [string, string | boolean][],
|
||||
options: {
|
||||
@@ -67,7 +65,8 @@ async function runSearch(
|
||||
.fn()
|
||||
.mockImplementation((method: string) =>
|
||||
Promise.resolve(
|
||||
envelope(
|
||||
okFixture(
|
||||
'request-1',
|
||||
method === 'aiVault.searchStatus'
|
||||
? statusResponse
|
||||
: (options.result ?? resultsResponse)
|
||||
@@ -75,12 +74,14 @@ async function runSearch(
|
||||
)
|
||||
)
|
||||
const lines: string[] = []
|
||||
const client = new RuntimeClient('/tmp/orca-search-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(call)
|
||||
vi.spyOn(client, 'isRemote', 'get').mockReturnValue(options.isRemote ?? false)
|
||||
vi.spyOn(console, 'log').mockImplementation((value: unknown) => {
|
||||
lines.push(String(value))
|
||||
})
|
||||
await SEARCH_HANDLERS.search!({
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the handler reads only `call` and `isRemote`; a real RuntimeClient would resolve runtime metadata and open a socket.
|
||||
client: { call, isRemote: options.isRemote ?? false } as never,
|
||||
client,
|
||||
cwd: '/workspace',
|
||||
flags: new Map(flags),
|
||||
json: options.json ?? false
|
||||
@@ -235,7 +236,10 @@ describe('orca search over the runtime RPC', () => {
|
||||
],
|
||||
{ result: { kind: 'malformed-cursor' } }
|
||||
)
|
||||
).rejects.toThrow(MALFORMED_CURSOR_MESSAGE)
|
||||
).rejects.toMatchObject({
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('re-run the search without --cursor')
|
||||
})
|
||||
})
|
||||
|
||||
it('answers a host with no such method as unavailable rather than a raw error', async () => {
|
||||
@@ -288,7 +292,6 @@ describe('orca search --json', () => {
|
||||
|
||||
expect(printed.keys).toEqual(['id', 'ok', 'result', '_meta'])
|
||||
expect(printed.result).toEqual(resultsResponse)
|
||||
expect(JSON.stringify(printed.result)).toBe(JSON.stringify(resultsResponse))
|
||||
})
|
||||
|
||||
it('drops the debug block the caller did not ask for', async () => {
|
||||
|
||||
@@ -115,10 +115,13 @@ describe('orca serve service', () => {
|
||||
calls = []
|
||||
await expect(uninstallServeService(d)).resolves.toMatchObject({ removed: true })
|
||||
expect(existsSync(String(result.unitPath))).toBe(false)
|
||||
expect(calls[0]).toMatch(/^systemctl --user disable --now orca-serve-/)
|
||||
expect(calls).toEqual([
|
||||
`systemctl --user disable --now ${String(result.name)}`,
|
||||
'systemctl --user daemon-reload'
|
||||
])
|
||||
})
|
||||
|
||||
it('never picks a version-scoped launcher from the profile or a mounted AppImage', async () => {
|
||||
it('skips a profile launcher and refuses a bare Linux orca', async () => {
|
||||
const scoped = join(home, 'profile', 'cli', 'bin')
|
||||
await mkdir(scoped, { recursive: true })
|
||||
await writeFile(join(scoped, 'orca'), '#!/bin/sh\n')
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { REPEATED_FLAG_SEPARATOR } from '../args'
|
||||
import { RuntimeRpcFailureError } from '../runtime-client'
|
||||
import { RuntimeClient, RuntimeRpcFailureError } from '../runtime-client'
|
||||
import type { HandlerContext } from '../dispatch'
|
||||
import { SKILL_SHARING_HANDLERS } from './skill-sharing'
|
||||
|
||||
const successMeta = { runtimeId: 'runtime-1' }
|
||||
|
||||
function context(
|
||||
call: ReturnType<typeof vi.fn>,
|
||||
call: RuntimeClient['call'],
|
||||
flags = new Map<string, string | boolean>(),
|
||||
options: { isRemote?: boolean; json?: boolean } = {}
|
||||
) {
|
||||
): HandlerContext {
|
||||
const client = new RuntimeClient('/tmp/orca-skill-sharing-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(call)
|
||||
vi.spyOn(client, 'isRemote', 'get').mockReturnValue(options.isRemote ?? false)
|
||||
return {
|
||||
client: { call, isRemote: options.isRemote ?? false },
|
||||
client,
|
||||
cwd: '/repo',
|
||||
flags,
|
||||
json: options.json ?? false
|
||||
} as never
|
||||
}
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
@@ -135,9 +139,17 @@ describe('skill sharing CLI handlers', () => {
|
||||
{ timeoutMs: 600_000 }
|
||||
)
|
||||
const output = String(log.mock.calls[0][0])
|
||||
expect(output).toContain('shr_public')
|
||||
expect(output).toContain('pkg_public')
|
||||
expect(output).not.toMatch(/token|secret/i)
|
||||
expect(JSON.parse(output).result).toEqual({
|
||||
url: 'https://share.onorca.dev/skills/share/shr_public',
|
||||
shareId: 'shr_public',
|
||||
packageId: 'pkg_public',
|
||||
versionId: 'ver_public',
|
||||
bundleName: 'team-skills',
|
||||
skills: [
|
||||
{ id: 'alpha-id', name: 'alpha', description: null },
|
||||
{ id: 'beta-id', name: 'beta', description: null }
|
||||
]
|
||||
})
|
||||
})
|
||||
|
||||
it('normalizes a human-readable bundle name before publishing', async () => {
|
||||
|
||||
@@ -35,8 +35,9 @@ describe('orca speech openai-key against an older server', () => {
|
||||
throw new RuntimeClientError('method_not_found', 'Unknown method: speech.openAiKey.status')
|
||||
}
|
||||
}
|
||||
await expect(callOpenAiKeyMethod(client, 'speech.openAiKey.status')).rejects.toThrow(
|
||||
'Update Orca on the server'
|
||||
)
|
||||
await expect(callOpenAiKeyMethod(client, 'speech.openAiKey.status')).rejects.toMatchObject({
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining('Update Orca on the server')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -80,12 +80,12 @@ describe('terminal set-pane-title', () => {
|
||||
})
|
||||
|
||||
it('documents a required pane-scoped title and explicit clearing', () => {
|
||||
const spec = COMMAND_SPECS.find((entry) => entry.path.join(' ') === 'terminal set-pane-title')
|
||||
expect(spec?.usage).toContain('--title <text>')
|
||||
expect(spec?.usage).not.toContain('[--title')
|
||||
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
printHelp(COMMAND_SPECS, ['terminal', 'set-pane-title'])
|
||||
const help = log.mock.calls.flat().join('\n')
|
||||
expect(help).toContain(
|
||||
'Usage: orca terminal set-pane-title [--terminal <handle>] --title <text>'
|
||||
)
|
||||
expect(help).toContain('Custom title for one pane (pass "" to reset)')
|
||||
expect(help).not.toContain('omit or pass')
|
||||
})
|
||||
|
||||
@@ -1,18 +1,26 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { RuntimeClient } from '../runtime-client'
|
||||
import { RuntimeClient } from '../runtime-client'
|
||||
import type { CliStatusResult } from '../../shared/runtime-types'
|
||||
import { TERMINAL_SPLIT_RETRY_RUNTIME_CAPABILITY } from '../../shared/protocol-version'
|
||||
import { TERMINAL_HANDLERS } from './terminal'
|
||||
|
||||
function splitClient(call: ReturnType<typeof vi.fn>, capabilities: string[]): RuntimeClient {
|
||||
const client = {
|
||||
call,
|
||||
isRemote: false,
|
||||
getCliStatus: vi.fn().mockResolvedValue({
|
||||
result: { runtime: { reachable: true, runtimeId: 'runtime-1', capabilities } }
|
||||
})
|
||||
}
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: `terminal split` with --terminal reads only `call` and `getCliStatus`, both stubbed; RuntimeClient is a class, so a structural double needs the cast.
|
||||
return client as unknown as RuntimeClient
|
||||
function splitClient(
|
||||
call: RuntimeClient['call'],
|
||||
capabilities: NonNullable<CliStatusResult['runtime']['capabilities']>
|
||||
): RuntimeClient {
|
||||
const client = new RuntimeClient('/tmp/orca-split-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(call)
|
||||
vi.spyOn(client, 'getCliStatus').mockResolvedValue({
|
||||
id: 'status',
|
||||
ok: true,
|
||||
result: {
|
||||
app: { running: true, pid: 123 },
|
||||
runtime: { state: 'ready', reachable: true, runtimeId: 'runtime-1', capabilities },
|
||||
graph: { state: 'ready' }
|
||||
},
|
||||
_meta: { runtimeId: 'runtime-1' }
|
||||
})
|
||||
return client
|
||||
}
|
||||
|
||||
function retrySplit(client: RuntimeClient, splitId = 'leaf-1') {
|
||||
@@ -41,10 +49,12 @@ describe('terminal split --retry-split', () => {
|
||||
|
||||
await retrySplit(splitClient(call, [TERMINAL_SPLIT_RETRY_RUNTIME_CAPABILITY]))
|
||||
|
||||
expect(call).toHaveBeenCalledWith(
|
||||
'terminal.split',
|
||||
expect.objectContaining({ terminal: 'term_1', retrySplit: 'leaf-1' })
|
||||
)
|
||||
expect(call).toHaveBeenCalledExactlyOnceWith('terminal.split', {
|
||||
terminal: 'term_1',
|
||||
direction: undefined,
|
||||
command: 'agent --task 1',
|
||||
retrySplit: 'leaf-1'
|
||||
})
|
||||
})
|
||||
|
||||
// An older host strips `retrySplit` and splits again, starting a second copy of the command.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import type { RuntimeClient } from '../runtime-client'
|
||||
import { RuntimeClient } from '../runtime-client'
|
||||
|
||||
const mocks = vi.hoisted(() => ({ revealPairedTerminalOnLocalDesktop: vi.fn() }))
|
||||
|
||||
@@ -18,12 +18,14 @@ function focusResponse(navigated: boolean) {
|
||||
}
|
||||
}
|
||||
|
||||
async function runSwitch(client: { call: ReturnType<typeof vi.fn>; isRemote: boolean }) {
|
||||
async function runSwitch(options: { call: RuntimeClient['call']; isRemote: boolean }) {
|
||||
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const client = new RuntimeClient('/tmp/orca-switch-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(options.call)
|
||||
vi.spyOn(client, 'isRemote', 'get').mockReturnValue(options.isRemote)
|
||||
await TERMINAL_HANDLERS['terminal switch']({
|
||||
flags: new Map([['terminal', 'term-1']]),
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: the switch handler reads only call and isRemote.
|
||||
client: client as unknown as RuntimeClient,
|
||||
client,
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -56,6 +58,10 @@ describe('terminal switch on a paired environment', () => {
|
||||
|
||||
const printed = await runSwitch({ call, isRemote: true })
|
||||
|
||||
expect(mocks.revealPairedTerminalOnLocalDesktop).toHaveBeenCalledExactlyOnceWith(
|
||||
expect.objectContaining({ isRemote: true }),
|
||||
'term-1'
|
||||
)
|
||||
expect(printed).toMatchObject({ result: { focus: { navigated: false } } })
|
||||
})
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { RuntimeClientError, type RuntimeClient } from '../runtime-client'
|
||||
import { RuntimeClient, RuntimeClientError } from '../runtime-client'
|
||||
import type { CliStatusResult } from '../../shared/runtime-types'
|
||||
import {
|
||||
TERMINAL_CREATE_SHELL_SELECTION_RUNTIME_CAPABILITY,
|
||||
TERMINAL_PROMPT_DELIVERY_RUNTIME_CAPABILITY
|
||||
@@ -11,6 +12,27 @@ import { TERMINAL_HANDLERS } from './terminal'
|
||||
|
||||
const ORIGINAL_EXIT_CODE = process.exitCode
|
||||
|
||||
function terminalClient(
|
||||
call: RuntimeClient['call'],
|
||||
runtime?: CliStatusResult['runtime']
|
||||
): RuntimeClient {
|
||||
const client = new RuntimeClient('/tmp/orca-terminal-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(call)
|
||||
if (runtime) {
|
||||
vi.spyOn(client, 'getCliStatus').mockResolvedValue({
|
||||
id: 'status',
|
||||
ok: true,
|
||||
result: {
|
||||
app: { running: runtime.reachable, pid: runtime.reachable ? 123 : null },
|
||||
runtime,
|
||||
graph: { state: runtime.reachable ? 'ready' : 'not_running' }
|
||||
},
|
||||
_meta: { runtimeId: runtime.runtimeId ?? 'none' }
|
||||
})
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
describe('terminal close CLI', () => {
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks()
|
||||
@@ -29,7 +51,7 @@ describe('terminal close CLI', () => {
|
||||
|
||||
await TERMINAL_HANDLERS['terminal close']({
|
||||
flags: new Map([['terminal', 'term-1']]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -81,7 +103,7 @@ describe('terminal close CLI', () => {
|
||||
|
||||
await TERMINAL_HANDLERS['terminal close']({
|
||||
flags: new Map([['terminal', close.handle]]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -107,7 +129,7 @@ describe('terminal close CLI', () => {
|
||||
|
||||
await TERMINAL_HANDLERS['terminal close']({
|
||||
flags: new Map([['terminal', close.handle]]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: false
|
||||
})
|
||||
@@ -133,7 +155,7 @@ describe('terminal close CLI', () => {
|
||||
|
||||
await TERMINAL_HANDLERS['terminal close']({
|
||||
flags: parsed.flags,
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -152,7 +174,7 @@ describe('terminal close CLI', () => {
|
||||
|
||||
await TERMINAL_HANDLERS['terminal close']({
|
||||
flags: parsed.flags,
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -180,7 +202,7 @@ describe('terminal close CLI', () => {
|
||||
['worktree', 'id:repo::/worktree'],
|
||||
['all', true]
|
||||
]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -207,14 +229,16 @@ describe('terminal close CLI', () => {
|
||||
],
|
||||
[new Map<string, string | true>([['all', true]]), 'Missing required --worktree']
|
||||
])('rejects ambiguous bulk-close flags', async (flags, message) => {
|
||||
const call = vi.fn()
|
||||
await expect(
|
||||
TERMINAL_HANDLERS['terminal close']({
|
||||
flags,
|
||||
client: { call: vi.fn() } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
).rejects.toThrow(message)
|
||||
expect(call).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('fails safely before mutation when the host predates bulk close', async () => {
|
||||
@@ -227,14 +251,17 @@ describe('terminal close CLI', () => {
|
||||
await expect(
|
||||
TERMINAL_HANDLERS['terminal close']({
|
||||
flags: new Map<string, string | true>([
|
||||
['worktree', 'active'],
|
||||
['worktree', 'id:repo::/worktree'],
|
||||
['all', true]
|
||||
]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
).rejects.toMatchObject({ code: 'incompatible_runtime' })
|
||||
expect(call).toHaveBeenCalledExactlyOnceWith('terminal.closeAll', {
|
||||
worktree: 'id:repo::/worktree'
|
||||
})
|
||||
})
|
||||
|
||||
it('documents that --tab waits for durable persistence', () => {
|
||||
@@ -285,19 +312,13 @@ describe('terminal close CLI', () => {
|
||||
})
|
||||
|
||||
describe('terminal send CLI', () => {
|
||||
const promptClient = (call: ReturnType<typeof vi.fn>, supported: boolean) =>
|
||||
({
|
||||
call,
|
||||
getCliStatus: vi.fn().mockResolvedValue({
|
||||
result: {
|
||||
runtime: {
|
||||
reachable: true,
|
||||
runtimeId: 'runtime-current',
|
||||
capabilities: supported ? [TERMINAL_PROMPT_DELIVERY_RUNTIME_CAPABILITY] : []
|
||||
}
|
||||
}
|
||||
})
|
||||
}) as unknown as RuntimeClient
|
||||
const promptClient = (call: RuntimeClient['call'], supported: boolean) =>
|
||||
terminalClient(call, {
|
||||
state: 'ready',
|
||||
reachable: true,
|
||||
runtimeId: 'runtime-current',
|
||||
capabilities: supported ? [TERMINAL_PROMPT_DELIVERY_RUNTIME_CAPABILITY] : []
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks()
|
||||
@@ -436,7 +457,7 @@ describe('terminal send CLI', () => {
|
||||
['terminal', 'term-1'],
|
||||
['text', 'x']
|
||||
]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -445,7 +466,7 @@ describe('terminal send CLI', () => {
|
||||
['terminal', 'term-1'],
|
||||
['enter', true]
|
||||
]),
|
||||
client: { call } as unknown as RuntimeClient,
|
||||
client: terminalClient(call),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
@@ -517,18 +538,12 @@ describe('terminal send CLI', () => {
|
||||
_meta: { runtimeId: 'old-runtime-after-restart' }
|
||||
}
|
||||
const call = vi.fn().mockResolvedValue(response)
|
||||
const client = {
|
||||
call,
|
||||
getCliStatus: vi.fn().mockResolvedValue({
|
||||
result: {
|
||||
runtime: {
|
||||
reachable: true,
|
||||
runtimeId: 'new-runtime-before-restart',
|
||||
capabilities: [TERMINAL_PROMPT_DELIVERY_RUNTIME_CAPABILITY]
|
||||
}
|
||||
}
|
||||
})
|
||||
} as unknown as RuntimeClient
|
||||
const client = terminalClient(call, {
|
||||
state: 'ready',
|
||||
reachable: true,
|
||||
runtimeId: 'new-runtime-before-restart',
|
||||
capabilities: [TERMINAL_PROMPT_DELIVERY_RUNTIME_CAPABILITY]
|
||||
})
|
||||
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
|
||||
const error = await TERMINAL_HANDLERS['terminal send']({
|
||||
@@ -557,14 +572,13 @@ describe('terminal send CLI', () => {
|
||||
)
|
||||
expect(error).toMatchObject({
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining('cannot prove whether the prompt was delivered'),
|
||||
data: {
|
||||
deliveryOutcome: 'unknown',
|
||||
retrySafe: false,
|
||||
nextSteps: expect.arrayContaining([expect.stringContaining('Inspect the terminal output')])
|
||||
}
|
||||
})
|
||||
expect((error as Error).message).toContain('cannot prove whether the prompt was delivered')
|
||||
expect((response.result.send as { prompt?: unknown }).prompt).toBeUndefined()
|
||||
expect(log).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
@@ -572,7 +586,7 @@ describe('terminal send CLI', () => {
|
||||
const call = vi.fn().mockResolvedValue({
|
||||
result: { send: { handle: 'term-1', accepted: true, bytesWritten: 7 } }
|
||||
})
|
||||
vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
|
||||
await TERMINAL_HANDLERS['terminal send']({
|
||||
flags: new Map<string, string | true>([
|
||||
@@ -590,9 +604,7 @@ describe('terminal send CLI', () => {
|
||||
expect.objectContaining({ agentPrompt: true }),
|
||||
{ legacyTerminalPrompt: true }
|
||||
)
|
||||
expect(call.mock.results[0]?.value).toBeDefined()
|
||||
const response = await call.mock.results[0]?.value
|
||||
expect(response.result.send.prompt).toEqual({
|
||||
expect(JSON.parse(String(log.mock.calls[0]?.[0])).result.send.prompt).toEqual({
|
||||
requestId: 'unsupported-old-host',
|
||||
stages: ['input_accepted'],
|
||||
provider: 'old-host',
|
||||
@@ -603,7 +615,7 @@ describe('terminal send CLI', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('does not fabricate an accepted prompt receipt for an old-host refusal', async () => {
|
||||
it('reports an old-host refusal with its permission reason', async () => {
|
||||
const call = vi.fn().mockResolvedValue({
|
||||
result: {
|
||||
send: {
|
||||
@@ -627,8 +639,6 @@ describe('terminal send CLI', () => {
|
||||
json: false
|
||||
})
|
||||
|
||||
const response = await call.mock.results[0]?.value
|
||||
expect(response.result.send.prompt).toBeUndefined()
|
||||
expect(String(log.mock.calls[0]?.[0])).toBe('Input refused by term-1: permission.')
|
||||
})
|
||||
|
||||
@@ -643,23 +653,20 @@ describe('terminal send CLI', () => {
|
||||
['enter', true],
|
||||
['retry-request', '11111111-1111-4111-8111-111111111111']
|
||||
]),
|
||||
client: {
|
||||
call,
|
||||
getCliStatus: vi.fn().mockResolvedValue({
|
||||
result: { runtime: { reachable: true, capabilities: [] } }
|
||||
})
|
||||
} as unknown as RuntimeClient,
|
||||
client: promptClient(call, false),
|
||||
cwd: '/tmp/worktree',
|
||||
json: true
|
||||
})
|
||||
.then(() => undefined)
|
||||
.catch((caught: unknown) => caught)
|
||||
|
||||
expect(error).toMatchObject({ code: 'incompatible_runtime' })
|
||||
expect((error as Error).message).toContain(
|
||||
'updating the host cannot make this specific retry idempotent'
|
||||
)
|
||||
expect((error as Error).message).not.toContain('omit --retry-request')
|
||||
expect(error).toMatchObject({
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining(
|
||||
'updating the host cannot make this specific retry idempotent'
|
||||
)
|
||||
})
|
||||
expect(error).not.toMatchObject({ message: expect.stringContaining('omit --retry-request') })
|
||||
expect(call).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
@@ -722,27 +729,18 @@ describe('terminal create --shell', () => {
|
||||
const WORKTREE = 'path:C:/src/app'
|
||||
|
||||
const shellClient = (
|
||||
call: ReturnType<typeof vi.fn>,
|
||||
call: RuntimeClient['call'],
|
||||
supported: boolean,
|
||||
reachable = true
|
||||
): RuntimeClient => {
|
||||
const client = {
|
||||
call,
|
||||
isRemote: false,
|
||||
getCliStatus: vi.fn().mockResolvedValue({
|
||||
result: {
|
||||
runtime: reachable
|
||||
? {
|
||||
reachable: true,
|
||||
runtimeId: 'runtime-current',
|
||||
capabilities: supported ? [TERMINAL_CREATE_SHELL_SELECTION_RUNTIME_CAPABILITY] : []
|
||||
}
|
||||
: { reachable: false, runtimeId: null }
|
||||
}
|
||||
})
|
||||
}
|
||||
// oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: `terminal create` reads only `call`, `isRemote`, and `getCliStatus`, all stubbed above; RuntimeClient is a class, so a structural double cannot satisfy it without the cast.
|
||||
return client as unknown as RuntimeClient
|
||||
return terminalClient(call, {
|
||||
state: reachable ? 'ready' : 'not_running',
|
||||
reachable,
|
||||
runtimeId: reachable ? 'runtime-current' : null,
|
||||
...(reachable
|
||||
? { capabilities: supported ? [TERMINAL_CREATE_SHELL_SELECTION_RUNTIME_CAPABILITY] : [] }
|
||||
: {})
|
||||
})
|
||||
}
|
||||
|
||||
afterEach(() => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import {
|
||||
ambiguousEnvironments,
|
||||
ambiguousSshTargets,
|
||||
@@ -8,15 +8,22 @@ import {
|
||||
listSshTargets,
|
||||
resolveSshHostTargetId
|
||||
} from './host-selector-alternatives'
|
||||
import type { RuntimeClient } from './runtime-client'
|
||||
import { RuntimeClient } from './runtime-client'
|
||||
import { okFixture } from './test-fixtures'
|
||||
|
||||
const SSH_TARGETS = [{ id: 'ssh-1755000000000-a1b2c3', label: 'openclaw' }]
|
||||
const ENVIRONMENTS = [{ id: '03ef704c-b180-4b10-998d-e28fbd5de9a3', name: 'awin' }]
|
||||
|
||||
afterEach(() => vi.restoreAllMocks())
|
||||
|
||||
function clientWithCall(call: RuntimeClient['call']): RuntimeClient {
|
||||
const client = new RuntimeClient('/tmp/orca-host-alternatives-test', 60_000, null, null)
|
||||
vi.spyOn(client, 'call').mockImplementation(call)
|
||||
return client
|
||||
}
|
||||
|
||||
function clientReturning(targets: { id: string; label: string }[]): RuntimeClient {
|
||||
return {
|
||||
call: vi.fn(async () => ({ result: { targets } }))
|
||||
} as unknown as RuntimeClient
|
||||
return clientWithCall(vi.fn().mockResolvedValue(okFixture('targets', { targets })))
|
||||
}
|
||||
|
||||
describe('findSshTargetByName', () => {
|
||||
@@ -75,13 +82,17 @@ describe('resolveSshHostTargetId', () => {
|
||||
it('rejects an unknown target instead of letting it filter to nothing', async () => {
|
||||
await expect(
|
||||
resolveSshHostTargetId(clientReturning(SSH_TARGETS), 'nowhere', ENVIRONMENTS)
|
||||
).rejects.toThrow('no SSH target named or with id nowhere')
|
||||
).rejects.toMatchObject({
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('no SSH target named or with id nowhere')
|
||||
})
|
||||
})
|
||||
|
||||
it('names the paired server when an SSH target was asked for by a server name', async () => {
|
||||
await expect(
|
||||
resolveSshHostTargetId(clientReturning(SSH_TARGETS), 'awin', ENVIRONMENTS)
|
||||
).rejects.toMatchObject({
|
||||
code: 'invalid_argument',
|
||||
data: {
|
||||
nextSteps: expect.arrayContaining([expect.stringContaining('--environment awin')])
|
||||
}
|
||||
@@ -92,6 +103,7 @@ describe('resolveSshHostTargetId', () => {
|
||||
await expect(
|
||||
resolveSshHostTargetId(clientReturning([]), 'openclaw', ENVIRONMENTS)
|
||||
).rejects.toMatchObject({
|
||||
code: 'invalid_argument',
|
||||
data: { nextSteps: expect.arrayContaining(['This Orca host has no SSH targets registered.']) }
|
||||
})
|
||||
})
|
||||
@@ -100,43 +112,43 @@ describe('resolveSshHostTargetId', () => {
|
||||
describe('listSshTargets', () => {
|
||||
it('falls back to the older listing when the newer method is absent', async () => {
|
||||
const { RuntimeClientError } = await import('./runtime/types.js')
|
||||
const call = vi.fn(async (method: string) => {
|
||||
if (method === 'ssh.listTargetSummaries') {
|
||||
throw new RuntimeClientError('method_not_found', 'Unknown method')
|
||||
}
|
||||
return { result: { targets: SSH_TARGETS } }
|
||||
})
|
||||
const call = vi
|
||||
.fn()
|
||||
.mockRejectedValueOnce(new RuntimeClientError('method_not_found', 'Unknown method'))
|
||||
.mockResolvedValueOnce(okFixture('targets', { targets: SSH_TARGETS }))
|
||||
.mockRejectedValue(new Error('Legacy state unavailable'))
|
||||
|
||||
await expect(listSshTargets({ call } as unknown as RuntimeClient)).resolves.toEqual(SSH_TARGETS)
|
||||
expect(call).toHaveBeenCalledWith('ssh.listTargets')
|
||||
await expect(listSshTargets(clientWithCall(call))).resolves.toEqual(SSH_TARGETS)
|
||||
expect(call.mock.calls).toEqual([
|
||||
['ssh.listTargetSummaries'],
|
||||
['ssh.listTargets'],
|
||||
['ssh.getState', { targetId: SSH_TARGETS[0].id }]
|
||||
])
|
||||
})
|
||||
|
||||
it('enriches legacy target rows from host-owned connection state', async () => {
|
||||
const { RuntimeClientError } = await import('./runtime/types.js')
|
||||
const call = vi.fn(async (method: string) => {
|
||||
if (method === 'ssh.listTargetSummaries') {
|
||||
throw new RuntimeClientError('method_not_found', 'Unknown method')
|
||||
}
|
||||
if (method === 'ssh.getState') {
|
||||
return { result: { state: { status: 'connected', remotePlatform: 'win32' } } }
|
||||
}
|
||||
return { result: { targets: SSH_TARGETS } }
|
||||
})
|
||||
const call = vi
|
||||
.fn()
|
||||
.mockRejectedValueOnce(new RuntimeClientError('method_not_found', 'Unknown method'))
|
||||
.mockResolvedValueOnce(okFixture('targets', { targets: SSH_TARGETS }))
|
||||
.mockResolvedValueOnce(
|
||||
okFixture('state', {
|
||||
state: { status: 'connected', remotePlatform: 'win32' }
|
||||
})
|
||||
)
|
||||
|
||||
await expect(listSshTargets({ call } as unknown as RuntimeClient)).resolves.toEqual([
|
||||
await expect(listSshTargets(clientWithCall(call))).resolves.toEqual([
|
||||
{ ...SSH_TARGETS[0], connected: true, connectionStatus: 'connected', remotePlatform: 'win32' }
|
||||
])
|
||||
expect(call).toHaveBeenCalledWith('ssh.getState', { targetId: SSH_TARGETS[0].id })
|
||||
})
|
||||
|
||||
it('returns nothing rather than masking the error it was enriching', async () => {
|
||||
const client = {
|
||||
call: vi.fn(async () => {
|
||||
throw new Error('boom')
|
||||
})
|
||||
}
|
||||
const call = vi.fn().mockRejectedValue(new Error('boom'))
|
||||
|
||||
await expect(listSshTargets(client as unknown as RuntimeClient)).resolves.toEqual([])
|
||||
await expect(listSshTargets(clientWithCall(call))).resolves.toEqual([])
|
||||
expect(call).toHaveBeenCalledExactlyOnceWith('ssh.listTargetSummaries')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -174,6 +186,7 @@ describe('ambiguous names never resolve silently', () => {
|
||||
await expect(
|
||||
resolveSshHostTargetId(clientReturning(twoOpenclaw), 'openclaw', ENVIRONMENTS)
|
||||
).rejects.toMatchObject({
|
||||
code: 'invalid_argument',
|
||||
data: {
|
||||
nextSteps: expect.arrayContaining([
|
||||
expect.stringContaining('ssh-1-a'),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -47,14 +47,17 @@ import { pairRuntimeEnvironment, useWorktreeAwarenessEnvironment } from './index
|
||||
import { agentLaunchFixture, agentLaunchHostFixture } from './agent-launch-test-fixtures'
|
||||
|
||||
const WORKTREE_ID = 'repo-1::/tmp/repo'
|
||||
const ORIGINAL_EXIT_CODE = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = ORIGINAL_EXIT_CODE
|
||||
})
|
||||
|
||||
async function runRefused(argv: string[]): Promise<string> {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
await main(argv, '/tmp/repo')
|
||||
expect(process.exitCode).toBe(1)
|
||||
process.exitCode = priorExitCode
|
||||
return [...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')
|
||||
}
|
||||
|
||||
@@ -167,7 +170,6 @@ describe('orca cli agent launch', () => {
|
||||
)
|
||||
)
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const previousExitCode = process.exitCode
|
||||
const args = [
|
||||
'agent',
|
||||
'launch',
|
||||
@@ -180,7 +182,6 @@ describe('orca cli agent launch', () => {
|
||||
'--json'
|
||||
]
|
||||
await main(args, '/tmp/repo')
|
||||
process.exitCode = previousExitCode
|
||||
const error = JSON.parse(String(logSpy.mock.calls[0]?.[0])).error
|
||||
expect(error.code).toBe('agent_session_operation_unknown')
|
||||
expect(error.data.retrySafe).toBe(true)
|
||||
@@ -191,7 +192,9 @@ describe('orca cli agent launch', () => {
|
||||
error.data.operationId
|
||||
])
|
||||
expect(JSON.stringify(error)).not.toContain('Restart Orca and try again')
|
||||
expect(launchCalls()).toHaveLength(1)
|
||||
expect(launchCalls()).toEqual([
|
||||
['agent.launchReplay', expect.objectContaining({ operationId: error.data.operationId })]
|
||||
])
|
||||
})
|
||||
|
||||
it.each([['--retry-launch'], ['--retry-launch', ' ']])(
|
||||
@@ -241,7 +244,9 @@ describe('orca cli agent launch', () => {
|
||||
expect(error.code).toBe('agent_session_operation_unknown')
|
||||
expect(error.data.operationId).toBe(operationId)
|
||||
expect(error.data.nextSteps.join(' ')).toContain('never retry as a fresh launch')
|
||||
expect(launchCalls()).toHaveLength(1)
|
||||
expect(launchCalls()).toEqual([
|
||||
['agent.launchReplay', expect.objectContaining({ operationId })]
|
||||
])
|
||||
})
|
||||
|
||||
it('uses the caller folder identity after validating its native host and enclosing path', async () => {
|
||||
@@ -303,7 +308,10 @@ describe('orca cli agent launch', () => {
|
||||
'--json'
|
||||
])
|
||||
|
||||
expect(output).toContain('cannot start agents from the CLI')
|
||||
expect(JSON.parse(output).error).toMatchObject({
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining('cannot start agents from the CLI')
|
||||
})
|
||||
expect(launchCalls()).toEqual([])
|
||||
})
|
||||
|
||||
@@ -325,7 +333,10 @@ describe('orca cli agent launch', () => {
|
||||
'--json'
|
||||
])
|
||||
|
||||
expect(output).toContain('cannot start an agent on a chosen model or effort')
|
||||
expect(JSON.parse(output).error).toMatchObject({
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining('cannot start an agent on a chosen model or effort')
|
||||
})
|
||||
expect(launchCalls()).toEqual([])
|
||||
})
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -46,6 +46,12 @@ import { AUTOMATION_EXTRA_AGENT_ARGS_RUNTIME_CAPABILITY } from '../shared/protoc
|
||||
import { useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli automation extra agent args', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -75,7 +81,9 @@ describe('orca cli automation extra agent args', () => {
|
||||
'/tmp/repo'
|
||||
)
|
||||
|
||||
expect(callMock).toHaveBeenCalledTimes(3)
|
||||
expect(callMock).toHaveBeenNthCalledWith(1, 'status.get')
|
||||
expect(callMock).toHaveBeenNthCalledWith(2, 'automation.show', { id: 'auto-1' })
|
||||
expect(callMock).toHaveBeenNthCalledWith(3, 'automation.update', {
|
||||
id: 'auto-1',
|
||||
updates: expect.objectContaining({ extraAgentArgs: '--model opus --add-dir "a b"' })
|
||||
@@ -92,6 +100,8 @@ describe('orca cli automation extra agent args', () => {
|
||||
|
||||
await main(['automations', 'edit', 'auto-1', '--extra-agent-args=', '--json'], '/tmp/repo')
|
||||
|
||||
expect(callMock).toHaveBeenCalledTimes(2)
|
||||
expect(callMock).toHaveBeenNthCalledWith(1, 'automation.show', { id: 'auto-1' })
|
||||
expect(callMock).toHaveBeenNthCalledWith(2, 'automation.update', {
|
||||
id: 'auto-1',
|
||||
updates: expect.objectContaining({ extraAgentArgs: '' })
|
||||
@@ -101,8 +111,6 @@ describe('orca cli automation extra agent args', () => {
|
||||
it('refuses nonempty extras on a runtime that would drop them', async () => {
|
||||
queueFixtures(callMock, okFixture('req_status', { capabilities: [] }))
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
['automations', 'edit', 'auto-1', '--extra-agent-args=--model opus', '--json'],
|
||||
@@ -110,9 +118,15 @@ describe('orca cli automation extra agent args', () => {
|
||||
)
|
||||
|
||||
expect(callMock).toHaveBeenCalledTimes(1)
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'Update Orca on this host to use extra arguments.'
|
||||
)
|
||||
process.exitCode = priorExitCode
|
||||
expect(callMock).toHaveBeenCalledWith('status.get')
|
||||
expect(process.exitCode).toBe(1)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'incompatible_runtime',
|
||||
message: expect.stringContaining('Update Orca on this host to use extra arguments.')
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -45,6 +45,12 @@ import { okFixture, queueFixtures } from './test-fixtures'
|
||||
import { useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli worktree awareness', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -122,7 +128,6 @@ describe('orca cli worktree awareness', () => {
|
||||
|
||||
it('rejects ambiguous positional and flag automation ids before dispatch', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(['automations', 'show', 'auto-1', '--id', 'auto-2', '--json'], '/tmp/repo')
|
||||
|
||||
@@ -136,7 +141,5 @@ describe('orca cli worktree awareness', () => {
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
})
|
||||
|
||||
@@ -237,18 +237,22 @@ describe('automation run command output', () => {
|
||||
it('prints no acknowledgment until the host returns a delayed result', async () => {
|
||||
const log = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
queueFixtures(callMock, okFixture('req_owner', { automation: { id: AUTOMATION_ID } }))
|
||||
let respond: (value: ReturnType<typeof okFixture>) => void = () => {}
|
||||
callMock.mockImplementationOnce(
|
||||
() =>
|
||||
new Promise((resolve) => {
|
||||
respond = resolve
|
||||
})
|
||||
)
|
||||
const requested = Promise.withResolvers<void>()
|
||||
const response = Promise.withResolvers<ReturnType<typeof okFixture>>()
|
||||
callMock.mockImplementationOnce(() => {
|
||||
requested.resolve()
|
||||
return response.promise
|
||||
})
|
||||
const command = main(['automations', 'run', AUTOMATION_ID], '/tmp/repo')
|
||||
await vi.waitFor(() => expect(callMock).toHaveBeenCalledTimes(2))
|
||||
expect(log).not.toHaveBeenCalled()
|
||||
respond(okFixture('req_run', { run: run({ status: 'dispatched' }) }))
|
||||
await command
|
||||
try {
|
||||
await requested.promise
|
||||
expect(callMock).toHaveBeenCalledTimes(2)
|
||||
expect(callMock).toHaveBeenNthCalledWith(2, 'automation.runNow', { id: AUTOMATION_ID })
|
||||
expect(log).not.toHaveBeenCalled()
|
||||
} finally {
|
||||
response.resolve(okFixture('req_run', { run: run({ status: 'dispatched' }) }))
|
||||
await command
|
||||
}
|
||||
expect(log).toHaveBeenCalledTimes(1)
|
||||
expect(String(log.mock.calls[0]?.[0]).split('\n')[0]).toBe(
|
||||
`Started run ${RUN_ID} (dispatched).`
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -44,6 +44,12 @@ import { main } from './index'
|
||||
import { useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli worktree awareness', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -55,8 +61,6 @@ describe('orca cli worktree awareness', () => {
|
||||
|
||||
it('rejects invalid automation --day values before calling the runtime', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -78,12 +82,15 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'--day must be an integer from 0 to 6'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('--day must be an integer from 0 to 6')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it.each([
|
||||
@@ -104,8 +111,6 @@ describe('orca cli worktree awareness', () => {
|
||||
}
|
||||
])('rejects automation schedule modifier mismatch: $name', async ({ args, message }) => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -124,10 +129,12 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(message)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: { code: 'invalid_argument', message: expect.stringContaining(message) }
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it.each([
|
||||
@@ -154,33 +161,35 @@ describe('orca cli worktree awareness', () => {
|
||||
}
|
||||
])('rejects bare automation --time on $name', async ({ args }) => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(args, '/tmp/repo')
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'--time must use HH:MM format'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('--time must use HH:MM format')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it('rejects automation edit schedule modifiers without a schedule flag', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(['automations', 'edit', 'auto-1', '--day', '7', '--json'], '/tmp/repo')
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'--day requires --trigger or --schedule'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('--day requires --trigger or --schedule')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -51,6 +51,12 @@ import {
|
||||
import { useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli worktree awareness', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -117,8 +123,6 @@ describe('orca cli worktree awareness', () => {
|
||||
|
||||
it('rejects conflicting automation session reuse flags', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
['automations', 'edit', 'auto-1', '--reuse-session', '--fresh-session', '--json'],
|
||||
@@ -126,11 +130,14 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'Use either --reuse-session or --fresh-session, not both.'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('Use either --reuse-session or --fresh-session, not both.')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -45,6 +45,12 @@ import { localRepoDestinationFixtures, okFixture, queueFixtures } from './test-f
|
||||
import { useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli worktree awareness', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -131,8 +137,6 @@ describe('orca cli worktree awareness', () => {
|
||||
|
||||
it('rejects invalid automation source context JSON before calling the runtime', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -156,11 +160,14 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'--source-context must be valid JSON'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('--source-context must be valid JSON')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
|
||||
const {
|
||||
callMock,
|
||||
@@ -52,6 +52,12 @@ import {
|
||||
import { pairRuntimeEnvironment, useWorktreeAwarenessEnvironment } from './index-test-harness'
|
||||
|
||||
describe('orca cli worktree awareness', () => {
|
||||
const originalExitCode = process.exitCode
|
||||
|
||||
afterEach(() => {
|
||||
process.exitCode = originalExitCode
|
||||
})
|
||||
|
||||
useWorktreeAwarenessEnvironment({
|
||||
callMock,
|
||||
serveOrcaAppMock,
|
||||
@@ -268,8 +274,6 @@ describe('orca cli worktree awareness', () => {
|
||||
|
||||
it('rejects automation create with both repo and workspace targets', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -293,18 +297,19 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'Use either --repo or --workspace, not both.'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('Use either --repo or --workspace, not both.')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it('rejects automation edit with both repo and workspace targets', async () => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -321,12 +326,15 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(
|
||||
'Use either --repo or --workspace, not both.'
|
||||
)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: {
|
||||
code: 'invalid_argument',
|
||||
message: expect.stringContaining('Use either --repo or --workspace, not both.')
|
||||
}
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it.each([
|
||||
@@ -342,8 +350,6 @@ describe('orca cli worktree awareness', () => {
|
||||
}
|
||||
])('rejects automation create --$flag with a string value', async ({ flag, value, message }) => {
|
||||
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => {})
|
||||
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => {})
|
||||
const priorExitCode = process.exitCode
|
||||
|
||||
await main(
|
||||
[
|
||||
@@ -367,10 +373,12 @@ describe('orca cli worktree awareness', () => {
|
||||
)
|
||||
|
||||
expect(callMock).not.toHaveBeenCalled()
|
||||
expect([...logSpy.mock.calls, ...errSpy.mock.calls].flat().join('\n')).toContain(message)
|
||||
expect(logSpy).toHaveBeenCalledTimes(1)
|
||||
expect(JSON.parse(String(logSpy.mock.calls[0]?.[0]))).toMatchObject({
|
||||
ok: false,
|
||||
error: { code: 'invalid_argument', message: expect.stringContaining(message) }
|
||||
})
|
||||
expect(process.exitCode).toBe(1)
|
||||
|
||||
process.exitCode = priorExitCode
|
||||
})
|
||||
|
||||
it('resolves explicit automation create workspace active from cwd', async () => {
|
||||
|
||||
@@ -147,7 +147,8 @@ describe('OpenCode 2 recordings through the adapter', () => {
|
||||
)
|
||||
expect((await rowsOf(rig, 'tool-call')).at(-1)?.body).toMatchObject({
|
||||
state: 'completed',
|
||||
exitCode: 0
|
||||
exitCode: 0,
|
||||
output: { head: 'TOOL-OK\n', truncated: false }
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -6,10 +6,22 @@ import { afterEach, expect, it, vi } from 'vitest'
|
||||
import { closeProviderTimelineRigs } from '../native-chat/agent-session-timeline/provider-timeline-assembler-test-support'
|
||||
import { GROK, openAcpAdapterRig } from './acp-structured-adapter.test-support'
|
||||
|
||||
afterEach(() => closeProviderTimelineRigs())
|
||||
const ownedDirectories = new Set<string>()
|
||||
|
||||
afterEach(async () => {
|
||||
try {
|
||||
await closeProviderTimelineRigs()
|
||||
} finally {
|
||||
await Promise.all(
|
||||
[...ownedDirectories].map((directory) => rm(directory, { recursive: true, force: true }))
|
||||
)
|
||||
ownedDirectories.clear()
|
||||
}
|
||||
})
|
||||
|
||||
it('gives each process its own temp folder, removed at exit, and clears an earlier run at the first start', async () => {
|
||||
const dataDirectory = await mkdtemp(join(tmpdir(), 'orca-acp-temp-'))
|
||||
ownedDirectories.add(dataDirectory)
|
||||
const root = join(dataDirectory, 'acp-temp', 'grok')
|
||||
const leftover = join(root, 'run-earlier-host', 'bundle')
|
||||
await mkdir(leftover, { recursive: true })
|
||||
@@ -25,5 +37,4 @@ it('gives each process its own temp folder, removed at exit, and clears an earli
|
||||
expect(existsSync(env?.TMPDIR ?? '')).toBe(true)
|
||||
rig.child().exit()
|
||||
await vi.waitFor(() => expect(existsSync(env?.TMPDIR ?? '')).toBe(false))
|
||||
await rm(dataDirectory, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
@@ -52,14 +52,22 @@ describe('Grok requests and the turn they belong to', () => {
|
||||
expect(await cards()).toHaveLength(1)
|
||||
await rig.adapter.cancelTurn({ sessionId: SESSION, fence: 1 })
|
||||
expect(await asked).toMatchObject({ result: { outcome: 'cancelled' } })
|
||||
await rig.settle()
|
||||
expect((await cards()).map((row) => row.body)).toMatchObject([
|
||||
{ kind: 'question', resolution: { state: 'cancelled' } }
|
||||
])
|
||||
})
|
||||
|
||||
it('withdraws an open question when a steer cancels its turn', async () => {
|
||||
const { rig, agent } = await runningPrompt()
|
||||
const { rig, agent, cards } = await runningPrompt()
|
||||
const asked = agent.request(6, 'x.ai/ask_user_question', question('call-6'))
|
||||
await rig.settle()
|
||||
await sendHello(rig, 'steer')
|
||||
expect(await asked).toMatchObject({ result: { outcome: 'cancelled' } })
|
||||
await rig.settle()
|
||||
expect((await cards()).map((row) => row.body)).toMatchObject([
|
||||
{ kind: 'question', resolution: { state: 'cancelled' } }
|
||||
])
|
||||
expect(rig.sent('session/cancel')).toHaveLength(1)
|
||||
})
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
} from './acp-structured-adapter.test-support'
|
||||
|
||||
afterEach(async () => {
|
||||
vi.useRealTimers()
|
||||
await closeProviderTimelineRigs()
|
||||
})
|
||||
|
||||
@@ -152,10 +153,20 @@ describe('ACP Stop of a turn Grok began itself', () => {
|
||||
await rig.acquire()
|
||||
rig.child().agent.notify('session/update', replyChunk('task-completed-background-1', 'Busy'))
|
||||
await rig.settle()
|
||||
vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout', 'Date'] })
|
||||
await expect(rig.adapter.cancelTurn({ sessionId: SESSION, fence: 1 })).resolves.toEqual({
|
||||
cancelled: true
|
||||
})
|
||||
await rig.adapter.awaitStoppedRequestEnd(SESSION, Date.now())
|
||||
let resolved = false
|
||||
const stopped = rig.adapter.awaitStoppedRequestEnd(SESSION, Date.now()).then(() => {
|
||||
resolved = true
|
||||
})
|
||||
await vi.advanceTimersByTimeAsync(19)
|
||||
expect(resolved).toBe(false)
|
||||
expect(rig.child().closes).toBe(0)
|
||||
await vi.advanceTimersByTimeAsync(1)
|
||||
await stopped
|
||||
expect(resolved).toBe(true)
|
||||
expect((await journalTurns(rig)).at(-1)).toMatchObject({ state: 'running' })
|
||||
expect(rig.child().closes).toBe(0)
|
||||
})
|
||||
|
||||
@@ -66,7 +66,7 @@ describe('Grok recordings through the adapter', () => {
|
||||
expect(rig.settled).toMatchObject([{ clientMessageId: 'send-1', providerIdentity: {} }])
|
||||
})
|
||||
|
||||
it('s2: an allowed and then a rejected permission are each answered once, after the commit', async () => {
|
||||
it('s2: an allowed and then a rejected permission keep their recorded replies', async () => {
|
||||
const { rig, replay } = await replaying('s2-permission')
|
||||
const answer = async (optionId: string, index: number) => {
|
||||
const approval = await waitFor(async () => {
|
||||
|
||||
@@ -300,23 +300,35 @@ describe('reattaching a Grok chat the journal holds', () => {
|
||||
const before = await rig.rig.rows()
|
||||
// The host's order: a fresh sink per start, bound to the journal once the start succeeded.
|
||||
const deferred = createDeferredStructuredAgentSessionEventSink(testEventSinkLogging(SESSION))
|
||||
await rig.adapter.acquire({
|
||||
identity: {
|
||||
try {
|
||||
const acquired = await rig.adapter.acquire({
|
||||
identity: {
|
||||
sessionId: SESSION,
|
||||
workspaceId: 'workspace-1',
|
||||
hostId: 'local',
|
||||
agent: 'grok',
|
||||
providerHandle: null
|
||||
},
|
||||
fence: 2,
|
||||
spawnToken: 'spawn-2',
|
||||
events: deferred.sink
|
||||
})
|
||||
await rig.adapter.open({
|
||||
sessionId: SESSION,
|
||||
workspaceId: 'workspace-1',
|
||||
hostId: 'local',
|
||||
agent: 'grok',
|
||||
providerHandle: null
|
||||
},
|
||||
fence: 2,
|
||||
spawnToken: 'spawn-2',
|
||||
events: deferred.sink
|
||||
})
|
||||
deferred.bind({ journal: rig.rig.journal, fence: 2, publish: () => {} })
|
||||
expect(await deferred.drained()).toMatchObject({ ok: true })
|
||||
expect((await rig.rig.rows()).map((row) => row.itemId)).toEqual(before.map((row) => row.itemId))
|
||||
await rig.adapter.closeSession(SESSION)
|
||||
deferred.close()
|
||||
fence: 2,
|
||||
acquisitionGeneration: acquired.acquisitionGeneration,
|
||||
signal: new AbortController().signal
|
||||
})
|
||||
expect(rig.sent('session/load')).toHaveLength(1)
|
||||
deferred.bind({ journal: rig.rig.journal, fence: 2, publish: () => {} })
|
||||
expect(await deferred.drained()).toMatchObject({ ok: true })
|
||||
expect((await rig.rig.rows()).map((row) => row.itemId)).toEqual(
|
||||
before.map((row) => row.itemId)
|
||||
)
|
||||
await rig.adapter.closeSession(SESSION)
|
||||
} finally {
|
||||
deferred.close()
|
||||
}
|
||||
})
|
||||
|
||||
it('starts a new session in place of a created one that session/load reports missing', async () => {
|
||||
|
||||
@@ -37,14 +37,12 @@ function watchClose(child: FakeAcpChild, turn: { ended: boolean }) {
|
||||
return atClose
|
||||
}
|
||||
|
||||
/** The agent ends the cancelled turn a moment after Orca asks. */
|
||||
/** Release the provider's held turn end only after the close is observed waiting. */
|
||||
function answerCancel(child: FakeAcpChild, prompt: FakeFrame, turn: { ended: boolean }) {
|
||||
child.agent.on('session/cancel', () =>
|
||||
setTimeout(() => {
|
||||
turn.ended = true
|
||||
child.agent.reply(prompt, { stopReason: 'cancelled' })
|
||||
}, 30)
|
||||
)
|
||||
return () => {
|
||||
turn.ended = true
|
||||
child.agent.reply(prompt, { stopReason: 'cancelled' })
|
||||
}
|
||||
}
|
||||
|
||||
async function runningPrompt(rig: AcpAdapterRig): Promise<FakeFrame> {
|
||||
@@ -58,9 +56,14 @@ describe('ACP teardown of a running turn', () => {
|
||||
const rig = await openAcpAdapterRig()
|
||||
const prompt = await runningPrompt(rig)
|
||||
const turn = { ended: false }
|
||||
answerCancel(rig.child(), prompt, turn)
|
||||
const releaseCancel = answerCancel(rig.child(), prompt, turn)
|
||||
const atClose = watchClose(rig.child(), turn)
|
||||
await expect(rig.adapter.closeSession(SESSION)).resolves.toBe(true)
|
||||
const closing = rig.adapter.closeSession(SESSION)
|
||||
await rig.frame('session/cancel')
|
||||
expect(rig.child().closes).toBe(0)
|
||||
expect(turn.ended).toBe(false)
|
||||
releaseCancel()
|
||||
await expect(closing).resolves.toBe(true)
|
||||
expect(atClose).toEqual({ cancels: 1, turnEnded: true })
|
||||
expect(rig.ended).toMatchObject([{ type: 'ended', cause: 'requested-close' }])
|
||||
})
|
||||
@@ -80,11 +83,16 @@ describe('ACP teardown of a running turn', () => {
|
||||
expect(child.closes).toBe(1)
|
||||
})
|
||||
|
||||
it('a quit cancels every running turn before it ends the children, within the grace', async () => {
|
||||
it('a quit cancels the running turn before ending its child at the grace', async () => {
|
||||
const rig = await openAcpAdapterRig({ deps: { stopGraceMs: 20 } })
|
||||
await runningPrompt(rig)
|
||||
const atClose = watchClose(rig.child(), { ended: false })
|
||||
await rig.adapter.closeAll()
|
||||
vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout', 'Date'] })
|
||||
const closing = rig.adapter.closeAll()
|
||||
await vi.advanceTimersByTimeAsync(19)
|
||||
expect(rig.child().closes).toBe(0)
|
||||
await vi.advanceTimersByTimeAsync(1)
|
||||
await closing
|
||||
expect(atClose).toEqual({ cancels: 1, turnEnded: false })
|
||||
expect(rig.child().closes).toBe(1)
|
||||
})
|
||||
@@ -93,7 +101,12 @@ describe('ACP teardown of a running turn', () => {
|
||||
const rig = await openAcpAdapterRig({ deps: { stopGraceMs: 20 } })
|
||||
await runningPrompt(rig)
|
||||
const cancel = vi.spyOn(rig.child(), 'cancel').mockRejectedValue(new Error('EPIPE'))
|
||||
await expect(rig.adapter.closeSession(SESSION)).resolves.toBe(true)
|
||||
vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout', 'Date'] })
|
||||
const closing = rig.adapter.closeSession(SESSION)
|
||||
await vi.advanceTimersByTimeAsync(19)
|
||||
expect(rig.child().closes).toBe(0)
|
||||
await vi.advanceTimersByTimeAsync(1)
|
||||
await expect(closing).resolves.toBe(true)
|
||||
expect(cancel).toHaveBeenCalledTimes(1)
|
||||
expect(rig.child().closes).toBe(1)
|
||||
})
|
||||
@@ -152,9 +165,14 @@ describe('a Grok chat closed through the host while its turn runs', () => {
|
||||
await send(host, 'hello')
|
||||
const prompt = await rig.frame('session/prompt')
|
||||
const turn = { ended: false }
|
||||
answerCancel(child, prompt, turn)
|
||||
const releaseCancel = answerCancel(child, prompt, turn)
|
||||
const atClose = watchClose(child, turn)
|
||||
await host.close(HOST_TEST_SESSION, 'user-close')
|
||||
const closing = host.close(HOST_TEST_SESSION, 'user-close')
|
||||
await rig.frame('session/cancel')
|
||||
expect(child.closes).toBe(0)
|
||||
expect(turn.ended).toBe(false)
|
||||
releaseCancel()
|
||||
await closing
|
||||
expect(atClose).toEqual({ cancels: 1, turnEnded: true })
|
||||
expect(child.exited).toBe(true)
|
||||
expect((await turns()).at(-1)).toMatchObject({ state: 'interrupted' })
|
||||
|
||||
@@ -6,8 +6,6 @@ import {
|
||||
} from '../native-chat/agent-session-timeline/provider-timeline-assembler-test-support'
|
||||
import { AgentSessionAcquisitionRootExitObservedError } from '../native-chat/agent-session-wire/structured-agent-session-adapter'
|
||||
import { GENERIC_ACP_DIALECT } from './acp-dialects/acp-dialect'
|
||||
import { STRUCTURED_CHILD_ENV_TO_DELETE } from '../runtime/structured-session-child-env'
|
||||
import { AGENT_HOOK_RUNTIME_ENV_KEYS } from '../ipc/pty/host-env/spawn-env-keys'
|
||||
import {
|
||||
GROK,
|
||||
openAcpAdapterRig,
|
||||
@@ -77,7 +75,18 @@ describe('ACP structured session adapter: acquire', () => {
|
||||
resolveEnvironment: async () => ({
|
||||
PATH: '/usr/bin',
|
||||
ORCA_PANE_KEY: 'tab-1:pane-1',
|
||||
ORCA_AGENT_HOOK_PORT: '1234'
|
||||
ORCA_TAB_ID: 'tab-1',
|
||||
ORCA_WORKTREE_ID: 'worktree-1',
|
||||
ORCA_AGENT_LAUNCH_TOKEN: 'launch-1',
|
||||
ORCA_AGENT_PANE: 'tab-1:pane-1',
|
||||
ORCA_AGENT_LAUNCH: 'launch-1',
|
||||
ORCA_AGENT_HOOK_PORT: '1234',
|
||||
ORCA_AGENT_HOOK_TOKEN: 'hook-token',
|
||||
ORCA_AGENT_HOOK_ENV: 'test',
|
||||
ORCA_AGENT_HOOK_VERSION: '1',
|
||||
ORCA_AGENT_HOOK_TRANSPORT: 'http',
|
||||
ORCA_AGENT_HOOK_ENDPOINT: '/hook',
|
||||
ORCA_CLAUDE_AGENT_STATUS_SETTINGS: '{}'
|
||||
}),
|
||||
resolveCommand: () => '/opt/bin/grok',
|
||||
readJournal: () => null
|
||||
@@ -86,9 +95,22 @@ describe('ACP structured session adapter: acquire', () => {
|
||||
})
|
||||
await rig.acquire()
|
||||
const launch = rig.child().launch
|
||||
expect(launch.envToDelete).toEqual(expect.arrayContaining([...STRUCTURED_CHILD_ENV_TO_DELETE]))
|
||||
expect(launch.envToDelete).toEqual(
|
||||
expect.arrayContaining(['ORCA_PANE_KEY', 'ORCA_AGENT_PANE', ...AGENT_HOOK_RUNTIME_ENV_KEYS])
|
||||
expect.arrayContaining([
|
||||
'ORCA_PANE_KEY',
|
||||
'ORCA_TAB_ID',
|
||||
'ORCA_WORKTREE_ID',
|
||||
'ORCA_AGENT_LAUNCH_TOKEN',
|
||||
'ORCA_AGENT_PANE',
|
||||
'ORCA_AGENT_LAUNCH',
|
||||
'ORCA_AGENT_HOOK_PORT',
|
||||
'ORCA_AGENT_HOOK_TOKEN',
|
||||
'ORCA_AGENT_HOOK_ENV',
|
||||
'ORCA_AGENT_HOOK_VERSION',
|
||||
'ORCA_AGENT_HOOK_TRANSPORT',
|
||||
'ORCA_AGENT_HOOK_ENDPOINT',
|
||||
'ORCA_CLAUDE_AGENT_STATUS_SETTINGS'
|
||||
])
|
||||
)
|
||||
expect(launch.env).toMatchObject({
|
||||
ORCA_AGENT_SESSION_ID: SESSION,
|
||||
@@ -148,10 +170,15 @@ it('reads those last words when the agent ends its stdout before its exit is see
|
||||
child.stderr = 'grok: config.toml is invalid'
|
||||
// On POSIX a dying process's stdout ends first; its exit is observed a moment later.
|
||||
child.agent.stdout.end()
|
||||
setTimeout(() => child.exit(), 5)
|
||||
})
|
||||
})
|
||||
await rig.acquire()
|
||||
const acquiring = rig.acquire()
|
||||
await rig.frame('session/new')
|
||||
await rig.settle()
|
||||
expect(rig.ended).toEqual([])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
rig.child().exit()
|
||||
await acquiring
|
||||
expect(rig.ended).toMatchObject([
|
||||
{ failure: { detail: { text: 'grok: config.toml is invalid' } } }
|
||||
])
|
||||
@@ -539,6 +566,5 @@ describe('Grok launch spec', () => {
|
||||
'/orca/visuals',
|
||||
'stdio'
|
||||
])
|
||||
expect(GROK.env).toEqual({})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// stays) and the message goes as the next prompt. The adapter holds a steer only while that cancel
|
||||
// lands; the host's queue holds everything else.
|
||||
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { readAgentJournalTurn } from '../../shared/agent-session-turn-record'
|
||||
import { DISPATCH_REJECTED_CANCELLED } from '../../shared/structured-agent-session-dispatch-rejection'
|
||||
import {
|
||||
@@ -162,21 +162,28 @@ describe('a send while a Grok prompt runs', () => {
|
||||
await rig.frame('session/prompt')
|
||||
rig.child().agent.notify('session/update', replyChunk('prompt:first', 'working'))
|
||||
await rig.settle()
|
||||
await sendHello(rig, 'steer')
|
||||
await new Promise((resolve) => setTimeout(resolve, 120))
|
||||
await rig.settle()
|
||||
expect(rig.sent('session/cancel')).toHaveLength(1)
|
||||
expect(rig.ended).toEqual([])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
expect(rig.settled.map((settled) => settled.clientMessageId)).toEqual(['first'])
|
||||
// A Stop sends its own cancel; the host's grace, not the cancel, ends Grok.
|
||||
await rig.adapter.cancelTurn({ sessionId: ADAPTER_SESSION, fence: 1 })
|
||||
expect(rig.sent('session/cancel')).toHaveLength(2)
|
||||
expect(rig.settled).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ clientMessageId: 'steer', state: 'rejected' })
|
||||
])
|
||||
)
|
||||
vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout', 'Date'] })
|
||||
try {
|
||||
await sendHello(rig, 'steer')
|
||||
await rig.settle()
|
||||
await vi.advanceTimersByTimeAsync(60_000)
|
||||
await rig.settle()
|
||||
expect(rig.sent('session/cancel')).toHaveLength(1)
|
||||
expect(rig.ended).toEqual([])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
expect(rig.settled.map((settled) => settled.clientMessageId)).toEqual(['first'])
|
||||
// A Stop sends its own cancel; the host's grace, not the cancel, ends Grok.
|
||||
await rig.adapter.cancelTurn({ sessionId: ADAPTER_SESSION, fence: 1 })
|
||||
await rig.settle()
|
||||
expect(rig.sent('session/cancel')).toHaveLength(2)
|
||||
expect(rig.settled).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({ clientMessageId: 'steer', state: 'rejected' })
|
||||
])
|
||||
)
|
||||
} finally {
|
||||
vi.useRealTimers()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -217,25 +224,33 @@ describe('a send while a turn Grok began itself runs', () => {
|
||||
endsGrokTurn(agent)
|
||||
agent.notify('session/update', replyChunk(promptIdOf(a), 'working on a'))
|
||||
})
|
||||
await sendHello(rig, 'b')
|
||||
await rig.settle()
|
||||
expect(rig.sent('session/cancel')).toHaveLength(1)
|
||||
// `a` runs a whole turn: a steer's cancel never ends Grok.
|
||||
await new Promise((resolve) => setTimeout(resolve, 120))
|
||||
await rig.settle()
|
||||
expect(rig.ended).toEqual([])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
agent.reply(a, { stopReason: 'end_turn' })
|
||||
const b = await rig.frame('session/prompt', 1)
|
||||
expect(promptIdOf(b)).toBe('prompt:b')
|
||||
agent.notify('session/update', replyChunk('prompt:b', 'on b'))
|
||||
agent.reply(b, { stopReason: 'end_turn' })
|
||||
await waitFor(async () => {
|
||||
vi.useFakeTimers({ toFake: ['setTimeout', 'clearTimeout', 'Date'] })
|
||||
try {
|
||||
await sendHello(rig, 'b')
|
||||
await rig.settle()
|
||||
expect(rig.sent('session/cancel')).toHaveLength(1)
|
||||
// `a` runs a whole turn: a steer's cancel never ends Grok.
|
||||
await vi.advanceTimersByTimeAsync(60_000)
|
||||
await rig.settle()
|
||||
expect(rig.ended).toEqual([])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
agent.reply(a, { stopReason: 'end_turn' })
|
||||
await rig.settle()
|
||||
const b = rig.sent('session/prompt')[1]
|
||||
if (!b) {
|
||||
throw new Error('Missing prompt for b after a completed')
|
||||
}
|
||||
expect(promptIdOf(b)).toBe('prompt:b')
|
||||
agent.notify('session/update', replyChunk('prompt:b', 'on b'))
|
||||
agent.reply(b, { stopReason: 'end_turn' })
|
||||
await rig.settle()
|
||||
const turns = (await rig.rig.rows()).flatMap((row) => readAgentJournalTurn(row.body) ?? [])
|
||||
expect(turns.map((turn) => turn.state)).toEqual(['interrupted', 'completed', 'completed'])
|
||||
})
|
||||
expect(rig.settled.map((settled) => settled.clientMessageId)).toEqual(['a', 'b'])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
expect(rig.settled.map((settled) => settled.clientMessageId)).toEqual(['a', 'b'])
|
||||
expect(rig.child().closes).toBe(0)
|
||||
} finally {
|
||||
vi.useRealTimers()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -68,12 +68,12 @@ describe('what a background task row says', () => {
|
||||
Result: { task_id: 'watch-1', command, status: 'completed', exit_code: 0 }
|
||||
}
|
||||
})
|
||||
const [task] = await taskBlocks(fixture)
|
||||
expect(task).toMatchObject({ kind: 'monitor', state: 'done' })
|
||||
expect(task && backgroundTaskFallbackText(task)).toBe(
|
||||
'Background monitor "Watch three tick echoes" finished'
|
||||
)
|
||||
}
|
||||
const [task] = await taskBlocks(fixture)
|
||||
expect(task).toMatchObject({ kind: 'monitor', state: 'done' })
|
||||
expect(task && backgroundTaskFallbackText(task)).toBe(
|
||||
'Background monitor "Watch three tick echoes" finished'
|
||||
)
|
||||
})
|
||||
|
||||
it('reads a monitor from its output command alone, and a named kind still wins', async () => {
|
||||
|
||||
@@ -8,7 +8,7 @@ import {
|
||||
} from '../native-chat/agent-session-timeline/provider-timeline-assembler-test-support'
|
||||
import type { ProviderTimelineEvent } from '../native-chat/agent-session-timeline/provider-timeline-event'
|
||||
import { AcpAgentError } from './acp-errors'
|
||||
import { AcpTimelineTranslator, acpTurnEnd } from './acp-timeline-translator'
|
||||
import { AcpTimelineTranslator } from './acp-timeline-translator'
|
||||
|
||||
afterEach(closeProviderTimelineRigs)
|
||||
|
||||
@@ -195,9 +195,8 @@ describe('generic ACP translation', () => {
|
||||
}
|
||||
)
|
||||
|
||||
it('keeps unknown verdicts unknown and preserves unknown frames without opening a turn', async () => {
|
||||
it('bounds unknown frames without opening a turn and leaves unknown stop outcomes unset', async () => {
|
||||
const { rig, translator, apply } = await genericRig()
|
||||
expect(acpTurnEnd('turn', 'future_stop', 1200)).not.toHaveProperty('outcome')
|
||||
apply(
|
||||
translator.sessionEvent(
|
||||
{
|
||||
@@ -219,6 +218,11 @@ describe('generic ACP translation', () => {
|
||||
})
|
||||
expect(rows[0]!.turnScope).toEqual({ kind: 'thread' })
|
||||
expect(await rig.turns()).toEqual([])
|
||||
apply(translator.openPrompt('future', 1200).events)
|
||||
apply(translator.promptResult('future', { stopReason: 'future_stop' }, 1300))
|
||||
const [turn] = await rig.turns()
|
||||
expect(turn).toMatchObject({ state: 'completed' })
|
||||
expect(turn).not.toHaveProperty('outcome')
|
||||
})
|
||||
|
||||
it('ignores live user echoes and options metadata, and rejects cross-session requests', async () => {
|
||||
@@ -295,7 +299,7 @@ describe('generic ACP translation', () => {
|
||||
apply(translator.promptResult('send-1', { stopReason: 'end_turn' }, 1200))
|
||||
expect((await rig.rows()).some((row) => messageText(row.body) === 'typed')).toBe(true)
|
||||
})
|
||||
it('evicts completed snapshots during long turns while preserving active tool input', async () => {
|
||||
it('preserves active tool input during long turns with many completed snapshots', async () => {
|
||||
const { rig, translator, apply, update } = await genericRig()
|
||||
apply(translator.openPrompt('send-1', 1000).events)
|
||||
update({
|
||||
|
||||
@@ -38,42 +38,43 @@ const bashStart = {
|
||||
}
|
||||
|
||||
describe('OpenCode over ACP', () => {
|
||||
it("reads a shell tool's exit code and output from OpenCode's metadata", async () => {
|
||||
const { rig, update } = await openCodeRig()
|
||||
update(bashStart, 1001)
|
||||
update(
|
||||
{
|
||||
sessionUpdate: 'tool_call_update',
|
||||
toolCallId: 'call-1',
|
||||
status: 'completed',
|
||||
rawOutput: {
|
||||
output: 'ls: missing: No such file or directory\n',
|
||||
metadata: { output: 'ls: missing: No such file or directory\n', exit: 1 }
|
||||
}
|
||||
it.each([
|
||||
{
|
||||
label: 'metadata output and exit fallback',
|
||||
rawOutput: {
|
||||
output: 'ls: missing: No such file or directory\n',
|
||||
metadata: { output: 'ls: missing: No such file or directory\n', exit: 1 }
|
||||
},
|
||||
1002
|
||||
)
|
||||
const tool = (await rig.rows()).find((row) => row.body.kind === 'tool-call')?.body
|
||||
expect(tool).toMatchObject({
|
||||
kind: 'tool-call',
|
||||
state: 'completed',
|
||||
exitCode: 1,
|
||||
output: { head: 'ls: missing: No such file or directory\n' }
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps a shared exit code the agent already reported', () => {
|
||||
const normalized = OPENCODE_ACP_DIALECT.normalizeToolUpdate!({
|
||||
toolCallId: 'call-1',
|
||||
rawOutput: { exitCode: 0, metadata: { exit: 3 } }
|
||||
})
|
||||
expect(normalized.rawOutput).toEqual({ exitCode: 0, metadata: { exit: 3 } })
|
||||
})
|
||||
|
||||
it('leaves a tool with no command metadata as it came', () => {
|
||||
const plain = { toolCallId: 'call-2', rawOutput: 'done' }
|
||||
expect(OPENCODE_ACP_DIALECT.normalizeToolUpdate!(plain)).toBe(plain)
|
||||
})
|
||||
expected: { exitCode: 1, output: { head: 'ls: missing: No such file or directory\n' } }
|
||||
},
|
||||
{
|
||||
label: 'explicit zero takes precedence over metadata exit three',
|
||||
rawOutput: { exitCode: 0, metadata: { exit: 3 } },
|
||||
expected: { exitCode: 0 }
|
||||
},
|
||||
{
|
||||
label: 'plain output without metadata',
|
||||
rawOutput: 'done',
|
||||
expected: { output: { head: 'done' } }
|
||||
}
|
||||
])(
|
||||
'keeps shell result semantics through the journal: $label',
|
||||
async ({ rawOutput, expected }) => {
|
||||
const { rig, update } = await openCodeRig()
|
||||
update(bashStart, 1001)
|
||||
update(
|
||||
{
|
||||
sessionUpdate: 'tool_call_update',
|
||||
toolCallId: 'call-1',
|
||||
status: 'completed',
|
||||
rawOutput
|
||||
},
|
||||
1002
|
||||
)
|
||||
const tool = (await rig.rows()).find((row) => row.body.kind === 'tool-call')?.body
|
||||
expect(tool).toMatchObject({ kind: 'tool-call', state: 'completed', ...expected })
|
||||
}
|
||||
)
|
||||
|
||||
it("shows OpenCode's own permission option names", async () => {
|
||||
const { translator, apply, update } = await openCodeRig()
|
||||
|
||||
@@ -11,7 +11,6 @@ describe('ACP reviewed traffic and recovery', () => {
|
||||
it('replays every notification in the full recording without extension status rows or persisted signatures', async () => {
|
||||
const f = await openAcpFixtureRig()
|
||||
const frames = await readAcpFixture('s1-full-notifications')
|
||||
expect(frames).toHaveLength(142)
|
||||
const rows = await f.feed(frames)
|
||||
expect(rows.filter((row) => row.body.kind === 'status')).toEqual([])
|
||||
expect(rows.filter((row) => row.body.kind === 'tool-call')).toHaveLength(2)
|
||||
|
||||
@@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { mkdtempSync, readdirSync, readFileSync, rmSync } from 'node:fs'
|
||||
import type * as FsPromises from 'node:fs/promises'
|
||||
import type * as Fs from 'node:fs'
|
||||
import type { ActiveViewPreference } from './active-view-preference'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
|
||||
@@ -47,6 +48,7 @@ vi.mock('node:fs/promises', async () => {
|
||||
|
||||
describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
let dir: string
|
||||
const preferences = new Set<ActiveViewPreference>()
|
||||
const viewFile = (): string => join(dir, 'active-view.json')
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -60,19 +62,30 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
gate.failUnlink = false
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
rmSync(dir, { recursive: true, force: true })
|
||||
afterEach(async () => {
|
||||
gate.blockRename = false
|
||||
gate.blockAfterRename = false
|
||||
gate.failUnlink = false
|
||||
gate.waiters.splice(0).forEach((resolve) => resolve())
|
||||
gate.afterRenameWaiters.splice(0).forEach((resolve) => resolve())
|
||||
try {
|
||||
await Promise.all([...preferences].map((preference) => preference.flushAsync()))
|
||||
} finally {
|
||||
preferences.clear()
|
||||
rmSync(dir, { recursive: true, force: true })
|
||||
}
|
||||
})
|
||||
|
||||
it('a write parked on its rename cannot overwrite a later flushOrThrow', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
|
||||
gate.blockRename = true
|
||||
pref.set('activity')
|
||||
await vi.waitFor(() => expect(gate.renameCalls).toBeGreaterThan(0))
|
||||
// Capture before sync flush clears pendingWrite, or the test could finish before rename settles.
|
||||
const inflight = (pref as unknown as { pendingWrite: Promise<void> | null }).pendingWrite
|
||||
const inflight = pref.waitForPendingWrite()
|
||||
|
||||
pref.set('tasks')
|
||||
pref.flushOrThrow()
|
||||
@@ -89,6 +102,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('an unlink veto failure queues a newest-value correction', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
|
||||
gate.blockRename = true
|
||||
pref.set('activity')
|
||||
@@ -110,6 +124,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('a completed stale rename cannot regress the persisted marker', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
const renameCompleted = new Promise<void>((resolve) => gate.renameCompleted.push(resolve))
|
||||
|
||||
gate.blockAfterRename = true
|
||||
@@ -132,6 +147,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('a pending flush drains a view changed during its rename', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
|
||||
gate.blockRename = true
|
||||
pref.set('activity')
|
||||
@@ -150,6 +166,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('coalesces concurrent pending flushes while draining the newest view', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
|
||||
gate.blockRename = true
|
||||
pref.set('activity')
|
||||
@@ -170,6 +187,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('keeps an unabortable shared drain alive when an attached signal aborts', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
const controller = new AbortController()
|
||||
|
||||
gate.blockRename = true
|
||||
@@ -190,6 +208,7 @@ describe('ActiveViewPreference sync flush vs. parked async rename', () => {
|
||||
it('stops an abortable-only drain after its signal aborts', async () => {
|
||||
const { ActiveViewPreference } = await import('./active-view-preference')
|
||||
const pref = new ActiveViewPreference(join(dir, 'orca-data.json'), 'terminal')
|
||||
preferences.add(pref)
|
||||
const controller = new AbortController()
|
||||
|
||||
gate.blockRename = true
|
||||
|
||||
@@ -138,7 +138,14 @@ describe('preserveAgentAuthBeforeRestart', () => {
|
||||
store: { flushPendingOrThrowAsync: vi.fn(() => new Promise<void>(() => {})) }
|
||||
})
|
||||
|
||||
await vi.advanceTimersByTimeAsync(2_000)
|
||||
let settled = false
|
||||
void preservation.then(() => {
|
||||
settled = true
|
||||
})
|
||||
await vi.advanceTimersByTimeAsync(1_999)
|
||||
expect(settled).toBe(false)
|
||||
expect(warn).not.toHaveBeenCalled()
|
||||
await vi.advanceTimersByTimeAsync(1)
|
||||
await preservation
|
||||
|
||||
expect(warn).toHaveBeenCalledWith(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest'
|
||||
import { AgentAwakeService } from './agent-awake-service'
|
||||
import type { AgentAwakeStatus } from './agent-awake-service'
|
||||
|
||||
@@ -25,15 +25,18 @@ function workingStatus(): AgentAwakeStatus {
|
||||
|
||||
describe('AgentAwakeService status array ownership', () => {
|
||||
it('does not observe rows appended to the caller array after setStatuses', () => {
|
||||
const service = new AgentAwakeService()
|
||||
const service = createService()
|
||||
service.setMode('auto')
|
||||
const statuses: AgentAwakeStatus[] = [workingStatus()]
|
||||
|
||||
service.setStatuses(statuses)
|
||||
const before = service.getWorkingAgentCount()
|
||||
statuses.push(workingStatus(), workingStatus())
|
||||
expect(service.getWorkingAgentCount()).toBe(1)
|
||||
statuses.push(
|
||||
{ ...workingStatus(), paneKey: 'pane-2' },
|
||||
{ ...workingStatus(), paneKey: 'pane-3' }
|
||||
)
|
||||
|
||||
expect(service.getWorkingAgentCount()).toBe(before)
|
||||
expect(service.getWorkingAgentCount()).toBe(1)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -61,13 +64,23 @@ function createPlatformAssertion() {
|
||||
}
|
||||
}
|
||||
|
||||
const services = new Set<AgentAwakeService>()
|
||||
|
||||
afterEach(() => {
|
||||
for (const service of services) {
|
||||
service.dispose()
|
||||
}
|
||||
services.clear()
|
||||
vi.useRealTimers()
|
||||
})
|
||||
|
||||
function createService(
|
||||
blocker = createBlocker(),
|
||||
macosAssertion = createPlatformAssertion(),
|
||||
linuxAssertion = createPlatformAssertion(),
|
||||
platform: NodeJS.Platform = 'linux'
|
||||
): AgentAwakeService {
|
||||
return new AgentAwakeService({
|
||||
const service = new AgentAwakeService({
|
||||
blocker,
|
||||
linuxAssertion,
|
||||
macosAssertion,
|
||||
@@ -79,6 +92,8 @@ function createService(
|
||||
warn: vi.fn()
|
||||
}
|
||||
})
|
||||
services.add(service)
|
||||
return service
|
||||
}
|
||||
|
||||
describe('AgentAwakeService platform assertions', () => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { AgentAwakeService, AGENT_AWAKE_STATUS_STALE_AFTER_MS } from './agent-awake-service'
|
||||
import type { AgentAwakeStatus } from './agent-awake-service'
|
||||
|
||||
@@ -74,6 +74,16 @@ function createPowerMonitor() {
|
||||
}
|
||||
}
|
||||
|
||||
const services = new Set<AgentAwakeService>()
|
||||
|
||||
afterEach(() => {
|
||||
for (const service of services) {
|
||||
service.dispose()
|
||||
}
|
||||
services.clear()
|
||||
vi.useRealTimers()
|
||||
})
|
||||
|
||||
function createService(
|
||||
now: () => number,
|
||||
blocker = createBlocker(),
|
||||
@@ -81,7 +91,7 @@ function createService(
|
||||
linuxAssertion = createLinuxAssertion(),
|
||||
powerMonitor: ReturnType<typeof createPowerMonitor> | null = null
|
||||
): AgentAwakeService {
|
||||
return new AgentAwakeService({
|
||||
const service = new AgentAwakeService({
|
||||
blocker,
|
||||
linuxAssertion,
|
||||
macosAssertion,
|
||||
@@ -93,6 +103,8 @@ function createService(
|
||||
warn: vi.fn()
|
||||
}
|
||||
})
|
||||
services.add(service)
|
||||
return service
|
||||
}
|
||||
|
||||
describe('AgentAwakeService', () => {
|
||||
@@ -367,9 +379,17 @@ describe('AgentAwakeService', () => {
|
||||
const monitor = createPowerMonitor()
|
||||
const service = createService(() => 1_000, blocker, macosAssertion, linuxAssertion, monitor)
|
||||
|
||||
service.setEnabled(true)
|
||||
service.setStatuses([workingStatus()])
|
||||
expect(blocker.start).toHaveBeenCalledTimes(1)
|
||||
service.dispose()
|
||||
monitor.emitResume()
|
||||
expect(blocker.start).toHaveBeenCalledTimes(1)
|
||||
expect(macosAssertion.start).toHaveBeenCalledTimes(1)
|
||||
expect(linuxAssertion.start).toHaveBeenCalledTimes(1)
|
||||
|
||||
expect(monitor.on).toHaveBeenCalledTimes(1)
|
||||
expect(monitor.off).toHaveBeenCalledTimes(1)
|
||||
expect(monitor.off.mock.calls[0]).toEqual(monitor.on.mock.calls[0])
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { checkAgentCliVersion } from './agent-cli-version-probe'
|
||||
|
||||
const { runProcess } = vi.hoisted(() => ({ runProcess: vi.fn() }))
|
||||
@@ -19,6 +19,7 @@ function prints(stdout: string, result: Record<string, unknown> = {}): void {
|
||||
}
|
||||
|
||||
describe('checkAgentCliVersion', () => {
|
||||
afterEach(() => vi.restoreAllMocks())
|
||||
beforeEach(() => runProcess.mockReset())
|
||||
|
||||
it('asks the program for its version, bounded, where and as the launch would run it', async () => {
|
||||
|
||||
@@ -74,9 +74,12 @@ describe.runIf(process.platform !== 'win32')('resolveLoginShellGrokHome', () =>
|
||||
|
||||
// Why: this is the branch that made the old test flaky — pin it so a probe failure is
|
||||
// an asserted fallback rather than an invisible substitution for a real answer.
|
||||
it('falls back when the probe fails or times out', async () => {
|
||||
it.each([
|
||||
new Error('spawn failed'),
|
||||
Object.assign(new Error('spawn timed out'), { killed: true })
|
||||
])('falls back when the probe fails or times out: %s', async (error) => {
|
||||
vi.stubEnv('SHELL', '/bin/sh')
|
||||
stubProbeFailure(Object.assign(new Error('spawn timed out'), { killed: true }))
|
||||
stubProbeFailure(error)
|
||||
|
||||
await expect(resolveLoginShellGrokHome('/home/orca')).resolves.toBe('/home/orca/.grok')
|
||||
})
|
||||
|
||||
@@ -3,26 +3,30 @@
|
||||
// driver's cancel and kill markers.
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { join } from 'node:path'
|
||||
import { z } from 'zod'
|
||||
import { AGENT_INTERRUPT_SETTLE_MS } from '../../shared/agent-interrupt-intent'
|
||||
|
||||
export type CapturedHook = {
|
||||
kind: 'hook'
|
||||
t: number
|
||||
index: number
|
||||
/** `ps` rows for the rig's sleep processes, taken inside the hook. */
|
||||
sleep_procs: string[]
|
||||
payload: Record<string, unknown>
|
||||
}
|
||||
export type CapturedCancel = {
|
||||
kind: 'cancel'
|
||||
t: number
|
||||
label: string
|
||||
interrupted_painted: boolean
|
||||
/** Hook indices between the cancel key and the next prompt the driver typed. */
|
||||
hooks_before_next_typed_prompt: number[]
|
||||
}
|
||||
export type CapturedKill = { kind: 'kill'; t: number; needle: string }
|
||||
export type CapturedRecord = CapturedHook | CapturedCancel | CapturedKill
|
||||
const capturedHook = z.object({
|
||||
kind: z.literal('hook'),
|
||||
t: z.number(),
|
||||
index: z.number().int().nonnegative(),
|
||||
sleep_procs: z.array(z.string()),
|
||||
payload: z.record(z.string(), z.unknown())
|
||||
})
|
||||
const capturedCancel = z.object({
|
||||
kind: z.literal('cancel'),
|
||||
t: z.number(),
|
||||
label: z.string(),
|
||||
interrupted_painted: z.boolean(),
|
||||
hooks_before_next_typed_prompt: z.array(z.number().int().nonnegative())
|
||||
})
|
||||
const capturedKill = z.object({ kind: z.literal('kill'), t: z.number(), needle: z.string() })
|
||||
const capturedRecord = z.discriminatedUnion('kind', [capturedHook, capturedCancel, capturedKill])
|
||||
|
||||
export type CapturedHook = z.infer<typeof capturedHook>
|
||||
export type CapturedCancel = z.infer<typeof capturedCancel>
|
||||
export type CapturedKill = z.infer<typeof capturedKill>
|
||||
export type CapturedRecord = z.infer<typeof capturedRecord>
|
||||
|
||||
export function loadCapture(name: string): CapturedRecord[] {
|
||||
return readFileSync(
|
||||
@@ -31,14 +35,7 @@ export function loadCapture(name: string): CapturedRecord[] {
|
||||
)
|
||||
.trim()
|
||||
.split('\n')
|
||||
.map((line) => {
|
||||
// JSON.parse returns any; the kind check below is what proves the record shape.
|
||||
const parsed: CapturedRecord = JSON.parse(line)
|
||||
if (parsed.kind !== 'hook' && parsed.kind !== 'cancel' && parsed.kind !== 'kill') {
|
||||
throw new Error(`Unknown capture record: ${line}`)
|
||||
}
|
||||
return parsed
|
||||
})
|
||||
.map((line) => capturedRecord.parse(JSON.parse(line)))
|
||||
}
|
||||
|
||||
export function hookAt(records: CapturedRecord[], index: number): CapturedHook {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { join } from 'node:path'
|
||||
import { z } from 'zod'
|
||||
import { extractAllOscTitles } from '../../shared/agent-detection'
|
||||
import { extractAllOscTitleEntries } from '../../shared/osc-title-extraction'
|
||||
|
||||
const captureEvent = z.discriminatedUnion('kind', [
|
||||
z.object({ kind: z.literal('title'), title: z.string(), atMs: z.number() }),
|
||||
@@ -12,24 +12,23 @@ export function loadClaudeInterruptCapture(name: string) {
|
||||
const base = join(__dirname, '../runtime/__fixtures__', `claude-interrupt-${name}`)
|
||||
const transcript = readFileSync(`${base}.txt`, 'utf8')
|
||||
const events = z.array(captureEvent).parse(JSON.parse(readFileSync(`${base}.input.json`, 'utf8')))
|
||||
const titles = extractAllOscTitles(transcript)
|
||||
const titleEntries = extractAllOscTitleEntries(transcript)
|
||||
const titles = titleEntries.map((entry) => entry.title)
|
||||
const recordedTitles = events.flatMap((event) => (event.kind === 'title' ? [event.title] : []))
|
||||
if (JSON.stringify(titles) !== JSON.stringify(recordedTitles)) {
|
||||
throw new Error('Capture timeline must match the raw PTY title frames in byte order')
|
||||
}
|
||||
let offset = 0
|
||||
let titleIndex = 0
|
||||
return events.map((event) => {
|
||||
if (event.kind === 'input') {
|
||||
return event
|
||||
}
|
||||
const candidates = ['0', '2'].flatMap((opcode) =>
|
||||
['\x07', '\x1b\\'].map((end) => `\x1b]${opcode};${event.title}${end}`)
|
||||
)
|
||||
const frame = candidates.find((candidate) => transcript.includes(candidate, offset))
|
||||
if (!frame) {
|
||||
const entry = titleEntries[titleIndex++]
|
||||
if (!entry) {
|
||||
throw new Error('Captured OSC title frame missing from transcript')
|
||||
}
|
||||
const end = transcript.indexOf(frame, offset) + frame.length
|
||||
const end = entry.end
|
||||
const chunk = transcript.slice(offset, end)
|
||||
offset = end
|
||||
return { ...event, chunk }
|
||||
|
||||
@@ -4,22 +4,29 @@ import { join } from 'node:path'
|
||||
import { afterEach, beforeEach, describe, expect, it } from 'vitest'
|
||||
import { makePaneKey } from '../../shared/stable-pane-id'
|
||||
import { AgentHookServer } from './server'
|
||||
import { buildBody, postHookEvent } from './server.test-fixtures'
|
||||
|
||||
const LEAF = '11111111-1111-4111-8111-111111111111'
|
||||
const PANE = makePaneKey('tab-1', LEAF)
|
||||
|
||||
let dir: string
|
||||
const servers = new Set<AgentHookServer>()
|
||||
|
||||
beforeEach(() => {
|
||||
dir = mkdtempSync(join(tmpdir(), 'orca-ended-process-'))
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
for (const server of servers) {
|
||||
server.stop()
|
||||
}
|
||||
servers.clear()
|
||||
rmSync(dir, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
async function startServer(): Promise<AgentHookServer> {
|
||||
const server = new AgentHookServer()
|
||||
servers.add(server)
|
||||
await server.start({ env: 'production', userDataPath: dir })
|
||||
return server
|
||||
}
|
||||
@@ -87,6 +94,9 @@ describe('reconcileEndedProcessForPaneKeys', () => {
|
||||
|
||||
expect(server._getStateForTests().claudeRunningNonAgentTaskPaneKeys.has(PANE)).toBe(false)
|
||||
expect(server._getStateForTests().claudeActiveSessionCronPaneKeys.has(PANE)).toBe(false)
|
||||
const response = await postHookEvent(server, buildBody({ hook_event_name: 'Stop' }))
|
||||
expect(response.status).toBe(204)
|
||||
expect(paneState(server)).toBe('done')
|
||||
} finally {
|
||||
server.stop()
|
||||
}
|
||||
@@ -160,6 +170,20 @@ describe('reconcileEndedProcessForPaneKeys', () => {
|
||||
server.reconcileEndedProcessForPaneKeys([PANE])
|
||||
|
||||
expect(server._getStateForTests().claudeSessionOwnerByPaneKey.has(PANE)).toBe(false)
|
||||
// A fresh unanchored cron must survive the new owner's first lead event.
|
||||
for (const payload of [
|
||||
{ hook_event_name: 'Stop', session_crons: [{ id: 'new-cron' }] },
|
||||
{ hook_event_name: 'PostToolUse', session_id: 'session-b', tool_name: 'Bash' },
|
||||
{ hook_event_name: 'Stop', session_id: 'session-b' }
|
||||
]) {
|
||||
const response = await postHookEvent(server, buildBody(payload))
|
||||
expect(response.status).toBe(204)
|
||||
}
|
||||
expect(server.getStatusSnapshotForPane(PANE)[0]).toMatchObject({
|
||||
state: 'working',
|
||||
workingMode: 'monitoring',
|
||||
mainAgent: { state: 'done' }
|
||||
})
|
||||
} finally {
|
||||
server.stop()
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ beforeEach(() => {
|
||||
)
|
||||
})
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks()
|
||||
resetWslMoveFenceForTests()
|
||||
rmSync(userDataPath, { recursive: true, force: true })
|
||||
})
|
||||
@@ -200,7 +201,7 @@ describe('first-work rename while a WSL move takes the project', () => {
|
||||
|
||||
it('leaves the same repo id on another host to its own host', async () => {
|
||||
const info = vi.spyOn(console, 'info').mockImplementation(() => {})
|
||||
const { deps } = makeDeps({
|
||||
const { deps, setDisplayName } = makeDeps({
|
||||
getRepo: () => ({ ...LOCAL_REPO, executionHostId: 'runtime:env-1' })
|
||||
})
|
||||
|
||||
@@ -208,15 +209,19 @@ describe('first-work rename while a WSL move takes the project', () => {
|
||||
|
||||
expect(info).toHaveBeenCalledWith(expect.stringContaining('branch is owned by runtime:env-1'))
|
||||
expect(info).not.toHaveBeenCalledWith(expect.stringContaining('WSL move'))
|
||||
expect(gitExecFileAsyncMock).not.toHaveBeenCalled()
|
||||
expect(generateBranchNameMock).not.toHaveBeenCalled()
|
||||
expect(setDisplayName).not.toHaveBeenCalled()
|
||||
info.mockRestore()
|
||||
})
|
||||
|
||||
it('keeps a moving folder workspace title pending', async () => {
|
||||
let moving = true
|
||||
const { deps, setDisplayName, setRenameError } = makeDeps({
|
||||
resolveWorktreeIdForTab: () => FOLDER_WORKTREE_ID,
|
||||
getFolderWorkspacePath: () => '/workspace/platform',
|
||||
isPendingFirstAgentMessageRename: () => true,
|
||||
isFolderWorkspaceWslMoveBlocked: () => true
|
||||
isFolderWorkspaceWslMoveBlocked: () => moving
|
||||
})
|
||||
|
||||
await maybeAutoRenameBranchOnFirstWork(workingEvent(), deps)
|
||||
@@ -224,5 +229,9 @@ describe('first-work rename while a WSL move takes the project', () => {
|
||||
expect(generateBranchNameMock).not.toHaveBeenCalled()
|
||||
expect(setDisplayName).not.toHaveBeenCalled()
|
||||
expect(setRenameError).not.toHaveBeenCalled()
|
||||
moving = false
|
||||
await maybeAutoRenameBranchOnFirstWork(workingEvent(), deps)
|
||||
expect(generateBranchNameMock).toHaveBeenCalledTimes(1)
|
||||
expect(setDisplayName).toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -476,6 +476,10 @@ describe('maybeAutoRenameBranchOnFirstWork', () => {
|
||||
)
|
||||
|
||||
expect(gitExecFileAsyncMock).toHaveBeenCalledTimes(1)
|
||||
expect(gitExecFileAsyncMock).toHaveBeenCalledWith(
|
||||
['rev-parse', '--abbrev-ref', 'HEAD'],
|
||||
expect.objectContaining({ cwd: '/repo/wt-0' })
|
||||
)
|
||||
})
|
||||
|
||||
it('retries on a later event after a transient failure (does not poison the worktree)', async () => {
|
||||
@@ -557,8 +561,12 @@ describe('maybeAutoRenameBranchOnFirstWork', () => {
|
||||
error: 'Generation canceled.',
|
||||
canceled: true
|
||||
})
|
||||
const { deps, setRenameError } = makeDeps()
|
||||
const { deps, setRenameError, setDisplayName, onRenamed } = makeDeps()
|
||||
await maybeAutoRenameBranchOnFirstWork(workingEvent(), deps)
|
||||
expect(generateBranchNameMock).toHaveBeenCalledTimes(1)
|
||||
expect(setDisplayName).not.toHaveBeenCalled()
|
||||
expect(onRenamed).not.toHaveBeenCalled()
|
||||
expect(gitExecFileAsyncMock.mock.calls.some(([args]) => args[0] === 'branch')).toBe(false)
|
||||
expect(setRenameError).not.toHaveBeenCalledWith(WORKTREE_ID, 'Generation canceled.')
|
||||
})
|
||||
|
||||
@@ -657,6 +665,8 @@ describe('maybeAutoRenameBranchOnFirstWork', () => {
|
||||
['branch', '-m', 'you/fix-auth'],
|
||||
expect.anything()
|
||||
)
|
||||
expect(generateBranchNameMock).toHaveBeenCalledTimes(1)
|
||||
expect(branchReadCount).toBe(2)
|
||||
expect(onRenamed).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
@@ -687,21 +697,26 @@ describe('maybeAutoRenameBranchOnFirstWork', () => {
|
||||
['branch', '-m', 'you/fix-auth'],
|
||||
expect.anything()
|
||||
)
|
||||
expect(generateBranchNameMock).toHaveBeenCalledTimes(1)
|
||||
expect(upstreamReadCount).toBe(2)
|
||||
expect(onRenamed).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it.each<[string, Repo]>([
|
||||
['connectionId', { ...REMOTE_REPO_BASE, connectionId: 'ssh-1' }],
|
||||
['executionHostId', { ...REMOTE_REPO_BASE, executionHostId: 'ssh:ssh-1' }]
|
||||
])('retries without local git for a row naming its SSH owner by %s', async (_spelling, repo) => {
|
||||
const { deps, onRenamed } = makeDeps({ getRepo: () => repo })
|
||||
])(
|
||||
'skips local generation and git for a row naming its SSH owner by %s',
|
||||
async (_spelling, repo) => {
|
||||
const { deps, onRenamed } = makeDeps({ getRepo: () => repo })
|
||||
|
||||
await maybeAutoRenameBranchOnFirstWork(workingEvent(), deps)
|
||||
await maybeAutoRenameBranchOnFirstWork(workingEvent(), deps)
|
||||
|
||||
expect(gitExecFileAsyncMock).not.toHaveBeenCalled()
|
||||
expect(generateBranchNameMock).not.toHaveBeenCalled()
|
||||
expect(onRenamed).not.toHaveBeenCalled()
|
||||
})
|
||||
expect(gitExecFileAsyncMock).not.toHaveBeenCalled()
|
||||
expect(generateBranchNameMock).not.toHaveBeenCalled()
|
||||
expect(onRenamed).not.toHaveBeenCalled()
|
||||
}
|
||||
)
|
||||
|
||||
it("never dials a paired server's nested SSH target from this client", async () => {
|
||||
const repo: Repo = {
|
||||
|
||||
Reference in New Issue
Block a user