Prowler 产品 Tour 对齐检查报告:`output-format.md` 规范深度解析

发布时间:2026/11/9 6:39:50

Prowler 产品 Tour 对齐检查报告:`output-format.md` 规范深度解析 Prowler 产品 Tour 对齐检查报告output-format.md规范深度解析【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowler导读本文围绕 Prowler 仓库中skills/prowler-tour/references/output-format.md定义的Tour Alignment Report产品引导对齐检查报告输出格式规范展开。该规范是prowler-tour技能的核心产出契约当 UI 组件、路由或文案变更波及产品引导product tour时技能负责检测 tour 定义与真实 UI 之间的“漂移”drift并以一种下游可机器消费、字段顺序不可变动的固定结构输出报告。读完本文你将掌握该报告的完整模板、每条字段的承载语义、多 tour 场景下的报告拆分规则、无漂移时的兜底输出以及BUMP/NO bump版本判定树的用法并结合仓库源码理解其底层支撑。一、报告的本质一份“字段即契约”的机器可读输出output-format.md开篇即点明这份报告的定位The report is consumed downstream. Field names, order, and headings are load-bearing — do not rename, reorder, or omit them.这句话是整个规范的主心骨报告不是给人看的自由文本而是被下游流程CI 门禁、版本决策工具、自动化维护管线消费的结构化数据。字段名、字段顺序、标题层级都是承重结构任何重命名、重排或省略都会破坏下游解析。这一点在 SKILL.md 中再次被强调——“The structure is mandatory because the report is consumed downstream and tolerates no field reordering”结构是强制的因为报告被下游消费且不容忍字段重排。从仓库源码看这份报告对应的运行上下文是 Prowler 前端的产品引导体系tour 定义文件位于 ui/lib/tours/每个*.tour.ts通过defineTour(...)声明id、version、coversFiles和steps并由 use-driver-tour.ts 在运行时驱动。coversFiles正是技能判断“本次变更是否波及某个 tour”的匹配依据详见下文“早期退出规则”。二、报告模板逐字段解析规范给出了唯一合法的报告模板原文逐字继承如下## Tour Alignment Report **Tour:** tour-idvversion **Files touched:** comma-separated list of files in the change ### Drift detected - one bullet per drift item; include file:line where available ### Recommended actions 1. numbered, actionable steps the developer should take ### Version bump verdict - BUMP | NO bump — one-line rationale各字段语义与约束如下字段格式承载语义与约束## Tour Alignment Report二级标题固定文本报告的唯一顶层标识不可改名**Tour:**tour-idvversion标识受影响的具体 tour 及其版本例如add-providerv2版本号必须与 tour 定义中的version字段一致**Files touched:**逗号分隔的文件列表本次变更涉及的文件清单供下游定位问题范围### Drift detected每个漂移项一个 bullet每项尽量携带file:line定位信息便于开发者直接跳转修复### Recommended actions有序编号列表开发者应采取的、可执行的修复步骤### Version bump verdictBUMP或NO bump 一行理由版本判定结论任何情况下都必须输出见“无漂移兜底”小节注意**Tour:**使用的是 Markdown 粗体而非标题tour-idvversion这种idv版本的写法与 tour-config.ts 中 driver.js 的激活方式以及 localStorage 的持久化键prowler.tour.id.vversion一脉相承——身份与版本始终绑定出现。三、三条强制性规则规范正文只有三条规则但每一条都直接决定了报告的合规性规则 1一个 tour 一份报告多 tour 用---分隔One report per affected tour. If multiple tours are affected, separate reports with a---line.一次 UI 变更可能同时命中多个 tour 的coversFiles例如同时重构了 Scans 页面和 Providers 页面。此时必须为每个受影响 tour 独立输出一份报告并用---分隔线隔开确保下游能按 tour 粒度分别消费、分别决策。规则 2无漂移也要输出报告兜底模板If no drift is detected for an affected tour, still emit the report: put No drift detected. under Drift detected and None required. under Recommended actions. The verdict line is still mandatory.只要某个 tour 被判定为“受影响”即使零漂移也必须输出报告且填充值是精确指定的Drift detected下写No drift detected.Recommended actions下写None required.Version bump verdict行仍然必须存在结论通常是NO bump这条规则保证了报告结构在任何分支下都完整一致下游解析器永远不会遇到“缺字段”的异常输入。规则 3verdict 只能二选一The verdict is exactly one ofBUMPorNO bump— see the version-bump decision tree inSKILL.md.判定结论是离散枚举不允许出现第三种写法或含糊表述。判定依据在 SKILL.md 的 “Version-bump decision tree” 一节下一节详解。四、版本判定树BUMP还是NO bump虽然判定树位于 SKILL.md但它是报告Version bump verdict字段的唯一合法取值来源与输出格式规范构成闭环必须一并理解NO bump不升版本变更是**外观性cosmetic**的。规范给出的例子包括修正拼写错误、软化文案措辞、重命名data-tour-id选择器但保持同一 step、替换某张截图、收紧措辞等。BUMP version升级版本号用户可见流程发生实质性变化。例如新增或删除了 step、step 顺序改变、锚点目标被重新指向另一个面板、tour 开始覆盖面上的新功能等。兜底判据当不确定时问一个问题——Would a user who already saw the previous version miss something useful by not seeing this one?看过旧版本的用户如果看不到这一版是否会错过有用的东西——答案是“是”则BUMP。这一判定在源码中有真实案例。例如 view-first-scan.tour.ts 中的view-first-scantour 当前为version: 2注释明确说明 v2 的变更内容是“lands on the In Progress tab and highlights the running scan when there is one”落点在 In Progress 标签页并高亮正在运行的扫描——这是 step 顺序与锚点目标的实质改变属于典型的需要BUMP的场景。同理add-provider.tour.ts 中add-provider为version: 2注释说明 v2 “now drives the user into the wizard body ... instead of ending at type selection”现在引导用户进入向导主体而不再止步于类型选择——新增了 step同样触发BUMP。五、报告产生的前置流程早期退出与漂移检查清单报告不是凭空生成的prowler-tour技能在执行中遵循一套严格流程理解它才能正确解读报告内容。完整流程见 SKILL.md摘要如下1. 早期退出规则Early-exit rule技能必须先跑这个检查因为绝大多数 UI 编辑与 tour 无关用 Glob 匹配ui/lib/tours/*.tour.ts对每个 tour检查其coversFiles中的任意 glob 是否匹配当前变更中的文件若无任何 tour 命中则精确回复No tour affected — skipping alignment check并退出不生成报告若有至少一个 tour 命中则进入该 tour 的漂移检查清单。这一机制在源码层面直接依赖 tour-types.ts 中TourDefinition.coversFiles字段注释明确写着“coversFilesis consumed by theprowler-tourskill to scope drift checks”。2. 六类漂移检查清单Drift checklist对每个受影响的 tour逐项评估跳过明显不适用的项但必须显式列出检查了哪些项。这六类漂移正是报告中Drift detected小节 bullet 的内容来源Orphan selectors孤儿选择器每个 step 的target会组合成data-tour-idtour-id-step.target必须能在代码库中解析到真实元素grep 不到即视为孤儿。Renamed selectors选择器被改名变更中编辑了data-tour-id属性需要反向匹配引用了旧值的 tour step。Outdated copy文案过期popover 的title/description引用了页面上已不存在的按钮标签、标题或术语。Obsolete steps步骤过时step 描述的区块、面板或流程已被移除。Missing steps缺失步骤覆盖面上新增了功能新面板、新主操作、新向导阶段却没有对应 step。Reordered flow流程重排用户路径改变如查询构建器移到扫描选择之前而 step 顺序未同步。3. 选择器约定的底层原理要准确判断第 1、2 类漂移必须理解选择器约定详见 tours-architecture.mdstep 通过data-tour-idtour-id-step.target锚定 DOMuse-driver-tour.ts 的getTourTargetSelector(tourId, target)在运行时组合选择器adaptStep()将其转换为 driver.js 的DriveStep.elementtour 作者只需在step.target中写 step 名禁止使用基于 class、ID 结构的选择器——它们会把 tour 耦合到本可合理变更的样式决策上。从源码结构看target的字符串字面量被 tour-types.ts 的defineTourconst TTarget extends string(...)保留为字面量联合类型从而让useDriverTour能对stepHandlers的键和waitForStep的参数做编译期类型校验——这是“选择器是承重结构”这一设计理念在类型系统层面的落实。六、报告背后从驱动钩子到持久化的完整链路为了让报告的Version bump verdict决策更有依据有必要了解 tour 版本在运行时如何被消费。整条链路详见 tours-architecture.md 的 Code map如下文件职责ui/lib/tours/tour-types.ts公开类型面TourDefinition、TourStep、TourId、TourCompletionRecord、完成状态常量表导出defineTour(...)作者辅助函数ui/lib/tours/tour-config.tsbaseDriverConfig、getDriverConfig(theme, overrides?)、遮罩颜色映射ui/lib/tours/store/tour-completion-store.ts持久化接口契约get/set/clear未来可平滑替换为 API 适配器ui/lib/tours/store/local-storage-adapter.ts目前唯一的适配器存储键格式prowler.tour.id.vversionui/lib/tours/use-driver-tour.tsReact 钩子初始化 driver.js、从useTheme()派生遮罩色、持久化完成状态ui/lib/tours/id.tour.ts每个 tour 一个文件通过defineTour({...})声明由选择加入的页面导入ui/styles/tours.css.driver-popover.prowler-theme所有颜色经var(--...)从globals.css解析几个与报告决策直接相关的关键实现细节身份与版本绑定tour 是{ id, version }二元组localStorage 键同时包含两者实质内容变更才BUMP version外观性编辑不升版——这与报告 verdict 字段的判定完全同源。持久化作用域为“每用户、跨租户”用户在租户 A 完成attack-pathsv1后即使在租户 B 可访问该功能也不会再次看到 tour。这意味着版本决策直接影响真实用户是否会被重复打扰。漂移是头号风险如果没有维护技能和可选的 CI 门禁ui/scripts/check-tour-alignment.mjs该文件在仓库中作为可选门禁被引用tour 会随着覆盖 UI 的演进静默腐化silently decay——这正是报告规范存在的原因。七、技能边界报告只读绝不代改最后需要强调prowler-tour的定位见 SKILL.md 的 “What this skill MUST NOT do”只报告Report-only技能从不修改 tour 文件或 UI 文件只检查变更、报告漂移、给出建议不编辑*.tour.ts不新增或重命名data-tour-id属性不发明新 tour——创作新 tour 是开发者的独立决策不标记coversFiles未命中当前变更的 tour 的漂移严格遵守早期退出规则。因此报告的Recommended actions小节永远是对开发者的建议而不是技能自身的行动清单。这也解释了为什么报告要求“numbered, actionable steps the developer should take”——它是一份给人类开发者的可执行工作交接单。结语output-format.md虽然只有三十余行却是 Prowler 产品引导维护体系中承上启下的“契约文件”上承prowler-tour技能的漂移检查与版本判定逻辑下接需要稳定字段结构的自动化消费方。理解它就等于掌握了如何在 Prowler 前端演进时让产品引导ui/lib/tours/ 下的各 tour 定义始终与真实 UI 保持同步——这既是文档的原始意图也是本仓库 tours-architecture.md 所强调的“漂移 头号风险”的应对之道。【免费下载链接】prowlerProwler is the world’s most widely used open-source cloud security platform that automates security and compliance across any cloud environment.项目地址: https://gitcode.com/GitHub_Trending/pr/prowler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/7 7:19:16

