From c706633ac5f69bdda076fecd08b2da02db55ceaa Mon Sep 17 00:00:00 2001 From: zlt Date: Thu, 17 Sep 2026 13:28:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B9=E6=A1=88=E5=89=AF=E6=9C=AC=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=EF=BC=9A=E5=A4=8D=E5=AE=A1=E8=AE=B0=E5=BD=95=EF=BC=9A?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8C=85=E4=B9=99=E6=8C=81=E4=BB=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E7=B3=BB=E7=BB=9F=20f5cc1b8=20=E9=80=9A=E8=BF=87?= =?UTF-8?q?=EF=BC=88155=20=E4=B8=80=E6=AC=A1=E6=80=A7=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E5=AE=9E=E8=B7=91=E5=85=A8=E7=BB=BF=EF=BC=89=E3=80=81=E9=80=89?= =?UTF-8?q?=E8=82=A1=E7=B3=BB=E7=BB=9F=204ae6378=20=E9=80=80=E5=9B=9E?= =?UTF-8?q?=E4=B8=80=E5=A4=84=EF=BC=88=E6=A1=A3=E4=BD=8D=E7=99=BD=E5=90=8D?= =?UTF-8?q?=E5=8D=95=E8=BF=87=E6=BB=A4=E4=B8=8D=E8=83=BD=E5=8E=BB=EF=BC=89?= =?UTF-8?q?=E3=80=81=E6=8B=8D=E6=9D=BF=E7=82=B9=E5=85=AD=E4=B8=8E=2009-24?= =?UTF-8?q?=20=E8=AF=BB=E6=95=B0=E6=94=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- ...Šçº¿ä¸ŽååŒé˜¶æ®µå·¥ä½œæ–¹æ¡ˆä¸Žè§„格书_2026-09-17.md | 42 ++++++++++++------- docs/评审记录_2026-09-17.md | 20 +++++++++ 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/docs/上线与ååŒé˜¶æ®µå·¥ä½œæ–¹æ¡ˆä¸Žè§„格书_2026-09-17.md b/docs/上线与ååŒé˜¶æ®µå·¥ä½œæ–¹æ¡ˆä¸Žè§„格书_2026-09-17.md index d497b82..54d77a6 100644 --- a/docs/上线与ååŒé˜¶æ®µå·¥ä½œæ–¹æ¡ˆä¸Žè§„格书_2026-09-17.md +++ b/docs/上线与ååŒé˜¶æ®µå·¥ä½œæ–¹æ¡ˆä¸Žè§„格书_2026-09-17.md @@ -56,7 +56,7 @@ 5. 选股系统 `plan_review.pms_roster` 读到元数æ®é‡Œ `rank_mode` 为 upstream 时按åå†Œé‡Œçš„åæ¬¡å‡åºå–å‰ N,å¦åˆ™æŒ‰åŽŸå§‹åˆ†é™åºå–å‰ Nï¼ˆä»Šå¤©çš„å†™æ³•ï¼‰ã€‚è¿™ä¸€å¤„å°æ”¹æ”¾åœ¨é€‰è‚¡ç³»ç»Ÿä»“库,éšå·¥ä½œåŒ…丙或å•独一个æäº¤ã€‚ 6. 啿µ‹ã€å°è´¦ã€å¯¹æŽ¥è¯´æ˜Žã€‚既有的 `scripts/test_batch29_units.py` 里已有按质地分桶的三例,æ—边加三例。å°è´¦ä¸€æ¡ï¼Œç¼–å· 016。æŒä»“管ç†ç³»ç»Ÿçš„对接说明加一段"å‰ç¼€æ•ˆåº”",与选股系统下游对接说明那段åŒä¹‰ã€‚ -**上线。** æŒä»“管ç†ç³»ç»Ÿåœ¨é€‰è‚¡ç³»ç»Ÿæœºå™¨ä¸Šï¼Œæºç æŒ‚载进容器,改代ç åªè¦é‡å¯è¿›ç¨‹ï¼Œé‡å¯è¦ç”¨æˆ·åŒæ„ã€æ”¶ç›˜åŽåšã€‚放在 09-23 收盘åŽï¼Œå‰ææ˜¯ 09-22 的六处读数干净。ä¸ä¸Ž 09-21 的选股系统拉代ç åŒä¸€å¤©ï¼Œé¿å…ä¸¤å¤„åŒæ—¶å˜åŒ–è¯´ä¸æ¸…。 +**上线。** æŒä»“管ç†ç³»ç»Ÿåœ¨é€‰è‚¡ç³»ç»Ÿæœºå™¨ä¸Šï¼Œæºç æŒ‚载进容器,改代ç åªè¦é‡å¯è¿›ç¨‹ï¼ˆä¸é‡å»ºé•œåƒï¼Œä¾èµ–没改),é‡å¯è¦ç”¨æˆ·åŒæ„ã€æ”¶ç›˜åŽåšã€‚放在 09-23 收盘åŽï¼Œå‰ææ˜¯ 09-22 的六处读数干净。ä¸ä¸Ž 09-21 的选股系统拉代ç åŒä¸€å¤©ï¼Œé¿å…ä¸¤å¤„åŒæ—¶å˜åŒ–è¯´ä¸æ¸…。åŒä¸€å¤©æŒ‰æ‹æ¿ç‚¹å…­å†³å®šè¦ä¸è¦æŠŠæ¡£ä½ç™½å啿”¾å®½ã€‚ 细节è§é™„录乙。 @@ -84,11 +84,11 @@ |---|---|---| | 09-17 | 三 | å¤å®¡å®Œæˆã€‚工作包甲与丙交付并å¤å®¡é€šè¿‡ï¼ˆe7cf0a9,评审记录第ä¹èŠ‚ï¼‰ï¼Œå·²æŽ¨é€ | | 09-18 | å›› | æ”¶ç›˜åŽæ•°æ®åŸºåº§ 09-18 部署窗(附录甲,原样)。开å‘者åšå·¥ä½œåŒ…ä¹™ | -| 09-19 | å…­ | 工作包乙交付,å«é€‰è‚¡ç³»ç»Ÿé‚£ä¸€å¤„å°æ”¹ã€‚我å¤å®¡ | +| 09-19 | å…­ | 工作包乙已于 09-17 交付并å¤å®¡ï¼ˆè¯„审记录第å节):æŒä»“管ç†ç³»ç»Ÿ f5cc1b8 通过,选股系统 4ae6378 退回一处,修补æäº¤ 09-19 å‰äº¤ | | 09-21 | 一 | 收盘åŽé€‰è‚¡ç³»ç»Ÿæœºå™¨æ‹‰ä»£ç ï¼ŒæŽ¥å£å®¹å™¨é‡å¯å¹¶é¢„热,ç»å®¡æ‰¹ï¼Œé¿å¼€ä¸ƒç‚¹åˆ°ä¸ƒç‚¹åŠä¸Žå…«ç‚¹åŠåˆ°ä¹ç‚¹é›¶äº” | | 09-22 | 二 | 07:15 åŽæ ¸é¦–份质地åºè®¡åˆ’çš„å…­å¤„è¯»æ•°ï¼Œå†æ ¸"两æ¡è·¯åŒä¸€ä»½å‰äºŒå"ã€‚æ”¶ç›˜åŽæ•°æ®åŸºåº§ç¬¬äºŒæ‰¹ï¼ˆé™„录乙) | -| 09-23 | 三 | 09-22 读数干净,则收盘åŽé‡å¯æŒä»“管ç†ç³»ç»Ÿè¿›ç¨‹ä¸Šçº¿å·¥ä½œåŒ…乙,ç»å®¡æ‰¹ | -| 09-24 | å›› | 08:45 åŽæ ¸æŒä»“管ç†ç³»ç»Ÿçš„候选åºç­‰äºŽä¸Šæ¸¸åæ¬¡åº | +| 09-23 | 三 | 09-22 读数干净,则收盘åŽé‡å¯æŒä»“管ç†ç³»ç»Ÿè¿›ç¨‹ä¸Šçº¿å·¥ä½œåŒ…乙(restart,ä¸é‡å»ºï¼‰ï¼Œç»å®¡æ‰¹ï¼›æŒ‰æ‹æ¿ç‚¹å…­æ”¹æ¡£ä½ç™½åå• | +| 09-24 | å›› | 08:45 åŽåœ¨ä¸€æ¬¡æ€§å®¹å™¨é‡Œè°ƒå€™é€‰é€‰æ‹©å‡½æ•°ï¼Œæ ¸ rank_mode 为 upstreamã€å次递增 | | 09-25 | 五 | 首份带两份对照åå•çš„å‘¨æŠ¥ï¼Œåº•æœ¬æŒ‰æ‹æ¿ç‚¹ä¸€ | | 09-28 | 一 | æ•°æ®åŸºåº§å»ºè®®çº§å°åŒ…å¤å®¡ï¼ˆè‹¥åšï¼‰ | | 09-29 | 二 | æ•°æ®åŸºåº§ç¬¬ä¸‰æ‰¹ä¸Žå‰ç«¯é‡å»ºï¼ˆé™„录丙) | @@ -128,10 +128,16 @@ cd /Users/baobao/Documents/work/project/akg-factor-bridge && python3 test_plan_r cd /Users/baobao/Documents/work/project/akg-factor-bridge && PLAN_RANK_AXIS=transmission CARD_SORT_BY_QUALITY=0 POOL_SOURCE=tier REVIEW_TARGETS_AXIS=score python3 test_plan_rank_axis.py 2>&1 | tail -1 ``` -**本地(æŒä»“管ç†ç³»ç»Ÿä»“库,工作包乙交付åŽï¼‰ã€‚** 预期末行 ALL SUITES PASS,例数åªå¢žä¸å‡ã€‚ +**æŒä»“管ç†ç³»ç»Ÿå•测(选股系统机器,一次性容器)。** 本地 Python 3.9 没有 pydantic 也没有 docker,跑ä¸äº†å®ƒçš„啿µ‹ã€‚办法是把æäº¤æ‰“包拷到机器上的临时目录,用现æˆé•œåƒèµ·ä¸€ä¸ªä¸€æ¬¡æ€§å®¹å™¨æŠŠç›®å½•挂进去跑,ä¸ç¢°è¿è¡Œä¸­çš„容器,跑完删目录。预期末行 ALL SUITES PASS,例数åªå¢žä¸å‡ã€‚先在本地打包上传: ```bash -cd /Users/baobao/Documents/work/project/tradingSystem && python3 scripts/run_tests.py 2>&1 | tail -3 +cd /Users/baobao/Documents/work/project/tradingSystem && git archive --format=tar.gz -o /tmp/pms-review.tar.gz HEAD && scp -P 2280 /tmp/pms-review.tar.gz factor@192.168.16.155:/home/factor/tmp/ +``` + +å†åœ¨é€‰è‚¡ç³»ç»Ÿæœºå™¨ä¸Šè·‘并清ç†ï¼š + +```bash +D=/home/factor/tmp/pms-review && rm -rf $D && mkdir -p $D && tar -xzf /home/factor/tmp/pms-review.tar.gz -C $D && docker run --rm --entrypoint python -v $D:/app -w /app pms:latest scripts/run_tests.py 2>&1 | tail -3; rm -rf $D /home/factor/tmp/pms-review.tar.gz ``` **选股系统机器(09-22 早上 07:15 åŽï¼‰ã€‚** 两æ¡è·¯åŒä¸€ä»½å‰äºŒå。这æ¡è¯»æ•°æ˜¯å¿…改一的最终判收。预期打出快照文件å与 True。 @@ -142,16 +148,16 @@ cd ~/project/akg-factor-bridge && docker exec akg_factor_bridge python3 -c "impo **选股系统机器(09-22)。** 首份质地åºè®¡åˆ’的六处读数,命令与预期照《选股计划调整方案_2026-09-17》第六节,ä¸å†æŠ„一é。 -**选股系统机器(09-24 早上 08:45 åŽï¼‰ã€‚** æŒä»“管ç†ç³»ç»Ÿçš„候选åºç­‰äºŽä¸Šæ¸¸å次åºã€‚读它当天的å册快照与元数æ®ã€‚预期 `rank_mode` 为 upstreamï¼Œæ‰“å‡ºçš„åæ¬¡åºåˆ—严格递增。 +**选股系统机器(09-24 早上 08:45 åŽï¼‰ã€‚** æŒä»“管ç†ç³»ç»Ÿçš„候选åºç­‰äºŽä¸Šæ¸¸å次åºã€‚å册快照按代ç åºè½åº“ï¼Œçœ‹å®ƒçš„é¡ºåºæ²¡æœ‰æ„义,è¦ç›´æŽ¥è°ƒå€™é€‰é€‰æ‹©å‡½æ•°ã€‚在æŒä»“管ç†ç³»ç»Ÿä»“库目录起一个一次性容器(带 compose 的网络与环境,ä¸ç¢°è¿è¡Œä¸­çš„容器)。预期第一项是 upstream,éšåŽçš„忬¡åˆ—表严格递增。 ```bash -cd ~/project/akg-factor-bridge && docker exec akg_factor_bridge python3 -c " -import json, db -df = db.read_mysql('pms', 'SELECT roster_json, meta_json FROM pms_plan_snapshot ORDER BY id DESC LIMIT 1') -meta = json.loads(df.iloc[0]['meta_json'] or '{}'); roster = json.loads(df.iloc[0]['roster_json'] or '[]') -print('rank_mode =', meta.get('rank_mode')) -rows = [r for r in roster if str(r.get('b') or 'main') == 'main'] -print('å册å‰åçš„åæ¬¡ï¼š', [r.get('r') for r in rows[:10]])" 2>&1 | grep -v Warning +cd ~/project/tradingSystem && docker compose run --rm --no-deps pms-web python -c "from app.services import plan_feed as pf; out = pf.candidates(); print(out.get('rank_mode'), [(i.get('rank'), i['ts_code']) for i in out['items'][:10]])" 2>&1 | tail -2 +``` + +**选股系统机器(09-24)。** å册元数æ®å·²å†™æŽ’åºæ¨¡å¼ã€‚预期打出 upstream。 + +```bash +cd ~/project/akg-factor-bridge && docker exec akg_factor_bridge python3 -c "import json, db; df = db.read_mysql('pms', 'SELECT meta_json FROM pms_plan_snapshot ORDER BY id DESC LIMIT 1'); print(json.loads(df.iloc[0]['meta_json'] or '{}').get('rank_mode'))" 2>&1 | grep -v Warning ``` **选股系统机器(09-25 周报åŽï¼‰ã€‚** 周报底本。预期第一节æ¯å¤©çš„æ³¨è®°å†™"底本:快照",两份对照åå•都在。 @@ -179,7 +185,8 @@ cd ~/project/akg-factor-bridge && grep -n "底本\|æ–°åºå‰äºŒå\|æ—§åºå‰äºŒ 2. **æŒä»“管ç†ç³»ç»ŸååŒé¡¹çš„默认值与上线日。** 建议默认开ã€é ä¸Šæ¸¸çš„ `rank_axis` 自门控,09-23 收盘åŽä¸Šçº¿ã€‚ä¸ä¸Ž 09-21 åŒä¸€å¤©ã€‚ 3. **æäº¤ 4d7ca55 éšæœ¬æ–¹æ¡ˆæŽ¨é€ã€‚** 代定。修å¤å°åŒ…在它上é¢å†æä¸€ä¸ªã€‚ 4. **两份对照åå•çš„å£å¾„。** 代定:两份都是全é‡åºå‰äºŒå,ä¸è®¾ä¸»é¢˜é™é¢ï¼Œä¸Žå‘¨æŠ¥å…¶ä½™åå•åŒå£å¾„。它比的是排åºè§„åˆ™ï¼Œä¸æ˜¯å½“天交付的那二ååªï¼›äº¤ä»˜åå•妿œ‰"候选å•"与"强传导交付åå•"两行。 -5. **å·¥ä½œåŒ…ä¹™é‡Œé€‰è‚¡ç³»ç»Ÿé‚£ä¸€å¤„å°æ”¹ï¼ˆ`pms_roster` 按 `rank_mode` å–åºï¼‰** 代定éšå·¥ä½œåŒ…丙åŒä¸€ä¸ªæäº¤ã€‚ +5. **å·¥ä½œåŒ…ä¹™é‡Œé€‰è‚¡ç³»ç»Ÿé‚£ä¸€å¤„å°æ”¹ï¼ˆ`pms_roster` 按 `rank_mode` å–åºï¼‰** 代定éšå·¥ä½œåŒ…丙åŒä¸€ä¸ªæäº¤ã€‚实际å•独æäº¤ 4ae6378,å¤å®¡é€€å›žä¸€å¤„,修补è§é™„录乙末段。 +6. **æŒä»“管ç†ç³»ç»Ÿçš„æ¡£ä½ç™½åå•è¦ä¸è¦æ”¾å®½ã€‚** 它的è¿è¡Œå‚æ•° `PMS_PLAN_TIERS` 现在退回åˆå€¼"强传导",是一é“硬闸:上游åºä¸‹å®ƒæ‹¿åˆ°çš„å‰äº”åæ˜¯"强传导行里的质地åº",被指å‘但åªç®—å¼±ä¼ å¯¼çš„å¥½å…¬å¸æ°¸è¿œè¿›ä¸æ¥ï¼Œä¸Ž"传导é™ä¸ºé›·è¾¾é—¨ã€è¢«æŒ‡å‘å³å¯"ä¸ä¸€è‡´ï¼Œä¹Ÿä¸Žå…¥æ± ä¸åŒæºã€‚建议 09-23 éšå·¥ä½œåŒ…ä¹™ä¸Šçº¿æ—¶åœ¨å‚æ•°é¡µæŠŠå®ƒæ”¹æˆ"强传导,弱传导",ä¸ç”¨ä»£ç ï¼Œå°è´¦è¡¥ä¸€è¡Œï¼›å‘¨æŠ¥çš„交付åå•还原读åŒä¸€ä¸ªå‚æ•°ï¼Œè‡ªåŠ¨è·Ÿä¸Šã€‚ä¸æ”¹ä¹Ÿè¡Œï¼Œä½†å››å‘¨å¤æ ¸è¦è¯´æ˜Žè¿™ä¸€å¤„差异。 --- @@ -205,6 +212,8 @@ cd ~/project/akg-factor-bridge && grep -n "底本\|æ–°åºå‰äºŒå\|æ—§åºå‰äºŒ 3. 周报改读快照åŽï¼Œ09-18 与 09-21 ä¸¤ä¸ªæ—§åºæ—¥çš„"主榜新åºå‰äºŒå"其实是旧åºå‰äºŒå,注记写明。 4. 工作包乙上线那天若æŒä»“管ç†ç³»ç»Ÿè¿›ç¨‹é‡å¯å¤±è´¥ï¼Œå›žé€€æ˜¯ä¸é‡å¯ï¼Œä»£ç åœ¨æŒ‚载目录里但进程还是旧的,行为ä¸å˜ã€‚ 5. å册元数æ®çš„ `rank_mode` åªä»Žå·¥ä½œåŒ…乙上线那天起有,之å‰çš„åå†Œå‘¨æŠ¥ä»æŒ‰åŽŸå§‹åˆ†è¿˜åŽŸï¼Œæ³¨è®°å†™æ˜Ž"åŽ†å² N 与åºä¸å¯è¿˜åŽŸ"é‚£å¥å·²æœ‰ã€‚ +6. æŒä»“管ç†ç³»ç»Ÿçš„å册主榜会从六å到一百行跳到接近三百行。它ä¸å‘上游传主题é™é¢ï¼ˆè¿è¡Œå‚æ•° `PMS_PLAN_THEME_CAP` 为零,08-13 设的),上游按默认æ¯ä¸»é¢˜äº”åªæˆªï¼›è´¨åœ°è½´ä¸‹æ— ä¼ å¯¼è¡Œä¸å—è¿™æ¡é™é¢ï¼Œæ‰€ä»¥ 09-22 起它拿到的行数接近它è¦çš„三百。多出æ¥çš„行ç»å¤§å¤šæ•°åˆ¤ä»…展示,被它的按判决分æµå‰”æŽ‰ï¼Œå€™é€‰åªæ•°ä¸å—å½±å“,"è€ƒè™‘åªæ•°"跳一次属预期。 +7. æŒä»“管ç†ç³»ç»Ÿæœºå™¨ä¸Š `PMS_PLAN_TOP_N` 是五å,与入池的五å对上;文档里写"å‰ä¸‰åå"的地方指的都是这个数,ä¸å¦æ”¹ã€‚ --- @@ -246,7 +255,8 @@ def take_by_theme(items, n, theme_cap, theme_of, uncapped_no_theme): - 选股系统 `plan_review.pms_roster`(`plan_review.py` 约 120 到 140 è¡Œï¼‰ï¼šæŸ¥è¯¢å¤šå– `meta_json`ï¼›`rank_mode` 为 upstream æ—¶ `rows.sort(key=lambda r: r.get("r") if r.get("r") is not None else 1 << 60)`,å¦åˆ™ä¿æŒæŒ‰ `s` é™åºã€‚注记字符串加一å¥"åºæŒ‰åå†Œå…ƒæ•°æ® rank_mode 还原"。 - 啿µ‹ï¼š`scripts/test_batch29_units.py` 约 298 到 324 行æ—加三例:上游 `rank_axis` 为 quality ä¸”å¼€å…³å¼€æ—¶æŒ‰åæ¬¡æŽ’且立场桶ä¸å‚与;上游没带 `rank_axis` 时开关开也é€å­—回按分桶排;`rank_mode` 三ç§å–值å„对。若 `run_tests.py` çš„æ–‡æ¡£å­—ç¬¦ä¸²é‡Œå†™äº†å„æ‰¹ä¾‹æ•°ï¼ŒæŒ‰å“¨å…µæ”¹æ•°ã€‚ - å°è´¦ 016,五段å¼ã€‚对接说明加"å‰ç¼€æ•ˆåº”"一段。 -- 上线(选股系统机器,收盘åŽï¼Œç»å®¡æ‰¹ï¼‰ï¼š`docker compose --profile sched --profile ws restart -t 30`,é‡å¯å‰ç”¨ `docker exec pms-ws date` 看容器时间确认已收盘。 +- 上线(选股系统机器,收盘åŽï¼Œç»å®¡æ‰¹ï¼‰ï¼š`docker compose --profile sched --profile ws restart -t 30`,é‡å¯å‰ç”¨ `docker exec pms-ws date` 看容器时间确认已收盘。ä¸é‡å»ºé•œåƒï¼šæºç ç”± `docker-compose.override.yml` 挂载进容器,ä¾èµ–没改。 +- **4ae6378 的修补(å¤å®¡é€€å›žä¸€å¤„,09-21 拉代ç å‰äº¤ï¼‰ã€‚** `pms_roster` 的上游åºåˆ†æ”¯ä¸èƒ½åŽ»æŽ‰æ¡£ä½è¿‡æ»¤ï¼šæŒä»“管ç†ç³»ç»Ÿçš„ `tiers` é—¨ä¸ŽæŽ’åºæ¨¡å¼æ— å…³ï¼Œä»»ä½•模å¼ä¸‹éƒ½å…ˆè¿‡å®ƒã€‚改法是从 `pms_runtime_param` 读 `PMS_PLAN_TIERS`(查询与读 `PMS_PLAN_TOP_N` é‚£æ¡åŒæ¬¾ï¼›ç¼ºè¡Œé€€å›ž"强传导",与æŒä»“管ç†ç³»ç»Ÿ `config/settings.py` çš„åˆå€¼ä¸€è‡´ï¼›è¯»åˆ°ç©ºä¸²æŒ‰ä¸è¿‡æ»¤ï¼‰ï¼Œä¸¤ç§æ¨¡å¼éƒ½å…ˆæŒ‰å®ƒè¿‡æ»¤ä¸»æ¦œè¡Œï¼Œå†æŒ‰ `rank_mode` 定åºï¼šupstream 按 `r` å‡åºã€å¦åˆ™æŒ‰ `s` é™åºï¼Œæœ€åŽå–å‰ N。把"过滤加定åº"抽æˆçº¯å‡½æ•° `_roster_pick(rows, tiers, mode, n)`,在 `test_plan_review_source.py` 里加一例:åŒä¸€ä»½å册在 upstream 与旧模å¼ä¸‹å„å–到的åå•ã€ä»¥åŠç™½åå•为空时ä¸è¿‡æ»¤ã€‚注记里写明白å啿¥è‡ªå‚数表。 ## 附录丙(å¯ä¸è¯»ï¼‰ï¼šå·¥ä½œåŒ…丙实现 diff --git a/docs/评审记录_2026-09-17.md b/docs/评审记录_2026-09-17.md index 107f8f7..d26b34c 100644 --- a/docs/评审记录_2026-09-17.md +++ b/docs/评审记录_2026-09-17.md @@ -131,3 +131,23 @@ **下一步。** e7cf0a9 已推é€ï¼Œ09-21 æ”¶ç›˜åŽæŒ‰è®¡åˆ’拉。开å‘者转åšå·¥ä½œåŒ…乙,规格在工作方案附录乙,09-19 交付。09-22 早上按工作方案第六节核"两æ¡è·¯åŒä¸€ä»½å‰äºŒå"。 +--- + +## åã€å·¥ä½œåŒ…ä¹™å¤å®¡ï¼ˆ2026-09-17 下åˆï¼Œè¯„审者):æŒä»“管ç†ç³»ç»Ÿé€šè¿‡ï¼Œé€‰è‚¡ç³»ç»Ÿå°æ”¹é€€å›žä¸€å¤„ + +**对象。** æŒä»“管ç†ç³»ç»Ÿä»“库 f5cc1b8(å°è´¦ 016)与选股系统仓库 4ae6378,都在å„自 `main`ã€äº¤ä»˜æ—¶æœªæŽ¨é€ã€‚ + +**æŒä»“管ç†ç³»ç»Ÿ f5cc1b8:通过。** å¼€å‘者本机跑ä¸äº†å®ƒçš„啿µ‹ï¼ˆç¼º pydantic ç­‰ä¾èµ–,本机 Python 3.9,无 docker),åªåšäº†ç¼–译与é€è¡Œå¯¹ç…§ï¼Œå¦‚实说了。我把这个æäº¤ç”¨ `git archive` æ‰“åŒ…ã€æ‹·åˆ°é€‰è‚¡ç³»ç»Ÿæœºå™¨çš„临时目录,用 `pms:latest` 镜åƒèµ·ä¸€ä¸ªä¸€æ¬¡æ€§å®¹å™¨æŠŠä»£ç ç›®å½•挂进去跑 `scripts/run_tests.py`,末行 ALL SUITES PASS,`test_batch29_units.py` 三例新用例全部 ok,跑完删掉临时目录与包。è¿è¡Œä¸­çš„容器一个没碰。这是今åŽå¤å®¡æŒä»“管ç†ç³»ç»Ÿä»£ç çš„办法,写进工作方案第六节。 + +é€é¡¹æ ¸å¯¹ï¼ˆæŒ‰å·¥ä½œæ–¹æ¡ˆç¬¬å节四件事):自门控åªçœ‹è®¡åˆ’顶层的 `rank_axis`,由 `_rank_mode` 一处判定,候选选择与å册元数æ®éƒ½ç”¨å®ƒï¼›ä¸Šæ¸¸åºä¸‹æŽ’åºé”®åªæœ‰å次与原始分,立场桶ä¸å‚与;上游没带 `rank_axis` 时两个既有分支é€å­—ä¸åŠ¨ï¼Œç¬¬äºŒä¾‹é’‰ä½ï¼›å册元数æ®å†™äº† `rank_mode`ï¼Œåœ¨æ‹‰è®¡åˆ’å¤„æŒ‰å‚æ•°ç®—好传入,与候选选择åŒä¸€ä»½å‚æ•°åŒä¸€ä»½è®¡åˆ’。四个新键归一ã€é€ä¼ ï¼Œé¡¶å±‚ `rank_axis`ã€`rank_rule` 带进æ¥ï¼Œå‚数登记默认开,接入说明补了å‰ç¼€æ•ˆåº”,å°è´¦ 016 五段é½ã€‚ + +ä¸€å¤„è¦æ”¹å£çš„æ˜¯å°è´¦ 016 与æäº¤ä¿¡æ¯é‡Œçš„"é‡å»ºé•œåƒåŠ  force-recreate"。选股系统机器上æŒä»“管ç†ç³»ç»Ÿçš„æºç æ˜¯æŒ‚载进容器的(`docker-compose.override.yml` 把仓库目录挂到 `/app`,我åªè¯»æ ¸è¿‡ï¼‰ï¼Œä¾èµ–没改,上线åªéœ€é‡å¯è¿›ç¨‹ï¼š`docker compose --profile sched --profile ws restart -t 30`。é‡å»ºé•œåƒä¼šè¦†ç›–é•œåƒæ ‡ç­¾ã€ä¸¢å®¹å™¨é‡Œçš„定时任务表ã€å†è·‘一é建表脚本,没必è¦ã€‚å°è´¦é‚£å¥ç•™ç€ä¸æ”¹ï¼Œä»¥å·¥ä½œæ–¹æ¡ˆç¬¬å…­èŠ‚ä¸ºå‡†ã€‚ + +**选股系统 4ae6378:退回一处。** `pms_roster` 的上游åºåˆ†æ”¯åŽ»æŽ‰äº†"æ¡£ä½å¼ºä¼ å¯¼"过滤,æäº¤ä¿¡æ¯è¯´æ˜¯"与æŒä»“管ç†ç³»ç»Ÿçš„上游分支åŒå£å¾„"。这ä¸å¯¹ã€‚æŒä»“管ç†ç³»ç»Ÿçš„æ¡£ä½ç™½åå•(`select_candidates` 里的 `tiers` é—¨ï¼‰ä¸ŽæŽ’åºæ¨¡å¼æ— å…³ï¼Œä»»ä½•模å¼ä¸‹éƒ½å…ˆè¿‡å®ƒå†æˆªæ–­ã€‚选股系统机器上 `pms_runtime_param` 表里没有 `PMS_PLAN_TIERS` 这一行,`param_store.get` 退回 `config/settings.py` çš„åˆå€¼"强传导",所以æŒä»“管ç†ç³»ç»Ÿåœ¨ä¸Šæ¸¸åºä¸‹ä»ç„¶åªå–强传导行。周报按 4ae6378 还原出æ¥çš„"生产åå•"会多出弱传导与无传导的行,与它真正交付的那份对ä¸ä¸Šï¼Œå››å‘¨å¤æ ¸é‚£ä¸€è¡Œè¯»æ•°å°±å¤±çœŸäº†ã€‚ + +修法(工作方案附录乙补了一段):`pms_roster` 从 `pms_runtime_param` 读 `PMS_PLAN_TIERS`(缺行退回"强传导",与æŒä»“管ç†ç³»ç»Ÿçš„åˆå€¼ä¸€è‡´ï¼›è¯»åˆ°ç©ºä¸²æŒ‰ä¸è¿‡æ»¤ï¼‰ï¼Œä¸¤ç§æ¨¡å¼éƒ½å…ˆæŒ‰å®ƒè¿‡æ»¤ï¼Œå†æŒ‰ `rank_mode` 定åºï¼Œä¸Šæ¸¸åºæŒ‰å次å‡åºã€æ—§åºæŒ‰åŽŸå§‹åˆ†é™åºã€‚把"过滤加定åº"抽æˆçº¯å‡½æ•°åР䏀例啿µ‹ï¼Œä¸è¿žåº“ã€‚ä¸€ä¸ªå°æäº¤ï¼Œ09-21 拉代ç ä¹‹å‰åšå®Œã€‚ + +**顺带核出的三件事实,写下æ¥å…å¾—å†çŒœã€‚** 一,æŒä»“管ç†ç³»ç»Ÿæœºå™¨ä¸Š `PMS_PLAN_TOP_N` 是五åï¼Œä¸æ˜¯æ–‡æ¡£é‡Œå¤šå¤„写的三å,与入池的 `POOL_TOP=50` 正好对上。二,å册快照按代ç åºè½åº“ï¼Œä¸æ˜¯å次åºï¼Œæ‰€ä»¥"å册å‰å忬¡é€’增"这样的读数无æ„义,09-24 的读数改æˆåœ¨ä¸€æ¬¡æ€§å®¹å™¨é‡Œè°ƒå€™é€‰é€‰æ‹©å‡½æ•°çœ‹è¾“出,命令在工作方案第六节。三,最近三天åå†Œä¸»æ¦œåªæœ‰å…­å三ã€ä¹åä¹ã€ä¹åå…«è¡Œï¼Œä¸æ˜¯ä¸‰ç™¾ã€‚原因查清了:æŒä»“管ç†ç³»ç»Ÿçš„è¿è¡Œå‚æ•° `PMS_PLAN_THEME_CAP` 在 08-13 被设æˆé›¶ï¼Œé›¶çš„å«ä¹‰æ˜¯ä¸å‘上游传主题é™é¢ã€ç”¨ä¸Šæ¸¸é»˜è®¤å€¼ï¼Œä¸Šæ¸¸é»˜è®¤æ¯ä¸»é¢˜äº”åªï¼Œæ‰€ä»¥å®ƒæ‹¿åˆ°çš„æ˜¯æ¯ä¸»é¢˜äº”åªåŽçš„å…­ååˆ°ä¸€ç™¾è¡Œã€‚è¿™æ˜¯æ—¢æœ‰è®¾ç½®ï¼Œä¸æ˜¯æœ¬æ¬¡çš„问题。但 09-22 起会å˜ï¼šè´¨åœ°è½´ä¸‹æ— ä¼ å¯¼è¡Œä¸å—上游é™é¢ï¼Œå®ƒä¼šæ‹¿åˆ°æŽ¥è¿‘三百行,多出æ¥çš„ç»å¤§å¤šæ•°æ˜¯æ— ä¼ å¯¼ã€åˆ¤ä»…展示的行,被它自己的按判决分æµå‰”æŽ‰ï¼Œå€™é€‰åªæ•°ä¸å—å½±å“,页é¢ä¸Šçš„"è€ƒè™‘åªæ•°"会跳一次,写进工作方案第å一节。 + +**一æ¡è¦æ‹æ¿ï¼ˆå·¥ä½œæ–¹æ¡ˆæ‹æ¿ç‚¹å…­ï¼‰ã€‚** æŒä»“管ç†ç³»ç»Ÿçš„æ¡£ä½ç™½åå•"强传导"是一é“硬闸:上游åºä¸‹å®ƒæ‹¿åˆ°çš„å‰äº”åæ˜¯"强传导行里的质地åº",被指å‘但åªç®—å¼±ä¼ å¯¼çš„å¥½å…¬å¸æ°¸è¿œè¿›ä¸æ¥ã€‚这与"传导é™ä¸ºé›·è¾¾é—¨ã€è¢«æŒ‡å‘å³å¯"ä¸ä¸€è‡´ï¼Œä¹Ÿä¸Žå…¥æ± ï¼ˆè¢«æŒ‡å‘å³å¯ï¼Œä¸çœ‹æ¡£ä½ï¼‰ä¸åŒæºã€‚建议 09-23 éšå·¥ä½œåŒ…乙上线时把è¿è¡Œå‚æ•° `PMS_PLAN_TIERS` 改æˆ"强传导,弱传导"ï¼Œé¡µé¢æ”¹ã€ä¸ç”¨ä»£ç ï¼Œå°è´¦è¡¥ä¸€è¡Œã€‚䏿”¹çš„è¯å››å‘¨å¤æ ¸è¦è¯´æ˜Žè¿™ä¸€å¤„差异。 +