8000 docs: 웹 읽기 재시도 결론과 운영 검증 기록 by hmmhmmhm · Pull Request #358 · hmmhmmhm/daiso-mcp · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8000
14 changes: 8 additions & 6 deletions docs/superpowers/plans/2026-11-02-web-read-retry.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

**Architecture:** 고정 가상 작업만 받는 실행번호별 Durable Object와 기존 실험 Worker를 사용한다. 운영 변경은 실험 이후 판단하며 JSON/MCP 계약을 보존한다.

- [ ] tests/scripts/web-read-lab-jobs.test.ts: 첫 지연·저장된 동일 결과·동시접수·pending/ready 링크·알람완료·24시간정리·외부실패 전파 회귀를 먼저 추가하고 resource guard를 통한 RED 확인.
- [ ] experiments/web-read-lab/jobs.ts 및 worker.ts/wrangler.toml: 고정 cold5/start5/result5 경로와 독립 DO 바인딩 구현. 가상시계 GREEN 후 기존 lab 회귀 및 CI/Coverage/리뷰 확인, 병합·실험 배포.
- [ ] BrowserSkill 소유 창1개/임시 채팅별 새 실행번호: delay5 대조 재시도, cold5 첫실패/동일URL재시도, start5 접수/실제결과링크를 직렬 비교. 캡처를 탐색 전에 시작하고 각 표본 후 UI와 서버 ID·시각을 저장한 뒤 탭 회수.
- [ ] README, src/pages/llms.ts 등 공통 발견 안내와 docs/client-guide.md, service-reference.md, web-reading-troubleshooting.md를 검색해 완성 URL 복사 재전송 문구와 실제 링크 우선 지침을 통일. 원본 이미지·freshness·공개도구10 계약 유지.
- [ ] 접수 실험이 성공하면 운영의 저장·권한·한도·원본 오류·작업수 제한 설계를 구체화한 뒤 회귀·리뷰·CI로 구현/배포. 성공을 확인하지 못하면 운영 확대 없이 제한과 후속 조건을 기록.
- [ ] PROJECT.md와 web-read-lab/2026-11-02에 결과·정확한 한계·배포 근거 저장, 세션 및 탭 정리, CI/배포 결과를 확인해 보고.
- [x] tests/scripts/web-read-lab-jobs.test.ts: 첫 지연·저장된 동일 결과·동시접수·pending/ready 링크·알람완료·24시간정리·외부실패 전파 회귀를 먼저 추가하고 resource guard를 통한 RED 확인.
- [x] experiments/web-read-lab/jobs.ts 및 worker.ts/wrangler.toml: 고정 cold5/start5/result5 경로와 독립 DO 바인딩 구현. 가상시계 GREEN 후 기존 lab 회귀 및 CI/Coverage/리뷰 확인, 병합·실험 배포.
- [x] BrowserSkill 소유 창1개/임시 채팅별 새 실행번호: delay5 대조 재시도, cold5 첫실패/동일URL재시도, start5 접수/실제결과링크를 직렬 비교. 캡처를 탐색 전에 시작하고 각 표본 후 UI와 서버 ID·시각을 저장한 뒤 탭 회수.
- [x] README, src/pages/llms.ts 등 공통 발견 안내와 docs/client-guide.md, service-reference.md, web-reading-troubleshooting.md를 검색해 완성 URL 복사 재전송 문구와 실제 링크 우선 지침을 통일. 원본 이미지·freshness·공개도구10 계약 유지.
- [x] 접수 실험이 성공하면 운영의 저장·권한·한도·원본 오류·작업수 제한 설계를 구체화한 뒤 회귀·리뷰·CI로 구현/배포. 성공을 확인하지 못하면 운영 확대 없이 제한과 후속 조건을 기록.
- [x] PROJECT.md와 web-read-lab/2026-11-02에 결과·정확한 한계·배포 근거 저장, 세션 및 탭 정리, CI/배포 결과를 확인해 보고.

검증 결과: [2026-11-02 실험 결론](../../web-reading-lab-results-2026-11-02.md). 운영 접수형은 PR350으로 다이소 읽기 세션에 반영했고 필수 검사 및 실제 ChatGPT·CLI·MCP 조회를 확인했다.
34 changes: 34 additions & 0 deletions docs/web-reading-lab-results-2026-11-02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# 웹 읽기 재시도와 접수형 조회 실험

2026년11월2일 실제 ChatGPT 웹의 새 임시 채팅에서 비교했다. 고정 가상 데이터를 쓰는 별도 Worker와 실제 운영 조회를 구분했다. 임시 채팅 UI와 개인화 제외 선택을 확인했으며, 답변의 자기보고만으로 실행 성공을 판정하지 않았다. 가상 실험은 서버 requestId·jobId·resultId와 received/prepared 기록을 대조했다. 이번 실험의 원시 웹 도구 인자나 내부 캐시 설정을 확보한 것은 아니다.

## 결론

**첫 실패 뒤 같은 URL을 재시도하면 성공할 것이라고 가정할 수 없다.** 완료 결과를 서버에 저장해도 동일 주소 재시도가 실패했다. 반면 즉시 접수하고 응답마다 새 실제 결과 링크를 제공하면 완료 결과를 읽는 사례를 확보했다.

