Parcourir la source

chore: update graphify and mark batch outbound plan complete

Refresh knowledge graphs after storage facility batch outbound changes.

Co-authored-by: Cursor <cursoragent@cursor.com>
zlwu il y a 3 mois
Parent
commit
b105bd9b7d

+ 2 - 2
backend/graphify-out/.graphify_analysis.json

@@ -2519,9 +2519,9 @@
       "crud_storage_occupancy_rationale_178",
       "crud_storage_occupancy_rationale_200",
       "crud_storage_occupancy_rationale_285",
-      "crud_storage_occupancy_rationale_329",
+      "crud_storage_occupancy_rationale_330",
       "crud_storage_occupancy_rationale_43",
-      "crud_storage_occupancy_rationale_471",
+      "crud_storage_occupancy_rationale_472",
       "crud_workflow_rationale_1",
       "models_clinical_payment_bizpilotpayment",
       "models_clinical_payment_py",

+ 48 - 48
backend/graphify-out/.graphify_extract.json

@@ -10176,49 +10176,49 @@
       "label": "_refresh_slot_cache()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L328"
+      "source_location": "L329"
     },
     {
       "id": "crud_storage_occupancy_create_occupancy",
       "label": "create_occupancy()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L363"
+      "source_location": "L364"
     },
     {
       "id": "crud_storage_occupancy_batch_create_occupancies",
       "label": "batch_create_occupancies()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L398"
+      "source_location": "L399"
     },
     {
       "id": "crud_storage_occupancy_remove_occupancy",
       "label": "remove_occupancy()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L436"
+      "source_location": "L437"
     },
     {
       "id": "crud_storage_occupancy_remove_by_item",
       "label": "remove_by_item()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L464"
+      "source_location": "L465"
     },
     {
       "id": "crud_storage_occupancy_list_occupancies",
       "label": "list_occupancies()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L476"
+      "source_location": "L477"
     },
     {
       "id": "crud_storage_occupancy_list_occupancy_history",
       "label": "list_occupancy_history()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L511"
+      "source_location": "L512"
     },
     {
       "id": "crud_storage_occupancy_rationale_1",
@@ -10250,24 +10250,24 @@
     },
     {
       "id": "crud_storage_occupancy_rationale_285",
-      "label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u7269\u54c1\u6458\u8981\uff08\u540d\u79f0/\u7c7b\u578b\uff09\uff0c\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u3002",
+      "label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u5360\u7528 id \u4e0e\u7269\u54c1\u6458\u8981\uff08\u540d\u79f0/\u7c7b\u578b\uff09\uff0c\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u4e0e\u6279\u91cf\u51fa\u5e93\u3002",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L285"
     },
     {
-      "id": "crud_storage_occupancy_rationale_329",
+      "id": "crud_storage_occupancy_rationale_330",
       "label": "\u5237\u65b0 slot \u7684 occupied_count / last_item_type / last_stored_at / slot_status",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L329"
+      "source_location": "L330"
     },
     {
-      "id": "crud_storage_occupancy_rationale_471",
+      "id": "crud_storage_occupancy_rationale_472",
       "label": "\u6309\u7269\u54c1\u7c7b\u578b+ID\u51fa\u5e93\uff08\u7ec6\u80de\u4ea7\u54c1\u72b6\u6001\u53d8\u66f4\u65f6\u8c03\u7528\uff09",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L471"
+      "source_location": "L472"
     },
     {
       "id": "crud_qc_third_party_company_py",
@@ -59228,7 +59228,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L328",
+      "source_location": "L329",
       "weight": 1.0
     },
     {
@@ -59237,7 +59237,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L363",
+      "source_location": "L364",
       "weight": 1.0
     },
     {
@@ -59246,7 +59246,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L398",
+      "source_location": "L399",
       "weight": 1.0
     },
     {
@@ -59255,7 +59255,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L436",
+      "source_location": "L437",
       "weight": 1.0
     },
     {
@@ -59264,7 +59264,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L464",
+      "source_location": "L465",
       "weight": 1.0
     },
     {
@@ -59273,7 +59273,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L476",
+      "source_location": "L477",
       "weight": 1.0
     },
     {
@@ -59282,7 +59282,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L511",
+      "source_location": "L512",
       "weight": 1.0
     },
     {
@@ -59345,7 +59345,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L380",
+      "source_location": "L381",
       "weight": 1.0
     },
     {
@@ -59354,7 +59354,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L381",
+      "source_location": "L382",
       "weight": 1.0
     },
     {
@@ -59363,7 +59363,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L407",
+      "source_location": "L408",
       "weight": 1.0
     },
     {
@@ -59372,7 +59372,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L410",
+      "source_location": "L411",
       "weight": 1.0
     },
     {
@@ -59381,7 +59381,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L416",
+      "source_location": "L417",
       "weight": 1.0
     },
     {
@@ -59390,7 +59390,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L458",
+      "source_location": "L459",
       "weight": 1.0
     },
     {
@@ -59399,7 +59399,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L472",
+      "source_location": "L473",
       "weight": 1.0
     },
     {
@@ -59408,7 +59408,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L507",
+      "source_location": "L508",
       "weight": 1.0
     },
     {
@@ -59417,7 +59417,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L507",
+      "source_location": "L508",
       "weight": 1.0
     },
     {
@@ -59426,7 +59426,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L567",
+      "source_location": "L568",
       "weight": 1.0
     },
     {
@@ -59435,7 +59435,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L567",
+      "source_location": "L568",
       "weight": 1.0
     },
     {
@@ -59484,21 +59484,21 @@
       "weight": 1.0
     },
     {
-      "source": "crud_storage_occupancy_rationale_329",
+      "source": "crud_storage_occupancy_rationale_330",
       "target": "crud_storage_occupancy_refresh_slot_cache",
       "relation": "rationale_for",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L329",
+      "source_location": "L330",
       "weight": 1.0
     },
     {
-      "source": "crud_storage_occupancy_rationale_471",
+      "source": "crud_storage_occupancy_rationale_472",
       "target": "crud_storage_occupancy_remove_by_item",
       "relation": "rationale_for",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L471",
+      "source_location": "L472",
       "weight": 1.0
     },
     {
@@ -181533,7 +181533,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_329",
+      "source": "crud_storage_occupancy_rationale_330",
       "target": "models_models_bizcellproduct",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181542,7 +181542,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_471",
+      "source": "crud_storage_occupancy_rationale_472",
       "target": "models_models_bizcellproduct",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181596,7 +181596,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_329",
+      "source": "crud_storage_occupancy_rationale_330",
       "target": "models_models_bizstoragefacilityslot",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181605,7 +181605,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_471",
+      "source": "crud_storage_occupancy_rationale_472",
       "target": "models_models_bizstoragefacilityslot",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181659,7 +181659,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_329",
+      "source": "crud_storage_occupancy_rationale_330",
       "target": "models_models_bizstorageslotoccupancy",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181668,7 +181668,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_471",
+      "source": "crud_storage_occupancy_rationale_472",
       "target": "models_models_bizstorageslotoccupancy",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181722,7 +181722,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_329",
+      "source": "crud_storage_occupancy_rationale_330",
       "target": "models_models_bizproductionproducttype",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -181731,7 +181731,7 @@
       "weight": 0.8
     },
     {
-      "source": "crud_storage_occupancy_rationale_471",
+      "source": "crud_storage_occupancy_rationale_472",
       "target": "models_models_bizproductionproducttype",
       "relation": "uses",
       "confidence": "INFERRED",
@@ -248092,7 +248092,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L337",
+      "source_location": "L338",
       "weight": 1.0
     },
     {
@@ -248102,7 +248102,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L379",
+      "source_location": "L380",
       "weight": 1.0
     },
     {
@@ -248112,7 +248112,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L406",
+      "source_location": "L407",
       "weight": 1.0
     },
     {
@@ -248122,7 +248122,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L448",
+      "source_location": "L449",
       "weight": 1.0
     },
     {
@@ -248132,7 +248132,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L498",
+      "source_location": "L499",
       "weight": 1.0
     },
     {
@@ -248142,7 +248142,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L558",
+      "source_location": "L559",
       "weight": 1.0
     },
     {

+ 1 - 1
backend/graphify-out/GRAPH_REPORT.md

@@ -1,7 +1,7 @@
 # Graph Report - app  (2026-07-28)
 
 ## Corpus Check
-- Large corpus: 230 files · ~285,344 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
+- Large corpus: 230 files · ~285,349 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
 
 ## Summary
 - 4867 nodes · 26933 edges · 42 communities detected

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
backend/graphify-out/graph.html


+ 59 - 59
backend/graphify-out/graph.json

@@ -12670,7 +12670,7 @@
       "label": "_refresh_slot_cache()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L328",
+      "source_location": "L329",
       "id": "crud_storage_occupancy_refresh_slot_cache",
       "community": 8,
       "norm_label": "_refresh_slot_cache()"
@@ -12679,7 +12679,7 @@
       "label": "create_occupancy()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L363",
+      "source_location": "L364",
       "id": "crud_storage_occupancy_create_occupancy",
       "community": 8,
       "norm_label": "create_occupancy()"
@@ -12688,7 +12688,7 @@
       "label": "batch_create_occupancies()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L398",
+      "source_location": "L399",
       "id": "crud_storage_occupancy_batch_create_occupancies",
       "community": 8,
       "norm_label": "batch_create_occupancies()"
@@ -12697,7 +12697,7 @@
       "label": "remove_occupancy()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L436",
+      "source_location": "L437",
       "id": "crud_storage_occupancy_remove_occupancy",
       "community": 8,
       "norm_label": "remove_occupancy()"
@@ -12706,7 +12706,7 @@
       "label": "remove_by_item()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L464",
+      "source_location": "L465",
       "id": "crud_storage_occupancy_remove_by_item",
       "community": 8,
       "norm_label": "remove_by_item()"
@@ -12715,7 +12715,7 @@
       "label": "list_occupancies()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L476",
+      "source_location": "L477",
       "id": "crud_storage_occupancy_list_occupancies",
       "community": 8,
       "norm_label": "list_occupancies()"
@@ -12724,7 +12724,7 @@
       "label": "list_occupancy_history()",
       "file_type": "code",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L511",
+      "source_location": "L512",
       "id": "crud_storage_occupancy_list_occupancy_history",
       "community": 8,
       "norm_label": "list_occupancy_history()"
@@ -12766,20 +12766,20 @@
       "norm_label": "\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u4e13\u7528:\u4ec5\u6279\u91cf\u53d6 id/\u7f16\u7801/\u540d\u79f0/\u7c7b\u578b\u540d/\u6279\u6b21\u53f7(2 \u6b21\u67e5\u8be2)\u3002"
     },
     {
-      "label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u7269\u54c1\u6458\u8981\uff08\u540d\u79f0/\u7c7b\u578b\uff09\uff0c\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u3002",
+      "label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u5360\u7528 id \u4e0e\u7269\u54c1\u6458\u8981\uff08\u540d\u79f0/\u7c7b\u578b\uff09\uff0c\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u4e0e\u6279\u91cf\u51fa\u5e93\u3002",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L285",
       "id": "crud_storage_occupancy_rationale_285",
       "community": 3,
-      "norm_label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u7269\u54c1\u6458\u8981(\u540d\u79f0/\u7c7b\u578b),\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u3002"
+      "norm_label": "\u4e3a\u5360\u7528\u683c\u9644\u5e26\u5728\u5e93\u5360\u7528 id \u4e0e\u7269\u54c1\u6458\u8981(\u540d\u79f0/\u7c7b\u578b),\u4f9b\u5e93\u4f4d\u8d27\u67b6\u5c55\u793a\u4e0e\u6279\u91cf\u51fa\u5e93\u3002"
     },
     {
       "label": "\u5237\u65b0 slot \u7684 occupied_count / last_item_type / last_stored_at / slot_status",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L329",
-      "id": "crud_storage_occupancy_rationale_329",
+      "source_location": "L330",
+      "id": "crud_storage_occupancy_rationale_330",
       "community": 3,
       "norm_label": "\u5237\u65b0 slot \u7684 occupied_count / last_item_type / last_stored_at / slot_status"
     },