工业串口服务器选型指南:从Modbus轮询到MQTT上报的真实性能解析

1. 这份白皮书到底在解决什么问题?——不是参数罗列,而是现场工程师的“选型决策树”工业串口服务器这东西,说白了就是给老设备装上“网络身份证”的翻译官。你车间里那台用了十五年的PLC、温控仪、电表,它们只会用RS-485或RS-232…

2026/11/4 12:37:56

西门子PLC直控EtherCAT伺服实现零换控的技术解析

1. 为什么“零换控”不是宣传话术,而是产线改造的真实技术拐点西门子 PLC 直控 EtherCAT 伺服——这个标题里藏着一个被很多工厂工程师忽略的关键信号:“直控”二字,意味着控制链路从“PLC → 运动控制器 → 伺服驱动器”压缩为“PLC → 伺服…

2026/11/9 6:38:41

市场监督管理局特种工证怎么转异地 郑州报考避坑指南

市场监督管理局特种工证怎么转异地 郑州报考避坑指南 怕考不过白交培训费?你不是一个人。特种作业证考试门槛高、流程复杂,稍有不慎就可能钱花了、证没拿到。尤其在郑州,市场上培训机构鱼龙混杂,很多人交了钱,最后连报名都没报上。今天这波【郑州报考避…

2026/11/9 6:38:41

