视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
probe-feature-flag-state【文档与办公】Probe the runtime state of a named feature flag in a CLI binary. Covers the four-pronged evidence protocol (binary strings, live invocation, on-disk state, platform cache), the four-state classification (LIVE / DARK / INDETERMINATE / UNKNOWN), gate-vs-event disambiguation, conjunction-gate handling, and skill-substitution scenarios where a flag appea…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
使用四路证据协议,为每一个状态断言配上具体观察结果,判定一个已发布 CLI 二进制中的具名特性标志位究竟是 LIVE、DARK、INDETERMINATE 还是 UNKNOWN。
monitor-binary-version-baselines)的标记,需要先对每个候选标志位的推广状态进行分类,再进入第 4 阶段的线路抓包从打包产物中抽取候选标志位名,确认它确实以字符串字面量形式存在。没有这一步,其他所有支线都是在打空气。
# Locate the bundle (common shapes: .js, .mjs, .bun, packaged binary)
BUNDLE=/path/to/cli/bundle.js
FLAG=acme_widget_v3 # synthetic placeholder — replace with the candidate
# Confirm the literal exists
grep -c "$FLAG" "$BUNDLE"
# Capture every line where it appears, with surrounding context for Step 2
grep -n -C 3 "$FLAG" "$BUNDLE" > /tmp/flag-context.txt
wc -l /tmp/flag-context.txt
检视 /tmp/flag-context.txt,并把每一处出现标记为以下之一:
gate("$FLAG", default)、isEnabled("$FLAG")、flag("$FLAG", ...))。process.env.X(或同类)的查找中。预期: 该标志位字符串在打包产物中至少出现一次,且每一处出现都已被打上调用点角色的标签。
失败时: 如果 grep -c 返回 0,说明该标志位不在本次构建里。要么输入名称错了(错别字、错误命名空间),要么该标志位在本版本已被移除。回到第 1 阶段的标记输出重新核对,随后要么修正输入、要么将其分类为 REMOVED 并停止。
同一个字符串可以同时扮演闸门、遥测事件名、环境变量,或三者皆是。分类取决于调用点,而不是字符串本身。把遥测名误当成闸门会产生无意义的推理("这个闸门一定是关着的"),尽管它从来就不是闸门。
对第 1 步中每一个被打标签的出现:
gate("$FLAG", false) 将标志位默认设为关;gate("$FLAG", true) 将其默认设为开)。把字面默认值与闸门函数名都记下来。UNKNOWN(名称存在但不是闸门)。if (process.env.X) { return null; } 是杀停开关;if (process.env.X) { enable(); } 是主动启用。预期: 每一处出现都有确定的调用点角色;对 gate-call 类型的出现还记录了默认值。
失败时: 如果某个 gate-call 周围的上下文被压缩得太紧以至于读不出默认值,把 grep 上下文扩大(-C 10)并检视完整的被调函数。如果仍无法确定默认值,就记录为 default=?,并把任何 LIVE/DARK 结论降级为 INDETERMINATE。
在你能控制的已认证会话里运行测试台,观察被闸门守护的能力是否浮现。这是信号最强的一条支线:打包产物说明了能发生什么,运行时展示了确实发生了什么。
挑一个能揭示闸门放行的探测动作 — 通常就是闸门所守护的用户可见行为(工具在工具列表中出现、命令标志位变得合法、UI 元素渲染、响应中多出一个输出字段)。
# Example shape — adapt to the harness
$CLI --list-capabilities | grep -i widget # does the gated capability appear?
$CLI --help 2>&1 | grep -i "$FLAG" # is a flag-related option exposed?
$CLI run-some-command --debug 2>&1 | tee probe-runtime.log
记录以下三种结果之一:
LIVE。DARK;默认 true → 重新核查,这很可疑)。INDETERMINATE。预期: 一个被记录的探测动作、观察到的结果,以及它所指向的候选分类。
失败时: 如果探测动作本身就报错(认证失败、网络不可达、错误的子命令),本轮的运行时支线无法使用。修复会话或换一个探测动作;绝不要从一次从未运行过的运行时推断出 DARK。
许多测试台会把闸门求值结果或覆盖值持久化到磁盘,以免反复抓取。检视这些状态能看出测试台在上一次求值时对该标志位的认知。
常见位置(按测试台实际情况调整 — 以下是形态,不是具体路径):
# User-level config
ls ~/.config/<harness>/ 2>/dev/null
ls ~/.<harness>/ 2>/dev/null
# Per-project state
ls .<harness>/ 2>/dev/null
# Cache directories
ls ~/.cache/<harness>/ 2>/dev/null
# Search any of these for the flag name
grep -r "$FLAG" ~/.config/<harness>/ ~/.cache/<harness>/ .<harness>/ 2>/dev/null
记录每一次命中的路径、与该标志位关联的值,以及文件的最近修改时间。一条最近修改的缓存条目覆盖了二进制默认值,是两侧最强的证据。
预期: 要么有带时间戳的确定覆盖值,要么确认不存在(磁盘上没有任何状态提到此标志位)。
失败时: 如果你找到了标志位的提及,但无法判断所记录的值是缓存的服务端响应、用户覆盖,还是过期值,就把该条目标记为待第 5 步(平台缓存)进行对账,而不要靠猜。
如果测试台使用了外部特性标志位服务(LaunchDarkly、Statsig、GrowthBook、厂商内部服务等),本地缓存的服务响应就是当前推广状态的权威来源。若可能,检视它。
# Look for service-shaped cache files
find ~/.cache ~/.config -name "*flag*" -o -name "*feature*" -o -name "*config*" 2>/dev/null | head
# If a cache file is present, parse it for the flag name
jq ".[] | select(.key == \"$FLAG\")" ~/.cache/<harness>/flags.json 2>/dev/null
记录缓存值、缓存时间戳,以及(若有)缓存 TTL。一个平台缓存若说 false,会覆盖 true 的二进制默认值;若说 true,则会覆盖 false 的二进制默认值。
预期: 要么得到一个确定的带时间戳的缓存值,要么确认该测试台不存在标志位服务缓存。
失败时: 如果测试台没有标志位服务,或你无法定位缓存,则本支线不贡献证据 — 这是可接受的。在证据表里注明"证据支线 D:不适用";不要靠猜。
有些能力由多个标志位守护,必须同时为真:gate("A") && gate("B") && gate("C")。其中任一为 DARK 就足以使该能力整体为 DARK,但每个标志位个体的分类仍需各自独立进行。
# After finding the gate-call site for the primary flag in Step 2, scan the
# enclosing predicate for other gate(...) calls
grep -n -C 5 "$FLAG" "$BUNDLE" | grep -oE 'gate\("[^"]+"' | sort -u
对每一个浮出的共闸门字符串:
预期: 每一个合取项都被识别并单独分类,并给出推导出的能力级分类。
失败时: 若谓词被压缩得过紧以至于无法干净枚举(调用点被内联或包装),把该合取记录为"≥1 个额外闸门,结构不可读",并将能力级分类降级为 INDETERMINATE,即使主标志位看起来是 LIVE。
一个标志位可能合理地处于 DARK 状态,而它本应解锁的用户可见能力却可以通过另一条完全受支持的路径到达 — 不同的命令、用户可调用的技能、另一种 API。诚实的"标志位 DARK,能力通过替代路径 LIVE"结论很常见也很重要;遗漏它会造成"用户其实已有"的能力却被恐慌地上报为暗启动。
对任何候选分类为 DARK 或 INDETERMINATE 的情形,追问:
如任一答案为是,就在证据行上附加 substitution: 备注,记录替代路径及其可观测性(用户如何到达它、它是否有文档)。
预期: 每一个 DARK / INDETERMINATE 分类都有一次显式的替代检查 — 要么给出路径,要么显式写明"未识别到替代路径"。
失败时: 若你怀疑存在替代但无法确认路径,则标注"疑似存在替代;未能确认",而不是武断做出任何一方的断言。
把四条支线合到一张表里。每一个状态断言都必须与支撑它的观察结果配对;在新版本上重跑探测便能产出可 diff 的工件。
| 字段 | 值 |
|---|---|
| 标志位 | acme_widget_v3(示意占位) |
| 二进制版本 | <version-id> |
| 探测日期 | YYYY-MM-DD |
| 证据支线 A — 字符串 | 存在(3 处:1 处 gate-call default=false,2 处遥测) |
| 证据支线 B — 运行时 | 能力清单中未观察到闸门放行 |
| 证据支线 C — 磁盘 | ~/.config/<harness>/ 中未找到覆盖 |
| 证据支线 D — 平台缓存 | 未发现服务缓存 / 不适用 |
| 合取 | 无 — 单闸门谓词 |
| 替代 | 用户可调用的 widget 斜杠命令交付了等价 UX |
| 最终状态 | DARK(能力通过替代路径 LIVE) |
应用分类规则:
false、没有任何支线观察到闸门放行、也没有任何覆盖将其翻转为 true。把表保存为一份探测工件(例如 probes/<flag>-<version>.md),以便将来的探测可以与之 diff。
预期: 一份覆盖四条支线、合取状态、替代状态与唯一最终分类的完整证据表。
失败时: 若没有任何支线产生可用信号(二进制无法读取、运行时无法调用、磁盘与平台缓存都缺席),不要凭空编造分类。把它记为 INDETERMINATE,原因写"无支线产生信号",并停止。
redact-for-public-disclosure)。emit("$FLAG", ...) 中出现的字符串是标签而不是闸门。"纯遥测"的标志位没有推广状态,应分类为 UNKNOWN,而不是 DARK。default=false)并不等同于运行时证据(能力未出现)。一个在二进制中默认为 false 的标志位,可能被服务端覆盖翻转为 true;只有运行时探测能展示当前会话实际拿到了什么。default=true 就把它分类为 LIVE,而忽视它周围的 && gate("B") && gate("C"),会对一个实际上由 B 或 C 守护的能力给出虚假自信的 LIVE。monitor-binary-version-baselines — 父指南的第 1 阶段;本技能所依赖的标记追踪为其提供候选标志位清单。conduct-empirical-wire-capture — 第 4 阶段;当证据支线 B 的表面探测不足时,提供更深的运行时证据(网络抓包、生命周期钩子)。security-audit-codebase — 暗启动代码是攻击面考古的一部分;本技能是该审计的发现那一半。redact-for-public-disclosure — 第 5 阶段;规定哪些探测工件可以离开私有工作区的脱敏纪律。