operation.testing Operation observed

dartlab 테스트 · CI 운영 규칙

dartlab 테스트 · CI 운영 규칙 운영 규칙을 Skill OS에서 확인하고 변경 전후 검증 게이트로 사용한다.

이 스킬

dartlab 테스트 · CI 운영 규칙

dartlab 테스트 · CI 운영 규칙 운영 규칙을 Skill OS에서 확인하고 변경 전후 검증 게이트로 사용한다.

Operation observed operation.testing

절차

실행 순서

  1. 1

    1. 핵심 원칙 — 4 개로 간다 기준을 확인한다.

  2. 2

    2. 3-Tier CI 구조 기준을 확인한다.

  3. 3

    Tier 1 — `ci-fast.yml` (PR + master push, 목표 ≤ 3 분) 기준을 확인한다.

  4. 4

    Tier 2 — `ci-full.yml` (master push only, 목표 ≤ 10 분) 기준을 확인한다.

  5. 5

    Tier 3 — `ci-nightly.yml` (cron 15:00 UTC = KST 00:00, 목표 ≤ 45 분) 기준을 확인한다.

  6. 6

    **module scope 권장** — 파일 단위 로드·해제.

  7. 7

    **session scope 지양** — Company 여러 개 로드 누적 시 OOM.

  8. 8

    **function scope** — 필요하면 사용, `gc.collect()` 권장.

  9. 9

    root `dartlab` logger 에 stderr `StreamHandler` 자동 부착 (최초 1 회).

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • dartlab 테스트 · CI 운영 규칙 규칙 확인
  • testing 작업을 Skill OS에서 시작

출력

기대 결과

  • 작업 경로
  • 확인한 근거
  • 검증 결과

Skill OS 흡수 규칙

  • 이 skill이 공식 진입점이다. 삭제된 운영 문서 경로를 다시 안내하지 않는다.
  • 공개 호출 방식과 대표 반환 형태는 skill에서 확인하고, 세부 필드는 capability/docstring으로 검산한다.
  • 분석이나 변경 결과는 ref, 실행 로그, 테스트 결과로 검증한다.

실행 순서

    1. 핵심 원칙 — 4 개로 간다 기준을 확인한다.
    1. 3-Tier CI 구조 기준을 확인한다.
  • Tier 1 — ci-fast.yml (PR + master push, 목표 ≤ 3 분) 기준을 확인한다.
  • Tier 2 — ci-full.yml (master push only, 목표 ≤ 10 분) 기준을 확인한다.
  • Tier 3 — ci-nightly.yml (cron 15:00 UTC = KST 00:00, 목표 ≤ 45 분) 기준을 확인한다.
  • module scope 권장 — 파일 단위 로드·해제.
  • session scope 지양 — Company 여러 개 로드 누적 시 OOM.
  • function scope — 필요하면 사용, gc.collect() 권장.
  • root dartlab logger 에 stderr StreamHandler 자동 부착 (최초 1 회).

L0~L1.5 완료 게이트

core/gather/providers(dart,edgar)/scan/frame/synth/reference 경계 변경은 Guard strict 명령을 통과해야 완료다. edinet 은 API 통신 불가 deferred provider 로 provider strict scope 에서 제외한다.

python -X utf8 tests/audit/dartlabGuard.py strict --scope l0-l15 --providers dart,edgar

Guard strict 는 cycle scan, architecture pytest, provider mirror, gather gate, provider gate, public API smoke 를 순서대로 실행하고 externalGates[] 에 원 명령과 결과를 남긴다. CI Fast 의 architecture-l0-l15 job 은 이 gate 를 warning 이 아니라 failure 로 다룬다.

Guard Index 회귀 방지 체계

pytest 는 회귀를 실패시키는 표면이고, 전수조사는 AST/import graph/baseline scanner 가 맡는다. 전체 pytest tests/ -v 실행은 메모리·시간 비용이 커서 품질 증명의 기본값으로 쓰지 않는다.

공식 gate 는 3 단계다.

  • quick — 변경 파일과 reverse dependency 영향 테스트만 실행한다. 목표 5~15 초. 개발 중 기본 확인.
  • strict-l0-l15 — L0~L1.5 architecture/provider/gather/public API gate. PR 필수 fail gate.
  • full-census — 전체 repo 전수조사. nightly/release 전 확인.

Guard Index 공식 interface:

python -X utf8 tests/audit/dartlabGuard.py quick
python -X utf8 tests/audit/dartlabGuard.py strict --scope l0-l15 --providers dart,edgar
python -X utf8 tests/audit/dartlabGuard.py full --baseline tests/audit/_baselines/dartlabGuard.json
python -X utf8 tests/audit/dartlabGuard.py strict --scope l0-l15 --providers dart,edgar --json

기존 audit script 는 제거하지 않는다. Guard Index 는 기존 script 를 rule source 로 사용하고, AST index 와 baseline ledger 결과를 같은 실행 표면으로 묶는다. full-census 는 nightly/release 용 전수조사이며 tests/audit/_baselines/dartlabGuard.json 을 대표 원장으로 사용한다.

audit / lint 스크립트 인벤토리

tests/audit/ 의 모든 audit·lint 스크립트는 본 spec 또는 명시한 다른 SSOT 에 등록되어야 한다 (운영자↔AI feedback rule feedback_no_orphan_scripts). 표 외 신규 스크립트는 PR 차단. scripts/ 폴더 절대 금지 — 새 도구는 무조건 도메인 폴더 (tests/audit/, src/dartlab/{@html String.fromCharCode(123)}engine{@html String.fromCharCode(125)}/, .github/scripts/, notebooks/_scripts/, landing/_scripts/, blog/_scripts/, .claude/) 안에 둔다.