电工作业在哪里查询 内部消息说学历不高也能考

电工作业在哪里查询 内部消息说学历不高也能考 学历不高怕报不上名?我当初也是这样想的,手里只有初中毕业证,连个高中文凭都没有,但照样考了低压电工证,现在在周口干了五六年,干得还挺好。关键是要知道【电工作业在哪里查询】,还有哪些内部消息能帮你…

2026/11/9 6:38:41

高压电工证的工资标准怎么考?2026河南最新政策全解析

高压电工证的工资标准怎么考?2026河南最新政策全解析 实操考试心里没底怕挂科,这几乎是每个准备报考高压电工证的学员心里最真实的写照。尤其是2026年河南最新政策出台后,报考流程、考试内容和证书使用范围都有了明显变化,这让不少应届毕业生和从…

2026/11/9 6:38:41

青海省电工证培训上岗必备怎么准备才能一次过

青海省电工证培训上岗必备怎么准备才能一次过 实操考试心里没底怕挂科,报名青海省电工证培训的你是不是也这样?别急,这篇文章带你一步步理清流程、避开雷区、稳稳拿下证书。 为什么青海省电工证培训是上岗必备…

2026/11/9 6:38:41

富阳弱电电工证怎么考多少钱最划算

富阳弱电电工证怎么考多少钱最划算 实操考试心里没底怕挂科,富阳弱电电工证怎么考多少钱最划算?不少朋友在准备报名前,最担心的不是流程复杂,而是担心考试不过、钱花了白忙活。尤其在实操环节,操作不熟练、流程不规范,极易被判定不合格。下面我们就从报…

2026/11/9 6:33:41

特种工桩基怎么考?内部消息告诉你学历不高也能报!

特种工桩基怎么考?内部消息告诉你学历不高也能报! 你是不是也觉得特种工桩基这证离你有点远?学历不高怕报不上名?别急,我这儿有 内部消息 ,告诉你怎么操作。特种工桩基虽然听着专业,但其实和你我一样,只要符合流程,照样能考。…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