Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
65616a8
feat(w2): validate full Qwen3 frontend and runtime contracts
yuki-328 Oct 3, 2026
63fd38b
feat(w3): validate full Qwen3 IR numerics and reproducible CI
yuki-328 Oct 5, 2026
3f486f4
merge: integrate upstream W1 fixes into W3 validation
yuki-328 Oct 5, 2026
b5a4f58
fix(ci): install pinned CPU dependencies for Qwen and W3 tests
yuki-328 Oct 5, 2026
2d07ccc
fix(w2): clean up owned gates on acceptance cancellation
yuki-328 Oct 5, 2026
52337fa
Merge branch 'codex/w2-qwen3-acceptance' into codex/w3-preparation
yuki-328 Oct 5, 2026
1d33dcb
fix(probes): publish W1 evidence safely and align acceptance status
yuki-328 Oct 5, 2026
2e5f9f4
ci(w3): expose opt-in full validation through registered workflow
yuki-328 Oct 5, 2026
ca110be
fix(w3): align CPU arithmetic and handle Linux worker exit sampling
yuki-328 Oct 5, 2026
8132f3c
fix(w3): share exact RoPE parameters between subgraph oracles
yuki-328 Oct 5, 2026
a1e6421
fix(w3): stabilize Haswell FP32 matrix accumulation
yuki-328 Oct 5, 2026
1c49e8a
feat(w3): record loaded NumPy OpenBLAS kernel provenance
yuki-328 Oct 5, 2026
77c3aa8
docs(w3): record complete Linux validation and downloaded evidence audit
yuki-328 Oct 5, 2026
22bd3b5
docs: standardize deployment reproduction on Linux
yuki-328 Oct 6, 2026
a17ba5f
docs: standardize deployment reproduction on Linux
yuki-328 Oct 6, 2026
6326237
docs(w3): deliver Linux-only reproduction guides and source handoff
yuki-328 Oct 6, 2026
f7ebbfa
docs: align shared setup guide with Linux reproduction
yuki-328 Oct 6, 2026
77b9045
docs: align shared setup guide with Linux reproduction
yuki-328 Oct 6, 2026
9397028
feat(reports): add alignment metrics and simplify probe summaries
yuki-328 Oct 8, 2026
f385d42
Merge upstream main and repair architecture shell examples
yuki-328 Oct 8, 2026
8fcc6ea
fix(w2): backport compact probe summaries to acceptance CI
yuki-328 Oct 11, 2026
d31618b
feat(ci): publish compact W3 acceptance summaries
yuki-328 Oct 11, 2026
ffcaaa2
fix(ci): keep W2 report availability explicit on later branches
yuki-328 Oct 11, 2026
44a5702
fix(ci): bound W3 summary size and malformed report handling
yuki-328 Oct 11, 2026
611958d
Merge upstream main to retain two-layer evidence publication fixes
yuki-328 Oct 11, 2026
611417a
docs: disambiguate the kernel architecture guide
yuki-328 Oct 9, 2026
210baa5
docs: disambiguate the kernel architecture guide
yuki-328 Oct 9, 2026
bf9caa1
docs: make architecture command examples valid Bash
yuki-328 Oct 11, 2026
d1e50fd
test(w3): publish worker readiness atomically
yuki-328 Oct 11, 2026
701ac22
ci: consolidate PR validation and summaries into one workflow
yuki-328 Oct 11, 2026
f672b92
ci: consolidate PR validation and summaries into one workflow
yuki-328 Oct 11, 2026
06f427c
Merge upstream main and preserve PR106 W2 summary refinements
yuki-328 Oct 13, 2026
1f6d06d
fix(w2): clarify optimization and execution evidence descriptions
yuki-328 Oct 13, 2026
36db3a4
merge: sync W3 with merged W2 acceptance and summary fixes
yuki-328 Oct 13, 2026
8dd4565
docs(w3): align acceptance records with executed Linux revisions
yuki-328 Oct 13, 2026
3cebd77
test(w3): align summary assertions with shared result wording
yuki-328 Oct 13, 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
13 changes: 13 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,16 @@ jobs:
$PY -m pip install -e ".[all]"
$PY -m pip install "pytest>=7,<10" "PyYAML==6.0.3"

