@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.
Files changed (161) hide show
  1. package/Coordinator.md +88 -0
  2. package/Executor.md +53 -0
  3. package/README.md +89 -224
  4. package/README.zh-CN.md +89 -224
  5. package/SKILL.md +26 -684
  6. package/THIRD_PARTY_NOTICES.md +47 -0
  7. package/Tester.md +53 -0
  8. package/agents/openai.yaml +2 -2
  9. package/bin/build-runtime.mjs +96 -0
  10. package/bin/context-guard-skill.js +399 -78
  11. package/bin/postinstall.js +2 -2
  12. package/hooks.json +89 -13
  13. package/licenses/JSONParse-MIT.txt +24 -0
  14. package/licenses/Marked-MIT.txt +44 -0
  15. package/licenses/Portless-Apache-2.0.txt +201 -0
  16. package/package.json +35 -6
  17. package/prototype/LICENSES/Marked-MIT.txt +44 -0
  18. package/prototype/LICENSES/Ready-redistribution.txt +14 -0
  19. package/prototype/attachments.mjs +75 -0
  20. package/prototype/coordinator-markdown.mjs +283 -0
  21. package/prototype/coordinator-working-blot.mjs +124 -0
  22. package/prototype/vendor/marked.mjs +2189 -0
  23. package/prototype/workbench-app.js +5197 -0
  24. package/prototype/workbench-data.js +33 -0
  25. package/prototype/workbench-sync.mjs +898 -0
  26. package/prototype/workbench.css +1050 -0
  27. package/prototype/workbench.html +211 -0
  28. package/prototype/working-blot-atlas.png +0 -0
  29. package/references/agent-handoff.md +40 -0
  30. package/references/claude-runtime.md +120 -0
  31. package/references/cloud-sync-interface.md +66 -0
  32. package/references/design-current.md +14 -0
  33. package/references/map-mount.md +41 -0
  34. package/references/map-read.md +50 -0
  35. package/references/memory-definition.md +120 -0
  36. package/references/memory-filesystem-v2/Bug.en.md +162 -0
  37. package/references/memory-filesystem-v2/Bug.md +162 -0
  38. package/references/memory-filesystem-v2/Bug_Coordinater.md +8 -0
  39. package/references/memory-filesystem-v2/Bug_Executor.md +8 -0
  40. package/references/memory-filesystem-v2/Bug_Tester.md +7 -0
  41. package/references/memory-filesystem-v2/Idea.en.md +36 -0
  42. package/references/memory-filesystem-v2/Idea.md +36 -0
  43. package/references/memory-filesystem-v2/Node_Module_Index.en.md +88 -0
  44. package/references/memory-filesystem-v2/Node_Module_Index.md +88 -0
  45. package/references/memory-filesystem-v2/README.md +60 -0
  46. package/references/memory-filesystem-v2/Todo.en.md +137 -0
  47. package/references/memory-filesystem-v2/Todo.md +137 -0
  48. package/references/memory-filesystem-v2/Todo_Coordinater.md +7 -0
  49. package/references/memory-filesystem-v2/Todo_Executor.md +7 -0
  50. package/references/memory-filesystem-v2/Todo_Tester.md +7 -0
  51. package/references/named-workbench.md +124 -0
  52. package/references/plan-review.md +12 -0
  53. package/references/server-memory.md +276 -0
  54. package/references/test-check.md +7 -0
  55. package/references/user-reply.md +38 -0
  56. package/references/workbench-interface.md +531 -0
  57. package/roles.md +13 -0
  58. package/scripts/context_guard.py +1366 -7602
  59. package/scripts/context_guard_hook.py +1960 -711
  60. package/scripts/map_owns.py +699 -0
  61. package/scripts/shared/LICENSES/JSONParse-MIT.txt +24 -0
  62. package/scripts/shared/filesystem-v2.mjs +430 -0
  63. package/scripts/shared/io.mjs +117 -0
  64. package/scripts/shared/map-model.mjs +506 -0
  65. package/scripts/shared/memory-schema.mjs +13 -0
  66. package/scripts/shared/protocol-blobs.mjs +112 -0
  67. package/scripts/shared/protocol-map.mjs +146 -0
  68. package/scripts/shared/protocol-snapshots.mjs +84 -0
  69. package/scripts/shared/protocol-store.mjs +624 -0
  70. package/scripts/shared/protocol-workflow.mjs +226 -0
  71. package/scripts/shared/protocol.mjs +125 -0
  72. package/scripts/shared/vendor/jsonparse.cjs +413 -0
  73. package/scripts/workbench/access.mjs +496 -0
  74. package/scripts/workbench/attachments.mjs +92 -0
  75. package/scripts/workbench/browser-login.mjs +78 -0
  76. package/scripts/workbench/claude-runtime.mjs +372 -0
  77. package/scripts/workbench/cli.mjs +980 -0
  78. package/scripts/workbench/device-heartbeat.mjs +72 -0
  79. package/scripts/workbench/hook-status.mjs +38 -0
  80. package/scripts/workbench/inbox.mjs +155 -0
  81. package/scripts/workbench/journal.mjs +56 -0
  82. package/scripts/workbench/memory-merge.mjs +65 -0
  83. package/scripts/workbench/memory.mjs +252 -0
  84. package/scripts/workbench/named-proxy.mjs +108 -0
  85. package/scripts/workbench/named.mjs +152 -0
  86. package/scripts/workbench/portless-routes.mjs +51 -0
  87. package/scripts/workbench/project.mjs +327 -0
  88. package/scripts/workbench/projections.mjs +68 -0
  89. package/scripts/workbench/protocol-client.mjs +165 -0
  90. package/scripts/workbench/protocol-delivery.mjs +133 -0
  91. package/scripts/workbench/protocol-device.mjs +316 -0
  92. package/scripts/workbench/protocol-events.mjs +53 -0
  93. package/scripts/workbench/protocol-repository.mjs +58 -0
  94. package/scripts/workbench/reconcile.mjs +244 -0
  95. package/scripts/workbench/registry.mjs +111 -0
  96. package/scripts/workbench/runtime.mjs +54 -0
  97. package/scripts/workbench/server.mjs +1171 -0
  98. package/scripts/workbench/store.mjs +243 -0
  99. package/scripts/workbench/sync-coordinator.mjs +518 -0
  100. package/scripts/workbench/sync.mjs +86 -0
  101. package/references/context-template.md +0 -341
  102. package/references/feature-chain-methodology.md +0 -228
  103. package/references/register-template.md +0 -85
  104. package/references/task-case-template.md +0 -63
  105. package/tests/BC-20260618-063.sh +0 -116
  106. package/tests/BC-20260618-065.sh +0 -66
  107. package/tests/BC-20260626-080.sh +0 -48
  108. package/tests/BC-20260626-081.sh +0 -40
  109. package/tests/BC-20260626-082.sh +0 -32
  110. package/tests/BC-20260626-083.sh +0 -66
  111. package/tests/BC-20260627-084.sh +0 -74
  112. package/tests/BC-20260630-086.sh +0 -50
  113. package/tests/BC-20260630-087.sh +0 -103
  114. package/tests/BC-20260630-088.sh +0 -32
  115. package/tests/BC-20260630-089.sh +0 -63
  116. package/tests/BC-20260701-090.sh +0 -84
  117. package/tests/BC-20260702-096.sh +0 -48
  118. package/tests/BC-20260706-098.sh +0 -66
  119. package/tests/BC-20260707-099.sh +0 -47
  120. package/tests/BC-20260707-100.sh +0 -46
  121. package/tests/BC-20260707-101.sh +0 -47
  122. package/tests/BC-20260707-102.sh +0 -68
  123. package/tests/BC-20260707-103.sh +0 -59
  124. package/tests/BC-20260707-104.sh +0 -103
  125. package/tests/BC-20260707-105.sh +0 -109
  126. package/tests/BC-20260707-106.sh +0 -80
  127. package/tests/BC-20260707-107.sh +0 -74
  128. package/tests/BC-20260707-108.sh +0 -48
  129. package/tests/BC-20260707-109.sh +0 -56
  130. package/tests/BC-20260707-110.sh +0 -71
  131. package/tests/BC-20260707-111.sh +0 -70
  132. package/tests/BC-20260707-112.sh +0 -45
  133. package/tests/BC-20260707-113.sh +0 -73
  134. package/tests/BC-20260707-115.sh +0 -77
  135. package/tests/BC-20260707-116.sh +0 -77
  136. package/tests/BC-20260707-118.sh +0 -115
  137. package/tests/BC-20260707-119.sh +0 -47
  138. package/tests/BC-20260707-120.sh +0 -60
  139. package/tests/BC-20260707-121.sh +0 -66
  140. package/tests/BC-20260707-122.sh +0 -48
  141. package/tests/BC-20260707-123.sh +0 -43
  142. package/tests/BC-20260707-124.sh +0 -56
  143. package/tests/BC-20260707-125.sh +0 -64
  144. package/tests/BC-20260707-126.sh +0 -80
  145. package/tests/BC-20260707-127.sh +0 -88
  146. package/tests/BC-20260707-129.sh +0 -59
  147. package/tests/BC-20260707-130.sh +0 -69
  148. package/tests/BC-20260707-131.sh +0 -140
  149. package/tests/BC-20260707-132.sh +0 -150
  150. package/tests/BC-20260707-133.sh +0 -70
  151. package/tests/BC-20260708-136.sh +0 -210
  152. package/tests/BC-20260708-137.sh +0 -106
  153. package/tests/BC-20260708-138.sh +0 -168
  154. package/tests/BC-20260708-139.sh +0 -79
  155. package/tests/BC-20260709-002.sh +0 -63
  156. package/tests/BC-20260709-003.sh +0 -239
  157. package/tests/BC-20260709-006.sh +0 -76
  158. package/tests/BC-20260709-008.sh +0 -168
  159. package/tests/BC-20260710-001.sh +0 -61
  160. package/tests/BC-20260710-002.sh +0 -111
  161. package/tests/npm-install-smoke.sh +0 -53
@@ -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
@@ -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
@@ -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
@@ -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"
@@ -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"
@@ -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"
@@ -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
@@ -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"
@@ -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"