Appearance
⚠️ These are raw internal research notes — NOT the domain model. They're the working shorthand behind building Atlas (unverified leads, internal codes, terse phrasing). If you came here to understand the domain, read the plain-language pillars instead (start with Entities). Kept here for the people building this.
PHASE 1 — Corpus-mine deltas (LEADS, re-probe before any edit)
Ground-truth baseline (live DB 2026-07-24): entity 2,438 (company 1,639·person 552·song 125·artist 122); company_type NULL 1,209·product_line 394·brand_owner 27·creative_studio 5·agency 3·sub_brand 1; products 139; campaigns 48 (NO project/partnership_campaign rows); disciplines 158; content 13,944.
A2 — VENDORS / DISCIPLINES / SERVICES / EXECUTIONS ✅ landed
TOP-5 SIGNALS (all = unverified leads):
- Polyhierarchy mandatory — a craft/specialization belongs to SEVERAL disciplines (Motion Graphics ×4). Current 158-node tree can't represent it → needs DAG / many-to-many discipline↔craft. [disciplines-services.csv:2,6,17,50]
- Discipline vocab has a work-side twin (execution tags) + embeds a named CREW-ROLE vocabulary (DP, Colorist, Rigger, Compositor, Storyboard Artist) + media-format per execution — the missing bridge from content_credit(role+discipline) down to per-shot craft roles. [disciplines-services.csv:105,113; execution_discipline_schema.md:1326-1338]
- Actor-type typology ABOVE company_type — Brands·Agencies·Studios·Production·Independent; incl. person-vendors (Independent = solo Designer/Illustrator/Photographer) + 2-level mode/format sub-slug (Design/Graphic; LiveAction/Commercial). Current flat enum can't hold person-vendors or the sub-path. [vendor-categories-ref-usecase*.csv:15-25]
- vendor —serves→ industry/customer-category edge (clientele as a vendor attribute, independent of per-work credits). [vendor-categories-ref-usecase.csv:2]
- Awards/Recognition axis, subject-typed {Org|Individual|Event|Announcement} with Host-Org entities (D&AD/Clio/Effie/Webby…); 138 events + 154 awards. Vendors/individuals WIN recognition. Groupings family lacks this. [execution_discipline_schema.md:174-1309]
Other net-new edges: discipline —exemplified-by→ asset (portfolio/case-study proof link); execution-tag —requires→ crew-role(s); execution-tag —outputs→ media-format; award —hosted-by→ host-org; award —recognizes→ {org|individual|event}. Net-new containers: Service = offer-bundle layer ABOVE discipline; video-treatment/genre cluster (~40 styles: documentary/mockumentary/PSA/UGC…) as a content-treatment axis (NOT a vendor discipline). Vocab-intent: each leaf intends 4 co-facets (description·use-case·media-format·crew-role); the flat "execution tag" list silently MIXES 5 axes (craft·technique·visual-style·genre/treatment·media-format) → to be untangled. CONFLICTS vs current model: tree-vs-DAG; vendor=company vs vendor-can-be-person; flat company_type vs 2-level mode/format; executiontags.csv IS byte-identical to disciplines-services.csv (old intent conflated execution-tag WITH discipline — current split is a deliberate departure). Uncertainty: cross-domain "misfiled" specializations may be dirty data, not intent — read as many-to-many evidence, unconfirmed.
A1 — ENTITIES / PRODUCTS / FEATURES ✅ landed
TOP-5 SIGNALS (leads):
- Product↔brand is a LIFECYCLE (promotion/graduation) governed by an explicit 4-signal test (separate identity/marketing+budget/domain/leadership) + 3-question decision tree; "start all products in products, PROMOTE to sub-brand later." One real thing may hold BOTH a product row AND an entity row at once. Current model has company_type but NO transition semantics + no dual-node rule. → directly answers §5 fork #1. [VIS:84-93,1005-1064]
- product —competes-with→ product (+ company↔company direct/indirect) carrying quantified market-share context — rivalry edge at product granularity, absent from current edges. [MSFTPROD.CSV CategoryCompetitors; COMPSCH:109]
- SERVICES as a first-class offering node distinct from products, bound to agency/creative_studio entities (vendor-side analogue of "entity makes→product"). ⭐CONVERGES with A2's "Service = offer-bundle above discipline." [VIS:1186-1222,1029]
- Product lifecycle STATUS (active/discontinued/deploying) + per-product REVENUE + product's OWN industry/vertical (Azure→Cloud, distinct from owner's industry) + product-category HIERARCHY with M:N assignment (product can hold multiple categories). [MSFTPROD.CSV; VIS:1070-1083,1178-1182]
- Sub-brand/product_line = explicit intermediate TIER; single recursive parent self-FK unifies subsidiaries+sub-brands+product-lines+M&A units; Brand Architecture (branded-house vs house-of-brands, lock-up/co-branding) as the portfolio grouping. [VIS:108-132,1138-1139; COMPACT:52,104-108]
Other net-new: company —spans-multiple→ industry (M:N, not single positioned-in); company —acquired→ company (ownership arriving via an ACQUISITION EVENT = out-of-order fact, fits ASSERTIONS glue); person —role-on→ project/campaign/asset (role on junction); "unified categories table w/ category_type discriminator" floated (product/service/industry as ONE polymorphic classification substrate — maps to CONCEPTS-as-axes). Vocab-intent: product_type (AI Software/Hardware/Subscription/OS…); service_type (Brand&Identity/Verbal/Visual/Marketing/UI-UX…); revenue_tier ($1B+/$10B+); Brand-Architecture variants (hierarchy/family/lock-up); Nomenclature/Naming System as a brand-owned concept spanning product+service+feature names. CONFLICTS: old = 3 tables (companies/products/services) vs current 1 polymorphic entity — old itself wavers (dual product+sub_brand identity on promotion); old taxonomy = 3 flat product-name-polluted columns (Sector/Category/Industry) vs current ordered 4-tier — treat old category VALUES as unreliable data, mine only the STRUCTURE; product owner can be an intermediate sub-brand → multi-hop maker chain. Note: ADDREF ≈ 95% duplicate of VIS (confirms, doesn't add).
A3 — Groupings/Campaigns/Events/Relationship-model — ⏳ running
A3 — Groupings/Campaigns/Events/Relationship-model — ⏳ running
A4 — CONTENT / MOMENTS / CLASSIFICATION / CHANNELS ✅ landed
TOP-5 SIGNALS (leads):
- SEVEN orthogonal axes resolve the ~15-column sprawl — Media Type · Channel · Touchpoint · Platform · Content Type(=editorial purpose) · Asset Type(=form) · Device — each answers ONE question. Two sprawl ROOT CAUSES found: "Content Type" carries two incompatible meanings (editorial-purpose vs content-genre) AND "Media Type" carries two (delivery-mode vs sensory-modality). Media→Channel→Touchpoint→Platform NESTS; File cascades MediaType→AssetType→FileType. → candidate answer to §5 sprawl fork. [schematest222.csv:1; 0918:1; Video.csv:1]
- Route by SOURCE CATEGORY (provenance), not just file format — brand-owned vs aggregator vs news vs financial vs specialized-DB, each w/ its own adapter + extraction focus + brand-resolution + confidence tiers (title-mention 0.9 / credit 0.7 / logo-only 0.5 / else manual). Broader+better frame than the "PDF-vs-TVC format router" gap. [source-pipeline.md:13-44,294-307]
- Event/Group = first-class cross-source container + a concrete grouping RULE —
Eventkeys the working capture model (Google I/O 2024 → blogs+videos+social+pages); should_group = same-brand + topic-sim>0.8 + <7 days + (same-source OR same-campaign), cross-source keyed on identified_campaign. [Touchpoint.csv:225-327; source-pipeline.md:323-377] - Non-video content is NOT atomic — needs a spatial
content_regiongrain — 21 web-page moment types + 13 static/crop moment types decompose pages/images the way scene-detection decomposes video. ⚠CONFLICTS with current video-centric scene-detection-only segment model. [MOMENTS-V12:8-13] - Two missing moment axes: containment + curation-intent — Asset→Sequence→Moment→Element nesting (fits empty parent_segment_id) + an 18-value "Moment Interest Type" (why-SAVED) lens governed by a reuse-value test — a curation dimension separate from what the moment depicts. [MOMENTS-V12:20-34]
Other net-new: Interactive Media as a 5th top modality (games/sims/interactive sites); Fact-vs-Speculation epistemic classifier on content; content-genre library ~120 named types (How-To/Explainer/Demo/Case-Study/White-Paper/Hero-Image/360-View…) — GENRE distinct from editorial-purpose; theme = message-territory 2-level (13 categories→~50 themes) w/ use-case + example — distinct from topic(subject) & content-type(form); motion identity 6-layer cascade (Pillars→NorthStar→Principles→Behaviors→Gestures→System, "one language three dialects"); Post-Date vs Date-Discovered distinct temporal fields; content-genre Media Format is multi-valued (a genre ≠ one medium). CONFLICTS: "Content Type" & "Media Type" each doubly-overloaded (the sprawl root cause); channel column-vs-hierarchy-node; moments video-only vs universal; routing format-vs-provenance reframe. Uncertainty: role+confidence tuples & fact/speculation already partly echo live entity_links/assertions — verify vs live schema before treating as net-new. Archive files read via cat (.llmignore blocks Read on archive/).
A5 — POSITIONING / AUDIENCE / MARKET / THESIS ✅ landed
TOP-5 SIGNALS (leads):
- The SIGNAL/temporal spine is the THESIS and is missing as a pillar. "Bloomberg for brand-creative" = CHANGES over time. Model
Observation→Signal→Insight→ImplicationABOVE assertions, with baselines, time-windows, anomaly-detection ("+300% vol vs 30-day avg"), cross-source correlation as first-class. Current ASSERTIONS glue captures facts-at-a-time but NOT signals/anomalies/baselines. [temporal-theory L20-133; pdf p.8,19] - OCCASION/NEED-STATE = a THIRD positioning grain alongside MARKET (where positioned) + AUDIENCE (who): "when the product should come to mind" (game day, drop day, commute). Extends market≠audience to a TRIAD. Competitor-by-occasion (cannabis bev vs alcohol for same occasion). [chat 20365; 4245-4251]
- Positioning is RELATIONAL/DYNAMIC — add CATEGORY ROLE (creator/defender/extender/premiumizer/normalizer/proof-point/lock-in) + BELIEF-SHIFT (current→desired belief vs barrier, w/ proof). "Positioning-as-a-move," not only "-as-a-node." [chat 11198; doctrine L12]
- TRACKER (user-authored grouping over any classification subset) = the PLG/viral spine — every share = user acquisition; elevates one grouping type to product-defining (matches memory Tracker=realtime-query-board). [pdf p.9-11,28]
- Company & product do NOT share one positioning tree — company ≈2 levels (Industry→Category); product = its OWN 3-level Vertical→Market-Category→Subcategory. Every accrued fact carries EPISTEMIC grade (5-rung evidence ladder + confidence + ~18-tier source-trust). [Category.csv vs chat 20351-20365; doctrine L15-18] Other: Claim—proven_by→Proof; Brand—owns→Distinctive-Brand-Asset; Campaign—has→Enemy/Tension; Agency—wins/loses(AOR)→Brand w/dates; Person—moves-between→Companies; Reception layer (+/- across press/creators/devs/regulators); Content—maps-to→Message; ~10 browse domains (BizProfile·BrandIdentity·Products&Services·Channels·Campaigns&Content·Partnerships&People·Sales·News·Events·Insights·MyTrackers·MyBoards); ICP tiers Free/Pro/Growth/Enterprise. CONFLICTS: positioning depth inconsistent (4 vs 2 vs 3) → company & product need SEPARATE trees; "audience" used 2 senses; "category" overloaded.
A3 — GROUPINGS / CAMPAIGNS / EVENTS / RELATIONSHIP-MODEL ✅ landed (read RM-1..7 console + Joe marks too)
TOP-5 SIGNALS (leads):
- Every entity↔work edge should carry role + confidence + services_rendered + attribution_source + temporal_context, PK-on-role (same entity multiple roles on one work: IBM/sponsor + W+K/creative + Mill/post + Beacon/music). [ref-26 content_item_companies]
- First-class INTER-ENTITY relationship layer NOT mediated by work/grouping — competitor/supplier/client/AOR/M&A/employment w/ strength+trend+dates. [ref-15 relationship_strength/relationship_events]
- Event = 3-tier host/participant graph across YEARS — Observance→Instance(edition)→Participation(14 roles incl host/sponsor/winner/finalist); all pillars hold roles on an edition. [marks RM-1]
- Per-member ROLE within a grouping (hero_film vs supporting vs news_mention) + sequence + late-bind dedup trigger (2 campaign birth-paths share dedup key). [ref-26; RM-7]
- Informational-vs-craft content split + studio-website channel — news/press/features-pages attach to campaigns as INFORMATIONAL, must NOT be forced through a craft/dataviz lens; studio-site scrape = distinct ingest channel. [RM-5 DN-203; R2-7] Corpus explicitly notes CURRENT decisions supersede parts: content_groups "never built" (campaigns-as-container wins, RM-5); projects dropped (Workspace, DN-130); services retired (RM-3); mentions/credits/sponsor NEVER collapsed (RM-2); credit = ONE table content_credit (RM-3).
⚖️ RECONCILIATION vs LIVE DB (probed 2026-07-24) — sorts every signal
A) GENUINELY NET-NEW / UNBUILT (no table exists — real structural gaps)
- ⭐SIGNAL/TEMPORAL spine — ⚠️CORRECTED 2026-07-24 by the census (was wrongly "ZERO tables"): content-anchored signal/observation tables DO exist —
content_observations(~36,315) ·content_signals·content_risk_signals(4,571) ·campaign_intelligence_{runs,claims,evidence_refs}·intelligence_sessions·relationship_events(~1,300) ·news_items. So the raw layer is PARTIALLY BUILT. What is still likely absent = the CROSS-ENTITY derived spine (baselines · anomaly-detection ·Insight→Implicationroll-up over time). Convergent A5+A3+A4 as a THESIS priority, but re-scope the §5 fork from "build it" to "wire/complete it." Re-probecontent_signals/content_observationscolumns + rowcounts before the walk. - OCCASION/NEED-STATE (+category_entry_points) as 3rd positioning grain — no tables. [A5]
- Standing INTER-ENTITY edges (competitor/partner/supplier/client w/ strength/trend) —
relationship_eventsEXISTS (the event-log) but the standing typed-edge table does NOT. Half-built. [A3+A1+A5] - content_region spatial grain for non-video (web/static moments) — no table. [A4+A3]
- distinctive_brand_assets · proof/proofs — no tables. [A5]
- Discipline POLYHIERARCHY (DAG) — creative_disciplines is single-parent
parent_id+levelTREE; many-parent needs a junction. Plus per-shot crew-role vocab (DP/Colorist/Rigger) unmodeled. [A2]
B) STRUCTURALLY EXISTS ALREADY (corpus "net-new" is built; gap = population or a RULE, not schema)
- content_credit HAS role+confidence+provenance+evidence_type+discipline_id (32 rows, discipline_id 0 = EMPTY not missing).
- campaign_companies HAS role_type+specific_role+start_date+end_date.
- event_participations HAS role+placement+award_name+award_category+co_participants+confidence (3-tier + AWARDS already inside it; 10 rows).
- products HAS operates_as_brand+brand_entity_id+parent_product_id+discontinued_date+is_flagship → product→brand promotion + lifecycle + hierarchy = SCHEMA PRESENT; the 4-signal RULE is what's missing.
- trackers + saved_searches EXIST (Tracker/Board PLG spine).
C) CORPUS SUPERSEDED BY A SHIPPED DECISION (do NOT re-add)
- content_groups/content_group_items — NOT built; campaigns-as-container wins (RM-5).
- projects — dropped, reserved for Workspace (DN-130).
- services/company_services — retired (RM-3).
- collapse mentions+credits+sponsor into one polymorphic junction — REJECTED (RM-2 "never collapse"; content_entity=thin mention map w/ role+provenance but NO confidence, content_credit=rich credits, event_participations=sponsor).
- per-asset sponsor — REJECTED (sponsor is event/campaign-anchored).