# Launch প্ল্যান পণ্য ম্যাপিং সমবর্তী সংশোধন

অনুমোদন পর্যালোচনার AUTH-03 সংশোধিত। শুধু Launch সার্ভার ও সংশ্লিষ্ট রিগ্রেশন পরীক্ষা পরিবর্তিত, SDK ডিপ্লয় বা প্রকাশ হয়নি; Licentivo ও SDK-এর অনুমোদন সিদ্ধান্তের সীমা অপরিবর্তিত।

## সম্পাদনা

- ম্যাপিং সংরক্ষণে লেনদেনে প্রথমে সাধারণ Launch পণ্য রেকর্ড, তারপর প্ল্যান সংস্করণ লক হয়। ভিন্ন প্ল্যান বা প্রক্রিয়ার সংরক্ষণ অনুরোধ একই পণ্য লক মানে; বিরোধী অনুরোধ HTTP 409 `PRODUCT_MAPPING_CONFLICT` ফেরায়।
- `products.licentivo_product_id` স্থির প্রকাশ্য পণ্য রুট রাখে। প্রথম সফল ম্যাপিং সংরক্ষণের পরে একই Launch পণ্যের অন্য প্ল্যান শুধু এই Licentivo পণ্য বেছে নিতে পারে; তার ভিন্ন নীতি নির্বাচন অনুমত। ফিল্ড ফিচার অধিকার, ডিভাইস কোটা বা গ্রাহক অনুমোদন অবস্থা রাখে না।
- গ্রাহক পরিচয় স্থির রুট পড়ে, সব প্ল্যানের সর্বোচ্চ সংস্করণ থেকে পণ্য বেছে নেয় না। প্ল্যান প্রকাশ ও SDK ইন্টিগ্রেশন কনফিগারেশন তৈরিতেও একই বাইন্ডিং পরীক্ষা হয়।
- পুরোনো ডেটাবেসে স্বয়ংক্রিয়ভাবে nullable ফিল্ড যোগ হয়। স্থির ফিল্ডহীন ডেটায় ক্রমান্বয়ে পরিশোধিত ক্রয় ইতিহাস, পুরোনো প্রকাশ রেকর্ড ও অবশিষ্ট ম্যাপিং দেখা হয়; একই অগ্রাধিকারে একাধিক পণ্য থাকলে স্পষ্ট সংঘর্ষ দেখানো হয়, অনুমান নয়। একমাত্র কেনা পণ্য অসংশ্লিষ্ট খসড়ার আগে; পরে সামঞ্জস্যপূর্ণ ম্যাপিং সংরক্ষণে বাইন্ডিং স্থির হতে পারে। পণ্যের বিষয়বস্তু সম্পাদনায় বাইন্ডিং থাকে।

একাধিক Licentivo পণ্যে বিক্রিত পুরোনো ভুল ডেটায় এখনও ম্যানুয়াল যাচাই প্রয়োজন; এই পরিবর্তন ক্রয় রেকর্ড বা দূরবর্তী লাইসেন্স বদলায় না। অন্য Licentivo পণ্যে যেতে নতুন Launch পণ্য তৈরি করতে হবে, নতুন প্ল্যান দিয়ে পুরোনো পণ্য রুট বদলানো যাবে না।