- name: Install pinned CPU dependencies for Qwen and W3 tests
run: |
set -euo pipefail
# The full test suite collects W3 subgraph and workflow tests.
# Install their actual dependencies instead of skipping those tests.
$PY -m pip install "torch==2.7.1" --index-url https://download.pytorch.org/whl/cpu
$PY -m pip install -r requirements/qwen3-small-probe.txt "PyYAML==6.0.3"
$PY -m pip check
$PY -c "import torch, yaml, safetensors; assert torch.__version__ == '2.7.1+cpu' and torch.version.cuda is None, torch.__version__"

# Unconditional: a docs-only change never selects the deployment scope, so
# this check cannot live behind a path filter.
- name: Check public instructions and Bash syntax
Expand Down Expand Up @@ -192,6 +202,9 @@ jobs:
env:
PYTHONHASHSEED: "0"
SCRATCHV_REQUIRE_RISCV_EXECUTION: "1"
OMP_NUM_THREADS: "1"
OPENBLAS_NUM_THREADS: "1"
MKL_NUM_THREADS: "1"
run: |
mkdir -p benchmark_reports
$PY -m pytest tests/ -v --tb=short \
Expand Down
49 changes: 46 additions & 3 deletions .github/workflows/llm-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,21 @@ name: LLM Deploy v1.0
# numeric:ir-qwen3-small frontend:parse-qwen3
# unit:frontend-ops unit:backend-ops unit:runtime integration:runtime-model
#
# Later weeks' gates (numeric:ir-full-qwen3 at W3, numeric:qemu-full-qwen3 at
# W4, e2e:qemu-paris at W5, release:gate at W8) are NOT stubbed here. They get
# added when their week arrives, from the plan's §4.3 table.
# Explicit manual runs can also call the delivered W3 workflows from the same
# commit. The default W1/W2 checks do not imply full-model IR acceptance.

on:
workflow_call:
schedule:
# Nightly, off the hour: 19:23 UTC = 03:23 北京时间.
- cron: '23 19 * * *'
workflow_dispatch:
inputs:
run_w3_validation:
description: Also run complete W3 preparation and seven-case IR validation
type: boolean
required: false
default: false

permissions:
contents: read
Expand All @@ -39,6 +44,11 @@ env:
QWEN3_PY: output/qwen3-probe-venv/bin/python

jobs:
w3-validation:
name: "W3 / explicit full validation"
if: ${{ github.event_name == 'workflow_dispatch' && inputs.run_w3_validation }}
uses: ./.github/workflows/w3-nightly.yml

llm-deploy:
name: "LLM Deploy v1.0 / W1 + W2"
runs-on: ubuntu-24.04
Expand Down Expand Up @@ -85,6 +95,9 @@ jobs:
id: docs
run: python3 scripts/check_llm_deploy_docs.py --week W1

- name: "docs:linux-reproduction"
run: python3 scripts/check_linux_repro_docs.py --check-bash

# ── probe:qemu-matmul ─────────────────────────────────────────────
- name: "probe:qemu-matmul"
id: matmul
Expand Down Expand Up @@ -534,3 +547,33 @@ jobs:
env:
W2_JOB_RESULTS: ${{ toJSON(needs) }}
run: python3 scripts/check_w2_ci_results.py

