Skip to content

monitor.moss.land 거버넌스 위젯 항상 Offline(0/3) — CORS 오리진 apex 고정 + ao-api 500 #1

Description

@mikim

요약

moss.land 홈페이지 좌하단의 거버넌스 플로팅 위젯(Algora / AO / Bridge)이 사실상 항상 Offline · 0/3 services 로 표시됩니다. 원인은 monitor.moss.land 쪽 2가지이며, 둘 다 monitor 서비스에서 고쳐야 합니다.

증상

  • 위젯이 3개 서비스를 전부 Offline, 요약을 0/3 services로 표시.
  • 위젯은 웹 페이지(브라우저)에서 fetch()로 아래 3개를 30초마다 호출하고, res.ok(2xx)일 때만 Online으로 판정합니다.

원인 1 — CORS Access-Control-Allow-Origin이 apex 하나로 고정

monitor.moss.land가 요청 Origin과 무관하게 항상 Access-Control-Allow-Origin: https://moss.land 만 내려줍니다. 그래서 페이지 오리진이 정확히 https://moss.land가 아니면(= www.moss.land, 프리뷰 URL, localhost 개발) 브라우저가 응답을 차단 → fetch가 throw → 위젯이 전부 Offline(0/3)으로 처리합니다.

실측 (서버에는 Origin: https://www.moss.land 를 보냈는데도 ACAO는 apex 고정):

algora  /algora-api/stats   HTTP 200   Access-Control-Allow-Origin: https://moss.land
ao      /ao-api/status      HTTP 500   Access-Control-Allow-Origin: https://moss.land
bridge  /bridge-api/stats   HTTP 200   Access-Control-Allow-Origin: https://moss.land

참고로 www.moss.land는 apex로 301 리다이렉트 없이 그대로 200을 서빙하므로, www로 들어온 사용자는 이 CORS 불일치에 그대로 걸립니다.

제안

  • monitor의 CORS 허용 오리진을 https://moss.land + https://www.moss.land (+ 개발용 http://localhost:5173)로 확장하거나,
  • 요청 Origin을 허용 목록과 대조해 그대로 반사(reflect)하도록 변경.
  • (병행 권장) 웹 서버에서 www.moss.land → moss.land 301 리다이렉트를 두면 오리진이 하나로 통일되어 근본적으로 깔끔합니다.

원인 2 — ao-api/status가 HTTP 500

GET https://monitor.moss.land/ao-api/status 가 현재 500 Internal Server Error를 반환합니다. CORS를 고쳐도 이 서비스는 Offline으로 남아 최대 2/3까지만 됩니다.

제안

  • AO(Debate & Plan) 서비스의 /ao-api/status 500 원인 확인 및 복구. 기대 응답 형식(웹이 소비하는 필드): { stats: { agents_active, ideas_generated, debates_today } }.

두 가지 다 고치면

어느 moss.land 도메인에서 접속하든 위젯이 3/3 online으로 정상 표시됩니다.

재현

# CORS 고정 확인 (www Origin으로 요청해도 ACAO가 apex로 고정)
curl -s -D - -o /dev/null -H 'Origin: https://www.moss.land' https://monitor.moss.land/algora-api/stats | grep -i access-control-allow-origin
# ao 500 확인
curl -s -o /dev/null -w '%{http_code}\n' https://monitor.moss.land/ao-api/status

웹(소비 측) 참고

  • 위젯 코드: mossland-website-2026 / mossland-web/src/components/MosslandFloatingGovernance.jsx
  • 소비 엔드포인트: /algora-api/stats, /ao-api/status, /bridge-api/stats (base: https://monitor.moss.land)
  • 웹 쪽은 monitor 수정과 별개로, 오해를 주던 agents active 하드코딩 baseline(+5)을 실측값만 쓰도록 이미 정리했습니다. mossland-disclosure-web에도 유사한 ?? 34 baseline이 남아 있어 추후 정리 예정.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions