왜 격리되어 있나
`pages.yml` 한 워크플로우에 site + petri-bundle 이 묶여 있으면, site Next.js 빌드 실패가 petri-bundle 배포까지 끌어내립니다. PR #1314 로 ratchet 을 분리: petri 변경은 site 와 무관한 별도 워크플로우에서 검증, site 빌드 실패는 petri 의 deploy 를 막지 못함.
구성 요소
| 파일 | 역할 |
|---|---|
.github/workflows/petri-publish.yml | 전용 PR-gate + 매일 cron. docs/self-improving/petri-bundle/** + validator + hygiene 변경 시 가동 |
.github/workflows/pages.yml | validator 호출을 npm install/build 직전 으로 이동. 빌드 비용 낭비 차단 |
scripts/validate_petri_bundle.py | zip 내부 header.json.results 까지 검증 (results=None / empty scores / empty metrics 거부) |
scripts/check_repo_hygiene.py | PETRI_EVAL_FLOOR=9 삭제 보호 ratchet |
zipfile-zstd dev dep | Python 3.12-3.13 의 zstd shim. 3.14+ 에서는 no-op |
운영자 트리거
# 로컬 검증 uv run python scripts/validate_petri_bundle.py uv run python scripts/check_repo_hygiene.py # 수동 workflow 실행 gh workflow run petri-publish.yml --ref main # 직전 회귀 점검 gh run list --workflow=petri-publish.yml --limit=10
알려진 trigger 패턴
`inspect_ai #1747` 의 `formatPrettyDecimal(g.metrics[i].value)` TypeError. 원인은 header.json 의 results=None / scores[] 빈 배열 / metrics 빈 dict. validator 는 위 세 케이스를 PR-gate 에서 차단합니다. 직전 사례: PR #1129 partial archive, PR #1130 error archive.
참조: PR #1314, `tests/test_validate_petri_bundle.py` (13 tests).