Merge remote-tracking branch 'origin/main' into brennanb2025/d4-coordinator-delivery

This commit is contained in:
Brennan Benson
2026-09-29 00:29:40 -07:00
1267 changed files with 17975 additions and 4496 deletions
+23 -1
View File
@@ -17,6 +17,24 @@ on:
- '.pnpmfile.cjs'
- '.github/actions/install-node-dependencies/**'
- '.github/workflows/bun-profile-tests.yml'
# The pull request qualifies one platform for an unflavoured change; this is where all six
# are re-qualified, so a platform break surfaces minutes after merge instead of next cron.
push:
branches: [main]
paths:
- 'src/**'
- 'config/**'
- 'native/**'
- 'tests/**'
- 'resources/**'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'tsconfig.json'
- '.npmrc'
- '.pnpmfile.cjs'
- '.github/actions/install-node-dependencies/**'
- '.github/workflows/bun-profile-tests.yml'
workflow_dispatch:
schedule:
- cron: '30 11 * * *'
@@ -57,7 +75,11 @@ jobs:
persistence:
needs: changes
# Missing/failed detection runs the full matrix; manual runs remain unconditional.
if: ${{ !cancelled() && needs.changes.outputs.should_run != 'false' }}
# A draft carries no platform verdict; readiness re-triggers this workflow. Spelled against
# the event name so the push and schedule paths do not rest on a null property comparison.
if: >-
${{ !cancelled() && needs.changes.outputs.should_run != 'false' &&
(github.event_name != 'pull_request' || github.event.pull_request.draft != true) }}
strategy:
fail-fast: false
matrix:
+4 -5
View File
@@ -132,11 +132,10 @@ jobs:
print(src)
PY
# Why: reuse the existing buf0-bot GitHub App (also used by
# track-community-prs.yaml) instead of minting a new PAT. The app is
# installed org-wide, so it has access to stablyai/homebrew-orca
# automatically. GITHUB_TOKEN cannot push cross-repo; a short-lived
# installation token can.
# Why: reuse the existing buf0-bot GitHub App instead of minting a new
# PAT. The app is installed org-wide, so it has access to
# stablyai/homebrew-orca automatically. GITHUB_TOKEN cannot push
# cross-repo; a short-lived installation token can.
- name: Generate buf0-bot token
id: app-token
uses: actions/create-github-app-token@v3
+14 -8
View File
@@ -41,9 +41,8 @@ on:
- 'config/scripts/mobile-test-change-scope*'
- 'config/scripts/pr-code-change-scope.mjs'
- 'config/scripts/mobile-recording-pin-checkout.test.mjs'
# Why main too: a behaviour-change branch legitimately pins its own last fenced commit, and that
# commit only stops being reachable when the branch squash-merges. The pull_request run cannot
# see that; this one is where the pin guard finds it.
# Why main too: a squash is where a spliced corpus lands, and where a behaviour-change branch's
# own pinned commit leaves main's history for its pull request's head ref, which the guard follows.
push:
branches:
- main
@@ -182,6 +181,10 @@ jobs:
name: RPC recording pin
# Why ARM: pure Node plus git; the golden comparison masks `platform`.
runs-on: ubuntu-24.04-arm
# Why pull-requests: the guard asks GitHub which pull requests hold a pin main's history lacks.
permissions:
contents: read
pull-requests: read
defaults:
run:
@@ -191,7 +194,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v6
with:
# The ancestry verdict is read straight off history. On a shallow checkout
# The reachability verdict is read straight off history. On a shallow checkout
# `git merge-base --is-ancestor` answers from grafted parents, so the guard refuses to
# answer at all rather than reporting a pass it has no evidence for -- and the pinned tree
# below has to be checkable out.
@@ -211,12 +214,14 @@ jobs:
# Seconds. No `--ref`, so the pin is judged against the same tree it was read out of. On a
# pull request that is the merge preview, which already carries main's repins; judging the
# branch head instead fails every branch cut before the day's repin, and its instruction would
# tell the author to pin their own head -- creating the break this guard exists to catch. A
# branch that pins its own commit passes here and fails on the push after the squash, which is
# where the pin actually leaves the history.
# tell the author to pin their own head. A branch that pins its own commit still passes on the
# push after the squash: the guard asks GitHub which pull requests hold the pin and fetches
# their `refs/pull/<n>/head`, which GitHub keeps for good. The token lifts the API rate limit.
- name: Check the recording pin is reachable
shell: bash
run: pnpm exec tsx scripts/rpc-recording-pin-guard.mts ancestry
env:
GITHUB_TOKEN: ${{ github.token }}
run: pnpm exec tsx scripts/rpc-recording-pin-guard.mts reachable
# ~2 min locally for the record itself, so it is gated rather than run twice over. A pull
# request that moves none of the corpus, the manifest or the recorder cannot move this
@@ -226,6 +231,7 @@ jobs:
- name: Reproduce the corpus from the pinned tree
shell: bash
env:
GITHUB_TOKEN: ${{ github.token }}
PIN_GUARD_BASE: ${{ github.event.pull_request.base.sha }}
run: |
if [ -n "$PIN_GUARD_BASE" ]; then
+5 -1
View File
@@ -34,8 +34,12 @@ jobs:
native-runtime: node
node-version: ${{ matrix.node }}
unit_plan:
uses: ./.github/workflows/unit-plan.yml
test:
needs: [test_native_cache]
needs: [test_native_cache, unit_plan]
uses: ./.github/workflows/unit-tests.yml
with:
node_versions: '["24", "26"]'
shards: ${{ needs.unit_plan.outputs.shards }}
+22 -2
View File
@@ -640,12 +640,24 @@ jobs:
native-runtime: node
node-version: '24'
# Why hoisted out of unit-tests.yml: a caller's `needs` gate the whole called workflow, so
# while planning lived in there it queued behind static analysis and typecheck and the shards
# then queued behind it. Planning needs none of their output, so running it against
# code_paths alone overlaps it with the gate. Measured a median 93s off the matrix's start.
unit_plan:
needs: [code_paths]
if: needs.code_paths.outputs.test == 'true'
uses: ./.github/workflows/unit-plan.yml
with:
selection_mode: ${{ vars.ORCA_UNIT_SELECTION_MODE || 'shadow' }}
test:
needs: [code_paths, test_native_cache, static_analysis, typecheck]
needs: [code_paths, unit_plan, test_native_cache, static_analysis, typecheck]
# Honor cancellation while allowing the optional native-cache primer to skip.
if: >-
!cancelled() &&
needs.code_paths.outputs.test == 'true' &&
needs.unit_plan.result == 'success' &&
needs.static_analysis.result == 'success' &&
needs.typecheck.result == 'success' &&
(needs.test_native_cache.result == 'success' || needs.test_native_cache.result == 'skipped')
@@ -653,7 +665,15 @@ jobs:
with:
node_versions: '["24"]'
runner: ubuntu-24.04-arm
selection_mode: ${{ vars.ORCA_UNIT_SELECTION_MODE || 'shadow' }}
shards: ${{ needs.unit_plan.outputs.shards }}
# Why a sibling and not part of the test workflow: it is advisory, so it must not delay the
# gate. Inside unit-tests.yml a caller's `needs: test` waited for it, holding verify ~36s
# after the last shard. Deliberately absent from verify's needs for the same reason.
unit_selection_evidence:
needs: [test]
if: ${{ !cancelled() && needs.test.result == 'success' }}
uses: ./.github/workflows/unit-selection-evidence.yml
# Why a separate job: the test needs a real Chrome, and the sharded `test` matrix
# would pay for it on every shard to run one file in whichever shard it landed in.
-120
View File
@@ -1,120 +0,0 @@
name: Track Community PRs
on:
pull_request_target:
types: [opened, reopened, ready_for_review]
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to backfill or retry'
required: true
type: number
permissions:
contents: read
jobs:
track-community-pr:
# API-only bookkeeping fits the free single-CPU container runner.
runs-on: ubuntu-slim
timeout-minutes: 5
steps:
- name: Generate bufo-bot token
id: app-token
uses: actions/create-github-app-token@v3
with:
app-id: 2590194
private-key: ${{ secrets.BUFO_BOT_PRIVATE_KEY }}
owner: stablyai
- name: Add PR to project
uses: actions/github-script@v8
env:
PROJECT_OWNER: stablyai
PROJECT_NUMBER: '13'
INTERNAL_TEAM_SLUG: stably-eng
with:
github-token: ${{ steps.app-token.outputs.token }}
script: |
const projectOwner = process.env.PROJECT_OWNER;
const projectNumber = Number(process.env.PROJECT_NUMBER);
const internalTeamSlug = process.env.INTERNAL_TEAM_SLUG;
const owner = context.repo.owner;
const repo = context.repo.repo;
const prNumber = context.eventName === 'workflow_dispatch'
? Number(context.payload.inputs.pr_number)
: context.payload.pull_request.number;
const { data: pr } = await github.rest.pulls.get({
owner,
repo,
pull_number: prNumber,
});
const author = pr.user.login;
const skippedAuthors = new Set([
'github-actions[bot]',
'dependabot[bot]',
]);
if (skippedAuthors.has(author)) {
core.info(`Skipping bot PR author ${author}.`);
return;
}
let isInternalAuthor = false;
try {
const membership = await github.rest.teams.getMembershipForUserInOrg({
org: projectOwner,
team_slug: internalTeamSlug,
username: author,
});
isInternalAuthor = membership.data.state === 'active';
} catch (error) {
if (error.status !== 404) {
throw error;
}
}
if (isInternalAuthor) {
core.info(`Skipping internal PR author ${author}.`);
return;
}
const projectResult = await github.graphql(
`
query($owner: String!, $number: Int!) {
organization(login: $owner) {
projectV2(number: $number) {
id
}
}
}
`,
{ owner: projectOwner, number: projectNumber },
);
const projectId = projectResult.organization.projectV2.id;
await github.graphql(
`
mutation($projectId: ID!, $contentId: ID!) {
addProjectV2ItemById(input: {
projectId: $projectId,
contentId: $contentId
}) {
item {
id
}
}
}
`,
{
projectId,
contentId: pr.node_id,
},
);
core.info(`Added PR #${pr.number} (${pr.html_url}) to project ${projectOwner}/${projectNumber}.`);
+48
View File
@@ -0,0 +1,48 @@
name: Unit plan
# Why its own workflow: the caller's `needs` gate the whole called workflow, so while this lived
# inside unit-tests.yml it waited on static analysis and typecheck before it could even start —
# and the shards then waited on it. Planning needs neither (its inputs are the checkout, a git
# diff against HEAD^1, the import graph, and the checked-in timing baseline), so hoisting it out
# lets it overlap the gate instead of queueing behind it. Measured: a median 93s off the shard
# matrix's start.
on:
workflow_call:
inputs:
selection_mode:
description: Shadow validates selection; selected applies it only to draft PRs.
required: false
default: shadow
type: string
outputs:
shards:
description: JSON array of shard assignments for the unit matrix.
value: ${{ jobs.plan.outputs.shards }}
permissions:
contents: read
jobs:
plan:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
shards: ${{ steps.plan.outputs.shards }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 2
persist-credentials: false
- uses: ./.github/actions/install-node-dependencies
- name: Plan unit selection
id: plan
env:
ORCA_UNIT_SELECTION_MODE: ${{ inputs.selection_mode }}
run: node config/scripts/ci-unit-plan.mjs
- uses: actions/upload-artifact@v7
continue-on-error: true
with:
name: unit-selection-attempt-${{ github.run_attempt }}
path: ci-shards/unit-selection.json
retention-days: 14
@@ -0,0 +1,41 @@
name: Unit selection evidence
# Why its own workflow: this job is advisory -- `continue-on-error` on both the job and its
# comparison step, so it can never fail a PR. But a caller's `needs: test` waits for every job in
# the called workflow, so while it lived in unit-tests.yml it held `verify` for ~36s after the
# last shard finished. Called as a sibling instead, it still runs on every PR and still uploads
# its review artifact; it just no longer sits on the critical path.
on:
workflow_call:
permissions:
contents: read
jobs:
selection_evidence:
if: ${{ !cancelled() }}
continue-on-error: true
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v6
with:
sparse-checkout: config/scripts/ci-unit-selection-review.mjs
sparse-checkout-cone-mode: false
persist-credentials: false
- uses: actions/setup-node@v6
with:
node-version: '24'
- uses: actions/download-artifact@v8
with:
pattern: unit-shard-node-*-attempt-${{ github.run_attempt }}
path: unit-evidence/
- name: Compare selection with full results
continue-on-error: true
run: node config/scripts/ci-unit-selection-review.mjs unit-evidence
- uses: actions/upload-artifact@v7
if: always()
continue-on-error: true
with:
name: unit-selection-review-attempt-${{ github.run_attempt }}
path: unit-evidence/selection-review.json
retention-days: 30
+4 -58
View File
@@ -14,48 +14,23 @@ on:
default: ubuntu-latest
type: string
selection_mode:
description: Shadow validates selection; selected applies it only to draft PRs.
required: false
default: shadow
shards:
description: JSON array of shard assignments, produced by unit-plan.yml.
required: true
type: string
permissions:
contents: read
jobs:
plan:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
shards: ${{ steps.plan.outputs.shards }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 2
persist-credentials: false
- uses: ./.github/actions/install-node-dependencies
- name: Plan unit selection
id: plan
env:
ORCA_UNIT_SELECTION_MODE: ${{ inputs.selection_mode }}
run: node config/scripts/ci-unit-plan.mjs
- uses: actions/upload-artifact@v7
continue-on-error: true
with:
name: unit-selection-attempt-${{ github.run_attempt }}
path: ci-shards/unit-selection.json
retention-days: 14
test:
needs: plan
name: tests node ${{ matrix.node }} ${{ matrix.shard.index }}/${{ matrix.shard.count }}
runs-on: ${{ inputs.runner }}
strategy:
fail-fast: false
matrix:
node: ${{ fromJSON(inputs.node_versions) }}
shard: ${{ fromJSON(needs.plan.outputs.shards) }}
shard: ${{ fromJSON(inputs.shards) }}
steps:
- name: Checkout
@@ -100,35 +75,6 @@ jobs:
retention-days: 14
if-no-files-found: warn
selection_evidence:
needs: test
if: ${{ !cancelled() }}
continue-on-error: true
runs-on: ubuntu-slim
steps:
- uses: actions/checkout@v6
with:
sparse-checkout: config/scripts/ci-unit-selection-review.mjs
sparse-checkout-cone-mode: false
persist-credentials: false
- uses: actions/setup-node@v6
with:
node-version: '24'
- uses: actions/download-artifact@v8
with:
pattern: unit-shard-node-*-attempt-${{ github.run_attempt }}
path: unit-evidence/
- name: Compare selection with full results
continue-on-error: true
run: node config/scripts/ci-unit-selection-review.mjs unit-evidence
- uses: actions/upload-artifact@v7
if: always()
continue-on-error: true
with:
name: unit-selection-review-attempt-${{ github.run_attempt }}
path: unit-evidence/selection-review.json
retention-days: 30
relay_integration:
name: relay integration node ${{ matrix.node }}
strategy:
+2 -1
View File
@@ -8,6 +8,7 @@
"cloud/**",
"resources/licenses/**",
".github/actions/cloud-sql-rollout-lease/**",
".anti-slop-plugin/**"
".anti-slop-plugin/**",
"src/main/runtime/__fixtures__/*.timing.json"
]
}
+1
View File
@@ -195,6 +195,7 @@ Works with **any CLI agent** — if it runs in a terminal, it runs in Orca.
<a href="https://github.com/autohandai/code-cli"><kbd><img src="https://www.google.com/s2/favicons?domain=autohand.ai&sz=64" alt="Autohand Code logo" width="16" valign="middle" /> Autohand Code</kbd></a> &nbsp;
<a href="https://github.com/charmbracelet/crush"><kbd><img src="https://www.google.com/s2/favicons?domain=charm.sh&sz=64" alt="Charm logo" width="16" valign="middle" /> Charm</kbd></a> &nbsp;
<a href="https://docs.cline.bot/cline-cli/overview"><kbd><img src="https://www.google.com/s2/favicons?domain=cline.bot&sz=64" alt="Cline logo" width="16" valign="middle" /> Cline</kbd></a> &nbsp;
<a href="https://www.codebuddy.ai/cli"><kbd><img src="https://www.google.com/s2/favicons?domain=codebuddy.ai&sz=64" alt="CodeBuddy logo" width="16" valign="middle" /> CodeBuddy</kbd></a> &nbsp;
<a href="https://www.codebuff.com/docs/help/quick-start"><kbd><img src="https://www.google.com/s2/favicons?domain=codebuff.com&sz=64" alt="Codebuff logo" width="16" valign="middle" /> Codebuff</kbd></a> &nbsp;
<a href="https://freebuff.com"><kbd><img src="src/shared/agent-icons/freebuff.png" alt="Freebuff logo" width="16" valign="middle" /> Freebuff</kbd></a> &nbsp;
<a href="https://commandcode.ai/docs/quickstart"><kbd><img src="https://www.google.com/s2/favicons?domain=commandcode.ai&sz=64" alt="Command Code logo" width="16" valign="middle" /> Command Code</kbd></a> &nbsp;
+1 -1
View File
@@ -8856,7 +8856,7 @@
"Windows ConPTY, SSH-hosted PTYs, app-quit killAll, and daemon dispose retain foreground-tree-only teardown.",
"A process born in the capture second is SIGTERMed but not SIGKILLed because ps cannot prove its recycled-PID identity.",
"A descendant orphaned before or during root ownership loss requires the separate crash-orphan sweep and is not recovered from a stale kill-time snapshot.",
"recordTerminalSurfaceRetirement advances the INCOMING session's terminal topology revision, so a tombstoned close whose write carries a revision at or below the store's own is rebased away instead of persisting. Pre-existing for every repo already past revision 0 and unchanged by the host-admitted membership fix, which only makes more repos reach that state sooner; the authoritative close path (persistTerminalSurfaceRetirements) computes from the store's session and is unaffected. Known, unaddressed, and deliberately out of scope here: the safe correction is per-tab rather than per-worktree rebase arbitration, because raising the incoming revision wholesale would re-open the host-tab loss whenever a close coincides with a host create.",
"recordTerminalSurfaceRetirement advances the INCOMING session's terminal topology revision, so a tombstoned close whose write carries a revision at or below the store's own is rebased away instead of persisting. Pre-existing for every repo already past revision 0 and unchanged by the host-admitted membership fix, which only makes more repos reach that state sooner; the authoritative close path (stageTerminalSurfaceRetirements) computes from the store's session and is unaffected. Known, unaddressed, and deliberately out of scope here: the safe correction is per-tab rather than per-worktree rebase arbitration, because raising the incoming revision wholesale would re-open the host-tab loss whenever a close coincides with a host create.",
"The SSH relay reattach binding (src/main/ssh/ssh-relay-session.ts persistPtyBinding) is NOT flagged host-admitted, so a lease rebind that has to mint a missing tab raises no fence. It rebinds an existing lease rather than admitting a new surface, so it is believed not to need one, but that was not established either way. Known, unaddressed, and deliberately out of scope here.",
"The host-created retention journey is macOS-local; the reported incident was on a physical Windows host, which we did not run against."
],
+1 -7
View File
@@ -125,13 +125,7 @@ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
const changedFiles = readFileSync(process.argv[2], 'utf8').split('\0').filter(Boolean)
const result = await classifyBunProfileChanges(changedFiles)
console.log(result.reason)
let event = {}
try {
event = JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, 'utf8'))
} catch {
// Missing event evidence retains full qualification.
}
const policy = bunProfileQualification(changedFiles, result, event)
const policy = bunProfileQualification(changedFiles, result)
const output = `should_run=${result.shouldRun}\nqualification=${policy.qualification}\nrunners=${JSON.stringify(policy.runners)}\n`
if (process.env.GITHUB_OUTPUT) {
appendFileSync(process.env.GITHUB_OUTPUT, output)
@@ -143,6 +143,13 @@ it('keeps all ten platform jobs and runs them when detection is skipped or fails
expect(detect.run).toContain('git diff --name-only --no-renames -z HEAD^1 HEAD')
expect(workflow.on.pull_request.types).toContain('ready_for_review')
expect(workflow.on.schedule).toHaveLength(1)
// A pull request may qualify one platform, so the merged commit must re-qualify all six.
expect(workflow.on.push.branches).toEqual(['main'])
expect(workflow.on.push.paths).toEqual(workflow.on.pull_request.paths)
// The push and schedule paths must not rest on a null property comparison.
expect(workflow.jobs.persistence.if).toContain(
"github.event_name != 'pull_request' || github.event.pull_request.draft != true"
)
expect(workflow.jobs.persistence.strategy.matrix.os).toContain('needs.changes.outputs.runners')
for (const jobName of ['linux_glibc_floor', 'linux_musl']) {
const job = workflow.jobs[jobName]
+14 -13
View File
@@ -7,34 +7,35 @@ export const BUN_PERSISTENCE_RUNNERS = [
'windows-11-arm'
]
const QUALIFICATION_PREFIXES = [
'config/',
// Only surfaces whose behaviour actually differs per platform. Escalating on `config/`,
// `resources/` and `.github/` wholesale took 36.5% of the last 1100 commits through all six
// platforms where a platform-flavoured predicate takes 19%.
const PLATFORM_PREFIXES = [
'native/',
'resources/',
'.github/',
'config/patches/',
'.github/actions/install-node-dependencies/',
'src/main/persistence/',
'src/main/sqlite/',
'src/main/orcad/',
'src/main/providers/',
'src/main/daemon/',
'src/main/ssh/',
'src/main/wsl/',
'src/relay/',
'src/shared/child-process/'
]
export function bunProfileQualification(changedFiles, scope, event = {}) {
const sensitive = changedFiles.some(
export function bunProfileQualification(changedFiles, scope) {
const platformSpecific = changedFiles.some(
(file) =>
// A root manifest can move a native dependency on every platform at once.
!file.includes('/') ||
QUALIFICATION_PREFIXES.some((prefix) => file.startsWith(prefix)) ||
PLATFORM_PREFIXES.some((prefix) => file.startsWith(prefix)) ||
/(?:^|[/.-])(?:windows|win32|wsl|macos|darwin|linux|posix|bun)(?:[/.-]|$)/i.test(file)
)
// Only a proven unrelated platform change in a draft may defer qualification.
const full =
event.pull_request?.draft !== true ||
changedFiles.length === 0 ||
scope.graphUnavailable === true ||
sensitive
// A pull request qualifies one platform unless the change is platform-flavoured; the push to
// main re-qualifies all six, so an unescalated miss surfaces minutes after merge, not a day.
const full = changedFiles.length === 0 || scope.graphUnavailable === true || platformSpecific
return {
qualification: full,
runners: full ? BUN_PERSISTENCE_RUNNERS : ['ubuntu-22.04']
@@ -1,22 +1,32 @@
import { expect, it } from 'vitest'
import { BUN_PERSISTENCE_RUNNERS, bunProfileQualification } from './bun-profile-qualification.mjs'
const draft = { pull_request: { draft: true } }
const scope = { shouldRun: true }
it('defers only platform qualification for ordinary draft runtime changes', () => {
expect(
bunProfileQualification(['src/main/runtime/rpc/methods/example.ts'], scope, draft)
).toEqual({
it('qualifies one platform for a change no platform can alter', () => {
expect(bunProfileQualification(['src/main/runtime/rpc/methods/example.ts'], scope)).toEqual({
qualification: false,
runners: ['ubuntu-22.04']
})
})
it.each([
'package.json',
'native/windows-registry/src/addon.cc',
'src/renderer/src/components/TabStrip.tsx',
'config/vitest.config.ts',
'config/scripts/ci-unit-plan.mjs',
'resources/icons/tray.png',
'.github/workflows/pr.yml',
'docs/reference/agent-status-store.md'
])('keeps one platform for unflavoured input %s', (file) => {
expect(bunProfileQualification([file], scope).runners).toEqual(['ubuntu-22.04'])
})
it.each([
'package.json',
'pnpm-lock.yaml',
'native/windows-registry/src/addon.cc',
'config/patches/node-pty.patch',
'.github/actions/install-node-dependencies/action.yml',
'src/main/ssh/ssh-provider.ts',
'src/main/providers/local-pty-provider.ts',
'src/shared/child-process/run-process.ts',
@@ -28,20 +38,19 @@ it.each([
'src/main/daemon/entry.ts',
'src/relay/index.ts',
'src/main/wsl/runner.ts'
])('retains all platforms for sensitive input %s', (file) => {
expect(bunProfileQualification([file], scope, draft)).toEqual({
])('retains all platforms for platform-flavoured input %s', (file) => {
expect(bunProfileQualification([file], scope)).toEqual({
qualification: true,
runners: BUN_PERSISTENCE_RUNNERS
})
})
it('qualifies every ready commit, scheduled/manual runs and incomplete evidence', () => {
const paths = ['src/main/runtime/rpc/methods/example.ts']
for (const event of [{}, { pull_request: { draft: false } }]) {
expect(bunProfileQualification(paths, scope, event).qualification).toBe(true)
}
expect(bunProfileQualification([], scope, draft).qualification).toBe(true)
it('fails closed to every platform when the evidence is incomplete', () => {
expect(bunProfileQualification([], scope).qualification).toBe(true)
expect(
bunProfileQualification(paths, { ...scope, graphUnavailable: true }, draft).qualification
bunProfileQualification(['src/main/runtime/rpc/methods/example.ts'], {
...scope,
graphUnavailable: true
}).qualification
).toBe(true)
})
-2
View File
@@ -1721,7 +1721,6 @@
"src/main/git/remove-worktree-branch-cleanup.test.ts": 163,
"src/main/git/remove-worktree-clean-preflight.test.ts": 125,
"src/main/git/remove-worktree.test.ts": 159,
"src/main/git/repo-api-parity.test.ts": 194,
"src/main/git/repo-branch-conflict-batched-probe.test.ts": 73,
"src/main/git/repo-branch-conflict-real-git.test.ts": 351,
"src/main/git/repo-branch-conflict.test.ts": 214,
@@ -3241,7 +3240,6 @@
"src/main/runtime/agent-session-launch-env-backfill.test.ts": 264,
"src/main/runtime/agent-session-lease-renewal.test.ts": 242,
"src/main/runtime/agent-session-operation-admission.test.ts": 165,
"src/main/runtime/agent-session-orphan-child-reaper.test.ts": 90,
"src/main/runtime/agent-session-process-identity-probe-windows-batch.test.ts": 47,
"src/main/runtime/agent-session-process-identity-probe.test.ts": 78,
"src/main/runtime/agent-session-provider-handle-transition.test.ts": 104,
+5 -2
View File
@@ -3,7 +3,7 @@ import { pathToFileURL } from 'node:url'
import { runProcessSync } from './script-child-process.mjs'
import { collectUnitDependencyGraph } from './ci-unit-dependency-graph.mjs'
import { discoverUnitFiles } from './ci-unit-files.mjs'
import { planUnitSelection } from './ci-unit-selection.mjs'
import { FULL_SHARD_COUNT, planUnitSelection } from './ci-unit-selection.mjs'
import { readTimingBaseline, writeAssignment } from './ci-shard-assignment.mjs'
export function prepareUnitPlan(env = process.env) {
@@ -39,7 +39,10 @@ export function prepareUnitPlan(env = process.env) {
files,
candidateFiles: files,
executionFiles: files,
shards: Array.from({ length: 8 }, (_, index) => ({ index: index + 1, count: 8 }))
shards: Array.from({ length: FULL_SHARD_COUNT }, (_, index) => ({
index: index + 1,
count: FULL_SHARD_COUNT
}))
}
}
writeAssignment('ci-shards/unit-selection.json', plan)
+2 -1
View File
@@ -4,6 +4,7 @@ import { join } from 'node:path'
import { fileURLToPath } from 'node:url'
import { expect, it } from 'vitest'
import { runProcessSync } from './script-child-process.mjs'
import { FULL_SHARD_COUNT } from './ci-unit-selection.mjs'
it.each([true, false])(
'plans from a real Git diff, with parent evidence available: %s',
@@ -70,7 +71,7 @@ it.each([true, false])(
? 'Transitive imports plus indirect-input consumers'
: 'Error: Changed paths unavailable'
)
expect(plan.shards).toHaveLength(withParent ? 1 : 8)
expect(plan.shards).toHaveLength(withParent ? 1 : FULL_SHARD_COUNT)
} finally {
rmSync(root, { recursive: true, force: true })
}
+8 -2
View File
@@ -27,14 +27,20 @@ export function selectUnitFiles(files, changed, graph) {
}
}
// A concurrency slot is charged per job, not per core, so eight 6.5-minute shards cost eight of
// the account's slots and made the unit matrix 68% of daily slot demand. Against the checked-in
// baseline, five shards each carry 24.7 test-minutes over four workers plus ~2.6 minutes of fixed
// setup, so ~8.8 minutes -- less than the 10.5-minute p95 queue the oversharding was causing.
export const FULL_SHARD_COUNT = 5
export function planUnitSelection({ files, changed, graph, timings, event, mode = 'shadow' }) {
const candidate = selectUnitFiles(files, changed, graph)
const selected = mode === 'selected' && event?.pull_request?.draft === true && !candidate.full
const executionFiles = selected ? candidate.files : files
const totalMs = balanceFiles(executionFiles, 1, timings).shards[0].durationMs
const count = selected
? Math.max(1, Math.min(8, Math.ceil(totalMs / 900_000), executionFiles.length))
: 8
? Math.max(1, Math.min(FULL_SHARD_COUNT, Math.ceil(totalMs / 900_000), executionFiles.length))
: FULL_SHARD_COUNT
return {
version: 1,
mode: selected ? 'selected' : 'shadow',
+17 -1
View File
@@ -1,6 +1,11 @@
import { describe, expect, it } from 'vitest'
import { buildUnitDependencyGraph } from './ci-unit-dependency-graph.mjs'
import { auditUnitSelection, planUnitSelection, selectUnitFiles } from './ci-unit-selection.mjs'
import {
FULL_SHARD_COUNT,
auditUnitSelection,
planUnitSelection,
selectUnitFiles
} from './ci-unit-selection.mjs'
const sources = new Map(
Object.entries({
@@ -79,6 +84,17 @@ describe('conservative unit selection', () => {
expect(selected.shards).toEqual([{ index: 1, count: 1 }])
})
it('spends five concurrency slots on a full run', () => {
const plan = planUnitSelection({ files, changed: ['src/leaf.ts'], graph, timings: {} })
expect(plan.shards).toEqual(
Array.from({ length: FULL_SHARD_COUNT }, (_, index) => ({
index: index + 1,
count: FULL_SHARD_COUNT
}))
)
expect(FULL_SHARD_COUNT).toBe(5)
})
it('records failures that would have been missed while shadow runs remain full', () => {
const plan = planUnitSelection({ files, changed: ['src/leaf.ts'], graph, timings: {} })
expect(
@@ -19,12 +19,15 @@ it('keeps full ancestry and credentials for lazy pinned-tree reads', () => {
expect(job.if).toBeUndefined()
expect(workflow.on.push.branches).toEqual(['main'])
expect(workflow.concurrency.group).toContain('github.sha')
expect(job.steps.find((step) => step.name === 'Check the recording pin is reachable').run).toBe(
'pnpm exec tsx scripts/rpc-recording-pin-guard.mts ancestry'
)
const reachable = job.steps.find((step) => step.name === 'Check the recording pin is reachable')
expect(reachable.run).toBe('pnpm exec tsx scripts/rpc-recording-pin-guard.mts reachable')
const reproduce = job.steps.find(
(step) => step.name === 'Reproduce the corpus from the pinned tree'
)
// Both steps ask GitHub which pull requests hold a pin main's history lacks.
expect(job.permissions).toEqual({ contents: 'read', 'pull-requests': 'read' })
expect(reachable.env.GITHUB_TOKEN).toContain('github.token')
expect(reproduce.env.GITHUB_TOKEN).toContain('github.token')
expect(reproduce.run).toContain('reproduce --if-changed-since "$PIN_GUARD_BASE"')
expect(reproduce.run).toContain(
'else\n pnpm exec tsx scripts/rpc-recording-pin-guard.mts reproduce\nfi'
@@ -597,10 +597,17 @@ describe('PR Checks skip wiring', () => {
}
expect(prWorkflow.jobs.test.needs).toEqual([
'code_paths',
'unit_plan',
'test_native_cache',
'static_analysis',
'typecheck'
])
// Planning is deliberately NOT behind the static-analysis gate: it consumes nothing those
// jobs produce, so gating it only made the shards queue behind it. It still has to succeed
// before the shards run, or the matrix would expand from an empty assignment.
expect(prWorkflow.jobs.unit_plan.needs).toEqual(['code_paths'])
expect(prWorkflow.jobs.unit_plan.if).toBe("needs.code_paths.outputs.test == 'true'")
expect(prWorkflow.jobs.test.if).toContain("needs.unit_plan.result == 'success'")
expect(prWorkflow.jobs.test.if).toContain("needs.code_paths.outputs.test == 'true'")
expect(prWorkflow.jobs.test.if).toContain("needs.test_native_cache.result == 'success'")
expect(prWorkflow.jobs.test.if).toContain("needs.test_native_cache.result == 'skipped'")
@@ -7,7 +7,6 @@ import { MOBILE_WEB_APP_DEPENDENCIES_REQUIRED_ENV } from './mobile-web-app-bundl
const workflow = parse(readFileSync('.github/workflows/pr.yml', 'utf8'))
const prTestLocWorkflow = parse(readFileSync('.github/workflows/pr-test-loc.yml', 'utf8'))
const trackingWorkflow = parse(readFileSync('.github/workflows/track-community-prs.yaml', 'utf8'))
const releasePolicyWorkflow = parse(readFileSync('.github/workflows/release-policy.yml', 'utf8'))
const issueLabelWorkflow = parse(readFileSync('.github/workflows/issue-os-labeler.yaml', 'utf8'))
const unitTestWorkflow = parse(readFileSync('.github/workflows/unit-tests.yml', 'utf8'))
@@ -55,7 +54,6 @@ describe('PR workflow parallelism', () => {
expect(workflow.jobs.typecheck['runs-on']).toBe('ubuntu-24.04-arm')
expect(workflow.jobs.verify['runs-on']).toBe('ubuntu-slim')
expect(prTestLocWorkflow.jobs.loc['runs-on']).toBe('ubuntu-slim')
expect(trackingWorkflow.jobs['track-community-pr']['runs-on']).toBe('ubuntu-slim')
expect(releasePolicyWorkflow.jobs.enforce['runs-on']).toBe('ubuntu-slim')
expect(issueLabelWorkflow.jobs['apply-os-label']['runs-on']).toBe('ubuntu-slim')
})
@@ -107,8 +105,12 @@ describe('PR workflow parallelism', () => {
expect(nodeNextWorkflow.on.schedule).toHaveLength(1)
expect(nodeNextWorkflow.on.workflow_dispatch).toBeNull()
expect(sharedTest.strategy.matrix.node).toBe('${{ fromJSON(inputs.node_versions) }}')
expect(sharedTest.strategy.matrix.shard).toBe('${{ fromJSON(needs.plan.outputs.shards) }}')
expect(sharedTest.needs).toBe('plan')
expect(sharedTest.strategy.matrix.shard).toBe('${{ fromJSON(inputs.shards) }}')
// The shard matrix no longer needs an in-workflow plan job: planning moved to
// unit-plan.yml so it can run before the static-analysis gate clears.
expect(sharedTest.needs).toBeUndefined()
expect(unitTestWorkflow.jobs.plan).toBeUndefined()
expect(unitTestWorkflow.on.workflow_call.inputs.shards.required).toBe(true)
expect(installStep.with['node-version']).toBe('${{ matrix.node }}')
expect(installStep.with['cache-electron-package']).toBe('true')
expect(testStep.run).toContain('--shard=${{ matrix.shard.index }}/${{ matrix.shard.count }}')
@@ -120,7 +122,7 @@ describe('PR workflow parallelism', () => {
expect(workflow.jobs.test.needs).toContain('test_native_cache')
expect(nodeNextPrimerInstall.with['native-runtime']).toBe('node')
expect(nodeNextPrimerInstall.with['node-version']).toBe('${{ matrix.node }}')
expect(nodeNextWorkflow.jobs.test.needs).toEqual(['test_native_cache'])
expect(nodeNextWorkflow.jobs.test.needs).toEqual(['test_native_cache', 'unit_plan'])
})
it('runs real-shell coverage once outside the general shards', () => {
@@ -497,6 +499,22 @@ describe('PR workflow parallelism', () => {
}
})
it('keeps advisory unit-selection evidence off the gate', () => {
// It is continue-on-error, so it can never fail a PR. Living inside unit-tests.yml made a
// caller's `needs: test` wait for it anyway, holding verify ~36s past the last shard. Pinned
// here so it cannot drift back onto the critical path.
const evidence = workflow.jobs.unit_selection_evidence
expect(evidence.uses).toBe('./.github/workflows/unit-selection-evidence.yml')
expect(evidence.needs).toEqual(['test'])
expect(workflow.jobs.verify.needs).not.toContain('unit_selection_evidence')
expect(unitTestWorkflow.jobs.selection_evidence).toBeUndefined()
const evidenceWorkflow = parse(
readFileSync('.github/workflows/unit-selection-evidence.yml', 'utf8')
)
const job = evidenceWorkflow.jobs.selection_evidence
expect(job['continue-on-error']).toBe(true)
})
it('keeps verify as the aggregate required check', () => {
expect(workflow.jobs.verify.needs).toEqual([
'code_paths',
+1
View File
@@ -9,6 +9,7 @@
"../src/main/claude/claude-hook-event-versions.ts",
"../src/main/claude/claude-managed-hook-events.ts",
"../src/main/qoder/hook-service.ts",
"../src/main/codebuddy/hook-service.ts",
"../src/main/agent-hooks/hook-stdin-contract.ts",
"../src/main/agent-hooks/hook-post-command.ts",
"../src/main/agent-hooks/hook-config-write-path.ts",
+4 -4
View File
@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="106" height="20" role="img" aria-label="downloads: 82m">
<title>downloads: 82m</title>
<svg xmlns="http://www.w3.org/2000/svg" width="106" height="20" role="img" aria-label="downloads: 83m">
<title>downloads: 83m</title>
<linearGradient id="s" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
@@ -15,7 +15,7 @@
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="11">
<text x="37" y="15" fill="#010101" fill-opacity=".3">downloads</text>
<text x="37" y="14">downloads</text>
<text x="90" y="15" fill="#010101" fill-opacity=".3">82m</text>
<text x="90" y="14">82m</text>
<text x="90" y="15" fill="#010101" fill-opacity=".3">83m</text>
<text x="90" y="14">83m</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 935 B

After

Width:  |  Height:  |  Size: 935 B

+4 -1
View File
@@ -45,7 +45,10 @@ suite. A shard verifies the plan's source SHA and complete discovery list before
using it. Missing/stale artifacts fall back to full coverage, even if that means
running the suite on fewer shards.
The initial policy is **shadow**, with all eight shards retained. The first
The initial policy is **shadow**, with every shard retained. A full run spends
`FULL_SHARD_COUNT` (five) concurrency slots: the account is charged a slot per job
rather than per core, so eight 6.5-minute shards made this matrix 68% of daily slot
demand while the arm pool queued 10.5 minutes at p95. The first
local inventory matched Vitest exactly (9,950 files at validation); representative
source changes retained roughly 88% of files because of indirect input readers.
That is evidence for conservative coverage, not evidence of the analysis's
+44
View File
@@ -0,0 +1,44 @@
# CodeBuddy terminal harness
CodeBuddy uses its own identity in the desktop and mobile agent catalogs, process
detection, telemetry, hooks, resume records and AI Vault. `codebuddy` and `cbc`
identify the interactive CLI; print, server, ACP and detached background modes do
not identify an interactive pane. Model and effort selections use `--model` and
`--effort`; the CLI resolves its stable model aliases for the current account.
Managed hooks use the existing Claude-compatible installer and transport, with
CodeBuddy's own `.codebuddy/settings.json` and hook source. Installation preserves
user hooks and statusline configuration. Local and SSH installers share the same
plan; Windows explicitly selects CodeBuddy's supported PowerShell hook shell.
Status flows through the execution host's canonical hook store.
## Observed lifecycle
Verified with the authenticated CodeBuddy 2.159.0 CLI on macOS:
- `UserPromptSubmit` starts work. `SessionStart` can arrive afterward and must not
settle that work.
- An unanswered `AskUserQuestion` emits a `Notification` with
`notification_type: permission_prompt` and the message
`needs your permission to use AskUserQuestion`.
- In this version, `PreToolUse(AskUserQuestion)` arrives **after** the user answers;
it resumes working, followed by `PostToolUse` and `Stop`.
- `Stop` supplies the final assistant message and the provider session identity
supplies the resume command.
The sanitized real event sequence is
`src/shared/__fixtures__/codebuddy-question-hooks.jsonl`. The regression test
replays it through the shared hook listener. Qoder keeps its existing lifecycle
semantics while sharing the common event projection.
AI Vault reads CodeBuddy's `type: message` JSONL records with top-level roles and
`input_text` / `output_text` content blocks. Local, WSL and SSH discovery use the
provider's `.codebuddy/projects` tree and the same incremental parser.
## Validation scope
Live macOS checks exercised launch through Orca's agent menu, model switching,
question waiting, answer submission, working and completion indicators, history
discovery and a resumed session recalling its earlier answer. Hidden-renderer CDP
screenshots record the working, question and completed states. Windows, Linux,
WSL and SSH runtime execution have not been exercised live on this machine.
@@ -45,6 +45,7 @@ To restore prompts for one agent only, edit that agent's default arguments or en
| Auggie | Auto-setup | [Augment](https://docs.augmentcode.com/cli/overview) |
| Autohand | Auto-setup | [Autohand](https://github.com/autohandai/code-cli) |
| Cline | Auto-setup | [Cline](https://docs.cline.bot/cline-cli/overview) |
| CodeBuddy | `npm install -g @tencent-ai/codebuddy-code` | [CodeBuddy](https://www.codebuddy.ai/cli) |
| Codebuff | Auto-setup | [Codebuff](https://www.codebuff.com/docs/help/quick-start) |
| Freebuff | Auto-setup | [Freebuff](https://freebuff.com/cli) |
| Command Code | Auto-setup, status | [Command Code](https://commandcode.ai/docs/quickstart) |
+3
View File
@@ -24,6 +24,7 @@ import { ensureDesktopNotificationChannel } from '../src/notifications/desktop-n
import { loadHostCatalog } from '../src/transport/host-store'
import { extractPairingCodeFromUrl } from '../src/transport/pairing'
import { recoverMobileRelayPairing } from '../src/transport/mobile-relay-pairing-recovery'
import { appUpdateChecker } from '../src/app-update/app-update-runtime'
// Why: keeps the native splash screen visible until the React tree is mounted
// and ready to render. Without this the user sees a blank white/black frame
@@ -65,6 +66,8 @@ export default function RootLayout() {
// Why: a rolled APNs/FCM token stops delivering silently, so every paired host
// has to be re-registered with the new one as soon as the provider hands it over.
useEffect(() => startPushTokenSync(), [])
// Cold start, then foreground and timer checks on the desktop updater's cadence.
useEffect(() => appUpdateChecker.start(), [])
useEffect(() => startAndroidForegroundPushPresentation(), [])
// Why: route `orca://pair?...` deep links to the confirm screen so
+2
View File
@@ -2,6 +2,7 @@ import { Linking } from 'react-native'
import { useRouter } from 'expo-router'
import SettingsMenuScreen from '../src/settings/settings-menu-screen'
import { PendingCredentialCleanupCard } from '../src/settings/pending-credential-cleanup-card'
import { SettingsAppUpdateSection } from '../src/settings/settings-app-update-section'
export default function NativeSettingsRoute() {
const router = useRouter()
@@ -10,6 +11,7 @@ export default function NativeSettingsRoute() {
push={(route) => router.push(route)}
openExternal={(url) => Linking.openURL(url)}
>
<SettingsAppUpdateSection />
<PendingCredentialCleanupCard />
</SettingsMenuScreen>
)
@@ -3,7 +3,7 @@
"family": "aiVault.history",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "ec16931c5431d3dbb05729d4670c381a434bff71648d334b7b5224db188fdccb",
@@ -3,7 +3,7 @@
"family": "aiVault.history",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "ec16931c5431d3dbb05729d4670c381a434bff71648d334b7b5224db188fdccb",
@@ -3,7 +3,7 @@
"family": "aiVault.history",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "ec16931c5431d3dbb05729d4670c381a434bff71648d334b7b5224db188fdccb",
@@ -3,7 +3,7 @@
"family": "aiVault.history-screen",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "c78ab47eea594b7e1988403321ff9ba135ca60c513bb9d5848bdde26c0ffe3c3",
@@ -3,7 +3,7 @@
"family": "aiVault.history-screen",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "c78ab47eea594b7e1988403321ff9ba135ca60c513bb9d5848bdde26c0ffe3c3",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-launch",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-launch",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-launch",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-launch",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-preparation",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-preparation",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-preparation",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
@@ -3,7 +3,7 @@
"family": "aiVault.resume-preparation",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "2f43211e4084c0493bd02ec98868acf53a4c748f89a70cd9657c9c3ee87b12fb",
+1 -1
View File
@@ -3,7 +3,7 @@
"family": "legacy-inventory",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "262eaad263a45aa13ec5b27c12b59946b12c202474229fff7a5727dba6d702ca",
+1 -1
View File
@@ -3,7 +3,7 @@
"family": "project-explicit-false",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "d3b7f33d810e1fa420ac41a628cde9fe4a9e65fd57f89fbca0a40fc7d74951ab",
+1 -1
View File
@@ -3,7 +3,7 @@
"family": "linear-detail-barrier",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "d3b7f33d810e1fa420ac41a628cde9fe4a9e65fd57f89fbca0a40fc7d74951ab",
@@ -3,7 +3,7 @@
"family": "browser.dialog",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "browser.dialog",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "browser.keyboard",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "browser.pointer-click",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "browser.pointer-click",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "browser.wheel",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "55971752f963202d30160851197a301089b0f3ebd0c46725af1a461d8310d658",
@@ -3,7 +3,7 @@
"family": "clipboard.image-attachment",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-attachment",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-attachment",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-attachment",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-attachment",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-upload",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-upload",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-upload",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "clipboard.image-upload",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "16779b663f4faec8cbccdb42efd7b568a2912845b161f8a4827754687eb4235c",
@@ -3,7 +3,7 @@
"family": "components.codex-reset-credit",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "76b53dea504a688493843e23e8e7d052fc196f559bb1e2579d0fd38bf3156d0e",
@@ -3,7 +3,7 @@
"family": "components.codex-reset-credit",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "76b53dea504a688493843e23e8e7d052fc196f559bb1e2579d0fd38bf3156d0e",
@@ -3,7 +3,7 @@
"family": "components.codex-reset-capability",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "5cfbce3c7d97d908fbd447646d611e41a8aa1f61f684b9b710c4b67d6ff023a7",
@@ -3,7 +3,7 @@
"family": "components.setup-script",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "5cfbce3c7d97d908fbd447646d611e41a8aa1f61f684b9b710c4b67d6ff023a7",
@@ -3,7 +3,7 @@
"family": "components.execution-target-local",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "5cfbce3c7d97d908fbd447646d611e41a8aa1f61f684b9b710c4b67d6ff023a7",
@@ -3,7 +3,7 @@
"family": "components.execution-target",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "5cfbce3c7d97d908fbd447646d611e41a8aa1f61f684b9b710c4b67d6ff023a7",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "session.diff-review",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a8016eb61915cf80a3bdeb622ee67d35be8b4b9862a75e4ef2e8f4ff8e93e7f2",
@@ -3,7 +3,7 @@
"family": "files.terminal-path-tap",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "e20a76ecd5e820dc4797fb25307810af68b5ced996dba2b9599464a21b5cbe1b",
@@ -3,7 +3,7 @@
"family": "files.terminal-path-tap",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "e20a76ecd5e820dc4797fb25307810af68b5ced996dba2b9599464a21b5cbe1b",
@@ -3,7 +3,7 @@
"family": "files.terminal-path-tap",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "e20a76ecd5e820dc4797fb25307810af68b5ced996dba2b9599464a21b5cbe1b",
@@ -3,7 +3,7 @@
"family": "files.terminal-path-tap",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "e20a76ecd5e820dc4797fb25307810af68b5ced996dba2b9599464a21b5cbe1b",
@@ -3,7 +3,7 @@
"family": "files.terminal-path-tap",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "e20a76ecd5e820dc4797fb25307810af68b5ced996dba2b9599464a21b5cbe1b",
@@ -3,7 +3,7 @@
"family": "files.explorer-screen",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "7a42a348f4407b94cf75ac77a4b6b783b7d28103b1ae1d111d2708dab0dd4a0c",
@@ -3,7 +3,7 @@
"family": "files.explorer-screen",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "7a42a348f4407b94cf75ac77a4b6b783b7d28103b1ae1d111d2708dab0dd4a0c",
@@ -3,7 +3,7 @@
"family": "files.mutation-ownership",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.mutation-ownership",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-load",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-artifact-image",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-load",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-load",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-worktree-image",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-load",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-worktree-text",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-load",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-save",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.preview-save",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "files.tab-doc",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "b93fc8b6f1ece041acaa8cc5699852085e67d7e2f39db13145e483f854ea3309",
@@ -3,7 +3,7 @@
"family": "home.host-accounts",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "c632fdbc4b730777ecb09f08bec14cca0586042b01ed99d40d0228806c7def4a",
@@ -3,7 +3,7 @@
"family": "home.host-stats",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a9e0780298a1443664e7ae02056168aa34d67556c9c056d51a82c7b4a73ad35b",
@@ -3,7 +3,7 @@
"family": "host.view-settings",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "a9e0780298a1443664e7ae02056168aa34d67556c9c056d51a82c7b4a73ad35b",
@@ -3,7 +3,7 @@
"family": "host.worktree-actions",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "92c29bd78ca0c0d5917e9386fc447bb9a1698b1d1ffaba0db7546eaac60da639",
@@ -3,7 +3,7 @@
"family": "host.worktree-actions",
"namedDeltas": [],
"runnerVersion": 1,
"baseline": "03995ae29d28dd39bd2546423831987db68985de",
"baseline": "ccdb324b63e4942891942edde1216586a51774bd",
"lockfileSha256": "9317f3a98ab047f9f96fe26fd8531b8a632ac5954064b322f41a904148cbf6bb",
"recorderSha256": "0317fe2aebe4743ce5e7ae194531aa91b4fe0a84df457640851fe6dfdb9362af",
"adapterSha256": "92c29bd78ca0c0d5917e9386fc447bb9a1698b1d1ffaba0db7546eaac60da639",

Some files were not shown because too many files have changed in this diff Show More