跳到正文
cccskills
免费在 GitHub 公开中文介绍

dry-run-a-risky-change

在合并或部署前,以只读方式评估账单、权限或数据变更对生产组织的影响;检查受影响的界面,并仅在前序检查不足且获批时,使用 PlanetScale 生产数据副本验证。

原文查看原文说明

Billing, plans, seats, permissions, access rules, auth, flag removals or data migrations that could lock real organizations out or change what they pay. Use before merging or deploying such a change to see exactly which production organizations it affects, prove the UI on production-shaped data, and only with explicit approval test against a PlanetScale copy of real data.

different-ai/openwork星标 24,317(GitHub 24,317 + cccskills 0)
集成工具StripeGitHub

实测评分 未实测

查看安装方法

适用场景

  • 查找账单变更影响的生产组织
  • 用代表性数据预览权限变更
  • 部署前检查数据迁移
  • 在生产数据副本上验证

中文介绍

功能

此技能用于在发布前检查账单、套餐、席位、权限、身份验证、功能标记和数据迁移等变更。首先以只读方式比较当前规则和拟议规则与生产数据的结果,找出访问权限或收费会发生变化的组织。若涉及界面变更,则使用有代表性的测试数据检查实际页面。只有前两步无法回答问题时,才会在获得批准后,对 PlanetScale 上的生产数据副本进行只读检查。

适用场景

适合在合并或部署可能影响组织访问权限或应付金额的变更前使用。它可以帮助确认影响范围,并整理所需的运维准备、部署顺序和回滚方案。

使用示例

  • “请以只读方式检查这个套餐变更会影响哪些生产组织。”
  • “用有代表性的组织数据预览权限变更。”
  • “常规检查无法得出结论,请准备在生产数据副本上验证的步骤。”

注意事项

读取生产数据需要使用平台管理 MCP。对 PlanetScale 数据副本进行检查必须获得批准,并使用专用工作流和存放在受保护环境中的令牌。副本存在期间的费用相当于生产分支。请勿在聊天、公开日志或截图中包含机密信息。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
A良好资料禁止试运行写入,并要求审批、保护凭据、检查清理情况及保护机密信息。
安装难易度所需工具和 API 密钥是否少且有说明
B部分不足资料说明需要管理 MCP;特殊检查还需要 PlanetScale 凭据和 GitHub Actions 环境。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月28日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(1)

  • SKILL.md7.3 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Dry-run a risky change

Tests prove the rule you wrote. They do not tell you which real organizations the rule changes. Before a risky change ships, answer three questions in order and stop at the first level that answers them:

  1. Who changes? Every production organization whose outcome differs before vs after (blocked, unblocked, billed differently, loses access).
  2. Does it look right to them? The real screens on organizations shaped like the affected ones.
  3. Does it behave right on real data? Only when 1 and 2 cannot answer it.

Confidentiality (AGENTS.md, hard rule): production names, ids, emails and counts stay in chat. Never put them in a branch, commit, fixture, screenshot, PR or issue. Describe affected organizations generically ("one grandfathered org with ~30 SSO users").

Level 1: read-only production dry run (always)

Run the new rule against production inputs without writing anything.

  1. Write the new rule's inputs as the smallest set of columns (plan metadata, member counts, subscription status, feature overrides). Express the rule either as SQL or by feeding query results into the PR's pure function.
  2. Read them with the platform admin MCP den_query (read-only SQL against the Den database). Never use admin write tools (den_update_org_plan, den_set_org_capability, den_set_feature_rollout) during a dry run.
  3. Compute before (current dev rule) and after (the PR) for every organization the rule can touch, and report only the ones that differ, plus anyone at or near a new limit.
  4. Put the query (no results) in the PR as the pre-deploy check, and list the ops steps it implies (for example "give one org enough seats first").

den_query traps that produced wrong answers before:

  • JSON values compare as text: GREATEST(5, JSON_EXTRACT(m,'$.limits.members')) says '40' < '5'. Always CAST(JSON_UNQUOTE(JSON_EXTRACT(...)) AS UNSIGNED).
  • It refuses credential tables (invitation, session, account, keys and tokens) and any statement containing a write keyword as a word, including inside string literals ('%grant%', 'invitation.create.attempted'). Use LIKE 'invitation.%.attempted', or count placeholder member rows (joined_at IS NULL) instead of reading invitations.
  • It stops at 14 seconds. Filter audit_event by org_id and a created_at range; never scan it whole.
  • Feature state lives in feature_rollout and organization_feature, not organization.metadata.capabilities (a legacy copy).

Level 2: production-shaped preview (UI changes)

