@petercjl/taobao-ai-ops 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +30 -22
  2. package/package.json +2 -7
  3. package/requirements.txt +1 -0
  4. package/skills/taobao-ai-operations/SKILL.md +8 -1
  5. package/src/cli.mjs +16 -6
  6. package/src/components.mjs +73 -0
  7. package/src/core.mjs +5 -1
  8. package/src/runtime.mjs +18 -16
  9. package/src/skill-manager.mjs +4 -4
  10. package/src/update.mjs +5 -5
  11. package/src/workflow.mjs +3 -3
  12. package/suite-manifest.json +186 -10
  13. package/skills/taobao-search-product-form/SKILL.md +0 -74
  14. package/skills/taobao-search-product-form/adapters/codex.json +0 -139
  15. package/skills/taobao-search-product-form/adapters/sealseek.json +0 -24
  16. package/skills/taobao-search-product-form/agents/openai.yaml +0 -3
  17. package/skills/taobao-search-product-form/capabilities.json +0 -148
  18. package/skills/taobao-search-product-form/references/SCHEMA.md +0 -3
  19. package/skills/taobao-search-product-form/references/index.md +0 -10
  20. package/skills/taobao-search-product-form/references/log.md +0 -35
  21. package/skills/taobao-search-product-form/references/queries/evaluate-white-label-forms.md +0 -3
  22. package/skills/taobao-search-product-form/references/queries/identify-advertisers.md +0 -5
  23. package/skills/taobao-search-product-form/references/queries/identify-geography.md +0 -5
  24. package/skills/taobao-search-product-form/references/queries/identify-price-bands.md +0 -3
  25. package/skills/taobao-search-product-form/references/queries/identify-product-forms.md +0 -3
  26. package/skills/taobao-search-product-form/references/queries/identify-title-roots.md +0 -5
  27. package/skills/taobao-search-product-form/references/report-output.md +0 -23
  28. package/skills/taobao-search-product-form/references/source-manifest.md +0 -37
  29. package/skills/taobao-search-product-form/references/title-lexicon.json +0 -55
  30. package/skills/taobao-search-product-form/references/topics/advertiser-analysis-method.md +0 -43
  31. package/skills/taobao-search-product-form/references/topics/geography-analysis-method.md +0 -23
  32. package/skills/taobao-search-product-form/references/topics/price-band-analysis-method.md +0 -27
  33. package/skills/taobao-search-product-form/references/topics/title-root-analysis-method.md +0 -37
  34. package/skills/taobao-search-product-form/references/topics/visual-form-method.md +0 -31
  35. package/skills/taobao-search-product-form/references/topics/white-label-evidence.md +0 -38
  36. package/skills/taobao-search-product-form/references/workflow-ledger.md +0 -28
  37. package/skills/taobao-search-product-form/report_runtime/VERSION +0 -1
  38. package/skills/taobao-search-product-form/report_runtime/renderer.py +0 -485
  39. package/skills/taobao-search-product-form/report_runtime/templates/workbench.html +0 -67
  40. package/skills/taobao-search-product-form/report_runtime/validator.py +0 -117
  41. package/skills/taobao-search-product-form/scripts/analyze.py +0 -119
  42. package/skills/taobao-search-product-form/scripts/analyze_advertisers.py +0 -352
  43. package/skills/taobao-search-product-form/scripts/analyze_geography.py +0 -316
  44. package/skills/taobao-search-product-form/scripts/analyze_price_bands.py +0 -257
  45. package/skills/taobao-search-product-form/scripts/analyze_title_roots.py +0 -327
  46. package/skills/taobao-search-product-form/scripts/assemble_opportunity_evidence.py +0 -322
  47. package/skills/taobao-search-product-form/scripts/build_report_viewmodel.py +0 -822
  48. package/skills/taobao-search-product-form/scripts/build_visual_review_viewmodel.py +0 -177
  49. package/skills/taobao-search-product-form/scripts/clean_search_export.mjs +0 -61
  50. package/skills/taobao-search-product-form/scripts/cluster_visual_forms.py +0 -193
  51. package/skills/taobao-search-product-form/scripts/compile_style_prototypes.py +0 -115
  52. package/skills/taobao-search-product-form/scripts/compile_visual_review.py +0 -60
  53. package/skills/taobao-search-product-form/scripts/compile_visual_selection.py +0 -148
  54. package/skills/taobao-search-product-form/scripts/prepare.py +0 -180
  55. package/skills/taobao-search-product-form/scripts/render_report.py +0 -31
  56. package/skills/taobao-search-product-form/scripts/validate_opportunity_cards.py +0 -84
  57. package/skills/taobao-search-product-form/scripts/validate_report_viewmodel.py +0 -152
  58. package/skills/taobao-search-product-form/scripts/visual_form_pipeline.py +0 -247
  59. package/skills/taobao-search-product-form/scripts/visual_observation_batches.py +0 -117
  60. package/skills/taobao-search-product-form/scripts/workflow_ledger.py +0 -177
  61. package/skills/yuce-category-opportunity-report/SKILL.md +0 -151
  62. package/skills/yuce-category-opportunity-report/adapters/codex.json +0 -113
  63. package/skills/yuce-category-opportunity-report/adapters/sealseek.json +0 -39
  64. package/skills/yuce-category-opportunity-report/agents/openai.yaml +0 -3
  65. package/skills/yuce-category-opportunity-report/assets/chart-views.js +0 -80
  66. package/skills/yuce-category-opportunity-report/assets/package.json +0 -1
  67. package/skills/yuce-category-opportunity-report/assets/report-template.html +0 -62
  68. package/skills/yuce-category-opportunity-report/capabilities.json +0 -48
  69. package/skills/yuce-category-opportunity-report/references/SCHEMA.md +0 -5
  70. package/skills/yuce-category-opportunity-report/references/data-contract.md +0 -40
  71. package/skills/yuce-category-opportunity-report/references/index.md +0 -6
  72. package/skills/yuce-category-opportunity-report/references/log.md +0 -29
  73. package/skills/yuce-category-opportunity-report/references/queries/assess-category-opportunity.md +0 -7
  74. package/skills/yuce-category-opportunity-report/references/source-manifest.md +0 -14
  75. package/skills/yuce-category-opportunity-report/references/topics/category-opportunity-method.md +0 -39
  76. package/skills/yuce-category-opportunity-report/scripts/build_report.py +0 -779
  77. package/skills/yuce-category-opportunity-report/scripts/market_routes.py +0 -139
