Install
openclaw skills install @sdk-team/alibabacloud-migration-cas-cutover-review自动审查应用迁云、大数据搬栈等场景的割接手册(.xlsx), 围绕 5 大核心维度 Review:停机公告、切流方式(阻流层)、 源端数据库只读与会话管理、阿里云应用重启策略、回滚决策条件。 默认仅审查「割接执行步骤」与「回滚步骤」两个 Sheet (CheckList / 域名清单 / 数据迁移需 --sheets 打开), 输出「重点确认项 + 需关注项」两段式 Markdown / JSON 报告(含评分与风险等级)。 当用户给出割接手册 / 割接方案 / 割接计划 / cutover plan 的 xlsx, 或说"审查割接手册"、"review 割接方案"、"评估割接风险"、"检查回滚方案"、 "割接 checklist 评审"、"看看这个割接方案有什么问题"时触发。 以下情形同样由本 skill 处理,禁止自行写脚本解析 Excel: 要列出 / 查看手册里有哪些 Sheet、工作表、页签名称用 --list-sheets; 分批割接(含用户显式指定过程 Sheet / 回滚 Sheet 名称)用 --scenario batch 配合 --process-sheet / --rollback-sheet;全量割接 / 一次性切流用 --scenario full; 场景不确定或属纯 DNS 切换 / 域名切换 / 配置变更等其他类型用 --scenario other; 未给路径时先用 find / ls 定位文件再审查。 不适用于:MongoDB / MySQL / Redis 等数据迁移任务配置、 非结构化文档(Word / PDF)、英文关键词主导的手册、业务语义级深度评审。 纯 DNS 方案审查深度有限(仅通告、回滚决策等基本维度)。 本 skill 仅做结构匹配与关键词检测,不理解业务语义,评分仅供参考。 适用于任意支持本地 shell 执行的 Agent 平台(Qoder / Claude Code 等)。
openclaw skills install @sdk-team/alibabacloud-migration-cas-cutover-reviewBased on the guide "Dissecting Cloud Migration - Cutover Plan Review Guide", this skill automatically reviews the completeness and standardization of cutover manuals (.xlsx), identifies potential risks, and provides remediation recommendations. It applies to cutover scenarios such as application cloud migration and big-data stack migration.
This skill works on any Agent platform that supports local shell execution (Qoder / Claude Code, etc.). v4.0 refactor: reorganized around 5 core review dimensions (maintenance notice, traffic-switching method, source-database read-only, Alibaba Cloud application restart, rollback decision conditions), while preserving the v3.3 checks for message middleware, scheduled jobs, target-side initial state, service restart strategy, Nginx configuration changes, big-data consumption links, and process consistency. v4.1 additions: based on real-world retrospectives, six core-risk checks were added for the full-cutover scenario (remove maintenance notice action, source-database read-only, OSS mirror back-to-source, dedicated-line switch timing, database read-write recovery method, traffic recovery plan), corresponding to script checks full_2_7 ~ full_2_12. v4.2 additions: an interactive flow to confirm the Sheet mapping with the customer first, then run the review. Explicitly specify
--checklist-sheet / --process-sheet / --rollback-sheet / --domains-sheet / --data-migration-sheetto avoid missed detections caused by fuzzy matching. It also improves header-row detection (among the first few rows, pick the row hitting the most header keywords as the header, skipping a first row that contains only a single title cell such as "Cutover Steps" or "CheckList"), fixing the past problem where the whole cutover-process Sheet was missed because the first row was treated as the header (typical case: the "Production Environment Cutover Process" Sheet in the Shenxin Zhimei 0820 manual). v4.3 changes (narrowed review scope + report restructure):
- Only two Sheets are reviewed by default: "Cutover Execution Steps" (process) and "Rollback Steps" (rollback). CheckList / domain list / data migration no longer participate by default in analysis, keyword scanning, or scoring; open them explicitly with
--sheetswhen needed.- Keyword scanning scope narrowed accordingly: the global keyword scan only reads the Sheets actually under review, preventing text in non-reviewed Sheets from causing false hits that mask real risks. The report appendix outputs the
keyword scan scopefor traceability.- Dynamic weight normalization: only the dimensions actually under review are counted and normalized into the weights (
overall_score = Σ(score×w) / Σw), so placeholder 50-point dimensions no longer pollute the total. In narrow-scope mode the three dimensions that depend on CheckList content (owners / times / monitoring items) — "monitoring & verification", "resource configuration", "organizational assurance" — do not participate in scoring, avoiding penalizing them for "missing" content.- Report restructured into two sections: "I. Key Items to Confirm" (CRITICAL + HIGH) and "II. Items to Note" (MEDIUM + LOW), each listing the issue title, the specific problem, and the remediation suggestion, removing redundant tables and sections.
v4.3.1 changes (Sheet auto-recognition enhancement): the synonym table was supplemented with common real-world manual names (cutover plan / cutover steps / cutover process / implementation steps / operation manual / switch process / rollback plan / rollback steps / fallback plan, etc.); fuzzy matching changed from "first dictionary-order hit" to longest-hit-first, and a new
SHEET_NAME_EXCLUSIONSexclusion list was added (a Sheet containing "rollback / fallback / cutback / rollback" is never judged as process), fixing the past problem where "rollback process" was grabbed by the process generic pattern "process", causing rollback steps to be recognized as 0. Therefore most manuals no longer need explicit--process-sheet / --rollback-sheet; the explicit parameters degrade to "a correction means when auto-recognition is wrong".v4.4 changes (issue aggregation + conditional suppression, report readability restructure):
- Issue aggregation layer (
ISSUE_TOPICS): a non-intrusive post-processing step added between collectingself.issuesand rendering the report. The same underlying risk (e.g., "source-database read-only" hit separately by 6 checks) is merged into one entry, taking the highest severity within the group, and echoing the original hit items with "hit checks: N (…)" at the end of the entry — both de-duplicating and preserving traceability. Total risk entries compressed from 44 to 16.- Topic matching uses short identifier phrases:
_match_topiconly matches oncategory+_issue_key_phrase(message)(the content inside[square brackets], otherwise the first sentence), no longer matching the full message that contains a lengthycheck_logic, fixing past topic-bleed issues where "maintenance notice" swallowed "traffic recovery plan" and "traffic switching" swallowed rollback decision / source read-only. Note thatISSUE_TOPICSis order-sensitive (first hit wins):topic_redis/topic_aliyun_dbmust precedetopic_src_readonly, which contains the bare keyword "read-only".- Conditional suppression (
SUPPRESSION_RULES): when awhen_anykeyword hits the full text of the Sheets actually under review, the reminders matched byonly_messages_anyare suppressed. Typical scenario: the manual already contains an "Alibaba Cloud application startup" action, which means the target-side application is shut down before the cutover and there is no risk of being written dirty in advance, so the group of reminders "Alibaba Cloud database read-only in advance / restore read-write during cutover" is exempted; similarly the keyword-based false positive of "missing service restart node" is exempted. Exempted items are echoed in the report appendix "Suppressed Items" as "N item(s) exempted — ".- Cap on key items to confirm: only topics with
core: Trueand severity CRITICAL / HIGH enter "I. Key Items to Confirm", truncated byMAX_MUST_CONFIRM_ITEMS = 10; the rest all fall into "II. Items to Note". This prevents the key section from being diluted by dozens of homogeneous reminders.- Full-scenario category prefix rewrite (
CATEGORY_PREFIX_REWRITE): in the full-cutover scenario, "Batch Cutover-" is uniformly displayed as "General Cutover-", to avoid users mistakenly thinking the scenario was misidentified.- Wording optimization for rollback decision, etc.: when the manual does not mention rollback decisions, the suggested wording changes to "list a dedicated section of rollback decision basis in the manual (do not mix it into the operation-step table)", and provides two suggested decision points (before traffic is officially forwarded, before DNS switch).
v4.4.3 changes (turn-completion contract + trigger coverage):
- Turn-completion decision table added under "Command Invocation Convention (MUST)". Ending a turn with a question is now legal in exactly one case — a review was requested, the user wants the Sheet mapping pinned explicitly, and the Sheet names are unknown. A list-only request prints the Sheet list and stops; a user-supplied Sheet name that triggers the fallback warning is reported together with the mapping actually used and the turn finishes; an unknown manual path is located with
find/ls; an unclear scenario falls back to--scenario other. Hard rule 5 was reworded accordingly ("let the user decide" removed) because it contradicted this contract and caused turns to hang waiting for a human reply.- Trigger coverage strengthened in the YAML
description: listing Sheet / worksheet / tab names now routes to--list-sheets; batch cutover with explicitly named process / rollback Sheets routes to--scenario batchplus--process-sheet/--rollback-sheet; uncertain scenarios and pure DNS / domain / configuration-change reviews route to--scenario other; a missing manual path is located first. An explicit "never hand-roll an Excel-parsing script" instruction was added.
The following 5 dimensions are the core focus of cutover-plan review; every review must check each one and output a conclusion:
Check logic:
Keywords: maintenance notice, maintenance announcement, cutover notice, maintenance notification, mini-program notice, Nginx notice mounting
Check logic:
Keywords: blocking layer, blocking, traffic forwarding, DNS switch, DNS effectiveness, Local DNS, traffic interception, sporadic traffic
Check logic:
Keywords: database read-only, ReadOnly, kill session, kill session (Chinese), terminate session, long connection, incremental catch-up, account level
Check logic:
Keywords: application restart, service restart, auto-reconnect, reconnect, startup time, service dependency, two-phase startup, Pod, rolling restart
Check logic:
Keywords: rollback decision, rollback condition, rollback contingency, rollback plan, trigger condition, before traffic forwarding, after traffic forwarding, decision point
The following 6 items come from real cutover-project retrospectives and are built in as dedicated checks for the full-cutover scenario (script full_2_7 ~ full_2_12); every review must verify each one:
--format json is enabled, remind the user to store it encrypted.| Chinese name | Tool ID | Purpose |
|---|---|---|
| None | — | This skill is a pure local CLI-script type; it does not depend on any MCP tool or external interface, and only executes scripts/cutover_reviewer.py via the local Python interpreter. |
RAM permissions: required_permissions: [] (no Alibaba Cloud RAM permissions required) — see references/ram-policies.md for the full statement.
pip install openpyxl==3.1.5 (the only third-party dependency)See references/usage-guide.md for detailed installation steps.
The review is always performed by running the bundled script directly in the shell. The following two forms are mandatory and must be reproduced literally:
python3 scripts/cutover_reviewer.py <manual path> --scenario <full|batch|other> [--process-sheet "<name>"] [--rollback-sheet "<name>"] [--sheets <types>] [-o <output dir>]
python3 scripts/cutover_reviewer.py <manual path> --list-sheets
Hard rules:
python3 plus a relative script path only. Always invoke the interpreter as python3 (never python, py, or a path into a virtualenv). Change the working directory to the skill root first (the directory that contains SKILL.md), then invoke exactly python3 scripts/cutover_reviewer.py. Never write the script argument as an absolute path, and never substitute a shell variable or command substitution ($SKILL_DIR/..., "$(dirname ...)", ${VAR}) for it — the executed command must literally read python3 scripts/cutover_reviewer.py.--scenario <value> (or --list-sheets) comes immediately after the manual path. Optional flags such as --process-sheet, --rollback-sheet, --sheets, -o, --format may only follow afterwards..sh file, do not assemble the command from variables, and do not run it through eval.--list-sheets. Never open the workbook with an inline python3 -c / openpyxl / pandas snippet, and never read the script source and reproduce its logic yourself.--process-sheet / --rollback-sheet on the first run, even if --list-sheets reports different names. If the script then warns that the name does not exist and falls back to auto-matching, do not re-run and do not ask: report the warning together with the mapping actually used in the answer, and finish the turn. Never silently replace the user's wording with names of your own choosing.--scenario other — not by asking.Turn-completion decision table. Match the request against the first applicable row and follow it literally:
| # | Request | Do | End the turn with |
|---|---|---|---|
| 1 | "which Sheets does this manual have" / "list the Sheet names" (no review asked for) | run --list-sheets only | the Sheet list — no question, and no follow-up review in the same turn |
| 2 | A review is requested, Sheet names not mentioned | run --scenario <full|batch|other> straight away; rely on auto-matching | the review result |
| 3 | A review is requested and the user supplied Sheet names | pass them verbatim to --process-sheet / --rollback-sheet in one run | the review result; if the script warned about a non-existent Sheet and fell back to auto-matching, state the warning and the mapping actually used, then stop — do not ask what to do about it |
| 4 | A review is requested, the user wants to pin the Sheet mapping explicitly but does not know the Sheet names | run --list-sheets only | the candidate mapping plus one confirmation question — do not run --scenario in that same turn |
| 5 | The manual path is unknown | locate it with find / ls first, then continue at row 2 | the review result |
| 6 | The cutover scenario is unclear or is neither full nor batch (DNS switch, config change, etc.) | run --scenario other | the review result, noting that the default profile was used |
However brief the user asks the answer to be, the final answer must be written in the user's language and must open with a one-line execution summary containing all of the following, followed by the core risks listed one per line:
full, batch or other) and in words, so the reader can see which review profile ran.Sheet, quoting the process / rollback Sheet names echoed in the report appendix. If the user asked for extra review dimensions, also list them using the exact Sheet names the user wrote in the request.Never reduce the answer to a bare risk list and never drop items 1–5: they are the evidence that the intended profile and the intended Sheets were actually reviewed. If the script printed a warning (Sheet fallback, missing Sheet, blank template), state it explicitly instead of glossing over it.
Different customers' cutover manuals vary greatly in Sheet naming ("Production Environment Cutover Process", "Cutover Implementation Steps", "Cutover Plan", "Cutover Steps", "Operation Manual", "Switch Process", etc.). v4.3.1 already added these common names to the synonym table and changed fuzzy matching to longest-hit-first + exclusion words, so most manuals map correctly without explicit parameters; the explicit parameters degrade to "a correction means when auto-recognition is wrong".
Step 1: List all Sheet names in the file
python3 scripts/cutover_reviewer.py manual.xlsx --list-sheets
The script only prints the Sheet names and exits, doing no review.
Step 2: Confirm which Sheets the "Cutover Execution Steps" and "Rollback Steps" fall on
| Sheet type | Auto-recognized names | v4.3 default behavior |
|---|---|---|
process | cutover plan / cutover steps / cutover process / cutover execution steps / switch steps / go-live steps / implementation plan / operation manual / change steps / cutover / switchover | ✅ reviewed by default |
rollback | rollback plan / rollback steps / rollback process / fallback plan / cutback steps / rollback / fallback | ✅ reviewed by default |
checklist | CheckList / check list / preparation list | ⛔ not reviewed by default, open explicitly with --sheets |
domains | domain list / domain names / DNS | ⛔ not reviewed by default |
data_migration | data migration plan / data sync / DTS | ⛔ not reviewed by default |
The exclusion mechanism guarantees that a Sheet containing "rollback / fallback / cutback / rollback" is never judged as process — previously the broad process words "process / steps" would grab "rollback process", causing the rollback dimension to be parsed as 0 while the cutover step count was inflated.
Step 3: Run the review directly (in most cases no Sheet parameter is needed)
python3 scripts/cutover_reviewer.py manual.xlsx --scenario full
The report appendix echoes the actual mapping (Cutover Execution Steps: Cutover Plan / 40 steps total). If the mapping does not match the customer's understanding, or the Sheet name is too special (semantically meaningless names such as "Plan-B" or "20260820"), correct it explicitly:
python3 scripts/cutover_reviewer.py manual.xlsx \
--scenario full \
--process-sheet "Cutover Plan" \
--rollback-sheet "Rollback Plan"
If process and rollback are on the same Sheet (the customer merged cutover and rollback into one page), fill both parameters with the same name — the same-page scenario must be passed explicitly, as auto-matching will not assign one Sheet to two types simultaneously.
If you must also review the CheckList / domain list, list --sheets explicitly:
python3 scripts/cutover_reviewer.py manual.xlsx \
--sheets checklist,process,rollback,domains
Explicit mapping takes priority over fuzzy matching; unspecified types fall back to auto-matching. If an explicitly specified Sheet name does not exist, the script prints a warning and falls back to auto-matching (avoiding an outright failure).
Why still confirm: previously the "Production Environment Cutover Process" Sheet had a first row containing only the four characters "Cutover Steps", and header detection treated the first row as the header, causing the whole cutover-process section to be recognized as 0 steps and missing 4~6 core checks (Nginx changes, message middleware, scheduled jobs, target-side initial state, etc.). v4.2 fixed header detection and v4.3.1 supplemented synonyms, but the long tail of Sheet naming is endless, so the Agent must verify the mapping and step counts echoed in the report appendix and, when 0 steps or an obviously low step count appears, immediately specify the Sheet explicitly and re-run.
| Scenario | Trigger characteristics | Invocation |
|---|---|---|
| Application-database batch cutover | user says "batch", manual contains batch numbers / multiple time windows | python3 scripts/cutover_reviewer.py manual.xlsx --scenario batch --process-sheet "<cutover-steps Sheet>" --rollback-sheet "<rollback Sheet>" |
| Application-database full cutover | user says "one-time traffic switch / full switch", contains maintenance notice | python3 scripts/cutover_reviewer.py manual.xlsx --scenario full --process-sheet "<cutover-steps Sheet>" --rollback-sheet "<rollback Sheet>" |
| Other scenarios | non-database / pure DNS / uncertain | python3 scripts/cutover_reviewer.py manual.xlsx --scenario other (default) |
| Scenario undeterminable | user did not specify | Ask the user to confirm the scenario type before invoking; do not guess. |
Execution convention for the Agent: invoke scripts/cutover_reviewer.py as a subprocess; do not read the script source line by line and reimplement the logic yourself.
| Sheet name (fuzzy matching supported) | v4.3 default | Description |
|---|---|---|
| Production Environment Cutover Process / Cutover Process / Cutover Plan | ✅ reviewed | work phase, operation item, status, time, executor |
| Rollback Steps / Rollback Plan | ✅ reviewed | work phase, preparation item, implementation step, time cost, operator |
| Cutover CheckList / production cutover checklist | ⛔ not reviewed | open explicitly with --sheets; once open, four extra dimensions are counted: CheckList completeness, resource configuration, monitoring & verification, organizational assurance |
| Cutover Domain List / Domain List | ⛔ not reviewed | open explicitly with --sheets |
| Data migration / data sync / DTS | ⛔ not reviewed | open explicitly with --sheets |
Supported --sheets types: checklist, process, rollback, domains, data_migration; the v4.3 default value is process,rollback.
| Exception | Handling strategy |
|---|---|
| xlsx file does not exist / wrong path | fail immediately (exit code 2), prompt the user to check the path |
| xlsx encrypted / corrupted | catch the openpyxl exception, prompt "please check whether the file is encrypted or corrupted" |
| Sheet missing | mark N/A, do not interrupt execution; deduct score by weight; note the missing item in the report |
| Column names mismatch | prefer matching via the synonym table (SYNONYM_MAP); if still no match, list the unrecognized columns in the report |
| Single file > 50MB | prompt the user to split and retry, avoiding context/memory pressure |
| File loading timeout (60s) | the script enforces a 60-second timeout (LOAD_WORKBOOK_TIMEOUT) on openpyxl.load_workbook(); if the file takes longer to parse (very large spreadsheets or network-mounted paths), the script exits with a timeout error — move the file to local storage or split it into smaller parts |
| Execution time exceeds 120s | the user should interrupt and check the file size |
| Empty Sheet / all template content | note in the report "Sheet is a blank template, cannot score", and give the corresponding dimension a direct 0 |
Exit on irrelevant input: if the file the user provides is not an .xlsx file (e.g., .docx / .pdf / .csv), clearly state "this skill only supports .xlsx cutover manuals" and terminate; do not attempt conversion.
After the review completes, the script by default generates in the current directory (or the directory specified by -o):
| File | Default output | Description |
|---|---|---|
{original filename}_Review Report_{YYYYMMDD_HHMMSS}.md | ✅ always | v4.3 two-section report: "I. Key Items to Confirm" + "II. Items to Note" + "Appendix: Review Scope and Base Data" |
{original filename}_Review Report_{YYYYMMDD_HHMMSS}.json | ⚠️ when --format json/both | structured data, containing issues / issues_summary / effective_weights / reviewed_sheets |
Reference output (Shenxin Zhimei 0820 manual, --scenario full --process-sheet "Cutover Plan" --rollback-sheet "Rollback Plan"): 44 key items to confirm (16 critical + 28 high), 0 items to note, overall score 12.5/100, risk level CRITICAL, appendix scoring dimensions being "Cutover Execution Steps 20 pts × 50% + Rollback Steps 5 pts × 50%".
On termination the Agent must output to the user (see "Final Answer Requirements (MUST)" for the mandatory opening summary line):
full / batch / other) and in wordsSheet, plus any extra review dimensions that were openedNote: this skill focuses on cutover-manual quality review. To configure Redis/ES/MySQL data migration tasks, use dedicated skills such as
redis-shake-migration/logstash-es-migration.
.xlsx format (does not support .xls / .csv / .pdf / .docx)--no-redact mode is enabled to output the original text, the user must encrypt and store it themselvesLast updated: 2026-08-24