Guard Index 가 subprocess 로 호출하는 게이트 (PR 필수)

tests/audit/dartlabGuard.pystrict --scope l0-l15full 명령이 직접 실행한다. 단독 호출도 가능.

스크립트실행 트리거
tests/audit/cycleScan.py모듈 import 양방향 사이클 검출 (단방향 허용). --strict-toplevel 옵션Guard strict 의 1 번째 게이트
tests/audit/folderMirror.pyproviders/ 폴더 mirror 검증 (P-트랙 룰 2). --providers dart,edgar --strictGuard strict 의 2 번째
tests/audit/gatherGate.pygather/ 도메인 8 룰 통합 audit (G+ 격상 후 G-트랙)Guard strict/full
tests/audit/providerGate.pyP-트랙 11 룰 통합 gate (한 번에 11 audit). --providers dart,edgarGuard strict/full

Provider P-트랙 룰별 단독 lint (providerGate 가 묶음 호출)

스크립트
tests/audit/folderSize.pyP-트랙 룰 3 — 폴더 vs 단일 .py 임계 검증
tests/audit/initThin.pyP-트랙 룰 4 — __init__.py thin 검증
tests/audit/underscoreModules.pyP-트랙 룰 5 — _*.py 파일명 검증
tests/audit/limitDefault.pyP-트랙 룰 8 — provider collection-반환 메서드 limit keyword 기본값 검증
tests/audit/providerSymmetry.pyP-PR 트랙 — provider method-level symmetry 측정 게이트
tests/audit/behaviorCoverage.pyP-PR 트랙 — 행동 테스트 커버리지 (providers/ 공개 method ↔ tests/providers/ 매핑). --mode baseline\|strict

docstring 게이트

스크립트
tests/audit/docstring4Section.pyP-트랙 룰 6 — 4 섹션 (Args/Returns/Raises/Example) 최소 게이트. PR 차단
tests/audit/docstring9Section.pyG+ 트랙 룰 6b — 9 섹션 rich docstring 측정 (warn-only)
tests/audit/docstringNineSection.pyP-PR 트랙 — providers 한정 9 섹션 측정 게이트
tests/audit/docstring_coverage.pyW-C 트랙 — 9 섹션 충족률 측정

상세 9 섹션 표준은 operation.docstringStandard.claude/skills/docstring-9section/SKILL.md.

코드 품질·구조 게이트

스크립트
tests/audit/qualityGate.pyradon 복잡도 + vulture 죽은 코드 자동 검사
tests/audit/coreBoundary.pycore 경계 lint — src/dartlab/core/ 안 거주 자격 강행 (memory/core_boundary.md)
tests/audit/overSplitInventory.py과분할 폴더 인벤토리 (operation.code 룰 1)
tests/audit/staleImports.pystale top-level import lint — from dartlab import X / import dartlab as Y 잔존 검출
tests/audit/stale_references.py폐기된 API/이름이 코드에 잔존하는지 검증
tests/audit/namingConsistency.py매개변수 의미 일관성 lint — core/naming/aliases.json 표준 사전 검사
tests/audit/snakeCaseInventory.pycamelCase 100% 인벤토리 — snake_case 식별자 카운트
tests/audit/structureMap.pydartlab 전체 구조 맵 자동 생성 (refactor 보조)
tests/audit/testCoverageGate.pyTrack 6 — src/ 새 함수 vs tests/ 참조 매핑 강제
tests/audit/lint_camelcase_ast.pycamelCase + docstring AST lint, diff 기준 (legacy 비차단)
tests/audit/lint_layer_designation.py계층 명명 lint — alias 금지 강행
tests/audit/checkSilentFail.pySilent-fail 패턴 lint (2026-04-19 사고 회귀 차단)

Smoke · timing · 데이터 품질

스크립트
tests/audit/bootstrapTiming.pyCompany 첫 호출 5 초 약속 wall-clock regression. --threshold 5.0 p95
tests/audit/mutationSmoke.pydartlab.core 자작 mutation smoke (Windows 호환, Track 5)
tests/audit/productSmoke.py사용자 공개 API 제품 스모크
tests/audit/externalVenvSmoke.py외부 venv 설치된 dartlab 8 엔진 smoke (nightly CI + 수동 공용)
tests/audit/dataQualityAudit.py전 엔진 데이터 전수조사 (208 호출 품질)
tests/audit/validateNotebooks.pyJupyter 노트북 코드 셀 Python syntax 검증
tests/audit/publicApiCoverage.py공개 API 시나리오 매핑 감사
tests/audit/memoryBudgetAudit.pywithMemoryBudget 공개 시나리오 매핑 감사 (CLAUDE.md 메모리 안전)

진척 측정

스크립트역할
src/dartlab/skills/measureProgress.pybaseline 부채 · docstring backlog · pytest marker 분포 통합 시계열

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported
Server supported
MCP supported
Web AI supported
Pyodide supported

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • Skill OS 검색 없이 과거 문서 경로를 직접 찾음
  • API schema를 skill 본문에 중복해 docstring/기능와 어긋남
  • 검증 게이트 없이 변경 또는 답변을 완료 처리함
절대 금지
  • 삭제된 운영 문서 경로를 공식 진입점으로 안내하지 않는다.
  • 공개 호출 방식, 대표 반환 형태, 오류/제한 동작을 skill과 불일치한 채 방치하지 않는다.