{"repo": "breverdbidder/cli-anything-biddeed", "files": {".claude/worktrees/wf_87712752-715-6/.github/workflows/summit-rentcast-dossier.yml": {"3e2bc1bdd4d30c2aab823c7a29f368fbfef6614e": {"t": 1786068222.1287374, "n": 7301, "h": "b0b4156e9cd3f84d", "c": "name: \"Summit: RentCast + DealCheck CI V6.5 Dossier\"\n\non:\n workflow_dispatch:\n inputs:\n rentcast_v65_id:\n description: \"ci_v65_dossiers UUID for RentCast\"\n required: true\n default: \"c2c2b95c-0cfc-4d0f-a96c-6f5b0126a668\"\n dealcheck_v65_id:\n description: \"ci_v65_dossiers UUID for DealCheck\"\n required: true\n default: \"d08d32b7-9159-4842-859b-d6bf87d47373\"\n summit_id:\n description: \"summit_chat_dispatch UUID\"\n required: true\n default: \"05f7873d-09b7-41ac-8724-99e0b4ec9983\"\n\nconcurrency:\n group: rentcast-dealcheck-dossier-${{ github.event.inputs.summit_id }}\n cancel-in-progress: false\n\njobs:\n dossier:\n name: \"Build dossier · ${{ matrix.target }}\"\n runs-on: ubuntu-latest\n timeout-minutes: 360\n strategy:\n fail-fast: false\n max-parallel: 2\n matrix:\n include:\n - target: rentcast\n dossier_id_var: rentcast_v65_id\n - target: dealcheck\n dossier_id_var: dealcheck_v65_id\n steps:\n - name: \"Execute SUMMIT-E on Hetzner\"\n uses: appleboy/ssh-action@v1.2.0\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}\n GH_PAT: ${{ secrets.GH_PAT }}\n CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}\n CLAUDE_CODE_REFRESH_TOKEN: ${{ secrets.CLAUDE_CODE_REFRESH_TOKEN }}\n TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}\n TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}\n FIRECRAWL_API_KEY: ${{ secrets.FIRECRAWL_API_KEY }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}\n DOSSIER_TARGET: ${{ matrix.target }}\n DOSSIER_ID: ${{ github.event.inputs[matrix.dossier_id_var] }}\n SUMMIT_ID: ${{ github.event.inputs.summit_id }}\n with:\n host: 87.99.129.125\n username: root\n key: ${{ secrets.HETZNER_SSH_KEY }}\n timeout: 30s\n command_timeout: 350m\n envs: SUPABASE_URL,SUPABASE_SERVICE_KEY,GH_PAT,CLAUDE_CODE_OAUTH_TOKEN,CLAUDE_CODE_REFRESH_TOKEN,TELEGRAM_BOT_TOKEN,TELEGRAM_CHAT_ID,FIRECRAWL_API_KEY,DEEPSEEK_API_KEY,GEMINI_API_KEY,DOSSIER_TARGET,DOSSIER_ID,SUMMIT_ID\n script: |\n set -e\n echo \"=== [1/5] Setup ===\"\n id claude 2>/dev/null || useradd -m -s /bin/bash claude\n mkdir -p /home/claude/.npm-global\n chown -R claude:claude /home/claude\n\n echo \"=== [2/5] Claude Code + Playwright ===\"\n npm install -g @anthropic-ai/claude-code@latest 2>&1 | tail -3\n npm install -g playwright 2>&1 | tail -3\n su - claude -c \"playwright install chromium\" || true\n\n echo \"=== [3/5] Auth (name-only secrets, no value echoes) ===\"\n test -n \"$CLAUDE_CODE_OAUTH_TOKEN\" || { echo \"FATAL: CLAUDE_CODE_OAUTH_TOKEN empty\"; exit 1; }\n test -n \"$CLAUDE_CODE_REFRESH_TOKEN\" || { echo \"FATAL: CLAUDE_CODE_REFRESH_TOKEN empty\"; exit 1; }\n mkdir -p /home/claude/.claude\n EXPIRES_MS=$(( $(date +%s) * 1000 + 28800000 ))\n printf '{\"claudeAiOauth\":{\"accessToken\":\"%s\",\"refreshToken\":\"%s\",\"expiresAt\":%s,\"scopes\":[\"user:inference\",\"user:profile\"],\"subscriptionType\":\"max\"}}\\n' \"$CLAUDE_CODE_OAUTH_TOKEN\" \"$CLAUDE_CODE_REFRESH_TOKEN\" \"$EXPIRES_MS\" > /home/claude/.claude/credentials.json\n chown -R claude:claude /home/claude/.claude\n chmod 600 /home/claude/.claude/credentials.json\n test -s /home/claude/.claude/credentials.json || { echo \"FATAL: credentials.json empty\"; exit 1; }\n echo \"credentials.json written ($(wc -c < /home/claude/.claude/credentials.json) bytes, expires in 8h)\"\n\n echo \"=== [4/5] Repo ===\"\n mkdir -p /opt/biddeed\n if [ ! -d \"/opt/biddeed/cli-anything-biddeed\" ]; then\n cd /opt/biddeed\n git clone \"https://x-access-token:${GH_PAT}@github.com/breverdbidder/cli-anything-biddeed.git\"\n fi\n cd /opt/biddeed/cli-anything-biddeed\n git fetch origin main\n git reset --hard origin/main\n chown -R claude:claude /opt/biddeed/cli-anything-biddeed\n\n echo \"=== [5/5] Claude Code — SUMMIT-E ${DOSSIER_TARGET} ===\"\n su - claude -c \"\n export CLAUDE_CODE_OAUTH_TOKEN='$CLAUDE_CODE_OAUTH_TOKEN'\n export SUPABASE_URL='$SUPABASE_URL'\n export SUPABASE_SERVICE_KEY='$SUPABASE_SERVICE_KEY'\n export GH_PAT='$GH_PAT'\n export TELEGRAM_BOT_TOKEN='$TELEGRAM_BOT_TOKEN'\n export TELEGRAM_CHAT_ID='$TELEGRAM_CHAT_ID'\n export FIRECRAWL_API_KEY='$FIRECRAWL_API_KEY'\n export DEEPSEEK_API_KEY='$DEEPSEEK_API_KEY'\n export GEMINI_API_KEY='$GEMINI_API_KEY'\n export DOSSIER_TARGET='$DOSSIER_TARGET'\n export DOSSIER_ID='$DOSSIER_ID'\n export SUMMIT_ID='$SUMMIT_ID'\n export NPM_CONFIG_PREFIX=/home/claude/.npm-global\n export PATH=/home/claude/.npm-global/bin:/usr/local/bin:/usr/bin:/bin\n\n cd /opt/biddeed/cli-anything-biddeed\n\n claude --print --dangerously-skip-permissions \\\n 'MISSION: SUMMIT-E CI V6.5 dossier for \\$DOSSIER_TARGET.\n\n STEP 0 — READ MISSION BRIEF\n cat docs/ci-v65/RENTCAST-DEALCHECK-MISSION-V1.md\n cat CLAUDE.md\n\n STEP 1-6 — Execute every phase in the brief.\n\n FINAL — Update SUMMIT-E only IF \\$DOSSIER_TARGET == rentcast (last to finish):\n PATCH summit_chat_dispatch id=\\$SUMMIT_ID set state=closed, delivery_proof={...}\n Telegram final summary.'\n \"\n\n - name: \"Annotate SUMMIT on failure\"\n if: failure()\n env:\n SUPABASE_URL: ${{ secrets.SUPABASE_URL }}\n SUPABASE_SERVICE_KEY: ${{ secrets.SUPABASE_SERVICE_KEY }}\n run: |\n curl -sS -X PATCH \"${SUPABASE_URL}/rest/v1/summit_chat_dispatch?id=eq.${{ github.event.inputs.summit_id }}\" \\\n -H \"apikey: $SUPABASE_SERVICE_KEY\" -H \"Authorization: Bearer $SUPABASE_SERVICE_KEY\" \\\n -H \"Content-Type: application/json\" -H \"Prefer: return=minimal\" \\\n -d '{\"last_error\":\"workflow run ${{ github.run_id }} job ${{ matrix.target }} failed\"}'\n\n\n gate-rentcast:\n name: \"Output Gate · rentcast\"\n needs: dossier\n if: ${{ always() }}\n uses: ./.github/workflows/_ci-output-gate.yml\n with:\n dossier_slug: rentcast\n dossier_date: '2026-05-27'\n v65_dossier_id: c2c2b95c-0cfc-4d0f-a96c-6f5b0126a668\n summit_id: ${{ github.event.inputs.summit_id }}\n min_storage_files: 8\n gate_mode: warn\n secrets: inherit\n\n gate-dealcheck:\n name: \"Output Gate · dealcheck\"\n needs: dossier\n if: ${{ always() }}\n uses: ./.github/workflows/_ci-output-gate.yml\n with:\n dossier_slug: dealcheck\n dossier_date: '2026-05-27'\n v65_dossier_id: d08d32b7-9159-4842-859b-d6bf87d47373\n summit_id: ${{ github.event.inputs.summit_id }}\n min_storage_files: 8\n gate_mode: warn\n secrets: inherit\n"}}}}