| 조건 | 관측 |
| --- | --- |
| 매번5초 지연, 저장 없음 | 첫 요청과 같은 주소 재시도 모두 시간 초과 |
| 첫5초 뒤 완료 결과 저장 | 같은 주소 재시도는 시간 초과 유지. 서버 알람으로 저장된 결과는 별도 결과 URL에서 읽힘 |
| 즉시 접수, 같은 결과 링크 반복 | 첫 pending을 반복해서 읽음. 답변은 두 번 재확인했다고 했지만 관측된 결과 주소 도착은 한 번 |
| 즉시 접수, 응답마다 새 실제 결과 링크 | 독립 임시 채팅 두 건 모두 최대3회 링크 선택 안에 ready와 가상 수량7 확인. 서로 다른 요청 ID와 같은 작업 ID를 서버 기록으로 대조 |
| 운영 다이소 읽기 세션 | pending 뒤 후속 링크 한 번으로 success:true. 같은 결과 주소를 별도 HTTPS로 확인해 읽기 ID·본문·완료 시각 일치 확인 |

같은 주소 재시도에서 새 서버 도착이 확인되지 않고 실패나 pending이 유지되는 현상은 웹 도구의 사본 재사용 또는 참조 처리 차이와 양립한다. 내부 캐시 정책이나 모든 계정의 동작으로 단정하지 않는다. HTML의 no-store만으로 사본 재사용을 막는다고 보장할 수 없다. 접수 응답에서 URL이 보이지 않아 후속으로 진행하지 못한 표본도 있었으며, 실제 href와 완성 URL을 함께 제공하도록 보강했다.

브라우저 편집기 포커스·페이지 준비·제어 컨텍스트 문제로 전송 전 중단된 시도는 웹 조회 실패 표본에 포함하지 않았다. 소유 창과 탭만 순차 사용하고 finally에서 캡처와 세션을 회수했다.

## 운영 반영

[PR347](https://github.com/hmmhmmhm/daiso-mcp/pull/347)은 격리된 가상 작업을 추가했고, [PR349](https://github.com/hmmhmmhm/daiso-mcp/pull/349)는 새 결과 링크와 완성 URL을 추가했다. [PR348](https://github.com/hmmhmmhm/daiso-mcp/pull/348)은 사용자 복사 재전송 문구와 문서의 실제 링크 우선 규칙을 통일했다.

[PR350](https://github.com/hmmhmmhm/daiso-mcp/pull/350)은 우선 다이소 `/browse/read` 조회에 접수형 처리를 적용했다.1초 안에 끝나면 기존 결과를 반환하고, 느린 경우 접수 HTML과 새로운 결과 확인 링크를 반환한다. 상태 확인은 저장 결과만 읽으며 원본 API를 재호출하지 않는다. 원본의 IP·권한·한도·캐시와 오류 상태를 유지한다.25초 작업 제한,5분 조회 수명,256KiB 저장 상한을 적용한다. 요청 헤더·토큰·쿠키는 저장하지 않는다. 연결 종료 전부터 수명을 보호하고 다이소 HTTP 호출의 취소를 전달한다. 완료와 알람의 경합도 검증했다.

현재 안내는 `/guide/latest`에서 확인한다. 사용자가 복사할 문장은 에이전트가 완성 URL로 채워서 제공해야 한다. 직접 URL 조합을 반복하는 대신 [접근 오류 진단](web-reading-troubleshooting.md)의 복구 절차를 따른다. 접수형 처리가 URL 출처에 따른 접근 제한 자체를 해제하는 것은 아니다.

## 검증 범위와 한계

- main fddd8b6의 CI41379335598·Coverage41379335662·CodeQL41379335779·배포41379335608 통과. 회귀4,251건 통과·기존1건 skipped, 커버리지4항목100%. 검사를 완화하지 않았다.
- 실제 운영 Chat 표본은11:49 KST에 상품1049516을 조회했다. 원본 응답의 온라인 수량50과 매장 목록 비어 있음을 구분했다. 특정 매장 재고50이나 현재 수량을 뜻하지 않는다. HTML 생성·작업 완료 시각도 원본 재고 갱신 시각과 다르다.
- [다이소 범위 운영 스모크41379968241](https://github.com/hmmhmmhm/daiso-mcp/actions/runs/41379968241)은 CLI5명령과 공개 MCP10도구·상품명 기반 재고 조회를 통과했다. 로컬 자원 보호가 브라우저 수로 거절한 검사를 우회하지 않고 임시 클라우드 검사 분기를 사용했다. 그 분기는 검사 후 삭제했으며 main의 전체12서비스 야간 검사 목록은 유지했다.
- 운영 API 캐시를 우회한 실시간 수량 보장이나 모든 ChatGPT 계정에서의 보편적 성공을 주장하지 않는다. JSON API·CLI·MCP 연결과 REST HTML 조회는 별개다. 다른 서비스는 기존 조회 경로를 유지한다.
2 changes: 2 additions & 0 deletions docs/web-reading-troubleshooting.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# 웹 읽기 접근 오류 진단

최신 검증: [2026-11-02 재시도·접수형 실험과 운영 반영](web-reading-lab-results-2026-11-02.md).

다이소의 읽기 세션 조회가 오래 걸리면 `pending` 접수와 실제 **결과 확인** 링크를 반환합니다. 접수는 상품·재고 확인 성공이 아닙니다. 각 응답의 새로운 결과 링크를 최대3번 선택하고, 계속 pending이면 미확인으로 보고하세요. 이전 상태 주소를 반복하거나 원본 조회를 다시 실행하지 마세요. 상태 확인은 저장 결과만 읽으며, 완료 결과는 원본의 성공·오류 상태를 유지합니다. HTML·작업 완료 시각과 원본 재고 갱신 시각은 다릅니다. 작업이 만료되거나 시간 초과된 경우에도 수량을0으로 바꾸지 않습니다.


Expand Down
Loading
0