feat: 发布通用人效与资源优化能力

增加跨行业的人效与资源优化需求澄清、模型求解与独立验收能力,并固化公共市场的信息边界与发布前检查。
This commit is contained in:
2026-08-07 23:55:01 +08:00
parent 2e15720442
commit 20b29df7a4
11 changed files with 935 additions and 6 deletions

View File

@@ -351,11 +351,61 @@ def count_publishable_skills() -> tuple[list[str], list[str]]:
def validate_builtin_skills(report: Report, skill_md_names: list[str]) -> None:
builtin_path = REPO_ROOT / "builtin-skills.json"
builtin = load_json(builtin_path, report, "builtin-skills")
validate_builtin_manifest(report, builtin, skill_md_names)
def validate_builtin_manifest(
report: Report,
builtin: dict[str, Any],
skill_md_names: list[str],
) -> None:
unknown = sorted(set(builtin) - {"skills", "retired"})
if unknown:
report.add(Issue(
"builtin-skills.json",
"builtin-skills",
f"unknown top-level fields {unknown}",
))
skills = builtin.get("skills")
if not isinstance(skills, list) or not all(isinstance(x, str) for x in skills):
report.add(Issue("builtin-skills.json", "builtin-skills", "skills must be a list of strings"))
return
retired = builtin.get("retired", [])
if not isinstance(retired, list) or not all(isinstance(x, str) for x in retired):
report.add(Issue("builtin-skills.json", "builtin-skills", "retired must be a list of strings"))
return
for field, values in (("skills", skills), ("retired", retired)):
invalid = sorted({value for value in values if not NAME_PATTERN.fullmatch(value)})
if invalid:
report.add(Issue(
"builtin-skills.json",
"builtin-skills",
f"{field} contains invalid Skill IDs {invalid}",
))
if len(values) != len(set(values)):
report.add(Issue(
"builtin-skills.json",
"builtin-skills",
f"{field} contains duplicate Skill IDs",
))
if field == "retired" and values != sorted(values):
report.add(Issue(
"builtin-skills.json",
"builtin-skills",
f"{field} list is not sorted",
))
overlap = sorted(set(skills) & set(retired))
if overlap:
report.add(Issue(
"builtin-skills.json",
"builtin-skills",
f"active and retired Skill IDs overlap {overlap}",
))
expected = sorted(skill_md_names)
actual = list(skills)
if actual != expected: