AI 與新進工程師 · 系統完整交接文件 · 寵物遊戲 v2.2 上線
📌 v11.8 FINAL · 2026-10-20 · 寵物遊戲 v2.2 · 裝備 · 戰鬥 · 戰績牆 · 導覽列入口

🔴 開場必讀:五條鐵律

第一條:一律繁體中文

所有腳本、文件、輸出、對話,全部使用繁體中文。嚴禁混用簡體字。違者視為交接違規。

第二條:永遠先備份,永遠不依賴幻想的判斷

任何改動前,先備份。任何診斷前,先看原始資料。

第三條:先診斷,再動手

結構正常 ≠ 內容正確。目錄實掃 ≠ JSON 登記。HTTP 200 ≠ 資料合法。

第四條:架構要想長遠,不要短視近利

資料庫要用關聯式資料庫(D1),不要用鍵值儲存(KV)做需要排序、查詢、關聯的事。子網域要提早拆分。

第五條(v11.8 更新):大型 HTML 部署用 Python 腳本,不用 PowerShell 貼長字串

PowerShell 貼長 HTML 會被截斷,Python 腳本寫在 .py 檔裡不會。這是今天用血淚換來的教訓。

1. 🦞 系統人格與核心設定

身份定位:

🖥️ 雙機架構

機器電腦名稱定位Python 環境
聯想AHPAL-LENOVO主力機(工作室)v11.7 已完整建置
戴爾DESKTOP-AKLAM99外出機(移動使用)早已建置完成

🎯 核心口號(九條)

  1. 「永遠先備份,永遠不依賴幻想的判斷。」
  2. 「系統架構不會死,只是換個 AI 來維護。」
  3. 「我們是有革命情感的。」
  4. 「貼指令 ≠ 執行指令 ≠ 貼結果,三個動作,三件事。」
  5. 「結構正常 ≠ 內容正確。」
  6. 「先診斷,再動手。」
  7. 「架構要想長遠,不要短視近利。」
  8. 「新機器先裝套件,再跑產線。」
  9. 🆕「大型 HTML 用 Python 部署,不用 PowerShell 貼長字串。」

2. 📊 系統狀態總覽(v11.8 · 2026-10-20)

📰 主站(ahpal-static)

項目數值
文章總數9,334 篇(JSON 登記)
分類數12 個
travel 分類832 篇(JSON = 實體,幽靈 0)
R2 圖片8,500+ 張
導覽列10 個連結(含「⚔️ 打怪場」)

🐾 寵物遊戲(ahpal-pet · v2.2 完成)

項目數值
前端網域pet.ahpal.com
打怪場pet.ahpal.com/
戰績牆pet.ahpal.com/wall.html
GitHub Repopraystone/ahpal-pet
本地路徑C:\Users\User\ahpal-pet
Pages 專案ahpal-pet
後端 Workerahpal-pet-d1(ahpal-pet-d1.praystone.workers.dev)
資料庫Cloudflare D1 ahpal-pet-db
D1 Database ID80ea49f8-a4fe-4cbf-9821-8337c7869567
D1 綁定變數PET_DB
Worker 版本v2.0(11 個 API)
裝備數量30 件
怪物數量10 隻

3. 🆕 寵物遊戲 v2.2 完整架構(v11.8 新增)

🎯 今天完成了什麼:

從「交代版」(打怪、留言、排行榜)升級到「有深度版」(裝備系統、回合制戰鬥、戰績牆)。這是 v11.7 之後最重要的進展。

📂 D1 資料庫結構(7 張表)

表名用途筆數
players玩家資料(暱稱、等級、經驗、擊殺)動態
comments留言動態
equipment裝備定義(30 件:武器、防具、頭盔、盾牌、飾品)30
player_equipment玩家已獲得的裝備動態
monsters怪物定義(史萊姆到地獄魔王)10
battles戰鬥紀錄動態
_cf_KVCloudflare 內部用,不要動—

🔌 Worker API(11 個端點)

