Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2c9028d
test:baseline cases
DongJiBao2001 Sep 29, 2026
34903e2
test:add local test process
DongJiBao2001 Sep 29, 2026
9d2d845
doc:add test deploy guide
DongJiBao2001 Sep 29, 2026
bb40703
Merge commit '4a63a16901aa0ad29c33266972c912a00ea0bd85' into djb/test…
DongJiBao2001 Sep 29, 2026
c9266fb
bugfiix:优化测试流程
DongJiBao2001 Sep 29, 2026
233abe8
bugfix:修复测试用例
DongJiBao2001 Sep 30, 2026
aa62d65
doc:轻量化bugfix的spec设计和测试用例设计
DongJiBao2001 Sep 30, 2026
4de1fa7
test:修复测试用例
DongJiBao2001 Sep 30, 2026
b34ad68
Merge commit '80513fc5e625e797f3ed07dfbf8a5f24aa787ca7' into djb/test…
DongJiBao2001 Sep 30, 2026
ccc1810
test:修复D1测试用例
DongJiBao2001 Sep 30, 2026
c1eff8a
test: 修复 D3 用例脚本并记录失败归因
YehongPan Oct 8, 2026
25813f1
test: 移除 D3 变更记录,仅保留测试修复
YehongPan Oct 8, 2026
0e1a776
fix(test-e2e): make D5 tests portable and isolate evaluation workloads
YehongPan Oct 8, 2026
0d2b6f2
fix(test-e2e): repair Windows case contracts and D4 journeys
DongJiBao2001 Oct 8, 2026
142e357
feat(test-e2e): launch repository daily from a pinned branch
DongJiBao2001 Oct 8, 2026
bd46eb2
test:修复D4读取config问题
DongJiBao2001 Oct 8, 2026
327c264
test:修复测试用例,删掉过期用例
DongJiBao2001 Oct 9, 2026
3167763
test:修复测试用例
DongJiBao2001 Oct 9, 2026
ef15d60
test:修复测试用例
DongJiBao2001 Oct 9, 2026
1cf4e6f
doc:测试规范修改
DongJiBao2001 Oct 9, 2026
21c6a0e
Merge commit 'b7f96d033747b213697482681e019683b1b28051' into djb/test…
DongJiBao2001 Oct 9, 2026
0cc607d
Merge commit '66bc13a807a2cd6de0034d97cb1ce60198545790' into djb/test…
DongJiBao2001 Oct 10, 2026
8f50094
test:增加外部记忆mock服务
DongJiBao2001 Oct 10, 2026
cfdbef5
test:测试用例修复
DongJiBao2001 Oct 10, 2026
db1f4b7
fix(prompt): reject blank task descriptions before SSE generation
xuyaqist Oct 10, 2026
7888ae9
fix(agent): return 404 for missing discovery resources
xuyaqist Oct 10, 2026
ff629c9
fix(agent): validate relationships before update writes
xuyaqist Oct 10, 2026
6f40f2e
fix(model): preserve provider error status on provider create
Zzzxxxxy Oct 10, 2026
e946004
fix: correct conversation access and stopped-turn regressions
YehongPan Oct 10, 2026
b9ffad8
fix: enforce tenant isolation and edit permissions for agent relations
xuyaqist Oct 10, 2026
ea8d0da
fix: enforce tenant isolation and edit permissions for agent relations1
xuyaqist Oct 10, 2026
d458888
🐛 Fix tag projection crash on first-attempt ES write failure
cj2026-bit Oct 10, 2026
137bf42
Fix A2A publication smoke scope and remove Mock dependency
xuyaqist Oct 10, 2026
6a3a78c
fix(a2a): execute the version recorded by A2A publication
xuyaqist Oct 10, 2026
49d0879
[WIP] Fix accepted semantic repair stream commits (#4057)
JasonW404 Oct 10, 2026
93d60ab
Merge branch 'djb/test-baseline' of https://github.com/ModelEngine-Gr…
xuyaqist Oct 10, 2026
a7ce6e4
fix: repair agent repository e2e cases and API-type MCP health check …
MoeexT Oct 10, 2026
d783804
fix(test-e2e): align runtime contracts and strengthen local test diag…
DongJiBao2001 Oct 10, 2026
211cad4
Merge remote-tracking branch 'origin/djb/test-baseline' into djb/test…
DongJiBao2001 Oct 10, 2026
2b8d872
fix(test-e2e): reconcile standalone semantic repair tests with formal…
DongJiBao2001 Oct 10, 2026
e10d236
test:修改workflow
DongJiBao2001 Oct 10, 2026
9383a25
test:修复测试用例
DongJiBao2001 Oct 10, 2026
f28a955
fix: preserve manual titles and metadata-free A2A calls
DongJiBao2001 Oct 11, 2026
65effab
test: repair D1-D5 runtime contracts and execution evidence
DongJiBao2001 Oct 11, 2026
dc44d4a
test: repair daily assertions and remove excluded cases
DongJiBao2001 Oct 12, 2026
5a895f6
fix: guard MCP tag refresh and repair daily test isolation
DongJiBao2001 Oct 12, 2026
e3a5747
test:修复测试用例
DongJiBao2001 Oct 12, 2026
ee6107c
test:修复测试用例
DongJiBao2001 Oct 12, 2026
67a3196
test:修复测试用例
DongJiBao2001 Oct 12, 2026
0408fd9
doc:优化测试用例生成skill
DongJiBao2001 Oct 12, 2026
6292f34
test:新增测试报告责任人
DongJiBao2001 Oct 13, 2026
2381a24
test: publish latest complete Daily reports for Syncthing
DongJiBao2001 Oct 13, 2026
75c0c85
Merge remote-tracking branch 'origin/develop' into djb/test-baseline
DongJiBao2001 Oct 13, 2026
f1ff037
fix(test): preserve unrelated files during Daily report publication
DongJiBao2001 Oct 15, 2026
ba305d0
Merge remote-tracking branch 'origin/develop' into djb/test-baseline
DongJiBao2001 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
2 changes: 1 addition & 1 deletion test-e2e/infra/environment/shared-daily-results.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Only `latest-report.md` and `latest-batch.zip` are managed. Batch IDs, pinned HE

The package includes all selected Cases' text logs, receipts, summary, checkpoints and ownership metadata. It excludes config/env files, resolved asset configurations, inputs, dependencies, raw materials and successful screenshots. Existing config credentials and common wire credentials are redacted from text. Unreviewed binary screenshots and raw Playwright traces cannot be certified safe through text replacement: they remain on Ubuntu and are listed in `excluded-evidence.json`. This publication mechanism does not provide reviewed-binary release yet. The report explicitly states that limitation; original evidence is not removed.

`manifest.json` identifies the batch and hashes every payload file. Build/verify under the ignored `state/` tree, then replace the fixed destination files with rollback on local replacement errors. Refuse symlinks and unexpected existing destination entries rather than removing historical data. Publication receipts are stored under `state/report-publications/<batch>/receipt.json`. Original batch receipts, summary and checkpoint results are never rewritten by the publisher. The normal runner only refreshes its reading report with publication status before notification.
`manifest.json` identifies the batch and hashes every payload file. Build/verify under the ignored `state/` tree, then replace the fixed destination files with rollback on local replacement errors. Reject a symlinked destination directory and reject either managed filename if it is a symlink, directory or other non-regular entry. Unrelated files and extracted directories do not block publication: they are never read, packaged, modified or deleted. Publication receipts are stored under `state/report-publications/<batch>/receipt.json`. Original batch receipts, summary and checkpoint results are never rewritten by the publisher. The normal runner only refreshes its reading report with publication status before notification.

For an already complete historical batch, use the dedicated test-home Python:

Expand Down
9 changes: 6 additions & 3 deletions test-e2e/infra/tools/suite_publish.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Copyright (c) 2025-2026 Huawei Technologies Co., Ltd. All rights reserved.
"""Publish a complete Daily reading bundle; never execute tests or send messages."""
from __future__ import annotations

Expand Down Expand Up @@ -209,16 +210,18 @@ def publish_latest(batch, home, env=None, *, ownership_file=None):
if destination.is_symlink():
raise ValueError("Publication directory cannot be a symlink")
destination.mkdir(parents=True, exist_ok=True)
for path in destination.iterdir():
if path.name not in (*MANAGED_FILES, ".stfolder", ".stignore") or path.is_symlink():
raise ValueError("Unexpected existing publication files; refusing to delete or overwrite them")
staging_root = home / "state/report-publish-staging"
if (home / "state").is_symlink() or staging_root.is_symlink():
raise ValueError("Publication staging directory cannot be a symlink")
staging_root.mkdir(parents=True, exist_ok=True)
if destination.stat().st_dev != staging_root.stat().st_dev:
raise ValueError("Publication staging and destination must share a filesystem")
with BatchLock(home / "state/report-publish.lock"), tempfile.TemporaryDirectory(dir=staging_root) as temporary:
# Only these fixed paths are managed; never inspect or remove unrelated entries.
for name in MANAGED_FILES:
target = destination / name
if target.is_symlink() or (target.exists() and not target.is_file()):
raise ValueError("Managed publication targets must be regular files, not symlinks or directories")
staging = Path(temporary)
sharing = {"status": "PUBLISHED", "batch_id": batch.name,
"excluded_binary_count": len(excluded), "published_at": now()}
Expand Down
56 changes: 51 additions & 5 deletions test-e2e/infra/tools/tests/test_suite_publish.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Copyright (c) 2025-2026 Huawei Technologies Co., Ltd. All rights reserved.
"""Offline publication tests; no product calls, synchronization, or notifications."""
from collections import Counter
import hashlib
Expand Down Expand Up @@ -161,12 +162,57 @@ def test_invalid_text_fails_packaging_without_replacing_previous(tmp_path):
assert (tmp_path / "runs-ubuntu/latest-batch.zip").read_bytes() == before


def test_unknown_destination_files_are_not_deleted(tmp_path):
target = tmp_path / "runs-ubuntu/old-batch"
target.mkdir(parents=True)
with pytest.raises(ValueError, match="Unexpected existing"):
def test_unrelated_destination_files_are_preserved_and_do_not_block_republication(tmp_path):
suite_publish.publish_latest(make_batch(tmp_path, "previous"), tmp_path)
destination = tmp_path / "runs-ubuntu"
extracted = destination / "unzip_previous_latest-batch"
extracted.mkdir()
(extracted / "report.md").write_text("previous extracted report", encoding="utf-8")
(destination / "operator-notes.txt").write_text("private operator notes", encoding="utf-8")
before = {path.relative_to(destination).as_posix(): path.read_bytes()
for path in destination.rglob("*") if path.is_file() and path.name not in suite_publish.MANAGED_FILES}
receipt = suite_publish.publish_latest(make_batch(tmp_path, "new"), tmp_path)
assert receipt["status"] == "PUBLISHED"
for name, content in before.items():
assert (destination / name).read_bytes() == content
with zipfile.ZipFile(destination / "latest-batch.zip") as package:
assert json.loads(package.read("manifest.json"))["batch_id"] == "new"
assert not any("unzip_previous" in name or "operator-notes" in name for name in package.namelist())


@pytest.mark.parametrize("name", suite_publish.MANAGED_FILES)
def test_managed_destination_directory_is_rejected_without_replacing_other_file(tmp_path, name):
destination = tmp_path / "runs-ubuntu"
(destination / name).mkdir(parents=True)
other = next(item for item in suite_publish.MANAGED_FILES if item != name)
(destination / other).write_bytes(b"previous managed content")
with pytest.raises(ValueError, match="Managed publication targets"):
suite_publish.publish_latest(make_batch(tmp_path), tmp_path)
assert (destination / name).is_dir()
assert (destination / other).read_bytes() == b"previous managed content"


@pytest.mark.parametrize("name", suite_publish.MANAGED_FILES)
@pytest.mark.parametrize("dangling", [False, True])
def test_managed_destination_symlink_is_rejected_without_touching_target(tmp_path, name, dangling):
destination = tmp_path / "runs-ubuntu"
destination.mkdir()
target = tmp_path / "outside-private.txt"
if not dangling:
target.write_bytes(b"private outside content")
try:
(destination / name).symlink_to(target)
except OSError:
pytest.skip("Host does not permit creation of symlinks")
other = next(item for item in suite_publish.MANAGED_FILES if item != name)
(destination / other).write_bytes(b"previous managed content")
with pytest.raises(ValueError, match="Managed publication targets"):
suite_publish.publish_latest(make_batch(tmp_path), tmp_path)
assert target.is_dir()
assert (destination / name).is_symlink()
assert (destination / other).read_bytes() == b"previous managed content"
assert target.exists() == (not dangling)
if not dangling:
assert target.read_bytes() == b"private outside content"


def test_wrong_ownership_revision_is_rejected(tmp_path):
Expand Down
Loading