job-grade-deliverable.yaml
このページは
docs/ja/projects/prj-0001/jobs/job-grade-deliverable.yamlから生成された表示用ページです。正本は YAML ファイルであり、このページは再生成できます。
yaml
# yaml-language-server: $schema=../../../../specdojo/schemas/v1/job.schema.yaml
id: job-grade-deliverable
name: 成果物の継続品質評価
description: 成果物を文書単位の agy 単段評価へ流し、最新の品質と done_criteria 充足状況を更新する。
inputs:
period:
type: string
required: true
limit:
type: integer
default: 0
minimum: 0
dependency_changed:
type: boolean
default: false
rulebook_changed:
type: boolean
default: false
unreviewed:
type: boolean
default: false
# 経過措置(PJR-N03W): changed_only・ungraded・incomplete は、review の中で grade を実行する
# PJR-KCMH の完了まで残す。KCMH の完了後に、この 3 入力と対応する routine の入力を外す。
changed_only:
type: boolean
default: false
ungraded:
type: boolean
default: false
incomplete:
type: boolean
default: false
# 保存済みの結果が現在の grade_rubric と異なる版(または版の記録なし)で付けられた成果物を選ぶ
# (PJR-BVPS)。rubric を改めたとき、旧版の結果を limit の範囲で少しずつ評価し直す。
rubric_outdated:
type: boolean
default: false
task:
mode: command
owner: ARC
# run-per-document.sh は、完了した成果物と失敗した成果物が混在すると 2 を返す。
# runner はこの値だけを review 可能な partial とし、それ以外の非0は failed にする。
partial_exit_code: 2
precondition:
command: |
selection=$(
if [ "{{inputs.dependency_changed}}" = "false" ] && [ "{{inputs.rulebook_changed}}" = "false" ] && [ "{{inputs.unreviewed}}" = "false" ] && [ "{{inputs.changed_only}}" = "false" ] && [ "{{inputs.ungraded}}" = "false" ] && [ "{{inputs.incomplete}}" = "false" ] && [ "{{inputs.rubric_outdated}}" = "false" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}}
else
if [ "{{inputs.dependency_changed}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --dependency-changed || exit $?
fi
if [ "{{inputs.rulebook_changed}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --rulebook-changed || exit $?
fi
if [ "{{inputs.unreviewed}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --unreviewed || exit $?
fi
if [ "{{inputs.changed_only}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --changed-only || exit $?
fi
if [ "{{inputs.ungraded}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --ungraded || exit $?
fi
if [ "{{inputs.incomplete}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --incomplete || exit $?
# 上限到達成果物は処理対象外だが、report-only Job を起動するため precondition に含める。
{{specdojo}} grade state --target deliverable --project {{project_id}} --exhausted || exit $?
fi
if [ "{{inputs.rubric_outdated}}" = "true" ]; then
{{specdojo}} grade list --target deliverable --project {{project_id}} --rubric-outdated || exit $?
fi
fi
)
printf '%s\n' "$selection" | LC_ALL=C sort -u | awk -v limit="{{inputs.limit}}" '
NF && (limit == 0 || selected < limit) {
print
selected++
}
'
skip_when: empty-output
command: |
if npm run build; then
:
else
build_status=$?
printf 'grade prerequisite build failed: exit_code=%s\n' "$build_status" >&2
exit 1
fi
if tools/grade/run-per-document.sh --run-id {{job_run_id}} --stages 1 --stage-1-executor agy-expert-executor --target deliverable --limit {{inputs.limit}} --dependency-changed={{inputs.dependency_changed}} --rulebook-changed={{inputs.rulebook_changed}} --unreviewed={{inputs.unreviewed}} --changed-only={{inputs.changed_only}} --ungraded={{inputs.ungraded}} --incomplete={{inputs.incomplete}} --rubric-outdated={{inputs.rubric_outdated}}; then
cat logs/grade/runs/per-document/{{job_run_id}}/results.tsv
else
grade_status=$?
cat logs/grade/runs/per-document/{{job_run_id}}/results.tsv
if [ "$grade_status" -eq 2 ]; then
printf 'grade pipeline partial: run_id=%s exit_code=%s\n' '{{job_run_id}}' "$grade_status" >&2
else
printf 'grade pipeline failed: run_id=%s exit_code=%s\n' '{{job_run_id}}' "$grade_status" >&2
fi
exit "$grade_status"
fi
analysis:
agent: gemma-reporter
description: |
runner が記録した command evidence の終了コードと、stdout に出力された
`results.tsv` から次を判断して報告する。
- 終了コード75(rate limit)または中断で未完了の段が残っているか。残る場合は同じ
`--run-id` で再開できる状態かを確認する。
- `failed` の段があるか。ある場合は agent 側の失敗、`grade apply` による executor の
marker の機械変換の拒否、done_criteria の過不足のいずれかへ切り分ける。
- Run が `partial` の場合は、`passed` の成果物が1件以上あり、各 `failed` の成果物と
失敗段が pipeline state に記録されて次の Run の `--incomplete` で選択できるかを確認する。
- `retry_exhausted` の成果物があるか。ある場合は失敗段と連続失敗回数を示し、人手での
原因解消または state の再開判断を促す。
- agy 単段の verdict と score に、評価設定の見直しを要する偏りがあるか。
- 未充足の done_criteria がある成果物と、その確認担当ロールを特定する。
選択された成果物が0件の場合は no-op と判断する。判断できない事象は推測で埋めず、
観測した事実と未確認の範囲を分けて報告する。
paths:
- docs/ja/projects/prj-0001
# PJR-MD3C: 出力は統合前に review する。起動元(routine・手動の exec run --job)によらず、
# exec の worktree で実行し、runner の commit、review、verdict による統合の流れで動く。
# review agent は自動選択に任せず、ここで指名する。
review:
agent:
executor: claude-expert-review-executor
reporter: claude-reporter
run:
idempotency_key: "{{job_id}}:command-v8:{{scheduled_at}}:{{inputs.limit}}:{{inputs.dependency_changed}}:{{inputs.rulebook_changed}}:{{inputs.unreviewed}}:{{inputs.changed_only}}:{{inputs.ungraded}}:{{inputs.incomplete}}:{{inputs.rubric_outdated}}"