迁移art-bible到Codex原生skill

This commit is contained in:
wxm
2026-05-19 02:45:33 -07:00
parent 7c71d5dfde
commit f7b4fbed2a
13 changed files with 625 additions and 11 deletions

View File

@@ -14,6 +14,7 @@ ROOT = Path(__file__).resolve().parents[1]
FORBIDDEN_NAMES = {".DS_Store", ".env", "plan.md"}
FORBIDDEN_PARTS = {".git", "__pycache__"}
EXPECTED_SKILLS = {
"art-bible",
"brainstorm",
"setup-engine",
}
@@ -27,6 +28,7 @@ REQUIRED_RUNTIME_AGENTS = {
"godot-specialist.toml",
"producer.toml",
"technical-director.toml",
"technical-artist.toml",
"ue-blueprint-specialist.toml",
"ue-gas-specialist.toml",
"ue-replication-specialist.toml",
@@ -37,6 +39,7 @@ REQUIRED_RUNTIME_AGENTS = {
"unity-specialist.toml",
"unity-ui-specialist.toml",
"unreal-specialist.toml",
"ux-designer.toml",
}
DIRECTOR_RUNTIME_AGENTS = {
"art-director.toml",
@@ -89,10 +92,8 @@ FORBIDDEN_UNAVAILABLE_ROLE_REFS = {
"security-engineer",
"sound-designer",
"systems-designer",
"technical-artist",
"tools-programmer",
"ui-programmer",
"ux-designer",
"world-builder",
"writer",
}
@@ -294,6 +295,87 @@ def assert_project_template() -> None:
)
def assert_art_bible_workflow() -> None:
details_path = ROOT / "skills" / "art-bible" / "DETAILS.md"
template_path = ROOT / "references" / "studio-docs" / "templates" / "art-bible.md"
if not details_path.is_file():
fail("Missing skills/art-bible/DETAILS.md")
if not template_path.is_file():
fail("Missing references/studio-docs/templates/art-bible.md")
details_text = details_path.read_text(encoding="utf-8")
required_details = [
"design/gdd/game-concept.md",
"design/art/art-bible.md",
"docs/technical-preferences.md",
"Retrofit Mode",
"AD-ART-BIBLE",
"Codex subagent workflow",
"May I write section",
"technical-artist",
"ux-designer",
"$setup-engine",
"Stop here",
"Verdict: COMPLETE",
]
for fragment in required_details:
if fragment not in details_text:
fail(
"skills/art-bible/DETAILS.md missing art-bible behavior: "
f"{fragment}"
)
forbidden_details = [
"/map-systems",
"/design-system",
"/asset-spec",
"/consistency-check",
"/create-architecture",
"Ask" + "User" + "Question",
]
present_forbidden_details = sorted(
fragment for fragment in forbidden_details if fragment in details_text
)
if present_forbidden_details:
fail(
"skills/art-bible/DETAILS.md references unavailable or non-native "
"workflow terms: "
+ ", ".join(present_forbidden_details)
)
forbidden_workflows = sorted(
ref for ref in FORBIDDEN_UNAVAILABLE_WORKFLOW_REFS if ref in details_text
)
if forbidden_workflows:
fail(
"skills/art-bible/DETAILS.md references unavailable workflows: "
+ ", ".join(forbidden_workflows)
)
template_text = template_path.read_text(encoding="utf-8")
required_template = [
"Visual Identity Statement",
"Mood & Atmosphere",
"Shape Language",
"Color System",
"Character Design Direction",
"Environment Design Language",
"UI/HUD Visual Direction",
"Asset Standards",
"Reference Direction",
"AD-ART-BIBLE",
"$setup-engine",
"Stop here",
]
for fragment in required_template:
if fragment not in template_text:
fail(
"references/studio-docs/templates/art-bible.md missing required "
f"content: {fragment}"
)
def assert_engine_references() -> None:
reference_root = ROOT / "references" / "engine-reference"
if not reference_root.is_dir():
@@ -422,6 +504,7 @@ def main() -> int:
assert_skill(skill_name)
assert_runtime_agents()
assert_project_template()
assert_art_bible_workflow()
assert_engine_references()
assert_runtime_installer()
assert_package_hygiene()