Repository navigation
feat: mở rộng command và endpoint Phase 6 trước phát hành - #10
Conversation
Tiếp tục từ PR9 đã merge; chia command đọc và gate schema cho thao tác ghi. Giữ lịch sử migration, TODO v1 và positive fee/survey; chưa tag hoặc publish.
Sau commit 6c01ea0 — khởi tạo Phase 6
PR giữ Draft. Các commit runtime kế tiếp sẽ có regression và comment riêng; không tạo tag/publish hoặc live ghi. |
Nối balance, courses, subjects theo kỳ, tìm news, transcript/training, photo JSON và marks summary qua contract v1/v2. Giữ ngoại lệ signer/casing, không kỳ/checksum ở summary v1, bảo toàn chuỗi ảnh và doctor không đọc session. Regression CLI/HTTP tổng hợp, validation API và phân loại lỗi giữ policy retry đọc; không mở thao tác ghi.
Sau commit c829b70 — nhóm command đọc Phase 6Commit: c829b70 Đã nối CLI → wrapper → HTTP
Kiểm chứng
Còn mở
|
Cập nhật capability 29 operation v2, query ngoại lệ, policy credential chưa live xác nhận và kết quả regression/artifact. README không còn tuyên bố parity toàn app; giữ rating/push/feedback cùng tag/publish ở trạng thái chưa hoàn tất.
Sau commit 4a52872 — coverage và giới hạn Phase 6Commit: 4a52872
Chưa gửi dữ liệu tài khoản lên GitHub; không tag/publish hoặc live ghi. Rating/push/feedback chưa được mở bằng commit này, Phase 6 còn tiếp tục. |
Thêm rating list dùng contract GET v1 và signer roll number. V2 vẫn unsupported trước load session; không mở AddRate, push hoặc feedback submit và không biến stub thành dữ liệu rỗng.
Sau commit 4c29b81 — rating list chỉ đọcCommit: 4c29b81
|
Tái hiện CI bằng FORCE_COLOR=1; dùng Rich Text.from_ansi như regression help hiện có. Giữ nguyên assertion tên option, stderr và zero HTTP; không thay runtime hoặc bỏ gate.
Sau commit d6d0ee6 — sửa assertion màu từ CICommit: d6d0ee6 CI run 40063972538 trước đó thất bại ở assertion tên option: Rich chèn ANSI giữa hai dấu gạch của --semester/--search/--summary. Nội dung lỗi đúng nhưng test tìm substring trên bytes có màu. Đây không phải CI xanh; build/smoke của run đó bị skip đúng gate. Đã tái hiện RED local bằng FORCE_COLOR=1. Sửa test dùng Text.from_ansi(...).plain theo regression help hiện có, không xóa assertion, không tắt màu runtime hoặc bỏ test. GREEN với FORCE_COLOR=1: nhóm command đọc 14/14 và summary 8/8, exit 0. git diff --cached --check exit 0. Full source trước đó đạt 391 test mỗi Python3.9/3.11; chờ CI mới xác nhận toàn matrix của commit sửa này. Không đổi runtime hoặc dữ liệu account, không tag/publish. Lượt live Phase6 vừa thử chưa hoàn tất login và chưa có FAP response; đã dọn session/thư mục tạm, không ghi live pass cho các command mới. |
Ghi đúng CI d6d0ee6 đạt 11 job, full local391 test mỗi Python và lỗi môi trường đã phục hồi. Không đổi login chưa thành công thành bằng chứng endpoint; giữ schema thao tác ghi và live đọc ở gate mở.
Sau commit 0e0c01c — cập nhật bằng chứng, không đóng gate liveCommit: 0e0c01c
Phase 6 còn gate live đọc và schema/ack cho các thao tác ghi. Chỉ metadata đã lọc được ghi vào GitHub; không raw response, ảnh, credential hoặc dữ liệu tài khoản. Không tag/publish hoặc gửi mutation live. |
Ghi 14 lần command exit0, dạng dữ liệu và giới hạn; chỉ metadata đã lọc. Xác nhận policy bound key đọc được trên HN, không suy auth server hoặc schema từ nonempty; giữ v1 và thao tác ghi chưa nghiệm thu.
Sau commit ca09b11 — live nhóm đọc v2/HNCommit: ca09b11 Bổ sung comment cho commit vừa được push trước khi phiên làm việc bị ngắt:
Chưa live command mới v1 hoặc rating list v1. Rating submit/push/feedback ghi còn gate. Chỉ metadata đã lọc được lưu, không raw response/ảnh/credential/dữ liệu tài khoản. Không tag/publish, không đánh dấu toàn Phase 6 hoàn tất. |
Khóa bốn trạng thái 404/201 thành lỗi không refresh/fallback bằng fixture tổng hợp; ghi kết quả live v1/APHL và bằng chứng còn thiếu cho write. Hiệu chỉnh method handshake CLI POST trong tài liệu, không đổi auth/runtime hoặc diễn giải lỗi server thành unsupported.
Sau commit 883a7aa — live v1/APHL và gate còn mởCommit: 883a7aa Kết quả thật, không che lỗi
Thay đổi và kiểm tra
Chỉ metadata allowlist được lưu. Không token/ảnh/identity/query có giá trị/raw response lên GitHub; không live ghi, tag, publish hoặc tuyên bố Phase6 hoàn tất. |
CI đã hoàn tất tại commit 883a7aaRun: https://github.com/WindowScary321/myfap-api-cli/actions/runs/40086258316 Đúng SHA 883a7aa: 11/11 job đạt, gồm source và wheel/sdist smoke Ubuntu/Windows × Python 3.9/3.11, build/artifact validator và gate tổng hợp. Đây là kiểm chứng code/fixture/artifact, không sửa hoặc đóng bốn lỗi live v1/APHL. Schema/ack rating submit, push và feedback vẫn còn gate; Phase 6 tiếp tục giữ Draft, chưa merge/tag/publish hoặc gửi mutation live. |
Dùng other training và other rating list, bỏ các command root cũ. Giữ endpoint/auth/retry/capability; bổ sung regression option kế thừa lồng ba cấp và help UTF-8/cp1252, cập nhật ví dụ và tài liệu.
Sau commit c56bd61 — đưa training/rating vào otherCommit: c56bd61 Theo yêu cầu mới:
Kiểm chứng:
Không gọi API tài khoản hoặc gửi mutation live trong lượt này; chưa tag/publish. Chờ CI của commit mới, không dùng kết quả cũ làm CI của c56bd61. |
|
CI của commit c56bd61 đã đạt 11/11 job: source, build và cài thử wheel/sdist Ubuntu/Windows × Python 3.9/3.11. Run: https://github.com/WindowScary321/myfap-api-cli/actions/runs/40087697309 . Việc chuyển other training / other rating list không đổi endpoint hoặc các gate live còn mở; chưa merge/tag/publish. |
|
Commit Thay đổi: Kiểm tra: docs-only nên theo quy trình chỉ kiểm nội dung/liên kết/diff: Giới hạn: Đây là ghi nhận trạng thái gate, không phải bằng chứng schema/ack và không tự đóng hay nới gate nào; các hộp nghiệm thu Phase 6 khác giữ nguyên trạng thái mở. |
|
Commit Thay đổi:
Kiểm tra: focused Giới hạn: các test đạt GREEN ngay vì xác nhận hành vi đã triển khai từ các commit trước — khoảng trống là độ phủ test, không phải behavior mới, nên không có bước RED. Toàn bộ dùng session tổng hợp và HTTP giả tại seam CLI; không thay thế kiểm chứng live và không đóng các finding v1/positive fee/survey. Nghiệm thu nhóm mục 2–3 và các mục 4–6 vẫn mở. |
|
Commit Thay đổi: tick 5 hộp còn thiếu của mục 2 (từ chối tổ hợp summary, reader riêng, chốt credential v2 bằng bytecode, và hai hộp nghiệm thu nhóm) kèm đoạn bằng chứng; cập nhật Bằng chứng chính:
Riêng tư dữ liệu: raw response chỉ tồn tại trong thư mục tạm của máy cá nhân, đã xóa sau khi trích metadata; không token, identity, giá trị trường hay raw payload nào vào Git/PR/chat. Chỉ metadata đã lọc (status, body code, shape, tên khóa schema) được ghi. Kiểm tra: docs-only → Giới hạn: positive schema summary là một tài khoản/một campus, chưa phải nghiệm thu backend; formatter transcript/training vẫn nhãn chưa kiểm chứng; nhóm 3 (photo/doctor) và mục 4–6 của phase6.md vẫn mở. |
|
Commit Thí nghiệm transport có kiểm soát (24/10/2026, v2/HN, session thật, chỉ đọc): gửi trực tiếp 5 biến thể header cho cả ba operation transcript/training/summary, metadata đã lọc, không giá trị nào rời máy:
Kết luận: proxy v2 hiện tại chỉ chấp nhận cặp Bearer FAP key + Checksum ký bằng đúng key đó; nhánh credential rỗng thấy trong bytecode (module_599.js:224/272/286) bị server từ chối — hoặc app thật bơm token ở tầng khác (Axios wrapper Thay đổi: Kiểm tra: docs-only → Giới hạn: thí nghiệm trên một tài khoản/một campus (HN); không suy rộng cho mọi campus và không khẳng định app thật gửi gì lúc runtime. |
|
Commit (1) Regression + build artifact trên code mới:
(2) Mapping/contract/coverage: đã cập nhật ở commit (3) Quét toàn bộ lệnh đọc bằng session/browser mới (v2/HN): hai lượt login FEID mới bằng browser context mới, session tạm riêng, cả hai đã logout; raw chỉ xử lý cục bộ trên máy cá nhân và xóa sau khi trích metadata; param (CourseId, SubjectCode/ClassName) trích cục bộ từ response, không in giá trị. Kết quả chính:
Kiểm tra: docs-only → Còn mở sau checkpoint: mục 4 (rating submit/push gate), mục 5 (feedback form/submit gate), mục 6 (nghiệm thu/bàn giao maintainer), 7 lỗi v1 và positive fee/survey tại |
|
Commit Thay đổi:
Kiểm tra (RED→GREEN): 4 test parser + 1 test CLI seam (cả nhánh Giới hạn: parser giữ nguyên dạng chuỗi của từng ô (không ép kiểu số, không tính GPA/tổng kết — không tự suy nghiệp vụ); bảng phụ chưa có giải thích nghiệp vụ chính thức, giữ neutral theo header; docs đã cập nhật (CHANGELOG, command-endpoints, phase6-coverage, phase6.md). |
|
Commit Thay đổi: Mở rộng mục "Thao tác ghi rating/push/feedback vẫn chưa mở" thành "Mục 4–5 Phase 6 khó thực hiện với tài khoản hiện tại" theo đánh giá của maintainer ngày 24/10/2026. Ghi rõ từng blockers: rating submit không có rateid (list rỗng), push register là thao tác ghi cần xác nhận riêng, Kiểm tra: docs-only → Giới hạn: đây là ghi nhận trạng thái, không phải bằng chứng schema/ack và không tự đóng hay nới gate nào. |
|
Commit (1) RED→GREEN + mutation check: các feature mới đều có chu kỳ RED→GREEN (feedbacks, doctor GetVersion, transcript --pretty) qua CLI thật + HTTP giả, fixture tổng hợp. Mutation check chạy trên git worktree tạm (đã dọn sạch), 3/3 bị focused test bắt: (a) đổi casing query (2) Regression hai interpreter: (3) Artifact + CI: build/Twine strict/artifact validator/pip smoke chạy lại trên commit cuối: manifest SHA-256 (4) Review + docs: lượt review thứ hai có cấu trúc trên toàn bộ diff PR (14 file code/test, +1355/−30) theo 4 trục: query contract, credential safety, write safety — sạch (khớp mutation + test exact-params + sentinel no-leak); parser có 4 finding robustness đã ghi vào CHANGELOG known issues và TODO (rowspan rác làm (5) Quy trình PR: PR #10 Draft từ nhánh riêng; mọi commit push trong PR đều có comment SHA/thay đổi/lệnh/exit code/giới hạn. Còn mở: duy nhất hộp "Maintainer nghiệm thu phạm vi Phase 6" — kèm 4 finding robustness chờ quyết định (sửa trước tag hay known issue) và các gate mục 4–5 đã ghi tại TODO. |
|
Commit Thay đổi (code + test): sửa cả 4 finding robustness từ lượt review mục 6, theo quyết định của maintainer ngày 24/10/2026 (chọn sửa trước phát hành thay vì known issues):
Kiểm tra (RED→GREEN): 5 test regression mới viết trước (RED: 3 failures + 4 errors gồm cả crash thật), sau khi sửa code ba lỗi còn lại là bug của chính test mới (kỳ vọng thừa khóa Giới hạn: slot vượt nửa đêm dùng ngữ nghĩa lịch chuẩn (kết thúc trước bắt đầu = sang ngày sau), chưa có bằng chứng FAP gửi slot dạng này; các fix thuần parser/output, không đổi contract API. |
|
Commit Thay đổi:
Kiểm tra: docs-only → Trạng thái Phase 6 sau commit này: mọi hộp trong |
|
Commit Thay đổi (code + test):
Kiểm tra (RED→GREEN):
Giới hạn: format giờ hỗ trợ |
|
Commit Thay đổi:
Kiểm tra: docs-only → |
|
Commit Thay đổi (code + test):
Kiểm tra:
|
|
Commit Thay đổi:
Kiểm tra: docs-only → |
|
Commit Thay đổi (code + test):
Kiểm tra:
|
|
Commit Thay đổi:
Kiểm tra: docs-only → |
- tasks/phase6.md: ghi rõ 8 hộp việc ở mục 4-5 tiếp tục giữ gate/unsupported có chủ đích do thiếu dữ liệu tài khoản, không tick khi chưa có schema live. - docs/endpoint-gap-analysis.md: chuẩn hóa tuyên bố phủ toàn bộ đọc sinh viên ngoại trừ GetStudentFeedbackForm (chờ feedbackId thật). - docs/releasing.md: cập nhật dòng 14 khớp quyết định phát hành sau khi hoàn thiện và nghiệm thu phạm vi Phase 6. - tasks/todo.md: cập nhật tiến độ Phase 6, ghi nhận đồng bộ tài liệu tiền phát hành và trạng thái 8 hộp việc mục 4-5. - CHANGELOG.md: ghi nhận ngoại lệ GetStudentFeedbackForm trong mục phân tích khoảng trống endpoint.
|
Commit Thay đổi:
Kiểm tra:
Trạng thái & Giới hạn:
|

Mục tiêu
Tiếp tục từ PR #9 đã merge (
75fc7b4), bổ sung command/endpoint Phase 6 trước khi phát hành. Giữ version0.2.0, v1 mặc định, v2 opt-in; không tag/publish trong PR này.Thứ tự triển khai
Kiểm chứng
Từng commit sẽ có comment riêng nêu SHA, lệnh/exit và giới hạn. Fixture hoàn toàn tổng hợp; live đọc dùng session/browser mới và chỉ giữ metadata allowlist. Không đưa raw response, token, query có giá trị, ảnh hoặc dữ liệu tài khoản lên GitHub. Không thực hiện live ghi nếu chưa có xác nhận riêng.
PR giữ Draft trong thời gian triển khai. Không dùng CI xanh để tuyên bố mọi endpoint đã hoạt động; giữ TODO v1 và positive fee/survey.