@@ -1,148 +0,0 @@
1
- {
2
- "schema": "portable-skill-capabilities",
3
- "schema_version": "1.0.0",
4
- "skill": "taobao-search-product-form",
5
- "target_platforms": ["codex", "sealseek"],
6
- "capabilities": [
7
- {
8
- "id": "product.workflow.ledger",
9
- "purpose": "Create and update a recoverable per-run record of stage state, strategy and real artifact paths",
10
- "required": true,
11
- "required_features": ["new_ledger_only", "stage_state_record", "existing_artifact_verification", "recoverable_update"],
12
- "input_fields": ["run_directory", "mode", "input_workbook", "stage_transition"],
13
- "output_fields": ["ledger_path", "stage_state", "backup_path"],
14
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Write only the selected local run directory."},
15
- "errors": ["INPUT_INVALID", "LEDGER_EXISTS", "ARTIFACT_MISSING", "TRANSITION_INVALID"]
16
- },
17
- {
18
- "id": "product.search.clean",
19
- "purpose": "Split a supplied search workbook into first-seen natural products and all advertising appearances",
20
- "required": true,
21
- "required_features": ["xlsx_read", "first_natural_id_only", "all_ad_appearances", "source_order_preserved", "xlsx_write", "new_output_only"],
22
- "input_fields": ["source_workbook", "output_workbook"],
23
- "output_fields": ["natural_table", "advertising_table", "quality_counts"],
24
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read the supplied workbook and create one new local cleaned workbook."},
25
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
26
- },
27
- {
28
- "id": "product.search.advertiser-analysis",
29
- "purpose": "Measure advertiser shops, promoted versus unpromoted product layout, natural-position payment-count evidence, and price positioning from a cleaned search workbook",
30
- "required": false,
31
- "required_features": ["xlsx_read", "three_grains", "product_id_natural_join", "exact_shop_name_join", "natural_payment_traction", "shop_product_layout", "configurable_price_bands", "json_detail_export", "new_output_only"],
32
- "input_fields": ["cleaned_workbook", "output_json", "optional_price_band_boundaries"],
33
- "output_fields": ["counts", "advertiser_shops", "ad_products", "natural_products_of_advertiser_shops", "price_bands", "ad_appearance_records", "quality"],
34
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read the selected local cleaned workbook and create one new local JSON file."},
35
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
36
- },
37
- {
38
- "id": "product.search.title-roots",
39
- "purpose": "Create traceable natural-position product-to-title-root evidence with a reproducible jieba-compatible lexicon snapshot",
40
- "required": false,
41
- "required_features": ["xlsx_read", "natural_only", "protected_phrase_segmentation", "project_lexicon_merge", "run_lexicon_snapshot", "candidate_review_queue", "product_root_evidence", "root_shop_price_payment_statistics", "new_output_only"],
42
- "input_fields": ["cleaned_workbook", "new_output_directory", "optional_reviewed_project_lexicon"],
43
- "output_fields": ["product_roots", "root_summary", "lexicon_snapshot", "lexicon_candidates", "quality"],
44
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read the selected local cleaned workbook and optional reviewed lexicon; create only a new local result directory."},
45
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "LEXICON_CONFLICT", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
46
- },
47
- {
48
- "id": "product.search.geography",
49
- "purpose": "Analyze listing-address distribution, distinct merchants, title-root propositions, price/payment evidence and separate advertising presence from a cleaned search workbook",
50
- "required": false,
51
- "required_features": ["xlsx_read", "natural_product_grain", "shop_address_grain", "address_normalization", "optional_title_root_hash_join", "regional_price_payment_statistics", "advertising_appearance_separation", "json_detail_and_summary", "new_output_only"],
52
- "input_fields": ["cleaned_workbook", "new_output_directory", "optional_title_root_json"],
53
- "output_fields": ["geography_detail", "geography_summary", "quality"],
54
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read the selected local cleaned workbook and optional approved title-root artifact; create only a new local result directory."},
55
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "SOURCE_MISMATCH", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
56
- },
57
- {
58
- "id": "product.search.price-bands",
59
- "purpose": "Fit run-specific price bands to all cleaned natural-position products and compare advertising positions without letting them affect the fit",
60
- "required": false,
61
- "required_features": ["xlsx_read", "all_natural_products", "log_price_jenks", "sample_selected_band_count", "bootstrap_stability", "advertising_context_separate", "json_detail_and_summary", "new_output_only"],
62
- "input_fields": ["cleaned_workbook", "new_output_directory", "optional_complexity_penalty"],
63
- "output_fields": ["price_band_detail", "price_band_summary", "quality"],
64
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read the selected local cleaned workbook and create only a new local result directory."},
65
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "SAMPLE_TOO_LARGE_FOR_EXACT_FIT", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
66
- },
67
- {
68
- "id": "product.search.prepare",
69
- "purpose": "Read the supplied workbook, normalize product placements and retrieve source images into a new local analysis directory",
70
- "required": false,
71
- "required_features": ["xlsx_read", "product_id_deduplication", "placement_preservation", "safe_image_fetch", "new_output_only"],
72
- "input_fields": ["workbook", "search_term", "output_directory", "scope"],
73
- "output_fields": ["manifest", "images", "contact_sheets", "fetch_coverage"],
74
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read user-supplied workbook and public image URLs; write only a new local output directory."},
75
- "errors": ["INPUT_INVALID", "DEPENDENCY_UNAVAILABLE", "IMAGE_FETCH_FAILED", "OUTPUT_EXISTS"]
76
- },
77
- {
78
- "id": "product.image.inspect",
79
- "purpose": "Make one image-grounded, multi-facet semantic observation per product and preserve open candidate labels",
80
- "required": false,
81
- "required_features": ["local_image_view", "source_image_zoom", "one_observation_per_image", "multi_facet_observation", "open_candidate_labels", "uncertainty_preservation"],
82
- "input_fields": ["visual_batch_plan", "images", "search_intent", "optional_registry_snapshot"],
83
- "output_fields": ["raw_observations", "coverage", "uncertainties", "actual_worker_limit"],
84
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Inspect retrieved product images within the user-requested research scope."},
85
- "errors": ["CAPABILITY_UNAVAILABLE", "IMAGE_UNREADABLE", "OUTPUT_CONTRACT_FAILED"]
86
- },
87
- {
88
- "id": "product.image.plan-reduce",
89
- "purpose": "Create disjoint visual review batches and aggregate raw candidate labels with a versioned registry without rereading images",
90
- "required": false,
91
- "required_features": ["image_hash_provenance", "disjoint_batches", "contact_sheet_export", "observation_binding", "one_record_per_product_validation", "versioned_alias_registry", "unresolved_label_reporting", "new_output_only"],
92
- "input_fields": ["prepared_image_manifest", "observation_draft", "registry", "new_output_directory"],
93
- "output_fields": ["visual_batch_plan", "contact_sheets", "raw_observations", "form_assignments", "form_summary"],
94
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read prepared local images and write only new local analysis artifacts."},
95
- "errors": ["INPUT_INVALID", "IMAGE_UNREADABLE", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
96
- },
97
- {
98
- "id": "product.image.three-axis-compile",
99
- "purpose": "Compile image-grounded product form, product-design style and task-audience observations into independent, evidence-linked selection axes",
100
- "required": false,
101
- "required_features": ["three_independent_axes", "image_hash_provenance", "product_side_delta", "audience_evidence_tier", "open_candidate_labels", "versioned_alias_registry", "unresolved_label_reporting", "one_record_per_product_validation", "new_output_only"],
102
- "input_fields": ["visual_batch_plan", "observation_draft", "three_axis_registry", "new_output_directory"],
103
- "output_fields": ["raw_observations", "product_labels", "label_summary", "coverage", "unresolved"],
104
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read planned local image observations and write only new local analysis artifacts."},
105
- "errors": ["INPUT_INVALID", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
106
- },
107
- {
108
- "id": "product.image.parallel-observe",
109
- "purpose": "Execute disjoint image-semantic batches concurrently with a bounded worker count and merge their raw observations",
110
- "required": false,
111
- "required_features": ["bounded_semantic_workers", "disjoint_product_ownership", "batch_result_collection", "actual_parallelism_evidence"],
112
- "input_fields": ["visual_batch_plan", "worker_limit", "facet_questions", "optional_registry_snapshot"],
113
- "output_fields": ["batch_observations", "actual_worker_limit", "execution_evidence"],
114
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Inspect only the planned product images; disclose any metered image-model cost before launch."},
115
- "errors": ["CAPABILITY_UNAVAILABLE", "FEATURE_UNSUPPORTED", "PROVIDER_FAILURE", "OUTPUT_CONTRACT_FAILED"]
116
- },
117
- {
118
- "id": "product.opportunity.evidence-join",
119
- "purpose": "Reconcile approved natural-product modules and form overlapping product-form, style and use-task evidence groups for opportunity cards",
120
- "required": false,
121
- "required_features": ["source_hash_reconciliation", "natural_product_id_join", "uncertainty_preservation", "advertising_grain_separation", "merchant_line_context", "overlapping_candidate_groups", "new_output_only"],
122
- "input_fields": ["visual_labels", "price_detail", "title_roots", "geography_detail", "advertiser_detail", "new_output_path"],
123
- "output_fields": ["product_evidence", "candidate_evidence", "population_quality", "source_hashes"],
124
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read selected local stage artifacts and create one new local JSON evidence file."},
125
- "errors": ["INPUT_INVALID", "SOURCE_MISMATCH", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
126
- },
127
- {
128
- "id": "product.opportunity.card-validate",
129
- "purpose": "Check evidence-first opportunity-card structure and resolve each machine reference to a candidate field or member product",
130
- "required": false,
131
- "required_features": ["required_card_fields", "candidate_reference_resolution", "member_product_reference", "research_order_uniqueness", "no_composite_entry_score"],
132
- "input_fields": ["opportunity_cards_json", "opportunity_evidence_json"],
133
- "output_fields": ["validation_result", "card_count"],
134
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Read local opportunity-card and evidence JSON only."},
135
- "errors": ["INPUT_INVALID", "BROKEN_EVIDENCE_REFERENCE", "OUTPUT_CONTRACT_FAILED"]
136
- },
137
- {
138
- "id": "product.report.html",
139
- "purpose": "Render and validate a standalone, evidence-linked HTML research report using the bundled pinned runtime",
140
- "required": false,
141
- "required_features": ["versioned_viewmodel", "embedded_images", "structured_conclusions", "standalone_html", "validation"],
142
- "input_fields": ["analysis", "visual_labels", "conclusions", "output_path"],
143
- "output_fields": ["viewmodel", "html", "validation"],
144
- "side_effects": {"external_mutation": false, "may_cost_money": false, "authorization": "Write new local report files only."},
145
- "errors": ["DEPENDENCY_UNAVAILABLE", "CONTRACT_UNSUPPORTED", "OUTPUT_EXISTS", "OUTPUT_CONTRACT_FAILED"]
146
- }
147
- ]
148
- }
@@ -1,3 +0,0 @@
1
- # Knowledge route
2
-
3
- At a judgment node, read this file, `index.md` and recent `log.md`; then choose only the query named by that node. Read its linked topic, produce the node output and return to the main line. `source-manifest.md` is maintenance provenance, not a runtime page.
@@ -1,10 +0,0 @@
1
- # Routes
2
-
3
- - Image-first product eligibility and form: [identify-product-forms](queries/identify-product-forms.md).
4
- - Advertiser identity and placement structure: [identify-advertisers](queries/identify-advertisers.md).
5
- - Natural-position title roots and seller-language propositions: [identify-title-roots](queries/identify-title-roots.md).
6
- - Listing address, merchant geography and regional title-root propositions: [identify-geography](queries/identify-geography.md).
7
- - Data-derived natural-position price bands: [identify-price-bands](queries/identify-price-bands.md).
8
- - Product-proposition opportunity cards and white-label research order: [evaluate-white-label-forms](queries/evaluate-white-label-forms.md).
9
-
10
- Use only the route for the current decision.
@@ -1,35 +0,0 @@
1
- # Knowledge updates
2
-
3
- ## 2026-09-30 — prototype-to-report source binding
4
-
5
- - The current product-style prototype labels are required at cross-module comparison. Opportunity cards use product-style candidates and bind to the exact comparison-artifact SHA-256.
6
- - Reports require the compiled prototype labels and summary, and verify their memberships against comparison evidence. Visual and opportunity interpretations supplied as Markdown carry their source-artifact hashes so the report reads the same classification version as its gallery and cards.
7
- - A visual strategy change invalidates the comparison, opportunity judgment and report stages while permitting same-workbook, reconciled advertising/title/geography/price modules to be reused.
8
-
9
- ## 2026-09-30 — product-style prototype method
10
-
11
- - The user accepted image grouping by coherent, sourceable whole-product styles. Visual features remain evidence and variants; the product-style prototype is the unit used for merchandise comparison and report navigation.
12
- - Added sample-led prototype discovery, constant comparison of new images with representatives and boundaries, justified multi-style membership, explicit uncertain/boundary records, and image-hash-bound full-population compilation.
13
- - The saved image observation may be reused for reclassification; representative and ambiguous images are reopened when its text does not resolve a consequential boundary. Downstream numerical comparisons count distinct product IDs because prototype groups overlap.
14
-
15
- ## 2026-09-30
16
-
17
- - Added run-specific hierarchical form convergence after three-axis visual compilation. The Agent judges image-grounded family, variant and configuration from source-label profiles; a deterministic script verifies mapping coverage, preserves original labels and records a merge audit. Downstream joins and reports use the resulting families while retaining variants and separate style/task axes.
18
-
19
- ## 2026-09-28
20
-
21
- - Added the cross-module opportunity-card judgment method: candidate propositions at supported form/style/task grains, product-ID evidence joins, separate supporting and adverse evidence, merchant-line comparisons, and explicit unknowns before profit or supplier work. The default artifact is evidence JSON plus reviewable cards; final presentation remains independent.
22
-
23
- ## 2026-09-27
24
-
25
- - Extended visual selection from a structure-only pilot to three parallel paths—structural form, product design style and task-defined audience—with separate evidence and product-side deltas for style-/audience-led merchandise propositions.
26
-
27
- - Added one-pass, multi-facet visual observations; bounded, disjoint image-review batches; post-review versioned primary-form aggregation and explicit coverage/label-convergence QA. The first main-run pilot is awaiting user review.
28
-
29
- - Initial image-first form and evidence-boundary methods. Search-result placement and platform category are separate from visual identity.
30
- - Added user-confirmed advertiser analysis: separate appearance, product and shop grains; compare exact shop names and product IDs with natural positions; pass JSON detail and evidence-backed prose to the reporting stage.
31
- - Extended advertiser conclusions to name merchant-level advertising patterns, advertised versus unadvertised natural products, natural-row payment-count evidence, and run-specific price bands.
32
- - Added representative-shop case selection and a product-level interpretation contract: observed assortment/placement, bounded strategy reading, and concrete white-label research implication.
33
- - Added natural-position title-root analysis with a versioned base lexicon, per-run dictionary snapshot and candidate review, product/root evidence joins, price/payment/shop statistics, and image-verification boundaries.
34
- - Added listing-location analysis that preserves product, shop and shop–address grains; compares region, title-root, price/payment and advertising evidence while treating the exported address as an unverified location label.
35
- - Added sample-derived price-band analysis using log-price Jenks natural breaks, a documented band-count penalty, bootstrap stability, and separate advertising context.
@@ -1,3 +0,0 @@
1
- # Query: Which product propositions merit further white-label research?
2
-
3
- Read [white-label-evidence](../topics/white-label-evidence.md) after a product-keyed compare artifact with whole-product style prototypes exists. Ask which complete product styles have a credible reason to investigate, how structure, design and use-task cuts affect that reading, what competes with the explanation, and which missing fact would change the research order. Return cards bound to the current compare-artifact hash and a human-readable review, then return to Main Line Step 6. Image labels remain observations; do not alter them to favor a candidate.
@@ -1,5 +0,0 @@
1
- # Who appears in advertising positions?
2
-
3
- Trigger: the `classify/placement` module is selected for a cleaned search-result workbook.
4
-
5
- Read [advertiser-analysis-method](../topics/advertiser-analysis-method.md). Ask: Which observed shops best illustrate materially different advertising-product layouts? For each, which identifiable products are promoted, which stronger or contrasting products remain only in the natural results, what do natural-row `付款人数` and prices actually show, and which white-label research question follows? Preserve the three counting grains and distinguish observed layout from inferred intent. Return the resulting case-selection and interpretation contract to stage 3 before writing the JSON and conclusion.
@@ -1,5 +0,0 @@
1
- # Query: What does listing location reveal about a search market?
2
-
3
- Use at `classify/geography` after the cleaned two-sheet workbook is available. Read [geography analysis method](../topics/geography-analysis-method.md). The current question is which regions show broad merchant participation and distinctive product propositions, and which apparent clusters are explained by a few shops.
4
-
5
- Produce natural-product, shop–address, province/city, title-root–region, and advertising-presence evidence with a separate human interpretation. Return to business-flow stage 3. Image classification and supplier verification remain later nodes.
@@ -1,3 +0,0 @@
1
- # Query: Where does this search sample's visible price structure change?
2
-
3
- Use at `classify/price` after the cleaned natural/advertising workbook exists. Read [price-band analysis method](../topics/price-band-analysis-method.md). Determine boundaries from this run's eligible cleaned natural-position sample, not a retained category template. Produce complete product-band assignments, candidate-fit and stability evidence, band comparisons, and a human interpretation. Return to business-flow stage 3. Product eligibility is an upstream clean-stage decision; physical form and actual SKU transaction-price verification are separate later questions.
@@ -1,3 +0,0 @@
1
- # Query: What product is actually visible, and what is its form?
2
-
3
- Read [visual-form-method](../topics/visual-form-method.md). Return one image-hash-bound raw observation per readable product image covering structural form, product design style and target use-task/audience evidence. Preserve originals over 10 MB as `not_observed` products with a recorded `too_large` reason, without visual labels. Discover coherent, whole-product style prototypes from a varied sample; compare every image with their representatives and boundaries, allowing justified multi-style membership and explicit uncertainty. Retain the three observation dimensions as secondary evidence, then create candidate merchandise propositions with specific product-side differences. Return to Main Line Step 4; defer entry or profitability judgment.
@@ -1,5 +0,0 @@
1
- # Which title roots describe the natural-position market?
2
-
3
- Trigger: the `classify/title` module is selected for a cleaned search-result workbook.
4
-
5
- Read [title-root-analysis-method](../topics/title-root-analysis-method.md). Ask which title expressions identify product-form claims, materials, use tasks, price positioning, and merchant assortments; which expressions merely reflect common seller wording; and which candidate phrases need lexical review. Return the analysis contract to stage 3 before running the deterministic extractor. Later image and white-label decision topics remain deferred.
@@ -1,23 +0,0 @@
1
- # Comprehensive report output contract
2
-
3
- Load this page at the `report` node. Its input is the run ledger and the completed modules' interpretation plus evidence artifacts, including any available cross-module evidence and opportunity cards. The report answers what product-side propositions merit further white-label research, why, and what evidence would change that assessment. It is a research report, not a binary entry authorization.
4
-
5
- ## Assembly main line
6
-
7
- 1. Resolve one coherent source run. Check source workbook identity, approved/verified module versions, natural-product population and advertising-row grain. The current visual prototype labels, prototype summary, comparison evidence, schema-2 opportunity cards and their source hashes form one linked version. Inspect the actual interpretation and evidence files. A changed visual classification requires new cross-module evidence, opportunity cards, visual interpretation and final report; unaffected modules from the same cleaned workbook may be reused after reconciliation. If a required module or source binding is absent, stop and reconcile before publishing.
8
- 2. Build the report data manifest from the current run's artifact paths. The `visual` module includes `summary`, `labels` (`product_style_labels.json`) and `prototypes` (`style_prototype_summary.json`); the `decision` module includes `evidence` and `cards`. Each opportunity-card document stores the comparison file's SHA-256 in `source_evidence_sha256`. A supplied visual interpretation Markdown starts with `<!-- source_prototype_summary_sha256: <64-character SHA-256> -->`; a supplied decision interpretation starts with `<!-- source_evidence_sha256: <64-character SHA-256> -->`. These binding comments are file metadata and are removed from rendered prose. When no visual interpretation has been written for the current prototypes, omit that role and label the report's data-derived explanation accordingly. The bundled `scripts/build_report_viewmodel.py --manifest MANIFEST --output NEW_VIEWMODEL.json` is the deterministic adapter for the current JSON/Markdown artifact family. The manifest uses semantic module keys, relative paths resolved from the manifest directory, a title, subject, and source identity; it is run data, never bundled private content.
9
- 3. Present a short executive reading path, then substantive independent chapters for input/cleaning, advertising, title roots, listing geography, price bands, visual form/style/task, candidate comparison, and opportunity judgment. Each completed analytical chapter contains its current-run written interpretation and evidence tables with explicit metric definitions and drill-down IDs. Use the source's numbered conclusions, bold leads, and labeled paragraphs as the semantic boundaries of numbered points. Each point states one complete judgment with its supporting figures, explanation, implication and relevant caveat together; its lead phrase is bold and its badge uses semantic color. Preserve every material finding, counterexample and limitation from the current interpretation; restructure headings and prose for reading without reducing the interpretation to a teaser. The visual chapter may synthesize its full-run label summary when no separately reviewed prose exists and must state that provenance. It includes structural-form and variant/configuration evidence tables plus a complete product-image gallery: one child menu per observed **whole-product style prototype**, with boundary and `未识图` menus when needed. Every natural product ID is covered; a listing may appear in several prototype menus when its image shows multiple actual styles, so menu counts cannot be added as unique products. Each card shows an HTTPS image, title, ID, shop, current price, displayed payment people, main form, variant/configuration, separate style, image-supported task, visual status and direct visible evidence. An original over 10 MB remains in the gallery and full numeric evidence with `未识图(图片不可用)` status and `too_large` reason; it has no inferred visual labels and does not enter visual candidate groups. Within each prototype show 50 items per page; sort the full prototype group before pagination by price, displayed payment, or the auditable research-priority score. Preserve the image-bound observations, prototype definitions, grouping reasons and uncertain cases in the run's audit; do not turn isolated visual features into report menus. Join the cleaned natural-position sheet's original `商品链接` to the gallery by product ID; verify URL scheme, marketplace host, embedded ID, source workbook hash and complete coverage. Each card has exactly two copy controls—ID and original link—and opening the image or title navigates to that link in a new tab. If links are unavailable or invalid in another input, expose the data gap instead of constructing a guessed product address.
10
- 4. The opportunity section is the synthesis, with one child menu per selected card. A card identifies the physical merchandise proposition, observations, supporting and adverse evidence, parent/comparable context, representative product and shop IDs, unknowns, and the next discriminating checks. Research order is explained; it is not an opaque total score or a go/no-go decision.
11
- 5. Provide a searchable evidence area including all natural products and candidate groups. Keep source text, IDs, titles, labels, price, displayed payment, shop, address and advertising linkage at their correct grains. The separate JSON artifacts remain the full machine-readable evidence. Before marking a report complete, verify the bundled template's requested column filtering and sorting in the generated HTML; missing controls keep the report stage `awaiting_review` for template development.
12
- 6. Run `scripts/validate_report_viewmodel.py --manifest MANIFEST --viewmodel VIEWMODEL` before rendering to verify prototype-label/source binding, card/evidence binding, current interpretation versions, candidate/product/card coverage, and exact gallery membership per prototype. Reconcile every ready image to an observation and every unobserved product to a `too_large` manifest record; a missing readable-image observation fails QA. Render with the package's `scripts/render_report.py` and its bundled renderer, validator and template. The report ViewModel is a separate artifact. Use the export's approved HTTPS links for the full gallery; selected representative thumbnails may remain embedded. Preserve the independent image-review contact sheet as an audit artifact.
13
-
14
- The builder and validator match `visual.labels` to the comparison artifact's recorded prototype-label SHA-256, match `visual.prototypes` to each product's memberships, and match schema-2 opportunity cards to the exact comparison file SHA-256. These prototype memberships drive the gallery and allow justified repeat appearances across menus. Keep the source summary and three-axis labels as secondary evidence. The manifest is a run artifact, not a bundled category list.
15
-
16
- ## Evidence and presentation invariants
17
-
18
- - Distinguish observed data, interpretation, counterevidence, unknowns and next research. Link each quantitative claim to the relevant row/group and product or shop ID; verify numbers against JSON, not merely against a prose file.
19
- - Natural product ID is the product grain. Advertising occurrences, unique ad IDs and same-shop natural overlap are different measures. Title roots and visual candidate groups overlap and their totals are not additive. A blank use-task label does not establish absence of use demand.
20
- - The export's `付款人数` has no stated time window; do not call it sales units, GMV, conversion or growth. Search-page price is not verified SKU transaction price. Title roots are seller claims. Listing address is not factory location. Image-supported task labels are not verified buyer demographics. A search snapshot does not establish trend, market share, ad spend, profit or white-label entry viability.
21
- - The gallery's **research-priority score** is a transparent within-snapshot evidence-review order, never a predicted profit, white-label opportunity, conversion or entry score. Current default: `60 × min(1, ln(1+displayed payment people)/ln(1+payment P99)) + 25 × (product's price-band natural-product count / largest-band count) + 15 × (whole-product prototype assigned ? 1 : 0)`, rounded to one decimal. Derive P99 and band counts from the current unique natural-product sample, handle an all-zero payment sample safely, display those denominators and the formula, and keep the component assumptions visible. Higher price-band supply is evidence coverage, not proof of demand. Revisit the strategy with the user as product-level evidence improves; never silently treat the score as the research-card order.
22
- - Present conclusions as short, labeled structured items, then numbered explanation points and evidence. Use semantic color and weight for pivotal claims and cautions. Let numbered source items and labeled source paragraphs define the point boundaries. Place the supporting explanation in the same point, with sufficient line spacing and selective emphasis; do not derive point boundaries from a fixed character count or punctuation. If a source paragraph contains several genuinely separate judgments, reorganize it by meaning and verify that each still has its relevant evidence and caveat. Preserve the complete approved interpretation content in readable chapter sections, including tables and case studies. Use only charts that make a comparison clearer than its table.
23
- - Validate chapter and artifact coverage, source totals, card reference resolution, alignment between source judgments and numbered report points, UI navigation, evidence search/filter/sort as supported, image loading, desktop/mobile overflow and print readability. A generated file is `awaiting_review` until the user accepts it; a main run is not a clean-context regression.
@@ -1,37 +0,0 @@
1
- # Source manifest
2
-
3
- Coverage: partial. This is a shareable, self-contained synthesis, not a runtime dependency on a private Wiki.
4
-
5
- Source classes: W / U / E / A mean contextual Wiki synthesis, user-confirmed requirement, observed evaluation evidence, and design assumption respectively.
6
-
7
- - `U`: user-confirmed product-image grouping, 2026-09-30: the selection unit is a recognizable complete product style, not an isolated body-outline or presentation feature. A varied sample establishes provisional prototypes; new images are constantly compared and may add a new prototype or belong to several actual product schemes visible in one listing.
8
- - `E`: a reviewed 100-image milkpot pilot showed 11 coherent candidate product-style groups with 3 boundary products. Its exact taxonomy and counts are evaluation examples, not a reusable class list or market-share estimate.
9
- - `A`: a run-specific registry with representative images, inclusion/boundary rules and image-hash-bound per-product membership decisions is a portable execution contract. It still requires semantic image QA; structural/style/task observations are secondary evidence rather than the final taxonomy.
10
-
11
- - `U`: user-confirmed opportunity-card contract, 2026-09-28: combine visual classification with displayed payment evidence, price bands, merchant product-line layout and prior modules; show the grounds and counterevidence so the user judges whether to deepen research or initiate profit/supplier checks. Review HTML is not the final presentation contract.
12
- - `W`: general product-development and cost-structure knowledge supports demand before product, real product difference, net profit rather than gross sales, supplier standards and small-batch testing. It supplies later verification questions, not a search-snapshot scoring formula or a claim that a particular candidate is profitable.
13
- - `A`: assemble a deterministic product-ID evidence table; compare parent forms with only well-supported style/task intersections, test leading-shop/product dependence, and issue structured cards without an opaque total score. This is the proposed reusable comparison method for user review on the current sample.
14
-
15
- - `U`: user-confirmed requirement, 2026-09-27: product form starts with image inspection; natural listings define the form-performance population; advertised listings have separate competitive value; platform category is not an exclusion rule; exclude visibly irrelevant products and accessories.
16
- - `U`: user-confirmed workflow design, 2026-09-27: keep the stable business flow separate from replaceable classification and decision strategies; support stepwise development and low-interaction end-to-end runs; record each stage's state and intermediate artifact paths in a per-run ledger.
17
- - `U`: user-confirmed clean-stage rule, 2026-09-27: split natural and advertising placements into two tables; natural rows retain the first source occurrence of each product ID and exclude later natural duplicates. Advertising rows remain a separate display-record population.
18
- - `U`: user-confirmed advertiser module, 2026-09-27: use separate appearance, unique-product and exact-shop populations; profile which shops and products occupy advertising positions, how repeated appearances differ from promoted assortment, and whether products or exact shop names also appear naturally. Deliver machine-readable details and a separate evidence-backed text conclusion for later HTML composition.
19
- - `U`: user-confirmed conclusion depth, 2026-09-27: name the shops with frequent advertising appearances and compare their advertised products, unadvertised natural products, natural-row `付款人数`, and observed product price bands. The business conclusion must interpret merchant and merchandise patterns rather than restate only aggregate counts.
20
- - `U`: user-confirmed representative-shop depth, 2026-09-27: explain typical shops' specific merchandise layouts, the advertising configuration they exhibit, and what those cases imply for white-label product research. Keep the conclusion substantive enough to stand without the JSON detail.
21
- - `A`: select contrasting cases from observed advertising presence, assortment, natural-position payment evidence and price positioning; separate observed configuration, inferred intent and actionable research implication. Treat this as an interpretive method subject to user review.
22
- - `A`: choose price-band boundaries per run from the source distribution and record them with the output; use the same boundaries for advertising and natural comparisons. This is a configurable analysis method, not a fixed price threshold or entry rule.
23
- - `U`: user-confirmed title-root module, 2026-09-27: use only natural-position products; split each title into roots traceable to product ID, title, image, source `付款人数`, price and shop; examine root coverage, price distribution and shop assortment for white-label product/market research.
24
- - `A`: use a versioned protected-phrase lexicon plus optional reviewed project additions, record an immutable snapshot per run, and review frequent unclassified `jieba` segments before promoting them. Title terms are seller language rather than direct buyer-query counts; image evidence decides actual form.
25
- - `U`: user-confirmed geographic research direction, 2026-09-27: use the search export's address field to examine where visible products and shops cluster, what product propositions appear there, how comparable price/payment evidence looks, and whether advertising is present; output a method and run it on the current sample.
26
- - `A`: preserve product, shop and shop–address grains; use root–region coverage and a descriptive location quotient, shop concentration, matched price cohorts, and separate advertising appearance/product counts. Treat the address as an unverified listing label and require supplier evidence before calling a region a production cluster.
27
- - `U`: user-confirmed price-band method, 2026-09-27: price boundaries must be generated from each input sample rather than fixed in the Skill; all cleaned natural-position products participate in this module; any product-eligibility decision belongs upstream in the clean stage; use Jenks natural breaks.
28
- - `E`: published Jenks natural-breaks documentation describes data-specific clusters and unequal class populations; the current flat-pan sample supplies evaluation evidence, not reusable numeric price boundaries.
29
- - `A`: fit Jenks on log current price, select band count by a declared marginal explained-variance penalty and minimum support, test sensitivity and bootstrap stability, and interpret natural-product/merchant/payment and separate advertising context. The complexity penalty is a revisable strategy parameter, not a platform rule or consumer-cognition threshold.
30
- - `W`: a general ecommerce positioning note supports narrowing to a winnable product/need segment, but supplies no method for visual classification or search-snapshot measurement. The note predates this Skill and is used only as broad context.
31
- - `E`: a representative Taobao search export has repeated product IDs and products appearing in both natural and advertising positions; its exact counts are evaluation data, not universal business rules.
32
- - `A`: image-grounded taxonomy, separation of observable traction and white-label feasibility, and report presentation are proposed method design. Validate with user-reviewed runs.
33
- - `U`: user-confirmed visual-stage direction, 2026-09-27: read each image once for all dimensions; use bounded concurrent groups when genuinely available; discover labels during viewing, then aggregate centrally to avoid nearly unique labels per product.
34
- - `U`: user-confirmed selection meaning, 2026-09-27: structural form, product style and target audience/use task are parallel selection paths; style- or audience-led physical product differentiation can be a new candidate merchandise form even when base structure is unchanged.
35
- - `A`: image fingerprints for batch scheduling, a versioned canonical/alias registry, one-record-per-product provenance checks, and explicit unresolved-label review are implementation choices for that direction, pending user review of the pilot.
36
-
37
- Critical gaps: no verified conversion or GMV period for displayed payment counts; no advertising cost/ROI; no reviews, supplier economics or time series in a single search export. The export's address field does not verify the warehouse or factory location. Opportunity cards can order research but cannot establish entry readiness or profit. Recompile this layer when the user approves a better product-form taxonomy, card method or validated decision criteria.
@@ -1,55 +0,0 @@
1
- {
2
- "schema_version": "1.0",
3
- "description": "General ecommerce cookware title phrases. These are seller-language labels, not verified product materials, forms, or buyer queries.",
4
- "entries": [
5
- {"canonical": "平底锅", "facet": "form_claim", "surfaces": ["平底锅"]},
6
- {"canonical": "深煎锅", "facet": "form_claim", "surfaces": ["深煎锅", "加深煎锅"]},
7
- {"canonical": "煎炒锅", "facet": "form_claim", "surfaces": ["煎炒锅"]},
8
- {"canonical": "煎锅", "facet": "form_claim", "surfaces": ["煎锅"]},
9
- {"canonical": "早餐锅", "facet": "form_claim", "surfaces": ["早餐锅", "三合一早餐锅"]},
10
- {"canonical": "牛排锅", "facet": "form_claim", "surfaces": ["牛排锅"]},
11
- {"canonical": "煎蛋锅", "facet": "form_claim", "surfaces": ["煎蛋锅"]},
12
- {"canonical": "烙饼锅", "facet": "form_claim", "surfaces": ["烙饼锅"]},
13
- {"canonical": "玉子烧锅", "facet": "form_claim", "surfaces": ["玉子烧锅", "玉子烧"]},
14
- {"canonical": "蛋饺锅", "facet": "form_claim", "surfaces": ["蛋饺锅"]},
15
- {"canonical": "炒锅", "facet": "form_claim", "surfaces": ["炒锅"]},
16
- {"canonical": "泼油锅", "facet": "form_claim", "surfaces": ["泼油锅", "热油锅"]},
17
- {"canonical": "纯钛", "facet": "material_claim", "surfaces": ["纯钛"]},
18
- {"canonical": "钛陶瓷", "facet": "material_claim", "surfaces": ["钛陶瓷"]},
19
- {"canonical": "钛合金", "facet": "material_claim", "surfaces": ["钛合金"]},
20
- {"canonical": "有钛", "facet": "material_claim", "surfaces": ["有钛"]},
21
- {"canonical": "真钛", "facet": "material_claim", "surfaces": ["真钛"]},
22
- {"canonical": "钛", "facet": "material_claim", "surfaces": ["钛"]},
23
- {"canonical": "铸铁", "facet": "material_claim", "surfaces": ["铸铁"]},
24
- {"canonical": "精铁", "facet": "material_claim", "surfaces": ["精铁"]},
25
- {"canonical": "熟铁", "facet": "material_claim", "surfaces": ["熟铁"]},
26
- {"canonical": "不锈钢", "facet": "material_claim", "surfaces": ["不锈钢"]},
27
- {"canonical": "304不锈钢", "facet": "material_claim", "surfaces": ["304不锈钢"]},
28
- {"canonical": "316L不锈钢", "facet": "material_claim", "surfaces": ["316L不锈钢", "316l不锈钢"]},
29
- {"canonical": "麦饭石", "facet": "material_claim", "surfaces": ["麦饭石"]},
30
- {"canonical": "无涂层", "facet": "surface_claim", "surfaces": ["无涂层", "0涂层", "零涂层"]},
31
- {"canonical": "不粘", "facet": "surface_claim", "surfaces": ["不粘", "不沾"]},
32
- {"canonical": "无氟", "facet": "surface_claim", "surfaces": ["无氟"]},
33
- {"canonical": "蜂窝", "facet": "surface_claim", "surfaces": ["蜂窝"]},
34
- {"canonical": "聚油", "facet": "surface_claim", "surfaces": ["聚油"]},
35
- {"canonical": "火红点", "facet": "surface_claim", "surfaces": ["火红点"]},
36
- {"canonical": "煎蛋", "facet": "use_claim", "surfaces": ["煎蛋"]},
37
- {"canonical": "煎饼", "facet": "use_claim", "surfaces": ["煎饼"]},
38
- {"canonical": "牛排", "facet": "use_claim", "surfaces": ["牛排"]},
39
- {"canonical": "烙饼", "facet": "use_claim", "surfaces": ["烙饼"]},
40
- {"canonical": "早餐", "facet": "use_claim", "surfaces": ["早餐"]},
41
- {"canonical": "辅食", "facet": "use_claim", "surfaces": ["辅食"]},
42
- {"canonical": "炒菜", "facet": "use_claim", "surfaces": ["炒菜"]},
43
- {"canonical": "商用", "facet": "use_claim", "surfaces": ["商用"]},
44
- {"canonical": "加深", "facet": "shape_claim", "surfaces": ["加深"]},
45
- {"canonical": "大号", "facet": "size_claim", "surfaces": ["大号"]},
46
- {"canonical": "小号", "facet": "size_claim", "surfaces": ["小号"]},
47
- {"canonical": "迷你", "facet": "size_claim", "surfaces": ["迷你"]},
48
- {"canonical": "电磁炉", "facet": "stove_claim", "surfaces": ["电磁炉", "电磁炉适用", "电磁炉专用"]},
49
- {"canonical": "燃气灶", "facet": "stove_claim", "surfaces": ["燃气灶", "煤气灶"]},
50
- {"canonical": "新品", "facet": "marketing", "surfaces": ["新品", "年度新品", "新升级"]},
51
- {"canonical": "官方旗舰店", "facet": "marketing", "surfaces": ["官方旗舰店", "旗舰店"]},
52
- {"canonical": "正品", "facet": "marketing", "surfaces": ["正品"]},
53
- {"canonical": "补贴", "facet": "marketing", "surfaces": ["补贴", "政府补贴"]}
54
- ]
55
- }
@@ -1,43 +0,0 @@
1
- # Advertiser analysis method
2
-
3
- Source class: U, confirmed by the user for this Skill's placement module. Apply the method to each input without carrying over sample-specific names, counts, thresholds, or conclusions.
4
-
5
- ## Question and grains
6
-
7
- The module identifies **observed advertising-position participants** in one search export. Keep three populations distinct:
8
-
9
- 1. An advertising appearance is one row in the advertising sheet. Repeated product IDs remain repeated appearances.
10
- 2. An advertised product is one unique `商品ID` in the advertising sheet.
11
- 3. An advertiser shop is one verified operating-shop name in the advertising sheet. Preserve each row's original `店铺名称` as its display label. A known platform display label such as `百亿补贴品牌优选` can be attributed to the actual shop when the same product ID also has an actual-shop display name and every `掌柜名` for that ID matches that actual shop. Keep the source label, resolution basis, and count of affected appearances in the evidence. Other multi-name identities stay unresolved for review; equal names do not verify a legal entity.
12
-
13
- Use the clean natural sheet as a comparison population. Join product overlap by `商品ID`; compare shops by the resolved operating-shop name when the display-label rule is corroborated, otherwise by exact `店铺名称`. Keep source display labels and any remaining cross-placement mismatch visible. Summarize shop type and similar supplied attributes as labels, not proof that a seller owns a brand.
14
-
15
- ## Interpretive questions
16
-
17
- - Breadth and concentration: how many shops and unique products occupy advertising positions? How do shop-level product counts and appearance counts distribute? A sorted full table and cumulative shares let the reader choose the breadth cutoff; do not embed a fixed opportunity threshold.
18
- - Promotion pattern: is an observed shop represented by one product or several? Are particular products repeated in the captured advertising rows? Show both product counts and appearance counts, because one is assortment breadth and the other is only observed placement frequency.
19
- - Natural-position relationship: which advertised products also have a natural row, and which appear only in advertising rows in this export? Do the same exact-name check for shops. This is coexistence in a snapshot, not causal evidence that advertising improved or compensated for natural position.
20
- - Shop-type structure: compare the advertising and natural populations at the **same grain** (shop with shop, unique product with unique product). State the actual field label; do not convert it into a brand/white-label classification without independent evidence.
21
- - Advertiser merchandise layout: for each prominent advertiser in the observed ad-appearance ranking, show its advertised product IDs beside the distinct natural-position products under the same operating-shop name that it did not advertise. Compare the shop's visible natural-product count and `付款人数` sum with the natural-position records of the advertised IDs. A shop's established natural-position traction and the traction of the exact products it advertises answer different questions. Transfer a same-ID appearance into a same-shop subtotal only when its operating-shop identity is corroborated; otherwise keep the product match separate.
22
- - Product traction: read `付款人数` from the first-seen natural row for each product ID, never from an advertising row. For a shop, report the number of natural products alongside the sum and median of their displayed `付款人数`, because a sum grows with assortment breadth. A product with no natural row has unknown natural-position traction, not zero. The time window and whether the same payer bought several products are unspecified, so a sum is only a sum of displayed product values.
23
- - Price positioning: profile unique advertised products using the first advertising appearance's `现价`; preserve any alternate observed ad prices as a quality flag. Choose price-band boundaries after inspecting the current distribution, record those boundaries with the run, and apply the same intervals to the natural comparison population. Compare advertised and non-advertised products within advertiser shops as well as the full search export. The export may contain off-target listings until visual eligibility is checked, so describe this as a search-result price pattern.
24
-
25
- ## Representative-shop selection and interpretation
26
-
27
- Select cases from the full advertiser-shop table, rather than choosing familiar brands in advance. Start with shops prominent by observed ad appearances or unique advertised products, then add contrasting configurations when available: advertised listings that are already prominent in natural-position payment counts; advertised listings that differ from a shop's stronger non-advertised natural listings; a narrow cluster of similar prices versus a broad price ladder; an ad-heavy shop with little natural-position coverage; and a shop whose advertised listings may fall outside the target product. Explain why each case was selected. The case count follows the variety of observed configurations, not a fixed quota. A shop with incomplete same-name natural coverage can illustrate visibility limits but not a weak-sales verdict.
28
-
29
- For each selected shop, build a compact product roster from `ad_products` and `natural_products_of_advertiser_shops`: identifiable product title cue and ID, observed ad price, ad-appearance count, natural-row `付款人数` when present, and whether the product is advertised or only in the same-name natural results. Include every advertised product when the assortment is small; show the strongest or most contrasting non-advertised natural products and state the remaining count. Compare like with like before interpreting prices or payment counts. Titles identify listings and claimed material/function, but do not prove visual form, material authenticity, or consumer need.
30
-
31
- Write three distinct layers for each case:
32
-
33
- 1. **Observed layout:** what the shop puts into advertising positions; which of those products also appear naturally; which visible natural products it leaves unadvertised; where the prices and displayed payment counts sit. Describe the observable configuration (for example, promoting proven products, covering several price tiers, or advertising other products while strong natural listings remain unadvertised).
34
- 2. **Strategy reading:** state the narrow inference this configuration permits and at least one alternative explanation or unknown when intent is material. A snapshot can show product allocation, not budget, objective, conversion, ROI, or whether the placement was the seller's deliberate long-term plan. Repeated ad rows indicate observed frequency only.
35
- 3. **White-label implication:** translate that case into an actionable next research question or competitive boundary. Identify the exact listing/form/price comparison to inspect next, and the evidence needed before entering. An implication must follow from the case; generic exhortations or product ideas unsupported by the export add no value.
36
-
37
- Across cases, compare the observable advertising configurations and explain what they imply for the research sequence. Distinguish the areas already occupied by sellers with visible payment traction from higher-priced or ad-only listings whose demand remains unverified. A candidate opportunity needs later image-based product-form classification, reviews/consumer problems, brand dependence and supply economics; this placement module only tells the investigator where to look.
38
-
39
- ## Conclusion artifact contract
40
-
41
- Write an evidence-backed narrative for later HTML use: an upfront cross-shop finding; a transparent case-selection note; a concise comparison table; substantive individual shop profiles using the three layers above; and a final cross-shop synthesis with prioritized next checks. Keep method and limitations near the relevant claims. Each case states its relevant denominator and can be reconstructed from the JSON's `advertiser_shops`, `ad_products`, `natural_products_of_advertiser_shops`, and `price_bands`. Preserve unavailable natural payments as unknown, not zero. The reader should understand which specific goods each typical shop appears to promote, how that differs from its visible unadvertised assortment, and what the contrast means for white-label research without opening the JSON.
42
-
43
- An advertising-position row does not measure spend, paid impressions, clicks, ROI or campaign duration. A single search export is not a market-wide census or time trend. Product-form and white-label entry conclusions require later image and product analysis.
@@ -1,23 +0,0 @@
1
- # Listing-location analysis method
2
-
3
- Source classes: U for the user-confirmed research question and staged workflow; A for this diagnostic method; E for the observed input field and verifiable script results. Apply the method to each search export without carrying over one search term's region names, counts or opportunity conclusion.
4
-
5
- ## Evidence unit and meaning
6
-
7
- The cleaned natural sheet supplies one first-seen row per product ID. Its `地址` is a listing-export location label. It may describe display, shipment or another platform address convention; this dataset alone cannot establish the actual dispatch warehouse, merchant registration, factory, sourcing channel or production cluster. Preserve the raw address alongside parsed province and city. Standardize whitespace and municipalities; retain unknown and unparsed values instead of guessing a city.
8
-
9
- Use three simultaneous units: unique natural product ID, exact shop name, and exact shop–address pair. A shop may appear in several addresses, so regional shop counts cannot be added into a global shop total. Identify each region's top-shop product share and within-region listing HHI to test whether an apparent cluster is broad or dominated by a few merchants. These are search-listing concentration measures, not platform market shares.
10
-
11
- ## Ordered analysis questions
12
-
13
- 1. **Where are the visible listings?** Count natural products, distinct shops, shop–address pairs and missing or unparsed addresses by province and city/address. Show product share, price quartiles, displayed `付款人数` median and high-payment product count. A larger listing count signals visible supply in this search snapshot, not manufacturing origin or total market scale.
14
- 2. **What do those listings claim to be?** If a title-root artifact from the exact same cleaned workbook exists, join by product ID after verifying the workbook hash and product-title population. Cross region with materially informative root facets; keep the full root–region grid in machine output. For each cell calculate distinct products, distinct shops, within-region coverage, share of the root's products located there, and location quotient (within-region root coverage divided by corpus root coverage). Require at least ten products and three shops before treating a city–root cell as a narrative screening lead; this guard is not statistical significance. Compare the cell's top-shop share to avoid calling one seller a regional specialty. Title roots remain seller language; physical forms require image review.
15
- 3. **What is the visible price and payment pattern?** Use the natural-position price and source `付款人数`, show medians and an all-sample 90th-percentile payment threshold. The source does not specify the payment period. For regional price comparisons, compare within the same title-root proposition and similar price quartile band where sample size permits. Product mixes, rank position and brand presence may confound differences. Never call payment people units sold, GMV or a causal response to region.
16
- 4. **Who appears in advertising positions?** Count advertising appearances, unique advertised product IDs and exact shops separately by their observed address. Record product-ID overlap with natural positions and address differences for the same ID. Repeated ad appearances are not unique products, spend or impressions; ad-only products do not enter natural price/payment counts. Advertising geography adds competitive context, not a purchase or production signal.
17
- 5. **What should be investigated next?** Name contrasting, evidence-backed regional cases: broad merchant participation versus single-shop concentration; title-root specialization versus generic products; meaningful natural-payment records versus listings with little visible traction; advertising-heavy versus naturally represented regions. For white-label selection, turn these into image-review and supplier-verification leads rather than a final region or product decision.
18
-
19
- ## Outputs and QA
20
-
21
- Run `scripts/analyze_geography.py --input CLEANED.xlsx --output-dir NEW_DIR` and optionally `--title-roots PRODUCT_ROOTS.json` from the same workbook. It writes `geography_detail.json` (product, ad appearance, shop–address and joined root evidence) and `geography_summary.json` (region, root–region, ad-region statistics and definitions). Write a separate Markdown conclusion tracing named facts to those outputs. Register all three artifacts under `classify/geography` in the development ledger.
22
-
23
- Reconcile natural IDs and row counts to the clean sheet; verify each region's product count and shop count with independent grouping; inspect multi-address shops and blank/unparsed addresses; verify the optional root hash and product-title join; keep advertising appearances separate from distinct ad products; and sample named conclusion figures against the JSON. If the root artifact is unavailable, complete the standalone geographic analysis and explicitly leave root–region findings unavailable. Reject a mismatched root artifact rather than joining unrelated runs. Preserve approved upstream stages.
@@ -1,27 +0,0 @@
1
- # Sample-derived price-band analysis
2
-
3
- Source classes: U for the user-confirmed dynamic Jenks method and clean-stage eligibility boundary; E for the observed workbook and the documented Jenks algorithm; A for the declared model-complexity and interpretation policy. Apply this method anew to each search export. Never carry over a previous run's numeric boundaries or conclusions.
4
-
5
- ## Population and price meaning
6
-
7
- The fitted population is every unique product ID in the cleaned `自然位` sheet. This module does not decide whether a listing is the target product: if a future search term returns multiple incompatible product types, resolve the intended population in the upstream clean stage and record that decision there. On the current flat-pan test, every cleaned natural product participates. The `广告位` sheet contains display appearances, including repeats and ad-only IDs; fit no boundaries with those rows. Map their observed prices to the natural-derived bands solely for competitive context, preserving both appearance and unique-ad-product counts.
8
-
9
- Fit `现价`, the source's displayed current price. A search result may advertise its cheapest SKU, promotion or a specification unlike another listing. `原价` is not a transaction price. The module requires positive finite current prices and unique natural IDs; fail visibly if those contracts are broken rather than silently dropping rows. Preserve all assignments by ID.
10
-
11
- ## Derive bands
12
-
13
- Use one-dimensional weighted Jenks natural breaks on the logarithm of positive current prices. Repeated identical prices remain in one band. The log scale makes relative price changes comparable across low and high parts of a category; this is an analysis choice, not a universal consumer-psychology law. Optimize within-band squared log-price deviation; do not use equal-width or equal-count buckets.
14
-
15
- Evaluate feasible band counts, each with a minimum sample support of 2% (at least two products) and a maximum candidate count of ten. Start with one band and accept an additional band while its marginal explained-variance gain reaches the declared 0.03 complexity penalty. These are method parameters to be audited and adjusted during Skill development, not fixed yuan thresholds. Publish the full candidate-fit curve and the chosen count. Probe penalties 0.02/0.03/0.04 and perform reproducible bootstrap resampling; if band count or boundaries move substantially, report the result as provisional and examine the source rather than asserting a sharp market boundary. The deterministic script implements and records the exact parameters.
16
-
17
- The boundary is the first observed price in the next band. Intervals are lower-inclusive and upper-exclusive, with an open upper end for the final band. Present actual source-price min/median/max and counts so users can see how the fitted ranges relate to the listings. Avoid cosmetically rounding a fitted boundary to a familiar number unless a later, separately tested consumer-price rule supports it.
18
-
19
- ## Interpret for selection
20
-
21
- For each band, compare natural product count/share, distinct shop count, observed median `付款人数`, and advertising appearance/unique-product presence under the same boundaries. A large band means many visible listings, not automatically more buyer demand. `付款人数` has no verified observation window or exposure denominator, so it is a traction clue, not conversion rate, units, GMV or estimated demand. Ads are placement evidence, not spend, auction pressure or ROI. Explain differences among bands in ordinary language, identify where follow-up SKU/price and visual-form checks would change the selection decision, and do not infer a white-label entry price from the distribution alone.
22
-
23
- ## Output and QA
24
-
25
- Run `scripts/analyze_price_bands.py --input CLEANED.xlsx --output-dir NEW_DIR`. It creates `price_band_detail.json` (one product-band row per natural ID and ad-appearance rows) and `price_band_summary.json` (source hash, method, candidate models, selected boundaries, sensitivity, bootstrap stability, band metrics and reconciliations). Write a separate Markdown conclusion that can stand without the JSON and cite the actual sample figures. Register all three artifacts in the ledger under `classify/price`.
26
-
27
- Verify workbook hash, all natural IDs assigned exactly once, band counts summing to the natural population, advertising appearances summing to the ad sheet, no duplicate-price splits, and boundary intervals covering every displayed current price. Inspect the 0.02/0.03/0.04 sensitivity and bootstrap intervals before phrasing boundaries as stable. If a later visual product-form module finds materially different populations, refit the price bands only after the user approves a new upstream eligibility choice or a distinct within-form analysis; preserve this run's original result.
@@ -1,37 +0,0 @@
1
- # Natural-position title-root analysis
2
-
3
- Source classes: U for the user-confirmed product-to-root evidence table and exploratory statistics; A for the following analysis and dictionary-maintenance design. Apply this method to each input without carrying over one product's sample-specific counts or opportunity conclusion.
4
-
5
- ## Purpose and boundary
6
-
7
- Use only the cleaned `自然位` sheet, one first-seen row per `商品ID`. The input search phrase is an observed buyer query; the words inside product titles are seller-supplied descriptions, claims and search-optimization language. Title-root coverage is therefore **not** buyer query volume. A title-stated form or material is a claim to be checked against images, product details or other evidence, not a verified physical attribute.
8
-
9
- Keep two grains: one product row per unique ID, and one product–canonical-root row per `(商品ID, facet, root)`. The latter retains original title, image URL, price, source `付款人数`, shop and every matching surface/span for convenient filtering. Product fields are duplicated only for viewability; aggregate across distinct product IDs, never by summing the entire exploded root table. A product can belong to several roots and root-level payment sums cannot be added together.
10
-
11
- ## Dictionary lifecycle
12
-
13
- Use a versioned, shareable base lexicon at `references/title-lexicon.json` for phrase protection, aliases and semantic facets. A reviewed optional project lexicon may extend it. At the start of **each run**, merge these read-only lexicons, reject conflicting surface meanings, and save the exact source hashes, entries and tokenizer version in `lexicon_snapshot.json`. Do not rewrite the shared or project lexicon as a side effect of analyzing new titles.
14
-
15
- Build a fresh per-run `lexicon_candidates.json` from frequent unclassified `jieba` segments, with product and shop coverage plus example product IDs. These are candidate additions, not automatic rules. In development mode, inspect candidate phrases, segmentation examples and semantic ambiguity with the user; approved improvements may be added to a reviewed project lexicon or a later separately authorized base-lexicon version. In ordinary run mode, keep candidates in the output for later review while the existing reviewed lexicon supports a low-interaction run. Re-running with an updated lexicon produces a new output directory and records the new dictionary hash.
16
-
17
- The extractor uses a local `jieba` tokenizer for candidate segmentation, while longest protected lexicon phrases preserve domain expressions such as material and form claims. The same title may carry overlapping labels from different facets; within one facet a longer phrase takes precedence over an embedded shorter phrase. `jieba` segmentation is lexical evidence, not a trustworthy semantic category on its own. Preserve original surfaces and normalized-title character spans. Numeric sizes such as `24cm` are separately recognized as size claims. Brand and promotion words remain tagged or unclassified for audit; they are not silently removed from the source.
18
-
19
- ## Statistics and interpretation
20
-
21
- For each root, calculate distinct-product coverage, shop coverage, price quartiles, median and upper-quartile displayed `付款人数`, and the fraction of products above the current dataset's 90th-percentile payment threshold. Show the actual threshold and count because ties can make the fraction differ from exactly 10%. Retain the product ID evidence and leading shops. For each shop, identify both its most common mapped roots and roots whose within-shop product coverage exceeds their corpus-wide coverage. The latter ratio is descriptive and needs a minimum of two shop products and five corpus products; it is not evidence of ad budget or intentional strategy. Show the corresponding visible-product payment values. For cross-facet root pairs, count distinct products carrying both claims; use these combinations to discover product propositions, not to assert a consumer segment.
22
-
23
- Prioritize interpretation questions over a raw frequency list:
24
-
25
- 1. Which roots are nearly universal seller language and therefore weak product differentiators?
26
- 2. Which material/structure/use combinations occupy distinct price ranges and have actual natural-position payment records?
27
- 3. Is an apparent strong root spread across many shops, or concentrated in a few named sellers or brands?
28
- 4. What does one shop emphasize across its assortment, and which of those listings account for its visible payment evidence?
29
- 5. Which roots point to different possible physical forms or off-target products and need image review before comparing them?
30
-
31
- Compare roots within plausible product-form and price groups where possible. A single search snapshot does not establish growth, elasticity, advertising return or unmet demand. Source `付款人数` has an unspecified period; do not rename it sales units or GMV. An observed price/traction contrast may be explained by brand, form, assortment width, search rank or other unobserved factors. Later visual classification is the authority for actual form.
32
-
33
- ## Output and QA
34
-
35
- Run `scripts/analyze_title_roots.py --input CLEANED.xlsx --output-dir NEW_DIR` with optional `--project-lexicon REVIEWED.json`. The new directory contains `product_roots.json`, `root_summary.json`, `lexicon_snapshot.json` and `lexicon_candidates.json`; then write a separate evidence-backed human conclusion for the later report. Use counts and representative product IDs from the JSON, state the selected denominator, and mark proposed product-form or demand interpretations as hypotheses pending image or buyer-search evidence.
36
-
37
- Check that the product count equals the cleaned natural sheet, every product ID is unique, each product–facet–root key appears once, price/payment values trace to the source row, and sampled long phrases, aliases, sizes and promotional words preserve expected boundaries. Inspect high-payment listings, rare forms and candidate terms manually before treating a root as a market signal. A failure of a required dependency or source field stops this module with a specific error; it must not fall back to unrecorded ad hoc segmentation.