方法端點功能
POST/api/hit打怪(含隨機掉落裝備)
GET/api/stats?nickname=XXX查詢戰績
GET/api/leaderboard?page=1排行榜(分頁)
POST/api/comment新增留言
GET/api/comments?page=1留言列表(分頁)
GET/api/inventory?nickname=XXX查詢背包
POST/api/equip穿戴裝備
POST/api/unequip卸下裝備
GET/api/monsters怪物列表
POST/api/battle回合制戰鬥
GET/api/battles?nickname=XXX&page=1戰鬥紀錄

📂 前端檔案

C:\Users\User\ahpal-pet\ ├── _headers ← CSP 設定 ├── index.html ← 根目錄導向到 pet-index.html ├── pet-index.html ← 打怪場 v2.2(單頁密集式) ├── wall.html ← 戰績牆 v2.2(排行榜、戰鬥紀錄、留言板) ├── style.css ← 樣式 ├── worker\ │ ├── index.js ← Worker v2.0(11 API) │ └── wrangler.toml ← Worker 設定(D1 綁定) ├── schema.sql ← D1 建表 SQL └── seed.sql ← D1 預填資料 SQL

🎮 打怪場 v2.2 版面(單頁密集式)

區域內容
頂部狀態條暱稱、等級、擊殺、經驗、攻擊、防禦、HP(永遠可見)
左欄快速打怪 → 挑戰怪物 → 戰鬥紀錄
右欄當前裝備(5 格)→ 背包 → 即時訊息

🏆 戰績牆 v2.2 版面

區域內容
左欄等級排行榜(分頁,前 3 名金銀銅)→ 最近戰鬥紀錄(全站 20 場)
右欄留言板(送出、分頁、字數統計、頻率限制)

📌 裝備系統規則

📌 戰鬥系統規則

📌 留言板防護機制(沿用 v11.6)

#防護說明
1字數限制最多 500 字
2繁體中文驗證至少 2 個中文字,擋機器人
3髒話過濾擋掉常見髒話、廣告詞
4頻率限制同一暱稱 30 秒內只能留一次
5暱稱長度限制最多 20 字

4. 🆕 今天(2026-10-20)的血淚教訓(v11.8 新增)

教訓一:PowerShell 貼長 HTML 會被截斷,清空檔案

用 PowerShell 的 @'...'@ here-string 貼 17KB 的 HTML,貼上時被截斷,$newHtml 是空的,然後 WriteAllText 把空字串寫進 pet-index.html,檔案從 16KB 變成 0 bytes。解法:大型 HTML 用 Python 腳本,寫在 .py 檔裡,不經過 PowerShell 貼上。

教訓二:Python subprocess 讀 Windows 中文輸出會 UnicodeDecodeError

用 subprocess.run(..., encoding="utf-8") 讀取子進程輸出,遇到 CP950 位元組(0xab)解碼失敗。解法:直接用 python -c 執行,不繞 subprocess。

教訓三:PowerShell -replace 和 .Replace() 沒先驗證字串存在

連續兩次「沒先驗證字串存在就寫取代邏輯」,導致取代失敗。解法:取代前先用 IndexOf 或 in 確認字串存在,或用正規表達式 + 先驗證。

教訓四:PowerShell -ne 不區分大小寫

用 $content -ne $original 判斷字串是否改變,但 PowerShell 的 -ne 對字串不區分大小寫,大小寫變化被視為「相等」。解法:比較大小寫變化用 -cne。

教訓五:Cloudflare Pages 的 Git 自動部署可能沒觸發

git push 成功,但 Pages 專案停在兩天前,沒抓到新 commit。解法:用 npx wrangler pages deploy . --project-name=ahpal-pet --branch=main --commit-dirty=true 直接上傳,繞過 Git 自動偵測。

教訓六:BBS2 網址是 bbs2.ahpal.com,不是 memories.ahpal.com/bbs2/

BBS2 是獨立子網域 https://bbs2.ahpal.com/,不是掛在回憶館底下。

5. ⚡ 快速指令(v11.8 更新)

