# CHANGELOG

`gildongmu` CLI의 버전별 변경 이력. 날짜는 npm 발행일(KST) 기준이다.

형식은 [Keep a Changelog](https://keepachangelog.com/ko/1.1.0/)를 따르고 버전은 [유의적 버전](https://semver.org/lang/ko/)을 따른다.

---

## [0.11.0] - 2026-09-23

기본 동작(`route walk`의 기본 경로)이 바뀌므로 0.x 관례에 따라 minor로 올린다.

### 변경
- 카탈로그 `route-walk`에 `variant` 파라미터가 실렸다(`shortest`면 최단 경로 — 서버 2026-09-23부터 ko는 카카오 최단, 카카오 장애 시 Tmap 최단, en은 Tmap 최단). 명령 플래그(`--variant`)는 아직 없다.
- **`route walk`의 기본 경로가 앱 화면 첫 줄과 같은 경로 종류가 됐다.** ko는 최단 경로(종전 큰길 우선)이고, `--accessible true`는 종전처럼 계단 회피 경로, `--lang en`은 종전처럼 Tmap 추천 경로다. 서버의 무파라미터 기본 응답은 바뀌지 않았다(CLI가 `variant=shortest`를 붙인다).
- `nearby overview`가 거리·방위를 장소 이름 앞에 둔다(앱 화면과 같은 어순). 종전 `가장 가까운 곳은 봉래면옥으로 남쪽 40m, 김밥천국으로 동쪽 60m입니다.`가 `가장 가까운 곳은 남쪽 40m 지점에 있는 봉래면옥이고, 동쪽 60m 지점에 김밥천국이 있습니다.`가 된다. 지하철역 줄도 같다(`가장 가까운 지하철역은 북동쪽 262m 지점에 있는 5호선 길동입니다.`).

## [0.10.0] - 2026-09-02

### 추가
- **`--lang en`을 `route walk`·`route transit`·`station info`·`station timetable`·`station arrivals`·`nearby subway`에서 받는다.** 종전엔 `route car`·`search`뿐이었다. `route walk --lang en`은 영문 안내 문장을(`Turn right, then walk 600m along Olympic-ro`), 대중교통·역 조회는 `*En` 필드(`lineNameEn`·`messageEn`·`linesEn`·`terminusEn` 등)를 함께 싣는다. 한국어 필드는 어느 응답에서도 그대로다(조인 키).
- `station info --lang en`이 **서울 지하철 교통약자 시설 섹션에도 `lang`을 보낸다**(2026-09-02, 서버 `/api/station/metro-facilities`가 `lang`을 받게 됨). 응답 `metroFacilities`의 음성유도기 항목에 영문 노선명 `parts.lineEn`(예 "Line 5")이 additive로 실린다 — 텍스트 출력은 종전과 같다(문자열 필드 불변). 코레일 시설 섹션은 여전히 `lang`을 받지 않는다.
- `route transit --output json`의 지하철 구간에 **급행 정차역 집합 `expressStops`·`expressStopIds`**(급행 운행이 있는 노선에만 — 현재 9호선, 완행·급행 구간 모두)와 **출구 번호 `exit`**(`board`·`alight`, 역 밖에서 진입·하차하는 구간에만)가 additive로 실린다. 조회 실패·미지 노선은 필드 부재. 텍스트 출력은 불변.

### 변경
- 대중교통 경로의 **환승 구간 빠른하차는 ODsay 빠른환승 문이 정본**이 됐다(`사당 하차, 빠른 환승 5-2 문`). 종전 엘리베이터·계단 최근접 문은 환승 통로와 출구를 구분하지 못해 환승역에서 엉뚱한 문을 골랐다 — 그 안내는 최종 하차 구간에만 남는다.
- `--lang`이 **서버가 `lang`을 받는 명령의 `--help`에만** 나온다. 종전엔 전 명령에 붙어 따릉이·혼잡도처럼 영어를 줄 수 없는 조회에도 옵션을 광고했다.
- `--lang` 값을 정규화하지 않고 그대로 보낸다(종전 `search`는 `en`이 아닌 값을 전부 `ko`로 접었다). `--lang EN` 같은 오타는 **모든 `--lang` 명령**에서 400으로 거절된다 — `route car`(`ko`/`en`)·`chat`(지원 6로케일)도 서버가 검증하게 됐다(2026-09-02, 종전엔 이 둘만 en이 아닌 값을 조용히 한국어로 취급했다).
- **`route car --lang en`이 한국어로 폴백하면 텍스트 출력에 `한국어 안내(영문 미제공)` 한 줄을 요약 줄 다음에 낸다**(경유지·서버 키 부재·기하 요청 — 응답 `guidanceLang: "ko"`). 종전엔 `--output json`에만 보였다. 이를 위해 포매터 계약이 `(body, ctx)`로 바뀌어 요청 `lang`을 받는다 — 폴백 표기는 요청이 en이고 응답이 ko일 때만 선다(ko 요청의 정상 응답과 구분).

### 수정
- `search`에서 한 섹션이 **400**으로 거절되면 다른 섹션이 성공해도 즉시 exit 2로 끝낸다. 종전엔 `allSettled`가 그 거절을 흡수해 장소 섹션이 통째로 사라진 채 정상 종료했다 — 사용자는 "장소가 0건"인지 "요청이 거절됐다"인지 구분할 수 없었다. upstream 장애(502)는 종전대로 부분 성공을 유지한다.

## [0.9.0] - 2026-08-25

### 추가
- **`nearby overview`**: 현재 위치 1km 안을 한눈에 보기(대중교통·식당·카페·아이 놀 곳·문화 행사·무장애 관광지 6불릿). 불릿마다 가까운 곳을 거리순으로 이름 짓고, 조각별 실패는 그 자리에 실패 문장으로 남긴다.
- `route walk`·`route car`에 경유지 1개 **`--via`**(장소명·주소·`위도,경도`). 응답 `waypoint.stepIndex`가 경유지 도착 뒤 첫 단계이고, 텍스트 출력은 그 자리에 `경유지 도착` 줄을 넣는다. `route transit`에 `--via`를 주면 대중교통은 경유지를 지원하지 않는다는 정직 응답(`unsupported: "waypoint"`).
- 대중교통 경로의 지하철 구간에 **하차역 빠른하차 안내**. 엘리베이터·계단에 가장 가까운 문 위치를 알린다(예: `천호 하차, 엘리베이터 6-1 문, 계단 5-1 문`).
- 대중교통 경로의 도보 구간에 **거리와 도착 지점 이름**. 종전 `도보 6분`이 `잠실까지 도보 6분, 391m`이 된다.
- `station timetable`의 노선별 **`coverage`**(`ok`·`noTrains`·`unknown`·`unavailable`). 0행 노선을 목록에서 빼지 않고 "오늘 탑승할 수 있는 편성이 없습니다"·"오늘 시간표를 확인할 수 없습니다"·"시간표를 불러오지 못했습니다"를 구분해 알린다. 인증 정상에 0행이 오는 것은 "편성 없음"의 증거가 아니다.

### 변경
- 대안 경로 이름이 번호 대신 **어느 축에서 나은지**를 알린다(`가장 빠른 경로`·`환승이 가장 적은 경로`). 그런 축이 없는 경로만 번호로 남는다.
- 1km 이상 거리를 소수점 한 자리로 반올림하지 않고 원값으로 적는다(`6.3km` → `6.285km`). 자동차 경로 총거리는 1km 미만이면 미터로 적는다(종전 `0.8km`).
- 보행 인프라(`nearby walk`)의 제공 지역 판정을 사각형에서 국경 폴리곤으로 올렸다. 후쿠오카·대마도 같은 국외 좌표가 "등록된 횡단보도 없음"으로 답하던 문제가 사라진다.

## [0.8.0] - 2026-08-02

### 추가
- 버스 정류소가 0건일 때 **"미제공 지역"과 "반경 안에 없음"을 구분**해 안내한다. 종전에는 둘 다 "주변에 정류소가 없습니다"였는데, 조회 반경이 약 700m 고정이라 0건 대부분은 미제공이 아니라 정상적인 반경 밖이었다.
- `nearby subway`가 0건일 때 **최근접 역과 거리**를 함께 알린다. 지하철역은 전국에 연속 분포해 어떤 임계값도 자의적이므로, 판정 대신 거리를 주어 사용자가 판단하게 한다.
- 따릉이·문화행사처럼 특정 지역에만 있는 도메인에 **지역별 미제공 안내**를 추가했다.

### 수정
- 심야에 `nearby subway`가 근처 역을 통째로 감추던 문제. 실시간 도착 API의 `INFO-200`이 "운행 시간 밖"과 "실시간 미제공 역"에 함께 쓰이는데 후자로만 읽어 역을 목록에서 제외했다. 이제 역은 항상 표시하고 `운행 중`·`운행 종료(첫차 시각 동반)`·`조회 실패`·`정보 없음`을 구분한다.
- 좌표 파라미터를 빠뜨리면 "서비스 지역 밖"이라는 잘못된 안내가 나오던 문제. 빈 문자열이 좌표 0으로 해석되어 적도 앞바다를 조회하고 있었다. 이제 어느 좌표가 필요한지 알리는 오류로 응답한다.

## [0.7.0] - 2026-08-01

### 추가
- `nearby congestion`: 서울 실시간 인구 혼잡도(주요 지점 116곳).
- `nearby events`: 오늘 진행 중인 근처 문화행사(서울, 반경 3km).
- `route walk --accessible`: 계단을 피하는 도보 경로를 요청한다. 무계단 경로가 없으면 기본 경로와 함께 그 사실을 알린다.
- 대중교통 경로의 각 구간에 **운행 시간 밖 표기**. 경로 API가 출발 시각을 반영하지 않아 심야에도 주간 노선을 추천하던 것을 노선 운행시간과 대조해 알린다.

## [0.6.1] - 2026-07-30

### 수정
- `--version`이 실제 설치 버전이 아니라 `0.5.0`을 출력하던 문제. 버전 문자열이 `package.json`과 별개로 소스에 하드코딩되어 있었다.
- 자동차 경로 안내에서 거리가 `0m`로 중복 표기되던 문제. 안내 문장이 거리를 이미 포함하는 경우 별도 수치를 붙이지 않는다.

## [0.6.0] - 2026-07-29

### 추가
- 대한민국 밖 좌표를 조회하면 **서비스 지역 밖임을 안내**한다. 오류가 아니라 정상 응답이며, 검색이나 역 정보처럼 좌표가 필요 없는 기능은 그대로 쓸 수 있음을 함께 알린다.

## [0.5.0] - 2026-07-28

### 추가
- `nearby walk`: 보행 인프라(음향신호기·횡단보도·점자블록).

### 변경
- **기본 API 주소가 `https://gildongmu.dodoplanet.space`로 바뀌었다.** 종전 주소도 계속 동작하지만, 명시적으로 지정해 쓰고 있었다면 갱신을 권한다.

## [0.4.0] - 2026-07-22

### 추가
- `station timetable`: 도시철도역 첫차·막차 시각. 요일 구분과 익일 표기를 포함한다.
- `station info`에 첫차·막차 섹션, 교통약자 시설 보강 그룹(음성유도기·엘리베이터), 배차간격을 더했다.

### 수정
- 종착역명이 없는 편성에서 행선지가 `행`만 남아 낭독되던 문제.

## [0.3.0] - 2026-07-21

### 추가
- `route walk`: 도보 경로 브리핑(단계별 안내 문장).

## [0.2.0] - 2026-07-20

### 제거
- **`attractions-search` 엔드포인트를 제거했다**(호환성 깨짐). 장소 검색이 정확도순으로 바뀌면서 관광지·명소가 일반 검색 결과에 자연히 포함되어 별도 엔드포인트가 중복이 됐다. `search` 명령을 대신 쓴다.

### 수정
- 역 이름에 접미사가 겹쳐 `서울역역`으로 출력되던 문제.
- 위치를 지오코딩으로 못 찾을 때 장소명 검색으로 한 번 더 시도한다.

## [0.1.0] - 2026-07-16

첫 공개 발행.

- 명령: `search`·`web`·`nearby`(7종)·`station`(info·arrivals)·`bus route`·`route`(car·transit)·`weather`·`air`·`whereami`·`place barrier-free`·`chat`(단발·REPL).
- 위치 지정 3가지: `--lat`/`--lng`, `--near`(지오코딩), `config set location`(기본값).
- 스크린 리더를 염두에 둔 산문 출력. 한 줄에 한 항목을 담고, "0건"과 "정보 없음"과 "조회 실패"를 뭉개지 않는다.
- 셸 자동완성(bash·zsh·fish), `gildongmu`·`gil` 두 명령 등록.
- 계정·토큰 없이 공개 REST API를 그대로 호출한다.

[0.8.0]: https://www.npmjs.com/package/gildongmu/v/0.8.0
[0.7.0]: https://www.npmjs.com/package/gildongmu/v/0.7.0
[0.6.1]: https://www.npmjs.com/package/gildongmu/v/0.6.1
[0.6.0]: https://www.npmjs.com/package/gildongmu/v/0.6.0
[0.5.0]: https://www.npmjs.com/package/gildongmu/v/0.5.0
[0.4.0]: https://www.npmjs.com/package/gildongmu/v/0.4.0
[0.3.0]: https://www.npmjs.com/package/gildongmu/v/0.3.0
[0.2.0]: https://www.npmjs.com/package/gildongmu/v/0.2.0
[0.1.0]: https://www.npmjs.com/package/gildongmu/v/0.1.0
