@michelj/context-guard 0.4.3 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Coordinator.md +88 -0
- package/Executor.md +53 -0
- package/README.md +89 -224
- package/README.zh-CN.md +89 -224
- package/SKILL.md +26 -684
- package/THIRD_PARTY_NOTICES.md +47 -0
- package/Tester.md +53 -0
- package/agents/openai.yaml +2 -2
- package/bin/build-runtime.mjs +96 -0
- package/bin/context-guard-skill.js +399 -78
- package/bin/postinstall.js +2 -2
- package/hooks.json +89 -13
- package/licenses/JSONParse-MIT.txt +24 -0
- package/licenses/Marked-MIT.txt +44 -0
- package/licenses/Portless-Apache-2.0.txt +201 -0
- package/package.json +35 -6
- package/prototype/LICENSES/Marked-MIT.txt +44 -0
- package/prototype/LICENSES/Ready-redistribution.txt +14 -0
- package/prototype/attachments.mjs +75 -0
- package/prototype/coordinator-markdown.mjs +283 -0
- package/prototype/coordinator-working-blot.mjs +124 -0
- package/prototype/vendor/marked.mjs +2189 -0
- package/prototype/workbench-app.js +5197 -0
- package/prototype/workbench-data.js +33 -0
- package/prototype/workbench-sync.mjs +898 -0
- package/prototype/workbench.css +1050 -0
- package/prototype/workbench.html +211 -0
- package/prototype/working-blot-atlas.png +0 -0
- package/references/agent-handoff.md +40 -0
- package/references/claude-runtime.md +120 -0
- package/references/cloud-sync-interface.md +66 -0
- package/references/design-current.md +14 -0
- package/references/map-mount.md +41 -0
- package/references/map-read.md +50 -0
- package/references/memory-definition.md +120 -0
- package/references/memory-filesystem-v2/Bug.en.md +162 -0
- package/references/memory-filesystem-v2/Bug.md +162 -0
- package/references/memory-filesystem-v2/Bug_Coordinater.md +8 -0
- package/references/memory-filesystem-v2/Bug_Executor.md +8 -0
- package/references/memory-filesystem-v2/Bug_Tester.md +7 -0
- package/references/memory-filesystem-v2/Idea.en.md +36 -0
- package/references/memory-filesystem-v2/Idea.md +36 -0
- package/references/memory-filesystem-v2/Node_Module_Index.en.md +88 -0
- package/references/memory-filesystem-v2/Node_Module_Index.md +88 -0
- package/references/memory-filesystem-v2/README.md +60 -0
- package/references/memory-filesystem-v2/Todo.en.md +137 -0
- package/references/memory-filesystem-v2/Todo.md +137 -0
- package/references/memory-filesystem-v2/Todo_Coordinater.md +7 -0
- package/references/memory-filesystem-v2/Todo_Executor.md +7 -0
- package/references/memory-filesystem-v2/Todo_Tester.md +7 -0
- package/references/named-workbench.md +124 -0
- package/references/plan-review.md +12 -0
- package/references/server-memory.md +276 -0
- package/references/test-check.md +7 -0
- package/references/user-reply.md +38 -0
- package/references/workbench-interface.md +531 -0
- package/roles.md +13 -0
- package/scripts/context_guard.py +1366 -7602
- package/scripts/context_guard_hook.py +1960 -711
- package/scripts/map_owns.py +699 -0
- package/scripts/shared/LICENSES/JSONParse-MIT.txt +24 -0
- package/scripts/shared/filesystem-v2.mjs +430 -0
- package/scripts/shared/io.mjs +117 -0
- package/scripts/shared/map-model.mjs +506 -0
- package/scripts/shared/memory-schema.mjs +13 -0
- package/scripts/shared/protocol-blobs.mjs +112 -0
- package/scripts/shared/protocol-map.mjs +146 -0
- package/scripts/shared/protocol-snapshots.mjs +84 -0
- package/scripts/shared/protocol-store.mjs +624 -0
- package/scripts/shared/protocol-workflow.mjs +226 -0
- package/scripts/shared/protocol.mjs +125 -0
- package/scripts/shared/vendor/jsonparse.cjs +413 -0
- package/scripts/workbench/access.mjs +496 -0
- package/scripts/workbench/attachments.mjs +92 -0
- package/scripts/workbench/browser-login.mjs +78 -0
- package/scripts/workbench/claude-runtime.mjs +372 -0
- package/scripts/workbench/cli.mjs +980 -0
- package/scripts/workbench/device-heartbeat.mjs +72 -0
- package/scripts/workbench/hook-status.mjs +38 -0
- package/scripts/workbench/inbox.mjs +155 -0
- package/scripts/workbench/journal.mjs +56 -0
- package/scripts/workbench/memory-merge.mjs +65 -0
- package/scripts/workbench/memory.mjs +252 -0
- package/scripts/workbench/named-proxy.mjs +108 -0
- package/scripts/workbench/named.mjs +152 -0
- package/scripts/workbench/portless-routes.mjs +51 -0
- package/scripts/workbench/project.mjs +327 -0
- package/scripts/workbench/projections.mjs +68 -0
- package/scripts/workbench/protocol-client.mjs +165 -0
- package/scripts/workbench/protocol-delivery.mjs +133 -0
- package/scripts/workbench/protocol-device.mjs +316 -0
- package/scripts/workbench/protocol-events.mjs +53 -0
- package/scripts/workbench/protocol-repository.mjs +58 -0
- package/scripts/workbench/reconcile.mjs +244 -0
- package/scripts/workbench/registry.mjs +111 -0
- package/scripts/workbench/runtime.mjs +54 -0
- package/scripts/workbench/server.mjs +1171 -0
- package/scripts/workbench/store.mjs +243 -0
- package/scripts/workbench/sync-coordinator.mjs +518 -0
- package/scripts/workbench/sync.mjs +86 -0
- package/references/context-template.md +0 -341
- package/references/feature-chain-methodology.md +0 -228
- package/references/register-template.md +0 -85
- package/references/task-case-template.md +0 -63
- package/tests/BC-20260618-063.sh +0 -116
- package/tests/BC-20260618-065.sh +0 -66
- package/tests/BC-20260626-080.sh +0 -48
- package/tests/BC-20260626-081.sh +0 -40
- package/tests/BC-20260626-082.sh +0 -32
- package/tests/BC-20260626-083.sh +0 -66
- package/tests/BC-20260627-084.sh +0 -74
- package/tests/BC-20260630-086.sh +0 -50
- package/tests/BC-20260630-087.sh +0 -103
- package/tests/BC-20260630-088.sh +0 -32
- package/tests/BC-20260630-089.sh +0 -63
- package/tests/BC-20260701-090.sh +0 -84
- package/tests/BC-20260702-096.sh +0 -48
- package/tests/BC-20260706-098.sh +0 -66
- package/tests/BC-20260707-099.sh +0 -47
- package/tests/BC-20260707-100.sh +0 -46
- package/tests/BC-20260707-101.sh +0 -47
- package/tests/BC-20260707-102.sh +0 -68
- package/tests/BC-20260707-103.sh +0 -59
- package/tests/BC-20260707-104.sh +0 -103
- package/tests/BC-20260707-105.sh +0 -109
- package/tests/BC-20260707-106.sh +0 -80
- package/tests/BC-20260707-107.sh +0 -74
- package/tests/BC-20260707-108.sh +0 -48
- package/tests/BC-20260707-109.sh +0 -56
- package/tests/BC-20260707-110.sh +0 -71
- package/tests/BC-20260707-111.sh +0 -70
- package/tests/BC-20260707-112.sh +0 -45
- package/tests/BC-20260707-113.sh +0 -73
- package/tests/BC-20260707-115.sh +0 -77
- package/tests/BC-20260707-116.sh +0 -77
- package/tests/BC-20260707-118.sh +0 -115
- package/tests/BC-20260707-119.sh +0 -47
- package/tests/BC-20260707-120.sh +0 -60
- package/tests/BC-20260707-121.sh +0 -66
- package/tests/BC-20260707-122.sh +0 -48
- package/tests/BC-20260707-123.sh +0 -43
- package/tests/BC-20260707-124.sh +0 -56
- package/tests/BC-20260707-125.sh +0 -64
- package/tests/BC-20260707-126.sh +0 -80
- package/tests/BC-20260707-127.sh +0 -88
- package/tests/BC-20260707-129.sh +0 -59
- package/tests/BC-20260707-130.sh +0 -69
- package/tests/BC-20260707-131.sh +0 -140
- package/tests/BC-20260707-132.sh +0 -150
- package/tests/BC-20260707-133.sh +0 -70
- package/tests/BC-20260708-136.sh +0 -210
- package/tests/BC-20260708-137.sh +0 -106
- package/tests/BC-20260708-138.sh +0 -168
- package/tests/BC-20260708-139.sh +0 -79
- package/tests/BC-20260709-002.sh +0 -63
- package/tests/BC-20260709-003.sh +0 -239
- package/tests/BC-20260709-006.sh +0 -76
- package/tests/BC-20260709-008.sh +0 -168
- package/tests/BC-20260710-001.sh +0 -61
- package/tests/BC-20260710-002.sh +0 -111
- package/tests/npm-install-smoke.sh +0 -53
package/tests/BC-20260707-104.sh
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT_FAIL="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-checkpoint-fail-XXXXXX")"
|
|
6
|
-
ROOT_PASS="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-checkpoint-pass-XXXXXX")"
|
|
7
|
-
trap 'rm -rf "$ROOT_FAIL" "$ROOT_PASS"' EXIT
|
|
8
|
-
OUT="$ROOT_FAIL/out.txt"
|
|
9
|
-
|
|
10
|
-
python3 "$SCRIPT" init --root "$ROOT_FAIL" >/dev/null
|
|
11
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
12
|
-
--root "$ROOT_FAIL" \
|
|
13
|
-
--title "GPU 监控按钮" \
|
|
14
|
-
--entry "点击 GPU 监控按钮" \
|
|
15
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
16
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
17
|
-
|
|
18
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
19
|
-
--root "$ROOT_FAIL" \
|
|
20
|
-
--chain-id "$CHAIN_ID" \
|
|
21
|
-
--node-title "后端返回监控 URL" \
|
|
22
|
-
--bad-case "BC-20260707-104" \
|
|
23
|
-
--check "grafana_url 不为空" >/dev/null
|
|
24
|
-
|
|
25
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
26
|
-
--root "$ROOT_FAIL" \
|
|
27
|
-
--chain-id "$CHAIN_ID" \
|
|
28
|
-
--node-title "前端打开监控页" \
|
|
29
|
-
--bad-case "BC-20260707-104" \
|
|
30
|
-
--check "点击后进入监控页" >/dev/null
|
|
31
|
-
|
|
32
|
-
python3 - "$ROOT_FAIL/.codex/context/test-hub/feature-chains.json" "$CHAIN_ID" <<'PY'
|
|
33
|
-
from pathlib import Path
|
|
34
|
-
import json
|
|
35
|
-
import sys
|
|
36
|
-
path = Path(sys.argv[1])
|
|
37
|
-
chain_id = sys.argv[2]
|
|
38
|
-
data = json.loads(path.read_text(encoding="utf-8"))
|
|
39
|
-
chain = next(item for item in data["chains"] if item["id"] == chain_id)
|
|
40
|
-
chain["status"] = "approved"
|
|
41
|
-
chain["type"] = "command"
|
|
42
|
-
chain["command"] = "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\\nCG_CHECKPOINT:前端打开监控页:FAIL:缺少 grafana_url\\n'"
|
|
43
|
-
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
44
|
-
PY
|
|
45
|
-
|
|
46
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT_FAIL" >"$OUT" 2>&1; then
|
|
47
|
-
cat "$OUT"
|
|
48
|
-
exit 1
|
|
49
|
-
fi
|
|
50
|
-
grep -q "checkpoint failed: 前端打开监控页 - 缺少 grafana_url" "$OUT"
|
|
51
|
-
|
|
52
|
-
python3 - "$ROOT_FAIL/.codex/context/test-hub/last-run.json" <<'PY'
|
|
53
|
-
from pathlib import Path
|
|
54
|
-
import json
|
|
55
|
-
import sys
|
|
56
|
-
|
|
57
|
-
run = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
58
|
-
result = run["results"][0]
|
|
59
|
-
assert result["status"] == "failed"
|
|
60
|
-
assert result["reason"] == "checkpoint failed: 前端打开监控页 - 缺少 grafana_url"
|
|
61
|
-
assert [item["status"] for item in result["checkpoints"]] == ["pass", "fail"]
|
|
62
|
-
PY
|
|
63
|
-
|
|
64
|
-
OUT="$ROOT_PASS/out.txt"
|
|
65
|
-
python3 "$SCRIPT" init --root "$ROOT_PASS" >/dev/null
|
|
66
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
67
|
-
--root "$ROOT_PASS" \
|
|
68
|
-
--title "GPU 监控按钮" \
|
|
69
|
-
--entry "点击 GPU 监控按钮" \
|
|
70
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
71
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
72
|
-
|
|
73
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
74
|
-
--root "$ROOT_PASS" \
|
|
75
|
-
--chain-id "$CHAIN_ID" \
|
|
76
|
-
--node-title "后端返回监控 URL" \
|
|
77
|
-
--bad-case "BC-20260707-104" \
|
|
78
|
-
--check "grafana_url 不为空" >/dev/null
|
|
79
|
-
|
|
80
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
81
|
-
--root "$ROOT_PASS" \
|
|
82
|
-
--chain-id "$CHAIN_ID" \
|
|
83
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\n'" >/dev/null
|
|
84
|
-
|
|
85
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT_PASS" >"$OUT"
|
|
86
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
87
|
-
grep -q "success artifacts cleaned" "$OUT"
|
|
88
|
-
|
|
89
|
-
if find "$ROOT_PASS/.codex/context/test-hub/runs" -mindepth 1 -maxdepth 1 2>/dev/null | grep -q .; then
|
|
90
|
-
find "$ROOT_PASS/.codex/context/test-hub/runs" -mindepth 1 -maxdepth 1
|
|
91
|
-
exit 1
|
|
92
|
-
fi
|
|
93
|
-
|
|
94
|
-
python3 - "$ROOT_PASS/.codex/context/test-hub/last-run.json" <<'PY'
|
|
95
|
-
from pathlib import Path
|
|
96
|
-
import json
|
|
97
|
-
import sys
|
|
98
|
-
|
|
99
|
-
run = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
100
|
-
result = run["results"][0]
|
|
101
|
-
assert result["status"] == "passed"
|
|
102
|
-
assert result["checkpoints"][0]["label"] == "后端返回监控 URL"
|
|
103
|
-
PY
|
package/tests/BC-20260707-105.sh
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT_BAD="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-marker-bad-XXXXXX")"
|
|
6
|
-
ROOT_GOOD="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-marker-good-XXXXXX")"
|
|
7
|
-
trap 'rm -rf "$ROOT_BAD" "$ROOT_GOOD"' EXIT
|
|
8
|
-
OUT="$ROOT_BAD/out.txt"
|
|
9
|
-
|
|
10
|
-
create_chain() {
|
|
11
|
-
local root="$1"
|
|
12
|
-
local mode="${2:-proposed}"
|
|
13
|
-
local command_text="${3:-}"
|
|
14
|
-
python3 "$SCRIPT" init --root "$root" >/dev/null
|
|
15
|
-
local add_output
|
|
16
|
-
add_output="$(python3 "$SCRIPT" feature-chain-add \
|
|
17
|
-
--root "$root" \
|
|
18
|
-
--title "GPU 监控按钮" \
|
|
19
|
-
--entry "点击 GPU 监控按钮" \
|
|
20
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
21
|
-
local chain_id
|
|
22
|
-
chain_id="$(printf '%s\n' "$add_output" | sed -n 's/.*feature chain: //p')"
|
|
23
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
24
|
-
--root "$root" \
|
|
25
|
-
--chain-id "$chain_id" \
|
|
26
|
-
--node-title "后端返回监控 URL" \
|
|
27
|
-
--bad-case "BC-20260707-105" \
|
|
28
|
-
--check "grafana_url 不为空" >/dev/null
|
|
29
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
30
|
-
--root "$root" \
|
|
31
|
-
--chain-id "$chain_id" \
|
|
32
|
-
--node-title "前端打开监控页" \
|
|
33
|
-
--bad-case "BC-20260707-105" \
|
|
34
|
-
--check "点击后进入监控页" >/dev/null
|
|
35
|
-
if [[ "$mode" == "direct-approved" ]]; then
|
|
36
|
-
python3 - "$root/.codex/context/test-hub/feature-chains.json" "$chain_id" "$command_text" <<'PY'
|
|
37
|
-
from pathlib import Path
|
|
38
|
-
import json
|
|
39
|
-
import sys
|
|
40
|
-
path = Path(sys.argv[1])
|
|
41
|
-
chain_id = sys.argv[2]
|
|
42
|
-
command = sys.argv[3]
|
|
43
|
-
data = json.loads(path.read_text(encoding="utf-8"))
|
|
44
|
-
chain = next(item for item in data["chains"] if item["id"] == chain_id)
|
|
45
|
-
chain["status"] = "approved"
|
|
46
|
-
chain["type"] = "command"
|
|
47
|
-
chain["command"] = command
|
|
48
|
-
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
49
|
-
PY
|
|
50
|
-
fi
|
|
51
|
-
printf '%s' "$chain_id"
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
CHAIN_ID="$(create_chain "$ROOT_BAD" direct-approved "printf 'CG_CHECKPOINT:未登记检查点:PASS\n'")"
|
|
55
|
-
python3 - "$ROOT_BAD/.codex/context/test-hub/feature-chains.json" "$CHAIN_ID" <<'PY'
|
|
56
|
-
from pathlib import Path
|
|
57
|
-
import json
|
|
58
|
-
import sys
|
|
59
|
-
|
|
60
|
-
chain = next(
|
|
61
|
-
item
|
|
62
|
-
for item in json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["chains"]
|
|
63
|
-
if item["id"] == sys.argv[2]
|
|
64
|
-
)
|
|
65
|
-
nodes = chain["nodes"]
|
|
66
|
-
assert len(nodes) == 2, nodes
|
|
67
|
-
ids = [node["id"] for node in nodes]
|
|
68
|
-
assert len(set(ids)) == 2, ids
|
|
69
|
-
assert "test" not in ids, ids
|
|
70
|
-
PY
|
|
71
|
-
|
|
72
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT_BAD" >"$OUT" 2>&1; then
|
|
73
|
-
cat "$OUT"
|
|
74
|
-
exit 1
|
|
75
|
-
fi
|
|
76
|
-
grep -q "unknown checkpoint marker: 未登记检查点" "$OUT"
|
|
77
|
-
|
|
78
|
-
python3 - "$ROOT_BAD/.codex/context/test-hub/last-run.json" <<'PY'
|
|
79
|
-
from pathlib import Path
|
|
80
|
-
import json
|
|
81
|
-
import sys
|
|
82
|
-
|
|
83
|
-
result = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["results"][0]
|
|
84
|
-
assert result["status"] == "failed"
|
|
85
|
-
assert result["reason"] == "unknown checkpoint marker: 未登记检查点"
|
|
86
|
-
assert result["checkpoints"][0]["known"] is False
|
|
87
|
-
PY
|
|
88
|
-
|
|
89
|
-
OUT="$ROOT_GOOD/out.txt"
|
|
90
|
-
CHAIN_ID="$(create_chain "$ROOT_GOOD")"
|
|
91
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
92
|
-
--root "$ROOT_GOOD" \
|
|
93
|
-
--chain-id "$CHAIN_ID" \
|
|
94
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\nCG_CHECKPOINT:前端打开监控页:PASS\n'" >/dev/null
|
|
95
|
-
|
|
96
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT_GOOD" >"$OUT"
|
|
97
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
98
|
-
grep -q "success artifacts cleaned" "$OUT"
|
|
99
|
-
|
|
100
|
-
python3 - "$ROOT_GOOD/.codex/context/test-hub/last-run.json" <<'PY'
|
|
101
|
-
from pathlib import Path
|
|
102
|
-
import json
|
|
103
|
-
import sys
|
|
104
|
-
|
|
105
|
-
result = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["results"][0]
|
|
106
|
-
assert result["status"] == "passed"
|
|
107
|
-
assert [item["known"] for item in result["checkpoints"]] == [True, True]
|
|
108
|
-
assert [item["label"] for item in result["checkpoints"]] == ["后端返回监控 URL", "前端打开监控页"]
|
|
109
|
-
PY
|
package/tests/BC-20260707-106.sh
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-missing-checkpoint-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
11
|
-
--root "$ROOT" \
|
|
12
|
-
--title "GPU 监控按钮" \
|
|
13
|
-
--entry "点击 GPU 监控按钮" \
|
|
14
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
15
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
16
|
-
|
|
17
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
18
|
-
--root "$ROOT" \
|
|
19
|
-
--chain-id "$CHAIN_ID" \
|
|
20
|
-
--node-title "后端返回监控 URL" \
|
|
21
|
-
--bad-case "BC-20260707-106" \
|
|
22
|
-
--check "grafana_url 不为空" >/dev/null
|
|
23
|
-
|
|
24
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
25
|
-
--root "$ROOT" \
|
|
26
|
-
--chain-id "$CHAIN_ID" \
|
|
27
|
-
--node-title "前端打开监控页" \
|
|
28
|
-
--bad-case "BC-20260707-106" \
|
|
29
|
-
--check "点击后进入监控页" >/dev/null
|
|
30
|
-
|
|
31
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" "$CHAIN_ID" <<'PY'
|
|
32
|
-
from pathlib import Path
|
|
33
|
-
import json
|
|
34
|
-
import sys
|
|
35
|
-
path = Path(sys.argv[1])
|
|
36
|
-
chain_id = sys.argv[2]
|
|
37
|
-
data = json.loads(path.read_text(encoding="utf-8"))
|
|
38
|
-
chain = next(item for item in data["chains"] if item["id"] == chain_id)
|
|
39
|
-
chain["status"] = "approved"
|
|
40
|
-
chain["type"] = "command"
|
|
41
|
-
chain["command"] = "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\\n'"
|
|
42
|
-
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
43
|
-
PY
|
|
44
|
-
|
|
45
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT" 2>&1; then
|
|
46
|
-
cat "$OUT"
|
|
47
|
-
exit 1
|
|
48
|
-
fi
|
|
49
|
-
grep -q "missing checkpoint marker: 前端打开监控页" "$OUT"
|
|
50
|
-
|
|
51
|
-
python3 - "$ROOT/.codex/context/test-hub/last-run.json" <<'PY'
|
|
52
|
-
from pathlib import Path
|
|
53
|
-
import json
|
|
54
|
-
import sys
|
|
55
|
-
|
|
56
|
-
result = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["results"][0]
|
|
57
|
-
assert result["status"] == "failed"
|
|
58
|
-
assert result["reason"] == "missing checkpoint marker: 前端打开监控页"
|
|
59
|
-
assert [item["label"] for item in result["missing_checkpoints"]] == ["前端打开监控页"]
|
|
60
|
-
PY
|
|
61
|
-
|
|
62
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
63
|
-
--root "$ROOT" \
|
|
64
|
-
--chain-id "$CHAIN_ID" \
|
|
65
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\nCG_CHECKPOINT:前端打开监控页:PASS\n'" >/dev/null
|
|
66
|
-
|
|
67
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT"
|
|
68
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
69
|
-
grep -q "success artifacts cleaned" "$OUT"
|
|
70
|
-
|
|
71
|
-
python3 - "$ROOT/.codex/context/test-hub/last-run.json" <<'PY'
|
|
72
|
-
from pathlib import Path
|
|
73
|
-
import json
|
|
74
|
-
import sys
|
|
75
|
-
|
|
76
|
-
result = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["results"][0]
|
|
77
|
-
assert result["status"] == "passed"
|
|
78
|
-
assert [item["label"] for item in result["checkpoints"]] == ["后端返回监控 URL", "前端打开监控页"]
|
|
79
|
-
assert result["missing_checkpoints"] == []
|
|
80
|
-
PY
|
package/tests/BC-20260707-107.sh
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-checkpoint-policy-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
11
|
-
--root "$ROOT" \
|
|
12
|
-
--title "GPU 监控按钮" \
|
|
13
|
-
--entry "点击 GPU 监控按钮" \
|
|
14
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
15
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
16
|
-
|
|
17
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
18
|
-
--root "$ROOT" \
|
|
19
|
-
--chain-id "$CHAIN_ID" \
|
|
20
|
-
--node-title "后端返回监控 URL" \
|
|
21
|
-
--bad-case "BC-20260707-107" \
|
|
22
|
-
--check "grafana_url 不为空" >/dev/null
|
|
23
|
-
|
|
24
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
25
|
-
--root "$ROOT" \
|
|
26
|
-
--chain-id "$CHAIN_ID" \
|
|
27
|
-
--node-title "前端打开监控页" \
|
|
28
|
-
--bad-case "BC-20260707-107" \
|
|
29
|
-
--check "点击后进入监控页" >/dev/null
|
|
30
|
-
|
|
31
|
-
python3 "$SCRIPT" feature-chain-set-checkpoint \
|
|
32
|
-
--root "$ROOT" \
|
|
33
|
-
--chain-id "$CHAIN_ID" \
|
|
34
|
-
--node-title "前端打开监控页" \
|
|
35
|
-
--required optional \
|
|
36
|
-
--reason "浏览器环境才运行" >/dev/null
|
|
37
|
-
|
|
38
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
39
|
-
--root "$ROOT" \
|
|
40
|
-
--chain-id "$CHAIN_ID" \
|
|
41
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\n'" >/dev/null
|
|
42
|
-
|
|
43
|
-
python3 "$SCRIPT" validate-feature-chains --root "$ROOT" >"$OUT"
|
|
44
|
-
grep -q "feature-chain validation passed" "$OUT"
|
|
45
|
-
|
|
46
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT"
|
|
47
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
48
|
-
grep -q "success artifacts cleaned" "$OUT"
|
|
49
|
-
|
|
50
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
51
|
-
from pathlib import Path
|
|
52
|
-
import json
|
|
53
|
-
import sys
|
|
54
|
-
|
|
55
|
-
chain = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))["chains"][0]
|
|
56
|
-
nodes = {node["title"]: node for node in chain["nodes"]}
|
|
57
|
-
optional = nodes["前端打开监控页"]
|
|
58
|
-
assert optional["required"] is False
|
|
59
|
-
assert optional["optional"] is True
|
|
60
|
-
assert optional["optional_reason"] == "浏览器环境才运行"
|
|
61
|
-
PY
|
|
62
|
-
|
|
63
|
-
python3 "$SCRIPT" feature-chain-set-checkpoint \
|
|
64
|
-
--root "$ROOT" \
|
|
65
|
-
--chain-id "$CHAIN_ID" \
|
|
66
|
-
--node-title "前端打开监控页" \
|
|
67
|
-
--required required \
|
|
68
|
-
--reason "用户要求恢复每次运行" >/dev/null
|
|
69
|
-
|
|
70
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT" 2>&1; then
|
|
71
|
-
cat "$OUT"
|
|
72
|
-
exit 1
|
|
73
|
-
fi
|
|
74
|
-
grep -q "missing checkpoint marker: 前端打开监控页" "$OUT"
|
package/tests/BC-20260707-108.sh
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-list-policy-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
11
|
-
--root "$ROOT" \
|
|
12
|
-
--title "GPU 监控按钮" \
|
|
13
|
-
--entry "点击 GPU 监控按钮" \
|
|
14
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
15
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
16
|
-
|
|
17
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
18
|
-
--root "$ROOT" \
|
|
19
|
-
--chain-id "$CHAIN_ID" \
|
|
20
|
-
--node-title "后端返回监控 URL" \
|
|
21
|
-
--bad-case "BC-20260707-108" \
|
|
22
|
-
--check "grafana_url 不为空" >/dev/null
|
|
23
|
-
|
|
24
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
25
|
-
--root "$ROOT" \
|
|
26
|
-
--chain-id "$CHAIN_ID" \
|
|
27
|
-
--node-title "前端打开监控页" \
|
|
28
|
-
--bad-case "BC-20260707-108" \
|
|
29
|
-
--check "点击后进入监控页" >/dev/null
|
|
30
|
-
|
|
31
|
-
python3 "$SCRIPT" feature-chain-set-checkpoint \
|
|
32
|
-
--root "$ROOT" \
|
|
33
|
-
--chain-id "$CHAIN_ID" \
|
|
34
|
-
--node-title "前端打开监控页" \
|
|
35
|
-
--required optional \
|
|
36
|
-
--reason "浏览器环境才运行" >/dev/null
|
|
37
|
-
|
|
38
|
-
python3 "$SCRIPT" feature-chain-list --root "$ROOT" >"$OUT"
|
|
39
|
-
grep -q "2 node(s), 1 required, 1 optional" "$OUT"
|
|
40
|
-
if grep -q "checkpoint:" "$OUT"; then
|
|
41
|
-
cat "$OUT"
|
|
42
|
-
exit 1
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
python3 "$SCRIPT" feature-chain-list --root "$ROOT" --verbose >"$OUT"
|
|
46
|
-
grep -q "2 node(s), 1 required, 1 optional" "$OUT"
|
|
47
|
-
grep -q "checkpoint: 后端返回监控 URL | required" "$OUT"
|
|
48
|
-
grep -q "checkpoint: 前端打开监控页 | optional | reason: 浏览器环境才运行" "$OUT"
|
package/tests/BC-20260707-109.sh
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-test-hub-feature-policy-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
python3 "$SCRIPT" show-test-hub --root "$ROOT" >"$OUT"
|
|
11
|
-
HTML_PATH="$(tail -1 "$OUT")"
|
|
12
|
-
if grep -q "检查点策略" "$HTML_PATH"; then
|
|
13
|
-
cat "$HTML_PATH"
|
|
14
|
-
exit 1
|
|
15
|
-
fi
|
|
16
|
-
|
|
17
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
18
|
-
--root "$ROOT" \
|
|
19
|
-
--title "GPU 监控按钮" \
|
|
20
|
-
--entry "点击 GPU 监控按钮" \
|
|
21
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
22
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
23
|
-
|
|
24
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
25
|
-
--root "$ROOT" \
|
|
26
|
-
--chain-id "$CHAIN_ID" \
|
|
27
|
-
--node-title "后端返回监控 URL" \
|
|
28
|
-
--bad-case "BC-20260707-109" \
|
|
29
|
-
--check "grafana_url 不为空" >/dev/null
|
|
30
|
-
|
|
31
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
32
|
-
--root "$ROOT" \
|
|
33
|
-
--chain-id "$CHAIN_ID" \
|
|
34
|
-
--node-title "前端打开监控页" \
|
|
35
|
-
--bad-case "BC-20260707-109" \
|
|
36
|
-
--check "点击后进入监控页" >/dev/null
|
|
37
|
-
|
|
38
|
-
python3 "$SCRIPT" feature-chain-set-checkpoint \
|
|
39
|
-
--root "$ROOT" \
|
|
40
|
-
--chain-id "$CHAIN_ID" \
|
|
41
|
-
--node-title "前端打开监控页" \
|
|
42
|
-
--required optional \
|
|
43
|
-
--reason "浏览器环境才运行" >/dev/null
|
|
44
|
-
|
|
45
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
46
|
-
--root "$ROOT" \
|
|
47
|
-
--chain-id "$CHAIN_ID" \
|
|
48
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\n'" >/dev/null
|
|
49
|
-
|
|
50
|
-
python3 "$SCRIPT" show-test-hub --root "$ROOT" >"$OUT"
|
|
51
|
-
HTML_PATH="$(tail -1 "$OUT")"
|
|
52
|
-
|
|
53
|
-
grep -q "检查点策略:1 必跑 / 1 可选" "$HTML_PATH"
|
|
54
|
-
grep -q "后端返回监控 URL" "$HTML_PATH"
|
|
55
|
-
grep -q "前端打开监控页" "$HTML_PATH"
|
|
56
|
-
grep -q "浏览器环境才运行" "$HTML_PATH"
|
package/tests/BC-20260707-110.sh
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SKILL_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
5
|
-
SCRIPT="$SKILL_ROOT/scripts/context_guard.py"
|
|
6
|
-
HOOK="$SKILL_ROOT/scripts/context_guard_hook.py"
|
|
7
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-summary-XXXXXX")"
|
|
8
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
9
|
-
OUT="$ROOT/out.txt"
|
|
10
|
-
|
|
11
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
12
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
13
|
-
--root "$ROOT" \
|
|
14
|
-
--title "GPU 监控按钮" \
|
|
15
|
-
--entry "点击 GPU 监控按钮" \
|
|
16
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
17
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
18
|
-
|
|
19
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
20
|
-
--root "$ROOT" \
|
|
21
|
-
--chain-id "$CHAIN_ID" \
|
|
22
|
-
--node-title "后端返回监控 URL" \
|
|
23
|
-
--bad-case "BC-20260707-110" \
|
|
24
|
-
--check "grafana_url 不为空" >/dev/null
|
|
25
|
-
|
|
26
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
27
|
-
--root "$ROOT" \
|
|
28
|
-
--chain-id "$CHAIN_ID" \
|
|
29
|
-
--node-title "前端打开监控页" \
|
|
30
|
-
--bad-case "BC-20260707-110" \
|
|
31
|
-
--check "点击后进入监控页" >/dev/null
|
|
32
|
-
|
|
33
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" "$CHAIN_ID" <<'PY'
|
|
34
|
-
from pathlib import Path
|
|
35
|
-
import json
|
|
36
|
-
import sys
|
|
37
|
-
path = Path(sys.argv[1])
|
|
38
|
-
chain_id = sys.argv[2]
|
|
39
|
-
data = json.loads(path.read_text(encoding="utf-8"))
|
|
40
|
-
chain = next(item for item in data["chains"] if item["id"] == chain_id)
|
|
41
|
-
chain["status"] = "approved"
|
|
42
|
-
chain["type"] = "command"
|
|
43
|
-
chain["command"] = "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\\n'"
|
|
44
|
-
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
45
|
-
PY
|
|
46
|
-
|
|
47
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT" 2>&1; then
|
|
48
|
-
cat "$OUT"
|
|
49
|
-
exit 1
|
|
50
|
-
fi
|
|
51
|
-
|
|
52
|
-
grep -q "missing checkpoint marker: 前端打开监控页" "$OUT"
|
|
53
|
-
grep -q "\\[log: " "$OUT"
|
|
54
|
-
|
|
55
|
-
PYTHONPATH="$SKILL_ROOT/scripts" python3 - "$ROOT" "$HOOK" <<'PY'
|
|
56
|
-
from pathlib import Path
|
|
57
|
-
import importlib.util
|
|
58
|
-
import sys
|
|
59
|
-
|
|
60
|
-
root = Path(sys.argv[1])
|
|
61
|
-
hook_path = Path(sys.argv[2])
|
|
62
|
-
spec = importlib.util.spec_from_file_location("context_guard_hook", hook_path)
|
|
63
|
-
module = importlib.util.module_from_spec(spec)
|
|
64
|
-
assert spec.loader is not None
|
|
65
|
-
spec.loader.exec_module(module)
|
|
66
|
-
|
|
67
|
-
details = module.completion_test_failure_details(root)
|
|
68
|
-
assert "failed: GPU 监控按钮" in details
|
|
69
|
-
assert "missing checkpoint marker: 前端打开监控页" in details
|
|
70
|
-
assert "test-hub/runs/" in details
|
|
71
|
-
PY
|
package/tests/BC-20260707-111.sh
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-coverage-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
cat >"$ROOT/.codex/context/bad-cases.md" <<'MD'
|
|
11
|
-
# Bad Case Register
|
|
12
|
-
|
|
13
|
-
### BC-20260707-111: GPU 监控按钮没有打开
|
|
14
|
-
|
|
15
|
-
- Status: resolved
|
|
16
|
-
- Tags: #gpu #ui
|
|
17
|
-
- Display summary: 点击 GPU 监控后没有进入监控页。
|
|
18
|
-
|
|
19
|
-
### BC-20260707-112: 后端没有返回 grafana URL
|
|
20
|
-
|
|
21
|
-
- Status: resolved
|
|
22
|
-
- Tags: #gpu #backend
|
|
23
|
-
- Display summary: job payload 里缺少 grafana_url。
|
|
24
|
-
|
|
25
|
-
### BC-20260707-113: Worker keepalive 丢失
|
|
26
|
-
|
|
27
|
-
- Status: resolved
|
|
28
|
-
- Tags: #worker #lifecycle
|
|
29
|
-
- Display summary: 空闲 worker 没有进入 keepalive_running。
|
|
30
|
-
MD
|
|
31
|
-
|
|
32
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
33
|
-
--root "$ROOT" \
|
|
34
|
-
--title "GPU 监控按钮" \
|
|
35
|
-
--entry "点击 GPU 监控按钮" \
|
|
36
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
37
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
38
|
-
|
|
39
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
40
|
-
--root "$ROOT" \
|
|
41
|
-
--chain-id "$CHAIN_ID" \
|
|
42
|
-
--node-title "后端返回监控 URL" \
|
|
43
|
-
--bad-case "BC-20260707-112" \
|
|
44
|
-
--check "grafana_url 不为空" >/dev/null
|
|
45
|
-
|
|
46
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
47
|
-
--root "$ROOT" \
|
|
48
|
-
--chain-id "$CHAIN_ID" \
|
|
49
|
-
--node-title "前端打开监控页" \
|
|
50
|
-
--bad-case "BC-20260707-111" \
|
|
51
|
-
--check "点击后进入监控页" >/dev/null
|
|
52
|
-
|
|
53
|
-
BEFORE="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
54
|
-
python3 "$SCRIPT" feature-chain-coverage --root "$ROOT" >"$OUT"
|
|
55
|
-
AFTER="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
56
|
-
|
|
57
|
-
grep -q "feature chains: 1" "$OUT"
|
|
58
|
-
grep -q "bad cases in register: 3" "$OUT"
|
|
59
|
-
grep -q "covered by feature chains: 2" "$OUT"
|
|
60
|
-
grep -q "unassigned candidates: 1" "$OUT"
|
|
61
|
-
grep -q "BC-20260707-113" "$OUT"
|
|
62
|
-
if grep -q "BC-20260707-111" "$OUT" && grep -q "candidate: BC-20260707-111" "$OUT"; then
|
|
63
|
-
cat "$OUT"
|
|
64
|
-
exit 1
|
|
65
|
-
fi
|
|
66
|
-
test "$BEFORE" = "$AFTER"
|
|
67
|
-
|
|
68
|
-
python3 "$SCRIPT" feature-chain-coverage --root "$ROOT" --verbose >"$OUT"
|
|
69
|
-
grep -q "checkpoint: 后端返回监控 URL | covers: BC-20260707-112" "$OUT"
|
|
70
|
-
grep -q "checkpoint: 前端打开监控页 | covers: BC-20260707-111" "$OUT"
|
package/tests/BC-20260707-112.sh
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-bc-query-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
cat >"$ROOT/.codex/context/bad-cases.md" <<'MD'
|
|
11
|
-
# Bad Case Register
|
|
12
|
-
|
|
13
|
-
### BC-20260707-112: GPU 监控点击没有打开页面
|
|
14
|
-
|
|
15
|
-
- Status: resolved
|
|
16
|
-
- Tags: #gpu #grafana #ui
|
|
17
|
-
- Display summary: 点击 GPU 监控按钮后,前端没有打开包含 grafana_url 的监控页。
|
|
18
|
-
- Phenomenon: 用户点击 GPU 监控后页面卡住,或者跳转 URL 为空。
|
|
19
|
-
- Trigger / reproduction: job payload 缺少 grafana_url,前端仍把它当成可打开的监控入口。
|
|
20
|
-
- Root cause: 前端把 job 数据当成 GPU URL 的唯一来源,没有检查后端返回值是否有效。
|
|
21
|
-
MD
|
|
22
|
-
|
|
23
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
24
|
-
--root "$ROOT" \
|
|
25
|
-
--title "GPU 监控按钮" \
|
|
26
|
-
--entry "点击 GPU 监控按钮" \
|
|
27
|
-
--exit-check "打开包含有效 grafana_url 的监控页")"
|
|
28
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
29
|
-
|
|
30
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
31
|
-
--root "$ROOT" \
|
|
32
|
-
--chain-id "$CHAIN_ID" \
|
|
33
|
-
--node-title "前端打开 Grafana 监控页" \
|
|
34
|
-
--bad-case "BC-20260707-000" \
|
|
35
|
-
--check "点击后进入 grafana_url 页面" >/dev/null
|
|
36
|
-
|
|
37
|
-
BEFORE="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
38
|
-
python3 "$SCRIPT" feature-chain-suggest --root "$ROOT" --query "BC-20260707-112" >"$OUT"
|
|
39
|
-
AFTER="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
40
|
-
|
|
41
|
-
grep -q "query expanded from bad-case register: BC-20260707-112 GPU 监控点击没有打开页面" "$OUT"
|
|
42
|
-
grep -q "$CHAIN_ID" "$OUT"
|
|
43
|
-
grep -q "GPU 监控按钮" "$OUT"
|
|
44
|
-
grep -q "checkpoint candidate: 前端打开 Grafana 监控页" "$OUT"
|
|
45
|
-
test "$BEFORE" = "$AFTER"
|