Product content quality check

Updated 2026-09-05

Structural validity-কে product meaning থেকে আলাদা করুন। Local 40-row Japanese ও German case-এ field check pass করলেও AI review Japanese wording correct করার প্রয়োজন পেয়েছিল।

Generation-এর আগে quality contract define করুন

প্রতিটি field-এর জন্য acceptance rule লিখুন। Identity ও revision field source-এর সঙ্গে match করবে। Editable text requested locale ব্যবহার করবে, required information রাখবে এবং destination format মানবে। Claim-এর supporting evidence দরকার। একটি pass বা fail label কোন condition product block করেছে তা ব্যাখ্যা করার জন্য অতিরিক্ত coarse।

Machine-checkable defect ও editorial judgment আলাদা রাখুন। Missing text ও identifier drift deterministicভাবে localize করা যায়। Translation benefit overstate করেছে কি না তা context ও qualified review চায়। প্রতিটি issue সেই person বা system-এর কাছে route করুন যে resolve করতে পারে এবং result candidate revision-এর সঙ্গে attached রাখুন।

CheckUseful evidenceFollow-up review
Identity ও source revisionExact field comparisonNatural translation
Protected valueTyped scalar equalityCorrect source specification
Markup ও placeholderParser ও token countAccurate product claim
Claim reviewAssertion-to-source mappingStore import success
Destination read-backApproved বনাম stored comparisonCommercial performance

Assembly-এর পরে protected value compare করুন

কেবল permitted text field generate করুন, তারপর source থেকে copy করা protected value দিয়ে candidate record assemble করুন। Assembled record-এ দ্বিতীয় comparison চালান। এতে mapper mistake ও review-এর সময় accidental edit দুটোই ধরা পড়ে।

Illustrative JavaScript example schema-validated object ও scalar protected value আশা করে। এটি missing, extra বা changed protected key এবং stale source revision detect করে stable issue code ফেরত দেয়। এই helper-এর আগে schema ও value validation রাখুন, তারপর structurally valid candidate editorial review-এ পাঠান।

function checkProtected(source, candidate) {
  const issues = [];
  if (candidate.sourceRevision !== source.sourceRevision) {
    issues.push({ code: "STALE_SOURCE", field: "sourceRevision" });
  }
  const keys = new Set([
    ...Object.keys(source.protected),
    ...Object.keys(candidate.protected),
  ]);
  for (const field of keys) {
    const hasSource = Object.prototype.hasOwnProperty.call(source.protected, field);
    const hasCandidate = Object.prototype.hasOwnProperty.call(candidate.protected, field);
    if (!hasSource || !hasCandidate ||
        !Object.is(source.protected[field], candidate.protected[field])) {
      issues.push({ code: "PROTECTED_FIELD_CHANGED", field });
    }
  }
  return issues;
}

Number formatting ও value আলাদা রাখুন

Localized number দেখতে আলাদা হতে পারে, কিন্তু একই stored quantity বোঝাতে পারে। MDN locale-aware presentation-এর জন্য Intl.NumberFormat document করে। Authoritative value select করার পরে formatting apply করুন; rendered currency string থেকে price recreate করতে language model-কে বলবেন না।

Numeric value-এর পাশে unit define করুন, প্রতিটি dimension-এর কোন unit তা-সহ। Conversion authorized হলে deterministic conversion rule ব্যবহার করে original representation রাখুন। Sentence-এর digit একা compare করবেন না: unit আলাদা হলে একই number-ও আলাদা product বোঝাতে পারে। Source resolve না হওয়া পর্যন্ত missing unit approval block করবে।

Placeholder multiplicity ও markup validate করুন

Source ও candidate থেকে placeholder token collect করতে application's template parser ব্যবহার করুন। শুধু name set নয়, count compare করুন; প্রতিটি original token থাকলেও duplicated token sentence বা application ভাঙতে পারে। Format-specific escaping rule destination boundary-তে রাখুন।

নিচের ছোট check আগে থেকে extracted token গ্রহণ করে। Universal placeholder regular expression চেষ্টা করে না। HTML-এর জন্য document fragment parse করে permitted structure ও link আলাদাভাবে compare করুন। Custom rendering-এ WordPress escaping guidance relevant, কিন্তু escaping একা content intended meaning preserve করেছে প্রমাণ করে না।

function samePlaceholderCounts(sourceTokens, candidateTokens) {
  const counts = new Map();
  for (const token of sourceTokens) {
    counts.set(token, (counts.get(token) ?? 0) + 1);
  }
  for (const token of candidateTokens) {
    if (!counts.has(token)) return false;
    counts.set(token, counts.get(token) - 1);
  }
  return [...counts.values()].every((count) => count === 0);
}

Case: valid field, তবু wording correction দরকার