@@ -12787,8 +12787,8 @@
       "label": "\u6309\u7269\u54c1\u7c7b\u578b+ID\u51fa\u5e93\uff08\u7ec6\u80de\u4ea7\u54c1\u72b6\u6001\u53d8\u66f4\u65f6\u8c03\u7528\uff09",
       "file_type": "rationale",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L471",
-      "id": "crud_storage_occupancy_rationale_471",
+      "source_location": "L472",
+      "id": "crud_storage_occupancy_rationale_472",
       "community": 3,
       "norm_label": "\u6309\u7269\u54c1\u7c7b\u578b+id\u51fa\u5e93(\u7ec6\u80de\u4ea7\u54c1\u72b6\u6001\u53d8\u66f4\u65f6\u8c03\u7528)"
     },
@@ -183818,10 +183818,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_329",
+      "_src": "crud_storage_occupancy_rationale_330",
       "_tgt": "models_models_bizstoragefacilityslot",
       "source": "models_models_bizstoragefacilityslot",
-      "target": "crud_storage_occupancy_rationale_329",
+      "target": "crud_storage_occupancy_rationale_330",
       "confidence_score": 0.5
     },
     {
@@ -183830,10 +183830,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_471",
+      "_src": "crud_storage_occupancy_rationale_472",
       "_tgt": "models_models_bizstoragefacilityslot",
       "source": "models_models_bizstoragefacilityslot",
-      "target": "crud_storage_occupancy_rationale_471",
+      "target": "crud_storage_occupancy_rationale_472",
       "confidence_score": 0.5
     },
     {
@@ -184610,10 +184610,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_329",
+      "_src": "crud_storage_occupancy_rationale_330",
       "_tgt": "models_models_bizstorageslotoccupancy",
       "source": "models_models_bizstorageslotoccupancy",
-      "target": "crud_storage_occupancy_rationale_329",
+      "target": "crud_storage_occupancy_rationale_330",
       "confidence_score": 0.5
     },
     {
@@ -184622,10 +184622,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_471",
+      "_src": "crud_storage_occupancy_rationale_472",
       "_tgt": "models_models_bizstorageslotoccupancy",
       "source": "models_models_bizstorageslotoccupancy",
-      "target": "crud_storage_occupancy_rationale_471",
+      "target": "crud_storage_occupancy_rationale_472",
       "confidence_score": 0.5
     },
     {
@@ -185942,10 +185942,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L201",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_329",
+      "_src": "crud_storage_occupancy_rationale_330",
       "_tgt": "models_models_bizproductionproducttype",
       "source": "models_models_bizproductionproducttype",
-      "target": "crud_storage_occupancy_rationale_329",
+      "target": "crud_storage_occupancy_rationale_330",
       "confidence_score": 0.5
     },
     {
@@ -185954,10 +185954,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L201",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_471",
+      "_src": "crud_storage_occupancy_rationale_472",
       "_tgt": "models_models_bizproductionproducttype",
       "source": "models_models_bizproductionproducttype",
-      "target": "crud_storage_occupancy_rationale_471",
+      "target": "crud_storage_occupancy_rationale_472",
       "confidence_score": 0.5
     },
     {
@@ -198818,10 +198818,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_329",
+      "_src": "crud_storage_occupancy_rationale_330",
       "_tgt": "models_models_bizcellproduct",
       "source": "models_models_bizcellproduct",
-      "target": "crud_storage_occupancy_rationale_329",
+      "target": "crud_storage_occupancy_rationale_330",
       "confidence_score": 0.5
     },
     {
@@ -198830,10 +198830,10 @@
       "source_file": "crud/storage_occupancy.py",
       "source_location": "L11",
       "weight": 0.8,
-      "_src": "crud_storage_occupancy_rationale_471",
+      "_src": "crud_storage_occupancy_rationale_472",
       "_tgt": "models_models_bizcellproduct",
       "source": "models_models_bizcellproduct",
-      "target": "crud_storage_occupancy_rationale_471",
+      "target": "crud_storage_occupancy_rationale_472",
       "confidence_score": 0.5
     },
     {
@@ -262812,7 +262812,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L328",
+      "source_location": "L329",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_refresh_slot_cache",
@@ -262824,7 +262824,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L363",
+      "source_location": "L364",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_create_occupancy",
@@ -262836,7 +262836,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L398",
+      "source_location": "L399",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_batch_create_occupancies",
@@ -262848,7 +262848,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L436",
+      "source_location": "L437",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_remove_occupancy",
@@ -262860,7 +262860,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L464",
+      "source_location": "L465",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_remove_by_item",
@@ -262872,7 +262872,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L476",
+      "source_location": "L477",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_list_occupancies",
@@ -262884,7 +262884,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L511",
+      "source_location": "L512",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_py",
       "_tgt": "crud_storage_occupancy_list_occupancy_history",
@@ -262908,7 +262908,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L407",
+      "source_location": "L408",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_batch_create_occupancies",
       "_tgt": "crud_storage_occupancy_assert_batch_slots_unique",
@@ -262956,7 +262956,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L380",
+      "source_location": "L381",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_create_occupancy",
       "_tgt": "crud_storage_occupancy_assert_slot_vacant",
@@ -262968,7 +262968,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L410",
+      "source_location": "L411",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_batch_create_occupancies",
       "_tgt": "crud_storage_occupancy_assert_slot_vacant",
@@ -263088,7 +263088,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L381",
+      "source_location": "L382",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_create_occupancy",
       "_tgt": "crud_storage_occupancy_add_stored_occupancy_no_commit",
@@ -263100,7 +263100,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L416",
+      "source_location": "L417",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_batch_create_occupancies",
       "_tgt": "crud_storage_occupancy_add_stored_occupancy_no_commit",
@@ -263184,7 +263184,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L472",
+      "source_location": "L473",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_remove_by_item",
       "_tgt": "crud_storage_occupancy_remove_by_item_no_commit",
@@ -263232,7 +263232,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L507",
+      "source_location": "L508",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancies",
       "_tgt": "crud_storage_occupancy_row_to_dict",
@@ -263244,7 +263244,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L567",
+      "source_location": "L568",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancy_history",
       "_tgt": "crud_storage_occupancy_row_to_dict",
@@ -263364,7 +263364,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L507",
+      "source_location": "L508",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancies",
       "_tgt": "crud_storage_occupancy_enrich_occupancy_items",
@@ -263376,7 +263376,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L567",
+      "source_location": "L568",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancy_history",
       "_tgt": "crud_storage_occupancy_enrich_occupancy_items",
@@ -263448,7 +263448,7 @@
       "relation": "calls",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L458",
+      "source_location": "L459",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_remove_occupancy",
       "_tgt": "crud_storage_occupancy_refresh_slot_cache",
@@ -263460,12 +263460,12 @@
       "relation": "rationale_for",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L329",
+      "source_location": "L330",
       "weight": 1.0,
-      "_src": "crud_storage_occupancy_rationale_329",
+      "_src": "crud_storage_occupancy_rationale_330",
       "_tgt": "crud_storage_occupancy_refresh_slot_cache",
       "source": "crud_storage_occupancy_refresh_slot_cache",
-      "target": "crud_storage_occupancy_rationale_329",
+      "target": "crud_storage_occupancy_rationale_330",
       "confidence_score": 1.0
     },
     {
@@ -263473,7 +263473,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L337",
+      "source_location": "L338",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_refresh_slot_cache",
       "_tgt": "crud_base_crudbase_count",
@@ -263509,7 +263509,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L379",
+      "source_location": "L380",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_create_occupancy",
       "_tgt": "valueerror",
@@ -263521,7 +263521,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L406",
+      "source_location": "L407",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_batch_create_occupancies",
       "_tgt": "crud_base_crudbase_get",
@@ -263533,7 +263533,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L448",
+      "source_location": "L449",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_remove_occupancy",
       "_tgt": "valueerror",
@@ -263544,12 +263544,12 @@
       "relation": "rationale_for",
       "confidence": "EXTRACTED",
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L471",
+      "source_location": "L472",
       "weight": 1.0,
-      "_src": "crud_storage_occupancy_rationale_471",
+      "_src": "crud_storage_occupancy_rationale_472",
       "_tgt": "crud_storage_occupancy_remove_by_item",
       "source": "crud_storage_occupancy_remove_by_item",
-      "target": "crud_storage_occupancy_rationale_471",
+      "target": "crud_storage_occupancy_rationale_472",
       "confidence_score": 1.0
     },
     {
@@ -263593,7 +263593,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L498",
+      "source_location": "L499",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancies",
       "_tgt": "crud_base_crudbase_count",
@@ -263605,7 +263605,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "crud/storage_occupancy.py",
-      "source_location": "L558",
+      "source_location": "L559",
       "weight": 1.0,
       "_src": "crud_storage_occupancy_list_occupancy_history",
       "_tgt": "crud_base_crudbase_count",

+ 1 - 1
backend/graphify-out/manifest.json

@@ -91,7 +91,7 @@
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_work_order.py": 1785209206.5290542,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/material.py": 1781522283.6438622,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/dict_type.py": 1779265621.5212462,
-  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_occupancy.py": 1785214676.375756,
+  "/Users/wuzilong/work/00code/zkxw/backend/app/crud/storage_occupancy.py": 1785237078.9580858,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/qc_third_party_company.py": 1781415374.1019006,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/production_material.py": 1781344099.4832826,
   "/Users/wuzilong/work/00code/zkxw/backend/app/crud/material_stock_log.py": 1779281903.0942652,

+ 15 - 15
docs/superpowers/plans/2026-07-28-storage-facility-batch-outbound.md

@@ -1,6 +1,6 @@
 # 库位管理货架批量出库 Implementation Plan
 
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [x]`) syntax for tracking.
 
 **Goal:** 在库位管理货架上对占用格常驻勾选,工具栏「出库已选」串行调用现有出库接口完成批量出库。
 
@@ -26,7 +26,7 @@
 **Files:**
 - Modify: `backend/app/crud/storage_occupancy.py`(`enrich_slots_with_stored_cell_products`,约 306–325 行)
 
-- [ ] **Step 1: 写入 storedOccupancyId**
+- [x] **Step 1: 写入 storedOccupancyId**
 
 在循环内、设置 `storedItemType` 之前(或紧挨其后)增加:
 
@@ -50,7 +50,7 @@ for slot in slots:
 
 更新函数 docstring 为:「为占用格附带在库占用 id 与物品摘要(名称/类型),供库位货架展示与批量出库。」
 
-- [ ] **Step 2: 语法校验**
+- [x] **Step 2: 语法校验**
 
 Run:
 
@@ -60,7 +60,7 @@ cd backend && source venv/bin/activate && python -c "from app.crud.storage_occup
 
 Expected: `ok`
 
-- [ ] **Step 3: Commit**
+- [x] **Step 3: Commit**
 
 ```bash
 git add backend/app/crud/storage_occupancy.py
@@ -79,7 +79,7 @@ EOF
 **Files:**
 - Modify: `web-admin/src/views/operations/storage-facility/index.vue`
 
-- [ ] **Step 1: 模板 — 改造 `.storage-toolbar`**
+- [x] **Step 1: 模板 — 改造 `.storage-toolbar`**
 
 将现有工具栏(约 123–139 行)改为(保留「批量生成格子 / 清空格子」,并在前插入已选与出库):
 
@@ -153,7 +153,7 @@ EOF
 
 (无格子时才显示「批量生成格子」;有格子时不显示该按钮——与当前「有格子则禁用」等价且更干净。)
 
-- [ ] **Step 2: script — 选择 Map 与辅助函数**
+- [x] **Step 2: script — 选择 Map 与辅助函数**
 
 在 script 中、`slotFilterKeyword` 附近增加:
 
@@ -226,7 +226,7 @@ function pruneOutboundSelection(slots: any[]) {
 }
 ```
 
-- [ ] **Step 3: script — handleBatchOutbound**
+- [x] **Step 3: script — handleBatchOutbound**
 
 ```ts
 const handleBatchOutbound = async () => {
@@ -290,7 +290,7 @@ const handleBatchOutbound = async () => {
 
 与单条出库一致优先「错误已全局处理」+ 补充已成功数量提示。
 
-- [ ] **Step 4: 生命周期 — 清空选择**
+- [x] **Step 4: 生命周期 — 清空选择**
 
 在 `handleNodeClick` 开头调用 `clearOutboundSelection()`,并保留现有 `slotFilterKeyword` 清空逻辑。
 
@@ -306,7 +306,7 @@ next.delete(currentSlot.value?.id)
 selectedOutboundMap.value = next
 ```
 
-- [ ] **Step 5: 筛选时 prune 仅保留当前可见占用格**
+- [x] **Step 5: 筛选时 prune 仅保留当前可见占用格**
 
 页面已有 `slotMatchesFilter` 与 `filteredSlotList`。在其旁增加 watch:
 
@@ -333,7 +333,7 @@ watch(
 **Files:**
 - Modify: `web-admin/src/views/operations/storage-facility/index.vue`
 
-- [ ] **Step 1: 模板 — shelf-cell 增加勾选框与 selected class**
+- [x] **Step 1: 模板 — shelf-cell 增加勾选框与 selected class**
 
 将格子节点改为:
 
@@ -367,7 +367,7 @@ watch(
 </div>
 ```
 
-- [ ] **Step 2: SCSS — 勾选框与选中态**
+- [x] **Step 2: SCSS — 勾选框与选中态**
 
 在 `.shelf-cell` 样式块附近增加:
 
@@ -434,7 +434,7 @@ watch(
 
 注意:删除按钮在右上,勾选在左上,互不遮挡。
 
-- [ ] **Step 3: 清空格子按钮补图标(若缺失)**
+- [x] **Step 3: 清空格子按钮补图标(若缺失)**
 
 若「清空格子」尚无 `el-icon`,按 ui-conventions 补一个合适图标(如 `Delete`),并在 script 中从 `@element-plus/icons-vue` 导入。本任务若只改批量出库相关,至少保证「出库已选」带 `Top` 图标(已导入)。
 
@@ -444,7 +444,7 @@ watch(
 
 **Files:** 无新增
 
-- [ ] **Step 1: 本地验收清单**
+- [x] **Step 1: 本地验收清单**
 
 在 `/#/production-group/production/storage-facility`:
 
@@ -455,7 +455,7 @@ watch(
 5. 切换左侧树节点:选择清空  
 6. (可选)断网或造失败:已成功条数提示 + 后续中止  
 
-- [ ] **Step 2: 更新知识图谱**
+- [x] **Step 2: 更新知识图谱**
 
 ```bash
 ./scripts/update-graph.sh backend
@@ -464,7 +464,7 @@ watch(
 ./scripts/update-graph.sh all
 ```
 
-- [ ] **Step 3: Commit 前端**
+- [x] **Step 3: Commit 前端**
 
 ```bash
 git add web-admin/src/views/operations/storage-facility/index.vue

+ 5 - 5
web-admin/graphify-out/.graphify_extract.json

@@ -15188,14 +15188,14 @@
       "label": "if()",
       "file_type": "code",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1342"
+      "source_location": "L1486"
     },
     {
       "id": "storage_facility_index_push",
       "label": "push()",
       "file_type": "code",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1345"
+      "source_location": "L1489"
     },
     {
       "id": "views_operations_exhibition_appointment_index_vue",
@@ -48068,7 +48068,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1342",
+      "source_location": "L1486",
       "weight": 1.0
     },
     {
@@ -48077,7 +48077,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1345",
+      "source_location": "L1489",
       "weight": 1.0
     },
     {
@@ -69642,7 +69642,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1343",
+      "source_location": "L1487",
       "weight": 1.0
     },
     {

+ 1 - 1
web-admin/graphify-out/GRAPH_REPORT.md

@@ -1,7 +1,7 @@
 # Graph Report - src  (2026-07-28)
 
 ## Corpus Check
-- Large corpus: 898 files · ~601,085 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
+- Large corpus: 898 files · ~601,587 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only.
 
 ## Summary
 - 3141 nodes · 4411 edges · 66 communities detected

+ 5 - 5
web-admin/graphify-out/graph.json

@@ -19528,7 +19528,7 @@
       "label": "if()",
       "file_type": "code",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1342",
+      "source_location": "L1486",
       "id": "storage_facility_index_if",
       "community": 10,
       "norm_label": "if()"
@@ -19537,7 +19537,7 @@
       "label": "push()",
       "file_type": "code",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1345",
+      "source_location": "L1489",
       "id": "storage_facility_index_push",
       "community": 1,
       "norm_label": "push()"
@@ -66990,7 +66990,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1342",
+      "source_location": "L1486",
       "weight": 1.0,
       "_src": "views_operations_storage_facility_index_vue",
       "_tgt": "storage_facility_index_if",
@@ -67002,7 +67002,7 @@
       "relation": "contains",
       "confidence": "EXTRACTED",
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1345",
+      "source_location": "L1489",
       "weight": 1.0,
       "_src": "views_operations_storage_facility_index_vue",
       "_tgt": "storage_facility_index_push",
@@ -67015,7 +67015,7 @@
       "confidence": "INFERRED",
       "confidence_score": 0.8,
       "source_file": "views/operations/storage-facility/index.vue",
-      "source_location": "L1343",
+      "source_location": "L1487",
       "weight": 1.0,
       "_src": "storage_facility_index_if",
       "_tgt": "process_processroutetab_set",

+ 3 - 3
web-admin/graphify-out/manifest.json

@@ -17,8 +17,8 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/common/index.ts": 1781272556.3597305,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/directive/directive.d.ts": 1781272556.3601494,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/api/api.d.ts": 1781272556.3606477,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1785235074.2176795,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1785212972.879021,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/components.d.ts": 1785235766.0868216,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/import/auto-imports.d.ts": 1785235703.6756494,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/store/index.ts": 1781272556.364766,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/types/router/index.ts": 1782394569.8806834,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/composables/useAttachmentActions.ts": 1783921717.4015942,
@@ -379,7 +379,7 @@
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/outside/Iframe.vue": 1782893853.8888595,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/demo/index.vue": 1782893853.8571184,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/clean-room/index.vue": 1783326448.9116178,
-  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue": 1785215025.281313,
+  "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/storage-facility/index.vue": 1785237299.3293138,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/operations/exhibition-appointment/index.vue": 1783326448.913004,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/audit/index.vue": 1785207506.5680747,
   "/Users/wuzilong/work/00code/zkxw/web-admin/src/views/research-donation/sample-info/index.vue": 1782893854.018205,

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff