fix: require strictly increasing renewal scores
This commit is contained in:
@@ -2,6 +2,11 @@
|
||||
|
||||
本文件对应技能市场 **「更新日志」** Tab。
|
||||
|
||||
## 1.1.16
|
||||
|
||||
- 修复续聘建议中的趋势判定:仅近三年考核分数严格递增才建议续聘;成绩持平或回落均进入常规续聘评审。
|
||||
- 新增回归测试,覆盖 `80 → 80 → 90` 的成绩持平场景。
|
||||
|
||||
## 1.1.15
|
||||
|
||||
- **修复「数据管理」Tab 看不到(关键根因:`developer_ids` 是占位 ID)**
|
||||
|
||||
7
SKILL.md
7
SKILL.md
@@ -1,7 +1,7 @@
|
||||
---
|
||||
name: 合同到期智能预警与续聘辅助
|
||||
description: "当用户说要扫描即将到期的合同、查 90/60/30 天预警名单、给某位教师生成续聘任务书、下发单位版续聘清单、从 SmartCampus HR 平台抓合同数据、解析续聘材料 PDF/Word、查看本月合同到期人员清单时,加载本技能。支持定时扫描(每日凌晨)+ 数据管理 + Agent 三入口,覆盖合同到期智能预警与续聘辅助全流程。"
|
||||
version: 1.1.15
|
||||
version: 1.1.16
|
||||
author: 深圳匠厂科技有限公司
|
||||
metadata:
|
||||
openclaw:
|
||||
@@ -12,7 +12,10 @@ metadata:
|
||||
developer_ids:
|
||||
- 10032
|
||||
- 12428
|
||||
|
||||
brands: # 可选;未写则发布后仅挂匠厂市场(jiangchang)
|
||||
- jiangchang # 匠厂主站
|
||||
- huashang # 华商等 OEM:按目标市场填写,可多选
|
||||
|
||||
allowed-tools:
|
||||
- bash
|
||||
---
|
||||
|
||||
@@ -369,7 +369,9 @@ try {
|
||||
Invoke-Git -GitArgs @("fetch", "--tags", "--prune", "origin")
|
||||
}
|
||||
|
||||
$skillRoot = (Get-GitOutput -GitArgs @("rev-parse", "--show-toplevel") | Select-Object -First 1).Trim()
|
||||
# Git output can be decoded through the legacy console code page on Windows
|
||||
# PowerShell 5.1, corrupting a repository path that contains Chinese characters.
|
||||
$skillRoot = $PSScriptRoot
|
||||
if (Test-Path -LiteralPath (Join-Path $skillRoot "SKILL.md")) {
|
||||
Assert-SkillReleasePackagingSources -SkillRoot $skillRoot
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ def suggest(perf_records: list[sqlite3.Row]) -> tuple[str, str]:
|
||||
|
||||
# 全部 >= 80 且逐年上升(升序排 → 严格递增)
|
||||
all_high = all(s >= PERFORMANCE_RENEW_MIN for s in scores)
|
||||
upward = all(scores[i] <= scores[i + 1] for i in range(len(scores) - 1))
|
||||
upward = all(scores[i] < scores[i + 1] for i in range(len(scores) - 1))
|
||||
if all_high and upward:
|
||||
return ("renew", f"近 3 年考核均 ≥ {PERFORMANCE_RENEW_MIN} 分且逐年上升")
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"""
|
||||
|
||||
SKILL_SLUG = "alert-contract-expiring-hr"
|
||||
SKILL_VERSION = "1.1.15"
|
||||
SKILL_VERSION = "1.1.16"
|
||||
LOG_LOGGER_NAME = "openclaw.skill.alert_contract_expiring_hr"
|
||||
PLATFORM_KIT_MIN_VERSION = "1.2.11"
|
||||
|
||||
|
||||
@@ -386,6 +386,20 @@ def test_suggest_renew_upward() -> tuple[bool, str]:
|
||||
return True, "renew + 上升趋势"
|
||||
|
||||
|
||||
def test_suggest_observe_equal_scores_not_renew() -> tuple[bool, str]:
|
||||
"""持平不算逐年上升;应回落到 observe"""
|
||||
from service.task_generator import suggest
|
||||
rows = [
|
||||
_fake_perf(2023, 80, moral=85),
|
||||
_fake_perf(2024, 80, moral=85),
|
||||
_fake_perf(2025, 90, moral=85),
|
||||
]
|
||||
s, r = suggest(rows)
|
||||
if s != "observe":
|
||||
return False, f"suggest(80,80,90) = {s}, want observe"
|
||||
return True, "观察:持平不等于逐年上升"
|
||||
|
||||
|
||||
def test_suggest_observe_default() -> tuple[bool, str]:
|
||||
"""达标但非逐年上升 → observe(常规评审)"""
|
||||
from service.task_generator import suggest
|
||||
@@ -709,10 +723,11 @@ def main() -> int:
|
||||
_run("db/upsert_performance_record", test_upsert_performance_record_grade_mapping)
|
||||
_run("task_generator/suggest_empty", test_suggest_empty_records)
|
||||
_run("task_generator/suggest_low_moral", test_suggest_low_moral)
|
||||
_run("task_generator/suggest_fail_year", test_suggest_fail_year)
|
||||
_run("task_generator/suggest_renew", test_suggest_renew_upward)
|
||||
_run("task_generator/suggest_observe", test_suggest_observe_default)
|
||||
_run("scanner/no_alerts", test_scanner_no_alerts)
|
||||
_run("task_generator/suggest_fail_year", test_suggest_fail_year)
|
||||
_run("task_generator/suggest_renew", test_suggest_renew_upward)
|
||||
_run("task_generator/suggest_equal_scores", test_suggest_observe_equal_scores_not_renew)
|
||||
_run("task_generator/suggest_observe", test_suggest_observe_default)
|
||||
_run("scanner/no_alerts", test_scanner_no_alerts)
|
||||
_run("scanner/three_levels", test_scanner_three_levels)
|
||||
_run("scanner/skips_non_active", test_scanner_skips_non_active_contracts)
|
||||
_run("html_renderer/basic", test_html_render_basic)
|
||||
|
||||
Reference in New Issue
Block a user