WREMOTE1 规划远端收口和正式模板测试

这个提交包含在:
2026-05-22 13:41:48 +08:00
父节点 170b9f9146
当前提交 6361dc2efb
共修改 18 个文件,包含 330 行新增和 171 行删除
@@ -9,6 +9,62 @@ SUMMARY_TXT="$REPORT_DIR/summary.txt"
STATUS=0
FINDING_COUNT=0
usage() {
cat <<'EOF'
Usage:
bash scripts/qa/collect-wecom-controlled-trial-evidence.sh --remote
WAUTO1 reads live Enterprise WeChat approval data, so business evidence must run
on the deployment server trusted IP. Local execution is blocked; use bash -n for
syntax/static checks.
EOF
}
run_remote() {
local deploy_server="${DEPLOY_SERVER:-deploy@118.89.77.218}"
local remote_dir="${REMOTE_DIR:-/opt/hyb-oa-trialrun}"
local remote_env_file="${REMOTE_ENV_FILE:-${remote_dir}/deploy/trialrun/.env}"
local compose_file="${COMPOSE_FILE:-deploy/trialrun/docker-compose.yml}"
local public_base_url="${LIVE_SMOKE_BASE_URL:-$PUBLIC_BASE_URL}"
ssh "$deploy_server" \
"REMOTE_DIR='${remote_dir}' REMOTE_ENV_FILE='${remote_env_file}' COMPOSE_FILE='${compose_file}' LIVE_SMOKE_BASE_URL='${public_base_url}' bash -s" <<'REMOTE'
set -euo pipefail
cd "$REMOTE_DIR"
if docker compose version >/dev/null 2>&1; then
compose_cmd=(docker compose)
else
compose_cmd=(docker-compose)
fi
"${compose_cmd[@]}" -f "$COMPOSE_FILE" --env-file "$REMOTE_ENV_FILE" exec -T server sh -lc \
"cd /app && LIVE_SMOKE_BASE_URL='$LIVE_SMOKE_BASE_URL' WAUTO1_EXECUTION_MODE=remote WAUTO1_REMOTE_CONTEXT=deployment-server bash scripts/qa/collect-wecom-controlled-trial-evidence.sh"
REMOTE
}
case "${1:-}" in
--remote)
run_remote
exit $?
;;
--help|-h)
usage
exit 0
;;
"")
;;
*)
printf '[wauto1][ERROR] unknown argument: %s\n' "$1" >&2
usage >&2
exit 2
;;
esac
if [[ "${WAUTO1_EXECUTION_MODE:-}" != "remote" || "${WAUTO1_REMOTE_CONTEXT:-}" != "deployment-server" ]]; then
printf '[wauto1][ERROR] Enterprise WeChat evidence must run on the deployment server trusted IP. Use --remote.\n' >&2
usage >&2
exit 2
fi
mkdir -p "$REPORT_DIR"
: >"$SUMMARY_TXT"
@@ -107,7 +163,7 @@ write_manual_checklist() {
- C:必须申请人手选审批人。
- D:当前看不到或模板未配置。
小团队默认规则:公司不到 10 人,按一层直属主管或指定审批角色自动带出审批人;主管链缺失、审批人不可见/停用/未绑定或命中自审时,由管理员兜底或阻断。当前目标按 A 执行,B/C/D 均视为阻断 WEXT1-LIVE 和 WREAL1 的 finding。
小团队默认规则:公司不到 10 人,按一层直属主管或指定审批角色自动带出审批人;主管链缺失、审批人不可见/停用/未绑定或命中自审时,由管理员兜底或阻断。当前目标按 A 执行,B/C/D 均视为阻断 WEXT1-FORMAL 和 WREAL1 的 finding。
需要记录的字段:模板入口、适用范围、审批人规则、是否允许申请人手选、是否可能自审、主管链缺失时表现、审批人不可见或停用时表现。
@@ -235,10 +291,10 @@ const manualGates = [
requiredEvidence: "请假、补卡、外出、加班逐模板均达到 A;小团队采用一层主管/指定审批角色 + 管理员兜底",
},
{
id: "WEXT1-LIVE",
id: "WEXT1-FORMAL",
status: "PENDING_USER_APPROVAL",
owner: "human_lead",
requiredEvidence: "外出/加班 dry-run 可解释通过后,是否允许单次 live 创建 OA-POC 样件",
requiredEvidence: "远端收口可解释通过后,是否允许 SMOKE002 人工提交正式模板外出/加班测试单,系统只读校验",
},
];
@@ -286,15 +342,15 @@ const summary = {
findings,
manualGates,
nextQuestions: {
wext1Live: [
"A:批准一次 live 创建外出+加班 OA-POC 样件,保留审计。",
"B:只保留 dry-run,不创建样件。",
"C:外出/加班移出 V1。",
wext1Formal: [
"A:批准 SMOKE002 在正式模板提交外出+加班低风险测试单,SMOKE101 先看详情再审批,系统只读校验并保留审计。",
"B:只测请假/补卡/打卡,不提交外出/加班正式模板测试单。",
"C:暂停,先检查企微正式模板配置。",
],
threeDayCloseout: [
"A:接受 PASS_AUTO_EVIDENCE_READY,进入 WEXT1-LIVE live 问答。",
"A:接受 PASS_AUTO_EVIDENCE_READY,进入 WEXT1-FORMAL 正式模板人工提交问答。",
"B:接受 PASS_WITH_FINDINGS,但先处理指定 finding。",
"C:暂停,不进入外出/加班 live 或真实试用。",
"C:暂停,不进入外出/加班正式模板测试或真实试用。",
],
},
privacy: "status/count/report-path summaries only; no phone/email/token/Secret/EncodingAESKey/full userid/full template_id/full sp_no/form values/attachments/comments/raw payload/XML/ciphertext",