@causari/mcp-server 0.1.2 → 0.1.4
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.
- package/CHANGELOG.md +34 -0
- package/NOTICE +1 -1
- package/README.md +3 -3
- package/dist/{chunk-P2UAUQ4G.js → chunk-HQIPIA5N.js} +20 -6
- package/dist/{chunk-7XWPOH6R.js → chunk-KBU67SEH.js} +1201 -85
- package/dist/cli.js +32 -23
- package/dist/index.d.ts +247 -3
- package/dist/index.js +10 -3
- package/dist/smoke.js +142 -168
- package/package.json +7 -5
- package/dist/cli.d.ts +0 -17
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/server.d.ts +0 -12
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js +0 -64
- package/dist/server.js.map +0 -1
- package/dist/smoke.d.ts +0 -6
- package/dist/smoke.d.ts.map +0 -1
- package/dist/smoke.js.map +0 -1
- package/dist/tools.d.ts +0 -27
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -306
- package/dist/tools.js.map +0 -1
- package/dist/validate.d.ts +0 -53
- package/dist/validate.d.ts.map +0 -1
- package/dist/validate.js +0 -126
- package/dist/validate.js.map +0 -1
- package/dist/version.d.ts +0 -13
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -13
- package/dist/version.js.map +0 -1
- package/dist/worker.d.ts +0 -25
- package/dist/worker.d.ts.map +0 -1
- package/dist/worker.js +0 -261
- package/dist/worker.js.map +0 -1
|
@@ -7,11 +7,11 @@ var CKGStore = class {
|
|
|
7
7
|
// outgoing[A] = links where A is the cause; incoming[A] = links where A is the effect.
|
|
8
8
|
outgoing = /* @__PURE__ */ new Map();
|
|
9
9
|
incoming = /* @__PURE__ */ new Map();
|
|
10
|
-
constructor(
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
constructor(seed12) {
|
|
11
|
+
if (seed12) {
|
|
12
|
+
seed12.events?.forEach((e) => this.addEvent(e));
|
|
13
|
+
seed12.causalLinks?.forEach((l) => this.addLink(l));
|
|
14
|
+
seed12.insights?.forEach((i) => this.addInsight(i));
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
17
|
addEvent(e) {
|
|
@@ -1602,10 +1602,11 @@ var computingLinks = [
|
|
|
1602
1602
|
seed3("javascript", "typescript", "caused", "TypeScript is a strict syntactical superset of JavaScript. It exists only because JavaScript needed types at scale.", 0.95),
|
|
1603
1603
|
seed3("java", "postgresql", "enabled", "While PostgreSQL predates Java, the JDBC driver and enterprise Java ecosystem drove PostgreSQL adoption in production systems.", 0.5),
|
|
1604
1604
|
// ── Operating systems & infrastructure ──────────────────────────────
|
|
1605
|
-
seed3("unix", "linux", "inspired", "Torvalds built Linux as a free Unix-like kernel. Same philosophy (everything is a file, pipes, small tools) reimplemented from scratch to avoid AT&T licensing.", 0.
|
|
1605
|
+
seed3("unix", "linux", "inspired", "Torvalds built Linux as a free Unix-like kernel. Same philosophy (everything is a file, pipes, small tools) reimplemented from scratch to avoid AT&T licensing.", 0.8),
|
|
1606
1606
|
seed3("gnu_project", "linux", "enabled", 'GNU provided the userland tools (gcc, bash, coreutils) that Linux needed. "GNU/Linux" \u2014 the kernel alone is useless without the toolchain.', 0.9),
|
|
1607
1607
|
seed3("linux", "aws", "enabled", "AWS runs primarily on Linux. Cloud computing is economically viable because the OS layer is free and customizable."),
|
|
1608
|
-
|
|
1608
|
+
// NOTE: linux--caused-->docker lives in links-cloud-devops.ts (Docker's topical
|
|
1609
|
+
// home). Defined once to avoid a duplicate link id colliding in the store.
|
|
1609
1610
|
seed3("linux", "kubernetes", "enabled", "Kubernetes orchestrates Linux containers. Google's internal Borg system (which inspired K8s) ran on Linux clusters."),
|
|
1610
1611
|
seed3("linux", "golang", "enabled", "Go was designed at Google for Linux server infrastructure. Its concurrency model targets the Linux process/thread model.", 0.6),
|
|
1611
1612
|
// ── Networking chain ───────────────────────────────────────────────
|
|
@@ -2155,7 +2156,7 @@ var webEcosystemLinks = [
|
|
|
2155
2156
|
seed4("webpack", "vite", "inspired", "Vite was explicitly created to solve Webpack's slow dev-server problem. Every Vite design decision (ESM-first, no bundling in dev) is a reaction to Webpack's bundling-first approach.", 0.8),
|
|
2156
2157
|
// ── Framework chain ───────────────────────────────────────────────────
|
|
2157
2158
|
seed4("angularjs", "reactjs", "inspired", "React was built at Facebook as a reaction to AngularJS. Facebook tried Angular, found two-way binding caused too many bugs at scale, and built one-way data flow + virtual DOM as the alternative.", 0.75),
|
|
2158
|
-
seed4("angularjs", "vuejs", "inspired", `Evan You worked with AngularJS at Google and wanted a lighter version. Vue took AngularJS's template syntax and two-way binding but removed the complexity. "Angular but approachable."`, 0.
|
|
2159
|
+
seed4("angularjs", "vuejs", "inspired", `Evan You worked with AngularJS at Google and wanted a lighter version. Vue took AngularJS's template syntax and two-way binding but removed the complexity. "Angular but approachable."`, 0.78),
|
|
2159
2160
|
seed4("angularjs", "angular2", "caused", "Angular 2 is a complete rewrite of AngularJS. The causal link is the brand + team continuity. AngularJS's success justified Google investing in the rewrite.", 0.88),
|
|
2160
2161
|
seed4("typescript", "angular2", "caused", "Angular 2 was built in TypeScript from the ground up. Microsoft and Google co-designed Angular 2 with TypeScript as a first-class citizen. No TypeScript \u2192 Angular 2 would look completely different.", 0.88),
|
|
2161
2162
|
seed4("reactjs", "nextjs", "caused", "Next.js is a React framework \u2014 it requires React as its rendering layer. No React \u2192 no Next.js.", 0.95),
|
|
@@ -2169,7 +2170,7 @@ var webEcosystemLinks = [
|
|
|
2169
2170
|
seed4("reactjs", "astro", "enabled", "Astro was built to work with React (and Vue, Svelte) components as islands. The component model React popularized is what Astro's island architecture imports selectively.", 0.75),
|
|
2170
2171
|
// ── Runtimes chain ────────────────────────────────────────────────────
|
|
2171
2172
|
seed4("nodejs", "deno", "caused", 'Deno was built by Ryan Dahl as a correction of Node.js design mistakes (package.json, node_modules, no default security). Deno requires Node.js to have existed as the "what we learned from."', 0.92),
|
|
2172
|
-
seed4("nodejs", "bun", "inspired", "Bun was created explicitly to replace Node.js with a faster, all-in-one alternative. Every Bun API is a faster drop-in replacement for a Node.js API. Node had to exist as the target.", 0.
|
|
2173
|
+
seed4("nodejs", "bun", "inspired", "Bun was created explicitly to replace Node.js with a faster, all-in-one alternative. Every Bun API is a faster drop-in replacement for a Node.js API. Node had to exist as the target.", 0.78),
|
|
2173
2174
|
seed4("typescript", "deno", "caused", "Deno supports TypeScript natively without a compilation step. TypeScript-first was a core design decision \u2014 deno replaced babel/tsc in the workflow.", 0.85),
|
|
2174
2175
|
seed4("deno", "bun", "inspired", "Bun saw Deno's TypeScript-first, no-node_modules approach and pushed further on performance. Bun uses Zig instead of Rust/V8 to extract maximum speed.", 0.65),
|
|
2175
2176
|
// ── Web platform standards chain ─────────────────────────────────────
|
|
@@ -2178,7 +2179,9 @@ var webEcosystemLinks = [
|
|
|
2178
2179
|
seed4("web", "service_workers", "enabled", "Service Workers extend the web platform with a programmable network layer. They require HTTPS (web security model) and browser APIs. Web platform is the prerequisite.", 0.85),
|
|
2179
2180
|
seed4("web", "web_components", "caused", "Web Components are a native web platform specification \u2014 they exist to give the web its own component model independent of JS frameworks.", 0.88),
|
|
2180
2181
|
seed4("web_components", "reactjs", "inspired", "React's component model was in part inspired by the Web Components specification being developed around the same time. Both solved the same problem \u2014 React won the DX battle.", 0.55),
|
|
2181
|
-
|
|
2182
|
+
// NOTE: service_workers--inspired-->cloudflare_workers lives in
|
|
2183
|
+
// links-cloud-devops.ts (next to cloudflare-->cloudflare_workers). Defined once
|
|
2184
|
+
// to avoid a duplicate link id colliding in the store.
|
|
2182
2185
|
// ── WASM chain ────────────────────────────────────────────────────────
|
|
2183
2186
|
seed4("javascript", "webassembly", "enabled", "WASM runs alongside JavaScript in the browser \u2014 they share the same runtime, call each other's APIs, and compile to the same memory model. JS proved the browser was a viable runtime; WASM extended it.", 0.75),
|
|
2184
2187
|
seed4("webassembly", "astro", "enabled", "Astro uses WASM internally for its build pipeline (Rollup WASM plugin, the compiler itself was ported to WASM). WASM enables fast native-speed build tools in a browser-compatible format.", 0.55),
|
|
@@ -2694,14 +2697,14 @@ var cloudDevopsLinks = [
|
|
|
2694
2697
|
seed5("letsencrypt", "pwa", "enabled", "Service Workers (the core PWA technology) require HTTPS. Let's Encrypt made HTTPS free, enabling any developer to deploy a PWA. Before LE, the $100+/year SSL cert was a barrier.", 0.82),
|
|
2695
2698
|
seed5("letsencrypt", "cloudflare", "enabled", `Cloudflare integrates Let's Encrypt certificates automatically. The "one-click HTTPS" that Cloudflare offers uses LE as the certificate authority.`, 0.75),
|
|
2696
2699
|
seed5("cloudflare", "cloudflare_workers", "caused", "Cloudflare Workers is Cloudflare's compute offering on its existing edge network. The 200+ city PoP infrastructure was already built for CDN; Workers added programmable compute to each PoP.", 0.92),
|
|
2697
|
-
seed5("service_workers", "cloudflare_workers", "inspired", "Cloudflare Workers uses the same event-driven API as browser Service Workers. The fetch event handler pattern was directly borrowed from the Service Worker specification.", 0.
|
|
2700
|
+
seed5("service_workers", "cloudflare_workers", "inspired", "Cloudflare Workers uses the same event-driven API as browser Service Workers. The fetch event handler pattern was directly borrowed from the Service Worker specification.", 0.8),
|
|
2698
2701
|
seed5("cloudflare_workers", "vercel", "accelerated", "Cloudflare Workers demonstrated edge-first deployment; Vercel adopted edge runtimes and edge functions, competing with Cloudflare's edge compute offering. Both accelerated edge adoption.", 0.65),
|
|
2699
2702
|
// ── Platform acceleration ─────────────────────────────────────────────
|
|
2700
2703
|
seed5("aws", "elasticsearch", "enabled", "AWS launched Amazon OpenSearch (Elasticsearch fork). Cloud-native Elasticsearch became possible because AWS provisioned and managed the complex distributed cluster setup for customers.", 0.72),
|
|
2701
2704
|
seed5("aws", "redis", "accelerated", "AWS ElastiCache for Redis made managed Redis available in one click. Self-managed Redis required ops expertise; ElastiCache drove Redis into mainstream backend architecture.", 0.72),
|
|
2702
2705
|
seed5("aws", "kafka", "accelerated", "Amazon MSK (Managed Streaming for Kafka) removed Kafka's operational complexity. Managing Kafka at scale is notoriously hard; MSK drove Kafka adoption beyond large organizations.", 0.7),
|
|
2703
2706
|
seed5("kubernetes", "pulumi", "enabled", "Pulumi's Kubernetes provider is one of its most-used integrations. Kubernetes YAML templating (Helm's weakness) pushed teams toward Pulumi's real-language approach.", 0.7),
|
|
2704
|
-
seed5("terraform", "pulumi", "inspired", `Pulumi was built as a reaction to Terraform's HCL DSL. "Terraform but in TypeScript" is the one-line pitch. Terraform had to exist and dominate before Pulumi could offer a contrast.`, 0.
|
|
2707
|
+
seed5("terraform", "pulumi", "inspired", `Pulumi was built as a reaction to Terraform's HCL DSL. "Terraform but in TypeScript" is the one-line pitch. Terraform had to exist and dominate before Pulumi could offer a contrast.`, 0.75),
|
|
2705
2708
|
seed5("github", "gitlab", "accelerated", "GitLab grew in part as a reaction to GitHub's acquisition by Microsoft (2018). Enterprises wanting self-hosted, integrated DevOps migrated to GitLab.", 0.65),
|
|
2706
2709
|
seed5("pagerduty", "prometheus", "enabled", "Prometheus Alertmanager routes alerts to PagerDuty. The Prometheus \u2192 Alertmanager \u2192 PagerDuty pipeline is the canonical SRE on-call architecture.", 0.72),
|
|
2707
2710
|
seed5("prometheus", "pagerduty", "enabled", "Prometheus fires alerts based on PromQL rules; PagerDuty receives them for routing and escalation. Each tool handles its layer: metrics \u2192 alert \u2192 incident management.", 0.72),
|
|
@@ -3025,13 +3028,13 @@ var databaseEvents = [
|
|
|
3025
3028
|
];
|
|
3026
3029
|
|
|
3027
3030
|
// ../../packages/ckg/dist/seed/links-databases.js
|
|
3028
|
-
var seed6 = (f, t, rel,
|
|
3031
|
+
var seed6 = (f, t, rel, ev12, conf) => ({
|
|
3029
3032
|
id: `${f}--${rel}-->${t}`,
|
|
3030
3033
|
fromEvent: f,
|
|
3031
3034
|
toEvent: t,
|
|
3032
3035
|
relationship: rel,
|
|
3033
3036
|
confidence: conf ?? (rel === "caused" ? 0.9 : 0.8),
|
|
3034
|
-
evidence:
|
|
3037
|
+
evidence: ev12,
|
|
3035
3038
|
sources: [{ type: "demo-seed", reliability: 0.9, citation: "Causari curated baseline \u2014 databases" }],
|
|
3036
3039
|
contributedBy: "system",
|
|
3037
3040
|
validated: true,
|
|
@@ -3081,15 +3084,15 @@ var databaseLinks = [
|
|
|
3081
3084
|
seed6("sqlalchemy", "prisma", "inspired", `Prisma was inspired by SQLAlchemy's concept of type-safe database access, but redesigned for TypeScript's type system. "SQLAlchemy but for TypeScript, with migrations included."`, 0.65),
|
|
3082
3085
|
seed6("typescript", "prisma", "enabled", "Prisma's core value is type safety \u2014 the Prisma Client is a fully typed TypeScript API. Without TypeScript's type system, Prisma's auto-completion and type inference don't exist.", 0.88),
|
|
3083
3086
|
seed6("typescript", "drizzle", "enabled", "Drizzle is TypeScript-first by design \u2014 schema defined in TypeScript, queries return typed results. No TypeScript \u2192 no Drizzle value proposition.", 0.9),
|
|
3084
|
-
seed6("prisma", "drizzle", "inspired", "Drizzle was built as a Prisma alternative for edge environments where Prisma's runtime was too heavy. Every Drizzle design decision is a direct contrast to a Prisma trade-off.", 0.
|
|
3087
|
+
seed6("prisma", "drizzle", "inspired", "Drizzle was built as a Prisma alternative for edge environments where Prisma's runtime was too heavy. Every Drizzle design decision is a direct contrast to a Prisma trade-off.", 0.78),
|
|
3085
3088
|
seed6("nextjs", "prisma", "accelerated", 'Next.js + Prisma is one of the most-documented full-stack TypeScript patterns. Next.js API routes \u2192 Prisma \u2192 PostgreSQL became the default "build a web app" starting point.', 0.78),
|
|
3086
3089
|
seed6("nextjs", "drizzle", "accelerated", "Drizzle's edge-compatibility made it the ORM of choice for Next.js Edge API routes and Vercel Edge Functions, where Prisma's Node.js runtime doesn't work.", 0.75),
|
|
3087
3090
|
seed6("relational_db", "flyway", "caused", "Flyway exists to manage relational database schema migrations. The relational model's schema-ful nature (tables, columns, constraints) is what needs versioning and migration.", 0.88),
|
|
3088
3091
|
seed6("git", "flyway", "enabled", "Flyway's numbered migration files map naturally to Git commits \u2014 each migration is a versioned, ordered change applied once. Git became the outer version control layer for Flyway migrations.", 0.72),
|
|
3089
|
-
seed6("git", "planetscale", "inspired", `PlanetScale's "database branching" concept directly mirrors Git branching: create a branch, apply schema changes, open a deploy request (pull request), merge. Git's workflow applied to database schemas.`, 0.
|
|
3092
|
+
seed6("git", "planetscale", "inspired", `PlanetScale's "database branching" concept directly mirrors Git branching: create a branch, apply schema changes, open a deploy request (pull request), merge. Git's workflow applied to database schemas.`, 0.72),
|
|
3090
3093
|
// ── Firebase chain ─────────────────────────────────────────────────────
|
|
3091
3094
|
seed6("firebase_rtdb", "firebase", "caused", "Firebase Realtime Database was Firebase's original product. Google acquired Firebase and expanded it into a full platform (Firestore, Auth, Functions, Hosting) \u2014 but the realtime DB is why Firebase existed.", 0.92),
|
|
3092
|
-
seed6("firebase", "supabase", "inspired", `Supabase positioned itself as "the open-source Firebase alternative." Firebase's developer-friendly BaaS experience is the benchmark Supabase was designed to match, using open-source tools.`, 0.
|
|
3095
|
+
seed6("firebase", "supabase", "inspired", `Supabase positioned itself as "the open-source Firebase alternative." Firebase's developer-friendly BaaS experience is the benchmark Supabase was designed to match, using open-source tools.`, 0.78),
|
|
3093
3096
|
seed6("nosql_movement", "firebase_rtdb", "enabled", "Firebase's JSON tree is a NoSQL data model. The NoSQL movement's acceptance of schema-less, document-oriented storage validated Firebase's approach to mobile app data.", 0.75),
|
|
3094
3097
|
// ── Graph DB chain ────────────────────────────────────────────────────
|
|
3095
3098
|
seed6("relational_db", "neo4j", "inspired", "Neo4j was built to handle highly connected data that relational databases model poorly \u2014 many-to-many relationships require expensive JOINs in SQL but are native graph traversals in Neo4j.", 0.8),
|
|
@@ -3347,13 +3350,13 @@ var aiToolingEvents = [
|
|
|
3347
3350
|
];
|
|
3348
3351
|
|
|
3349
3352
|
// ../../packages/ckg/dist/seed/links-ai-tooling.js
|
|
3350
|
-
var seed7 = (f, t, rel,
|
|
3353
|
+
var seed7 = (f, t, rel, ev12, conf) => ({
|
|
3351
3354
|
id: `${f}--${rel}-->${t}`,
|
|
3352
3355
|
fromEvent: f,
|
|
3353
3356
|
toEvent: t,
|
|
3354
3357
|
relationship: rel,
|
|
3355
3358
|
confidence: conf ?? (rel === "caused" ? 0.9 : 0.8),
|
|
3356
|
-
evidence:
|
|
3359
|
+
evidence: ev12,
|
|
3357
3360
|
sources: [{ type: "demo-seed", reliability: 0.9, citation: "Causari curated baseline \u2014 AI tooling" }],
|
|
3358
3361
|
contributedBy: "system",
|
|
3359
3362
|
validated: true,
|
|
@@ -3371,7 +3374,7 @@ var aiToolingLinks = [
|
|
|
3371
3374
|
seed7("scikit_learn", "keras", "enabled", `scikit-learn established the "fit/transform/predict" API pattern that Keras and PyTorch adopted. The ergonomic ML API design that made DL accessible was informed by scikit-learn's usability work.`, 0.7),
|
|
3372
3375
|
seed7("scikit_learn", "tensorflow", "enabled", `TensorFlow's high-level APIs (Estimators, then Keras) were influenced by scikit-learn's unified interface. The goal was "ML accessible to everyone" that scikit-learn proved was achievable.`, 0.65),
|
|
3373
3376
|
seed7("tensorflow", "keras", "enabled", "Keras was designed to run on top of TensorFlow (and Theano). TensorFlow is the computation backend; Keras is the ergonomic API layer. In 2019, Keras was merged into TensorFlow 2 as tf.keras.", 0.88),
|
|
3374
|
-
seed7("tensorflow", "pytorch", "inspired", `PyTorch was built as a reaction to TensorFlow's "define-and-run" graph paradigm, which made debugging painful. PyTorch's "define-by-run" dynamic graphs are the anti-TensorFlow design decision.`, 0.
|
|
3377
|
+
seed7("tensorflow", "pytorch", "inspired", `PyTorch was built as a reaction to TensorFlow's "define-and-run" graph paradigm, which made debugging painful. PyTorch's "define-by-run" dynamic graphs are the anti-TensorFlow design decision.`, 0.78),
|
|
3375
3378
|
seed7("pytorch", "tensorflow", "accelerated", "PyTorch's research adoption forced TensorFlow to add eager execution (TF 2.0) and JAX. Competition from PyTorch made TensorFlow significantly better for researchers.", 0.78),
|
|
3376
3379
|
seed7("transformer", "tensorflow", "accelerated", "The Transformer paper was implemented in TensorFlow (the dominant 2017 framework). TensorFlow's adoption accelerated the operationalization of Transformer models in production.", 0.72),
|
|
3377
3380
|
seed7("transformer", "pytorch", "accelerated", "PyTorch became the dominant framework for Transformer research and LLM training. GPT-2, GPT-3, LLaMA, and most SOTA models were trained in PyTorch. The Transformer era is the PyTorch era.", 0.88),
|
|
@@ -3390,7 +3393,7 @@ var aiToolingLinks = [
|
|
|
3390
3393
|
seed7("rag_pattern", "pinecone", "caused", `Pinecone was purpose-built for RAG. The company's pitch was "the vector database for LLM applications" \u2014 retrieval in RAG is the core use case.`, 0.88),
|
|
3391
3394
|
seed7("rag_pattern", "langchain", "accelerated", "RAG is LangChain's primary use case. The framework's retriever abstraction and chain composition were designed around the RAG pattern.", 0.82),
|
|
3392
3395
|
seed7("openai_api", "stable_diffusion", "inspired", "OpenAI's DALL-E (February 2021) proved text-to-image was a viable API product. Stable Diffusion (open-source) was the community's response: replicate that capability, make it accessible to everyone without an API key.", 0.72),
|
|
3393
|
-
seed7("dalle", "stable_diffusion", "inspired", "DALL-E demonstrated the image generation capability. Stable Diffusion was Stability AI's open-source answer: same quality, runnable on your GPU, no per-image pricing.", 0.
|
|
3396
|
+
seed7("dalle", "stable_diffusion", "inspired", "DALL-E demonstrated the image generation capability. Stable Diffusion was Stability AI's open-source answer: same quality, runnable on your GPU, no per-image pricing.", 0.78),
|
|
3394
3397
|
// ── MLOps chain ───────────────────────────────────────────────────────
|
|
3395
3398
|
seed7("kubernetes", "mlflow", "enabled", "MLflow runs well on Kubernetes for multi-user, multi-project ML experiment tracking. K8s provides the isolation and resource management that production MLflow deployments need.", 0.68),
|
|
3396
3399
|
seed7("kubernetes", "ray", "enabled", "Ray can run on Kubernetes (KubeRay operator). Kubernetes provides the cluster management; Ray provides the distributed ML scheduler on top.", 0.78),
|
|
@@ -3645,13 +3648,13 @@ var securityEvents = [
|
|
|
3645
3648
|
];
|
|
3646
3649
|
|
|
3647
3650
|
// ../../packages/ckg/dist/seed/links-security.js
|
|
3648
|
-
var seed8 = (f, t, rel,
|
|
3651
|
+
var seed8 = (f, t, rel, ev12, conf) => ({
|
|
3649
3652
|
id: `${f}--${rel}-->${t}`,
|
|
3650
3653
|
fromEvent: f,
|
|
3651
3654
|
toEvent: t,
|
|
3652
3655
|
relationship: rel,
|
|
3653
3656
|
confidence: conf ?? (rel === "caused" ? 0.9 : 0.8),
|
|
3654
|
-
evidence:
|
|
3657
|
+
evidence: ev12,
|
|
3655
3658
|
sources: [{ type: "demo-seed", reliability: 0.9, citation: "Causari curated baseline \u2014 security" }],
|
|
3656
3659
|
contributedBy: "system",
|
|
3657
3660
|
validated: true,
|
|
@@ -3667,7 +3670,7 @@ var securityLinks = [
|
|
|
3667
3670
|
seed8("ssl_tls", "webauthn", "enabled", "WebAuthn requires HTTPS to function in browsers. The credential API is only available on secure origins. TLS is a prerequisite for the passwordless web.", 0.9),
|
|
3668
3671
|
// ── Auth standards chain ───────────────────────────────────────────────
|
|
3669
3672
|
seed8("saml", "oauth", "enabled", "SAML (2002) proved enterprise identity federation was possible and valuable. OAuth (2007) solved the same problem for web APIs \u2014 lighter weight, JSON-native, browser-friendly.", 0.72),
|
|
3670
|
-
seed8("saml", "oidc", "inspired", "OIDC was designed to replace SAML for consumer applications \u2014 same SSO capability, but REST/JSON instead of XML/SOAP. Every OIDC concept (IdP, SP/RP, claims) has a SAML predecessor.", 0.
|
|
3673
|
+
seed8("saml", "oidc", "inspired", "OIDC was designed to replace SAML for consumer applications \u2014 same SSO capability, but REST/JSON instead of XML/SOAP. Every OIDC concept (IdP, SP/RP, claims) has a SAML predecessor.", 0.78),
|
|
3671
3674
|
seed8("oauth", "oidc", "caused", 'OIDC is an identity layer built on top of OAuth 2.0. OAuth handles authorization; OIDC adds the "who is this user?" layer. No OAuth 2.0 \u2192 no OIDC.', 0.95),
|
|
3672
3675
|
seed8("oauth", "jwt", "enabled", "JWT became the standard format for OAuth 2.0 access tokens and OIDC ID tokens. OAuth needed a compact, verifiable token format; JWT provided it.", 0.88),
|
|
3673
3676
|
seed8("jwt", "oidc", "enabled", "OIDC's ID Token is a JWT. The claims about the authenticated user (sub, email, name) travel in a JWT that the client can verify without a server round-trip.", 0.9),
|
|
@@ -3896,13 +3899,13 @@ var mobileEvents = [
|
|
|
3896
3899
|
];
|
|
3897
3900
|
|
|
3898
3901
|
// ../../packages/ckg/dist/seed/links-mobile.js
|
|
3899
|
-
var seed9 = (f, t, rel,
|
|
3902
|
+
var seed9 = (f, t, rel, ev12, conf) => ({
|
|
3900
3903
|
id: `${f}--${rel}-->${t}`,
|
|
3901
3904
|
fromEvent: f,
|
|
3902
3905
|
toEvent: t,
|
|
3903
3906
|
relationship: rel,
|
|
3904
3907
|
confidence: conf ?? (rel === "caused" ? 0.9 : 0.8),
|
|
3905
|
-
evidence:
|
|
3908
|
+
evidence: ev12,
|
|
3906
3909
|
sources: [{ type: "demo-seed", reliability: 0.9, citation: "Causari curated baseline \u2014 mobile" }],
|
|
3907
3910
|
contributedBy: "system",
|
|
3908
3911
|
validated: true,
|
|
@@ -3921,19 +3924,21 @@ var mobileLinks = [
|
|
|
3921
3924
|
seed9("java", "kotlin", "caused", "Kotlin is a JVM language \u2014 it compiles to the same bytecode as Java and interoperates with Java libraries. No Java/JVM \u2192 no Kotlin. Kotlin exists to improve Java, not replace the JVM.", 0.88),
|
|
3922
3925
|
seed9("kotlin", "android", "accelerated", "Google announced Kotlin as the preferred Android language in 2017. Kotlin's adoption as the official language accelerated Android development quality and reduced boilerplate dramatically.", 0.82),
|
|
3923
3926
|
seed9("kotlin", "jetpack_compose", "caused", "Jetpack Compose is written in Kotlin and requires Kotlin \u2014 composable functions use Kotlin's language features (coroutines, DSL builders, extension functions). No Kotlin \u2192 no Compose.", 0.95),
|
|
3924
|
-
seed9("reactjs", "swiftui", "inspired", `SwiftUI's declarative, component-based model directly mirrors React's. Apple studied React's success and built SwiftUI with the same "UI as a function of state" philosophy.`, 0.
|
|
3925
|
-
seed9("reactjs", "jetpack_compose", "inspired", "Jetpack Compose follows the same declarative UI paradigm as React \u2014 `@Composable` functions mirror React components, state hoisting mirrors React's lifting state up, and unidirectional data flow is the same pattern.", 0.
|
|
3927
|
+
seed9("reactjs", "swiftui", "inspired", `SwiftUI's declarative, component-based model directly mirrors React's. Apple studied React's success and built SwiftUI with the same "UI as a function of state" philosophy.`, 0.78),
|
|
3928
|
+
seed9("reactjs", "jetpack_compose", "inspired", "Jetpack Compose follows the same declarative UI paradigm as React \u2014 `@Composable` functions mirror React components, state hoisting mirrors React's lifting state up, and unidirectional data flow is the same pattern.", 0.78),
|
|
3926
3929
|
// ── Cross-platform frameworks ──────────────────────────────────────────
|
|
3927
|
-
|
|
3930
|
+
// NOTE: reactjs--caused-->react_native lives in links-web-ecosystem.ts (next to
|
|
3931
|
+
// the rest of the React lineage). Defined once to avoid a duplicate link id.
|
|
3928
3932
|
seed9("react_native", "expo", "caused", "Expo is a platform built on React Native. No React Native \u2192 no Expo. Expo's entire purpose is to make React Native easier.", 0.95),
|
|
3929
3933
|
seed9("react_native", "capacitor", "inspired", `Capacitor provides the same "write once, deploy mobile" promise as React Native but for web tech teams that don't want to learn React Native's native module system. Web + native bridge is the shared concept.`, 0.65),
|
|
3930
3934
|
seed9("flutter", "react_native", "inspired", `Flutter was built partly as a reaction to React Native's JavaScript bridge performance bottleneck. Flutter's "compile to native, no bridge" architecture is designed to solve React Native's performance concerns.`, 0.75),
|
|
3931
3935
|
seed9("golang", "flutter", "inspired", "Google created both Go and Dart (Flutter's language) as alternatives to incumbent languages for different domains. Go for server infrastructure; Dart for client UI. Both reflect Google's philosophy of purpose-built languages over incumbent compromise.", 0.45),
|
|
3932
|
-
seed9("electron", "tauri", "inspired", "Tauri was built as a reaction to Electron's main criticism: bundled Chromium makes apps 150MB+. Tauri uses the system webview, keeping apps under 15MB. Every Tauri design decision is an Electron anti-decision.", 0.
|
|
3936
|
+
seed9("electron", "tauri", "inspired", "Tauri was built as a reaction to Electron's main criticism: bundled Chromium makes apps 150MB+. Tauri uses the system webview, keeping apps under 15MB. Every Tauri design decision is an Electron anti-decision.", 0.78),
|
|
3933
3937
|
seed9("rust_1_0", "tauri", "caused", "Tauri uses Rust for its native backend layer. Rust's memory safety and performance characteristics made it ideal for a secure, lightweight desktop app runtime without the overhead of Node.js.", 0.88),
|
|
3934
3938
|
seed9("webassembly", "tauri", "enabled", "Tauri's next-gen architecture (Tauri v2) integrates WASM for cross-platform plugins. WASM enables Tauri plugins to run safely in a sandboxed environment across Windows, macOS, and Linux.", 0.65),
|
|
3935
3939
|
// ── Backend for mobile ─────────────────────────────────────────────────
|
|
3936
|
-
|
|
3940
|
+
// NOTE: firebase_rtdb--caused-->firebase lives in links-databases.ts (Firebase
|
|
3941
|
+
// chain home). Defined once to avoid a duplicate link id colliding in the store.
|
|
3937
3942
|
seed9("firebase", "react_native", "accelerated", 'Firebase + React Native became the default "build an MVP mobile app" stack. Firebase handles auth, data, and push notifications without a custom backend; React Native handles the UI.', 0.78),
|
|
3938
3943
|
seed9("firebase", "expo", "accelerated", "Expo + Firebase is a common combination \u2014 Expo for the cross-platform build/distribution, Firebase for the backend. Both reduce mobile app development to primarily frontend work.", 0.72),
|
|
3939
3944
|
seed9("aws", "firebase", "accelerated", "AWS Amplify (2017) was Amazon's direct response to Firebase \u2014 same BaaS concept for mobile, but on AWS infrastructure. Firebase's success with mobile developers prompted AWS to enter the BaaS market.", 0.68),
|
|
@@ -3950,6 +3955,192 @@ var mobileLinks = [
|
|
|
3950
3955
|
seed9("iphone", "pwa", "accelerated", "Apple's reluctance to support PWA features (push notifications, home screen install) \u2014 and eventual capitulation (iOS 16.4+) \u2014 was driven by iPhone's dominant market position creating PWA adoption pressure.", 0.6)
|
|
3951
3956
|
];
|
|
3952
3957
|
|
|
3958
|
+
// ../../packages/ckg/dist/seed/links-depth.js
|
|
3959
|
+
var seed10 = (fromEvent, toEvent, rel, evidence, confidence) => ({
|
|
3960
|
+
id: `${fromEvent}--${rel}-->${toEvent}`,
|
|
3961
|
+
fromEvent,
|
|
3962
|
+
toEvent,
|
|
3963
|
+
relationship: rel,
|
|
3964
|
+
confidence,
|
|
3965
|
+
evidence,
|
|
3966
|
+
sources: [{ type: "demo-seed", reliability: 0.85, citation: "Causari curated baseline \u2014 cross-domain depth" }],
|
|
3967
|
+
contributedBy: "system",
|
|
3968
|
+
validated: true,
|
|
3969
|
+
scope: "world"
|
|
3970
|
+
});
|
|
3971
|
+
var depthLinks = [
|
|
3972
|
+
seed10("timesharing", "unix", "enabled", "Unix grew directly out of MIT/Bell Labs time-sharing work \u2014 Thompson and Ritchie built it as a leaner answer to the Multics time-sharing project.", 0.85),
|
|
3973
|
+
seed10("mcculloch_pitts", "perceptron", "enabled", "Rosenblatt's Perceptron built directly on the McCulloch-Pitts formal neuron, adding learnable weights to the threshold model.", 0.85),
|
|
3974
|
+
seed10("babbage_engine", "von_neumann_arch", "inspired", "Babbage's Analytical Engine prefigured the stored-program design \u2014 a store, a mill (ALU), and sequential control \u2014 but this is a retrospective architectural parallel: von Neumann's 1945 EDVAC draft is not documented as derived from Babbage, whose work was little-studied until the 1960s.", 0.4),
|
|
3975
|
+
seed10("moores_law", "deep_blue", "enabled", "Deep Blue's exhaustive alpha-beta search ran on ~480 custom chess VLSI chips, exploiting the era's transistor density (the trend Moore's Law tracks) more than Moore's Law as a direct cause.", 0.55),
|
|
3976
|
+
// deep_blue->alphago: canonical copy lives in links-strengthen.ts (fact-checked, 0.60 inspired)
|
|
3977
|
+
seed10("alphago", "alphafold2", "inspired", "AlphaFold 2 came from the same DeepMind deep-learning lineage AlphaGo established, though AlphaFold 2 itself uses an attention-based (Evoformer) architecture rather than AlphaGo's tree search.", 0.6),
|
|
3978
|
+
// transformer->dalle: canonical copy lives in links-strengthen.ts (fact-checked, 0.82 enabled)
|
|
3979
|
+
seed10("gpt3", "github_copilot", "enabled", "GitHub Copilot was powered by OpenAI Codex, a GPT-3 descendant fine-tuned on public source code.", 0.85),
|
|
3980
|
+
seed10("python", "ansible", "enabled", "Ansible is implemented in Python and ships agentless modules run over SSH, leveraging Python's near-universal presence on Unix hosts.", 0.72),
|
|
3981
|
+
seed10("ethernet", "internet", "enabled", "Ethernet became the dominant local-area networking technology, providing the edge connectivity that links end hosts into the internet.", 0.65),
|
|
3982
|
+
seed10("sqlite", "android", "enabled", "SQLite ships as Android's built-in local datastore, making embedded SQL the default persistence layer for Android apps.", 0.7),
|
|
3983
|
+
seed10("sqlite", "iphone", "enabled", "iOS bundles SQLite as the engine beneath Core Data, making it the de facto local store for iPhone apps.", 0.65)
|
|
3984
|
+
];
|
|
3985
|
+
|
|
3986
|
+
// ../../packages/ckg/dist/seed/links-strengthen.js
|
|
3987
|
+
var strengthen = (fromEvent, toEvent, rel, evidence, confidence, source, validated) => ({
|
|
3988
|
+
id: `${fromEvent}--${rel}-->${toEvent}`,
|
|
3989
|
+
fromEvent,
|
|
3990
|
+
toEvent,
|
|
3991
|
+
relationship: rel,
|
|
3992
|
+
confidence,
|
|
3993
|
+
evidence,
|
|
3994
|
+
sources: [source],
|
|
3995
|
+
contributedBy: "expert",
|
|
3996
|
+
validated,
|
|
3997
|
+
scope: "world"
|
|
3998
|
+
});
|
|
3999
|
+
var wiki = (slug) => ({
|
|
4000
|
+
type: "wikipedia",
|
|
4001
|
+
url: `https://en.wikipedia.org/wiki/${slug}`,
|
|
4002
|
+
reliability: 0.75
|
|
4003
|
+
});
|
|
4004
|
+
var paper = (url, citation) => ({
|
|
4005
|
+
type: "academic",
|
|
4006
|
+
url,
|
|
4007
|
+
citation,
|
|
4008
|
+
reliability: 0.95
|
|
4009
|
+
});
|
|
4010
|
+
var strengthenLinks = [
|
|
4011
|
+
// ── Deep Blue: connect the lone symbolic-AI milestone (was orphaned) ──────
|
|
4012
|
+
// Long, indirect 41-year chain through many intermediaries (HiTech, ChipTest)
|
|
4013
|
+
// → conceptual lineage, not direct enablement. Honest call: inspired, low conf.
|
|
4014
|
+
strengthen("dartmouth_conf", "deep_blue", "inspired", "Deep Blue is the high-water mark of the symbolic / search-based AI tradition the Dartmouth founders set in motion (Shannon's 1950 chess paper, Samuel's checkers). The lineage is conceptual and indirect \u2014 Deep Blue's direct ancestry runs through CMU's ChipTest/Deep Thought, four decades and many programs after Dartmouth.", 0.55, wiki("Deep_Blue_(chess_computer)"), false),
|
|
4015
|
+
strengthen("deep_blue", "alphago", "inspired", `Deep Blue (1997, brute-force search) set the "machine beats human champion at a hard game" milestone that AlphaGo (2016) consciously echoed and surpassed \u2014 Go was framed as the game AI explicitly could not brute-force, making it DeepMind's next symbolic target after chess.`, 0.6, wiki("AlphaGo"), false),
|
|
4016
|
+
// GPU compute (not CUDA specifically — AlphaGo also used TPUs). Scope to
|
|
4017
|
+
// training, broaden the mechanism, keep conf in the lower enabled band.
|
|
4018
|
+
strengthen("cuda", "alphago", "enabled", "AlphaGo's policy and value networks were deep CNNs trained on parallel GPU hardware (the AlphaGo Lee distributed system used ~176 GPUs alongside TPUs for play). GPGPU training compute \u2014 of which CUDA is the dominant API \u2014 was a precondition for learning Go evaluation; the attribution is to GPU compute broadly, not CUDA exclusively.", 0.62, wiki("AlphaGo"), false),
|
|
4019
|
+
// ── ImageNet: its images came from the web (was under-linked) ─────────────
|
|
4020
|
+
strengthen("web", "imagenet", "enabled", "ImageNet's 14M images were harvested from web image-search engines and labeled via crowdsourcing on Amazon Mechanical Turk. Without a populated public web of images there was no corpus to collect \u2014 the dataset is a product of the web at scale.", 0.8, paper("https://www.image-net.org/static_files/papers/imagenet_cvpr09.pdf", 'Deng et al., "ImageNet: A Large-Scale Hierarchical Image Database", CVPR 2009'), true),
|
|
4021
|
+
// ── AlphaFold 2: structural-biology + deep-learning lineage (under-linked) ─
|
|
4022
|
+
strengthen("genome", "alphafold2", "enabled", "AlphaFold 2 learns from the Protein Data Bank and builds multiple-sequence alignments over large protein sequence databases (UniRef, BFD) that the genomics era \u2014 Human Genome Project plus cheap sequencing \u2014 made abundant. Those sequence databases are a precondition for training the predictor.", 0.72, wiki("AlphaFold"), false),
|
|
4023
|
+
strengthen("alexnet", "alphafold2", "enabled", "AlphaFold 2 is a deep neural network (attention-based Evoformer). It inherits the post-AlexNet consensus that deep nets + GPU compute + large datasets beat hand-engineered features \u2014 the same methodology shift applied to structural biology.", 0.7, paper("https://www.nature.com/articles/s41586-021-03819-2", 'Jumper et al., "Highly accurate protein structure prediction with AlphaFold", Nature 2021'), true),
|
|
4024
|
+
// ── DALL·E 1 is a transformer (under-linked) ──────────────────────────────
|
|
4025
|
+
// Reviewer note: image generation pre-dates transformers (GANs, VQ-VAE-2), so
|
|
4026
|
+
// the transformer enabled DALL-E 1's specific design — not "caused" text→image.
|
|
4027
|
+
strengthen("transformer", "dalle", "enabled", "DALL\xB7E (2021) is a 12-billion-parameter autoregressive transformer (architecturally akin to GPT-3, but a separate model) trained over sequences of text and image tokens drawn from a discrete VAE codebook. The transformer architecture made DALL\xB7E's specific design practical; it did not invent text-to-image generation (GANs and VQ-VAE-2 preceded it).", 0.82, paper("https://arxiv.org/abs/2102.12092", 'Ramesh et al., "Zero-Shot Text-to-Image Generation" (DALL\xB7E), 2021'), true)
|
|
4028
|
+
];
|
|
4029
|
+
|
|
4030
|
+
// ../../packages/ckg/dist/seed/links-densify.js
|
|
4031
|
+
var densify = (fromEvent, toEvent, rel, evidence, confidence, source, validated) => ({
|
|
4032
|
+
id: `${fromEvent}--${rel}-->${toEvent}`,
|
|
4033
|
+
fromEvent,
|
|
4034
|
+
toEvent,
|
|
4035
|
+
relationship: rel,
|
|
4036
|
+
confidence,
|
|
4037
|
+
evidence,
|
|
4038
|
+
sources: [source],
|
|
4039
|
+
contributedBy: "expert",
|
|
4040
|
+
validated,
|
|
4041
|
+
scope: "world"
|
|
4042
|
+
});
|
|
4043
|
+
var wiki2 = (slug) => ({
|
|
4044
|
+
type: "wikipedia",
|
|
4045
|
+
url: `https://en.wikipedia.org/wiki/${slug}`,
|
|
4046
|
+
reliability: 0.75
|
|
4047
|
+
});
|
|
4048
|
+
var primary = (url, citation) => ({
|
|
4049
|
+
type: "academic",
|
|
4050
|
+
url,
|
|
4051
|
+
citation,
|
|
4052
|
+
reliability: 0.95
|
|
4053
|
+
});
|
|
4054
|
+
var densifyLinks = [
|
|
4055
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4056
|
+
// HARDWARE SUBSTRATE — the deep upstream every "why" chain bottoms out in.
|
|
4057
|
+
// These give container/AI/compute lineages 2–3 extra hops of real depth.
|
|
4058
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4059
|
+
// NOTE: transistor→integrated_circuit and integrated_circuit→moores_law
|
|
4060
|
+
// already exist (caused, well-cited) in the base seed — adding parallel
|
|
4061
|
+
// 'enabled' edges there was redundant and was dropped in self-review.
|
|
4062
|
+
densify("integrated_circuit", "transformer", "accelerated", "Modern Transformer training runs on GPUs/TPUs \u2014 billions of integrated-circuit transistors. The IC miniaturization curve (via Moore's Law) supplied the FLOPs the 2017 architecture needs; attribution is to the broad hardware substrate, not a direct technical lineage \u2014 hence accelerated rather than a tight precondition.", 0.6, wiki2("Integrated_circuit"), false),
|
|
4063
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4064
|
+
// OS / CONTAINER LINEAGE — the "why does Kubernetes exist?" backbone.
|
|
4065
|
+
// Existing: timesharing→unix→linux→docker→kubernetes. Add the parallel
|
|
4066
|
+
// strands (GUI/timesharing roots, cloud pull, Go runtime) for branching.
|
|
4067
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4068
|
+
densify("von_neumann_arch", "unix", "enabled", "Unix is a stored-program operating system: it loads programs and their data into the same addressable memory of a von Neumann machine (the PDP-7/PDP-11). The stored-program model is the architectural precondition for an OS that schedules arbitrary user programs.", 0.7, wiki2("Von_Neumann_architecture"), false),
|
|
4069
|
+
densify("timesharing", "aws", "inspired", "Cloud IaaS is multi-tenant time-sharing at datacenter scale \u2014 many isolated customers billed for slices of shared physical machines. CTSS/Multics established the multi-user-on-shared-hardware model AWS industrialized; the link is conceptual lineage across 45 years, not direct descent.", 0.55, wiki2("Time-sharing"), false),
|
|
4070
|
+
densify("aws", "kubernetes", "accelerated", "On-demand cloud compute made fleets of disposable VMs cheap, making container orchestration \u2014 scheduling and healing many containers across many machines \u2014 a mainstream operational need. Kubernetes descends from Google's internal Borg, not AWS; elastic cloud capacity (AWS being its largest exemplar) accelerated demand for orchestration rather than causing the project.", 0.6, wiki2("Kubernetes"), false),
|
|
4071
|
+
densify("gnu_project", "git", "accelerated", "Git was written as free software under GPLv2 and developed against the GNU userland (bash, coreutils, diff). The GNU/FSF free-software framework Torvalds released Git into helped it spread without licensing friction \u2014 the contrast with proprietary BitKeeper that triggered Git's creation. The GNU toolchain was background context, so accelerated rather than a hard precondition.", 0.6, wiki2("Git"), false),
|
|
4072
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4073
|
+
// NETWORKING → WEB — give the web/http vertical upstream depth.
|
|
4074
|
+
// Existing has internet→web but the protocol stack roots were thin.
|
|
4075
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4076
|
+
densify("ethernet", "web", "accelerated", "Ethernet became the dominant local-area link layer connecting end hosts to internet routers and servers; the web rides on that physical connectivity. The web could have run over other link layers, so this is an enabling-substrate acceleration, not a direct cause of hypertext.", 0.55, wiki2("Ethernet"), false),
|
|
4077
|
+
densify("unix", "internet", "accelerated", "ARPANET (1969) predates the Unix TCP/IP stack, so Unix did not originate the internet \u2014 but Berkeley Unix (4.2BSD, 1983) shipped the reference TCP/IP implementation and the sockets API that became the universal way programs speak TCP/IP, accelerating the proliferation of internet-connected hosts through the 1980s.", 0.65, wiki2("Berkeley_sockets"), false),
|
|
4078
|
+
// NOTE: web→rest_api already exists (enabled) in the base seed; a parallel
|
|
4079
|
+
// 'caused' edge was redundant and was dropped in self-review.
|
|
4080
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4081
|
+
// POSTGRES / RELATIONAL — relational_db→postgresql is the only upstream.
|
|
4082
|
+
// Add the theory root + the SQL-standard cousins so the DB chain branches.
|
|
4083
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4084
|
+
densify("boolean_algebra", "relational_db", "inspired", "Codd's relational model is grounded in first-order predicate logic and set theory; relational algebra and the closed-world query semantics descend from the formal-logic tradition Boole began. The influence is foundational and conceptual, not a direct technical step.", 0.5, wiki2("Relational_model"), false),
|
|
4085
|
+
densify("relational_db", "oauth", "accelerated", "OAuth authorization servers persist clients, scopes, grants, and tokens in some queryable store; relational databases were the default backing store when OAuth servers were built, which made stateful token issuance practical. OAuth is storage-agnostic (Redis or any KV store works), so this is an acceleration context, not a precondition.", 0.5, wiki2("OAuth"), false),
|
|
4086
|
+
densify("oauth", "okta", "enabled", "Okta's identity platform productizes OAuth 2.0 and OIDC as a hosted service \u2014 issuing tokens, managing scopes, and brokering 'sign in with' flows for enterprises. The OAuth standard is the protocol substrate Okta sells access management on top of (alongside the existing SAML/OIDC lineage).", 0.7, wiki2("Okta,_Inc."), false),
|
|
4087
|
+
densify("c_language", "postgresql", "enabled", "PostgreSQL (and its Berkeley POSTGRES ancestor) is written in C; the language gave it the low-level memory and systems control a high-performance database engine needs. C is a direct implementation precondition.", 0.72, wiki2("PostgreSQL"), false),
|
|
4088
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4089
|
+
// RUST — only deg 3, very thin for a top query term. Add the real
|
|
4090
|
+
// motivation (C/C++ memory-unsafety) and real adopters among existing nodes.
|
|
4091
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4092
|
+
// NOTE: c_language→rust_1_0 already exists (enabled) in the base seed; a
|
|
4093
|
+
// parallel 'inspired' edge for the same pair was redundant and was dropped
|
|
4094
|
+
// in self-review (the lineage is already represented).
|
|
4095
|
+
//
|
|
4096
|
+
// NOTE: a linux→rust_1_0 'accelerated' edge was dropped — the only mechanism
|
|
4097
|
+
// (Linux 6.1 kernel Rust support, 2022) post-dates the rust_1_0 event (2015)
|
|
4098
|
+
// by seven years, so it cannot have accelerated Rust 1.0. Flagged by the
|
|
4099
|
+
// independent fact-check reviewer; removed rather than mis-dated.
|
|
4100
|
+
densify("rust_1_0", "deno", "enabled", "Deno's runtime core (deno_core, its Tokio-based async event loop, and the rusty_v8 bindings to the V8 engine) is written in Rust; Rust's memory safety and performance let Ryan Dahl build a secure-by-default runtime without C++. Rust is a direct implementation precondition for Deno.", 0.7, wiki2("Deno_(software)"), false),
|
|
4101
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4102
|
+
// GO — language of cloud infra (docker/k8s/terraform). Wire its C lineage.
|
|
4103
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4104
|
+
densify("c_language", "golang", "inspired", "Go is a deliberate descendant of the C tradition \u2014 Ken Thompson co-created both, Go keeps C's compiled, statically-typed, terse style and is often described as 'C for the 21st century.' The influence is on language design philosophy, not a technical dependency (Go's toolchain is self-hosted in Go).", 0.65, wiki2("Go_(programming_language)"), false),
|
|
4105
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4106
|
+
// GIT — version control; GitLab is a direct Git platform (new pair).
|
|
4107
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4108
|
+
densify("git", "gitlab", "caused", "GitLab is a web-based Git repository manager and DevOps platform; its entire product \u2014 repos, merge requests, CI/CD \u2014 is built on Git's distributed version-control model. Without Git there is no GitLab. (Existing edges into gitlab come from Jenkins/GitHub; this adds the foundational Git dependency.)", 0.92, wiki2("GitLab"), false),
|
|
4109
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4110
|
+
// PYTHON — anchor for data/ML; only deg 6. Add the real ML-stack pull.
|
|
4111
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4112
|
+
densify("python", "pytorch", "enabled", "PyTorch's user-facing API is Python; its define-by-run (eager) design leans on Python's dynamic interpreter for natural control flow, which is much of why researchers preferred it. Python is a direct interface precondition (the compute core is C++/CUDA).", 0.72, wiki2("PyTorch"), false),
|
|
4113
|
+
densify("python", "tensorflow", "enabled", "TensorFlow's primary interface is Python; the framework exposes its C++ execution engine through a Python API that became the lingua franca of ML practitioners. Python is the adoption-driving front end, not the compute core.", 0.7, wiki2("TensorFlow"), false),
|
|
4114
|
+
densify("python", "langchain", "enabled", "LangChain launched as a Python framework, leveraging the ecosystem (requests, pydantic, the ML/data libraries) where LLM application developers already lived. Python is a direct implementation precondition for its initial reach.", 0.7, wiki2("LangChain"), false),
|
|
4115
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4116
|
+
// JS / NODE / V8 — connect the runtime and tooling lineage more deeply.
|
|
4117
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4118
|
+
// NOTE: a google_pagerank→nodejs edge was dropped — the real mechanism is
|
|
4119
|
+
// V8 (Google's JS engine for Chrome, 2008), but the only available source
|
|
4120
|
+
// node is google_pagerank (the 1998 search algorithm), a different entity.
|
|
4121
|
+
// Mapping "Google the company built V8" onto the PageRank node would be an
|
|
4122
|
+
// identity error. Flagged by the reviewer; removed rather than mis-attribute.
|
|
4123
|
+
// (Adding a dedicated V8/Chrome event is out of scope for this depth pass.)
|
|
4124
|
+
densify("git", "npm", "accelerated", "Git-based source hosting (notably GitHub) shaped npm's publish-and-install culture: npm supports installing packages directly from Git repositories, and the ecosystem's open-source distribution grew on Git hosting. npm's core resolution is registry/URL-based, so this is an acceleration context, not a hard precondition.", 0.5, wiki2("Npm"), false),
|
|
4125
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4126
|
+
// TRANSFORMERS / LLM — the most-queried AI vertical. The hop transformer→
|
|
4127
|
+
// gpt2→gpt3→chatgpt is a thin single strand. Add the real parallel causes
|
|
4128
|
+
// (scaling, GPUs, the API) so the LLM neighborhood branches richly.
|
|
4129
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4130
|
+
densify("cuda", "transformer", "enabled", "The 'Attention Is All You Need' Transformer was trained on NVIDIA GPUs (8\xD7 P100), and the architecture's appeal was that its matrix-multiply-heavy attention parallelizes far better on GPUs than the sequential RNNs it replaced. GPU/CUDA compute is a direct training precondition.", 0.78, primary("https://arxiv.org/abs/1706.03762", "Vaswani et al., 'Attention Is All You Need', NeurIPS 2017"), true),
|
|
4131
|
+
densify("transformer", "gpt3", "caused", "GPT-3 is a 175B-parameter decoder-only Transformer; the architecture is its defining substrate, scaled up. Without the 2017 Transformer there is no GPT-3 \u2014 direct technical descent (beyond the existing gpt2\u2192gpt3 scale step).", 0.92, primary("https://arxiv.org/abs/2005.14165", "Brown et al., 'Language Models are Few-Shot Learners' (GPT-3), NeurIPS 2020"), true),
|
|
4132
|
+
densify("imagenet", "transformer", "inspired", "ImageNet/AlexNet established the 'large labeled data + deep nets + GPUs beats hand-engineered features' paradigm that the Transformer extended to sequence data; the methodological precedent (deep learning at scale works) shaped the research program. Conceptual influence, not technical dependency.", 0.5, wiki2("ImageNet"), false),
|
|
4133
|
+
densify("openai_api", "github_copilot", "enabled", "GitHub Copilot was launched on OpenAI Codex, a GPT model served through OpenAI infrastructure; the productized model-serving API (OpenAI API lineage) is what let GitHub ship code completion as a hosted service. Direct serving precondition.", 0.78, wiki2("GitHub_Copilot"), false),
|
|
4134
|
+
densify("transformer", "cursor_ide", "enabled", "Cursor is an AI-first code editor whose completion and chat features are powered by Transformer-based LLMs (GPT-4/Claude); the architecture is the engine of the product. Indirect but direct-in-mechanism: no Transformer LLMs, no Cursor.", 0.72, wiki2("Cursor_(code_editor)"), false),
|
|
4135
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4136
|
+
// CLOUD / DEVOPS cross-links — thicken docker/k8s downstream branches.
|
|
4137
|
+
// ════════════════════════════════════════════════════════════════════════
|
|
4138
|
+
densify("git", "github_actions", "enabled", "GitHub Actions triggers CI/CD workflows on Git events (push, pull_request) against Git repositories; the entire model is built on Git's commit/branch primitives. Git is a direct precondition for the event-driven pipeline.", 0.75, wiki2("GitHub_Actions"), false),
|
|
4139
|
+
densify("docker", "github_actions", "accelerated", "GitHub Actions can run jobs in Docker containers and Actions are commonly packaged as Docker images, which enriched how Actions isolates and distributes build steps. Actions also supports non-container VM runners, so Docker accelerated the containerized-runner model rather than being a hard precondition.", 0.6, wiki2("GitHub_Actions"), false),
|
|
4140
|
+
densify("docker", "argocd", "accelerated", "Argo CD's GitOps loop reconciles Kubernetes manifests and deploys container images from Git; Docker-format (OCI) images are the dominant artifact it ships. Argo CD's core concept is manifest-driven, and any OCI image format works, so Docker's ubiquity accelerated its deployment patterns rather than being a strict precondition.", 0.55, wiki2("Argo_CD"), false),
|
|
4141
|
+
densify("kubernetes", "github_actions", "accelerated", "The need to build, test, and roll out containerized workloads to Kubernetes is a primary use case that drove CI/CD platform adoption; Actions ships first-class Kubernetes deploy tooling. Kubernetes operations are a major demand driver, not a cause of the product.", 0.55, wiki2("GitHub_Actions"), false)
|
|
4142
|
+
];
|
|
4143
|
+
|
|
3953
4144
|
// ../../packages/ckg/dist/seed/index.js
|
|
3954
4145
|
function loadSeed() {
|
|
3955
4146
|
return {
|
|
@@ -3973,7 +4164,10 @@ function loadSeed() {
|
|
|
3973
4164
|
...databaseLinks,
|
|
3974
4165
|
...aiToolingLinks,
|
|
3975
4166
|
...securityLinks,
|
|
3976
|
-
...mobileLinks
|
|
4167
|
+
...mobileLinks,
|
|
4168
|
+
...depthLinks,
|
|
4169
|
+
...strengthenLinks,
|
|
4170
|
+
...densifyLinks
|
|
3977
4171
|
],
|
|
3978
4172
|
insights: seedInsights
|
|
3979
4173
|
};
|
|
@@ -4056,17 +4250,17 @@ function causalChain(store, params) {
|
|
|
4056
4250
|
for (let hop = 1; hop <= depth; hop++) {
|
|
4057
4251
|
const next = [];
|
|
4058
4252
|
for (const id of frontier) {
|
|
4059
|
-
for (const
|
|
4060
|
-
if (!visited.has(
|
|
4061
|
-
visited.add(
|
|
4062
|
-
const
|
|
4063
|
-
if (
|
|
4064
|
-
nodes.push({ event:
|
|
4065
|
-
links.push(
|
|
4066
|
-
next.push(
|
|
4253
|
+
for (const link2 of store.incomingTo(id, minConf)) {
|
|
4254
|
+
if (!visited.has(link2.fromEvent)) {
|
|
4255
|
+
visited.add(link2.fromEvent);
|
|
4256
|
+
const ev12 = store.getEvent(link2.fromEvent);
|
|
4257
|
+
if (ev12) {
|
|
4258
|
+
nodes.push({ event: ev12, hop, direction: "cause", via: link2 });
|
|
4259
|
+
links.push(link2);
|
|
4260
|
+
next.push(ev12.id);
|
|
4067
4261
|
}
|
|
4068
|
-
} else if (!links.find((l) => l.id ===
|
|
4069
|
-
links.push(
|
|
4262
|
+
} else if (!links.find((l) => l.id === link2.id)) {
|
|
4263
|
+
links.push(link2);
|
|
4070
4264
|
}
|
|
4071
4265
|
}
|
|
4072
4266
|
}
|
|
@@ -4081,20 +4275,20 @@ function causalChain(store, params) {
|
|
|
4081
4275
|
for (let hop = 1; hop <= depth; hop++) {
|
|
4082
4276
|
const next = [];
|
|
4083
4277
|
for (const id of frontier) {
|
|
4084
|
-
for (const
|
|
4085
|
-
if (!downVisited.has(
|
|
4086
|
-
downVisited.add(
|
|
4087
|
-
const
|
|
4088
|
-
if (
|
|
4089
|
-
if (!nodes.find((n) => n.event.id ===
|
|
4090
|
-
nodes.push({ event:
|
|
4278
|
+
for (const link2 of store.outgoingFrom(id, minConf)) {
|
|
4279
|
+
if (!downVisited.has(link2.toEvent)) {
|
|
4280
|
+
downVisited.add(link2.toEvent);
|
|
4281
|
+
const ev12 = store.getEvent(link2.toEvent);
|
|
4282
|
+
if (ev12) {
|
|
4283
|
+
if (!nodes.find((n) => n.event.id === ev12.id)) {
|
|
4284
|
+
nodes.push({ event: ev12, hop, direction: "effect", via: link2 });
|
|
4091
4285
|
}
|
|
4092
|
-
if (!links.find((l) => l.id ===
|
|
4093
|
-
links.push(
|
|
4094
|
-
next.push(
|
|
4286
|
+
if (!links.find((l) => l.id === link2.id))
|
|
4287
|
+
links.push(link2);
|
|
4288
|
+
next.push(ev12.id);
|
|
4095
4289
|
}
|
|
4096
|
-
} else if (!links.find((l) => l.id ===
|
|
4097
|
-
links.push(
|
|
4290
|
+
} else if (!links.find((l) => l.id === link2.id)) {
|
|
4291
|
+
links.push(link2);
|
|
4098
4292
|
}
|
|
4099
4293
|
}
|
|
4100
4294
|
}
|
|
@@ -4121,10 +4315,10 @@ function historicalResonance(store, params) {
|
|
|
4121
4315
|
score += insight.predictiveValue * 0.2;
|
|
4122
4316
|
const exemplarEventIds = /* @__PURE__ */ new Set();
|
|
4123
4317
|
for (const linkId of insight.instances) {
|
|
4124
|
-
const
|
|
4125
|
-
if (
|
|
4126
|
-
exemplarEventIds.add(
|
|
4127
|
-
exemplarEventIds.add(
|
|
4318
|
+
const link2 = store.getLink(linkId);
|
|
4319
|
+
if (link2) {
|
|
4320
|
+
exemplarEventIds.add(link2.fromEvent);
|
|
4321
|
+
exemplarEventIds.add(link2.toEvent);
|
|
4128
4322
|
}
|
|
4129
4323
|
}
|
|
4130
4324
|
const exemplarEvents = Array.from(exemplarEventIds).map((id) => store.getEvent(id)).filter((e) => e !== void 0).sort((a, b) => a.yearNum - b.yearNum).slice(0, 4);
|
|
@@ -4193,7 +4387,7 @@ function orgKnowledge(store, params) {
|
|
|
4193
4387
|
events: [],
|
|
4194
4388
|
causalContext: [],
|
|
4195
4389
|
available: false,
|
|
4196
|
-
message: "No org-scoped knowledge graph configured for this org.
|
|
4390
|
+
message: "No org-scoped knowledge graph configured for this org. Enterprise tier feature \u2014 see ADR-0004 Phase 4."
|
|
4197
4391
|
};
|
|
4198
4392
|
}
|
|
4199
4393
|
const result = queryEvents(store, {
|
|
@@ -4215,7 +4409,7 @@ function predictScenarios(store, params) {
|
|
|
4215
4409
|
domains: params.domains,
|
|
4216
4410
|
maxResults: 5
|
|
4217
4411
|
});
|
|
4218
|
-
const
|
|
4412
|
+
const inHorizon = store.allEvents().filter((e) => {
|
|
4219
4413
|
if (e.forecastConfidence === void 0)
|
|
4220
4414
|
return false;
|
|
4221
4415
|
if (e.yearNum > horizon + 10)
|
|
@@ -4224,10 +4418,14 @@ function predictScenarios(store, params) {
|
|
|
4224
4418
|
if (!e.domains.some((d) => params.domains.includes(d)))
|
|
4225
4419
|
return false;
|
|
4226
4420
|
}
|
|
4421
|
+
return true;
|
|
4422
|
+
});
|
|
4423
|
+
const tokens = tokenize(situationText);
|
|
4424
|
+
const lexicallyRelevant = inHorizon.filter((e) => {
|
|
4227
4425
|
const txt = `${e.title} ${e.description} ${e.tags.join(" ")}`.toLowerCase();
|
|
4228
|
-
|
|
4229
|
-
return tokens.some((t) => txt.includes(t)) || tokens.length === 0;
|
|
4426
|
+
return tokens.some((t) => txt.includes(t));
|
|
4230
4427
|
});
|
|
4428
|
+
const forecastEvents = lexicallyRelevant.length > 0 ? lexicallyRelevant : inHorizon;
|
|
4231
4429
|
const scenarios = [];
|
|
4232
4430
|
const optimistic = forecastEvents.filter((e) => (e.forecastConfidence ?? 0) >= 0.6 && e.impactScore >= 0.7).sort((a, b) => b.impactScore - a.impactScore).slice(0, 4);
|
|
4233
4431
|
if (optimistic.length > 0) {
|
|
@@ -4251,9 +4449,10 @@ function predictScenarios(store, params) {
|
|
|
4251
4449
|
}
|
|
4252
4450
|
const disrupted = forecastEvents.filter((e) => (e.forecastConfidence ?? 0) < 0.5).sort((a, b) => b.impactScore - a.impactScore).slice(0, 3);
|
|
4253
4451
|
if (disrupted.length > 0) {
|
|
4452
|
+
const avgConfidence = avg(forecastEvents.map((e) => e.forecastConfidence));
|
|
4254
4453
|
scenarios.push({
|
|
4255
4454
|
name: "Discontinuous Shift",
|
|
4256
|
-
probability:
|
|
4455
|
+
probability: Math.max(0, Math.min(1, 1 - avgConfidence)),
|
|
4257
4456
|
reasoning: "Low individual-confidence events with high impact, if realized, produce non-linear outcomes. Historically, such events (printing press, transformer architecture) were under-predicted by mainstream forecasts.",
|
|
4258
4457
|
historicalBasis: resonance.matches.map((m) => m.insight.pattern).slice(0, 3),
|
|
4259
4458
|
events: disrupted
|
|
@@ -4273,6 +4472,915 @@ function avg(nums) {
|
|
|
4273
4472
|
return nums.reduce((a, b) => a + b, 0) / nums.length;
|
|
4274
4473
|
}
|
|
4275
4474
|
|
|
4475
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/events.js
|
|
4476
|
+
var src8 = {
|
|
4477
|
+
type: "demo-seed",
|
|
4478
|
+
reliability: 0.85,
|
|
4479
|
+
citation: "Causari curated pack \u2014 World Cup 2026"
|
|
4480
|
+
};
|
|
4481
|
+
function ev10(e) {
|
|
4482
|
+
return { ...e, scope: "world", sources: [src8] };
|
|
4483
|
+
}
|
|
4484
|
+
var worldcupEvents = [
|
|
4485
|
+
// ── Origins: folk game → codified sport (pre-1900) ───────────────────
|
|
4486
|
+
ev10({
|
|
4487
|
+
id: "folk-football",
|
|
4488
|
+
title: "Folk Football",
|
|
4489
|
+
description: "For centuries, towns across medieval Britain and Europe played chaotic, rule-less mob football \u2014 unlimited players, no fixed pitch, frequent injury. It was a shared cultural impulse with no codified system, so it could not scale beyond the village.",
|
|
4490
|
+
yearNum: 1400,
|
|
4491
|
+
yearLabel: "pre-1800s",
|
|
4492
|
+
precision: "century",
|
|
4493
|
+
domains: ["culture"],
|
|
4494
|
+
impactScore: 0.5,
|
|
4495
|
+
tags: ["football", "folk", "origins", "mob-football", "medieval"]
|
|
4496
|
+
}),
|
|
4497
|
+
ev10({
|
|
4498
|
+
id: "public-school-football",
|
|
4499
|
+
title: "Public School Football Codes",
|
|
4500
|
+
description: "In 19th-century England, individual public schools (Eton, Rugby, Harrow) each wrote their own football rules. The incompatibility between codes \u2014 especially handling the ball \u2014 created the pressing need for a single shared rulebook.",
|
|
4501
|
+
yearNum: 1840,
|
|
4502
|
+
yearLabel: "1840s",
|
|
4503
|
+
precision: "decade",
|
|
4504
|
+
domains: ["culture", "systems"],
|
|
4505
|
+
impactScore: 0.55,
|
|
4506
|
+
tags: ["football", "rules", "public-school", "rugby", "england"]
|
|
4507
|
+
}),
|
|
4508
|
+
ev10({
|
|
4509
|
+
id: "fa-codification-1863",
|
|
4510
|
+
title: "FA Codification (Laws of the Game)",
|
|
4511
|
+
description: "The Football Association codified a single set of rules in 1863, banning handling and the most violent play \u2014 the split that separated association football from rugby. A shared rulebook turned a fragmented folk activity into a system that could scale across clubs, cities, and eventually nations.",
|
|
4512
|
+
yearNum: 1863,
|
|
4513
|
+
yearLabel: "1863",
|
|
4514
|
+
precision: "year",
|
|
4515
|
+
domains: ["culture", "systems"],
|
|
4516
|
+
impactScore: 0.85,
|
|
4517
|
+
tags: ["football", "rules", "codification", "fa", "england", "laws-of-the-game"]
|
|
4518
|
+
}),
|
|
4519
|
+
ev10({
|
|
4520
|
+
id: "professionalism-1885",
|
|
4521
|
+
title: "Legalization of Professionalism",
|
|
4522
|
+
description: "The FA legalized paid players in 1885 after northern English clubs openly paid working-class talent. Professionalism converted football from a gentleman's pastime into a labour market \u2014 the first step toward the player-as-economic-asset that defines the modern game.",
|
|
4523
|
+
yearNum: 1885,
|
|
4524
|
+
yearLabel: "1885",
|
|
4525
|
+
precision: "year",
|
|
4526
|
+
domains: ["economy", "culture"],
|
|
4527
|
+
impactScore: 0.6,
|
|
4528
|
+
tags: ["football", "professionalism", "labour", "economy", "england"]
|
|
4529
|
+
}),
|
|
4530
|
+
ev10({
|
|
4531
|
+
id: "football-league-1888",
|
|
4532
|
+
title: "Football League Founded",
|
|
4533
|
+
description: "The Football League (1888) introduced regular, scheduled, competitive fixtures with league tables. Predictable recurring matches created reliable gate revenue and mass spectator habits \u2014 the commercial template every later professional league copied.",
|
|
4534
|
+
yearNum: 1888,
|
|
4535
|
+
yearLabel: "1888",
|
|
4536
|
+
precision: "year",
|
|
4537
|
+
domains: ["economy", "culture", "systems"],
|
|
4538
|
+
impactScore: 0.62,
|
|
4539
|
+
tags: ["football", "league", "competition", "commercial", "spectator"]
|
|
4540
|
+
}),
|
|
4541
|
+
// ── Internationalization & FIFA (1900s-1920s) ────────────────────────
|
|
4542
|
+
ev10({
|
|
4543
|
+
id: "british-empire-football-spread",
|
|
4544
|
+
title: "Football Spreads Along Trade & Empire Routes",
|
|
4545
|
+
description: "British sailors, engineers, traders, and teachers carried football to South America (Argentina, Uruguay, Brazil) and continental Europe in the late 1800s. The codified game travelled with British commerce, seeding the rival football cultures that would later contest the World Cup.",
|
|
4546
|
+
yearNum: 1890,
|
|
4547
|
+
yearLabel: "1880s-1900s",
|
|
4548
|
+
precision: "decade",
|
|
4549
|
+
domains: ["geopolitics", "culture", "economy"],
|
|
4550
|
+
impactScore: 0.66,
|
|
4551
|
+
tags: ["football", "globalization", "empire", "trade", "south-america"]
|
|
4552
|
+
}),
|
|
4553
|
+
ev10({
|
|
4554
|
+
id: "fifa-founded-1904",
|
|
4555
|
+
title: "FIFA Founded",
|
|
4556
|
+
description: "Seven European nations founded the F\xE9d\xE9ration Internationale de Football Association in Paris in 1904 to govern matches between countries. A single international body was the precondition for any genuine world championship \u2014 without it, cross-border football stayed ad hoc.",
|
|
4557
|
+
yearNum: 1904,
|
|
4558
|
+
yearLabel: "1904",
|
|
4559
|
+
precision: "year",
|
|
4560
|
+
domains: ["systems", "geopolitics", "culture"],
|
|
4561
|
+
impactScore: 0.8,
|
|
4562
|
+
tags: ["fifa", "governance", "international", "football", "paris"]
|
|
4563
|
+
}),
|
|
4564
|
+
ev10({
|
|
4565
|
+
id: "olympic-football-1908",
|
|
4566
|
+
title: "Olympic Football Tournament",
|
|
4567
|
+
description: "Football became a full Olympic medal event from 1908, run under FIFA from 1914. The Olympic tournaments proved there was global appetite for international football competition \u2014 and exposed the limits of an amateur-only event, motivating a professional world championship.",
|
|
4568
|
+
yearNum: 1908,
|
|
4569
|
+
yearLabel: "1908",
|
|
4570
|
+
precision: "year",
|
|
4571
|
+
domains: ["culture", "geopolitics"],
|
|
4572
|
+
impactScore: 0.58,
|
|
4573
|
+
tags: ["olympics", "football", "international", "amateur", "tournament"]
|
|
4574
|
+
}),
|
|
4575
|
+
// ── First World Cups (1930-1950s) ────────────────────────────────────
|
|
4576
|
+
ev10({
|
|
4577
|
+
id: "first-world-cup-1930",
|
|
4578
|
+
title: "First FIFA World Cup (Uruguay 1930)",
|
|
4579
|
+
description: "FIFA president Jules Rimet launched the first World Cup in Uruguay in 1930 with 13 teams \u2014 open to professionals, unlike the Olympics. It established the recurring four-year world championship format that has run ever since and made FIFA the dominant force in the global game.",
|
|
4580
|
+
yearNum: 1930,
|
|
4581
|
+
yearLabel: "1930",
|
|
4582
|
+
precision: "year",
|
|
4583
|
+
domains: ["culture", "geopolitics", "systems"],
|
|
4584
|
+
impactScore: 0.88,
|
|
4585
|
+
tags: ["world-cup", "fifa", "1930", "uruguay", "rimet", "tournament"]
|
|
4586
|
+
}),
|
|
4587
|
+
ev10({
|
|
4588
|
+
id: "world-cup-soft-power-1934",
|
|
4589
|
+
title: "World Cup as State Propaganda (Italy 1934)",
|
|
4590
|
+
description: "Mussolini's Italy hosted and won the 1934 World Cup, using it as a showcase for the fascist state. It was the first clear demonstration that hosting the tournament could project national power \u2014 a soft-power logic that has shaped host bidding ever since.",
|
|
4591
|
+
yearNum: 1934,
|
|
4592
|
+
yearLabel: "1934",
|
|
4593
|
+
precision: "year",
|
|
4594
|
+
domains: ["geopolitics", "culture"],
|
|
4595
|
+
impactScore: 0.6,
|
|
4596
|
+
tags: ["world-cup", "soft-power", "propaganda", "italy", "nationalism", "hosting"]
|
|
4597
|
+
}),
|
|
4598
|
+
ev10({
|
|
4599
|
+
id: "maracanazo-1950",
|
|
4600
|
+
title: "Maracanazo (Brazil 1950)",
|
|
4601
|
+
description: "Uruguay beat host Brazil in front of ~200,000 fans at the Maracan\xE3 in 1950, a national trauma still invoked in Brazil. It cemented the World Cup as an event capable of defining national identity and collective memory \u2014 raising the cultural stakes of hosting and winning.",
|
|
4602
|
+
yearNum: 1950,
|
|
4603
|
+
yearLabel: "1950",
|
|
4604
|
+
precision: "year",
|
|
4605
|
+
domains: ["culture"],
|
|
4606
|
+
impactScore: 0.55,
|
|
4607
|
+
tags: ["world-cup", "brazil", "uruguay", "maracana", "1950", "identity"]
|
|
4608
|
+
}),
|
|
4609
|
+
// ── Broadcast era: TV makes football global (1950s-1980s) ────────────
|
|
4610
|
+
ev10({
|
|
4611
|
+
id: "tv-broadcast-1954",
|
|
4612
|
+
title: "First Televised World Cup (1954)",
|
|
4613
|
+
description: "The 1954 World Cup in Switzerland was the first broadcast on television. TV detached the audience from the stadium gate \u2014 for the first time the global reach of a match was limited by signal, not seating \u2014 and set football on the path to becoming a media product.",
|
|
4614
|
+
yearNum: 1954,
|
|
4615
|
+
yearLabel: "1954",
|
|
4616
|
+
precision: "year",
|
|
4617
|
+
domains: ["technology", "culture"],
|
|
4618
|
+
impactScore: 0.7,
|
|
4619
|
+
tags: ["world-cup", "television", "broadcast", "1954", "media", "switzerland"]
|
|
4620
|
+
}),
|
|
4621
|
+
ev10({
|
|
4622
|
+
id: "satellite-broadcast-1970",
|
|
4623
|
+
title: "First Satellite / Color World Cup (Mexico 1970)",
|
|
4624
|
+
description: "The 1970 World Cup in Mexico was broadcast live worldwide via satellite, much of it in color. A single match could now be watched simultaneously across continents \u2014 turning the tournament into a genuinely global shared event and a premium global advertising surface.",
|
|
4625
|
+
yearNum: 1970,
|
|
4626
|
+
yearLabel: "1970",
|
|
4627
|
+
precision: "year",
|
|
4628
|
+
domains: ["technology", "culture", "economy"],
|
|
4629
|
+
impactScore: 0.74,
|
|
4630
|
+
tags: ["world-cup", "satellite", "color-tv", "1970", "mexico", "global-broadcast"]
|
|
4631
|
+
}),
|
|
4632
|
+
ev10({
|
|
4633
|
+
id: "havelange-presidency-1974",
|
|
4634
|
+
title: "Jo\xE3o Havelange Becomes FIFA President",
|
|
4635
|
+
description: "Havelange took the FIFA presidency in 1974 on a platform of expanding the game commercially and beyond Europe. He brought in corporate sponsorship and TV-rights deals at scale, transforming FIFA from a sporting federation into a global commercial enterprise.",
|
|
4636
|
+
yearNum: 1974,
|
|
4637
|
+
yearLabel: "1974",
|
|
4638
|
+
precision: "year",
|
|
4639
|
+
domains: ["economy", "geopolitics", "systems"],
|
|
4640
|
+
impactScore: 0.68,
|
|
4641
|
+
tags: ["fifa", "havelange", "commercialization", "sponsorship", "governance"]
|
|
4642
|
+
}),
|
|
4643
|
+
ev10({
|
|
4644
|
+
id: "fifa-sponsorship-1978",
|
|
4645
|
+
title: "Corporate Sponsorship Model (Coca-Cola / Adidas)",
|
|
4646
|
+
description: "From the late 1970s FIFA signed long-term global partnerships with Coca-Cola, Adidas, and others. Guaranteed sponsorship revenue, independent of gate receipts, gave FIFA the financial base to expand the tournament and reach new markets \u2014 the money engine of the modern World Cup.",
|
|
4647
|
+
yearNum: 1978,
|
|
4648
|
+
yearLabel: "1970s-1980s",
|
|
4649
|
+
precision: "decade",
|
|
4650
|
+
domains: ["economy"],
|
|
4651
|
+
impactScore: 0.66,
|
|
4652
|
+
tags: ["fifa", "sponsorship", "coca-cola", "adidas", "commercialization", "revenue"]
|
|
4653
|
+
}),
|
|
4654
|
+
ev10({
|
|
4655
|
+
id: "expansion-24-teams-1982",
|
|
4656
|
+
title: "World Cup Expands to 24 Teams (1982)",
|
|
4657
|
+
description: "The finals grew from 16 to 24 teams in 1982, adding more slots for Africa, Asia, and CONCACAF. Expansion was driven by Havelange's promise to non-European federations and the commercial logic that more nations means more engaged markets \u2014 the first of several expansions.",
|
|
4658
|
+
yearNum: 1982,
|
|
4659
|
+
yearLabel: "1982",
|
|
4660
|
+
precision: "year",
|
|
4661
|
+
domains: ["systems", "geopolitics", "economy"],
|
|
4662
|
+
impactScore: 0.6,
|
|
4663
|
+
tags: ["world-cup", "expansion", "24-teams", "1982", "globalization"]
|
|
4664
|
+
}),
|
|
4665
|
+
// ── Commercialization & globalization (1990s) ────────────────────────
|
|
4666
|
+
ev10({
|
|
4667
|
+
id: "usa-1994-hosting",
|
|
4668
|
+
title: "World Cup in the USA (1994)",
|
|
4669
|
+
description: "FIFA awarded the 1994 World Cup to the United States \u2014 a country without a top-tier professional league \u2014 explicitly to open the large US market. Record attendances followed, and the bid required the US to launch a professional league, directly birthing MLS.",
|
|
4670
|
+
yearNum: 1994,
|
|
4671
|
+
yearLabel: "1994",
|
|
4672
|
+
precision: "year",
|
|
4673
|
+
domains: ["geopolitics", "economy", "culture"],
|
|
4674
|
+
impactScore: 0.66,
|
|
4675
|
+
tags: ["world-cup", "usa", "1994", "market-expansion", "hosting"]
|
|
4676
|
+
}),
|
|
4677
|
+
ev10({
|
|
4678
|
+
id: "mls-founded-1996",
|
|
4679
|
+
title: "Major League Soccer Founded",
|
|
4680
|
+
description: "MLS launched in 1996 as a condition of the 1994 World Cup bid, giving the US a durable top-flight league. It built the domestic football infrastructure \u2014 stadiums, audiences, players \u2014 that underpins the United States' role as a 2026 co-host.",
|
|
4681
|
+
yearNum: 1996,
|
|
4682
|
+
yearLabel: "1996",
|
|
4683
|
+
precision: "year",
|
|
4684
|
+
domains: ["economy", "culture"],
|
|
4685
|
+
impactScore: 0.55,
|
|
4686
|
+
tags: ["mls", "usa", "league", "1996", "infrastructure"]
|
|
4687
|
+
}),
|
|
4688
|
+
ev10({
|
|
4689
|
+
id: "bosman-ruling-1995",
|
|
4690
|
+
title: "Bosman Ruling",
|
|
4691
|
+
description: "A 1995 European Court of Justice ruling let out-of-contract players move freely between EU clubs and struck down limits on foreign EU players. It demolished the old transfer-restriction system, exploded player wages and transfer fees, and globalized squad composition across European football.",
|
|
4692
|
+
yearNum: 1995,
|
|
4693
|
+
yearLabel: "1995",
|
|
4694
|
+
precision: "year",
|
|
4695
|
+
domains: ["economy", "geopolitics", "systems"],
|
|
4696
|
+
impactScore: 0.7,
|
|
4697
|
+
tags: ["bosman", "transfer", "labour", "eu", "economy", "free-movement"]
|
|
4698
|
+
}),
|
|
4699
|
+
ev10({
|
|
4700
|
+
id: "champions-league-1992",
|
|
4701
|
+
title: "UEFA Champions League Rebrand",
|
|
4702
|
+
description: "The European Cup was rebranded as the Champions League in 1992 with a group stage and a lucrative TV/sponsorship package. It concentrated money and the best players in a handful of elite clubs, accelerating the commercial and talent gap that reshaped the global game.",
|
|
4703
|
+
yearNum: 1992,
|
|
4704
|
+
yearLabel: "1992",
|
|
4705
|
+
precision: "year",
|
|
4706
|
+
domains: ["economy", "culture"],
|
|
4707
|
+
impactScore: 0.6,
|
|
4708
|
+
tags: ["champions-league", "uefa", "club-football", "commercialization", "tv-rights"]
|
|
4709
|
+
}),
|
|
4710
|
+
ev10({
|
|
4711
|
+
id: "galactico-globalization-2000",
|
|
4712
|
+
title: 'Global Star Economy ("Gal\xE1cticos")',
|
|
4713
|
+
description: "Around 2000, post-Bosman wage inflation and global TV reach let top clubs assemble multinational squads of global superstars. Players became transnational brands, and football talent flowed from every continent into a few European leagues \u2014 deepening the global integration of the sport.",
|
|
4714
|
+
yearNum: 2e3,
|
|
4715
|
+
yearLabel: "2000s",
|
|
4716
|
+
precision: "decade",
|
|
4717
|
+
domains: ["economy", "culture"],
|
|
4718
|
+
impactScore: 0.55,
|
|
4719
|
+
tags: ["globalization", "transfers", "galacticos", "wages", "brands", "stars"]
|
|
4720
|
+
}),
|
|
4721
|
+
// ── Global tournament, new hosts (2000s-2010s) ───────────────────────
|
|
4722
|
+
ev10({
|
|
4723
|
+
id: "korea-japan-2002",
|
|
4724
|
+
title: "First Asian World Cup (Korea/Japan 2002)",
|
|
4725
|
+
description: "The 2002 World Cup, co-hosted by South Korea and Japan, was the first held in Asia and the first with two host nations. It proved both that the tournament could be exported beyond its European/American heartland and that co-hosting across countries was logistically workable \u2014 a template for 2026.",
|
|
4726
|
+
yearNum: 2002,
|
|
4727
|
+
yearLabel: "2002",
|
|
4728
|
+
precision: "year",
|
|
4729
|
+
domains: ["geopolitics", "culture"],
|
|
4730
|
+
impactScore: 0.6,
|
|
4731
|
+
tags: ["world-cup", "asia", "co-hosting", "2002", "korea", "japan"]
|
|
4732
|
+
}),
|
|
4733
|
+
ev10({
|
|
4734
|
+
id: "south-africa-2010",
|
|
4735
|
+
title: "First African World Cup (South Africa 2010)",
|
|
4736
|
+
description: "South Africa 2010 was the first World Cup on the African continent, awarded under FIFA's rotation policy. It demonstrated FIFA's commitment to spreading hosting globally as a development and soft-power tool, reinforcing the expectation that hosting rotates across regions.",
|
|
4737
|
+
yearNum: 2010,
|
|
4738
|
+
yearLabel: "2010",
|
|
4739
|
+
precision: "year",
|
|
4740
|
+
domains: ["geopolitics", "culture"],
|
|
4741
|
+
impactScore: 0.6,
|
|
4742
|
+
tags: ["world-cup", "africa", "south-africa", "2010", "rotation", "soft-power"]
|
|
4743
|
+
}),
|
|
4744
|
+
ev10({
|
|
4745
|
+
id: "goal-line-tech-2014",
|
|
4746
|
+
title: "Goal-Line Technology Introduced (2014)",
|
|
4747
|
+
description: "FIFA adopted goal-line technology at the 2014 World Cup after high-profile officiating errors. It marked FIFA's shift toward accepting technology inside the laws of the game, opening the door to the more intrusive video review that followed.",
|
|
4748
|
+
yearNum: 2014,
|
|
4749
|
+
yearLabel: "2014",
|
|
4750
|
+
precision: "year",
|
|
4751
|
+
domains: ["technology", "systems"],
|
|
4752
|
+
impactScore: 0.5,
|
|
4753
|
+
tags: ["goal-line", "technology", "officiating", "2014", "rules"]
|
|
4754
|
+
}),
|
|
4755
|
+
ev10({
|
|
4756
|
+
id: "var-2018",
|
|
4757
|
+
title: "Video Assistant Referee (VAR) at the World Cup",
|
|
4758
|
+
description: "VAR debuted at a World Cup in 2018, letting officials review key decisions on video. It changed the texture of officiating and fan experience, and confirmed that technology-mediated decisions are now part of the tournament \u2014 a precondition for further tech adoption in 2026.",
|
|
4759
|
+
yearNum: 2018,
|
|
4760
|
+
yearLabel: "2018",
|
|
4761
|
+
precision: "year",
|
|
4762
|
+
domains: ["technology", "systems", "culture"],
|
|
4763
|
+
impactScore: 0.52,
|
|
4764
|
+
tags: ["var", "technology", "officiating", "2018", "video-review"]
|
|
4765
|
+
}),
|
|
4766
|
+
// ── Governance crisis & reform (2010s) ───────────────────────────────
|
|
4767
|
+
ev10({
|
|
4768
|
+
id: "fifa-corruption-2015",
|
|
4769
|
+
title: "FIFA Corruption Scandal (2015)",
|
|
4770
|
+
description: "A 2015 US Department of Justice investigation indicted senior FIFA officials for decades of bribery around media rights and host selection, toppling president Sepp Blatter. The scandal forced governance reforms and a more transparent, expansion-friendly host-selection process.",
|
|
4771
|
+
yearNum: 2015,
|
|
4772
|
+
yearLabel: "2015",
|
|
4773
|
+
precision: "year",
|
|
4774
|
+
domains: ["geopolitics", "economy", "systems"],
|
|
4775
|
+
impactScore: 0.6,
|
|
4776
|
+
tags: ["fifa", "corruption", "scandal", "2015", "blatter", "governance"]
|
|
4777
|
+
}),
|
|
4778
|
+
ev10({
|
|
4779
|
+
id: "infantino-presidency-2016",
|
|
4780
|
+
title: "Gianni Infantino Becomes FIFA President",
|
|
4781
|
+
description: "Infantino won the FIFA presidency in 2016 promising reform and, crucially, expansion of the World Cup to grow revenue and votes from smaller federations. His expansion agenda is the direct political driver of the 48-team 2026 format.",
|
|
4782
|
+
yearNum: 2016,
|
|
4783
|
+
yearLabel: "2016",
|
|
4784
|
+
precision: "year",
|
|
4785
|
+
domains: ["geopolitics", "systems", "economy"],
|
|
4786
|
+
impactScore: 0.58,
|
|
4787
|
+
tags: ["fifa", "infantino", "governance", "2016", "expansion", "reform"]
|
|
4788
|
+
}),
|
|
4789
|
+
// ── Road to 2026 ─────────────────────────────────────────────────────
|
|
4790
|
+
ev10({
|
|
4791
|
+
id: "expansion-48-teams-2017",
|
|
4792
|
+
title: "FIFA Approves 48-Team World Cup (2017)",
|
|
4793
|
+
description: "In 2017 the FIFA Council voted to expand the finals from 32 to 48 teams starting in 2026. More slots \u2014 especially for Africa, Asia, and CONCACAF \u2014 broadened global participation and revenue, but required a host able to stage a far larger tournament.",
|
|
4794
|
+
yearNum: 2017,
|
|
4795
|
+
yearLabel: "2017",
|
|
4796
|
+
precision: "year",
|
|
4797
|
+
domains: ["systems", "geopolitics", "economy"],
|
|
4798
|
+
impactScore: 0.72,
|
|
4799
|
+
tags: ["world-cup", "expansion", "48-teams", "2017", "fifa", "format"]
|
|
4800
|
+
}),
|
|
4801
|
+
ev10({
|
|
4802
|
+
id: "united-bid-2018",
|
|
4803
|
+
title: "United Bid Wins 2026 Hosting Rights",
|
|
4804
|
+
description: `In 2018 FIFA awarded the 2026 World Cup to the "United" bid of the USA, Canada, and Mexico over Morocco. The three nations' existing stadiums and infrastructure made them uniquely able to absorb a 48-team, 104-match tournament \u2014 the practical reason a tri-nation host won.`,
|
|
4805
|
+
yearNum: 2018,
|
|
4806
|
+
yearLabel: "2018",
|
|
4807
|
+
precision: "year",
|
|
4808
|
+
domains: ["geopolitics", "economy", "systems"],
|
|
4809
|
+
impactScore: 0.68,
|
|
4810
|
+
tags: ["world-cup", "2026", "united-bid", "hosting", "usa", "canada", "mexico"]
|
|
4811
|
+
}),
|
|
4812
|
+
ev10({
|
|
4813
|
+
id: "tri-nation-hosting-2026",
|
|
4814
|
+
title: "Tri-Nation Hosting Model (USA/Canada/Mexico)",
|
|
4815
|
+
description: "For the first time the World Cup is split across three countries in 2026, with the bulk of matches in the USA. The model reflects both the scale demanded by 48 teams and the co-hosting precedent set in 2002 \u2014 sharing logistics and risk across nations.",
|
|
4816
|
+
yearNum: 2026,
|
|
4817
|
+
yearLabel: "2026",
|
|
4818
|
+
precision: "year",
|
|
4819
|
+
domains: ["geopolitics", "systems"],
|
|
4820
|
+
impactScore: 0.62,
|
|
4821
|
+
tags: ["world-cup", "2026", "tri-nation", "co-hosting", "usa", "canada", "mexico"]
|
|
4822
|
+
}),
|
|
4823
|
+
ev10({
|
|
4824
|
+
id: "world-cup-2026",
|
|
4825
|
+
title: "FIFA World Cup 2026",
|
|
4826
|
+
description: "The 2026 FIFA World Cup is the first 48-team tournament and the first hosted by three nations (USA, Canada, Mexico), expanding to 104 matches. It is the culmination of a 160-year arc from codified folk football to a globalized, commercialized, technology-mediated mega-event.",
|
|
4827
|
+
yearNum: 2026,
|
|
4828
|
+
yearLabel: "2026",
|
|
4829
|
+
precision: "year",
|
|
4830
|
+
domains: ["culture", "geopolitics", "economy"],
|
|
4831
|
+
impactScore: 0.82,
|
|
4832
|
+
tags: ["world-cup", "2026", "fifa", "48-teams", "usa", "canada", "mexico", "tournament"]
|
|
4833
|
+
}),
|
|
4834
|
+
ev10({
|
|
4835
|
+
id: "mexico-three-time-host-2026",
|
|
4836
|
+
title: "Mexico Becomes First Three-Time Host",
|
|
4837
|
+
description: "With 2026, Mexico becomes the first country to host (or co-host) the World Cup three times, after 1970 and 1986. Its proven stadium infrastructure and broadcast history from earlier tournaments made it a low-risk partner in the United bid.",
|
|
4838
|
+
yearNum: 2026,
|
|
4839
|
+
yearLabel: "2026",
|
|
4840
|
+
precision: "year",
|
|
4841
|
+
domains: ["geopolitics", "culture"],
|
|
4842
|
+
impactScore: 0.5,
|
|
4843
|
+
tags: ["world-cup", "2026", "mexico", "hosting", "three-time-host"]
|
|
4844
|
+
}),
|
|
4845
|
+
ev10({
|
|
4846
|
+
id: "womens-game-globalization-2019",
|
|
4847
|
+
title: "Women's World Cup Global Breakthrough",
|
|
4848
|
+
description: "The 2019 Women's World Cup drew record global audiences and intensified debates on pay equity and investment. Its commercial breakthrough broadened football's global market and audience base, part of the wider globalization that the 2026 expansion seeks to monetize.",
|
|
4849
|
+
yearNum: 2019,
|
|
4850
|
+
yearLabel: "2019",
|
|
4851
|
+
precision: "year",
|
|
4852
|
+
domains: ["culture", "economy"],
|
|
4853
|
+
impactScore: 0.5,
|
|
4854
|
+
tags: ["womens-football", "world-cup", "2019", "globalization", "equity"]
|
|
4855
|
+
}),
|
|
4856
|
+
ev10({
|
|
4857
|
+
id: "streaming-rights-2022",
|
|
4858
|
+
title: "Streaming-Era Media Rights",
|
|
4859
|
+
description: "By the 2020s, World Cup media rights increasingly flowed through streaming platforms and digital broadcasters alongside traditional TV. The shift to streaming widened global access and reshaped the revenue model that funds tournament expansion.",
|
|
4860
|
+
yearNum: 2022,
|
|
4861
|
+
yearLabel: "2020s",
|
|
4862
|
+
precision: "decade",
|
|
4863
|
+
domains: ["technology", "economy", "culture"],
|
|
4864
|
+
impactScore: 0.5,
|
|
4865
|
+
tags: ["streaming", "media-rights", "broadcast", "digital", "revenue"]
|
|
4866
|
+
})
|
|
4867
|
+
];
|
|
4868
|
+
|
|
4869
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/events-live.js
|
|
4870
|
+
function wiki3(url, citation) {
|
|
4871
|
+
return { type: "wikipedia", url, reliability: 0.9, citation };
|
|
4872
|
+
}
|
|
4873
|
+
var WC = "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup";
|
|
4874
|
+
var GROUP_A = "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup_Group_A";
|
|
4875
|
+
var GROUP_B = "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup_Group_B";
|
|
4876
|
+
var GROUP_D = "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup_Group_D";
|
|
4877
|
+
var R32 = "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup_round_of_32";
|
|
4878
|
+
function ev11(e) {
|
|
4879
|
+
return { ...e, scope: "world" };
|
|
4880
|
+
}
|
|
4881
|
+
var worldcupLiveEvents = [
|
|
4882
|
+
// ── Host nations' standout group-stage results (all REAL, sourced) ─────────
|
|
4883
|
+
ev11({
|
|
4884
|
+
id: "wc2026-mexico-2-0-south-africa",
|
|
4885
|
+
title: "Mexico open WC2026 with a 2\u20130 win over South Africa",
|
|
4886
|
+
description: "In the opening match of the 2026 World Cup at Estadio Azteca in Mexico City, co-host Mexico beat South Africa 2\u20130. Juli\xE1n Qui\xF1ones opened the scoring in the 9th minute. The result is the tournament's first and set the tone for Group A.",
|
|
4887
|
+
yearNum: 2026,
|
|
4888
|
+
yearLabel: "2026",
|
|
4889
|
+
precision: "day",
|
|
4890
|
+
domains: ["culture", "geopolitics"],
|
|
4891
|
+
impactScore: 0.78,
|
|
4892
|
+
tags: ["world-cup", "2026", "mexico", "south-africa", "opening-match", "group-a", "result"],
|
|
4893
|
+
sources: [wiki3(GROUP_A, "Wikipedia: 2026 FIFA World Cup Group A \u2014 Mexico vs South Africa 2\u20130 (opening match, June 11, 2026, Estadio Azteca). Cites FIFA/BBC.")],
|
|
4894
|
+
date: "2026-06-11",
|
|
4895
|
+
dateLabel: "June 11, 2026",
|
|
4896
|
+
status: "completed",
|
|
4897
|
+
entities: ["Mexico", "South Africa", "Group A", "Estadio Azteca"],
|
|
4898
|
+
whyItMatters: "The first result of a 48-team, tri-nation World Cup. A clean home win puts co-host Mexico in control of Group A and gives the tournament a confident, on-script opening night.",
|
|
4899
|
+
nextWatchpoints: ["Mexico vs South Korea (June 18)", "Can South Africa recover after the opening loss?"]
|
|
4900
|
+
}),
|
|
4901
|
+
ev11({
|
|
4902
|
+
id: "wc2026-usa-4-1-paraguay",
|
|
4903
|
+
title: "USA beat Paraguay 4\u20131 in their WC2026 opener",
|
|
4904
|
+
description: "Co-host the United States opened their home World Cup with an emphatic 4\u20131 win over Paraguay in Group D. The result was the kind of statement performance a host nation needs to galvanise a home crowd at the start of the tournament.",
|
|
4905
|
+
yearNum: 2026,
|
|
4906
|
+
yearLabel: "2026",
|
|
4907
|
+
precision: "day",
|
|
4908
|
+
domains: ["culture", "geopolitics"],
|
|
4909
|
+
impactScore: 0.7,
|
|
4910
|
+
tags: ["world-cup", "2026", "usa", "paraguay", "group-d", "host", "result"],
|
|
4911
|
+
sources: [wiki3(GROUP_D, "Wikipedia: 2026 FIFA World Cup Group D \u2014 United States vs Paraguay 4\u20131 (June 12, 2026). Cites FIFA.")],
|
|
4912
|
+
date: "2026-06-12",
|
|
4913
|
+
dateLabel: "June 12, 2026",
|
|
4914
|
+
status: "completed",
|
|
4915
|
+
entities: ["United States", "Paraguay", "Group D"],
|
|
4916
|
+
whyItMatters: "A four-goal opener gives the principal host nation early momentum and a strong goal difference \u2014 exactly what a host needs to energise a home tournament.",
|
|
4917
|
+
nextWatchpoints: ["USA vs Australia (June 19)", "Turkey vs USA (the real test of Group D)"]
|
|
4918
|
+
}),
|
|
4919
|
+
ev11({
|
|
4920
|
+
id: "wc2026-canada-6-0-qatar",
|
|
4921
|
+
title: "Canada rout Qatar 6\u20130 for their first-ever World Cup win",
|
|
4922
|
+
description: "On matchday 2, co-host Canada secured its first-ever victory in men's World Cup history \u2014 a 6\u20130 rout of Qatar in Group B, after opening with a 1\u20131 draw against Bosnia and Herzegovina. The six-goal margin was the biggest of the group stage so far and a huge boost to Canada's goal difference in a tight group.",
|
|
4923
|
+
yearNum: 2026,
|
|
4924
|
+
yearLabel: "2026",
|
|
4925
|
+
precision: "day",
|
|
4926
|
+
domains: ["culture", "geopolitics"],
|
|
4927
|
+
impactScore: 0.68,
|
|
4928
|
+
tags: ["world-cup", "2026", "canada", "qatar", "group-b", "host", "result", "statement-win"],
|
|
4929
|
+
sources: [wiki3(GROUP_B, "Wikipedia: 2026 FIFA World Cup Group B \u2014 Canada vs Qatar 6\u20130 (matchday 2, June 18, 2026, Vancouver); Canada's first men's World Cup win. Cites FIFA.")],
|
|
4930
|
+
date: "2026-06-18",
|
|
4931
|
+
dateLabel: "June 18, 2026",
|
|
4932
|
+
status: "completed",
|
|
4933
|
+
entities: ["Canada", "Qatar", "Group B"],
|
|
4934
|
+
whyItMatters: "A 6\u20130 win banks a commanding goal difference \u2014 often the tie-breaker that decides who advances from a group of four \u2014 and turns Canada's first-ever World Cup victory into a real qualification platform.",
|
|
4935
|
+
nextWatchpoints: ["Switzerland vs Canada (June 24)", "Goal difference may decide Group B"]
|
|
4936
|
+
}),
|
|
4937
|
+
// ── Matchday 3 — a host stumble + a group decided ────────────────────────
|
|
4938
|
+
ev11({
|
|
4939
|
+
id: "wc2026-turkey-3-2-usa",
|
|
4940
|
+
title: "Turkey edge the USA 3\u20132 in a Group D thriller",
|
|
4941
|
+
description: "Turkey beat co-host the United States 3\u20132 in a five-goal Group D match on the final matchday. The USA had already done enough to win the group, but the defeat ended their perfect start and showed that even a strong host run can wobble.",
|
|
4942
|
+
yearNum: 2026,
|
|
4943
|
+
yearLabel: "2026",
|
|
4944
|
+
precision: "day",
|
|
4945
|
+
domains: ["culture", "geopolitics"],
|
|
4946
|
+
impactScore: 0.66,
|
|
4947
|
+
tags: ["world-cup", "2026", "turkey", "usa", "group-d", "upset", "result"],
|
|
4948
|
+
sources: [wiki3(GROUP_D, "Wikipedia: 2026 FIFA World Cup Group D \u2014 Turkey vs United States 3\u20132 (June 25, 2026); USA still topped the group. Cites FIFA.")],
|
|
4949
|
+
date: "2026-06-25",
|
|
4950
|
+
dateLabel: "June 25, 2026",
|
|
4951
|
+
status: "completed",
|
|
4952
|
+
entities: ["Turkey", "United States", "Group D"],
|
|
4953
|
+
whyItMatters: "A host stumbling on the final matchday \u2014 even while still winning the group \u2014 is the kind of result that shifts round-of-32 seeding and tempers the home crowd's mood on a single ninety minutes.",
|
|
4954
|
+
nextWatchpoints: ["Final Group D standings + who the USA face in the round of 32"]
|
|
4955
|
+
}),
|
|
4956
|
+
ev11({
|
|
4957
|
+
// Dedicated fixture event so the scoreline is independently sourced + correctable,
|
|
4958
|
+
// distinct from the standings-summary event below (review follow-up).
|
|
4959
|
+
id: "wc2026-czech-republic-0-3-mexico",
|
|
4960
|
+
title: "Mexico beat the Czech Republic 3\u20130 to top Group A",
|
|
4961
|
+
description: "On the final matchday of Group A, Mexico beat the Czech Republic 3\u20130 (recorded as Czech Republic 0\u20133 Mexico). The win confirmed Mexico as group winners ahead of South Africa.",
|
|
4962
|
+
yearNum: 2026,
|
|
4963
|
+
yearLabel: "2026",
|
|
4964
|
+
precision: "day",
|
|
4965
|
+
domains: ["culture", "geopolitics"],
|
|
4966
|
+
impactScore: 0.6,
|
|
4967
|
+
tags: ["world-cup", "2026", "mexico", "czech-republic", "group-a", "matchday-3", "result"],
|
|
4968
|
+
sources: [wiki3(`${GROUP_A}#Czech_Republic_vs_Mexico`, "Wikipedia: 2026 FIFA World Cup Group A \u2014 Czech Republic vs Mexico 0\u20133 (match row, June 24, 2026). Cites FIFA.")],
|
|
4969
|
+
date: "2026-06-24",
|
|
4970
|
+
dateLabel: "June 24, 2026",
|
|
4971
|
+
status: "completed",
|
|
4972
|
+
entities: ["Mexico", "Czech Republic", "Group A"],
|
|
4973
|
+
whyItMatters: "A clean three-goal win locks up first place in the group, which under the 48-team format earns a notionally easier round-of-32 draw against a third-placed side.",
|
|
4974
|
+
nextWatchpoints: ["Final Group A standings", "Mexico's round-of-32 opponent"]
|
|
4975
|
+
}),
|
|
4976
|
+
ev11({
|
|
4977
|
+
id: "wc2026-mexico-win-group-a",
|
|
4978
|
+
title: "Mexico top Group A; South Africa advance, South Korea wait",
|
|
4979
|
+
description: "With the matchday-3 results in, Mexico finished top of Group A to advance as group winners. South Africa took second and also reached the round of 32; South Korea finished third and remain in contention as one of the eight best third-placed teams under the 48-team format. (The specific Mexico result is the dedicated fixture event above.)",
|
|
4980
|
+
yearNum: 2026,
|
|
4981
|
+
yearLabel: "2026",
|
|
4982
|
+
precision: "day",
|
|
4983
|
+
domains: ["culture", "geopolitics", "systems"],
|
|
4984
|
+
impactScore: 0.72,
|
|
4985
|
+
tags: ["world-cup", "2026", "mexico", "group-a", "standings", "qualification", "result"],
|
|
4986
|
+
sources: [wiki3(`${GROUP_A}#Standings`, "Wikipedia: 2026 FIFA World Cup Group A \u2014 final standings table (Mexico 1st, South Africa 2nd, South Korea 3rd), June 24, 2026. Cites FIFA.")],
|
|
4987
|
+
date: "2026-06-24",
|
|
4988
|
+
dateLabel: "June 24, 2026",
|
|
4989
|
+
status: "completed",
|
|
4990
|
+
entities: ["Mexico", "South Africa", "South Korea", "Czech Republic", "Group A"],
|
|
4991
|
+
whyItMatters: "Winning the group earns Mexico a notionally easier round-of-32 draw against a third-placed side \u2014 the structural payoff of the 48-team format, where eight third-placed teams also advance.",
|
|
4992
|
+
nextWatchpoints: ["Mexico's round-of-32 opponent (a third-placed qualifier)", "Which third-placed teams squeeze through"]
|
|
4993
|
+
}),
|
|
4994
|
+
// ── Scheduled — real future fixtures (NO invented results) ───────────────
|
|
4995
|
+
ev11({
|
|
4996
|
+
id: "wc2026-round-of-32-begins",
|
|
4997
|
+
title: "Round of 32 begins",
|
|
4998
|
+
description: "The knockout stage of the expanded 48-team World Cup opens with a brand-new round of 32, running June 28 \u2013 July 3, 2026. The sixteen winners advance to the round of 16. This extra knockout round is a direct consequence of expanding from 32 to 48 teams.",
|
|
4999
|
+
yearNum: 2026,
|
|
5000
|
+
yearLabel: "2026",
|
|
5001
|
+
precision: "day",
|
|
5002
|
+
domains: ["systems", "culture"],
|
|
5003
|
+
impactScore: 0.7,
|
|
5004
|
+
tags: ["world-cup", "2026", "round-of-32", "knockout", "fixture", "scheduled"],
|
|
5005
|
+
sources: [wiki3(R32, "Wikipedia: 2026 FIFA World Cup round of 32 \u2014 takes place June 28 \u2013 July 3, 2026; first-ever R32 due to 48-team expansion.")],
|
|
5006
|
+
date: "2026-06-28",
|
|
5007
|
+
dateLabel: "June 28, 2026",
|
|
5008
|
+
status: "scheduled",
|
|
5009
|
+
entities: ["Round of 32", "Knockout stage"],
|
|
5010
|
+
whyItMatters: "The round of 32 is the structural fingerprint of the 48-team era \u2014 a knockout round that never existed in the 32-team format. Every group result above feeds directly into who meets whom here.",
|
|
5011
|
+
nextWatchpoints: ["Mexico's opener vs a third-placed side", "Whether any host nation is eliminated early"]
|
|
5012
|
+
}),
|
|
5013
|
+
ev11({
|
|
5014
|
+
id: "wc2026-final-metlife",
|
|
5015
|
+
title: "World Cup final \u2014 MetLife Stadium, July 19",
|
|
5016
|
+
description: "The 2026 FIFA World Cup final is scheduled for July 19, 2026 at MetLife Stadium in East Rutherford, New Jersey (New York/New Jersey). It will crown the first champion of the 48-team era after a 104-match tournament.",
|
|
5017
|
+
yearNum: 2026,
|
|
5018
|
+
yearLabel: "2026",
|
|
5019
|
+
precision: "day",
|
|
5020
|
+
domains: ["culture", "geopolitics", "economy"],
|
|
5021
|
+
impactScore: 0.85,
|
|
5022
|
+
tags: ["world-cup", "2026", "final", "metlife", "new-jersey", "scheduled"],
|
|
5023
|
+
sources: [wiki3(WC, "Wikipedia: 2026 FIFA World Cup \u2014 final scheduled July 19, 2026 at MetLife Stadium, New York/New Jersey. Cites FIFA.")],
|
|
5024
|
+
date: "2026-07-19",
|
|
5025
|
+
dateLabel: "July 19, 2026",
|
|
5026
|
+
status: "scheduled",
|
|
5027
|
+
entities: ["Final", "MetLife Stadium", "New York/New Jersey"],
|
|
5028
|
+
whyItMatters: "The endpoint of the whole causal chain \u2014 from 1863 codification through every expansion to a 48-team, tri-nation tournament. Whoever lifts the trophy here is the first champion of the largest World Cup ever staged.",
|
|
5029
|
+
nextWatchpoints: ["The two finalists", "Attendance + audience records for the expanded format"]
|
|
5030
|
+
})
|
|
5031
|
+
];
|
|
5032
|
+
|
|
5033
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/links.js
|
|
5034
|
+
var seed11 = (fromEvent, toEvent, rel, evidence, confidence) => ({
|
|
5035
|
+
id: `${fromEvent}--${rel}-->${toEvent}`,
|
|
5036
|
+
fromEvent,
|
|
5037
|
+
toEvent,
|
|
5038
|
+
relationship: rel,
|
|
5039
|
+
confidence: confidence ?? (rel === "caused" ? 0.85 : 0.7),
|
|
5040
|
+
evidence,
|
|
5041
|
+
sources: [{ type: "demo-seed", reliability: 0.85, citation: "Causari curated pack \u2014 World Cup 2026" }],
|
|
5042
|
+
contributedBy: "system",
|
|
5043
|
+
validated: true,
|
|
5044
|
+
scope: "world"
|
|
5045
|
+
});
|
|
5046
|
+
var worldcupLinks = [
|
|
5047
|
+
// ── Origins → codification ───────────────────────────────────────────
|
|
5048
|
+
seed11("folk-football", "public-school-football", "inspired", "Public schools adapted the inherited folk-football impulse into formalized games, each writing its own code from the same raw tradition.", 0.6),
|
|
5049
|
+
seed11("public-school-football", "fa-codification-1863", "caused", "The incompatibility between competing public-school codes \u2014 especially over handling the ball \u2014 created the direct need that the 1863 FA meeting resolved with a single rulebook.", 0.8),
|
|
5050
|
+
seed11("folk-football", "fa-codification-1863", "enabled", "A widespread popular game existed to be codified; without an established folk practice there was nothing for the FA to standardize.", 0.6),
|
|
5051
|
+
// ── Codification → professional/league system ────────────────────────
|
|
5052
|
+
seed11("fa-codification-1863", "professionalism-1885", "enabled", "Standard rules made organized competitive matches possible, which in turn created clubs willing to pay for the best players \u2014 the basis for legalized professionalism.", 0.7),
|
|
5053
|
+
seed11("fa-codification-1863", "football-league-1888", "enabled", "A shared rulebook was the precondition for a regular fixture list between clubs; you cannot run a league without agreed laws.", 0.8),
|
|
5054
|
+
seed11("professionalism-1885", "football-league-1888", "caused", "Paid professional players needed regular, revenue-generating fixtures to be financially sustainable, directly motivating the founding of a scheduled league.", 0.75),
|
|
5055
|
+
seed11("football-league-1888", "fifa-sponsorship-1978", "inspired", "The Football League established the gate-and-fixture commercial template that later international competitions and FIFA scaled up commercially.", 0.45),
|
|
5056
|
+
// ── Codification → spread → FIFA ─────────────────────────────────────
|
|
5057
|
+
seed11("fa-codification-1863", "british-empire-football-spread", "enabled", "A single portable rulebook let British traders and sailors teach the same game everywhere they went; an un-codified folk game could not have spread as a consistent sport.", 0.75),
|
|
5058
|
+
seed11("british-empire-football-spread", "fifa-founded-1904", "caused", "Once multiple nations played the same codified game, a body to govern matches between them became necessary \u2014 the explicit purpose for which FIFA was founded.", 0.75),
|
|
5059
|
+
seed11("fa-codification-1863", "fifa-founded-1904", "enabled", "FIFA adopted the FA's Laws of the Game as its basis; the international body presupposed an existing shared code to govern.", 0.8),
|
|
5060
|
+
seed11("football-league-1888", "fifa-founded-1904", "inspired", "The organizational model of a governing association running structured competition informed how international football was institutionalized.", 0.5),
|
|
5061
|
+
// ── FIFA → international competition → first World Cup ────────────────
|
|
5062
|
+
seed11("fifa-founded-1904", "olympic-football-1908", "enabled", "FIFA provided the international governance that let an Olympic football tournament be run as a sanctioned competition between national associations.", 0.65),
|
|
5063
|
+
seed11("fifa-founded-1904", "first-world-cup-1930", "caused", "The first World Cup was organized and run by FIFA; the world championship existed only because an international governing body existed to stage it.", 0.85),
|
|
5064
|
+
seed11("olympic-football-1908", "first-world-cup-1930", "accelerated", "The popularity of Olympic football, and its amateur-only restriction, demonstrated demand for a professional world championship and hastened FIFA's decision to launch one.", 0.65),
|
|
5065
|
+
seed11("british-empire-football-spread", "first-world-cup-1930", "enabled", "A genuine world championship required competitive national teams on multiple continents, which the earlier spread of the game had produced \u2014 Uruguay, Argentina, and Brazil were already strong.", 0.65),
|
|
5066
|
+
// ── First World Cup → identity, soft power ───────────────────────────
|
|
5067
|
+
seed11("first-world-cup-1930", "world-cup-soft-power-1934", "enabled", "Once a recurring world championship existed, host nations could appropriate it; Italy 1934 was the first to weaponize hosting for state propaganda.", 0.7),
|
|
5068
|
+
seed11("first-world-cup-1930", "maracanazo-1950", "enabled", "The Maracanazo's national trauma was only possible because the World Cup had become the supreme prize whose loss could wound a nation.", 0.6),
|
|
5069
|
+
seed11("world-cup-soft-power-1934", "havelange-presidency-1974", "inspired", "The early demonstration that hosting projects national power shaped FIFA's later willingness to award tournaments strategically across regions.", 0.45),
|
|
5070
|
+
// ── Broadcast era ────────────────────────────────────────────────────
|
|
5071
|
+
seed11("first-world-cup-1930", "tv-broadcast-1954", "enabled", "A regular, marquee international tournament gave early television a premium live event worth broadcasting; the World Cup format was the content TV needed.", 0.65),
|
|
5072
|
+
seed11("tv-broadcast-1954", "satellite-broadcast-1970", "enabled", "Television broadcasting of the World Cup established the audience and demand that justified investing in live satellite transmission a generation later.", 0.7),
|
|
5073
|
+
seed11("satellite-broadcast-1970", "fifa-sponsorship-1978", "caused", "Worldwide simultaneous satellite broadcast created a global advertising surface, which is precisely what made large multinational sponsorship deals valuable to FIFA.", 0.75),
|
|
5074
|
+
seed11("tv-broadcast-1954", "fifa-sponsorship-1978", "enabled", "Televised reach turned matches into marketable media, the precondition for brands paying to be associated with the tournament.", 0.65),
|
|
5075
|
+
// ── Commercialization under Havelange ────────────────────────────────
|
|
5076
|
+
seed11("havelange-presidency-1974", "fifa-sponsorship-1978", "caused", "Havelange explicitly pursued corporate sponsorship and TV-rights revenue, signing the Coca-Cola and Adidas partnerships that built FIFA's commercial base.", 0.8),
|
|
5077
|
+
seed11("havelange-presidency-1974", "expansion-24-teams-1982", "caused", "Havelange won the presidency by promising more World Cup places to African and Asian federations and delivered the first expansion to 24 teams.", 0.8),
|
|
5078
|
+
seed11("satellite-broadcast-1970", "havelange-presidency-1974", "enabled", "The globalized broadcast reach of the 1970 tournament made FIFA a commercially valuable property, the platform Havelange built his commercial presidency upon.", 0.55),
|
|
5079
|
+
seed11("fifa-sponsorship-1978", "expansion-24-teams-1982", "enabled", "Guaranteed sponsorship and broadcast revenue gave FIFA the financial confidence to enlarge the tournament and absorb the added logistical cost.", 0.6),
|
|
5080
|
+
// ── Expansion lineage ────────────────────────────────────────────────
|
|
5081
|
+
seed11("expansion-24-teams-1982", "expansion-48-teams-2017", "inspired", "The 1982 expansion established the precedent and political logic \u2014 more slots for under-represented confederations \u2014 that the 2026 jump to 48 teams extended.", 0.65),
|
|
5082
|
+
seed11("expansion-24-teams-1982", "usa-1994-hosting", "accelerated", "A larger, more global tournament increased FIFA's appetite to enter major untapped markets like the United States.", 0.5),
|
|
5083
|
+
// ── Market expansion: USA 1994 → MLS → 2026 host ─────────────────────
|
|
5084
|
+
seed11("fifa-sponsorship-1978", "usa-1994-hosting", "caused", "FIFA awarded 1994 to the USA explicitly to open the lucrative American consumer and sponsorship market, the logical extension of its commercialization strategy.", 0.7),
|
|
5085
|
+
seed11("usa-1994-hosting", "mls-founded-1996", "caused", "Launching a domestic professional league was a condition of the US 1994 bid; MLS was founded in 1996 as a direct consequence.", 0.85),
|
|
5086
|
+
seed11("mls-founded-1996", "united-bid-2018", "enabled", "Two decades of MLS built the stadiums, audiences, and football infrastructure that made the United States a credible anchor for the 2026 bid.", 0.65),
|
|
5087
|
+
seed11("usa-1994-hosting", "united-bid-2018", "enabled", "The commercial and organizational success of USA 1994 demonstrated North America could stage and monetize the tournament, paving the way for the 2026 award.", 0.6),
|
|
5088
|
+
// ── Bosman / transfer economics / globalization ──────────────────────
|
|
5089
|
+
seed11("professionalism-1885", "bosman-ruling-1995", "enabled", "A professional labour market for players had to exist before a court could rule on the legality of restricting their movement; Bosman acted on a century-old professional system.", 0.55),
|
|
5090
|
+
seed11("bosman-ruling-1995", "galactico-globalization-2000", "caused", "By freeing player movement and removing EU foreigner limits, Bosman triggered wage inflation and multinational squad-building \u2014 the gal\xE1ctico star economy.", 0.75),
|
|
5091
|
+
seed11("bosman-ruling-1995", "champions-league-1992", "accelerated", "Free movement of players concentrated talent in the richest clubs, amplifying the financial and sporting dominance the rebranded Champions League was already building.", 0.55),
|
|
5092
|
+
seed11("champions-league-1992", "galactico-globalization-2000", "caused", "Champions League TV and sponsorship money gave elite clubs the budgets to assemble squads of global superstars, defining the gal\xE1ctico era.", 0.7),
|
|
5093
|
+
seed11("satellite-broadcast-1970", "champions-league-1992", "enabled", "Global live broadcast made club competitions valuable enough to repackage as a premium, sponsor-funded Champions League product.", 0.55),
|
|
5094
|
+
seed11("galactico-globalization-2000", "world-cup-2026", "enabled", "Decades of player globalization built worldwide fan attachment to stars and leagues, broadening the global audience the 2026 tournament is sized to serve.", 0.5),
|
|
5095
|
+
// ── Hosting goes global → co-hosting precedent ───────────────────────
|
|
5096
|
+
seed11("havelange-presidency-1974", "korea-japan-2002", "inspired", "Havelange's drive to take the tournament beyond Europe and the Americas set the policy direction that produced the first Asian World Cup.", 0.5),
|
|
5097
|
+
seed11("korea-japan-2002", "south-africa-2010", "accelerated", "The success of the first Asian and first co-hosted tournament reinforced FIFA's rotation policy of awarding hosting to new regions, including Africa.", 0.55),
|
|
5098
|
+
seed11("korea-japan-2002", "tri-nation-hosting-2026", "inspired", "Korea/Japan 2002 proved that splitting a World Cup across countries was logistically workable, providing the template the tri-nation 2026 model extended to three hosts.", 0.7),
|
|
5099
|
+
seed11("south-africa-2010", "united-bid-2018", "enabled", "FIFA's rotation logic and the global-hosting norm made a return of the tournament to North America in 2026 fit an established pattern of spreading hosting worldwide.", 0.45),
|
|
5100
|
+
// ── Technology in the laws of the game ───────────────────────────────
|
|
5101
|
+
seed11("satellite-broadcast-1970", "goal-line-tech-2014", "enabled", "Multi-angle broadcast replays publicly exposed officiating errors, building the pressure that led FIFA to admit goal-line technology into the laws.", 0.55),
|
|
5102
|
+
seed11("goal-line-tech-2014", "var-2018", "caused", "Accepting goal-line technology broke FIFA's resistance to in-game tech and directly opened the path to the more comprehensive video assistant referee system.", 0.7),
|
|
5103
|
+
seed11("var-2018", "streaming-rights-2022", "enabled", "Tech-mediated, replay-rich officiating suited the interactive digital broadcast experience that streaming platforms monetize.", 0.4),
|
|
5104
|
+
seed11("tv-broadcast-1954", "streaming-rights-2022", "enabled", "The decades-long television rights model established the media-rights revenue framework that streaming platforms later inherited and extended.", 0.55),
|
|
5105
|
+
// ── Governance crisis → reform → expansion → 2026 ────────────────────
|
|
5106
|
+
seed11("fifa-sponsorship-1978", "fifa-corruption-2015", "enabled", "The vast media-rights and sponsorship money flowing through FIFA created the very incentives for the bribery the 2015 indictments exposed.", 0.6),
|
|
5107
|
+
seed11("havelange-presidency-1974", "fifa-corruption-2015", "enabled", "Havelange's commercialization concentrated enormous revenue and discretionary power in FIFA, the structural conditions in which the later corruption flourished.", 0.5),
|
|
5108
|
+
seed11("fifa-corruption-2015", "infantino-presidency-2016", "caused", "The scandal forced out Sepp Blatter and triggered the election Infantino won on a reform-and-expansion platform.", 0.8),
|
|
5109
|
+
seed11("infantino-presidency-2016", "expansion-48-teams-2017", "caused", "Infantino championed the 48-team format to grow revenue and secure votes from smaller federations; the 2017 expansion was the centerpiece of his agenda.", 0.8),
|
|
5110
|
+
seed11("fifa-corruption-2015", "united-bid-2018", "enabled", "Post-scandal reforms produced a more transparent, member-vote host-selection process that favored the low-risk, infrastructure-rich United bid.", 0.5),
|
|
5111
|
+
// ── Convergence on 2026 ──────────────────────────────────────────────
|
|
5112
|
+
seed11("expansion-48-teams-2017", "united-bid-2018", "caused", "A 48-team, 104-match tournament demanded a host with abundant existing stadiums and transport, which is exactly why the multi-country United bid was chosen.", 0.75),
|
|
5113
|
+
seed11("expansion-48-teams-2017", "tri-nation-hosting-2026", "caused", "The sheer scale of 48 teams made spreading matches across three countries the practical way to stage the tournament.", 0.75),
|
|
5114
|
+
seed11("united-bid-2018", "tri-nation-hosting-2026", "caused", "The winning bid was itself a three-nation proposal, so the 2026 tri-nation hosting model is the direct realization of that bid.", 0.9),
|
|
5115
|
+
seed11("united-bid-2018", "world-cup-2026", "caused", "Winning the 2018 vote awarded the USA, Canada, and Mexico the right to stage the 2026 World Cup.", 0.9),
|
|
5116
|
+
seed11("expansion-48-teams-2017", "world-cup-2026", "caused", "The 2017 decision is what makes 2026 the first 48-team World Cup; the tournament's defining format comes directly from it.", 0.9),
|
|
5117
|
+
seed11("tri-nation-hosting-2026", "world-cup-2026", "enabled", "The agreed tri-nation logistics framework is the operational basis on which the 2026 tournament is staged.", 0.8),
|
|
5118
|
+
seed11("mexico-three-time-host-2026", "world-cup-2026", "enabled", "Mexico's proven hosting infrastructure from 1970 and 1986 made it a low-risk co-host, strengthening the bid that delivered 2026.", 0.5),
|
|
5119
|
+
seed11("united-bid-2018", "mexico-three-time-host-2026", "caused", "Mexico's inclusion in the winning United bid is what makes it a three-time World Cup host in 2026.", 0.85),
|
|
5120
|
+
// ── Mexico's hosting heritage ────────────────────────────────────────
|
|
5121
|
+
seed11("satellite-broadcast-1970", "mexico-three-time-host-2026", "enabled", "Mexico's landmark 1970 tournament built the stadium and broadcast heritage that underpins its standing as a repeat host into 2026.", 0.45),
|
|
5122
|
+
// ── Wider globalization feeding 2026 ─────────────────────────────────
|
|
5123
|
+
seed11("womens-game-globalization-2019", "world-cup-2026", "enabled", "The women's game's commercial breakthrough widened football's global audience and sponsorship base, part of the growth the expanded 2026 tournament is built to capture.", 0.4),
|
|
5124
|
+
seed11("streaming-rights-2022", "world-cup-2026", "enabled", "Streaming-era media rights broaden global access and revenue, helping fund and distribute the larger 2026 tournament.", 0.45),
|
|
5125
|
+
seed11("champions-league-1992", "world-cup-2026", "enabled", "The Champions League globalized year-round club fandom, sustaining the worldwide football audience the 2026 World Cup addresses.", 0.4),
|
|
5126
|
+
// ── Soft-power thread into 2026 hosting ──────────────────────────────
|
|
5127
|
+
seed11("world-cup-soft-power-1934", "united-bid-2018", "inspired", "The enduring understanding of hosting as national soft power motivates nations \u2014 including the 2026 co-hosts \u2014 to invest in winning bids.", 0.45)
|
|
5128
|
+
];
|
|
5129
|
+
|
|
5130
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/links-live.js
|
|
5131
|
+
var src9 = {
|
|
5132
|
+
type: "wikipedia",
|
|
5133
|
+
url: "https://en.wikipedia.org/wiki/2026_FIFA_World_Cup",
|
|
5134
|
+
reliability: 0.9,
|
|
5135
|
+
citation: "Causari WC2026 daily feed \u2014 structural causal links over real, sourced fixtures/results"
|
|
5136
|
+
};
|
|
5137
|
+
function link(fromEvent, toEvent, rel, evidence, confidence) {
|
|
5138
|
+
return {
|
|
5139
|
+
id: `${fromEvent}--${rel}-->${toEvent}`,
|
|
5140
|
+
fromEvent,
|
|
5141
|
+
toEvent,
|
|
5142
|
+
relationship: rel,
|
|
5143
|
+
confidence,
|
|
5144
|
+
evidence,
|
|
5145
|
+
sources: [src9],
|
|
5146
|
+
contributedBy: "system",
|
|
5147
|
+
validated: true,
|
|
5148
|
+
scope: "world"
|
|
5149
|
+
};
|
|
5150
|
+
}
|
|
5151
|
+
var worldcupLiveLinks = [
|
|
5152
|
+
// ── Result → next fixture / standings (sets-up-next arrows) ──────────────
|
|
5153
|
+
link("wc2026-mexico-2-0-south-africa", "wc2026-mexico-win-group-a", "enabled", "A winning opening result put Mexico in control of Group A; combined with later results it secured top spot and the group win.", 0.7),
|
|
5154
|
+
link("wc2026-czech-republic-0-3-mexico", "wc2026-mexico-win-group-a", "caused", "The matchday-3 win over the Czech Republic mathematically confirmed Mexico as group winners, directly producing the final Group A standings.", 0.85),
|
|
5155
|
+
link("wc2026-usa-4-1-paraguay", "wc2026-turkey-3-2-usa", "enabled", "The USA's 4\u20131 opener banked enough goal difference and points to win Group D even after a final-matchday 3\u20132 loss to Turkey.", 0.55),
|
|
5156
|
+
link("wc2026-mexico-win-group-a", "wc2026-round-of-32-begins", "enabled", "Topping Group A sends Mexico into the round of 32 against a third-placed qualifier \u2014 the group result directly determines the knockout seeding.", 0.75),
|
|
5157
|
+
link("wc2026-turkey-3-2-usa", "wc2026-round-of-32-begins", "enabled", "A host stumble at the end of the group stage reshuffles Group D seeding and therefore the round-of-32 matchups.", 0.6),
|
|
5158
|
+
link("wc2026-round-of-32-begins", "wc2026-final-metlife", "enabled", "The round of 32 is the first knockout gate on the single-elimination path that ends at the MetLife final.", 0.7),
|
|
5159
|
+
// ── Live feed → history spine (approach B seeded with A) ─────────────────
|
|
5160
|
+
// The 48-team expansion is the historical cause of the brand-new round of 32.
|
|
5161
|
+
link("expansion-48-teams-2017", "wc2026-round-of-32-begins", "caused", "The 2017 vote to expand the finals to 48 teams is the direct structural cause of a knockout round of 32 \u2014 a stage that did not exist in the 32-team format.", 0.85),
|
|
5162
|
+
// Tri-nation hosting put the opening match in Mexico City.
|
|
5163
|
+
link("tri-nation-hosting-2026", "wc2026-mexico-2-0-south-africa", "enabled", "The tri-nation hosting model assigned the historic opening match to Mexico City, making Mexico vs South Africa the tournament's curtain-raiser.", 0.7),
|
|
5164
|
+
// The 1994 USA hosting / MLS lineage is why the USA hosts and fields a competitive side at home.
|
|
5165
|
+
link("mls-founded-1996", "wc2026-usa-4-1-paraguay", "enabled", "The domestic league and football infrastructure built after the 1994 World Cup underpin the USA's capacity to co-host and field a competitive team at home in 2026.", 0.55),
|
|
5166
|
+
// The whole 2026 tournament event is the umbrella under which the final sits.
|
|
5167
|
+
link("world-cup-2026", "wc2026-final-metlife", "enabled", "The 2026 tournament structure (48 teams, 104 matches) culminates in the single final at MetLife Stadium.", 0.8)
|
|
5168
|
+
];
|
|
5169
|
+
|
|
5170
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/insights.js
|
|
5171
|
+
var worldcupInsights = [
|
|
5172
|
+
{
|
|
5173
|
+
id: "pattern--codification-enables-scale",
|
|
5174
|
+
pattern: "Codification Enables Scale",
|
|
5175
|
+
description: "A shared, written rulebook converts a fragmented local activity into a coordinable system that can scale across clubs, nations, and continents. The 1863 FA Laws turned folk football into a portable game; that single code enabled professional leagues, international spread, and ultimately a world governing body and championship. The pattern recurs wherever standardization precedes growth: no common standard, no scale.",
|
|
5176
|
+
instances: [
|
|
5177
|
+
"public-school-football--caused-->fa-codification-1863",
|
|
5178
|
+
"fa-codification-1863--enabled-->football-league-1888",
|
|
5179
|
+
"fa-codification-1863--enabled-->british-empire-football-spread",
|
|
5180
|
+
"fa-codification-1863--enabled-->fifa-founded-1904",
|
|
5181
|
+
"british-empire-football-spread--caused-->fifa-founded-1904"
|
|
5182
|
+
],
|
|
5183
|
+
predictiveValue: 0.74,
|
|
5184
|
+
domains: ["systems", "culture"],
|
|
5185
|
+
contributedBy: "system"
|
|
5186
|
+
},
|
|
5187
|
+
{
|
|
5188
|
+
id: "pattern--media-drives-globalization",
|
|
5189
|
+
pattern: "Media Drives Globalization & Commercialization",
|
|
5190
|
+
description: "Each leap in broadcast reach turns the tournament into a larger global advertising surface, which pulls in sponsorship and TV money, which funds expansion and further globalization. Television (1954) then satellite (1970) created worldwide simultaneous audiences; that reach made multinational sponsorship valuable, financed Havelange-era commercialization, and underwrote successive tournament expansions. Media capacity, not sporting merit, repeatedly sets the ceiling on how global and how lucrative the event can be.",
|
|
5191
|
+
instances: [
|
|
5192
|
+
"satellite-broadcast-1970--caused-->fifa-sponsorship-1978",
|
|
5193
|
+
"tv-broadcast-1954--enabled-->fifa-sponsorship-1978",
|
|
5194
|
+
"fifa-sponsorship-1978--enabled-->expansion-24-teams-1982",
|
|
5195
|
+
"champions-league-1992--caused-->galactico-globalization-2000",
|
|
5196
|
+
"bosman-ruling-1995--caused-->galactico-globalization-2000"
|
|
5197
|
+
],
|
|
5198
|
+
predictiveValue: 0.72,
|
|
5199
|
+
domains: ["technology", "economy", "culture"],
|
|
5200
|
+
contributedBy: "system"
|
|
5201
|
+
},
|
|
5202
|
+
{
|
|
5203
|
+
id: "pattern--hosting-as-soft-power",
|
|
5204
|
+
pattern: "Host Selection as Soft Power",
|
|
5205
|
+
description: "Hosting the World Cup is repeatedly chosen and contested as an instrument of national projection and market entry, not merely sport. Italy 1934 weaponized hosting for state propaganda; the USA 1994 award targeted a commercial market and forced the creation of MLS; rotation took the tournament to Asia (2002) and Africa (2010); and the 2026 United bid leveraged North American infrastructure and soft-power ambition. Who hosts is decided by geopolitics, market size, and prestige as much as by footballing readiness.",
|
|
5206
|
+
instances: [
|
|
5207
|
+
"first-world-cup-1930--enabled-->world-cup-soft-power-1934",
|
|
5208
|
+
"fifa-sponsorship-1978--caused-->usa-1994-hosting",
|
|
5209
|
+
"usa-1994-hosting--caused-->mls-founded-1996",
|
|
5210
|
+
"korea-japan-2002--inspired-->tri-nation-hosting-2026",
|
|
5211
|
+
"expansion-48-teams-2017--caused-->united-bid-2018"
|
|
5212
|
+
],
|
|
5213
|
+
predictiveValue: 0.66,
|
|
5214
|
+
domains: ["geopolitics", "economy", "culture"],
|
|
5215
|
+
contributedBy: "system"
|
|
5216
|
+
},
|
|
5217
|
+
{
|
|
5218
|
+
id: "pattern--expansion-creates-new-structure",
|
|
5219
|
+
pattern: "Expansion Creates New Tournament Structure",
|
|
5220
|
+
description: `Every expansion of the field forces a new competitive structure that did not exist before, which then reshapes how the whole tournament plays out. The jump from 32 to 48 teams (approved 2017) created a brand-new knockout round of 32 in 2026 \u2014 a stage with no precedent \u2014 and made the eight best third-placed teams a live qualification path. The lesson recurs across the World Cup's history: changing the size of the field is never just "more games," it rewrites the bracket and the incentives within it.`,
|
|
5221
|
+
instances: [
|
|
5222
|
+
"expansion-48-teams-2017--caused-->wc2026-round-of-32-begins",
|
|
5223
|
+
"wc2026-mexico-win-group-a--enabled-->wc2026-round-of-32-begins"
|
|
5224
|
+
],
|
|
5225
|
+
predictiveValue: 0.7,
|
|
5226
|
+
domains: ["systems", "culture"],
|
|
5227
|
+
contributedBy: "system"
|
|
5228
|
+
},
|
|
5229
|
+
{
|
|
5230
|
+
id: "pattern--host-momentum-from-opening-result",
|
|
5231
|
+
pattern: "Host Momentum from the Opening Result",
|
|
5232
|
+
description: "A host nation's early results disproportionately shape the mood and the maths of its tournament. Confident wins (Mexico 2\u20130 and USA 4\u20131 on opening day; Canada's 6\u20130 rout on matchday 2) bank goal difference and galvanise the home crowd; a later stumble (Turkey 3\u20132 USA) can swing momentum just as sharply. Because group-of-four standings often turn on goal difference, the host's margins echo all the way into knockout seeding.",
|
|
5233
|
+
instances: [
|
|
5234
|
+
"wc2026-mexico-2-0-south-africa--enabled-->wc2026-mexico-win-group-a",
|
|
5235
|
+
"wc2026-usa-4-1-paraguay--enabled-->wc2026-turkey-3-2-usa"
|
|
5236
|
+
],
|
|
5237
|
+
predictiveValue: 0.55,
|
|
5238
|
+
domains: ["culture", "systems"],
|
|
5239
|
+
contributedBy: "system"
|
|
5240
|
+
}
|
|
5241
|
+
];
|
|
5242
|
+
|
|
5243
|
+
// ../../packages/ckg/dist/packs/worldcup-2026/index.js
|
|
5244
|
+
var worldcup2026Pack = {
|
|
5245
|
+
meta: {
|
|
5246
|
+
id: "worldcup-2026",
|
|
5247
|
+
title: "FIFA World Cup 2026",
|
|
5248
|
+
description: "Causal map of the FIFA World Cup: the historical lineage leading to the 48-team 2026 tournament (USA/Canada/Mexico) plus a daily feed of real, sourced fixtures and results during the tournament.",
|
|
5249
|
+
// 1.1.0: adds the daily-feed (live-event) layer on top of the 1.0 history
|
|
5250
|
+
// spine. Additive only — pack-format contract stays at schemaVersion 1.0.
|
|
5251
|
+
version: "1.1.0",
|
|
5252
|
+
schemaVersion: "1.0",
|
|
5253
|
+
domains: ["culture", "geopolitics", "economy", "systems"]
|
|
5254
|
+
},
|
|
5255
|
+
events: [...worldcupEvents, ...worldcupLiveEvents],
|
|
5256
|
+
causalLinks: [...worldcupLinks, ...worldcupLiveLinks],
|
|
5257
|
+
insights: worldcupInsights
|
|
5258
|
+
};
|
|
5259
|
+
|
|
5260
|
+
// ../../packages/ckg/dist/packs/index.js
|
|
5261
|
+
var PACKS = {
|
|
5262
|
+
[worldcup2026Pack.meta.id]: worldcup2026Pack
|
|
5263
|
+
};
|
|
5264
|
+
function loadPack(packId) {
|
|
5265
|
+
const pack = PACKS[packId];
|
|
5266
|
+
if (!pack) {
|
|
5267
|
+
const known = Object.keys(PACKS).join(", ") || "(none)";
|
|
5268
|
+
throw new Error(`Unknown pack "${packId}". Registered packs: ${known}.`);
|
|
5269
|
+
}
|
|
5270
|
+
return pack;
|
|
5271
|
+
}
|
|
5272
|
+
function mergeSeedData(core, ...packs) {
|
|
5273
|
+
const events = new Map(core.events.map((e) => [e.id, e]));
|
|
5274
|
+
const causalLinks = new Map(core.causalLinks.map((l) => [l.id, l]));
|
|
5275
|
+
const insights = new Map(core.insights.map((i) => [i.id, i]));
|
|
5276
|
+
for (const pack of packs) {
|
|
5277
|
+
pack.events.forEach((e) => events.set(e.id, e));
|
|
5278
|
+
pack.causalLinks.forEach((l) => causalLinks.set(l.id, l));
|
|
5279
|
+
pack.insights.forEach((i) => insights.set(i.id, i));
|
|
5280
|
+
}
|
|
5281
|
+
return {
|
|
5282
|
+
events: Array.from(events.values()),
|
|
5283
|
+
causalLinks: Array.from(causalLinks.values()),
|
|
5284
|
+
insights: Array.from(insights.values())
|
|
5285
|
+
};
|
|
5286
|
+
}
|
|
5287
|
+
|
|
5288
|
+
// src/validate.ts
|
|
5289
|
+
var DOMAINS = [
|
|
5290
|
+
"technology",
|
|
5291
|
+
"humanities",
|
|
5292
|
+
"systems",
|
|
5293
|
+
"science",
|
|
5294
|
+
"economy",
|
|
5295
|
+
"geopolitics",
|
|
5296
|
+
"philosophy",
|
|
5297
|
+
"environment",
|
|
5298
|
+
"culture",
|
|
5299
|
+
"health",
|
|
5300
|
+
"other"
|
|
5301
|
+
];
|
|
5302
|
+
var ValidationError = class extends Error {
|
|
5303
|
+
constructor(message) {
|
|
5304
|
+
super(message);
|
|
5305
|
+
this.name = "ValidationError";
|
|
5306
|
+
}
|
|
5307
|
+
};
|
|
5308
|
+
function requireString(value, field) {
|
|
5309
|
+
if (typeof value !== "string") {
|
|
5310
|
+
throw new ValidationError(`"${field}" must be a string, got ${typeName(value)}.`);
|
|
5311
|
+
}
|
|
5312
|
+
const trimmed = value.trim();
|
|
5313
|
+
if (trimmed.length === 0) {
|
|
5314
|
+
throw new ValidationError(`"${field}" must not be empty.`);
|
|
5315
|
+
}
|
|
5316
|
+
return trimmed;
|
|
5317
|
+
}
|
|
5318
|
+
function optionalNumber(value, field, opts = {}) {
|
|
5319
|
+
if (value === void 0 || value === null) return void 0;
|
|
5320
|
+
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
5321
|
+
throw new ValidationError(`"${field}" must be a finite number, got ${typeName(value)}.`);
|
|
5322
|
+
}
|
|
5323
|
+
if (opts.integer && !Number.isInteger(value)) {
|
|
5324
|
+
throw new ValidationError(`"${field}" must be an integer, got ${value}.`);
|
|
5325
|
+
}
|
|
5326
|
+
if (opts.min !== void 0 && value < opts.min) {
|
|
5327
|
+
throw new ValidationError(`"${field}" must be >= ${opts.min}, got ${value}.`);
|
|
5328
|
+
}
|
|
5329
|
+
if (opts.max !== void 0 && value > opts.max) {
|
|
5330
|
+
throw new ValidationError(`"${field}" must be <= ${opts.max}, got ${value}.`);
|
|
5331
|
+
}
|
|
5332
|
+
return value;
|
|
5333
|
+
}
|
|
5334
|
+
function optionalDomains(value, field = "domains") {
|
|
5335
|
+
if (value === void 0 || value === null) return void 0;
|
|
5336
|
+
if (!Array.isArray(value)) {
|
|
5337
|
+
throw new ValidationError(`"${field}" must be an array of domain strings.`);
|
|
5338
|
+
}
|
|
5339
|
+
for (const d of value) {
|
|
5340
|
+
if (typeof d !== "string" || !DOMAINS.includes(d)) {
|
|
5341
|
+
throw new ValidationError(
|
|
5342
|
+
`"${field}" contains invalid domain ${JSON.stringify(d)}. Valid domains: ${DOMAINS.join(", ")}.`
|
|
5343
|
+
);
|
|
5344
|
+
}
|
|
5345
|
+
}
|
|
5346
|
+
return value;
|
|
5347
|
+
}
|
|
5348
|
+
function requireStringArray(value, field) {
|
|
5349
|
+
if (!Array.isArray(value)) {
|
|
5350
|
+
throw new ValidationError(`"${field}" must be an array of strings.`);
|
|
5351
|
+
}
|
|
5352
|
+
if (value.length === 0) {
|
|
5353
|
+
throw new ValidationError(`"${field}" must contain at least one item.`);
|
|
5354
|
+
}
|
|
5355
|
+
const out = [];
|
|
5356
|
+
for (const item of value) {
|
|
5357
|
+
if (typeof item !== "string" || item.trim().length === 0) {
|
|
5358
|
+
throw new ValidationError(`"${field}" items must be non-empty strings.`);
|
|
5359
|
+
}
|
|
5360
|
+
out.push(item.trim());
|
|
5361
|
+
}
|
|
5362
|
+
return out;
|
|
5363
|
+
}
|
|
5364
|
+
function optionalEnum(value, field, allowed) {
|
|
5365
|
+
if (value === void 0 || value === null) return void 0;
|
|
5366
|
+
if (typeof value !== "string" || !allowed.includes(value)) {
|
|
5367
|
+
throw new ValidationError(
|
|
5368
|
+
`"${field}" must be one of: ${allowed.join(", ")}. Got ${JSON.stringify(value)}.`
|
|
5369
|
+
);
|
|
5370
|
+
}
|
|
5371
|
+
return value;
|
|
5372
|
+
}
|
|
5373
|
+
function optionalString(value, field) {
|
|
5374
|
+
if (value === void 0 || value === null) return void 0;
|
|
5375
|
+
return requireString(value, field);
|
|
5376
|
+
}
|
|
5377
|
+
function typeName(value) {
|
|
5378
|
+
if (value === null) return "null";
|
|
5379
|
+
if (Array.isArray(value)) return "array";
|
|
5380
|
+
if (typeof value === "number" && Number.isNaN(value)) return "NaN";
|
|
5381
|
+
return typeof value;
|
|
5382
|
+
}
|
|
5383
|
+
|
|
4276
5384
|
// src/tools.ts
|
|
4277
5385
|
var yearRangeSchema = {
|
|
4278
5386
|
yearFrom: {
|
|
@@ -4314,13 +5422,18 @@ var queryEventsT = {
|
|
|
4314
5422
|
}
|
|
4315
5423
|
},
|
|
4316
5424
|
handler: (args, store) => {
|
|
5425
|
+
const yearFrom = optionalNumber(args.yearFrom, "yearFrom", { integer: true });
|
|
5426
|
+
const yearTo = optionalNumber(args.yearTo, "yearTo", { integer: true });
|
|
5427
|
+
if (yearFrom !== void 0 && yearTo !== void 0 && yearFrom > yearTo) {
|
|
5428
|
+
throw new ValidationError(`"yearFrom" (${yearFrom}) must be <= "yearTo" (${yearTo}).`);
|
|
5429
|
+
}
|
|
4317
5430
|
const result = queryEvents(store, {
|
|
4318
|
-
yearFrom
|
|
4319
|
-
yearTo
|
|
4320
|
-
domains: args.domains,
|
|
4321
|
-
minImpact: args.minImpact,
|
|
4322
|
-
query: args.query,
|
|
4323
|
-
limit: args.limit
|
|
5431
|
+
yearFrom,
|
|
5432
|
+
yearTo,
|
|
5433
|
+
domains: optionalDomains(args.domains),
|
|
5434
|
+
minImpact: optionalNumber(args.minImpact, "minImpact", { min: 0, max: 1 }),
|
|
5435
|
+
query: optionalString(args.query, "query"),
|
|
5436
|
+
limit: optionalNumber(args.limit, "limit", { min: 1, max: 200, integer: true })
|
|
4324
5437
|
});
|
|
4325
5438
|
return {
|
|
4326
5439
|
events: result.events.map((e) => ({
|
|
@@ -4378,10 +5491,10 @@ var causalChainT = {
|
|
|
4378
5491
|
},
|
|
4379
5492
|
handler: (args, store) => {
|
|
4380
5493
|
const result = causalChain(store, {
|
|
4381
|
-
event: args.event,
|
|
4382
|
-
direction: args.direction,
|
|
4383
|
-
depth: args.depth,
|
|
4384
|
-
minConfidence: args.minConfidence
|
|
5494
|
+
event: requireString(args.event, "event"),
|
|
5495
|
+
direction: optionalEnum(args.direction, "direction", ["causes", "effects", "both"]),
|
|
5496
|
+
depth: optionalNumber(args.depth, "depth", { min: 1, max: 5, integer: true }),
|
|
5497
|
+
minConfidence: optionalNumber(args.minConfidence, "minConfidence", { min: 0, max: 1 })
|
|
4385
5498
|
});
|
|
4386
5499
|
if ("notFound" in result && result.notFound) {
|
|
4387
5500
|
return {
|
|
@@ -4443,9 +5556,9 @@ var historicalResonanceT = {
|
|
|
4443
5556
|
},
|
|
4444
5557
|
handler: (args, store) => {
|
|
4445
5558
|
const result = historicalResonance(store, {
|
|
4446
|
-
situation: args.situation,
|
|
4447
|
-
domains: args.domains,
|
|
4448
|
-
maxResults: args.maxResults
|
|
5559
|
+
situation: requireString(args.situation, "situation"),
|
|
5560
|
+
domains: optionalDomains(args.domains),
|
|
5561
|
+
maxResults: optionalNumber(args.maxResults, "maxResults", { min: 1, max: 20, integer: true })
|
|
4449
5562
|
});
|
|
4450
5563
|
return {
|
|
4451
5564
|
matches: result.matches.map((m) => ({
|
|
@@ -4481,11 +5594,11 @@ var orgKnowledgeT = {
|
|
|
4481
5594
|
},
|
|
4482
5595
|
handler: (args, store) => {
|
|
4483
5596
|
return orgKnowledge(store, {
|
|
4484
|
-
query: args.query,
|
|
4485
|
-
orgId: args.orgId,
|
|
4486
|
-
team: args.team,
|
|
4487
|
-
yearFrom: args.yearFrom,
|
|
4488
|
-
yearTo: args.yearTo
|
|
5597
|
+
query: requireString(args.query, "query"),
|
|
5598
|
+
orgId: requireString(args.orgId, "orgId"),
|
|
5599
|
+
team: optionalString(args.team, "team"),
|
|
5600
|
+
yearFrom: optionalNumber(args.yearFrom, "yearFrom", { integer: true }),
|
|
5601
|
+
yearTo: optionalNumber(args.yearTo, "yearTo", { integer: true })
|
|
4489
5602
|
});
|
|
4490
5603
|
}
|
|
4491
5604
|
};
|
|
@@ -4512,10 +5625,10 @@ var predictScenariosT = {
|
|
|
4512
5625
|
},
|
|
4513
5626
|
handler: (args, store) => {
|
|
4514
5627
|
const result = predictScenarios(store, {
|
|
4515
|
-
conditions: args.conditions,
|
|
4516
|
-
horizon: args.horizon,
|
|
4517
|
-
domains: args.domains,
|
|
4518
|
-
maxScenarios: args.maxScenarios
|
|
5628
|
+
conditions: requireStringArray(args.conditions, "conditions"),
|
|
5629
|
+
horizon: optionalNumber(args.horizon, "horizon", { min: -1e5, max: 1e6, integer: true }),
|
|
5630
|
+
domains: optionalDomains(args.domains),
|
|
5631
|
+
maxScenarios: optionalNumber(args.maxScenarios, "maxScenarios", { min: 1, max: 10, integer: true })
|
|
4519
5632
|
});
|
|
4520
5633
|
return {
|
|
4521
5634
|
scenarios: result.scenarios.map((s) => ({
|
|
@@ -4548,5 +5661,8 @@ var ALL_TOOLS = [
|
|
|
4548
5661
|
export {
|
|
4549
5662
|
CKGStore,
|
|
4550
5663
|
loadSeed,
|
|
5664
|
+
loadPack,
|
|
5665
|
+
mergeSeedData,
|
|
5666
|
+
ValidationError,
|
|
4551
5667
|
ALL_TOOLS
|
|
4552
5668
|
};
|