Master still tracked a small set of generated __pycache__ artifacts after merging dev/koko. The ignore rules already match dev/koko, so this commit only removes the remaining bytecode files from the Git index while leaving local files on disk.
Constraint: dev/koko .gitignore already contains recursive __pycache__ ignore coverage
Rejected: Delete local cache directories | repository tracking cleanup only requires --cached removal
Confidence: high
Scope-risk: narrow
Tested: git ls-files shows no remaining paths containing __pycache__/
Not-tested: Application runtime; generated bytecode tracking only
Master still tracked a small set of generated __pycache__ artifacts after merging dev/koko. The ignore rules already match dev/koko, so this commit only removes the remaining bytecode files from the Git index while leaving local files on disk.
Constraint: dev/koko .gitignore already contains recursive __pycache__ ignore coverage
Rejected: Delete local cache directories | repository tracking cleanup only requires --cached removal
Confidence: high
Scope-risk: narrow
Tested: git ls-files shows no remaining paths containing __pycache__/
Not-tested: Application runtime; generated bytecode tracking only
Conflict resolution kept master-side changes for non-patrol-delete files as requested. No app/amazon/patrol_delete.py conflict was present. Existing dev/koko assets were retained so /assets resources required by new_web_source pages resolve in the Flask app.
Constraint: User requested authentication-requiring git operations be reported as commands only
Rejected: Rework non-conflicting dev/koko changes during merge | scope was conflict resolution, not feature review
Confidence: high
Scope-risk: moderate
Tested: uv run python -c Flask test client returned 200 for /new_web_source/patrol-delete.html, /assets/patrol-delete.js, /assets/pywebview-C66x_2Dh.js
Tested: uv run python -m py_compile amazon\\patrol_delete.py amazon\\detail_spider.py amazon\\price_match.py main.py
Tested: uv run --group dev pytest tests\\test_patrol_delete.py tests\\test_amazon_base.py
Not-tested: authenticated Git push/pull; Java backend build
Conflict resolution kept master-side changes for non-patrol-delete files as requested. No app/amazon/patrol_delete.py conflict was present. Existing dev/koko assets were retained so /assets resources required by new_web_source pages resolve in the Flask app.
Constraint: User requested authentication-requiring git operations be reported as commands only
Rejected: Rework non-conflicting dev/koko changes during merge | scope was conflict resolution, not feature review
Confidence: high
Scope-risk: moderate
Tested: uv run python -c Flask test client returned 200 for /new_web_source/patrol-delete.html, /assets/patrol-delete.js, /assets/pywebview-C66x_2Dh.js
Tested: uv run python -m py_compile amazon\\patrol_delete.py amazon\\detail_spider.py amazon\\price_match.py main.py
Tested: uv run --group dev pytest tests\\test_patrol_delete.py tests\\test_amazon_base.py
Not-tested: authenticated Git push/pull; Java backend build
new file: assets/_plugin-vue_export-helper-xvHHTGU_.css
new file: assets/appearance-patent-BNTrbLJh.css
new file: assets/appearance-patent-BPCrG75P.css
new file: assets/appearance-patent.js
new file: assets/brand-1nUVsWrm.js
new file: assets/brand-5-W0Wonr.js
new file: assets/brand-BATjYfEL.js
new file: assets/brand-BZije8D7.js
new file: assets/brand-C0Q5LZ0P.js
new file: assets/brand-CFZZtTv8.js
new file: assets/brand-CKgrwtni.js
new file: assets/brand-CRmRvyGD.js
new file: assets/brand-CXHemZwJ.js
new file: assets/brand-DBpLCgAF.js
new file: assets/brand-DRn3N4FA.js
new file: assets/brand-DZ5_PGnw.js
new file: assets/brand-DysFlQbZ.js
new file: assets/brand-UU-ckLq6.js
new file: assets/convert-1dkFPbKa.css
new file: assets/convert-6b0yq-M0.css
new file: assets/convert-7wWJ02Tw.css
new file: assets/convert-BKSNvX8i.css
new file: assets/convert-BxkpMHO9.css
new file: assets/convert-CQ22EBpm.css
new file: assets/convert-Cfr3mUjs.css
new file: assets/convert-D4Yv2oRy.css
new file: assets/convert-DwbQug2y.css
new file: assets/dedupe-B0eqpVpj.css
new file: assets/dedupe-BHE_BCAJ.css
new file: assets/dedupe-BpNHwt51.css
new file: assets/dedupe-CS18ls2z.css
new file: assets/dedupe-DNlVfFj-.css
new file: assets/dedupe-Day_nGxq.css
new file: assets/dedupe-DyzjKbsT.css
new file: assets/dedupe-DzFvTfoj.css
new file: assets/dedupe-rhGu1E8E.css
new file: assets/delete-brand-BNvh4ru4.css
new file: assets/delete-brand-BP3XWKAC.css
new file: assets/delete-brand-BRIDBaoM.css
new file: assets/delete-brand-BcZomrN3.css
new file: assets/delete-brand-BgPrpPsj.css
new file: assets/delete-brand-ByeMdpEk.css
new file: assets/delete-brand-C-Rj3NMH.css
new file: assets/delete-brand-CDZTH98q.css
new file: assets/delete-brand-CS44Bk-y.css
new file: assets/delete-brand-CWLpe7lu.css
new file: assets/delete-brand-CdxGWtvK.css
new file: assets/delete-brand-Chu8awlt.css
new file: assets/delete-brand-CndjrFFS.css
new file: assets/delete-brand-CpNTe9WM.css
new file: assets/delete-brand-D7t16Ukk.css
new file: assets/delete-brand-DE0hLEak.css
new file: assets/delete-brand-DLyg-H8J.css
new file: assets/delete-brand-DO6pdlC3.css
new file: assets/delete-brand-DXSeQxXc.css
new file: assets/delete-brand-DZ6zYt8o.css
new file: assets/delete-brand-DfRLfrtm.css
new file: assets/delete-brand-Dl7T0pmm.css
new file: assets/delete-brand-Dt_MS9as.css
new file: assets/delete-brand-DvND7vBL.css
new file: assets/delete-brand-_jGFWTAn.css
new file: assets/el-alert-Ct0RpqUD.css
new file: assets/el-input-CezJelDw.css
new file: assets/el-input-xaztPnzw.css
new file: assets/el-table-column-Cy4YJvw0.css
new file: assets/listingFilters-B6-M_FNM.js
new file: assets/listingFilters-BmlAzw7M.css
new file: assets/listingFilters-BpGOU_pJ.js
new file: assets/listingFilters-CK58rX4v.css
new file: assets/patrol-delete-BPu1AAPM.css
new file: assets/patrol-delete-BctopIU4.css
new file: assets/patrol-delete-CSekhzSS.css
new file: assets/patrol-delete-DIvFZUTh.css
new file: assets/patrol-delete.js
new file: assets/price-track-1SjcUfP4.css
new file: assets/price-track-85NbckiJ.css
new file: assets/price-track-B5FVfJb_.css
new file: assets/price-track-BO5PtL0W.css
new file: assets/price-track-BccJT4Qr.css
new file: assets/price-track-BlSD-0un.css
new file: assets/price-track-BlVVl2eV.css
new file: assets/price-track-BwgEuRxe.css
new file: assets/price-track-CWQD_A7D.css
new file: assets/price-track-DNTcdRH8.css
new file: assets/price-track-Dv4EZPhf.css
new file: assets/price-track-Ji5JAoeR.css
new file: assets/price-track-RLJUgMl_.css
new file: assets/price-track-z8RU_FlW.css
new file: assets/price-track.js
new file: assets/product-risk-1G_ztqNY.css
new file: assets/product-risk-A5bhfaTH.css
new file: assets/product-risk-BBMcuGAw.css
new file: assets/product-risk-C3Yn2wAL.css
new file: assets/product-risk-CG-1Iq4P.css
new file: assets/product-risk-COeM91v5.css
new file: assets/product-risk-ClWs7d57.css
new file: assets/product-risk-CtpNfape.css
new file: assets/product-risk-DBsBE_mg.css
new file: assets/product-risk-DRYaWmI2.css
new file: assets/product-risk-Db49F4J5.css
new file: assets/product-risk-DoO8ZHM0.css
new file: assets/product-risk-DpSMKBCA.css
new file: assets/product-risk-DqFPFWEv.css
new file: assets/product-risk-cfL3Ch5-.css
new file: assets/product-risk-eXMv239F.css
new file: assets/product-risk-un2cxu--.css
new file: assets/product-risk.js
new file: assets/pywebview-3PePjYSu.js
new file: assets/pywebview-8G_9KMXd.css
new file: assets/pywebview-9YBa--7x.js
new file: assets/pywebview-B6ZNXusn.css
new file: assets/pywebview-BCPdlDdb.js
new file: assets/pywebview-BLoeiUcF.css
new file: assets/pywebview-BRrok0pS.js
new file: assets/pywebview-BT0f6KST.css
new file: assets/pywebview-BbIq-QPS.css
new file: assets/pywebview-Bc09DixN.js
new file: assets/pywebview-Bl6M97uH.js
new file: assets/pywebview-BnpJyyGZ.js
new file: assets/pywebview-Bt854mYs.js
new file: assets/pywebview-C5RGB8QW.css
new file: assets/pywebview-C66x_2Dh.js
new file: assets/pywebview-C8Bik-Sc.js
new file: assets/pywebview-CGwF8TuM.js
new file: assets/pywebview-CJLylbJu.js
new file: assets/pywebview-CeWJDVeG.js
new file: assets/pywebview-Chz98E9c.css
new file: assets/pywebview-ClWy2SbE.js
new file: assets/pywebview-Cq_E2BnJ.js
new file: assets/pywebview-Cs1Kot1q.js
new file: assets/pywebview-D-PKWjUg.js
new file: assets/pywebview-D-mMH8F6.css
new file: assets/pywebview-D4gpiFjY.js
new file: assets/pywebview-D74jYk6P.css
new file: assets/pywebview-D7_PdvyM.js
new file: assets/pywebview-D808cNhy.js
new file: assets/pywebview-DVgP2-kW.js
new file: assets/pywebview-Dee3nQjE.js
new file: assets/pywebview-DiP0HdY6.js
new file: assets/pywebview-Dp5dN8OO.css
new file: assets/pywebview-DuyK2jB1.js
new file: assets/pywebview-IqgMfeBe.css
new file: assets/pywebview-MkjZQlBu.css
new file: assets/pywebview-Q4glvYu5.css
new file: assets/pywebview-Rm5Hhqpf.js
new file: assets/pywebview-V_UIajJm.js
new file: assets/pywebview-hj_EXwAP.css
new file: assets/pywebview-ij4pgMq8.css
new file: assets/pywebview-leZCedEt.js
new file: assets/query-asin-B0yMJ9Or.css
new file: assets/query-asin-B5e5m-vs.css
new file: assets/query-asin-Bv7Jtgqa.css
new file: assets/query-asin-DZwJfwHU.css
new file: assets/query-asin.js
new file: assets/shop-match-Banz7DWL.css
new file: assets/shop-match-BiZP8IGM.css
new file: assets/shop-match-BrrGkYV7.css
new file: assets/shop-match-CVFsXUvd.css
new file: assets/shop-match-CfGJEHz0.css
new file: assets/shop-match-CfGWwDtw.css
new file: assets/shop-match-D0DGETCs.css
new file: assets/shop-match-DFEKOpvV.css
new file: assets/shop-match-DNFA8ceR.css
new file: assets/shop-match-DhT1CvMP.css
new file: assets/shop-match-L0xHTaQ2.css
new file: assets/shop-match-MsxXMG_G.css
new file: assets/shop-match-g3eRKhTP.css
new file: assets/shop-match.js
new file: assets/split-BoBVrLdC.css
new file: assets/split-BsJfbBqn.css
new file: assets/split-CRUIYKS6.css
new file: assets/split-DAa_Usoh.css
new file: assets/split-DidKJ84l.css
new file: assets/split-RNZYJ-zZ.css
new file: assets/split-R_8V5xgh.css
new file: assets/split-_O6NHqDj.css
new file: assets/split-mwLUJT1K.css
new file: assets/zh-cn-BjWx61Lu.js
new file: assets/zh-cn-C0iS6aoJ.js
new file: assets/zh-cn-CuE9Zzgz.js
new file: assets/zh-cn-DyKmB71i.js
new file: assets/zh-cn-Z9PBnl-n.js
Generated __pycache__ files were already ignored in some paths but remained tracked in the repository, which caused merge noise and binary conflicts. This removes the tracked bytecode from the index and adds an explicit recursive ignore rule so future Python runs do not reintroduce them.
Constraint: Existing repository history already tracked pycache files across app, backend, and source_code
Rejected: Delete local pycache directories from disk | only repository tracking needed to be removed
Confidence: high
Scope-risk: narrow
Directive: Do not force-add __pycache__ or *.pyc files unless there is a documented runtime packaging reason
Tested: git ls-files shows no remaining paths containing __pycache__/
Not-tested: Application runtime; change only affects tracked generated artifacts and ignore rules
Generated __pycache__ files were already ignored in some paths but remained tracked in the repository, which caused merge noise and binary conflicts. This removes the tracked bytecode from the index and adds an explicit recursive ignore rule so future Python runs do not reintroduce them.
Constraint: Existing repository history already tracked pycache files across app, backend, and source_code
Rejected: Delete local pycache directories from disk | only repository tracking needed to be removed
Confidence: high
Scope-risk: narrow
Directive: Do not force-add __pycache__ or *.pyc files unless there is a documented runtime packaging reason
Tested: git ls-files shows no remaining paths containing __pycache__/
Not-tested: Application runtime; change only affects tracked generated artifacts and ignore rules
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 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