本卡屬 FR-192(母卡 FR-192 母案(同清單上一張)),卡 A-1,批 2。只改 evidence-agent。依賴:P-1。

這張卡做什麼(白話)

Agent 這邊「意見回饋」功能的本體:一張本機表存回饋、一組函式負責新增與查自己的、一組主控台 API 給前端打,加上把回饋排進既有的「待回傳佇列」等連上主系統再送。整個照「執行紀錄」那套機制的形狀長(本機先存、心跳補送、同步狀態三態),新模組叫 feedback。這張卡只做新增、清單、單筆;修改、刪除、主系統回拉在 A-3。類別下拉的選項由主系統設定通道下發,本卡也接這一類。

reuse/extend/new

new(新模組,照型):表欄位與 app 函式簽名照 scan/app/local_runs.py(_insert/record_sync/list_page/get);console API 照 console/api/runs_routes.py(清單、404 不分查無與非本人、resend);附件 reuse files/app/blob_ops.save_upload;extend:outbox 加 KIND_FEEDBACK 進 _NEVER_DROP/_ORDERED/SENDABLE,批次送 FEEDBACKS_PATH 照 _post_local_runs

在哪裡

repo:~/Projects/Billows/Audit-Manager/evidence-agent
改既有:guidant_agent/sync/ports/result_outbox.py(KIND_FEEDBACK)
改既有:guidant_agent/sync/app/outbox.py(三個集合+`_post_feedbacks`)
改既有:guidant_agent/platform/registry.py(MODULES 加 feedback:migrations、config、register)
改既有:guidant_agent/shared/event_codes.py(AGENT_FEEDBACK_CREATED/SYNCED/SYNC_FAILED)
改既有:common/code/(新 ConsoleFeedbackErrorCode 檔)
新開:guidant_agent/feedback/__init__.py
新開:guidant_agent/feedback/migrations.py(新版號:feedbacks 表)
新開:guidant_agent/feedback/app/feedbacks.py(create/list_mine/get/record_sync)
新開:guidant_agent/feedback/app/labels.py(KIND_FEEDBACK_LABELS 套用者+options())
新開:guidant_agent/feedback/adapters/feedback_repo.py(SQL 只在這)
新開:guidant_agent/feedback/api/feedback_routes.py(GET list/GET one/POST/POST resend/GET labels)
新開:test/feedback/test_feedbacks.py

怎麼做

驗收(首腦照這個驗)

守衛六支綠(含 test_security_rules_cover_sources.py 新檔都被命中);主控台 POST /console/api/feedbacks multipart 建一筆,GET /console/api/feedbacks 只回本人的,換另一個 session 打單筆 404;outbox 表多一列 kind=feedback;同一 uid 入列 create 再 update,drain 時 create 沒送成 update 不送(test);離線時 resend 回 409;設定類 feedback_labels 套用後 GET /console/api/feedback-labels 回三個

必讀