feat(safety): A-2 수집기 ingest 시점 분류 축 부여 — 레지스트리 전파 + 승인 가드 (mig 352~355)

plan safety-library-1 A-2 (classify-skip 경로 전수 커버):
- news_sources 에 material_type/license_scheme/license_redistribute + 안전·공학 12행 시드
- news_collector: 레지스트리 → documents 전파 (_material_axis — paper 는 jurisdiction NULL 강제)
- kosha(사례·첨부=incident, GUIDE=guide)/csb(incident·US)/api_std(standard·US)/law_monitor(law·KR)
  /file_watcher(KGS=law·KR 타깃 매핑) deterministic 부여 + extract_meta.license 주입
- published_date: 소스별 가용 날짜 (GUIDE 공표일·CSB lastmod·API 공지일·법령 공포일·뉴스 발행일)
- classify_worker: document_type→material_type 결정적 매핑 제안 (자동 전이 금지)
- accept-suggestion: material 제안 적용 + law=jurisdiction 필수(기본값 없음) + 청크 미러 1문 동기화
- chunk_worker: 비뉴스 문서 country=jurisdiction 미러 (R3-m3: 검색측 country 소비자 0 실측)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
hyungi
2026-06-13 06:23:22 +09:00
parent 5da94213ec
commit 3feddd012b
14 changed files with 275 additions and 10 deletions
@@ -0,0 +1,8 @@
-- 352_news_sources_material_type.sql
-- 안전 자료실 A-2 (1/4) — 소스 레지스트리에 자료유형 기본값.
-- plan: safety-library-1 A-2. 수집기 ingest 시점 deterministic 부여의 단일 진실 =
-- 레지스트리 행 (country 와 동일 패턴 — 코드 하드코딩/이름 매칭 회피).
-- NULL = 자료유형 비대상 (뉴스/철학 등). paper 소스는 country 가 있어도
-- documents.jurisdiction 은 NULL (국제 학술지 — 코드 레벨 규칙).
ALTER TABLE news_sources ADD COLUMN IF NOT EXISTS material_type TEXT
CHECK (material_type IN ('law', 'paper', 'book', 'incident', 'manual', 'standard', 'guide'));
@@ -0,0 +1,6 @@
-- 353_news_sources_license_scheme.sql
-- 안전 자료실 A-2 (2/4) — 소스별 라이선스 scheme (0-3 license 메타 deterministic 주입).
-- kogl(공공누리류) / ogl(UK) / public_domain(미 연방) / proprietary / unknown.
-- 미확정 소스는 보수적으로 unknown/proprietary + redistribute=false 에서 시작
-- (갱신은 근거 확보 시 완화 방향 — 보수적=빡빡 원칙).
ALTER TABLE news_sources ADD COLUMN IF NOT EXISTS license_scheme TEXT;
@@ -0,0 +1,4 @@
-- 354_news_sources_license_redistribute.sql
-- 안전 자료실 A-2 (3/4) — 재배포 가능 여부. P3 다이제스트/발행류의 구조 게이트 입력
-- (redistribute=false 소스 제외 — 사람 기억 의존 차단, 0-3).
ALTER TABLE news_sources ADD COLUMN IF NOT EXISTS license_redistribute BOOLEAN;
@@ -0,0 +1,45 @@
-- 355_news_sources_material_seed.sql
-- 안전 자료실 A-2 (4/4) — 기존 안전/공학 소스 12행 material_type + license 시드.
-- 매핑 근거 = plan safety-library-1 0-1 경계 확정 (2026-06-12 prod 레지스트리 실측 대조):
-- law=입법예고(신호) / incident=HSE·KOSHA사례·CSB·CCPS / guide=KOSHA GUIDE·TWI
-- / standard=NB·API 공지 / paper=JPVT·arXiv (jurisdiction 은 코드에서 NULL 강제).
-- 뉴스/철학 소스는 NULL 유지 (자료유형 비대상). 이름 키 = 시드 마이그레이션이 부여한 고정값.
UPDATE news_sources SET
material_type = CASE name
WHEN '고용노동부 입법행정예고' THEN 'law'
WHEN 'UK HSE Press' THEN 'incident'
WHEN 'KOSHA 재해사례' THEN 'incident'
WHEN 'US CSB 사고조사보고서' THEN 'incident'
WHEN 'CCPS Process Safety Beacon' THEN 'incident'
WHEN 'KOSHA GUIDE' THEN 'guide'
WHEN 'TWI Job Knowledge' THEN 'guide'
WHEN 'National Board 기술 아티클' THEN 'standard'
WHEN 'API 표준 공지' THEN 'standard'
WHEN 'ASME J. Pressure Vessel Technology' THEN 'paper'
WHEN 'arXiv physics.app-ph' THEN 'paper'
WHEN 'arXiv cond-mat.mtrl-sci' THEN 'paper'
END,
license_scheme = CASE name
WHEN '고용노동부 입법행정예고' THEN 'kogl'
WHEN 'KOSHA 재해사례' THEN 'kogl'
WHEN 'KOSHA GUIDE' THEN 'kogl'
WHEN 'UK HSE Press' THEN 'ogl'
WHEN 'US CSB 사고조사보고서' THEN 'public_domain'
WHEN 'TWI Job Knowledge' THEN 'proprietary'
WHEN 'National Board 기술 아티클' THEN 'proprietary'
WHEN 'API 표준 공지' THEN 'proprietary'
WHEN 'CCPS Process Safety Beacon' THEN 'proprietary'
WHEN 'ASME J. Pressure Vessel Technology' THEN 'proprietary'
WHEN 'arXiv physics.app-ph' THEN 'unknown'
WHEN 'arXiv cond-mat.mtrl-sci' THEN 'unknown'
END,
license_redistribute = CASE name
WHEN 'UK HSE Press' THEN TRUE
WHEN 'US CSB 사고조사보고서' THEN TRUE
ELSE FALSE
END
WHERE name IN ('고용노동부 입법행정예고', 'UK HSE Press', 'KOSHA 재해사례',
'US CSB 사고조사보고서', 'CCPS Process Safety Beacon', 'KOSHA GUIDE',
'TWI Job Knowledge', 'National Board 기술 아티클', 'API 표준 공지',
'ASME J. Pressure Vessel Technology', 'arXiv physics.app-ph',
'arXiv cond-mat.mtrl-sci');