Bulk delivery design

Adoption Signals warehouse design

Proposed Snowflake views and S3 delivery contract for mapped adoption activity, version histories, and interpretation metadata.

Design statusProposed delivery views. Built on the published adoption/1 row contract. Destination provisioning and rollout are coordinated by arrangement.

01

Four activity tables

Keep aggregate and software-version activity separate at daily and weekly grains.

TableRow grainSeriesStable keyValues
ADOPTION_DAILYArtifact × dayAggregatepoint_idvalue, adjusted_value
ADOPTION_WEEKLYArtifact × Monday–Sunday weekAggregatepoint_idvalue, adjusted_value
ADOPTION_VERSIONS_DAILYArtifact × software version × known dayVersionspoint_idvalue; no aggregate adjustment
ADOPTION_VERSIONS_WEEKLYArtifact × software version × known weekVersionspoint_idvalue; no aggregate adjustment

Facts retain source-native measures and canonical identities. A company publication is the consistency boundary; different companies may have different publication times.

02

Activity fields

Snowflake numeric columns use NUMBER(38,12); the public contract describes their logical decimal type.

FieldLogical typeNullableDefinition
point_idSTRINGNoStable identity from artifact, optional version, grain, and period end; identical to MCP point identity.
company_idSTRINGNoCanonical company join key; ticker is a display attribute.
project_id / artifact_idSTRINGNoPublished identities joining the project and artifact dictionaries.
source / entity_id / metricSTRINGNoEcosystem, exact package/container/provider identity, and source measure.
period_start / period_endDATENoDaily dates coincide; weekly dates describe Monday–Sunday, including a partial first version coverage week.
valueDECIMAL(38,12)Aggregate: yes; versions: noCleaned activity. Preserve fractional observations and known zeroes; reject lossy conversion.
adjusted_valueDECIMAL(38,12)YesAggregate only. Published adjustment with fallback to value. Missing aggregate remains null.
version_id / version / kindSTRINGVersions onlyExact version identity and named/other/unattributed kind. Preserve residual members.

Structured project attributes and event version lists use Snowflake VARIANT and nested values in the proposed S3 representation. first_observed, last_observed, and event date use DATE.

03

Metadata and joins

Deliver interpretation dictionaries with the same publication as the facts.

TableKeyFieldsJoin convention
ADOPTION_PROJECTSproject_idcompany_id, ticker, project_key, name, taxonomy, ownership, ai_profilecompany_id + project_id
ADOPTION_ARTIFACTSartifact_idcompany_id, project_id, source, entity_id, metriccompany_id + artifact_id
ADOPTION_VERSIONSversion_idcompany_id, artifact_id, version, kind, first_observed, last_observedcompany_id + artifact_id + version_id
ADOPTION_EVENTSevent_idcompany_id, project_id, date, subject_key, source, metric, event_type, effect_type, maturity, direction, impact_percent, versions, labelEvent context by project/source/metric/date; not a one-to-one point join

Use company identity and the matching delivery publication when joining. Event joins may return multiple events per observation; aggregate event context before joining it to activity to avoid multiplying values. Taxonomy and ownership describe the delivered mapping, not an as-known-at-the-time corporate history.

04

Proposed warehouse views

Expose typed current views over publication-scoped staging tables.

ADOPTION_ACTIVITY

Union the four fact tables with grain (daily/weekly) and series_kind (aggregate/versions). Keep value, adjusted_value, version identity, and publication_id explicit. Aggregate rows have null version fields; version rows have null adjusted values. Select a series kind before totaling activity.

ADOPTION_ACTIVITY_ENRICHED

Join the activity view to the matching project, artifact, and version dictionaries to add project name, taxonomy, ownership, AI profile, version kind, and observation bounds. Do not join raw event rows into this view.

ADOPTION_DELIVERY_MANIFEST

One published record per company with publication_id, data_schema_version, source_committed_at, delivered_at, table row counts, coverage bounds, and immutable snapshot references. Publication metadata belongs to the delivery layer, separate from the source fact fields.

05

Publication and delivery plan

Make validated company publications visible together, then expose agreed consumer access.

StageDesign
1. ContractAgree covered companies, datasets, history, cadence, destination, and named consumer access.
2. ValidateExpand one committed publication; check keys, dictionary joins, sparse version membership, numeric precision, and per-table counts.
3. StageWrite all facts and dictionaries with one company-scoped publication ID into immutable staging.
4. PublishAdvance the company publication manifest only after every table passes checks. Snowflake consumers join the published manifest; S3 consumers pin the complete manifest.
5. OperateRetry idempotently, remove stale current rows on corrections, retain agreed snapshots, and monitor source-to-delivery lag.

Snowflake: stage immutable publication rows, then switch the manifest pointer and current views through a validated DML transaction. Readers performing multiple queries pin the manifest publication IDs for their extract.

S3: deliver proposed Parquet tables and dictionaries under immutable publication paths, with a manifest containing object identities, checksums, row counts, and schema version. Publish the manifest last and retain the previous complete delivery on failure.

Discuss Snowflake delivery · Discuss S3 delivery.

06

Research conventions

  • Daily history is bounded to 730 days where source coverage supports it. Stored weekly history can extend further and is not rebuilt from the retained daily window.
  • Missing aggregate observations remain null. An absent version point is unknown; known zeroes and residual/unattributed versions remain intact.
  • Version activity is unadjusted. Compare its conservation to cleaned aggregate activity over compatible known coverage, never to adjusted totals.
  • Weekly intervals are Monday–Sunday. An initial version week can have partial coverage; do not describe it as a complete observed week.
  • Current views contain corrected maintained history. Preserve agreed dated snapshots and publication IDs for point-in-time research.
  • Do not combine unlike source units or treat package activity as customers, paid seats, or revenue.

Adoption methodology · MCP access and tools.