# 주간 품질 점검 — 표준 액션만 사용 (사내 시크릿·조직 워크플로 불의존, 어느 레포에서든 동작).
# 로컬 housekeeping 스킬과 같은 검사를 주기 실행해, 방치된 레포의 품질 부패를 이슈로 알린다.
name: housekeeping

on:
  schedule:
    - cron: '0 0 * * 1' # 매주 월요일 09:00 KST
  workflow_dispatch:

jobs:
  quality-sweep:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      issues: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version-file: .nvmrc
      - run: npm install -g pnpm
      - run: pnpm install --frozen-lockfile
      - name: verify (전체 게이트)
        run: pnpm verify
      - name: gate-selftest (게이트 생존)
        run: pnpm gate:selftest
      - name: knip (죽은 코드)
        run: pnpm knip

      # 하네스가 얼마나 낡았는지. 게이트·룰이 갱신돼도 이미 만들어진 프로젝트는
      # 그 시점에 고정되므로, 뒤처진 사실을 아무도 모르는 게 기본값이다.
      # 실패시키지 않는다 — 낡은 건 품질 결함이 아니라 알림 대상이다.
      - name: 하네스 버전 확인
        continue-on-error: true
        run: |
          MINE=$(node -p "require('./package.json').rememberWeb?.version ?? ''")
          if [ -z "$MINE" ]; then
            echo "버전 스탬프 없음 — 0.3.8 이전에 만든 프로젝트입니다."
            exit 0
          fi
          LATEST=$(npm view create-remember-web version 2>/dev/null || echo "$MINE")
          echo "이 프로젝트: $MINE / 최신: $LATEST"
          if [ "$MINE" != "$LATEST" ]; then
            echo "HARNESS_STALE=1" >> "$GITHUB_ENV"
            echo "HARNESS_MINE=$MINE" >> "$GITHUB_ENV"
            echo "HARNESS_LATEST=$LATEST" >> "$GITHUB_ENV"
          fi

      - name: 실패 시 이슈 생성
        if: failure()
        uses: actions/github-script@v7
        with:
          script: |
            await github.rest.issues.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              title: `주간 품질 점검 실패 (${new Date().toISOString().slice(0, 10)})`,
              body: `housekeeping 워크플로가 실패했습니다. [실행 로그](${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId})를 확인하고, Claude Code에서 "정리해줘"로 housekeeping 스킬을 실행하세요.`,
              labels: ['housekeeping'],
            });

      - name: 하네스가 뒤처졌으면 알림
        if: ${{ env.HARNESS_STALE == '1' }}
        uses: actions/github-script@v7
        with:
          script: |
            const { HARNESS_MINE, HARNESS_LATEST } = process.env;
            const title = `하네스 업데이트 있음 (${HARNESS_MINE} → ${HARNESS_LATEST})`;
            const existing = await github.rest.issues.listForRepo({
              owner: context.repo.owner, repo: context.repo.repo,
              state: 'open', labels: 'harness-update',
            });
            if (existing.data.some((i) => i.title === title)) return;
            await github.rest.issues.create({
              owner: context.repo.owner,
              repo: context.repo.repo,
              title,
              body: [
                `이 프로젝트는 하네스 \`${HARNESS_MINE}\`으로 만들어졌고, 지금 최신은 \`${HARNESS_LATEST}\`입니다.`,
                '',
                '**지금 당장 뭘 해야 하는 건 아닙니다.** 화면과 코드는 그대로 잘 돌아가요.',
                '그 사이에 검사 규칙이 늘거나 안내가 좋아졌을 수 있다는 뜻입니다.',
                '',
                '반영하고 싶으면 새 프로젝트를 하나 만들어 `.claude/` 폴더를 비교해보는 게 가장 안전합니다 —',
                '자동으로 덮어쓰는 기능은 일부러 만들지 않았습니다(직접 고친 규칙이 조용히 날아갈 수 있어서요).',
              ].join('\n'),
              labels: ['harness-update'],
            });
