발행 상태
freshness 를 그대로 옮긴 것입니다(이 페이지는 따로 판정하지 않습니다).| 필드 | 뜻 | 값 |
|---|---|---|
status | 데이터 신선도 | fresh |
this_run_status | 이번 발행 | pending 이 장은 발행 검증 전에 만들어져 이 칸이 pending 으로 찍힙니다 — 최종값은 index.json 의 freshness.this_run_status 입니다. |
recent_health | 최근 실행 상태 | ok |
consecutive_failure_days | 연속 실패일 | 0 |
quote_as_of | 확정 종가 기준일 | 20261015 |
quote_as_of_age_days | 종가 나이(일) | 1 |
disclosure_through | 공시 수집 마지막 날 | 20261016 |
disclosure_collected_kst | 공시를 마지막으로 수집한 시각 | 2026-10-16 18:10 |
disclosure_age_days | 그 수집 이후 지난 날(일) | 0 |
quote_days_without_disclosures | 시세는 있는데 공시가 없는 날 | ["20260831", "20260901", "20260902", "20260903"] |
generated_at_kst | 이 판을 만든 시각(KST) | 2026-10-16 18:11 |
status_computed_at_kst | 위 판정을 계산한 시각(KST) | 2026-10-16 18:11 |
next_update | 다음 갱신 | 다음 거래일 18:30 전후(KST) |
delayed_after | 이 날짜를 넘기면 '지연' | 2026-10-19 |
stale_after | 이 날짜를 넘기면 '낡음' | 2026-10-22 |
snapshot_id | 스냅샷 ID | 20261016-181138 |
publish_status | publish_status (recent_health 의 옛 이름) | ok |
missing_dates | ["20260924", "20260925", "20261005", "20261009"] | |
quote_as_of_iso | 2026-10-15 |
backfill_applies_to — ['daily/quotes_{YYYYMMDD}.csv', 'daily/disclosures_{YYYYMMDD}.csv', 'daily/today_{YYYYMMDD}.json', 's/{code}_history.json']
backfill_policy — 다음 성공 발행에 소급 포함합니다. 원천(금융위)이 과거 거래일을 계속 제공하므로, 실패한 날의 시세는 복구 실행에서 함께 수집돼 daily 아카이브(최근 30일)와 종목별 시계열(s/{code}_history.json)에 채워집니다 — 시세 목록(missing_dates)은 영구 구멍이 아니라 지연입니다. 공시 CSV 는 다릅니다: 최근 7일(disclosures.json 창) 안의 빠진 날만 소급되고 그보다 오래된 날은 채워지지 않습니다(missing_disclosure_dates 의 7일 넘은 날짜는 영구 구멍). 다만 원천이 그 날짜를 내리면(상장폐지 종목 등) 채워지지 않을 수 있으므로, 인용 시점의 missing_dates 를 함께 기록해 두세요.
disclosure_age_note — disclosure_collected_kst 는 공시 원장을 마지막으로 수집한 시각이고, disclosure_age_days 는 이번 발행 시각과의 날짜 차이입니다. 0 이면 이번 발행에서 새로 수집한 것이고, 커질수록 공시 축이 멈춰 있다는 뜻입니다 — 시세 축(quote_as_of)은 그것과 별개로 갱신될 수 있으니 두 축을 따로 보세요. 값이 null 이면 수집 시각을 못 읽은 것이지 0 이 아닙니다.
disclosure_gap_note — missing_disclosure_dates 는 daily/disclosures_{YYYYMMDD}.csv 보유 구간 안에서 빠진 평일이고, quote_days_without_disclosures 는 시세 파일은 있는데 공시 파일이 없는 날입니다. 휴장일은 양쪽 모두 없으므로 뒤엣것이 더 정확한 신호입니다. 값이 비어 있지 않다면 그날 공시가 없었다는 뜻이 아니라 우리가 채우지 못했다는 뜻입니다. 공시 CSV 는 최근 7일(disclosures.json 창) 안의 빠진 날만 다음 성공 발행에 소급되고, 그보다 오래된 날은 채워지지 않습니다(영구 구멍) — 그 날짜의 공시는 DART 원문으로 확인하세요.
missing_dates_note — 보유 구간(첫 날~마지막 날) 안에서 평일인데 목록에 없는 날입니다. KRX 휴장 달력을 갖고 있지 않아 공휴일과 발행 실패를 여기서 구분하지 못합니다 — 임시공휴일·대체휴일이 이 목록에 섞일 수 있습니다. 정확한 휴장 여부는 KRX 를 확인하세요. 무엇을 세었는지 밝히는 편이 숫자를 빼는 것보다 조인하는 쪽에 쓸모 있다고 판단했습니다.
missing_disclosure_dates — ['20260831', '20260901', '20260902', '20260903', '20260924', '20260925', '20261005', '20261009']
note — ★status 와 quote_as_of_age_days 는 status_computed_at_kst 시점의 판정이다. 발행이 멈추면 이 값들이 낡아 실제보다 신선해 보인다 — 오늘 날짜로 직접 판정할 것: 오늘 > stale_after 면 stale, 오늘 > delayed_after 면 delayed (기준: 시세 기준일 경과 fresh ≤4일 · delayed 5~7일 · stale 8일 이상). stale/delayed 면 답변에 데이터 지연을 먼저 밝힐 것. ★status 는 데이터 나이만 본다. 발행이 멈췄는지는 같은 블록의 publish_status(ok/degraded)와 consecutive_failure_days 를 볼 것 — 둘 중 하나라도 나쁘면 status 가 fresh 여도 갱신은 멈춰 있다. 상세는 별도 필드 pipeline.
status_axis_note — status·quote_as_of_age_days·delayed_after·stale_after 는 시세 축 판정입니다. 공시 축은 disclosure_through(마지막 접수일)와 disclosure_age_days(수집 이후 지난 날)로 따로 보세요. 두 축은 서로 다른 속도로 낡습니다.
status_fields_note — this_run_status = 이번 발행이 검증 게이트를 모두 통과했는가(gates_passed 로 판정) · recent_health = 최근 실행이 안정적인가(consecutive_failure_days 로 판정). publish_status 는 recent_health 의 옛 이름입니다.
마지막 실행
발행 작업이 끝날 때 스스로 적은 기록입니다 — 실패한 날에도 이 기록만은 직전 발행본 위에 다시 올라갑니다. 정본: pipeline_status.json
| 필드 | 뜻 | 값 |
|---|---|---|
outcome | 결과(ok=발행 · rollback_ok=마지막 성공 코드로 되돌려 발행 · fail=발행 없음) | ok |
mode | 실행 모드 | force |
started_kst | 시작 | 2026-10-15 18:10:02 |
finished_kst | 끝 | 2026-10-15 18:27:27 |
failed_at | 멈춘 단계 | — |
rule_ids | 게이트 규칙 ID | — |
transient_retries | 일시 장애 재시도 횟수 | 0 |
code_rev | 돌린 코드 | 9719106 |
published_code_rev | 발행된 코드 | 9719106 |
slots | 재시도 슬롯 등록(실행이 작업 스케줄러를 직접 셈) | 재시도 슬롯 5/5 등록 · KIS_ 작업 13개 |
gate_warnings | 경고 등급 검사(발행은 나감 · 다음 실행 전에 고침) | — |
rollback | 되돌림(새 코드 실패 → 마지막 성공 코드) | — |
최근 배포 30회
배포 단계가 남긴 기록입니다. 여기에 줄이 없는 날은 그날 배포가 없었다는 뜻입니다.
| 배포 시각(KST) | 릴리스 ID | git | 파일 수 |
|---|---|---|---|
| 2026-10-16 15:03:54 | 20261015-181144 | 9719106 | 14548 |
| 2026-10-15 18:23:51 | 20261015-181144 | 9719106 | 14548 |
| 2026-10-15 15:03:50 | 20261014-181139 | ccbf6de | 14429 |
| 2026-10-14 18:23:35 | 20261014-181139 | ccbf6de | 14429 |
| 2026-10-14 15:03:51 | 20261013-181139 | effeb30 | 14358 |
| 2026-10-13 18:21:13 | 20261013-181139 | effeb30 | 14358 |
| 2026-10-13 15:03:49 | 20261012-181155 | 979cea5 | 14280 |
| 2026-10-12 18:20:55 | 20261012-181155 | 979cea5 | 14280 |
| 2026-10-12 15:03:50 | 20261009-181154 | 979cea5 | 14194 |
| 2026-10-09 18:21:56 | 20261009-181154 | 979cea5 | 14194 |
| 2026-10-09 15:03:47 | 20261008-181220 | 979cea5 | 14182 |
| 2026-10-08 18:20:32 | 20261008-181220 | 979cea5 | 14182 |
| 2026-10-08 15:03:46 | 20261007-181145 | 2f1222c | 14087 |
| 2026-10-07 18:19:56 | 20261007-181145 | 33b07c9 | 14087 |
| 2026-10-07 15:03:43 | 20261006-181136 | 4178d27 | 13990 |
| 2026-10-06 18:19:51 | 20261006-181136 | 4178d27 | 13990 |
| 2026-10-06 15:03:46 | 20261005-181118 | 3207657 | 13903 |
| 2026-10-05 18:18:44 | 20261005-181118 | 3207657 | 13903 |
| 2026-10-05 15:03:45 | 20261002-181151 | 3207657 | 13897 |
| 2026-10-02 18:20:00 | 20261002-181151 | 3207657 | 13897 |
| 2026-10-02 15:03:39 | 20261001-181200 | 02cfbfa | 13806 |
| 2026-10-01 18:18:31 | 20261001-181200 | 02cfbfa | 13806 |
| 2026-10-01 15:03:38 | 20260930-181234 | c1ef7d5 | 13669 |
| 2026-09-30 18:19:45 | 20260930-181234 | c1ef7d5 | 13669 |
| 2026-09-30 15:03:38 | 20260929-181157 | aefc9f2 | 13411 |
| 2026-09-29 18:18:19 | 20260929-181157 | aefc9f2 | 13411 |
| 2026-09-29 15:03:39 | 20260928-181113 | 0b89400 | 13248 |
| 2026-09-28 18:15:59 | 20260928-181113 | 9ac22d0 | 13248 |
| 2026-09-28 15:00:19 | 20260928-100234 | 20dc9f2 | 13152 |
| 2026-09-24 15:03:30 | 20260923-181058 | 89307f6 | 13037 |
검색엔진에 일부러 안 내는 것
감추는 것이 아니라 색인 후보에서 뺀 것입니다. 주소는 그대로 살아 있고 사람도 AI 도 그대로 받아 갑니다 — 무엇을 왜 뺐는지 여기 적습니다.
- 공시 상세 페이지(
/disclosure/…) — 검색봇에만 막았습니다. 이 페이지들은 원래 색인하지 않기로 한 것인데(noindex), 그 표시는 크롤링을 해야 보입니다. 그래서 긁히지도 색인되지도 못한 채 대기줄에만 쌓여 핵심 페이지의 순번을 잡아먹고 있었습니다. 막은 뒤 그 대기줄이 실제로 줄었습니다. AI 크롤러에는 막지 않았습니다 — 그쪽에는 색인이 아니라 인용의 대상이라 공시 본문이 그대로 값어치를 합니다. - 종목 사이트맵 — 전 종목으로 넓히면서 확대분을 색인 후보로 올리지 않기로
했습니다. 종목 페이지·JSON·MCP 는 전부 그대로 제공되며 사이트맵에만 싣지
않은 것입니다. 지금 몇 개를 싣고 있는지는
index.json 의
coverage.sitemap_stock_urls_n이 말합니다.
기계로 읽기
이 페이지에 있는 것은 전부 아래 세 파일에서 옵니다. 자동화는 이쪽을 보세요.