用途指令
完整部署 / 主控台.\scripts\ahpal-master.ps1 → [1]
死命令預檢.\scripts\preflight-check.ps1
黃金備份.\scripts\backup-system.ps1 -Golden
Git 管理工具(v3.9).\git-manager.ps1(6 倉庫)
分類檢驗工具python scripts\check-category.py
寵物遊戲部署(打怪場)cd C:\Users\User\ahpal-pet; python deploy_v22.py
寵物遊戲部署(戰績牆)cd C:\Users\User\ahpal-pet; python deploy_wall.py
Worker 部署cd C:\Users\User\ahpal-pet\worker; npx wrangler deploy
Pages 強制部署npx wrangler pages deploy . --project-name=ahpal-pet --branch=main --commit-dirty=true
D1 建表(遠端)npx wrangler d1 execute ahpal-pet-db --remote --file=schema.sql
D1 查詢(遠端)npx wrangler d1 execute ahpal-pet-db --remote --command="SELECT ..."

6. 🔴 20 條董事長死命令(v11.8 更新)

#死命令檢查方式
1文章變更後強制檢查.\scripts\preflight-check.ps1
2文章檔名強制使用英文自動強制轉換
3CSS 靜態資產保護main.css 禁止自動覆蓋
4文章清單集中管理master-articles.json + 新架構
5設定 UTF-8 編碼.ps1 有 BOM、.json/.py/.md 無 BOM
6首頁完整性create_default_index()
7禁止擅自精簡或改寫既有功能修復前備份、修復後對比
8不准用 PowerShell 7 才有的語法PowerShell 5.1 相容
9盡量用 PowerShell 直接修改腳本一鍵完成多種任務
10永遠使用 SYSTEM 帳戶排程LogonType: ServiceAccount
11SEO 四大件無 noindex.\scripts\seo-dashboard.ps1
12Production 部署唯一正門禁止 npx wrangler pages deploy .(緊急時除外)
13純文字檔案寫入規範單引號陣列 + WriteAllLines
14JSON 合法性驗證完整解析,不能只看 HTTP 200
15禁止簡體字,一律使用繁體字所有腳本、文件、輸出、對話
16🆕 大型 HTML 用 Python 部署不用 PowerShell 貼長字串
17🆕 Python subprocess 讀輸出用 errors="replace" 或直接 python -c避免 UnicodeDecodeError
18🆕 取代字串前先驗證存在IndexOf 或 in
19🆕 比較大小寫變化用 -cnePowerShell -ne 不區分大小寫
20🆕 Cloudflare Pages 部署用 wrangler CLI不依賴 Git 自動偵測

7. 🛡️ 防錯守則(v11.8 完整版,110 條)

前 100 條沿用 v11.7,新增以下 10 條:

  • 🆕 大型 HTML 部署:用 Python 腳本,寫在 .py 檔裡,不經過 PowerShell 貼上
  • 🆕 Python 寫檔防呆:寫入前檢查 len(content) > 5000,寫入後檢查 getsize > 5000,過小自動還原
  • 🆕 subprocess 編碼:Windows 中文輸出用 encoding="utf-8", errors="replace",或直接 python -c
  • 🆕 字串取代前驗證:用 IndexOf 或 in 確認字串存在,再取代
  • 🆕 PowerShell 比較大小寫:用 -cne,不用 -ne
  • 🆕 Cloudflare Pages 部署:用 npx wrangler pages deploy . --project-name=ahpal-pet --branch=main --commit-dirty=true
  • 🆕 D1 遠端執行:npx wrangler d1 execute ahpal-pet-db --remote --file=schema.sql,必須加 --remote
  • 🆕 wrangler.toml 的 name:必須與 Pages 專案名一致(ahpal-pet)
  • 🆕 BBS2 網址:https://bbs2.ahpal.com/,不是 memories.ahpal.com/bbs2/
  • 🆕 導覽列入口:「⚔️ 打怪場」連到 https://pet.ahpal.com/,另開新視窗

8. ⚠️ 常見異常排除(v11.8 完整版,75 條)

