a620906209
|
ddbf956144
|
fix(booking): 交易內只攔截業務例外,資料庫錯誤改交由例外處理器
新增 BookingRuleViolationException,MemberBookingController::store 與
ProviderBookingController::confirm 只 catch 此型別並回 422(訊息不變)。
QueryException 等其他例外不再被當成 422 回傳 SQL,改由 Laravel 回 500
並回報 Sentry。對應 OpenSpec change fix-booking-exception-handling(M7)。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-18 01:35:38 +08:00 |
|
a620906209
|
dcbf3e4a9a
|
fix(openspec): 新增 fix-booking-exception-handling change 規劃
Run Tests / test (pull_request) Successful in 39s
- M7:預約交易的 catch (\RuntimeException) 會吞掉 QueryException,把 SQL 以 422 回給使用者且不送 Sentry
- 規劃新增 BookingRuleViolationException,Controller 只 catch 業務例外,其他例外交給 Laravel 處理器(500 + 回報)
- booking-lifecycle 新增「預約交易錯誤分類」requirement(5 個 Scenario 皆對應測試任務)
- spec-reviewer、design-hardener 皆 PASS,warnings 已併入文件
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-18 00:59:25 +08:00 |
|
a620906209
|
d27aff1a7d
|
Merge pull request 'chore(docs): 標記 H1、H2 完成並於 .env.example 註明正式環境設定' (#73) from chore/close-h1-h2-todo into master
Deploy Production / deploy (push) Successful in 1m45s
Run Tests / test (push) Successful in 39s
Reviewed-on: #73
|
2026-10-17 16:47:43 +00:00 |
|
a620906209
|
990f84c21a
|
chore(docs): 標記 H1、H2 完成並於 .env.example 註明正式環境設定
Run Tests / test (pull_request) Successful in 38s
- todo 文件:H1 由 PR #71、#72 完成;H2 已於 VPS 確認 APP_DEBUG=false、APP_ENV=production、未使用預設 DB 密碼
- .env.example:APP_DEBUG 上方加註正式環境必須的值
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-18 00:47:01 +08:00 |
|
a620906209
|
ffed798ed5
|
Merge pull request 'chore(openspec): 歸檔 add-role-middleware 並同步主規格' (#72) from chore/archive-add-role-middleware into master
Deploy Production / deploy (push) Successful in 1m40s
Run Tests / test (push) Successful in 37s
Reviewed-on: #72
|
2026-10-17 16:40:54 +00:00 |
|
a620906209
|
d83d941993
|
chore(openspec): 歸檔 add-role-middleware 並同步主規格
Run Tests / test (pull_request) Successful in 34s
- 新增主規格 role-authorization,更新 feature-test-coverage 的 middleware 描述
- 勾選手動驗證任務 5.1、5.2(23/23)
- CLAUDE.md 授權規範與 openspec/config.yaml 移除「member/provider 只有 auth:sanctum」的過時說明
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-18 00:30:05 +08:00 |
|
a620906209
|
544894fa55
|
Merge pull request 'security(auth): 新增 member/provider 角色 middleware' (#71) from security/implement-role-middleware into master
Deploy Production / deploy (push) Successful in 1m45s
Run Tests / test (push) Successful in 41s
Reviewed-on: #71
|
2026-10-17 16:12:02 +00:00 |
|
a620906209
|
90fc8f2d49
|
style: 以 pint 格式化 routes、Docs 與 BookingListTest
Run Tests / test (pull_request) Successful in 36s
純格式調整,不改變行為。這四個檔案在 master 上即未通過 pint,
因本次功能變更觸及而一併修正,以符合變更檔案需通過 pint 的審查要求。
- 已驗證 route:list 除角色 middleware 外無差異
- 已驗證 l5-swagger 產出的 JSON 在格式化前後完全相同
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-17 23:57:30 +08:00 |
|
a620906209
|
16ccb4c18c
|
security(auth): 新增 member/provider 角色 middleware
補上待辦 H1:/api/member/*、/api/provider/* 原本只掛 auth:sanctum,
任何已登入帳號都能跨角色建立課程、預約與評價。
- 新增 EnsureMember、EnsureProvider(結構同 EnsureAdmin),註冊 alias
member、provider,掛到對應路由群組;角色不符回 403
{ status: false, message: "無權限存取" },未登入仍由 auth:sanctum 回 401
- provider middleware 不檢查審核狀態,未通過審核的教練仍可送審
- 新增 RoleAuthorizationTest:member/provider/admin/未登入跨角色測試,
並驗證越權請求不產生資料;跨角色共用路由(通知、未讀訊息數)不受影響
- Swagger:member/provider 端點的 403 描述補上角色不符,補齊列表端點 403
- 更新 BookingListTest docblock 的過時描述
- 完成 tasks 1.1–4.3;5.1、5.2 手動驗證尚未執行
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-17 23:57:16 +08:00 |
|
a620906209
|
9e4331d4f7
|
Merge pull request 'security(openspec): 新增 add-role-middleware change 規劃' (#70) from security/add-role-middleware into master
Deploy Production / deploy (push) Successful in 1m46s
Run Tests / test (push) Successful in 34s
Reviewed-on: #70
|
2026-10-17 15:30:15 +00:00 |
|
a620906209
|
6feb79bc1a
|
security(openspec): 新增 add-role-middleware change 規劃
Run Tests / test (pull_request) Successful in 36s
待辦 H1:member/provider 路由群組補上角色 middleware。
新增 role-authorization 規格,並修改 feature-test-coverage 的
「預約列表端點測試覆蓋」。spec-reviewer 與 design-hardener 均 PASS。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-17 23:28:06 +08:00 |
|
a620906209
|
1839e9008f
|
Merge branch 'chore/add-github-test-workflow': 新增 GitHub 鏡像專用測試 workflow
Deploy Production / deploy (push) Successful in 6m21s
Run Tests / test (push) Successful in 35s
|
2026-10-17 23:09:55 +08:00 |
|
a620906209
|
09aa5175e3
|
Merge branch 'docs/complete-backlog-items': 待辦新增功能與延後項目 F1–F7
|
2026-10-17 23:09:55 +08:00 |
|
a620906209
|
efb7d1b773
|
ci(github): 新增 GitHub 鏡像專用的測試 workflow
Gitea 讀 .gitea/workflows,GitHub 讀 .github/workflows,兩者互不影響。
GitHub 版改用 ubuntu-latest + setup-php(PHP 8.2 對齊正式環境);
不含 deploy,部署只走 Gitea。
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-17 23:06:53 +08:00 |
|
a620906209
|
f07d15609f
|
docs(analysis): 待辦新增功能與延後項目 F1–F7
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
2026-10-17 23:06:28 +08:00 |
|
a620906209
|
245a0a3f84
|
Merge pull request 'docs(analysis): 待辦新增 M7(預約例外訊息洩漏)與 M8(預約狀態並發競態)' (#69) from docs/add-review-findings-m7-m8 into master
Deploy Production / deploy (push) Successful in 1m37s
Run Tests / test (push) Successful in 36s
Reviewed-on: #69
|
2026-10-14 17:02:27 +00:00 |
|
a620906209
|
42b3884f09
|
docs(analysis): 待辦新增 M7(預約例外訊息洩漏)與 M8(預約狀態並發競態)
Run Tests / test (pull_request) Successful in 34s
|
2026-10-15 00:39:26 +08:00 |
|
a620906209
|
4fa6822a23
|
Merge pull request 'chore(claude): 新增 hardener skill(Laravel 版)並於 CLAUDE.md 補上審查流程' (#68) from chore/add-hardener-skill into master
Deploy Production / deploy (push) Successful in 1m38s
Run Tests / test (push) Successful in 35s
Reviewed-on: #68
|
2026-10-14 16:37:07 +00:00 |
|
a620906209
|
7b90fdc5f9
|
chore(claude): 新增 hardener skill(Laravel 版)並於 CLAUDE.md 補上審查流程
Run Tests / test (pull_request) Successful in 34s
|
2026-10-15 00:36:29 +08:00 |
|
a620906209
|
fe533413a9
|
Merge pull request 'chore(claude): 新增 design-hardener 設計加固審查 subagent(Pi 與 Claude Code 版)' (#67) from chore/add-design-hardener into master
Deploy Production / deploy (push) Successful in 1m35s
Run Tests / test (push) Successful in 36s
Reviewed-on: #67
|
2026-10-14 16:21:40 +00:00 |
|
a620906209
|
8e079185fa
|
chore(claude): 新增 design-hardener 設計加固審查 subagent(Pi 與 Claude Code 版)
Run Tests / test (pull_request) Successful in 34s
|
2026-10-15 00:13:44 +08:00 |
|
a620906209
|
2af6be75a9
|
Merge pull request 'chore(claude): 新增 spec-reviewer、strict-reviewer 的 Claude Code 版本(sonnet)並更新審查流程說明' (#66) from chore/add-claude-review-subagents into master
Deploy Production / deploy (push) Successful in 1m45s
Run Tests / test (push) Successful in 46s
Reviewed-on: #66
|
2026-10-14 16:09:42 +00:00 |
|
a620906209
|
9f86ccad05
|
chore(claude): 新增 spec-reviewer、strict-reviewer 的 Claude Code 版本(sonnet)並更新審查流程說明
Run Tests / test (pull_request) Successful in 45s
|
2026-10-15 00:09:00 +08:00 |
|
a620906209
|
990a260f95
|
Merge pull request 'chore(pi): 新增 spec-reviewer、strict-reviewer 審查 subagent,並於 CLAUDE.md 補上審查流程' (#65) from chore/add-review-subagents into master
Deploy Production / deploy (push) Successful in 1m39s
Run Tests / test (push) Successful in 39s
Reviewed-on: #65
|
2026-10-14 16:05:59 +00:00 |
|
a620906209
|
ad455742c6
|
chore(pi): 新增 spec-reviewer、strict-reviewer 審查 subagent,並於 CLAUDE.md 補上審查流程
Run Tests / test (pull_request) Successful in 34s
|
2026-10-15 00:05:22 +08:00 |
|
a620906209
|
f9e83cadfe
|
Merge pull request 'chore(openspec): 升級 OpenSpec CLI 至 1.14.1 並重新產生 skill 與指令' (#64) from chore/upgrade-openspec into master
Deploy Production / deploy (push) Successful in 1m39s
Run Tests / test (push) Successful in 42s
Reviewed-on: #64
|
2026-10-14 15:57:20 +00:00 |
|
a620906209
|
291b7e5889
|
chore(openspec): 以 operations guidance 取代 apply skill 自訂區塊
Run Tests / test (pull_request) Successful in 35s
|
2026-10-14 23:56:26 +08:00 |
|
a620906209
|
82d99d00a7
|
chore(openspec): 升級 OpenSpec CLI 至 1.14.1 並重新產生 skill 與指令
|
2026-10-14 23:56:26 +08:00 |
|
a620906209
|
e899f38267
|
Merge pull request 'docs(claude): CLAUDE.md 補上工具分工、專案慣例、授權規範、驗證指令與 Git/PR 流程' (#63) from chore/claude-workflow-tooling into master
Deploy Production / deploy (push) Successful in 1m44s
Run Tests / test (push) Successful in 39s
Reviewed-on: #63
|
2026-10-14 15:54:37 +00:00 |
|
a620906209
|
a59179d96c
|
docs(analysis): 更新 prompt 改善計畫進度
Run Tests / test (pull_request) Successful in 40s
|
2026-10-14 23:45:54 +08:00 |
|
a620906209
|
c1698a45b6
|
chore(claude): 修正 branch-and-propose、apply 加入測試對應檢查,新增 verify-and-report 與 finish-and-pr
|
2026-10-14 23:45:54 +08:00 |
|
a620906209
|
ee1ba1cef3
|
chore(windsurf): 移除與 CLAUDE.md 衝突的 ponytail 規則
|
2026-10-14 23:45:53 +08:00 |
|
a620906209
|
e6f59f25d3
|
docs(claude): CLAUDE.md 補上工具分工、專案慣例、授權規範、驗證指令與 Git/PR 流程
|
2026-10-14 23:45:53 +08:00 |
|
a620906209
|
cb64d45572
|
Merge pull request 'chore(openspec): 更新 config.yaml 專案 context 並補上 proposal/specs/design/tasks 規則' (#62) from chore/update-openspec-config into master
Deploy Production / deploy (push) Successful in 1m39s
Run Tests / test (push) Successful in 34s
Reviewed-on: #62
|
2026-10-14 15:23:50 +00:00 |
|
a620906209
|
db4f11a740
|
docs(analysis): 修正 M3 描述,通知實際已多數使用 ShouldQueue,下修優先度
Run Tests / test (pull_request) Successful in 39s
|
2026-10-14 23:22:19 +08:00 |
|
a620906209
|
529ba94dc7
|
chore(openspec): 更新 config.yaml 專案 context 並補上 proposal/specs/design/tasks 規則
|
2026-10-14 23:20:26 +08:00 |
|
a620906209
|
7edd1bfcdc
|
Merge pull request 'chore(claude): 新增 AC 對應測試規則與 branch-and-propose skill' (#61) from chore/claude-md-ac-test-rule into master
Deploy Production / deploy (push) Successful in 1m37s
Run Tests / test (push) Successful in 41s
Reviewed-on: #61
|
2026-10-14 14:39:43 +00:00 |
|
a620906209
|
871c0546fd
|
docs(analysis): 新增專案審視待辦與 project prompt 改善計畫
Run Tests / test (pull_request) Successful in 35s
|
2026-10-14 22:36:58 +08:00 |
|
a620906209
|
eb9c7080af
|
chore(claude): 新增 AC 對應測試規則與 branch-and-propose skill
|
2026-10-14 20:39:43 +08:00 |
|
a620906209
|
4b81166f25
|
Merge pull request 'chore(openspec): 歸檔 bake-image-remove-bind-mount + 同步主規格' (#60) from chore/archive-bake-image-remove-bind-mount into master
Deploy Production / deploy (push) Successful in 1m40s
Run Tests / test (push) Successful in 38s
Reviewed-on: #60
|
2026-08-04 09:44:41 +00:00 |
|
a620906209
|
05a116beee
|
chore(openspec): 歸檔 bake-image-remove-bind-mount + 同步主規格
Run Tests / test (pull_request) Successful in 32s
VPS 部署與功能驗證皆已完成(tasks.md 7.7/7.8),change 移入
archive/2026-08-04-bake-image-remove-bind-mount。同步兩份 delta spec:
新建 image-baked-deployment 主規格(multi-stage build、symlink 建立、
nginx 獨立 build target、env_file 注入等 11 條 requirement);更新
scheduler-container 補上「不依賴 bind mount」的敘述與 scenario。
openspec validate --strict --specs 39/39 全過。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0142LC1kQb8EyV59TjHDkhWS
|
2026-08-04 17:41:59 +08:00 |
|
a620906209
|
286db8ffe2
|
Merge pull request 'chore(openspec): 新增 bake-image-remove-bind-mount change 規劃' (#59) from feat/bake-image-remove-bind-mount into master
Deploy Production / deploy (push) Successful in 5m50s
Run Tests / test (push) Successful in 33s
Reviewed-on: #59
|
2026-08-04 09:06:50 +00:00 |
|
a620906209
|
6a7d98b0fe
|
feat(docker): 移除 bind mount,程式碼與 vendor 烘進 image
Run Tests / test (pull_request) Successful in 32s
Dockerfile 改 multi-stage(app + web),app/scheduler/queue-worker/
reverb/nginx 五個服務都不再依賴 ./:/var/www bind mount 取得程式碼;
nginx 改本地 build 從 app 階段 COPY --from 取得 public/,public/storage
symlink 在兩階段各自於 build 時建立。docker-compose.yml 新增具名 volume
storage-app-public 讓上傳檔案跨 image 重建保留;env_file: 取代原本
bind mount 帶入 .env 的方式,只給四個 Laravel runtime 服務。
compose.override.yml 補上開發用 bind mount 維持改 code 立即生效;
docker-entrypoint.sh 收斂到只剩目錄權限設定,migration/cache/swagger
移到 deploy.yml 統一負責,避免職責重疊。
實作驗證時發現並修復三個規劃階段沒預見的問題:app 服務的 build: 缺
target: app 導致預設建到最後一個 stage(image 實際變成 nginx);
.dockerignore 需排除本機既有的 public/storage 符號連結(Windows 上
會讓 build context 打包失敗);env_file: 讓 .env 全部變數變成真實
環境變數、蓋掉 phpunit.xml 的測試隔離設定,已擴大 tests/bootstrap.php
的強制覆蓋清單修復(239 tests 全綠)。
本機 dev 模式與 production 模式(無 override)皆完整驗證:healthcheck、
migration/cache/swagger、上傳檔案持久性、nginx 獨立於 app 服務靜態檔
與 storage 檔案、.env 熱更新、nginx 無 .env 存取權。
openspec change: bake-image-remove-bind-mount
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0142LC1kQb8EyV59TjHDkhWS
|
2026-08-04 16:59:18 +08:00 |
|
a620906209
|
3b0cdf96d8
|
chore(openspec): 新增 bake-image-remove-bind-mount change 規劃
P0「移除 Docker bind mount、程式碼烘進 image」的完整規劃:Dockerfile
改 multi-stage(app + web)、docker-compose.yml 拿掉五個服務的 bind
mount、nginx 改本地 build 取得 public/、deploy.yml 改 build-then-up、
entrypoint 職責收斂、.dockerignore 補齊。尚未實作,僅規劃文件。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0142LC1kQb8EyV59TjHDkhWS
|
2026-08-04 16:22:50 +08:00 |
|
a620906209
|
9a1de393f6
|
Merge pull request 'docs(openspec): 補齊所有 spec 缺少的 Purpose section' (#58) from chore/openspec-spec-purpose-sections into master
Deploy Production / deploy (push) Successful in 16s
Run Tests / test (push) Successful in 37s
Reviewed-on: #58
|
2026-08-02 20:14:09 +00:00 |
|
a620906209
|
0cd1047b10
|
docs(openspec): 補齊所有 spec 缺少的 Purpose section 與規格標頭
Run Tests / test (pull_request) Successful in 30s
repo 內 35/38 份既有 spec 都是舊版歸檔流程留下的原始 delta 內容(`##
ADDED Requirements`,缺標題與 Purpose),openspec CLI 現版本嚴格驗證
(--strict)會報錯或警告。逐一補上:
- 缺標題/Purpose 的 30 份:加上 `# <name> Specification` 標題 + 依內容
撰寫的 Purpose 段落,`## ADDED Requirements` 改回 `## Requirements`
- compose-cloud-baseline、scheduler-container:已有標題與
Requirements,只補 Purpose 包裝
- provider-verification:已有標題與 Purpose,只需把
`## ADDED Requirements` 改回 `## Requirements`
- admin-user-management、notification-email:各有一條 requirement 缺
SHALL/MUST 關鍵字(純敘述句或表格),補上規範用語,內容不變
`openspec validate --specs --strict`:38/38 全過(原本 4/38)。純文件
補齊,未變更任何 requirement 的實質內容或行為描述。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
|
2026-08-03 04:11:06 +08:00 |
|
a620906209
|
81411877f8
|
chore(openspec): 歸檔 cloud-ready-s3-storage + 同步主規格
Run Tests / test (pull_request) Successful in 32s
程式碼部分(tasks 1-3)已完成並測試通過,符合 spec 描述的行為(可測試
的程式邏輯,非部署狀態)。R2 帳號申請、VPS 部署與正式切換(tasks 4-6)
仍暫緩,待後續另開 change 處理,archive 後的 tasks.md 保留暫緩註記。
順便修正 env-cloud-annotations 主規格缺少 ## Purpose section 的問題
(openspec CLI 現版本嚴格驗證要求),這是既有規格檔案的既存缺口,本次
只修了本 change 有動到的這一份,其餘規格檔案的同類問題不在此次範圍。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
|
2026-08-03 04:00:17 +08:00 |
|
a620906209
|
0af6d2a089
|
Merge pull request 'fix(ci): 補上 php84-simplexml,修正 aws-sdk-php composer install 失敗' (#56) from feat/cloud-ready-s3-storage into master
Deploy Production / deploy (push) Successful in 16s
Run Tests / test (push) Successful in 40s
Reviewed-on: #56
|
2026-08-02 19:47:25 +00:00 |
|
a620906209
|
3b73be4051
|
fix(ci): 補上 php84-simplexml,修正 aws-sdk-php composer install 失敗
Run Tests / test (pull_request) Successful in 39s
aws/aws-sdk-php(因 league/flysystem-aws-s3-v3 新增)要求 ext-simplexml,
CI 的 Alpine runner 用 apk 逐一裝擴充套件,之前沒裝這個 package 導致
composer install 失敗。正式環境的 Dockerfile 是 Debian 版 php:8.2-fpm,
simplexml 內建就有,不受影響,只有 CI 這邊要補。
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011LpcY9b7y9x4fusHBTXciQ
|
2026-08-03 03:46:10 +08:00 |
|
a620906209
|
15318d5734
|
Merge pull request 'feat(storage): S3 相容物件儲存支援(cloud-ready-s3-storage)' (#55) from feat/cloud-ready-s3-storage into master
Deploy Production / deploy (push) Successful in 23s
Run Tests / test (push) Failing after 15s
Reviewed-on: #55
|
2026-08-02 19:44:03 +00:00 |
|