Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
6b909bc
Add agent scope observation and advice
Jul 28, 2026
54ebfc4
Address agent scope observation review
Jul 30, 2026
268269f
fix(scope): keep MCP observation read-only and gate waveform reads
Sep 28, 2026
e212170
docs: document read-only MCP tools and scope observe side effects
Sep 28, 2026
aa9cdce
docs: add advisor plugin category RFC (Draft)
Sep 28, 2026
416b28b
fix(scope): validate advice and preserve incomplete acceptance
Oct 5, 2026
aba6f3f
docs(advisor): define execution consent and audit contracts
Oct 5, 2026
17c0de8
Merge pull request #4 from Epslion404/split/agent-scope-observe-advise
Scaxlibur Oct 5, 2026
902a178
Merge pull request #20 from Epslion404/docs/advisor-plugin-rfc
Scaxlibur Oct 5, 2026
97a8a3e
docs: define advisor run snapshot authorization binding
Scaxlibur Oct 5, 2026
4b8d5c4
docs: cover Jev question types and confidence boundaries
Scaxlibur Oct 5, 2026
f778dde
feat: add bounded advisor run snapshot binding
Scaxlibur Oct 5, 2026
54a9630
docs: fix advisor RFC typography
Scaxlibur Oct 5, 2026
a1a049f
test: make run binding mutation timing deterministic
Scaxlibur Oct 5, 2026
f3a7938
Merge pull request #29 from Scaxlibur/Scaxlibur/advisor-run-binding
Scaxlibur Oct 5, 2026
ce499ba
docs(advisor): limit consent reuse and define state provenance
Oct 5, 2026
6337021
fix(scope): hold observation leases and fail closed before capture
Oct 5, 2026
139c18d
Merge pull request #30 from Epslion404/docs/advisor-contract-refinement
Scaxlibur Oct 10, 2026
a014893
Merge pull request #31 from Epslion404/fix/scope-observation-contracts
Scaxlibur Oct 10, 2026
60934c0
test: remove redundant checks and share source fixtures
Scaxlibur Oct 11, 2026
ba140db
build: lock development dependencies with uv
Scaxlibur Oct 11, 2026
8dd0051
feat: use uv for managed plugin installation and builds
Scaxlibur Oct 11, 2026
3506fe0
ci: run checks in locked uv environments
Scaxlibur Oct 11, 2026
47f8e24
fix: preserve rollback across pip and uv installer records
Scaxlibur Oct 11, 2026
fa3ec06
docs: describe uv development and dedicated runtime environments
Scaxlibur Oct 11, 2026
bdd6e04
docs: complete uv installation and migration guidance
Scaxlibur Oct 11, 2026
1c6cf91
ci: use published setup-uv release tag
Scaxlibur Oct 11, 2026
a8122fb
Merge pull request #32 from Scaxlibur/Scaxlibur/uv-migration
Scaxlibur Oct 11, 2026
d30778d
release: prepare 0.8.28 with verified distribution gates
Scaxlibur Oct 26, 2026
a646e0a
fix(ci): enable UTF-8 for isolated Windows wheel smoke
Scaxlibur Oct 26, 2026
18d3470
Merge pull request #33 from Scaxlibur/Scaxlibur/release-0.8.28
Scaxlibur Oct 26, 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 .agents/skills/wavebench/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,12 @@ Reference 只从本入口直接链接,保持一层目录;详细命令和型
按阶段选择预检,不把以下命令作为每个任务的固定清单:

```bash
.venv/bin/python -m pip check
uv pip check --python .venv
.venv/bin/wavebench run check --plan plans/<plan>.toml --config wavebench.toml
.venv/bin/wavebench run verify --plan plans/<plan>.toml --config wavebench.toml
```

`pip check` 用于依赖变化或环境诊断;`run check` 是离线检查;`run verify` 会连接仪器,只有已授权实时预检时执行。
`uv pip check` 用于依赖变化或环境诊断;`run check` 是离线检查;`run verify` 会连接仪器,只有已授权实时预检时执行。
已授权执行的真实计划遵循 `run check → run verify → run plan → run report`,并同时检查步骤状态、质量门、期望指标、产物和最终设备状态。仅检查计划的请求到离线检查结果即完成。TUI 界面开发使用 `tui --fake`。

