generation-coverage
GitHub管理模型版本的生成覆盖权限,通过增删 EcosystemCheckpoints 行绕过发布状态检查,使草稿可测试或发布后移除覆盖。支持查看状态、添加/删除覆盖及清除缓存,需 moderator 权限。
Trigger Scenarios
Install
npx skills add civitai/civitai --skill generation-coverage -g -y
SKILL.md
Frontmatter
{
"name": "generation-coverage",
"description": "Add, remove or inspect a model version's \"EcosystemCheckpoints\" row — the coverage override that makes a version generatable regardless of publish status — and bust the version cache so the generator sees the change. Use to make a Draft official version testable by moderators, or to drop the override after launch. Called by onboard-generator-model; usable on its own."
}
Generation Coverage
node .claude/skills/generation-coverage/coverage.mjs <command> [flags]
What the row does
GenerationCoverage is a plain view and the one the app reads. It carries both coverage rules as columns — covered (live) and coveredNext (staged) — and the Flipt boolean generation-coverage-next decides which one answers, globally, default off. Its "EcosystemCheckpoints" branch is shared by both rules and applies no status check. So:
- A
Draftversion with a row can be generated, but only by moderators and the model's owner.getResourceCanGeneratelets those two through the private check and refuses everyone else. This is how an official version gets tested before it is published. - The row overrides everything else — except moderation. The version stays covered even after it is unpublished, but a top-level
m.mode IS NULLmeans anArchivedorTakenDownmodel is covered by no branch at all. For anExternalGenerationversion, branch 2 covers it once published, so removing the row after launch is what lets a later unpublish remove coverage. So far every row has been kept.
The full coverage rules are in docs/features/generator-model-onboarding.md.
Commands
| Command | What it does |
|---|---|
status --version <id> |
Whether the version has an EcosystemCheckpoints row, and what GenerationCoverage reports for both covered and coveredNext. |
add --version <id> --name <label> [--writable] |
Inserts the row, then busts the cache. Idempotent. |
remove --version <id> [--writable] |
Deletes the row, then busts the cache. |
bust --version <id> [--writable] |
Only the cache bust (modelVersion.bustCache). |
--nameis a free-text label with no behaviour attached. Existing rows use the base model's name (BaseModelRecord.name), e.g.Ideogram 4.0— not the ecosystem'sdisplayName.- The cache bust is part of
addandremove.resourceDataCachesits in front of the view with a one-hour TTL. Without the bust, the generator keeps reporting the old coverage for up to an hour.
Setup and permission
- Database: reads and writes go through the
postgres-queryskill (--prodby default, plus--writableforaddandremove). Its production connection has to be configured. - Choosing the database: pass
--db devfor the dev database. WhenCIVITAI_API_URLisn't civitai.com or civitai.red, the script refuses to guess which database goes with it. - API key: the cache bust uses
CIVITAI_API_KEYfrom.claude/skills/mod-actions/.env, and it must belong to a moderator.
Every write is a dry run unless you pass --writable. Ask the user before each --writable call. It writes to the production database.
Version History
- b80af8e Current 2026-10-20 06:22
-
b735b6b
2026-09-28 20:27
引入Flipt开关区分主备覆盖列,统一各端逻辑,修复Redis缓存键并更新相关文档与迁移清单。
- c706944 2026-09-23 10:05