বাস্তবায়ন [ম্যাপিং সংরক্ষণ](https://github.com/spf86/licentivo-launch/blob/main/internal/app/connections.go), [পণ্য রুট](https://github.com/spf86/licentivo-launch/blob/main/internal/app/product_mapping.go), [পরিচয় ইস্যু](https://github.com/spf86/licentivo-launch/blob/main/internal/app/identity.go), [প্রকাশ যাচাই](https://github.com/spf86/licentivo-launch/blob/main/internal/app/catalog.go), [ইন্টিগ্রেশন পরীক্ষা](https://github.com/spf86/licentivo-launch/blob/main/internal/app/integration.go), [ডেটা মডেল](https://github.com/spf86/licentivo-launch/blob/main/internal/storage/models.go)-এ।

## স্থানীয় যাচাই

| যাচাই | ফলাফল |
| --- | --- |
| সংশোধনের আগের বাস্তবায়নের তুলনা | একই রিগ্রেশন পরীক্ষা দুটি বিরোধী সংরক্ষণ একসঙ্গে সফল হওয়া ধারাবাহিকভাবে ধরে, প্রত্যাশামতো ব্যর্থ |
| সংশোধনের পর ম্যাপিং বিশেষ রিগ্রেশন | বিরোধী অনুরোধে একটি সফল, একটি 409; দুটি সামঞ্জস্যপূর্ণ সংরক্ষণ সফল; পেমেন্ট সিঙ্কের পর পরিচয় ভুল খসড়ায় প্রভাবিত নয়; SDK ইন্টিগ্রেশন স্তর সঠিক পণ্য প্রসঙ্গ গ্রহণ করে |
| ঐতিহাসিক ডেটা সুরক্ষা | কেনা রুট অগ্রাধিকার, দ্ব্যর্থতায় ত্রুটি, ভুল খসড়া প্রকাশ নিষিদ্ধ, ভুল পুরোনো প্রকাশে SDK কনফিগারেশন তৈরি অসম্ভব, বিষয়বস্তু সম্পাদনায় বাইন্ডিং থাকে—সব পাস |
| সব Go সোর্স প্যাকেজ ও MySQL রিগ্রেশন | 192টি পরীক্ষায় পাস রেকর্ড, উপপরীক্ষাসহ; ব্যর্থতা নেই। `TestProductUploadRoundTrip` বাদ, পাস হিসেবে গণনা নয় |
| পুরোনো ডেটাবেস কাঠামো আপগ্রেড | রুট কলামহীন কাঠামো ইনিশিয়ালাইজেশনে nullable ফিল্ড পায়; পুনরাবৃত্ত ইনিশিয়ালাইজেশন পাস |
| বাস্তব Launch, Licentivo ও Go SDK যৌথ পরীক্ষা | 13টি ব্যবসায়িক পর্যায় পাস, ক্রয়, বাস্তব স্বাক্ষরিত ফিচার নির্বাহ, সাধারণ বন্ধের পর পুনরুদ্ধার, লগআউট, দূরবর্তী আনলিঙ্ক, পুরোনো জেনারেশন, নবায়ন রিফান্ড, অ্যাকাউন্ট প্রত্যাহার এবং রিফান্ড/চার্জব্যাকের পর নির্বাহ প্রত্যাখ্যানসহ |
| চূড়ান্ত অতিরিক্ত পরীক্ষা | নতুন খালি ডেটাবেসে ম্যাপিং বিশেষ রিগ্রেশন পাস, পুরোনো প্রকাশের ইন্টিগ্রেশন কনফিগারেশন পরীক্ষাসহ; `go vet` পাস |

সম্পূর্ণ রিগ্রেশন ও বাস্তব পরিষেবা যৌথ পরীক্ষার পরে শেষে SDK ইন্টিগ্রেশন পরীক্ষার সামঞ্জস্য যাচাই যোগ করে এই পরিস্থিতিসহ বিশেষ রিগ্রেশন ও `go vet` আলাদাভাবে আবার চালানো হয়। পুরোনো বাস্তবায়নের প্রত্যাশিত ব্যর্থতা পরীক্ষা মূল রেস ধরতে পারে তার প্রমাণ, অমীমাংসিত রিগ্রেশন ব্যর্থতা নয়।

যৌথ পরীক্ষায় স্থানীয় বিচ্ছিন্ন MySQL 8.0.32, বর্তমান Licentivo পরিষেবা ও বাস্তব Go SDK ব্যবহৃত; পেমেন্ট চ্যানেল ও DeepL বিচ্ছিন্ন সিমুলেটেড পরিষেবা, বাস্তব চার্জ বা অর্থপ্রদত্ত অনুবাদ নয়। সমবর্তী ও পুরোনো ভুল ম্যাপিং পরীক্ষা বাস্তব Launch ব্যবসা, MySQL ও প্রোটোকল সিমুলেটর ব্যবহার করে; নয় SDK-এর সবগুলোর বাস্তব পরিষেবা যৌথ পরীক্ষা এই পর্বে সম্পন্ন দাবি নয়।

এই পর্বে `192.168.2.177` অ্যাক্সেস করা হয়নি। এইবার চালু MySQL ও Licentivo অস্থায়ী প্রক্রিয়া বন্ধ হয়েছে, বিদ্যমান পরিষেবা বজায়। মূল উপকরণ উপেক্ষিত ডিরেক্টরি `.local/mapping-fix-20261024/`-এ, ভাগযোগ্য সারাংশ [যাচাই প্রমাণ](https://github.com/spf86/licentivo-launch/blob/main/docs/product-mapping-fix-evidence-2026-10-24.json)।
