{"version":3,"file":"temporal.test.d.ts","sourceRoot":"","sources":["../../../src/core/web-research/temporal.test.ts"],"names":[],"mappings":"","sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport { TemporalResolver } from \"./temporal.js\";\n\ndescribe(\"temporal source resolution\", () => {\n\tit(\"resolves official historical value superseded by later official rebalance\", () => {\n\t\tconst resolver = new TemporalResolver();\n\t\tconst result = resolver.resolve([\n\t\t\t{\n\t\t\t\tevidenceId: \"a\",\n\t\t\t\tsourceUrl: \"https://official.example/2017\",\n\t\t\t\tvalue: 212,\n\t\t\t\teffectiveAt: \"2017-06-01\",\n\t\t\t\tpublishedAt: \"2017-06-01\",\n\t\t\t\tauthority: 2,\n\t\t\t},\n\t\t\t{\n\t\t\t\tevidenceId: \"b\",\n\t\t\t\tsourceUrl: \"https://official.example/2019\",\n\t\t\t\tvalue: 225,\n\t\t\t\teffectiveAt: \"2019-03-15\",\n\t\t\t\tpublishedAt: \"2019-03-15\",\n\t\t\t\tauthority: 2,\n\t\t\t\tchangeDeclaration: \"weapon damage changed from 212 to 225\",\n\t\t\t},\n\t\t]);\n\t\texpect(result.unresolved).toBe(false);\n\t\texpect(result.currentValue).toBe(225);\n\t\tconst classes = Object.fromEntries(result.resolutions.map((r) => [r.evidenceId, r.class]));\n\t\texpect(classes.a).toBe(\"superseded\");\n\t\texpect(classes.b).toBe(\"current\");\n\t});\n\n\tit(\"corroborates a maintained current source against an older official rebalance\", () => {\n\t\tconst resolver = new TemporalResolver();\n\t\tconst result = resolver.resolve([\n\t\t\t{\n\t\t\t\tevidenceId: \"official\",\n\t\t\t\tsourceUrl: \"https://official.example/2019\",\n\t\t\t\tvalue: 225,\n\t\t\t\teffectiveAt: \"2019-03-15\",\n\t\t\t\tauthority: 2,\n\t\t\t},\n\t\t\t{\n\t\t\t\tevidenceId: \"maintained\",\n\t\t\t\tsourceUrl: \"https://maintained.example/game\",\n\t\t\t\tvalue: 225,\n\t\t\t\tisMaintained: true,\n\t\t\t\tauthority: 1,\n\t\t\t},\n\t\t]);\n\t\texpect(result.unresolved).toBe(false);\n\t\texpect(result.currentValue).toBe(225);\n\t});\n\n\tit(\"keeps undated conflicting community sources unresolved\", () => {\n\t\tconst resolver = new TemporalResolver();\n\t\tconst result = resolver.resolve([\n\t\t\t{ evidenceId: \"c1\", sourceUrl: \"https://wiki.example/a\", value: 100, authority: 0 },\n\t\t\t{ evidenceId: \"c2\", sourceUrl: \"https://wiki.example/b\", value: 120, authority: 0 },\n\t\t]);\n\t\texpect(result.unresolved).toBe(true);\n\t\texpect(result.currentValue).toBeUndefined();\n\t\texpect(result.resolutions.every((r) => r.class === \"contradiction\")).toBe(true);\n\t});\n\n\tit(\"does not let a newer low-authority source override an older official source\", () => {\n\t\tconst resolver = new TemporalResolver();\n\t\t// Newer (2026) community source vs older (2019) official with a maintained\n\t\t// official current value should keep the official/current value.\n\t\tconst result = resolver.resolve([\n\t\t\t{\n\t\t\t\tevidenceId: \"official\",\n\t\t\t\tsourceUrl: \"https://official.example/2019\",\n\t\t\t\tvalue: 225,\n\t\t\t\teffectiveAt: \"2019-03-15\",\n\t\t\t\tauthority: 2,\n\t\t\t},\n\t\t\t{\n\t\t\t\tevidenceId: \"newer-community\",\n\t\t\t\tsourceUrl: \"https://wiki.example/2026\",\n\t\t\t\tvalue: 500,\n\t\t\t\teffectiveAt: \"2026-01-01\",\n\t\t\t\tauthority: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\tevidenceId: \"maintained\",\n\t\t\t\tsourceUrl: \"https://official.example/current\",\n\t\t\t\tvalue: 225,\n\t\t\t\tisMaintained: true,\n\t\t\t\tauthority: 2,\n\t\t\t},\n\t\t]);\n\t\texpect(result.unresolved).toBe(false);\n\t\texpect(result.currentValue).toBe(225);\n\t\tconst classes = Object.fromEntries(result.resolutions.map((r) => [r.evidenceId, r.class]));\n\t\texpect(classes.official).toBe(\"current\");\n\t\texpect(classes.maintained).toBe(\"current\");\n\t\texpect(classes[\"newer-community\"]).toBe(\"contradiction\");\n\t});\n\n\tit(\"classifies a single undated consistent value as uncertain current\", () => {\n\t\tconst resolver = new TemporalResolver();\n\t\tconst result = resolver.resolve([\n\t\t\t{ evidenceId: \"w1\", sourceUrl: \"https://wiki.example/a\", value: 100, authority: 0 },\n\t\t]);\n\t\texpect(result.unresolved).toBe(true);\n\t\texpect(result.resolutions[0].class).toBe(\"uncertain_current\");\n\t});\n});\n"]}