Reproduce each affected shape with generic data and drive the real screens.

  1. From Level 1, list the distinct shapes (for example: Enterprise trial with an end date, full admin-set plan, paid in Stripe, old grant over its limit, Free at its limit).
  2. Seed them in an evals world (evals/worlds/*.ts, generic names such as "Acme") and prove the journeys in a proof (write-a-spec). Use the fake Stripe lab (evals/worlds/fake-stripe.ts) when billing must be configured, or limits that depend on Stripe being set up switch off.
  3. Run headless: pnpm evals:e2e <name> --local, or boot a preview with preview-my-work (preview-den / preview-full, locally or on Daytona) and click through by hand. Attach screenshots to the PR (upload-photo).

Level 3: PlanetScale copy of real data (exceptional, needs approval)

Use only when Levels 1 and 2 cannot answer the question (data-dependent migrations, performance on real volume). Ask the person first and name the cost and the data involved.

Use the Dry run on a copy of production data workflow (.github/workflows/prod-data-dry-run.yml). It seeds an isolated dry-run-<run-id>-<attempt> copy from the latest production backup (Data Branching), runs one read-only check, and attempts deletion when the job ends, including on failure or cancel. Verify absence after the run; cleanup can fail. Both --restore and --seed-data can create a branch classified as production. The token therefore needs read-only production connection and production-branch deletion permissions. The real source must be deletion-protected, and the job verifies that protection before creation, credentials and cleanup. The token cannot change branch protection or write production data. The PlanetScale MCP has no branch-creation tools.

  1. Write the check in ee/apps/den-api/scripts/dry-run/<name>.ts on your branch, using connect.ts (dryRunDb, report, fail, finish). It may import the PR's own code (for example a pure rule) and must print aggregates and pass/fail only: this repository is public, so the job log and summary are public. Start from smoke.ts.
  2. Push the branch, then run the workflow from GitHub Actions (or gh workflow run prod-data-dry-run.yml --ref <branch> -f check=<name>.ts). Database access is always read-only. This workflow cannot apply migrations.
  3. A required reviewer approves the run on the prod-data-dry-run environment after reading the check. Approve only checks that print aggregates.
  4. Read the summary. If a run is interrupted, run it again with cleanup_only to delete leftover dry-run-* branches.

What the workflow needs (set once, by a person, never pasted in chat): on the prod-data-dry-run environment, a PlanetScale service token limited to the Den database with read_database, read_branch, create_branch, delete_branch, connect_branch, read_backups, restore_production_branch_backup, connect_production_read_only_branch and delete_production_branch (never connect_production_branch or write_database). The real source must be deletion-protected first. These scopes also allow read-only credentials on the live source and deleting other unprotected production branches in this database; run-name guards limit the workflow, not the underlying token. Store it only in the protected environment as PLANETSCALE_DRY_RUN_TOKEN_ID / PLANETSCALE_DRY_RUN_TOKEN, the PlanetScale organization and database names as variables PLANETSCALE_DRY_RUN_ORG and PLANETSCALE_DRY_RUN_DATABASE, and a restored branch costs as much as the production branch while it exists.

Guards the workflow already applies: manual runs only, a required reviewer, no secrets besides the branch connection (no email, Stripe, Slack, connector or model credentials), masked credentials, one run at a time, a 90 minute timeout, and branch deletion in an always() step. Never copy rows out of the branch, never screenshot it, and never point a full Den deployment with real integrations at it.

Before merge and deploy

  • The PR states the rule, the Level 1 query, the ops steps that must happen first, and the deploy order when more than one service changes.
  • Do the ops steps with the person's numbers, re-run the Level 1 query, and confirm nobody is newly blocked before deploying.
  • Know the rollback: revert the PR, or, if the change is behind a feature, the kill switch in /admin (add-a-feature).

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

add-a-feature

免费有简介

管理 OpenWork 功能开关,从编码前以关闭状态登记,到按组织和部署环境逐步发布、全局停用,并在发布完成后移除临时开关。还包括添加代码检查和规划停用时对进行中任务、已存数据及历史记录的处理。

  • 编码前登记新功能
  • 先向指定组织逐步发布
  • 区分云端与自托管版本
different-ai/openwork2.4万2026年10月30日 更新

browser-automation

免费有简介

连接 OpenCode 浏览器工具与本地运行的 OpenWork Electron 应用,可查看界面、输入并发送任务、检查回复。通过 CDP 辅助探索和调试。

  • 连接本地 Electron 应用
  • 调试时查看界面状态
  • 通过输入框发送任务
different-ai/openwork2.4万2026年10月30日 更新

confidentiality-review

免费有简介

检查变更新增行中可识别客户、潜在客户、合作方或外部个人的信息。报告位置和最小修正建议,不复述身份内容;若信息已公开则升级处理。

  • 检查客户或合作方识别信息
  • 审查文档和测试数据中的身份信息
  • 不复述内容地报告泄露位置
different-ai/openwork2.4万2026年10月30日 更新

connect-openwork-mcp

免费有简介

引导 Claude Code、Codex 等 AI 客户端连接 OpenWork MCP Gateway,以使用组织技能、插件和外部连接;完成浏览器认证后检查能力搜索与执行工具是否可用。

  • 让 AI 客户端连接组织资源
  • 完成 MCP 认证并查看可用工具
  • 切换组织或处理认证错误
different-ai/openwork2.4万2026年10月30日 更新

contributor-screen

免费有简介

在运行外部协作者的拉取请求代码前,检查混淆代码、隐藏通信、可疑依赖和构建脚本,并给出文件位置及维护者的核查事项。

  • 运行外部改动前先检查
  • 查找混淆代码或不明通信
  • 审查依赖和安装脚本
different-ai/openwork2.4万2026年10月30日 更新

create-plugin

免费有简介

为 OpenWork 创建 OpenCode 插件,生成自定义工具、事件钩子和配置文件条目。可添加工具逻辑,或在工具执行前后运行处理代码。

  • 为 OpenWork 添加自定义工具
  • 创建保存和列出笔记的工具
  • 在工具执行前后运行代码
different-ai/openwork2.4万2026年10月30日 更新

查看 different-ai 的全部技能

报告此技能的问题