w3-execution-summary:
name: "W3 / execution scope"
needs: [w3-validation]
if: always()
runs-on: ubuntu-24.04
timeout-minutes: 5
steps:
- name: State whether W3 actually ran
env:
W3_RESULT: ${{ needs.w3-validation.result }}
run: |
python3 - <<'PY'
import os
result = os.environ.get("W3_RESULT", "")
labels = {"success": "PASS", "failure": "FAIL", "cancelled": "CANCELLED", "skipped": "NOT RUN"}
label = labels.get(result, "UNCONFIRMED")
with open(os.environ["GITHUB_STEP_SUMMARY"], "a", encoding="utf-8") as stream:
stream.write("## W3 execution scope\n\n")
stream.write(f"**{label}** — W3 preparation and full 28-layer IR numeric.\n\n")
if result == "skipped":
stream.write("W3 is opt-in and is not executed by default on pull requests. W1/W2 success is not W3 acceptance.\n\n")
elif result == "success":
stream.write("See the W3 preparation and W3 complete IR numeric summaries in this run for numerical data.\n\n")
else:
stream.write("No W3 acceptance claimed; inspect the called jobs and any partial evidence.\n\n")
stream.write("<details><summary>Scope and evidence</summary>\n\nManual LLM Deploy runs can enable `run_w3_validation`. "
"Numerical reports are retained in `w3-preparation-reports` and `w3-full-numeric-reports` when generated. "
"Full-model QEMU is a separate W4 gate; independent reproduction and team sign-off remain separate.\n\n</details>\n")
PY
146 changes: 146 additions & 0 deletions .github/workflows/w3-full-numeric.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: W3 full IR numeric
on:
workflow_dispatch:
inputs:
case:
description: Full suite or one-case diagnostic (subset returns PARTIAL if numerically correct)
type: choice
default: all
options:
- all
- short_17
workflow_call:
inputs:
case:
description: Full suite or short_17 diagnostic; partial coverage never passes acceptance
type: string
required: false
default: all
permissions:
contents: read
concurrency:
group: w3-full-numeric-${{ github.ref }}
cancel-in-progress: false
jobs:
full-numeric:
runs-on: ubuntu-24.04
timeout-minutes: 60
env:
OMP_NUM_THREADS: "1"
OPENBLAS_NUM_THREADS: "1"
MKL_NUM_THREADS: "1"
PYTHONIOENCODING: utf-8
SELECTED_CASE: ${{ inputs.case || 'all' }}
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065
with:
python-version: "3.12"
- name: Validate requested coverage
run: |
set -euo pipefail
case "${SELECTED_CASE:-all}" in
all|short_17) ;;
*) printf 'Unsupported case: %s\n' "$SELECTED_CASE" >&2; exit 1 ;;
esac
- name: Record Linux runner resources
run: |
set -euo pipefail
mkdir -p output
{
printf 'commit=%s\nrun_id=%s\nattempt=%s\n' "$GITHUB_SHA" "$GITHUB_RUN_ID" "$GITHUB_RUN_ATTEMPT"
cat /etc/os-release
uname -a
lscpu
free -b
df -B1 .
} | tee output/w3-runner-resources.txt
- name: Install fixed CPU environment
run: |
set -euo pipefail
python -m pip install torch==2.7.1 --index-url https://download.pytorch.org/whl/cpu
python -m pip install -r requirements/qwen3-small-probe.txt PyYAML==6.0.3
python -m pip install -e .
python -m pip check
python -m pip freeze > output/w3-dependencies.txt
python --version >> output/w3-runner-resources.txt
- name: Full runner and memory policy regressions
run: |
set -euo pipefail
mkdir -p output
python -B -X utf8 -m pytest tests/test_w3_full*.py tests/test_w3_actions_summary.py tests/test_w3_workflows.py tests/test_ir_interpreter*.py tests/test_onnx_initializers.py -q -p no:cacheprovider --basetemp output/pytest-w3-full --junitxml output/w3-full-tests.xml
- name: Download fixed ONNX assets
run: |
python - <<'PY'
from pathlib import Path
from probes.w1_qwen3_export.run import acquire_model
acquire_model(Path("output/assets/onnx"))
PY
- name: Compare complete IR and ORT outputs
id: probe
run: |
set -euo pipefail
args=()
SELECTED_CASE="${SELECTED_CASE:-all}"
if [[ "$SELECTED_CASE" != "all" ]]; then args=(--case "$SELECTED_CASE"); fi
python -B -X utf8 probes/w3_qwen3_full/run.py --model-dir output/assets/onnx --output-dir output/w3-full --worker-timeout 1800 --max-worker-memory-gib 8 --fp32-mode reference "${args[@]}"
- name: Summarize W3 full numerical evidence
if: always()
env:
PROBE_OUTCOME: ${{ steps.probe.outcome }}
run: python -B -X utf8 scripts/summarize_w3_ci.py --kind full --report-dir output/w3-full
- name: Record evidence retention scope
if: always()
run: |
mkdir -p output
cat > output/w3-full-evidence-retention.json <<'JSON'
{
"reports_retention_days": 30,
"raw_evidence_retention_days": 3,
"reports_scope": "Reports, hashes and schemas record the original run's checks; reports alone cannot independently revalidate the numerical results.",
"independent_revalidation": "Download w3-full-numeric-raw before expiry to retain the complete emitted inputs, logits, diagnostic logits and checkpoints together with reports. Failed or interrupted runs may contain incomplete evidence."
}
JSON
- name: Upload numerical reports (30 days)
if: always()
uses: actions/upload-artifact@v4
with:
name: w3-full-numeric-reports
if-no-files-found: warn
retention-days: 30
path: |
output/w3-runner-resources.txt
output/w3-dependencies.txt
output/w3-full-tests.xml
output/w3-full-evidence-retention.json
output/w3-full/**/report.json
output/w3-full/**/report.md
output/w3-full/**/report.html
output/w3-full/**/progress.json
output/w3-full/**/*.log
output/w3-full/**/checkpoint_schema.json
- name: Upload full raw numerical evidence (3 days)
if: always()
uses: actions/upload-artifact@v4
with:
name: w3-full-numeric-raw
if-no-files-found: warn
retention-days: 3
compression-level: 1
path: |
output/w3-runner-resources.txt
output/w3-dependencies.txt
output/w3-full-tests.xml
output/w3-full-evidence-retention.json
output/w3-full/**/report.json
output/w3-full/**/report.md
output/w3-full/**/report.html
output/w3-full/**/progress.json
output/w3-full/**/*.log
output/w3-full/**/inputs.npz
output/w3-full/**/checkpoint_schema.json
output/w3-full/**/checkpoints.npz
output/w3-full/**/logits.npy
output/w3-full/**/diagnostic_logits.npy
43 changes: 43 additions & 0 deletions .github/workflows/w3-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: W3 nightly
on:
workflow_dispatch:
workflow_call:
schedule:
# 03:23 Asia/Shanghai. Jobs stay disabled until the repository opts in.
- cron: '23 19 * * *'
permissions:
contents: read
concurrency:
group: w3-nightly-${{ github.ref }}
cancel-in-progress: false
jobs:
preparation:
if: ${{ github.event_name == 'workflow_dispatch' || vars.W3_NIGHTLY_ENABLED == 'true' }}
uses: ./.github/workflows/w3-preparation.yml
full-numeric:
if: ${{ github.event_name == 'workflow_dispatch' || vars.W3_NIGHTLY_ENABLED == 'true' }}
uses: ./.github/workflows/w3-full-numeric.yml
with:
case: all
acceptance:
if: ${{ always() && (github.event_name == 'workflow_dispatch' || vars.W3_NIGHTLY_ENABLED == 'true') }}
needs: [preparation, full-numeric]
runs-on: ubuntu-24.04
timeout-minutes: 5
env:
PREPARATION_RESULT: ${{ needs.preparation.result }}
FULL_NUMERIC_RESULT: ${{ needs.full-numeric.result }}
steps:
- name: Require both complete gates
run: |
set -euo pipefail
{
printf '## W3 automated gates\n\n'
printf 'Commit: `%s`\n\n' "$GITHUB_SHA"
printf '| Gate | Result |\n| --- | --- |\n'
printf '| Preparation | %s |\n' "$PREPARATION_RESULT"
printf '| Complete seven-case Qwen3 IR numeric | %s |\n\n' "$FULL_NUMERIC_RESULT"
printf 'Only two successful gates pass this run. This does not approve the W3 team milestone or replace independent reproduction.\n'
} >> "$GITHUB_STEP_SUMMARY"
test "$PREPARATION_RESULT" = success
test "$FULL_NUMERIC_RESULT" = success
Loading
Loading