skills-experimental/backward-compatible-schema-pattern/SKILL.md
# Backward-Compatible Schema Pattern ## Source Claude Code: `utils/settings/types.ts` (header comment + SettingsSchema) ## Pattern Zod schema designed for backward compatibility - new fields optional, old fields preserved. ## Code Example ```typescript /** * ⚠️ BACKWARD COMPATIBILITY NOTICE ⚠️ * * ✅ ALLOWED CHANGES: * - Adding new optional fields (always use .optional()) * - Adding new enum values (keeping existing ones) * - Adding new properties to objects * - Making validation more p
npx skillsauth add bianhaifeng789-hue/openclaw-config skills-experimental/backward-compatible-schema-patternInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Claude Code: utils/settings/types.ts (header comment + SettingsSchema)
Zod schema designed for backward compatibility - new fields optional, old fields preserved.
/**
* ⚠️ BACKWARD COMPATIBILITY NOTICE ⚠️
*
* ✅ ALLOWED CHANGES:
* - Adding new optional fields (always use .optional())
* - Adding new enum values (keeping existing ones)
* - Adding new properties to objects
* - Making validation more permissive
* - Using union types for gradual migration
*
* ❌ BREAKING CHANGES TO AVOID:
* - Removing fields (mark as deprecated instead)
* - Removing enum values
* - Making optional fields required
* - Making types more restrictive
* - Renaming fields without keeping old name
*
* TO ENSURE BACKWARD COMPATIBILITY:
* 1. Run: npm run test:file -- test/utils/settings/backward-compatibility.test.ts
* 2. If tests fail, you've introduced a breaking change
*/
export const SettingsSchema = lazySchema(() =>
z.object({
$schema: z.literal(CLAUDE_CODE_SETTINGS_SCHEMA_URL).optional(),
apiKeyHelper: z.string().optional(),
env: EnvironmentVariablesSchema().optional(),
permissions: PermissionsSchema().optional().passthrough(), // Preserve unknown keys
// ... all fields optional
})
)
// Permissions schema uses .passthrough() to preserve unknown fields
export const PermissionsSchema = lazySchema(() =>
z.object({
allow: z.array(PermissionRuleSchema()).optional(),
deny: z.array(PermissionRuleSchema()).optional(),
// ...
}).passthrough() // Keep unrecognized permission keys
)
// Test example from backward-compatibility.test.ts
const BACKWARD_COMPATIBILITY_CONFIGS = [
{ version: '1.0', settings: { permissions: { allow: ['Bash(npm)'] } } },
{ version: '1.1', settings: { permissions: { allow: ['Bash(npm)'], newField: 'value' } } },
// New optional field should not break old configs
]
business
IAA 日报飞书输出能力。 支持把固定 CSV 模板一键转换成: - 中文运营结论 - 飞书卡片 JSON - 飞书发送载荷 Use when: - 需要把 IAA 日报直接发到飞书 - 需要从 CSV 一键生成运营日报
data-ai
IAA日报分析模型 功能: - 渠道日报自动分析 - 小时级+日级ROI联动判断 - 按地区输出加量/降量/停投建议 - 按产品类型输出阈值 - 自动识别利润区/观察区/止损区 Use when: - 分析每天投放数据 - 生成运营日报结论 - 判断是否加量/降量/停投 - 对比美加澳/日韩表现 Keywords: - 日报模型, 投放日报, 加量, 降量, 停投, ROI日报, 分地区分析
data-ai
IAA固定日报分析模板 功能: - 固定字段模板(可直接贴每天数据) - 自动输出总盘结论 - 自动输出美加澳/日韩结论 - 自动给出加量/降量/停投建议 - 适配文件修复/清理两类产品 Use when: - 需要固定日报格式 - 每天复盘渠道表现 - 给运营团队出统一结论 Keywords: - 固定模板, 日报模板, ROI模板, IAA日报, 运营模板
development
# HyperlinkPool Pattern Skill HyperlinkPool Pattern - HyperlinkPool class + strings array + stringMap + Index 0 no hyperlink + intern(hyperlink) + get(id) + undefined handling + 5-minute reset + OSC8 hyperlink interning。 ## 功能概述 从Claude Code的ink/screen.ts提取的HyperlinkPool模式,用于OpenClaw的OSC8超链接池管理。 ## 核心机制 ### HyperlinkPool Class ```typescript export class HyperlinkPool { private strings: string[] = [''] // Index 0 = no hyperlink private stringMap = new Map<string, number>() // strings