计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
conduct-empirical-wire-capture【效率与协作】Capture outbound HTTP and telemetry from a CLI harness at runtime. Covers capture-channel selection (transcript file vs verbose-fetch stderr vs outbound proxy vs on-disk state), hook-driven per-event capture vs long-running session capture, JSONL output format for diff-friendly artifacts, and the observability table that maps each target to the cheap…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
建可重現之線捕架,取 CLI 具之運時 HTTP 與遙測,配每觀察目標至最廉之捕道。
配捕前必讀。
redact-for-public-disclosure(親導 Phase 5),非此技。勿用於:版基線(用 monitor-binary-version-baselines)、旗態探(用 probe-feature-flag-state)、或備削以公佈(用 redact-for-public-disclosure)。
./captures/——須於 .gitignore。配捕前先列所須答之問,各配一捕道。每標一行。
| target | observable via | blocker |
|---|---|---|
| Outbound HTTP to endpoint X | verbose-fetch stderr | TUI noise pollutes terminal |
| Telemetry event Y on user action | hook-driven subprocess | requires harness hook surface |
| Token-refresh handshake | outbound HTTP proxy | cert trust required |
| Scheduled-task lifecycle event | long-running session capture | wallclock alignment |
| Local config mutation | on-disk state diff | none — cheapest channel |
常見道,廉者先:
diff 免費。BUN_CONFIG_VERBOSE_FETCH=curl)路每 fetch 至 stderr。噪而全捕。UserPromptSubmit、Stop 等)→每事生短捕子進。擇捕目之最廉道。三標捕答一問勝於二十標捕答無。
得: 觀察表每問一行,各注道與已知阻。無可行道之標→標「本會超範」。
敗: 諸標皆落代理列→表過雄。削至一二最高值之問,於彼再察低廉道。
線捕污終端、遺檔於意外處、或洩憑於日誌。
mkdir -p captures/$(date -u +%Y-%m-%dT%H-%M-%S)
cd captures/$(date -u +%Y-%m-%dT%H-%M-%S)
echo 'captures/' >> ../../.gitignore
git check-ignore captures/ || echo "WARNING: captures/ not git-ignored"
確捕會非主工會——verbose-fetch 與 TUI 渲染相擾。
得: 時戳之捕目錄已 git-ignore,別於主工會。
敗: git check-ignore 報未 ignore→修 .gitignore 方行任捕。勿以憑險行。
目為離散事(工呼、提交、會停)→用具之 hook 面。每事生短命捕子進;勿於進中駐。
模(合成例):
# Hook script, registered with the harness's hook config.
# Invoked once per event; writes one JSONL line; exits.
#!/usr/bin/env bash
set -euo pipefail
TS=$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)
EVENT="${1:-unknown}"
PAYLOAD=$(jq -c --arg ts "$TS" --arg ev "$EVENT" \
'{ts:$ts, source:"hook", target:$ev, payload:.}' < /dev/stdin)
echo "$PAYLOAD" >> "$CAPTURE_DIR/events.jsonl"
子進每事之故:
得: 每發事之一 JSONL 行於 events.jsonl,皆 jq 可析。
敗: jq 報析錯→載含未轉義控字或二進。管 jq -R(生輸)且 base64 編載欄。
目為序(多輪握手、計劃任務生命、退避態機)→一捕進跨會、牆鐘標。
# Run the harness with verbose-fetch routed to a tee-d log.
BUN_CONFIG_VERBOSE_FETCH=curl harness-cli run-task 2> >(
while IFS= read -r line; do
printf '%s\t%s\n' "$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)" "$line"
done >> "$CAPTURE_DIR/session.tsv"
)
牆鐘前綴使多並發捕之序無歧。TSV(制表分)故意——抗 shell 於 stderr 破 JSON 引號。
會終後轉 TSV 至 JSONL(步五),非行中。
得: TSV 日誌含單調增時戳,每 stderr 行一列。
敗: 時戳倒→具緩 stderr→重行加 stdbuf -oL -eL 或束等效之行緩旗。
JSONL 為構件格式:每行一 JSON 物,欄 timestamp、source、target、payload。利 diff、jq 可濾、編輯器重載穩。
# Parse the TSV from Step 4 into JSONL.
awk -F'\t' '{
printf "{\"timestamp\":\"%s\",\"source\":\"verbose-fetch\",\"target\":\"%s\",\"payload\":%s}\n",
$1, "session", $2
}' < session.tsv | jq -c . > session.jsonl
驗每行可析:
while IFS= read -r line; do
echo "$line" | jq -e . > /dev/null || echo "BAD LINE: $line"
done < session.jsonl
常用濾:
# Show only requests to a specific endpoint pattern.
jq -c 'select(.payload | tostring | test("/api/v1/example"))' session.jsonl
# Show timing between consecutive captures.
jq -r '.timestamp' session.jsonl | sort | uniq -c
得: *.jsonl 每行過 jq -e .;無 BAD LINE 警。
敗: 有行敗→源 TSV 之載嵌制表符→重行步四以異分或 base64 編次欄。
寫磁前削驗頭、會 ID、bearer token、PII。events.jsonl 與 session.jsonl 首寫不當含一機。
# Stream the raw capture through a redactor before persisting.
redact() {
sed -E \
-e 's/(authorization:[[:space:]]*Bearer[[:space:]]+)[A-Za-z0-9._-]+/\1<REDACTED>/gi' \
-e 's/(x-api-key:[[:space:]]*)[A-Za-z0-9._-]+/\1<REDACTED>/gi' \
-e 's/(cookie:[[:space:]]*)[^;]+/\1<REDACTED>/gi' \
-e 's/("password"[[:space:]]*:[[:space:]]*)"[^"]*"/\1"<REDACTED>"/g' \
-e 's/("token"[[:space:]]*:[[:space:]]*)"[^"]*"/\1"<REDACTED>"/g'
}
cat raw-capture.txt | redact > session.tsv
捕後驗無漏:
# Patterns that must not appear in any *.jsonl file.
grep -Ei 'bearer [A-Za-z0-9]{20,}|sk-[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{20,}' captures/ \
&& { echo "LEAK DETECTED"; exit 1; } \
|| echo "redaction clean"
「捕後削」之構件必漏。唯安模為「捕即削」。成品中發未削 token→視全捕為洩——刪之、轉憑、重行。
得: LEAK DETECTED 檢退 0(無匹)。grep 於已知憑前綴無返。
敗: 漏檢中→勿就地改檔。刪全捕目錄、延削正則涵漏類、自步三或四重行。
HTTP 狀態碼於異脈有異義。記前分使下游 jq 濾於意,非生碼。
| Observed status | Channel context | Classification |
|---|---|---|
| 200 / 201 | Any | success |
| 401 on token-refresh endpoint | Handshake | expected handshake step |
| 401 on data endpoint | After auth | auth failure (real) |
| 404 on lazy-loaded resource | First fetch | expected miss |
| 404 on documented endpoint | After feature gate | gate-induced absence |
| 429 | Any | rate-limit (back off; do not retry tight) |
| 5xx | Any | server failure (record, do not assume) |
捕時加 class 欄:
jq -c '. + {class: (
if (.payload.status == 401 and (.target | test("token|refresh"))) then "handshake"
elif (.payload.status >= 200 and .payload.status < 300) then "success"
elif (.payload.status == 401) then "auth-fail"
elif (.payload.status == 429) then "rate-limit"
elif (.payload.status >= 500) then "server-fail"
else "other" end)}' session.jsonl > session.classified.jsonl
token 刷道之 401 非敗——為握手首半。誤分握手步為敗→生假陽發現耗審者神。
得: *.classified.jsonl 每行有 class 欄有已知值。
敗: 多生 other→表不全於此具→每重現 other 模加一行方續析。
捕行可重現僅入與出俱記。寫清單:
cat > capture-manifest.json <<EOF
{
"captured_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"harness_version": "$(harness-cli --version 2>/dev/null || echo unknown)",
"channel": "verbose-fetch",
"question": "Does endpoint X fire on event Y?",
"targets": ["endpoint-X", "event-Y"],
"files": ["session.jsonl", "session.classified.jsonl"],
"redaction_check": "passed"
}
EOF
清單使捕可與後版 diff。
得: capture-manifest.json 在、jq 可析、列捕目錄諸構件檔。
敗: 具無版旗→改記二進之 sha256sum。無識之二進生不可比之捕。
*.jsonl 檔逐行過 jq -e .class 欄有已知值capture-manifest.json 記具版(或 sha256)、道、問mitmproxy:外代理為最侵之道。須證信任、遇證固定即破、污具環。僅磁、謄本、verbose-fetch、hook 皆阻時用。capture-manifest.json 之 JSONL 不可重現——不知何版生即不可與下月二進 diff。monitor-binary-version-baselines — 親法之 Phase 1;生此技清單所引之版基線probe-feature-flag-state — Phases 2-3;線捕為其證一股,此技教捕半instrument-distributed-tracing — 共 JSONL+牆鐘哲;應於一二進非服務網redact-for-public-disclosure — Phase 5;此技只涵捕時削於內用,非離私區前之公佈級削