前 70 條沿用 v11.7,新增以下 5 條:

  • 🆕 pet-index.html 變成 0 bytes:PowerShell 貼長 HTML 被截斷,用 Python 腳本重新產生
  • 🆕 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xab:Python subprocess 讀 Windows 中文輸出,用 errors="replace" 或 python -c
  • 🆕 -replace 或 .Replace() 沒作用:字串不存在或編碼有問題,先用 IndexOf 確認
  • 🆕 $content -ne $original 永遠 False:PowerShell -ne 不區分大小寫,改用 -cne
  • 🆕 Cloudflare Pages 部署沒更新:Git 自動部署沒觸發,用 npx wrangler pages deploy . 直接上傳

9. 📋 新進工程師 CheckList(v11.8 FINAL,75 項)

前 65 項沿用 v11.7,新增以下 10 項:

  • ☐ 確認寵物遊戲 D1 有 7 張表(players、comments、equipment、player_equipment、monsters、battles、_cf_KV)
  • ☐ 確認裝備有 30 件、怪物有 10 隻
  • ☐ 確認 Worker v2.0 有 11 個 API
  • ☐ 確認打怪場 pet.ahpal.com/ 可以打怪、掉裝備、戰鬥
  • ☐ 確認戰績牆 pet.ahpal.com/wall.html 可以看排行榜、戰鬥紀錄、留言
  • ☐ 確認主站導覽列有「⚔️ 打怪場」連到 pet.ahpal.com
  • ☐ 確認 Worker 部署用 npx wrangler deploy,不用 Dashboard 手動貼
  • ☐ 確認 Pages 部署用 npx wrangler pages deploy .,不依賴 Git 自動偵測
  • ☐ 確認大型 HTML 用 Python 腳本部署,不用 PowerShell 貼長字串
  • ☐ 確認 BBS2 網址是 bbs2.ahpal.com

10. 📌 版號與維護

項目值
手冊版號v11.8 FINAL
更新日期2026-10-20
維護者🦞 龍蝦總工程師
文件路徑C:\Users\User\ahpal-static\docs\
檔案名稱打一份龍蝦總工程師-AI交接與新進工程師交接手冊-FINAL-v11.8.html

v11.7 → v11.8 差異

項目v11.7v11.8
日期2026-10-192026-10-20
寵物遊戲版本v11.6(打怪、留言、排行榜)v2.2(裝備、戰鬥、戰績牆)
D1 資料表2 張(players、comments)7 張(+equipment、player_equipment、monsters、battles)
Worker API5 個11 個
裝備系統無30 件
戰鬥系統無回合制
戰績牆簡易排行榜 + 戰鬥紀錄 + 留言板
主站導覽列無打怪場入口有「⚔️ 打怪場」
核心口號八條九條
鐵律五條五條(更新第五條)
死命令15 條20 條(+5)
防錯守則100 條110 條(+10)
異常排除70 條75 條(+5)
CheckList65 項75 項(+10)

v11.8 新增教訓

教訓一:PowerShell 貼長 HTML 會被截斷

用 PowerShell 的 @'...'@ here-string 貼 17KB 的 HTML,貼上時被截斷,$newHtml 是空的,然後 WriteAllText 把空字串寫進 pet-index.html,檔案從 16KB 變成 0 bytes。以後大型 HTML 用 Python 腳本部署。

教訓二:Python subprocess 讀 Windows 中文輸出會 UnicodeDecodeError

用 subprocess.run(..., encoding="utf-8") 讀取子進程輸出,遇到 CP950 位元組(0xab)解碼失敗。以後直接用 python -c 執行,不繞 subprocess。

教訓三:Cloudflare Pages 的 Git 自動部署可能沒觸發

git push 成功,但 Pages 專案停在兩天前。以後用 npx wrangler pages deploy . --project-name=ahpal-pet --branch=main --commit-dirty=true 直接上傳。

教訓四:BBS2 網址是 bbs2.ahpal.com

BBS2 是獨立子網域 https://bbs2.ahpal.com/,不是掛在回憶館底下。

教訓五:導覽列入口要用「打怪場」代表整個寵物遊戲

主站導覽列「📧 聯絡我們」改成「⚔️ 打怪場」,連到 https://pet.ahpal.com/,另開新視窗。老會員從首頁就能找到。