gpt-5.6-luna ও xhigh reasoning-এ explicitভাবে configured translation agent 20টি synthetic product থেকে 20টি Japanese ও 20টি German patch তৈরি করেছে। Deterministic schema, identity ও protected-field check সব 40 assembled row-এ pass করেছে। Price, currency, material ও dimension source থেকে copy হয়েছে; generated patch identified SKU ও locale-এর title ও description-ই বদলাতে পারত।

Untouched Japanese patch-ও structural validator pass করে। তবু AI review নিচের দুই wording issue identify করে এবং description revise করেছে। এই কারণেই protected material field check করা prose material সঠিকভাবে describe করেছে প্রমাণ করে না। প্রতিটি consequential assertion source-এর সঙ্গে তুলনা করুন, schema check green হলেও।

Local synthetic-product review report-এর screenshot; schema বা identity violation শূন্য, native-speaker ও merchant review pending এবং corrected DEMO-003 draft দৃশ্যমান।
Luna xhigh case-এর local synthetic-catalog review report। Recorded schema ও identity check-এ সব 40 row pass করেছে; Japanese AI-review correction-এর পরে semantic approval এখনও pending।
Actual Japanese draft-এর change-এর English explanation; raw-ja.json original output preserve করে।
Synthetic productSource meaningJapanese AI-review correction
DEMO-003: sketch padCardboard backingCorrugated cardboard imply করা unsupported wording বাদ
DEMO-010: storage basketমোট দুইটি side handleAmbiguity সরিয়ে total handle count স্পষ্ট

Import-এর পাশাপাশি review export test করুন

OWASP spreadsheet formula injection বর্ণনা করে এবং consumer ভেদে safety transformation আলাদা বলে। Supplier ও generated cell untrusted ধরুন। Actual spreadsheet tool-এর জন্য reviewed serialization policy ব্যবহার করুন এবং in-memory table নয়, saved artifact inspect করুন।

Machine import review file থেকে আলাদা রাখুন। Human viewing-এর জন্য যোগ করা prefix import-এর সময় identifier বা public description silently বদলাবে না। Encoding, quote handling ও expected row identity parser দিয়ে validate করুন। Spreadsheet editor যে change introduce করেছে identify ও correct করতে untouched source রাখুন।

Exact candidate-এর সঙ্গে approval bind করুন

Factual approval ও language approval-এর সঙ্গে candidate revision বা hash store করুন। পরে যেকোনো edit relevant approval invalidate করবে, review না হওয়া পর্যন্ত। Final publisher current source revision-ও compare করবে, কারণ product specification বদলালে unchanged translation stale হতে পারে।

Case artifact-এ corrected Japanese patch ও German patch review_status: unreviewed mark করা row-এ assemble হয়। দুই report-এই translation_semantic_review: pending আছে। AI-assisted correction revision step, native-speaker বা merchant sign-off নয়। Raw ও revised candidate preserve করুন, তারপর import package-এ যাওয়া exact text appropriate reviewer-কে approve করতে দিন।

Check reproduce করুন এবং scope স্পষ্ট রাখুন

Local case test source-field preservation, duplicate SKU, missing SKU ও forbidden price override exercise করে। Saved Japanese ও German patch-এর read-only reassembly দুই validated output reproduce করে। Broader catalog-এ নিজের placeholder grammar, markup ও revision policy-এর check যোগ করুন; উপরের illustrative helper এই 40 row-এর validator নয়, আলাদা example।

এটি Luna-configured local translation case, Astra বা gateway call এবং real store import ছাড়া। Tool API usage, request ID বা billing expose করেনি; দুই output-এই usage ও cost null। Structural result semantic review-এ এগিয়ে নিতে ব্যবহার করুন, তারপর authorized store adapter আলাদাভাবে test করুন।

node --test examples/commerce-localization-case/case.test.mjs

সাধারণ প্রশ্ন

JSON-valid response কি import-এর জন্য unsafe হতে পারে?

হ্যাঁ। Valid syntax correct identifier, source freshness, supported field, accurate claim বা approval establish করে না। Contract-গুলো independently validate করুন।

Model edit করতে না পারলে protected field compare কেন?

Assembly, mapping ও review stage-এ এখনও mistake ঢুকতে পারে। Post-assembly comparison delivery-এর জন্য প্রস্তুত actual record check করে।

Allowed word list দিয়ে claim validate করতে পারি?

Word list কিছু issue flag করতে পারে, কিন্তু assertion-এর meaning বা strength establish করে না। Product evidence-এর বিরুদ্ধে sentence review করুন।

Placeholder name match করলেই যথেষ্ট?

না। Real template parser দিয়ে multiplicity-ও compare করুন। Name set familiar হলেও repeated বা missing token defect হতে পারে।

40-row case কী establish করেছে?

Saved patch কোনো recorded structural failure ছাড়াই assemble হয়েছে এবং source-controlled product field রেখেছে। Japanese wording-এ দুইটি AI-review correction দরকার হয়েছে এবং দুই language-এর semantic approval pending।