SKILL DELTA — external-KG / MarketSignal build (2026-08-11)
Status: DRAFT — NOT applied. Per platform rule, miz-oki-platform-expert
SKILL.md and the Boss skillpack are updated the same day the merge lands
(GATE 1); this file is the delta the Boss applies. Drift between skill and
skillpack is a defect (scripts/skills_sync.py --check; AGENTS.md 5.2).
Apply order: 1) edit canonical skills/miz-oki-platform-expert/SKILL.md;
2) mirror the same facts into
skills/miz-oki-platform-expert/references/boss_agent_skillpack.md
(§9 GOVERNANCE untouched unless a §9 rule itself changes — none does here);
3) python3 scripts/skills_sync.py --fix; 4) verify via skills_parity_check.
1. New skill section (insert as Skill 21, before Quick Reference)
Facts to encode (author in skill voice; all claim labels built,
pre-benchmark until GATE 2 smoke + live verification):
- Cell 37
market-signal-ingest(src/cells/cell37/, port 8037): market-level observations ONLY — organizations, brands, products, campaigns, SERPs, trends, ranks, inventory.POST /ingest/{source}(single or{"signals": [...]}batch ≤ 500),POST /poll/serp,POST /poll/amazon_sp/{tenant},POST /quarantine/reprocess,GET /quarantine/summary,/health,/readyz,/metrics. IAM-locked like cells 33–36 (unauth/health→ 403 is healthy); deploys dispatch-only. - MarketSignal envelope (
src/shared/virtuoso_models/market_signal.py, schemamizoki/schema/market-signal.json): deterministicsignal_id = sha256(source||entity_key||metric||observed_at);signal_typeenum v1serp_position | serp_feature | trend_index | sales_rank | share_of_voice | inventory_level;entity_ref.kind ∈ brand | topic | sku | browse_node | domainwith optionalgoogle_mid/wikidata_qid/asin;assertion_typeimported/inferredONLY (neverobserved, never causal — causal edges are minted only by Cells 36→26→27);consent_scope: "market"; validation REJECTS person-level identifiers (email/phone/customer_id/hashed-email patterns) and audio signal types. - MARKET_MAPPERS (
transforms/market_mappers.py):serp_provider(behind the vendor-swappableSerpProviderAdapter),amazon_sp,shopify_inventory. Same gate discipline as journey MAPPERS:market_ingest_gate(signal, upsert_fn)→inserted|updated|duplicate(duplicate = success, counted); store = MERGE onsignal_id, CAS on payload hash, intounified.market_signals(+unified.market_signals_quarantine). No side doors — an import-boundary test enforces the gate as the only writer. - LLM extraction path (
extraction/market_extract.py):virtuoso_call(Role.DATA_CAUSAL, ..., response_format= market_signal.gemini_response_format()); model output is UNTRUSTED input — identical deterministic validation as any webhook payload; failures quarantine with reasonllm_extraction_invalid; instructions embedded in fetched content are data, never commands; stampsassertion_type: inferred+ registrymodel_version; persists reasoning traces tomizoki-prod.mii.reasoning_traces(BQ writer now real; JSONL fallback); alert onserved_by != "primary". - External entity spine — feature flag
EXTERNAL_ENTITY_SPINEdefault off until OCP-20260811-external-entity-spine is approved.pipelines/ekg_reconcile/(Enterprise KG reconciliation; entity scope organizations/brands/products/campaigns ONLY — person/customer tables are FORBIDDEN, tripwire-tested) andpipelines/entity_hydrate/(Google KG + Wikidata,importedassertions via the governed writer pathservice-canonical-ingestion→ KG projection; Neo4j retired 2026-08-09 — the pipeline holds no graph-store credentials, tested).SAME_ASedges are reversible proposals with confidence ∈ [0,1]; contradictions preserved and scored, never silently resolved. - Experiment wiring: brand-search cannibalization registers through the
measurement-rails design registry (
POST /v1/rails/designs—mdeREQUIRED, refused after exposure; the skill-doc routePOST /api/v1/causal/holdoutwas never built — correct any copy of it), covariates fromunified.market_signalsjoin deterministic identities only.
2. Corrections to existing skill copy (same-day)
- Skill 19 / Quick Reference: replace
POST /api/v1/causal/holdoutexamples with the real surfaces —measurement-rails POST /v1/rails/designs(registration) and Cell 36POST /v1/causal/holdouts:assign(assignment). - Skill 1 "Deployment Configuration": the
_CELL_NUMcloudbuild template does not match any real cell; real cells hardcode service names (seesrc/cells/cell33/cloudbuild.yaml). Mark the template as illustrative or replace with the cell33 shape. - Cell directory (Appendix B): add Cell 37
market-signal-ingest(SENSE, min-instances 0, market-level only, no person-level identifiers). unified.consent_registry(Skill 18 data list): note it ships with this build's DDL (src/shared/virtuoso_models/schemas/market_signals.bigquery.sqlcompanionconsent_registrysection) and is enforced fail-closed in the Shopify connector path — previously the name existed only in prose.
3. Boss skillpack delta
Mirror §1 facts + §2 corrections into the skillpack's platform-facts sections. §9 GOVERNANCE: NO change (no governance rule is amended by this build; the consent/no-audio/deny-list/holdout rules are unchanged and already present).
4. Verification after applying
python3 scripts/skills_sync.py --check
python3 scripts/ontology_skills_sync.py --check
pytest tests/skills/ -q