Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
1140dad
Fix ARM-compatible controller and Pluto setup for 1.0.3
Azzaare Oct 14, 2026
ad271c3
Freeze the immutable 1.0.3 qualification origin
Azzaare Oct 14, 2026
1059d17
Bind controller readiness to its process inventory snapshot
Azzaare Oct 14, 2026
e782a33
Qualify native discovery before partitioned Intel workflows
Azzaare Oct 14, 2026
adebd5e
Isolate HTTP Git authentication fixture from runner helpers
Azzaare Oct 14, 2026
09439a0
Wait for owned Windows MCP fixture readiness before cleanup RPCs
Azzaare Oct 14, 2026
b96d58a
Retain bounded native operation progress without changing test oracles
Azzaare Oct 14, 2026
e485b5a
Observe sacrificial CLI entry without changing preflight deadlines
Azzaare Oct 14, 2026
7937002
Coalesce native test item discovery and reject stale results
Azzaare Oct 14, 2026
a6e9a40
Freeze discovery candidate origin for native qualification
Azzaare Oct 14, 2026
73b99de
Clarify ARM-compatible Core requirements for 1.0.3
Azzaare Oct 14, 2026
d2823eb
Freeze the corrected 1.0.3 README candidate origin
Azzaare Oct 14, 2026
fd2e61d
Sustain target workload inside fresh profiling fixture
Azzaare Oct 15, 2026
5e8d6ad
Wait for exact saved measurement before native narrative actions
Azzaare Oct 15, 2026
78976f5
Observe native test item discovery without changing its oracle
Azzaare Oct 15, 2026
aa36296
Split full native qualification by named functional group
Azzaare Oct 15, 2026
131430d
Allow one hour for native qualification readiness
Azzaare Oct 15, 2026
b3ba1b7
Capture idle baseline from the snapshot that proved idle
Copilot Oct 15, 2026
ee886e0
Retry Feature suite selection in fresh Pluto install test instead of …
Copilot Oct 15, 2026
15a1a7c
Keep explicit test discovery current and freeze the qualified 1.0.3 a…
Azzaare Oct 15, 2026
9622654
Resolve absent unqualified Linux images within their survey
Azzaare Oct 15, 2026
0649f92
Keep the native wait-task wall profile in one continuous window
Azzaare Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
- uses: actions/checkout@v7
with:
repository: Mirage-Interactive-Fr/PerfChecker.jl
ref: 00e94c62a2080dba02782e451422ed98ea0b358a
ref: d079efd5c24c3dcac5b7550781822038e0ff780f
path: validation-core
persist-credentials: false
- uses: actions/setup-node@v7
Expand All @@ -53,7 +53,7 @@ jobs:
- run: npm run compile
- name: Verify the pinned Core candidate tree
shell: bash
run: test "$(git -C validation-core rev-parse HEAD^{tree})" = "2563a09e7904f19592e8f658289566e76bf93c6c"
run: test "$(git -C validation-core rev-parse HEAD^{tree})" = "749f8eac351ed2a1f0bc110456f2eb37a3bc08ee"
- name: Prepare exact Core candidate controller source
shell: bash
run: julia --startup-file=no -e 'using Pkg; Pkg.activate(ENV["PERFCHECKER_TEST_CONTROLLER"]); Pkg.develop(path=ENV["PERFCHECKER_TEST_CORE"]); Pkg.instantiate()'
Expand Down
81 changes: 66 additions & 15 deletions .github/workflows/native-vsix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ on:
scope:
description: All supported hosts, or an explicit focused platform
type: choice
options: [all, linux, linux-stable, windows, windows-stable, macos-stable]
options: [all, linux, linux-stable, windows, windows-stable, macos-stable, arm-bootstrap]
default: all
core:
description: Published General minimum, explicit legacy compatibility, or a pinned candidate
Expand All @@ -48,6 +48,10 @@ on:
candidate_sha:
description: Full SHA256 of the original candidate (never repackage when supplied)
type: string
discovery_diagnostic:
description: Nonqualifying Intel discovery observation with the exact full prelude and unchanged 120-second UI oracle
type: boolean
default: false
new_candidate_origin:
description: Explicitly declare a new candidate origin after product changes; otherwise reuse the frozen release archive
type: boolean
Expand Down Expand Up @@ -146,32 +150,69 @@ jobs:
runs-on: ubuntu-latest
outputs:
sha: ${{ steps.digest.outputs.sha }}
matrix: ${{ steps.matrix.outputs.matrix }}
env:
NATIVE_EVENT: ${{ github.event_name }}
NATIVE_DISCOVERY_DIAGNOSTIC: ${{ inputs.discovery_diagnostic || 'false' }}
NATIVE_BACKEND_JULIA: ${{ inputs.backend_julia }}
NATIVE_CORE_COMMIT: ${{ inputs.core_commit }}
NATIVE_CORE_TREE: ${{ inputs.core_tree }}
NATIVE_VSIX_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.artifact || 'candidate' }}
NATIVE_NEW_ORIGIN: ${{ inputs.new_candidate_origin || 'false' }}
NATIVE_SCOPE: ${{ inputs.scope }}
NATIVE_STAGE: ${{ inputs.stage }}
NATIVE_CASE_GROUP: ${{ inputs.case_group }}
NATIVE_CORE: ${{ inputs.core }}
REUSE_RUN: ${{ inputs.candidate_run }}
REUSE_NAME: ${{ inputs.candidate_name }}
REUSE_SHA: ${{ inputs.candidate_sha }}
steps:
- uses: actions/checkout@v7
- name: Select native functions and supported host configurations
id: matrix
run: |
node --input-type=module <<'NODE'
import fs from 'node:fs';
import {nativeWorkflowMatrix} from './test/native-platform-contract.mjs';
const e=process.env;
const matrix=nativeWorkflowMatrix({event:e.NATIVE_EVENT,scope:e.NATIVE_SCOPE||'all',
artifact:e.NATIVE_VSIX_MODE,stage:e.NATIVE_STAGE||'full',group:e.NATIVE_CASE_GROUP||'narrative',
core:e.NATIVE_CORE||'candidate',discoveryDiagnostic:e.NATIVE_DISCOVERY_DIAGNOSTIC==='true'});
fs.appendFileSync(process.env.GITHUB_OUTPUT,'matrix='+JSON.stringify(matrix)+'\n');
NODE
- name: Select the declared archive origin for qualification
run: |
node <<'NODE'
const fs=require('fs'),e=process.env;
node --input-type=module <<'NODE'
import fs from 'node:fs';
import {assertNativeCampaignSelection} from './test/native-platform-contract.mjs';
import {assertNativeDiscoveryDiagnostic} from './test/native-controller-preflight.mjs';
const e=process.env;
assertNativeCampaignSelection({scope:e.NATIVE_SCOPE,event:e.NATIVE_EVENT,artifact:e.NATIVE_VSIX_MODE,
stage:e.NATIVE_STAGE,group:e.NATIVE_CASE_GROUP,core:e.NATIVE_CORE});
const requested=[e.REUSE_RUN,e.REUSE_NAME,e.REUSE_SHA].some(Boolean),newOrigin=e.NATIVE_NEW_ORIGIN==='true';
if(e.NATIVE_DISCOVERY_DIAGNOSTIC==='true')throw Error('Historical discovery diagnostics must use their original branch and explicit oracle contract; this source qualifies the one-hour campaign');
assertNativeDiscoveryDiagnostic({enabled:e.NATIVE_DISCOVERY_DIAGNOSTIC==='true',event:e.NATIVE_EVENT,
artifact:e.NATIVE_VSIX_MODE,stage:e.NATIVE_STAGE,scope:e.NATIVE_SCOPE,core:e.NATIVE_CORE,partition:'measure',
backendJulia:e.NATIVE_BACKEND_JULIA,originRun:e.REUSE_RUN,originName:e.REUSE_NAME,originSha:e.REUSE_SHA,
coreCommit:e.NATIVE_CORE_COMMIT,coreTree:e.NATIVE_CORE_TREE,newOrigin});
if(e.NATIVE_SCOPE==='arm-bootstrap'&&(!requested||newOrigin))throw Error('ARM bootstrap must reuse the original candidate archive; it never packages a second origin.');
if(e.NATIVE_VSIX_MODE==='public'){
if(requested||newOrigin)throw Error('Public reproduction uses its published release, not candidate-origin inputs');
process.exit(0);
}
if(newOrigin&&(e.NATIVE_EVENT!=='workflow_dispatch'||requested))throw Error('A new candidate origin requires an explicit manual run without archive-reuse inputs');
const version=JSON.parse(fs.readFileSync('package.json')).version;
if(version!=='1.0.2'&&!requested&&!newOrigin)throw Error('A new extension version requires an explicit candidate origin before archive reuse can be frozen.');
if(!['1.0.2','1.0.3'].includes(version)&&!requested&&!newOrigin)throw Error('A new extension version requires an explicit candidate origin before archive reuse can be frozen.');
if(version==='1.0.2'&&!requested&&!newOrigin){
// Product commit df3085c9ccd92014586cd2b718ced606c0b912b7, tree cb36c394f91834a61fd58b6fe6a54cdc54f15fc2.
fs.appendFileSync(e.GITHUB_ENV,'REUSE_RUN=38109028537\nREUSE_NAME=native-candidate-df3085c9ccd92014586cd2b718ced606c0b912b7\nREUSE_SHA=5fe530420b0ef8c7b8c0bdf19bc6223a6bdfd10ea6db9396b9f3f6d10d537f13\n');
console.log('Release 1.0.2 qualification reuses the frozen archive; product changes require a declared new qualification origin.');
}
if(version==='1.0.3'&&!requested&&!newOrigin){
// Product commit 4a27ae0d76a297c58d141c8396808e5d86e61ef3, tree a20c19dc66670bf39bb3e203ede0081f6048ddcf.
fs.appendFileSync(e.GITHUB_ENV,'REUSE_RUN=38769699307\nREUSE_NAME=native-candidate-4a27ae0d76a297c58d141c8396808e5d86e61ef3\nREUSE_SHA=416ea51fa31471545b022ca37f7ab30901a2e36b871ba230b54bbeadb97943ec\n');
console.log('Release 1.0.3 qualification reuses the frozen archive; product changes require a declared new qualification origin.');
}
NODE
- name: Validate optional exact-archive reuse
if: env.NATIVE_VSIX_MODE != 'public'
Expand Down Expand Up @@ -229,22 +270,28 @@ jobs:
native-workflows:
if: github.event_name != 'workflow_dispatch' || inputs.stage != 'connector-workers'
needs: package
name: Native VSIX (${{ matrix.os }}, VS Code ${{ matrix.vscode }})
name: ${{ matrix.name }}
strategy:
fail-fast: false
matrix:
include: ${{ fromJSON(github.event_name == 'workflow_dispatch' && inputs.scope == 'macos-stable' && '[{"os":"macos-15-intel","vscode":"stable"}]' || github.event_name == 'workflow_dispatch' && inputs.scope == 'windows-stable' && '[{"os":"windows-latest","vscode":"stable"}]' || github.event_name == 'workflow_dispatch' && inputs.scope == 'windows' && '[{"os":"windows-latest","vscode":"1.96.0"},{"os":"windows-latest","vscode":"stable"}]' || github.event_name == 'workflow_dispatch' && inputs.scope == 'linux-stable' && '[{"os":"ubuntu-latest","vscode":"stable"}]' || github.event_name == 'workflow_dispatch' && inputs.scope == 'linux' && '[{"os":"ubuntu-latest","vscode":"1.96.0"},{"os":"ubuntu-latest","vscode":"stable"}]' || '[{"os":"ubuntu-latest","vscode":"1.96.0"},{"os":"ubuntu-latest","vscode":"stable"},{"os":"windows-latest","vscode":"1.96.0"},{"os":"windows-latest","vscode":"stable"},{"os":"macos-15-intel","vscode":"stable"}]') }}
include: ${{ fromJSON(needs.package.outputs.matrix) }}
runs-on: ${{ matrix.os }}
timeout-minutes: ${{ (github.event_name != 'workflow_dispatch' || inputs.stage == 'full') && 180 || 150 }}
timeout-minutes: 360
env:
PERFCHECKER_NATIVE_DISCOVERY_DIAGNOSTIC: ${{ inputs.discovery_diagnostic && '1' || '0' }}
PERFCHECKER_NATIVE_EVENT: ${{ github.event_name }}
PERFCHECKER_NATIVE_BACKEND_JULIA: ${{ inputs.backend_julia }}
PERFCHECKER_VSCODE_VERSION: ${{ matrix.vscode }}
PERFCHECKER_VSIX_MODE: ${{ github.event_name == 'workflow_dispatch' && inputs.artifact || 'candidate' }}
PERFCHECKER_NATIVE_CANDIDATE_SHA: ${{ needs.package.outputs.sha }}
PERFCHECKER_NATIVE_STAGE: ${{ github.event_name == 'workflow_dispatch' && inputs.stage || 'full' }}
PERFCHECKER_NATIVE_CASE_GROUP: ${{ inputs.case_group }}
PERFCHECKER_NATIVE_SCOPE: ${{ github.event_name == 'workflow_dispatch' && inputs.scope || 'all' }}
PERFCHECKER_NATIVE_FULL_PARTITION: ${{ matrix.partition || 'all' }}
PERFCHECKER_NATIVE_EXPECTED_ARCH: ${{ matrix.arch || 'x64' }}
PERFCHECKER_NATIVE_CORE: ${{ github.event_name == 'workflow_dispatch' && inputs.core || 'candidate' }}
PERFCHECKER_NATIVE_CORE_COMMIT: ${{ (github.event_name != 'workflow_dispatch' || inputs.core == 'candidate') && (inputs.core_commit || '00e94c62a2080dba02782e451422ed98ea0b358a') || '' }}
PERFCHECKER_NATIVE_CORE_TREE: ${{ (github.event_name != 'workflow_dispatch' || inputs.core == 'candidate') && (inputs.core_tree || '2563a09e7904f19592e8f658289566e76bf93c6c') || '' }}
PERFCHECKER_NATIVE_CORE_COMMIT: ${{ (github.event_name != 'workflow_dispatch' || inputs.core == 'candidate') && (inputs.core_commit || 'd079efd5c24c3dcac5b7550781822038e0ff780f') || '' }}
PERFCHECKER_NATIVE_CORE_TREE: ${{ (github.event_name != 'workflow_dispatch' || inputs.core == 'candidate') && (inputs.core_tree || '749f8eac351ed2a1f0bc110456f2eb37a3bc08ee') || '' }}
PERFCHECKER_NATIVE_VIDEO: ${{ matrix.os == 'ubuntu-latest' && matrix.vscode == 'stable' && '1' || '0' }}
PERFCHECKER_TEST_JULIA: julia
JULIA_NUM_THREADS: '1'
Expand All @@ -254,21 +301,25 @@ jobs:
JULIA_PKG_PRECOMPILE_AUTO: '0'
PERFCHECKER_UUID: 00000000-0000-4000-8000-000000000001
steps:
- name: Start the shared native activity budget (330 minutes plus 30 minutes technical reserve)
shell: bash
run: echo "PERFCHECKER_NATIVE_ACTIVITY_STARTED_AT=$(( $(date +%s) * 1000 ))" >> "$GITHUB_ENV"
- uses: actions/checkout@v7
- uses: actions/setup-node@v7
with:
node-version: 22
architecture: ${{ matrix.arch || 'x64' }}
cache: npm
- uses: julia-actions/setup-julia@v3
id: runner-julia
with:
version: ${{ github.event_name == 'workflow_dispatch' && inputs.backend_julia || '1' }}
arch: x64
version: ${{ matrix.julia || (github.event_name == 'workflow_dispatch' && inputs.backend_julia || '1') }}
arch: ${{ matrix.arch == 'arm64' && 'aarch64' || 'x64' }}
- uses: julia-actions/setup-julia@v3
id: official-julia
with:
version: '1.12'
arch: x64
arch: ${{ matrix.arch == 'arm64' && 'aarch64' || 'x64' }}
- name: Preserve separate runtimes for PerfChecker and official Julia integration
env:
RUNNER_JULIA_BINDIR: ${{ steps.runner-julia.outputs.julia-bindir }}
Expand All @@ -287,7 +338,7 @@ jobs:
run: npx playwright install chromium
- name: Install screen capture tooling in the disposable Linux stable host
if: runner.os == 'Linux' && env.PERFCHECKER_NATIVE_VIDEO == '1'
timeout-minutes: 15
timeout-minutes: 60
run: |
if ! command -v ffmpeg >/dev/null 2>&1; then
sudo apt-get update
Expand All @@ -296,7 +347,7 @@ jobs:
ffmpeg -version
- name: Install native colour-picker tools in the disposable Linux host
if: runner.os == 'Linux' && env.PERFCHECKER_NATIVE_STAGE == 'focused' && env.PERFCHECKER_NATIVE_CASE_GROUP == 'studio-color'
timeout-minutes: 15
timeout-minutes: 60
run: |
if ! command -v xdotool >/dev/null 2>&1 || ! command -v xwd >/dev/null 2>&1 || ! command -v xwininfo >/dev/null 2>&1 || ! command -v convert >/dev/null 2>&1; then
sudo apt-get update
Expand All @@ -315,5 +366,5 @@ jobs:
- uses: actions/upload-artifact@v7
if: always()
with:
name: native-workflows-${{ matrix.os }}-${{ matrix.vscode }}
name: ${{ matrix.artifactName }}
path: native-qualification-results/
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Changelog

## 1.0.3 — ARM-compatible setup

- Install PerfChecker.jl 1.1.1 or newer in the 1.x series when creating a controller
or installing/upgrading the separate Pluto environment. This excludes Core
1.1.0's ARM import failure while allowing compatible updates.
- Resolve Core and the requested packages together before precompilation, then
verify the installed Core version. Existing prepared environments still accept
Core 1.1.0 in 1.x; installation and upgrades require an explicit choice.
- Share simultaneous test-item discovery requests and prevent outdated results
from replacing the current workspace selection.

## 1.0.2 — Narrow chat and process lifecycle fixes

- Keep MCP chat controls usable in narrow VS Code editor panels with the host's
Expand Down
Loading
Loading