@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-113.sh
DELETED
|
@@ -1,73 +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-suggest-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-113: GPU 监控点击没有打开 Grafana 页面
|
|
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
|
-
|
|
21
|
-
### BC-20260707-114: 后端返回监控 URL 为空
|
|
22
|
-
|
|
23
|
-
- Status: resolved
|
|
24
|
-
- Tags: #gpu #backend
|
|
25
|
-
- Display summary: 后端没有给 GPU 监控按钮返回 grafana_url。
|
|
26
|
-
|
|
27
|
-
### BC-20260707-115: Worker keepalive 状态丢失
|
|
28
|
-
|
|
29
|
-
- Status: resolved
|
|
30
|
-
- Tags: #worker #lifecycle
|
|
31
|
-
- Display summary: 空闲 worker 没有进入 keepalive_running。
|
|
32
|
-
MD
|
|
33
|
-
|
|
34
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
35
|
-
--root "$ROOT" \
|
|
36
|
-
--title "GPU 监控按钮" \
|
|
37
|
-
--entry "点击 GPU 监控按钮" \
|
|
38
|
-
--exit-check "打开包含有效 grafana_url 的 Grafana 监控页")"
|
|
39
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
40
|
-
|
|
41
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
42
|
-
--root "$ROOT" \
|
|
43
|
-
--chain-id "$CHAIN_ID" \
|
|
44
|
-
--node-title "后端返回监控 URL" \
|
|
45
|
-
--bad-case "BC-20260707-114" \
|
|
46
|
-
--check "grafana_url 不为空" >/dev/null
|
|
47
|
-
|
|
48
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
49
|
-
--root "$ROOT" \
|
|
50
|
-
--chain-id "$CHAIN_ID" \
|
|
51
|
-
--node-title "前端打开 Grafana 监控页" \
|
|
52
|
-
--bad-case "BC-20260707-000" \
|
|
53
|
-
--check "点击后进入 grafana_url 页面" >/dev/null
|
|
54
|
-
|
|
55
|
-
BEFORE="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
56
|
-
python3 "$SCRIPT" feature-chain-coverage --root "$ROOT" >"$OUT"
|
|
57
|
-
AFTER="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
58
|
-
|
|
59
|
-
grep -q "covered by feature chains: 1" "$OUT"
|
|
60
|
-
grep -q "unassigned candidates: 2" "$OUT"
|
|
61
|
-
grep -q "candidate: BC-20260707-113 | GPU 监控点击没有打开 Grafana 页面" "$OUT"
|
|
62
|
-
grep -q "possible chain: $CHAIN_ID" "$OUT"
|
|
63
|
-
grep -q "possible checkpoint: 前端打开 Grafana 监控页" "$OUT"
|
|
64
|
-
grep -q "match evidence:" "$OUT"
|
|
65
|
-
grep -q "grafana" "$OUT"
|
|
66
|
-
grep -q "candidate: BC-20260707-115 | Worker keepalive 状态丢失" "$OUT"
|
|
67
|
-
if awk '/candidate: BC-20260707-115/{flag=1; next} flag && /possible chain/{exit 1} flag && /registry:/{exit 0}' "$OUT"; then
|
|
68
|
-
:
|
|
69
|
-
else
|
|
70
|
-
cat "$OUT"
|
|
71
|
-
exit 1
|
|
72
|
-
fi
|
|
73
|
-
test "$BEFORE" = "$AFTER"
|
package/tests/BC-20260707-115.sh
DELETED
|
@@ -1,77 +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-plan-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
STRONG_OUT="$ROOT/strong.txt"
|
|
8
|
-
WEAK_OUT="$ROOT/weak.txt"
|
|
9
|
-
|
|
10
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
11
|
-
cat >"$ROOT/.codex/context/bad-cases.md" <<'MD'
|
|
12
|
-
# Bad Case Register
|
|
13
|
-
|
|
14
|
-
### BC-20260707-115: GPU 监控点击没有打开 Grafana 页面
|
|
15
|
-
|
|
16
|
-
- Status: resolved
|
|
17
|
-
- Tags: #gpu #grafana #ui
|
|
18
|
-
- Display summary: 点击 GPU 监控按钮后,前端没有打开包含 grafana_url 的监控页。
|
|
19
|
-
- Phenomenon: 用户点击 GPU 监控后页面卡住,或者跳转 URL 为空。
|
|
20
|
-
- Trigger / reproduction: job payload 缺少 grafana_url,前端仍把它当成可打开的监控入口。
|
|
21
|
-
|
|
22
|
-
### BC-20260707-116: Worker keepalive 状态丢失
|
|
23
|
-
|
|
24
|
-
- Status: resolved
|
|
25
|
-
- Tags: #worker #lifecycle
|
|
26
|
-
- Display summary: 空闲 worker 没有进入 keepalive_running。
|
|
27
|
-
MD
|
|
28
|
-
|
|
29
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
30
|
-
--root "$ROOT" \
|
|
31
|
-
--title "GPU 监控按钮" \
|
|
32
|
-
--entry "点击 GPU 监控按钮" \
|
|
33
|
-
--exit-check "打开包含有效 grafana_url 的 Grafana 监控页")"
|
|
34
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
35
|
-
|
|
36
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
37
|
-
--root "$ROOT" \
|
|
38
|
-
--chain-id "$CHAIN_ID" \
|
|
39
|
-
--node-title "前端打开 Grafana 监控页" \
|
|
40
|
-
--bad-case "BC-20260707-115" \
|
|
41
|
-
--check "点击后进入 grafana_url 页面" >/dev/null
|
|
42
|
-
|
|
43
|
-
BEFORE="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
44
|
-
python3 "$SCRIPT" feature-chain-plan --root "$ROOT" --query "BC-20260707-115" >"$STRONG_OUT"
|
|
45
|
-
python3 "$SCRIPT" feature-chain-plan --root "$ROOT" --query "BC-20260707-116" >"$WEAK_OUT"
|
|
46
|
-
AFTER="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
47
|
-
|
|
48
|
-
grep -q "action: review-existing-chain" "$STRONG_OUT"
|
|
49
|
-
grep -q "chain: $CHAIN_ID" "$STRONG_OUT"
|
|
50
|
-
grep -q "checkpoint: 前端打开 Grafana 监控页" "$STRONG_OUT"
|
|
51
|
-
grep -q "match evidence:" "$STRONG_OUT"
|
|
52
|
-
grep -q "after-confirmation command: .*feature-chain-attach-bc" "$STRONG_OUT"
|
|
53
|
-
grep -q -- "--bad-case BC-20260707-115" "$STRONG_OUT"
|
|
54
|
-
grep -q "tighten checkpoint based on confirmed symptom" "$STRONG_OUT"
|
|
55
|
-
grep -q "next: if the user confirms the match" "$STRONG_OUT"
|
|
56
|
-
|
|
57
|
-
grep -q "action: propose-new-chain" "$WEAK_OUT"
|
|
58
|
-
grep -q "confirmation prompt: 测试创建识别" "$WEAK_OUT"
|
|
59
|
-
grep -q "Worker keepalive 状态丢失" "$WEAK_OUT"
|
|
60
|
-
grep -q "after-confirmation command: .*feature-chain-propose" "$WEAK_OUT"
|
|
61
|
-
grep -q "confirmed feature title" "$WEAK_OUT"
|
|
62
|
-
grep -q -- "--node-title 'Worker keepalive 状态丢失'" "$WEAK_OUT"
|
|
63
|
-
grep -q -- "--bad-cases BC-20260707-116" "$WEAK_OUT"
|
|
64
|
-
if grep -q "after-confirmation command: .*feature-chain-add" "$WEAK_OUT"; then
|
|
65
|
-
cat "$WEAK_OUT"
|
|
66
|
-
exit 1
|
|
67
|
-
fi
|
|
68
|
-
if grep -q "从「BC-20260707-116」相关入口" "$WEAK_OUT"; then
|
|
69
|
-
cat "$WEAK_OUT"
|
|
70
|
-
exit 1
|
|
71
|
-
fi
|
|
72
|
-
if grep -q "action: review-existing-chain" "$WEAK_OUT"; then
|
|
73
|
-
cat "$WEAK_OUT"
|
|
74
|
-
exit 1
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
|
-
test "$BEFORE" = "$AFTER"
|
package/tests/BC-20260707-116.sh
DELETED
|
@@ -1,77 +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-candidates-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-116: Roadmap 卡片标题看不懂
|
|
14
|
-
|
|
15
|
-
- Status: resolved
|
|
16
|
-
- Tags: #roadmap-ux #readability
|
|
17
|
-
- Display summary: 路线图卡片标题像实现日志,不像用户任务。
|
|
18
|
-
|
|
19
|
-
### BC-20260707-117: Roadmap 详情页太啰嗦
|
|
20
|
-
|
|
21
|
-
- Status: resolved
|
|
22
|
-
- Tags: #roadmap-ux #readability
|
|
23
|
-
- Display summary: 点击节点后看到太多字段,无法快速理解任务。
|
|
24
|
-
|
|
25
|
-
### BC-20260707-118: Context 没有在新会话恢复
|
|
26
|
-
|
|
27
|
-
- Status: resolved
|
|
28
|
-
- Tags: #context-loss
|
|
29
|
-
- Display summary: 新会话不知道之前已经讨论过的路线。
|
|
30
|
-
|
|
31
|
-
### BC-20260707-119: Context 写到远程服务器路径
|
|
32
|
-
|
|
33
|
-
- Status: resolved
|
|
34
|
-
- Tags: #context-loss #remote
|
|
35
|
-
- Display summary: SSH 开发时 context 被写到远程路径。
|
|
36
|
-
|
|
37
|
-
### BC-20260707-120: 已覆盖的 roadmap 旧问题
|
|
38
|
-
|
|
39
|
-
- Status: resolved
|
|
40
|
-
- Tags: #roadmap-ux
|
|
41
|
-
- Display summary: 已经挂到功能链的旧路线图问题。
|
|
42
|
-
MD
|
|
43
|
-
|
|
44
|
-
ADD_OUTPUT="$(python3 "$SCRIPT" feature-chain-add \
|
|
45
|
-
--root "$ROOT" \
|
|
46
|
-
--title "路线图展示体验" \
|
|
47
|
-
--entry "打开 roadmap.html" \
|
|
48
|
-
--exit-check "用户能快速看懂路线图节点")"
|
|
49
|
-
CHAIN_ID="$(printf '%s\n' "$ADD_OUTPUT" | sed -n 's/.*feature chain: //p')"
|
|
50
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
51
|
-
--root "$ROOT" \
|
|
52
|
-
--chain-id "$CHAIN_ID" \
|
|
53
|
-
--node-title "路线图卡片可读" \
|
|
54
|
-
--bad-case "BC-20260707-120" \
|
|
55
|
-
--check "卡片标题能直接说明任务" >/dev/null
|
|
56
|
-
|
|
57
|
-
BEFORE="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
58
|
-
python3 "$SCRIPT" feature-chain-candidates --root "$ROOT" --min-cases 2 >"$OUT"
|
|
59
|
-
AFTER="$(cat "$ROOT/.codex/context/test-hub/feature-chains.json")"
|
|
60
|
-
|
|
61
|
-
grep -q "feature-chain candidates" "$OUT"
|
|
62
|
-
grep -q "candidate chain: 路线图展示体验 / 可读性 | 2 unassigned bad cases | new coverage: 2 | tags: #roadmap-ux, #readability" "$OUT"
|
|
63
|
-
grep -q "candidate chain: Context 持久化 | 2 unassigned bad cases | new coverage: 2 | tags: #context-loss" "$OUT"
|
|
64
|
-
grep -q "confirmation prompt: 测试创建识别" "$OUT"
|
|
65
|
-
grep -q "BC-20260707-116" "$OUT"
|
|
66
|
-
grep -q "BC-20260707-117" "$OUT"
|
|
67
|
-
grep -q "BC-20260707-118" "$OUT"
|
|
68
|
-
grep -q "BC-20260707-119" "$OUT"
|
|
69
|
-
if grep -q "BC-20260707-120" "$OUT"; then
|
|
70
|
-
cat "$OUT"
|
|
71
|
-
exit 1
|
|
72
|
-
fi
|
|
73
|
-
if grep -q "candidate chain: 路线图展示体验 | 2 unassigned bad cases | tags: #roadmap-ux" "$OUT"; then
|
|
74
|
-
cat "$OUT"
|
|
75
|
-
exit 1
|
|
76
|
-
fi
|
|
77
|
-
test "$BEFORE" = "$AFTER"
|
package/tests/BC-20260707-118.sh
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py}"
|
|
5
|
-
ROOT_FAIL="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-closed-loop-fail-XXXXXX")"
|
|
6
|
-
ROOT_PASS="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-closed-loop-pass-XXXXXX")"
|
|
7
|
-
trap 'rm -rf "$ROOT_FAIL" "$ROOT_PASS"' EXIT
|
|
8
|
-
OUT="$ROOT_FAIL/out.txt"
|
|
9
|
-
|
|
10
|
-
create_chain() {
|
|
11
|
-
local root="$1"
|
|
12
|
-
local command_text="$2"
|
|
13
|
-
local mode="${3:-approve}"
|
|
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 "Markdown 公式预览" \
|
|
19
|
-
--entry "输入包含单行、多行和矩阵公式的 Markdown" \
|
|
20
|
-
--exit-check "预览区完成 MathJax 渲染且没有空白或错误占位")"
|
|
21
|
-
local chain_id
|
|
22
|
-
chain_id="$(printf '%s\n' "$add_output" | sed -n 's/.*feature chain: //p')"
|
|
23
|
-
test -n "$chain_id"
|
|
24
|
-
|
|
25
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
26
|
-
--root "$root" \
|
|
27
|
-
--chain-id "$chain_id" \
|
|
28
|
-
--node-title "公式输入进入预览流程" \
|
|
29
|
-
--bad-case "BC-20260707-118-input" \
|
|
30
|
-
--check "单行、多行和矩阵公式都进入同一预览流程" >/dev/null
|
|
31
|
-
|
|
32
|
-
python3 "$SCRIPT" feature-chain-attach-bc \
|
|
33
|
-
--root "$root" \
|
|
34
|
-
--chain-id "$chain_id" \
|
|
35
|
-
--node-title "MathJax 渲染完成" \
|
|
36
|
-
--bad-case "BC-20260707-118-render" \
|
|
37
|
-
--check "预览区展示渲染后的公式且没有空白或错误占位" >/dev/null
|
|
38
|
-
|
|
39
|
-
if [[ "$mode" == "direct-approved" ]]; then
|
|
40
|
-
python3 - "$root/.codex/context/test-hub/feature-chains.json" "$chain_id" "$command_text" <<'PY'
|
|
41
|
-
from pathlib import Path
|
|
42
|
-
import json
|
|
43
|
-
import sys
|
|
44
|
-
path = Path(sys.argv[1])
|
|
45
|
-
chain_id = sys.argv[2]
|
|
46
|
-
command = sys.argv[3]
|
|
47
|
-
data = json.loads(path.read_text(encoding="utf-8"))
|
|
48
|
-
chain = next(item for item in data["chains"] if item["id"] == chain_id)
|
|
49
|
-
chain["status"] = "approved"
|
|
50
|
-
chain["type"] = "command"
|
|
51
|
-
chain["command"] = command
|
|
52
|
-
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
|
53
|
-
PY
|
|
54
|
-
else
|
|
55
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
56
|
-
--root "$root" \
|
|
57
|
-
--chain-id "$chain_id" \
|
|
58
|
-
--command-text "$command_text" >/dev/null
|
|
59
|
-
fi
|
|
60
|
-
|
|
61
|
-
python3 "$SCRIPT" validate-feature-chains --root "$root" | grep -q "feature-chain validation passed"
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
FAIL_COMMAND='printf "CG_CHECKPOINT:公式输入进入预览流程:PASS\nCG_CHECKPOINT:MathJax 渲染完成:FAIL:预览区为空\n"; printf "render empty\n" > "$CONTEXT_GUARD_TEST_RUN_DIR/render-diagnostic.txt"'
|
|
65
|
-
create_chain "$ROOT_FAIL" "$FAIL_COMMAND" direct-approved
|
|
66
|
-
|
|
67
|
-
if python3 "$SCRIPT" dev-complete --root "$ROOT_FAIL" >"$OUT" 2>&1; then
|
|
68
|
-
cat "$OUT"
|
|
69
|
-
exit 1
|
|
70
|
-
fi
|
|
71
|
-
grep -q "0 passed, 1 failed, 0 blocked" "$OUT"
|
|
72
|
-
grep -q "checkpoint failed: MathJax 渲染完成 - 预览区为空" "$OUT"
|
|
73
|
-
grep -q "evidence preserved" "$OUT"
|
|
74
|
-
|
|
75
|
-
python3 - "$ROOT_FAIL/.codex/context/test-hub/last-run.json" <<'PY'
|
|
76
|
-
from pathlib import Path
|
|
77
|
-
import json
|
|
78
|
-
import sys
|
|
79
|
-
|
|
80
|
-
run = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
81
|
-
result = run["results"][0]
|
|
82
|
-
assert result["status"] == "failed"
|
|
83
|
-
assert result["reason"] == "checkpoint failed: MathJax 渲染完成 - 预览区为空"
|
|
84
|
-
assert [item["label"] for item in result["checkpoints"]] == ["公式输入进入预览流程", "MathJax 渲染完成"]
|
|
85
|
-
log_path = Path(result["log"])
|
|
86
|
-
run_dir = log_path.parent
|
|
87
|
-
assert run_dir.exists(), run_dir
|
|
88
|
-
assert (run_dir / "render-diagnostic.txt").exists()
|
|
89
|
-
PY
|
|
90
|
-
|
|
91
|
-
PASS_COMMAND='tmp=.codex/context/test-hub/feature-chain-closed-loop.tmp; printf "CG_CHECKPOINT:公式输入进入预览流程:PASS\nCG_CHECKPOINT:MathJax 渲染完成:PASS\n" > "$tmp"; cat "$tmp"; rm -f "$tmp"'
|
|
92
|
-
create_chain "$ROOT_PASS" "$PASS_COMMAND"
|
|
93
|
-
|
|
94
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT_PASS" >"$OUT"
|
|
95
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
96
|
-
grep -q "success artifacts cleaned" "$OUT"
|
|
97
|
-
test ! -e "$ROOT_PASS/.codex/context/test-hub/feature-chain-closed-loop.tmp"
|
|
98
|
-
if find "$ROOT_PASS/.codex/context/test-hub/runs" -mindepth 1 -maxdepth 1 2>/dev/null | grep -q .; then
|
|
99
|
-
find "$ROOT_PASS/.codex/context/test-hub/runs" -mindepth 1 -maxdepth 1
|
|
100
|
-
exit 1
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
python3 - "$ROOT_PASS/.codex/context/test-hub/feature-chains.json" "$ROOT_PASS/.codex/context/test-hub/last-run.json" <<'PY'
|
|
104
|
-
from pathlib import Path
|
|
105
|
-
import json
|
|
106
|
-
import sys
|
|
107
|
-
|
|
108
|
-
registry = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
109
|
-
chain = registry["chains"][0]
|
|
110
|
-
covered = sorted(bc for node in chain["nodes"] for bc in node["bad_cases"])
|
|
111
|
-
assert covered == ["BC-20260707-118-input", "BC-20260707-118-render"]
|
|
112
|
-
result = json.loads(Path(sys.argv[2]).read_text(encoding="utf-8"))["results"][0]
|
|
113
|
-
assert result["status"] == "passed"
|
|
114
|
-
assert result["missing_checkpoints"] == []
|
|
115
|
-
PY
|
package/tests/BC-20260707-119.sh
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
SCRIPT="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/scripts/context_guard.py}"
|
|
5
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-chain-propose-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/out.txt"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
|
|
11
|
-
python3 "$SCRIPT" feature-chain-propose \
|
|
12
|
-
--root "$ROOT" \
|
|
13
|
-
--title "路线图节点阅读" \
|
|
14
|
-
--entry "用户点击路线图节点" \
|
|
15
|
-
--exit-check "节点详情页用自然语言展示用户问题、相关 bad case、方法和进度" \
|
|
16
|
-
--node-title "节点详情可读" \
|
|
17
|
-
--bad-cases "BC-20260707-119-title, BC-20260707-119-detail" \
|
|
18
|
-
--check "详情页能一眼看懂节点对应任务" >"$OUT"
|
|
19
|
-
|
|
20
|
-
grep -q "feature chain proposed:" "$OUT"
|
|
21
|
-
grep -q "status: proposed; this chain is not executable and will not run in dev-complete" "$OUT"
|
|
22
|
-
grep -q "checkpoint: 节点详情可读 | covers BC-20260707-119-title, BC-20260707-119-detail" "$OUT"
|
|
23
|
-
grep -q "next: after the user confirms the automation" "$OUT"
|
|
24
|
-
|
|
25
|
-
python3 "$SCRIPT" validate-feature-chains --root "$ROOT" >"$OUT"
|
|
26
|
-
grep -q "feature-chain validation passed: 1 chain(s), 0 warning(s)" "$OUT"
|
|
27
|
-
|
|
28
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT"
|
|
29
|
-
grep -q "test hub: no approved every-dev-completion tests" "$OUT"
|
|
30
|
-
|
|
31
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
32
|
-
from pathlib import Path
|
|
33
|
-
import json
|
|
34
|
-
import sys
|
|
35
|
-
|
|
36
|
-
registry = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
37
|
-
chain = registry["chains"][0]
|
|
38
|
-
assert chain["status"] == "proposed"
|
|
39
|
-
assert chain["type"] == "manual"
|
|
40
|
-
assert chain["command"] == ""
|
|
41
|
-
assert chain["run_policy"] == "every-dev-completion"
|
|
42
|
-
assert chain["proposal_note"].startswith("Human-confirmed draft only")
|
|
43
|
-
node = chain["nodes"][0]
|
|
44
|
-
assert node["title"] == "节点详情可读"
|
|
45
|
-
assert node["bad_cases"] == ["BC-20260707-119-title", "BC-20260707-119-detail"]
|
|
46
|
-
assert node["checks"] == ["详情页能一眼看懂节点对应任务"]
|
|
47
|
-
PY
|
package/tests/BC-20260707-120.sh
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-feature-dry-run.XXXXXX")"
|
|
5
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
6
|
-
|
|
7
|
-
SCRIPT="/Users/bytedance/.agents/skills/context-guard/scripts/context_guard.py"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
python3 "$SCRIPT" set-language --root "$ROOT" --language zh >/dev/null
|
|
11
|
-
|
|
12
|
-
python3 "$SCRIPT" feature-chain-propose \
|
|
13
|
-
--root "$ROOT" \
|
|
14
|
-
--title "Markdown 公式预览" \
|
|
15
|
-
--entry "在编辑器输入公式" \
|
|
16
|
-
--exit-check "预览区正确渲染公式" \
|
|
17
|
-
--node-title "公式渲染完成" \
|
|
18
|
-
--bad-cases "BC-TEST-001, BC-TEST-002" \
|
|
19
|
-
--check "确认单行和多行公式都进入渲染结果" >/dev/null
|
|
20
|
-
|
|
21
|
-
PASS_OUTPUT="$(
|
|
22
|
-
python3 "$SCRIPT" feature-chain-dry-run \
|
|
23
|
-
--root "$ROOT" \
|
|
24
|
-
--chain-id FC-20260707-001 \
|
|
25
|
-
--command-text "printf 'CG_CHECKPOINT:公式渲染完成:PASS\n'"
|
|
26
|
-
)"
|
|
27
|
-
|
|
28
|
-
grep -q "feature-chain dry run: passed" <<<"$PASS_OUTPUT"
|
|
29
|
-
grep -q "checkpoint pass: 公式渲染完成" <<<"$PASS_OUTPUT"
|
|
30
|
-
grep -q "dry-run success artifacts cleaned" <<<"$PASS_OUTPUT"
|
|
31
|
-
|
|
32
|
-
set +e
|
|
33
|
-
FAIL_OUTPUT="$(
|
|
34
|
-
python3 "$SCRIPT" feature-chain-dry-run \
|
|
35
|
-
--root "$ROOT" \
|
|
36
|
-
--chain-id FC-20260707-001 \
|
|
37
|
-
--command-text "true" 2>&1
|
|
38
|
-
)"
|
|
39
|
-
FAIL_STATUS=$?
|
|
40
|
-
set -e
|
|
41
|
-
|
|
42
|
-
test "$FAIL_STATUS" -ne 0
|
|
43
|
-
grep -q "feature-chain dry run: failed" <<<"$FAIL_OUTPUT"
|
|
44
|
-
grep -q "missing checkpoint marker: 公式渲染完成" <<<"$FAIL_OUTPUT"
|
|
45
|
-
grep -q "dry-run evidence preserved" <<<"$FAIL_OUTPUT"
|
|
46
|
-
|
|
47
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
48
|
-
import json
|
|
49
|
-
import sys
|
|
50
|
-
path = sys.argv[1]
|
|
51
|
-
data = json.load(open(path, encoding="utf-8"))
|
|
52
|
-
chain = data["chains"][0]
|
|
53
|
-
assert chain["status"] == "proposed", chain
|
|
54
|
-
assert chain["type"] == "manual", chain
|
|
55
|
-
assert chain["command"] == "", chain
|
|
56
|
-
assert chain["nodes"][0]["bad_cases"] == ["BC-TEST-001", "BC-TEST-002"], chain
|
|
57
|
-
PY
|
|
58
|
-
|
|
59
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" | grep -q "no approved every-dev-completion tests"
|
|
60
|
-
test -f "$ROOT/.codex/context/test-hub/last-dry-run.json"
|
package/tests/BC-20260707-121.sh
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-approval-preflight.XXXXXX")"
|
|
5
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
6
|
-
|
|
7
|
-
SCRIPT="/Users/bytedance/.agents/skills/context-guard/scripts/context_guard.py"
|
|
8
|
-
OUT="$ROOT/out.txt"
|
|
9
|
-
|
|
10
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
11
|
-
python3 "$SCRIPT" set-language --root "$ROOT" --language zh >/dev/null
|
|
12
|
-
|
|
13
|
-
python3 "$SCRIPT" feature-chain-propose \
|
|
14
|
-
--root "$ROOT" \
|
|
15
|
-
--title "Markdown 公式预览" \
|
|
16
|
-
--entry "在编辑器输入公式" \
|
|
17
|
-
--exit-check "预览区正确渲染公式" \
|
|
18
|
-
--node-title "公式渲染完成" \
|
|
19
|
-
--bad-cases "BC-TEST-001" \
|
|
20
|
-
--check "确认公式进入渲染结果" >/dev/null
|
|
21
|
-
|
|
22
|
-
set +e
|
|
23
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
24
|
-
--root "$ROOT" \
|
|
25
|
-
--chain-id FC-20260707-001 \
|
|
26
|
-
--command-text "true" >"$OUT" 2>&1
|
|
27
|
-
STATUS=$?
|
|
28
|
-
set -e
|
|
29
|
-
|
|
30
|
-
test "$STATUS" -ne 0
|
|
31
|
-
grep -q "approval dry-run failed" "$OUT"
|
|
32
|
-
grep -q "missing checkpoint marker: 公式渲染完成" "$OUT"
|
|
33
|
-
grep -q "requires a passing dry run before approval" "$OUT"
|
|
34
|
-
|
|
35
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
36
|
-
import json
|
|
37
|
-
import sys
|
|
38
|
-
chain = json.load(open(sys.argv[1], encoding="utf-8"))["chains"][0]
|
|
39
|
-
assert chain["status"] == "proposed", chain
|
|
40
|
-
assert chain["type"] == "manual", chain
|
|
41
|
-
assert chain["command"] == "", chain
|
|
42
|
-
PY
|
|
43
|
-
|
|
44
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" | grep -q "no approved every-dev-completion tests"
|
|
45
|
-
test -f "$ROOT/.codex/context/test-hub/last-approval-dry-run.json"
|
|
46
|
-
|
|
47
|
-
python3 "$SCRIPT" feature-chain-approve \
|
|
48
|
-
--root "$ROOT" \
|
|
49
|
-
--chain-id FC-20260707-001 \
|
|
50
|
-
--command-text "printf 'CG_CHECKPOINT:公式渲染完成:PASS\n'" >"$OUT"
|
|
51
|
-
|
|
52
|
-
grep -q "feature chain approved" "$OUT"
|
|
53
|
-
grep -q "approval dry-run: passed" "$OUT"
|
|
54
|
-
|
|
55
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
56
|
-
import json
|
|
57
|
-
import sys
|
|
58
|
-
chain = json.load(open(sys.argv[1], encoding="utf-8"))["chains"][0]
|
|
59
|
-
assert chain["status"] == "approved", chain
|
|
60
|
-
assert chain["type"] == "command", chain
|
|
61
|
-
assert "CG_CHECKPOINT:公式渲染完成:PASS" in chain["command"], chain
|
|
62
|
-
PY
|
|
63
|
-
|
|
64
|
-
python3 "$SCRIPT" dev-complete --root "$ROOT" >"$OUT"
|
|
65
|
-
grep -q "1 passed, 0 failed, 0 blocked" "$OUT"
|
|
66
|
-
grep -q "success artifacts cleaned" "$OUT"
|
package/tests/BC-20260707-122.sh
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
ROOT="$(mktemp -d "${TMPDIR:-/tmp}/context-guard-add-approved-bypass.XXXXXX")"
|
|
5
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
6
|
-
|
|
7
|
-
SCRIPT="/Users/bytedance/.agents/skills/context-guard/scripts/context_guard.py"
|
|
8
|
-
OUT="$ROOT/out.txt"
|
|
9
|
-
|
|
10
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
11
|
-
|
|
12
|
-
set +e
|
|
13
|
-
python3 "$SCRIPT" feature-chain-add \
|
|
14
|
-
--root "$ROOT" \
|
|
15
|
-
--title "GPU 监控按钮" \
|
|
16
|
-
--entry "点击 GPU 监控按钮" \
|
|
17
|
-
--exit-check "打开监控页" \
|
|
18
|
-
--command-text "printf 'CG_CHECKPOINT:后端返回监控 URL:PASS\n'" \
|
|
19
|
-
--test-status approved >"$OUT" 2>&1
|
|
20
|
-
STATUS=$?
|
|
21
|
-
set -e
|
|
22
|
-
|
|
23
|
-
test "$STATUS" -ne 0
|
|
24
|
-
grep -q "feature-chain-add cannot create approved every-dev-completion chains" "$OUT"
|
|
25
|
-
|
|
26
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
27
|
-
from pathlib import Path
|
|
28
|
-
import json
|
|
29
|
-
import sys
|
|
30
|
-
path = Path(sys.argv[1])
|
|
31
|
-
data = json.loads(path.read_text(encoding="utf-8")) if path.exists() else {"chains": []}
|
|
32
|
-
assert data["chains"] == [], data
|
|
33
|
-
PY
|
|
34
|
-
|
|
35
|
-
python3 "$SCRIPT" feature-chain-add \
|
|
36
|
-
--root "$ROOT" \
|
|
37
|
-
--title "GPU 监控按钮" \
|
|
38
|
-
--entry "点击 GPU 监控按钮" \
|
|
39
|
-
--exit-check "打开监控页" >"$OUT"
|
|
40
|
-
grep -q "feature chain:" "$OUT"
|
|
41
|
-
|
|
42
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
43
|
-
import json
|
|
44
|
-
import sys
|
|
45
|
-
chain = json.load(open(sys.argv[1], encoding="utf-8"))["chains"][0]
|
|
46
|
-
assert chain["status"] == "proposed", chain
|
|
47
|
-
assert chain["command"] == "", chain
|
|
48
|
-
PY
|
package/tests/BC-20260707-123.sh
DELETED
|
@@ -1,43 +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-natural-test-intake-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/plan.out"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
|
|
11
|
-
python3 "$SCRIPT" feature-chain-plan \
|
|
12
|
-
--root "$ROOT" \
|
|
13
|
-
--query "写一个测试,检验每次开发完成后 Markdown 编辑器里的单行、多行和矩阵公式都能正常渲染" >"$OUT"
|
|
14
|
-
|
|
15
|
-
grep -q "action: propose-new-chain" "$OUT"
|
|
16
|
-
grep -q "confirmation prompt: 测试创建识别" "$OUT"
|
|
17
|
-
grep -q "Markdown 编辑器里的单行、多行和矩阵公式能正常渲染" "$OUT"
|
|
18
|
-
grep -q "after-confirmation command: .*feature-chain-propose" "$OUT"
|
|
19
|
-
grep -q -- "--node-title '<confirmed recurrence checkpoint>'" "$OUT"
|
|
20
|
-
grep -q -- "--coverage-pending-reason '<confirmed reason this chain has no linked bad case yet>'" "$OUT"
|
|
21
|
-
if grep -q "after-confirmation command: .*feature-chain-add" "$OUT"; then
|
|
22
|
-
cat "$OUT"
|
|
23
|
-
exit 1
|
|
24
|
-
fi
|
|
25
|
-
|
|
26
|
-
if grep -q "confirmation prompt: .*从「写一个测试" "$OUT"; then
|
|
27
|
-
cat "$OUT"
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
if grep -q "confirmation prompt: .*每次开发完成后 Markdown" "$OUT"; then
|
|
31
|
-
cat "$OUT"
|
|
32
|
-
exit 1
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
36
|
-
from pathlib import Path
|
|
37
|
-
import json
|
|
38
|
-
import sys
|
|
39
|
-
|
|
40
|
-
path = Path(sys.argv[1])
|
|
41
|
-
data = json.loads(path.read_text(encoding="utf-8")) if path.exists() else {"chains": []}
|
|
42
|
-
assert data.get("chains", []) == [], data
|
|
43
|
-
PY
|
package/tests/BC-20260707-124.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-from-to-intake-XXXXXX")"
|
|
6
|
-
trap 'rm -rf "$ROOT"' EXIT
|
|
7
|
-
OUT="$ROOT/plan.out"
|
|
8
|
-
|
|
9
|
-
python3 "$SCRIPT" init --root "$ROOT" >/dev/null
|
|
10
|
-
|
|
11
|
-
python3 "$SCRIPT" feature-chain-plan \
|
|
12
|
-
--root "$ROOT" \
|
|
13
|
-
--query "创建一个测试任务:从编辑器输入 Markdown 到预览正确渲染,主要验证公式渲染回归" >"$OUT"
|
|
14
|
-
|
|
15
|
-
grep -q "action: propose-new-chain" "$OUT"
|
|
16
|
-
grep -q "confirmation prompt: 测试创建识别" "$OUT"
|
|
17
|
-
grep -q "从「编辑器输入 Markdown」到「预览正确渲染」" "$OUT"
|
|
18
|
-
grep -q "主要验证「公式渲染回归」" "$OUT"
|
|
19
|
-
grep -q "suggested checkpoint after confirmation: 公式渲染回归" "$OUT"
|
|
20
|
-
grep -q "after-confirmation command: .*feature-chain-propose" "$OUT"
|
|
21
|
-
grep -q -- "--entry '编辑器输入 Markdown'" "$OUT"
|
|
22
|
-
grep -q -- "--exit-check '预览正确渲染'" "$OUT"
|
|
23
|
-
grep -q -- "--node-title '公式渲染回归'" "$OUT"
|
|
24
|
-
grep -q -- "--check '<confirmed checkpoint check>'" "$OUT"
|
|
25
|
-
grep -q -- "--coverage-pending-reason '<confirmed reason this chain has no linked bad case yet>'" "$OUT"
|
|
26
|
-
if grep -q "after-confirmation command: .*feature-chain-add" "$OUT"; then
|
|
27
|
-
cat "$OUT"
|
|
28
|
-
exit 1
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
if grep -q "从「创建一个测试任务" "$OUT"; then
|
|
32
|
-
cat "$OUT"
|
|
33
|
-
exit 1
|
|
34
|
-
fi
|
|
35
|
-
if grep -q "相关入口到用户可见的正确结果" "$OUT"; then
|
|
36
|
-
cat "$OUT"
|
|
37
|
-
exit 1
|
|
38
|
-
fi
|
|
39
|
-
if grep -q "<confirmed user-visible entry>" "$OUT"; then
|
|
40
|
-
cat "$OUT"
|
|
41
|
-
exit 1
|
|
42
|
-
fi
|
|
43
|
-
if grep -q "<confirmed strict final green condition>" "$OUT"; then
|
|
44
|
-
cat "$OUT"
|
|
45
|
-
exit 1
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
python3 - "$ROOT/.codex/context/test-hub/feature-chains.json" <<'PY'
|
|
49
|
-
from pathlib import Path
|
|
50
|
-
import json
|
|
51
|
-
import sys
|
|
52
|
-
|
|
53
|
-
path = Path(sys.argv[1])
|
|
54
|
-
data = json.loads(path.read_text(encoding="utf-8")) if path.exists() else {"chains": []}
|
|
55
|
-
assert data.get("chains", []) == [], data
|
|
56
|
-
PY
|