Decisions & Validation: mc-batch-13-general

Validator output below is produced by reusing Build OS Core's own checkers (validate_artifact.py, shopify_platform_constraints_check.py, schema_validate.py) -- never a hand-maintained UI list.

Artifact validation

project.yaml

No issues.

organization.yaml

No issues.

brand.yaml

warning required-field-missing: required field 'brand.name' is missing/empty (allowed while DRAFT)

Platform constraints (sitemap)

PASS -- no issues.

Schema map checks

PASS -- no issues.

Decision log

artifact_type: decision_log

# Decision Log — mc-batch-13-general (REAL Market Capture evidence)

Downstream Build OS acceptance test for a real 13-product Amazon Market
Capture batch (`mcbatch_0b3e7f5d59d80bb163`, captured 2026-09-07). Not
synthetic test data — every fact traces to a real captured Amazon page.

| Date | Decision | Status | Source |
|---|---|---|---|
| 2026-09-07 | Extended `scripts/market_capture_import.py` to accept a `market_capture_batch_v1` package (in addition to the existing single-package `market_capture_v1` support): validates the batch envelope, imports each of the 13 captures independently via the existing single-package logic, derives one product-id per capture from its ASIN (lowercased, no `--product-id` collision possible), and reports rather than aborts on any individual capture failure. Zero failures on this real batch: all 13 imported, 0 duplicates. 28 new regression tests added (`tests/test_market_capture_import.py`), full suite green. | Standing | market_capture_import.py |
| 2026-09-07 | Wrote `scripts/draft_products_from_evidence.py`: deterministic evidence -> DRAFT Product artifact drafting, reusable across categories (confirmed on footwear, electronics, headwear, disposable cutlery, plush toys, beauty, and a pre-order video game -- 7 different category shapes). Every field is copied verbatim, deterministically derived (slug, parsed price, picked breadcrumb label), or left as the literal `NOT YET CONFIRMED` sentinel -- never guessed. Amazon listing brand/seller/manufacturer intentionally excluded from Product fields (stays in evidence only, per brand-separation requirement); `product.identity.brand_ref` stays `null` for all 13. 23 new regression tests added (`tests/test_draft_products_from_evidence.py`). | Standing | draft_products_from_evidence.py |
| 2026-09-07 | Real evidence-quality finding: two captures (B07Z66MK6L, B0GFN6W8CG) had a "Compatible Devices" Product Overview row containing an embedded Amazon truncation-widget `<script>` body ahead of the real text -- a genuine imperfect-evidence case, not a Market Capture defect this task authorizes fixing. Per this task's own instructions (Market Capture is not to be touched; Build OS must tolerate imperfect evidence), added a Build OS-side defensive noise-value filter (`is_noise_value()`) to the drafting script instead: the contaminated value is dropped, the field falls back to `NOT YET CONFIRMED` rather than propagating markup into a Product artifact. Covered by a dedicated regression test. | Standing | draft_products_from_evidence.py |
| 2026-09-07 | Classified intake as Path D — 13 real Amazon captures, no brand/organization established, `organization.status: NOT_ESTABLISHED`. | Standing | intake-routing |
| 2026-09-07 | Brand Direction drafted from aggregate evidence: 13 DIFFERENT Amazon-listing brands, zero shared manufacturer/seller, at least 7 unrelated product categories. `brand.name` and `brand.positioning` both left `NOT YET CONFIRMED` (structural inference only: assortment shape is consistent with a general-store model, never a claim about brand ownership). No ownership/resale-authorization relationship asserted between any Amazon-listing brand/manufacturer/seller and the eventual Shopify operator. | Standing | brand skill |
| 2026-09-07 | Site Architecture drafted: 7 collections for 13 products (sizes 1–3), grouped by product type/use case evidence, NOT by mechanically copying Amazon breadcrumb taxonomy. One department-level grouping called out explicitly as broader than the others (`computer-laptop-accessories`, spanning a monitor + 2 USB‑C adapters/hubs) since no finer evidence-supported split existed. No brand/store pages built (no confirmed brand). No global FAQ page built (no product has confirmed FAQ inputs yet). Passed `shopify_platform_constraints_check.py`, 0 errors, 22 nodes. | Standing | shopify-ia skill |
| 2026-09-07 | Multi-market path-prefix architecture (`/{market}/...`) documented in `site_architecture/ia.md` as a PROPOSAL/capability demonstration only -- zero market/locale evidence exists in any of the 13 captures (all `amazon_us`). Illustrative market codes (`us`/`ca`/`hk`) explicitly labeled as placeholders, not a confirmed launch plan. `project.target_markets` stays `[]`. | Standing | shopify-ia skill |
| 2026-09-07 | Schema Map drafted: Tier-1 only (CollectionPage, Product, Offer, WebPage), 35 mapping entries. Organization and WebSite omitted (`organization.status: NOT_ESTABLISHED`; no confirmed brand/org name to source `WebSite.name` from). Offer included for all 13 products (unlike `demo-test-b-general`, real confirmed commerce data exists here for every product). Gap found and documented rather than worked around: 4 of 7 collections group multiple products with different `identity.category` values, so no existing canonical field can source a multi-product `CollectionPage.name` -- those 4 entries carry only `@context`/`@type`, `name` omitted rather than fabricated or made to violate the `literal_value` structural-constants-only rule. See `BUILD_PLAN.md` Part 3 for the resulting minimal-contract-improvement recommendation (an optional display-name field on sitemap nodes) -- not implemented in this pass, to keep scope to proving the pipeline. `BreadcrumbList` and per-market localized-content mapping also documented as designed-but-not-yet-instantiated gaps (no owning contract field exists for either yet). Passed `schema_validate.py`, 0 errors. | Standing | schema-org skill |
| 2026-09-07 | No artifact in this project has been human-approved. All remain DRAFT/DIRECTION_DRAFT, below their respective human_approval gates per `core/lifecycle.yaml`. Real evidence, but no promotion to confirmed Product Truth has occurred -- per this task's own ground rules, that step is explicitly out of scope here (John and ChatGPT review first). | Standing | acceptance test run |