本卡屬 FR-089(母卡 CM-1688),修 arc review CM-1738 的 I-1 與 I-2,Important。建議 model:Opus,effort:medium——動 jedi-common 這支全體套件的下層,且要判斷「查不到回填 login_name」是不是前端依賴的行為。

問題是什麼(白話)

I-1:把帳號換成暱稱填進 created_user_nameupdated_user_name 這段程式碼,本 arc 在四支套件各複製了一份 app/service/_audit_names.py(asset/iam/survey/compliance-audit,前三支函式體逐字相同),加上主專案 common/util/audit_nickname.py 共五份。iam 那份註解寫「與 jedi_asset 是同一份的第二份拷貝,改這裡要一起改那裡」,寫下時 survey 與 compliance-audit 兩份還沒出現。五份會各自漂移,症狀是某支的人名恆為空白,靜默。

I-2:主專案守衛 test_audit_nickname_enrichment_has_single_implementation 判準是檔案裡有沒有 "UserQueryEntity(_in_login_name" 字串,只掃 app/common/infra/readmodel/oscal/resource_library_query.py:132 用裸 SQL SELECT login_name, nickname FROM public.users WHERE login_name = ANY(:ln) 完全繞過,而且行為已經漂了:canonical 查不到補 Nonecommon/util/audit_nickname.py:47-48),這份查不到回填 login_nameapp/oscal/service/resource_library_app_service.py:139-141)。同一個欄位對前端吐不同語意。不是本 arc 引入,但本 arc 的 SOP §5.1 第 4 條正把這條守衛當「已焊死」。

在哪裡

jedi monorepo
  jedi-common/jedi_common/identity/context.py:60 IdentityContext(:69 resolve_user_names)=新家
  jedi-asset/jedi_asset/app/service/_audit_names.py:16 fill_user_names(dtos, identity)
  jedi-iam/jedi_iam/app/service/_audit_names.py:19(含過期註解)
  jedi-survey/jedi_survey/app/service/_audit_names.py:17
  jedi-compliance-audit/jedi_compliance_audit/app/service/_audit_names.py:17 fill_user_names + :47 fill_user_names_in_rows(dict 版)
  caller:asset device_service.py:45/information_system_service.py:46、iam user_service.py:71/role_service.py:25、bulletin bulletin_service.py:113(自己寫的 _fill_user_names,看它是不是又一份)、survey/compliance-audit 各 service
BE
  common/util/audit_nickname.py(主專案 canonical,內部經 IdentityContext)
  test/test_module_boundaries.py:1330 test_audit_nickname_enrichment_has_single_implementation
  infra/readmodel/oscal/resource_library_query.py:132 get_user_nicknames 裸 SQL
  app/oscal/service/resource_library_app_service.py:129-141 caller

怎麼修

要寫測試

全量:jedi-common/asset/iam/survey/compliance-audit/bulletin 六支 tests/ 各 tail -1(自己 commit 的 worktree);BE pytest test/test_module_boundaries.py test/test_fr048_*.py -q

手測(DEV)

連帶