The merge keeps dev/koko patrol-delete asset fallback behavior while accepting the latest master feature work. Conflicts were limited to ignore rules, local environment/config artifacts, tracked pycache binaries, and the Flask main blueprint.
Constraint: master and dev/koko both edited app/blueprints/main.py around brand and asset serving
Rejected: Drop dev/koko asset fallback logic | patrol delete and rebuilt Vite assets still need hashed asset resolution across app/new_web_source locations
Confidence: medium
Scope-risk: broad
Directive: app/.env remains a tracked local-config file in this repository; do not print or normalize secrets during conflict handling
Tested: uv run python -m py_compile blueprints\\main.py amazon\\base.py amazon\\main.py
Tested: uv run --group dev pytest tests\\test_amazon_base.py tests\\test_patrol_delete.py
Not-tested: Full backend-java/frontend-vue test suites
The patrol-delete flow now waits for country and listing-status controls before acting, uses the dedicated PatrolDeleteTask entry point, and includes the browser helper scripts required by the bulk-delete path. Tests cover delayed dropdown readiness, payload rejection/retry behavior, complete-draft normalization, filtered bulk deletion, and asset fallback lookup.
Constraint: Amazon listing UI exposes status controls through dynamic KAT components and delayed option rendering
Rejected: Keep row-by-row delete flow | bulk selection is the current implemented path and is covered by the added helper scripts
Confidence: high
Scope-risk: moderate
Directive: Do not remove the patrol_delete JS helper files without checking app/amazon/patrol_delete.py script loading
Tested: uv run --group dev pytest tests\\test_amazon_base.py tests\\test_patrol_delete.py
Tested: uv run python -m py_compile amazon\\base.py amazon\\main.py blueprints\\main.py
Not-tested: Real Amazon Seller Central browser session
new file: assets/_plugin-vue_export-helper-xvHHTGU_.css
new file: assets/convert-1dkFPbKa.css
new file: assets/convert-6b0yq-M0.css
new file: assets/convert-BxkpMHO9.css
new file: assets/convert-D4Yv2oRy.css
new file: assets/convert-DwbQug2y.css
modified: assets/convert.js
new file: assets/dedupe-B0eqpVpj.css
new file: assets/dedupe-BHE_BCAJ.css
new file: assets/dedupe-Day_nGxq.css
new file: assets/dedupe-DzFvTfoj.css
new file: assets/dedupe-rhGu1E8E.css
modified: assets/dedupe.js
new file: assets/el-alert-Ct0RpqUD.css
new file: assets/pywebview-B6ZNXusn.css
new file: assets/pywebview-BRrok0pS.js
new file: assets/pywebview-BnpJyyGZ.js
new file: assets/pywebview-CGwF8TuM.js
new file: assets/pywebview-Chz98E9c.css
new file: assets/pywebview-D-PKWjUg.js
new file: assets/pywebview-DVgP2-kW.js
new file: assets/pywebview-IqgMfeBe.css
new file: assets/pywebview-Rm5Hhqpf.js
new file: assets/pywebview-leZCedEt.js
new file: assets/split-BsJfbBqn.css
new file: assets/split-DAa_Usoh.css
new file: assets/split-DidKJ84l.css
new file: assets/split-R_8V5xgh.css
new file: assets/split-_O6NHqDj.css
modified: assets/split.js
modified: blueprints/__pycache__/brand.cpython-311.pyc
modified: blueprints/__pycache__/brand.cpython-39.pyc
modified: blueprints/brand.py
modified: config.py
modified: main.py
modified: new_web_source/convert.html
modified: new_web_source/dedupe.html
modified: new_web_source/split.html
new file: app/blueprints/__pycache__/__init__.cpython-311.pyc
new file: app/blueprints/__pycache__/__init__.cpython-39.pyc
new file: app/blueprints/__pycache__/admin.cpython-311.pyc
new file: app/blueprints/__pycache__/admin.cpython-39.pyc
new file: app/blueprints/__pycache__/auth.cpython-311.pyc
new file: app/blueprints/__pycache__/auth.cpython-39.pyc
new file: app/blueprints/__pycache__/brand.cpython-311.pyc
new file: app/blueprints/__pycache__/brand.cpython-39.pyc
new file: app/blueprints/__pycache__/image.cpython-311.pyc
new file: app/blueprints/__pycache__/image.cpython-39.pyc
new file: app/blueprints/__pycache__/main.cpython-311.pyc
new file: app/blueprints/__pycache__/main.cpython-39.pyc
new file: app/blueprints/admin.py
new file: app/blueprints/auth.py
new file: app/blueprints/brand.py
new file: app/blueprints/image.py
new file: app/blueprints/main.py
new file: app/brand_spider/__pycache__/main.cpython-39.pyc
new file: app/brand_spider/__pycache__/web_dec.cpython-39.pyc
new file: app/brand_spider/main.py
new file: app/brand_spider/web_dec.py
new file: app/static/bg.jpg
new file: "app/static/\345\223\201\347\211\214\346\226\207\346\241\243\346\240\274\345\274\217_\346\250\241\346\235\277.xlsx"
new file: "app/static/\346\250\241\346\235\2772-\344\273\245\346\226\207\344\273\266\345\244\271\346\226\271\345\274\217\344\270\212\344\274\240.zip"
new file: app/tool/.device_id
new file: app/tool/__pycache__/devices.cpython-311.pyc
new file: app/tool/__pycache__/devices.cpython-39.pyc
new file: app/tool/devices.py