## External research
Expand Down
5 changes: 5 additions & 0 deletions .agents/skills/wavebench/references/development-validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@

## 验证分层

Core 新开发环境使用 `uv sync --locked --extra dev --extra analysis --extra tui`。
按任务增加 `--extra pdf`、`--extra report3d` 或 `--extra docs`。
已有仪器插件的环境不执行默认精确同步;优先新建隔离环境,或显式使用 `--inexact` 后核对插件状态。
准备完成后可用 `uv run --no-sync` 执行命令,避免验证期间变更依赖。

按风险选择最窄的验证集合:

以下命令以 POSIX 虚拟环境路径为例;原生 Windows 将 `.venv/bin/python` 替换为
Expand Down
4 changes: 4 additions & 0 deletions .agents/skills/wavebench/references/plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@

## 安装边界

安装、卸载和源码构建要求 PATH 中可用的 uv,目标虚拟环境不需要 pip。
实际仪器环境与开发环境分开;不对装有受管插件的环境运行默认 `uv sync`,以免移除 Core 锁文件未声明的插件。
混合开发环境显式使用 `--inexact`,随后检查依赖和受管插件状态。

只安装用户明确授权的可信本地目录或 wheel:

```bash
Expand Down
109 changes: 87 additions & 22 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ name: CI

on:
push:
branches: [master, main]
branches: [master, main, Dev]
pull_request:
workflow_call:

permissions:
contents: read

jobs:
test:
Expand All @@ -24,30 +28,33 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip

- name: Install uv
uses: astral-sh/setup-uv@v9.0.0
with:
version: "0.12.15"
enable-cache: true

- name: Install package and test dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev,analysis,pdf]"
run: uv sync --locked --python "${{ matrix.python-version }}" --extra dev --extra analysis --extra pdf

- name: Run Ruff
run: python -m ruff check .
run: uv run --no-sync python -m ruff check .

- name: Audit documentation
if: matrix.python-version == '3.11'
run: python .agents/skills/wavebench-docs/scripts/audit_docs.py --quiet-warnings
run: uv run --no-sync python .agents/skills/wavebench-docs/scripts/audit_docs.py --quiet-warnings

- name: Check generated Reference
if: matrix.python-version == '3.11'
run: python scripts/generate_docs.py --check
run: uv run --no-sync python scripts/generate_docs.py --check

- name: Report documentation impact
if: matrix.python-version == '3.11'
run: python scripts/docs_impact.py
run: uv run --no-sync python scripts/docs_impact.py

- name: Run unit tests
run: python -m pytest -q
run: uv run --no-sync python -m pytest -q

test-windows:
name: Windows Python ${{ matrix.python-version }} tests
Expand All @@ -67,25 +74,83 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip

- name: Install uv
uses: astral-sh/setup-uv@v9.0.0
with:
version: "0.12.15"
enable-cache: true

- name: Install package and Windows test dependencies
shell: pwsh
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev,analysis,tui]"
python -m pip check
run: uv sync --locked --python "${{ matrix.python-version }}" --extra dev --extra analysis --extra tui

- name: Check dependencies
run: uv pip check --python .venv

- name: Run Ruff
run: python -m ruff check .
run: uv run --no-sync python -m ruff check .

- name: Run unit tests
run: python -m pytest -q
run: uv run --no-sync python -m pytest -q

- name: Run offline CLI smoke tests
shell: pwsh
run: |
python -m wavebench --help
python -m wavebench run schema | Out-Null
python -m wavebench run template --list
python -m wavebench lock status TCPIP::192.0.2.10::INSTR
uv run --no-sync python -m wavebench --help
uv run --no-sync python -m wavebench run schema | Out-Null
uv run --no-sync python -m wavebench run template --list
uv run --no-sync python -m wavebench lock status TCPIP::192.0.2.10::INSTR

build:
name: Build distributions
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- uses: astral-sh/setup-uv@v9.0.0
with:
version: "0.12.15"
- name: Build sdist and wheel from sdist
run: uv build --no-sources --out-dir "${{ runner.temp }}/distributions"
- name: Check release identity and notes
shell: bash
run: |
args=()
if [[ "$GITHUB_REF_TYPE" == tag ]]; then args=(--tag "$GITHUB_REF_NAME"); fi
python scripts/check_release.py --artifacts "${{ runner.temp }}/distributions" "${args[@]}"
- uses: actions/upload-artifact@v4
with:
name: distributions
path: ${{ runner.temp }}/distributions/*
if-no-files-found: error

wheel-smoke:
name: Wheel ${{ matrix.os }} Python ${{ matrix.python-version }}
needs: build
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
python-version: ["3.11", "3.12"]
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- uses: astral-sh/setup-uv@v9.0.0
with:
version: "0.12.15"
- uses: actions/download-artifact@v4
with:
name: distributions
path: ${{ runner.temp }}/distributions
- name: Install and exercise wheel outside the checkout
run: |
version=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
python scripts/smoke_wheel.py --artifacts "${{ runner.temp }}/distributions" --version "$version"
33 changes: 24 additions & 9 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Documentation

on:
push:
branches: [master, main]
branches: [master, main, Dev]
paths:
- ".agents/skills/wavebench-docs/**"
- ".github/workflows/docs.yml"
Expand All @@ -12,6 +12,7 @@ on:
- "mkdocs.yml"
- "plans/**"
- "pyproject.toml"
- "uv.lock"
- "scripts/docs_impact.py"
- "scripts/generate_docs.py"
- "src/wavebench/**"
Expand All @@ -26,11 +27,16 @@ on:
- "mkdocs.yml"
- "plans/**"
- "pyproject.toml"
- "uv.lock"
- "scripts/docs_impact.py"
- "scripts/generate_docs.py"
- "src/wavebench/**"
- "wavebench.example.toml"
workflow_dispatch:
workflow_call:

permissions:
contents: read

jobs:
build:
Expand All @@ -46,21 +52,30 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip

- name: Install uv
uses: astral-sh/setup-uv@v9.0.0
with:
version: "0.12.15"
enable-cache: true

- name: Install documentation dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -e ".[dev,docs]"
run: uv sync --locked --python 3.11 --extra dev --extra docs

- name: Check generated Reference
run: python scripts/generate_docs.py --check
run: uv run --no-sync python scripts/generate_docs.py --check

- name: Audit documentation
run: python .agents/skills/wavebench-docs/scripts/audit_docs.py --quiet-warnings
run: uv run --no-sync python .agents/skills/wavebench-docs/scripts/audit_docs.py --quiet-warnings

- name: Build site
run: mkdocs build --strict
run: uv run --no-sync mkdocs build --strict

- name: Report documentation impact
run: python scripts/docs_impact.py
run: uv run --no-sync python scripts/docs_impact.py

- uses: actions/upload-artifact@v4
with:
name: documentation-site
path: site/
if-no-files-found: error
34 changes: 34 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Release candidate

on:
push:
tags: ["v*"]

permissions:
contents: read

jobs:
ci:
uses: ./.github/workflows/ci.yml
docs:
uses: ./.github/workflows/docs.yml
draft:
name: Draft verified release
needs: [ci, docs]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: distributions
path: distributions
- name: Create draft with verified assets
env:
GH_TOKEN: ${{ github.token }}
RELEASE_TAG: ${{ github.ref_name }}
run: |
gh release create "$RELEASE_TAG" distributions/* \
--verify-tag --draft --title "WaveBench $RELEASE_TAG" \
--notes-file "docs/releases/$RELEASE_TAG.md"
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
# WaveBench 更新日志

这里记录已经打过 Git tag 的版本。内容以 tag 之前已经合入的代码、测试、发布说明和边界记录为事实源;路线图里的候选功能不算已发布能力。没有独立 tag 的 release notes 草稿只并入对应正式版本,不单列为版本。版本号和时间以仓库 tag 为准,当前开发分支的变化不放在历史版本里。
版本变化以对应源码和发布说明为依据,正式发行状态以 [GitHub Releases](https://github.com/Scaxlibur/WaveBench/releases) 为准。未发布的设计继续保留在 RFC 中。

## v0.8.28

[完整发布说明](docs/releases/v0.8.28.md)。

- 新增示波器观察、波形期望检查及只读 MCP 建议入口,明确采集副作用与不完整验收状态。
- 开发环境和受管插件安装采用 uv,保留旧 pip 安装记录的恢复兼容。
- 统一运行时版本身份和插件版本比较,增加独立 wheel 安装与 tag 发布门禁。
- 修复 Windows 分析结果原子替换的短暂占用失败。

## v0.8.27 — 2026-09-08

[完整发布说明](https://github.com/Scaxlibur/WaveBench/releases/tag/v0.8.27)。该版本包含信号处理流水线、批量和双通道分析、Source/RF Source 扩展、状态恢复、资源租约与原生 Windows 支持。

## v0.8.0 — 2026-07-24

Expand Down
27 changes: 17 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,19 +69,15 @@ WaveBench 是面向电子设计调试和日常实验的 Python 测量台。它

## 无硬件快速开始

以下命令只安装包、列出模板并打印一个示例 plan;不会连接仪器或打开输出。
正式发行包从 [GitHub Releases](https://github.com/Scaxlibur/WaveBench/releases) 获取,安装与开发线入口见[安装说明](docs/getting-started/installation.md)。在已安装 WaveBench 的环境中运行以下命令,可生成一个示例 plan,不会连接仪器或打开输出。

```bash
git clone https://github.com/Scaxlibur/WaveBench.git
cd WaveBench
python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/python -m wavebench run template --list
.venv/bin/python -m wavebench run template source-scope-sine --print
.venv/bin/python -m wavebench run check --plan plans/closure_sine_1k.toml
python -m wavebench --version
python -m wavebench run template --list
python -m wavebench run template source-scope-sine --output example.toml
```

最后一条命令以 `safety_limits=ok / 安全上限=通过` 结束时,表示示例 plan 已通过离线检查。完整的预期结果、Windows 命令和下一步见[无硬件快速开始](docs/getting-started/quickstart.md)。
按[无硬件快速开始](docs/getting-started/quickstart.md)准备演示配置并执行离线检查。以 `safety_limits=ok / 安全上限=通过` 结束时,表示示例 plan 已通过检查。

## 支持范围

Expand All @@ -105,6 +101,17 @@ python3 -m venv .venv

## 文档与贡献

Core 开发环境由 `uv.lock` 固定依赖版本:

```bash
uv sync --locked --extra dev --extra analysis --extra tui
uv run --no-sync pytest -q
uv run --no-sync ruff check .
```

`pdf`、`report3d` 和 `docs` 可按需用 `--extra` 加入。默认同步会移除未声明的包;
已安装仪器插件的运行环境应与开发环境分开,详见[管理仪器插件](docs/how-to/manage-plugins.md)。

- [文档首页](docs/index.md)
- [示例计划及硬件边界](plans/README.md)
- [管理仪器插件](docs/how-to/manage-plugins.md)
Expand All @@ -121,4 +128,4 @@ WaveBench 使用 MIT 许可证。

<img src="https://www.krill-code.com/brand/logo-horizontal.png" alt="Krill" width="150" />

感谢 [Krill AI](https://www.krill-code.com/) 对本项目的赞助。
感谢 [Krill AI](https://www.krill-code.com/) 对本项目的赞助。
12 changes: 6 additions & 6 deletions docs/README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ The current complete documentation is maintained in Chinese. This page is an Eng

## Start without instruments

Install a release wheel with Python 3.11+ and [uv](https://docs.astral.sh/uv/getting-started/installation/). The [installation guide](getting-started/installation.md) separates release installations, fixed-tag source checkouts, and the unreleased `Dev` branch. Run the following with the installed environment's Python:

```bash
python3 -m venv .venv
.venv/bin/python -m pip install -e .
.venv/bin/python -m wavebench run template --list
.venv/bin/python -m wavebench run template source-scope-sine --print
.venv/bin/python -m wavebench run check --plan plans/closure_sine_1k.toml
python -m wavebench --version
python -m wavebench run template --list
python -m wavebench run template source-scope-sine --output example.toml
```

The last command succeeds with `safety_limits=ok / 安全上限=通过`. It performs no instrument I/O. See the [Chinese Quickstart](getting-started/quickstart.md) for expected output, Windows commands, and the next steps.
These commands perform no instrument I/O. Follow the [Chinese Quickstart](getting-started/quickstart.md) to create an offline configuration and check the plan. A successful check prints `safety_limits=ok / 安全上限=通过`.

## Safety boundary

Expand Down
Loading
Loading