fodda-mcp 1.46.31 → 1.46.97
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/README.md +14 -94
- package/dist/agents/fodda-researcher/skills.d.ts +1 -1
- package/dist/agents/fodda-researcher/skills.d.ts.map +1 -1
- package/dist/agents/fodda-researcher/skills.js +1 -1
- package/dist/brandTemplate.d.ts +1 -1
- package/dist/brandTemplate.d.ts.map +1 -1
- package/dist/brandTemplate.js +162 -74
- package/dist/brandTemplate.js.map +1 -1
- package/dist/catalogCache.d.ts +29 -1
- package/dist/catalogCache.d.ts.map +1 -1
- package/dist/catalogCache.js +267 -16
- package/dist/catalogCache.js.map +1 -1
- package/dist/coverageRelevance.d.ts +97 -2
- package/dist/coverageRelevance.d.ts.map +1 -1
- package/dist/coverageRelevance.js +959 -164
- package/dist/coverageRelevance.js.map +1 -1
- package/dist/editorialFill.d.ts +5 -0
- package/dist/editorialFill.d.ts.map +1 -1
- package/dist/editorialFill.js +1 -1
- package/dist/editorialFill.js.map +1 -1
- package/dist/enrichment.d.ts +26 -0
- package/dist/enrichment.d.ts.map +1 -1
- package/dist/enrichment.js +394 -31
- package/dist/enrichment.js.map +1 -1
- package/dist/errorHandling.d.ts +35 -7
- package/dist/errorHandling.d.ts.map +1 -1
- package/dist/errorHandling.js +225 -155
- package/dist/errorHandling.js.map +1 -1
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +351 -143
- package/dist/index.js.map +1 -1
- package/dist/jobs/jlens_quarterly_sweep.d.ts +62 -0
- package/dist/jobs/jlens_quarterly_sweep.d.ts.map +1 -0
- package/dist/jobs/jlens_quarterly_sweep.js +160 -0
- package/dist/jobs/jlens_quarterly_sweep.js.map +1 -0
- package/dist/pricingCache.d.ts.map +1 -1
- package/dist/pricingCache.js +41 -1
- package/dist/pricingCache.js.map +1 -1
- package/dist/queryCache.d.ts.map +1 -1
- package/dist/queryCache.js +2 -0
- package/dist/queryCache.js.map +1 -1
- package/dist/reportBriefing.d.ts +89 -0
- package/dist/reportBriefing.d.ts.map +1 -0
- package/dist/reportBriefing.js +662 -0
- package/dist/reportBriefing.js.map +1 -0
- package/dist/searchTemplate.d.ts.map +1 -1
- package/dist/searchTemplate.js +65 -53
- package/dist/searchTemplate.js.map +1 -1
- package/dist/services/graphRouter.d.ts +7 -0
- package/dist/services/graphRouter.d.ts.map +1 -0
- package/dist/services/graphRouter.js +7 -0
- package/dist/services/graphRouter.js.map +1 -0
- package/dist/services/notifications.d.ts +49 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +206 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/sessionTracker.d.ts +19 -2
- package/dist/sessionTracker.d.ts.map +1 -1
- package/dist/sessionTracker.js +69 -16
- package/dist/sessionTracker.js.map +1 -1
- package/dist/skillClient.d.ts.map +1 -1
- package/dist/skillClient.js +11 -6
- package/dist/skillClient.js.map +1 -1
- package/dist/svgVisuals.d.ts +17 -19
- package/dist/svgVisuals.d.ts.map +1 -1
- package/dist/svgVisuals.js +189 -233
- package/dist/svgVisuals.js.map +1 -1
- package/dist/systemPrompt.d.ts +7 -2
- package/dist/systemPrompt.d.ts.map +1 -1
- package/dist/systemPrompt.js +110 -68
- package/dist/systemPrompt.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +15 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/test_adjacent_trends_polymorphic.d.ts +2 -0
- package/dist/test_adjacent_trends_polymorphic.d.ts.map +1 -0
- package/dist/test_adjacent_trends_polymorphic.js +154 -0
- package/dist/test_adjacent_trends_polymorphic.js.map +1 -0
- package/dist/test_book_a_call_live.js +18 -5
- package/dist/test_book_a_call_live.js.map +1 -1
- package/dist/test_byo_mcp_submission_clarity.d.ts +2 -0
- package/dist/test_byo_mcp_submission_clarity.d.ts.map +1 -0
- package/dist/test_byo_mcp_submission_clarity.js +142 -0
- package/dist/test_byo_mcp_submission_clarity.js.map +1 -0
- package/dist/test_capabilities_guidance.d.ts +2 -0
- package/dist/test_capabilities_guidance.d.ts.map +1 -0
- package/dist/test_capabilities_guidance.js +372 -0
- package/dist/test_capabilities_guidance.js.map +1 -0
- package/dist/test_client_provenance.d.ts +2 -0
- package/dist/test_client_provenance.d.ts.map +1 -0
- package/dist/test_client_provenance.js +77 -0
- package/dist/test_client_provenance.js.map +1 -0
- package/dist/test_connection_surface_cleanup.d.ts +2 -0
- package/dist/test_connection_surface_cleanup.d.ts.map +1 -0
- package/dist/test_connection_surface_cleanup.js +203 -0
- package/dist/test_connection_surface_cleanup.js.map +1 -0
- package/dist/test_consult_routing.d.ts +2 -0
- package/dist/test_consult_routing.d.ts.map +1 -0
- package/dist/test_consult_routing.js +86 -0
- package/dist/test_consult_routing.js.map +1 -0
- package/dist/test_consult_split.d.ts +2 -0
- package/dist/test_consult_split.d.ts.map +1 -0
- package/dist/test_consult_split.js +30 -0
- package/dist/test_consult_split.js.map +1 -0
- package/dist/test_coverage_relevance.js +111 -70
- package/dist/test_coverage_relevance.js.map +1 -1
- package/dist/test_coverage_replay.d.ts +2 -0
- package/dist/test_coverage_replay.d.ts.map +1 -0
- package/dist/test_coverage_replay.js +170 -0
- package/dist/test_coverage_replay.js.map +1 -0
- package/dist/test_dcr_and_legacy_deprecation.js +45 -50
- package/dist/test_dcr_and_legacy_deprecation.js.map +1 -1
- package/dist/test_demand_signal_logging.d.ts +2 -0
- package/dist/test_demand_signal_logging.d.ts.map +1 -0
- package/dist/test_demand_signal_logging.js +92 -0
- package/dist/test_demand_signal_logging.js.map +1 -0
- package/dist/test_earnings_activity_scope.d.ts +5 -0
- package/dist/test_earnings_activity_scope.d.ts.map +1 -0
- package/dist/test_earnings_activity_scope.js +101 -0
- package/dist/test_earnings_activity_scope.js.map +1 -0
- package/dist/test_earnings_divergence_live.d.ts +5 -0
- package/dist/test_earnings_divergence_live.d.ts.map +1 -0
- package/dist/test_earnings_divergence_live.js +135 -0
- package/dist/test_earnings_divergence_live.js.map +1 -0
- package/dist/test_earnings_hygiene_and_binding.d.ts +5 -0
- package/dist/test_earnings_hygiene_and_binding.d.ts.map +1 -0
- package/dist/test_earnings_hygiene_and_binding.js +104 -0
- package/dist/test_earnings_hygiene_and_binding.js.map +1 -0
- package/dist/test_exec_quotes_render.d.ts +2 -0
- package/dist/test_exec_quotes_render.d.ts.map +1 -0
- package/dist/test_exec_quotes_render.js +86 -0
- package/dist/test_exec_quotes_render.js.map +1 -0
- package/dist/test_expert_intro.d.ts +2 -0
- package/dist/test_expert_intro.d.ts.map +1 -0
- package/dist/test_expert_intro.js +57 -0
- package/dist/test_expert_intro.js.map +1 -0
- package/dist/test_expert_layer.d.ts +11 -0
- package/dist/test_expert_layer.d.ts.map +1 -0
- package/dist/test_expert_layer.js +356 -0
- package/dist/test_expert_layer.js.map +1 -0
- package/dist/test_gap_alert.js +8 -0
- package/dist/test_gap_alert.js.map +1 -1
- package/dist/test_grok_offering_surfaces.d.ts +2 -0
- package/dist/test_grok_offering_surfaces.d.ts.map +1 -0
- package/dist/test_grok_offering_surfaces.js +155 -0
- package/dist/test_grok_offering_surfaces.js.map +1 -0
- package/dist/test_human_agent_live.d.ts +2 -0
- package/dist/test_human_agent_live.d.ts.map +1 -0
- package/dist/test_human_agent_live.js +48 -0
- package/dist/test_human_agent_live.js.map +1 -0
- package/dist/test_identity_gap.d.ts +2 -0
- package/dist/test_identity_gap.d.ts.map +1 -0
- package/dist/test_identity_gap.js +171 -0
- package/dist/test_identity_gap.js.map +1 -0
- package/dist/test_intelligence_and_verifier.d.ts +17 -0
- package/dist/test_intelligence_and_verifier.d.ts.map +1 -0
- package/dist/test_intelligence_and_verifier.js +162 -0
- package/dist/test_intelligence_and_verifier.js.map +1 -0
- package/dist/test_latency_mcp_brief5.d.ts +12 -0
- package/dist/test_latency_mcp_brief5.d.ts.map +1 -0
- package/dist/test_latency_mcp_brief5.js +200 -0
- package/dist/test_latency_mcp_brief5.js.map +1 -0
- package/dist/test_limit_and_credit_card_capture.d.ts +21 -0
- package/dist/test_limit_and_credit_card_capture.d.ts.map +1 -0
- package/dist/test_limit_and_credit_card_capture.js +216 -0
- package/dist/test_limit_and_credit_card_capture.js.map +1 -0
- package/dist/test_list_graphs_topics.js +1 -1
- package/dist/test_list_graphs_topics.js.map +1 -1
- package/dist/test_live_deployed_mcp_search.d.ts +2 -0
- package/dist/test_live_deployed_mcp_search.d.ts.map +1 -0
- package/dist/test_live_deployed_mcp_search.js +85 -0
- package/dist/test_live_deployed_mcp_search.js.map +1 -0
- package/dist/test_live_deployed_split.d.ts +2 -0
- package/dist/test_live_deployed_split.d.ts.map +1 -0
- package/dist/test_live_deployed_split.js +72 -0
- package/dist/test_live_deployed_split.js.map +1 -0
- package/dist/test_live_endpoint_runner.js +2 -2
- package/dist/test_live_endpoint_runner.js.map +1 -1
- package/dist/test_live_mcp.js +1 -1
- package/dist/test_live_mcp.js.map +1 -1
- package/dist/test_live_neil_widget.d.ts +2 -0
- package/dist/test_live_neil_widget.d.ts.map +1 -0
- package/dist/test_live_neil_widget.js +84 -0
- package/dist/test_live_neil_widget.js.map +1 -0
- package/dist/test_longpoll_status.d.ts +2 -0
- package/dist/test_longpoll_status.d.ts.map +1 -0
- package/dist/test_longpoll_status.js +117 -0
- package/dist/test_longpoll_status.js.map +1 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.d.ts +2 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.d.ts.map +1 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.js +130 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.js.map +1 -0
- package/dist/test_next_moves.js +644 -279
- package/dist/test_next_moves.js.map +1 -1
- package/dist/test_next_moves_transcripts.js +122 -40
- package/dist/test_next_moves_transcripts.js.map +1 -1
- package/dist/test_on_request_caller_identity.d.ts +13 -0
- package/dist/test_on_request_caller_identity.d.ts.map +1 -0
- package/dist/test_on_request_caller_identity.js +131 -0
- package/dist/test_on_request_caller_identity.js.map +1 -0
- package/dist/test_on_request_intercept.d.ts +10 -0
- package/dist/test_on_request_intercept.d.ts.map +1 -0
- package/dist/test_on_request_intercept.js +95 -0
- package/dist/test_on_request_intercept.js.map +1 -0
- package/dist/test_onboarding_consent_and_errors.d.ts +2 -0
- package/dist/test_onboarding_consent_and_errors.d.ts.map +1 -0
- package/dist/test_onboarding_consent_and_errors.js +110 -0
- package/dist/test_onboarding_consent_and_errors.js.map +1 -0
- package/dist/test_onboarding_live_scenarios.d.ts +2 -0
- package/dist/test_onboarding_live_scenarios.d.ts.map +1 -0
- package/dist/test_onboarding_live_scenarios.js +189 -0
- package/dist/test_onboarding_live_scenarios.js.map +1 -0
- package/dist/test_referral_live.d.ts +2 -0
- package/dist/test_referral_live.d.ts.map +1 -0
- package/dist/test_referral_live.js +33 -0
- package/dist/test_referral_live.js.map +1 -0
- package/dist/test_referral_piers.d.ts +2 -0
- package/dist/test_referral_piers.d.ts.map +1 -0
- package/dist/test_referral_piers.js +33 -0
- package/dist/test_referral_piers.js.map +1 -0
- package/dist/test_report_editorial_briefing.d.ts +21 -0
- package/dist/test_report_editorial_briefing.d.ts.map +1 -0
- package/dist/test_report_editorial_briefing.js +356 -0
- package/dist/test_report_editorial_briefing.js.map +1 -0
- package/dist/test_search_graph_quality.d.ts +2 -0
- package/dist/test_search_graph_quality.d.ts.map +1 -0
- package/dist/test_search_graph_quality.js +493 -0
- package/dist/test_search_graph_quality.js.map +1 -0
- package/dist/test_service_to_service_auth.d.ts +2 -0
- package/dist/test_service_to_service_auth.d.ts.map +1 -0
- package/dist/test_service_to_service_auth.js +199 -0
- package/dist/test_service_to_service_auth.js.map +1 -0
- package/dist/test_sources_live.d.ts +2 -0
- package/dist/test_sources_live.d.ts.map +1 -0
- package/dist/test_sources_live.js +30 -0
- package/dist/test_sources_live.js.map +1 -0
- package/dist/test_specialist_and_analyst_tiers.d.ts +2 -0
- package/dist/test_specialist_and_analyst_tiers.d.ts.map +1 -0
- package/dist/test_specialist_and_analyst_tiers.js +155 -0
- package/dist/test_specialist_and_analyst_tiers.js.map +1 -0
- package/dist/test_v2_2_visual_hardening.d.ts +5 -0
- package/dist/test_v2_2_visual_hardening.d.ts.map +1 -0
- package/dist/test_v2_2_visual_hardening.js +333 -0
- package/dist/test_v2_2_visual_hardening.js.map +1 -0
- package/dist/test_verify_deprecate_render_spec.d.ts +2 -0
- package/dist/test_verify_deprecate_render_spec.d.ts.map +1 -0
- package/dist/test_verify_deprecate_render_spec.js +217 -0
- package/dist/test_verify_deprecate_render_spec.js.map +1 -0
- package/dist/test_verify_neil_demo.d.ts +2 -0
- package/dist/test_verify_neil_demo.d.ts.map +1 -0
- package/dist/test_verify_neil_demo.js +149 -0
- package/dist/test_verify_neil_demo.js.map +1 -0
- package/dist/test_waitable_research_and_grounded_links.d.ts +2 -0
- package/dist/test_waitable_research_and_grounded_links.d.ts.map +1 -0
- package/dist/test_waitable_research_and_grounded_links.js +129 -0
- package/dist/test_waitable_research_and_grounded_links.js.map +1 -0
- package/dist/test_widget_guards.d.ts +2 -0
- package/dist/test_widget_guards.d.ts.map +1 -0
- package/dist/test_widget_guards.js +229 -0
- package/dist/test_widget_guards.js.map +1 -0
- package/dist/test_zero_retention_alerts.d.ts +14 -0
- package/dist/test_zero_retention_alerts.d.ts.map +1 -0
- package/dist/test_zero_retention_alerts.js +76 -0
- package/dist/test_zero_retention_alerts.js.map +1 -0
- package/dist/toolHandlers.d.ts +38 -1
- package/dist/toolHandlers.d.ts.map +1 -1
- package/dist/toolHandlers.js +3856 -938
- package/dist/toolHandlers.js.map +1 -1
- package/dist/tools.d.ts +20 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +25 -4
- package/dist/tools.js.map +1 -1
- package/dist/verify_discoverability.d.ts +2 -0
- package/dist/verify_discoverability.d.ts.map +1 -0
- package/dist/verify_discoverability.js +53 -0
- package/dist/verify_discoverability.js.map +1 -0
- package/dist/verify_tools_endpoint.js +16 -3
- package/dist/verify_tools_endpoint.js.map +1 -1
- package/dist/widgetShell.d.ts +2 -2
- package/dist/widgetShell.d.ts.map +1 -1
- package/dist/widgetShell.js +1 -1
- package/dist/widgetShell.js.map +1 -1
- package/package.json +1 -1
- package/server.json +4 -32
- package/dist/oauthRegisterShim.d.ts +0 -13
- package/dist/oauthRegisterShim.d.ts.map +0 -1
- package/dist/oauthRegisterShim.js +0 -83
- package/dist/oauthRegisterShim.js.map +0 -1
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive Test Suite for 5-Pillar Editorial & Network Synthesis (v1.46.44).
|
|
3
|
+
*
|
|
4
|
+
* Uses realistic API response fixtures:
|
|
5
|
+
* - Evidence as object `{ statistics: [...], case_studies: [...] }`
|
|
6
|
+
* - Real catalog cache state with `setCachedCatalogForTesting`
|
|
7
|
+
* - Real human twin fields (`isVerifiedRealPerson`, `expertSlug`)
|
|
8
|
+
* - `relevance_score` fields
|
|
9
|
+
*
|
|
10
|
+
* Tests:
|
|
11
|
+
* 1. Primary Report Graph Resolution & Row Partitioning
|
|
12
|
+
* 2. Deduplication of Network Signals against Primary Evidence
|
|
13
|
+
* 3. Human Expert Digital Twin matching (valid match vs. 0-overlap decline)
|
|
14
|
+
* 4. 5-Pillar Payload generation (JSON keys + Pre-rendered Markdown)
|
|
15
|
+
* 5. Mechanical fallback path verification
|
|
16
|
+
* 6. Non-leakage of token / SPT mechanics
|
|
17
|
+
* 7. Absolute HTTPS URLs in all links
|
|
18
|
+
* 8. Honest empty-coverage hook framing
|
|
19
|
+
*/
|
|
20
|
+
import assert from 'assert';
|
|
21
|
+
import { setCachedCatalogForTesting } from './catalogCache.js';
|
|
22
|
+
import { resolvePrimaryReportGraph, partitionReportResults, matchHumanExpertTwin, buildReportEditorialBriefing, extractEvidenceFromRow, } from './reportBriefing.js';
|
|
23
|
+
console.log('🧪 Running Comprehensive Test Suite: 5-Pillar Editorial & Network Synthesis (v1.46.44)...\n');
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Seed Catalog Cache with realistic graphs & human twins
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const mockCatalog = {
|
|
28
|
+
version: '1.0.0',
|
|
29
|
+
generated_at: new Date().toISOString(),
|
|
30
|
+
graph_count: 3,
|
|
31
|
+
graphs: [
|
|
32
|
+
{
|
|
33
|
+
graph_id: 'jack-morton-fan-experience-trends',
|
|
34
|
+
name: 'Jack Morton Fan Experience Trends',
|
|
35
|
+
description: 'Fan experience, hospitality, and brand activation trends',
|
|
36
|
+
curator: 'Jack Morton Worldwide',
|
|
37
|
+
curator_url: 'https://jackmorton.com',
|
|
38
|
+
quality_checker_name: 'Quality Lead',
|
|
39
|
+
quality_checker_title: 'Director',
|
|
40
|
+
quality_checker_company: 'Fodda',
|
|
41
|
+
update_frequency: 'monthly',
|
|
42
|
+
domain: 'experience',
|
|
43
|
+
version: '1.0.0',
|
|
44
|
+
node_types: ['Trend'],
|
|
45
|
+
relationship_types: ['RELATES_TO'],
|
|
46
|
+
status: 'live',
|
|
47
|
+
topics: ['fan experience', 'fandom', 'hospitality', 'brand community', 'sports'],
|
|
48
|
+
graph_type: 'industry report',
|
|
49
|
+
headline: 'Fan Experience Trends',
|
|
50
|
+
subhead: 'The Shift to Active Participation',
|
|
51
|
+
geography: 'Global',
|
|
52
|
+
icon_url: 'https://fodda.ai/icons/jm.png',
|
|
53
|
+
company: 'Jack Morton Worldwide',
|
|
54
|
+
source_url: 'https://jackmorton.com/report',
|
|
55
|
+
available_as: 'report',
|
|
56
|
+
is_playground: false,
|
|
57
|
+
last_updated: '2026-08-01',
|
|
58
|
+
published_date: '2026-08-01',
|
|
59
|
+
example_queries: ['fan engagement', 'tactile hospitality'],
|
|
60
|
+
portrait_url: '',
|
|
61
|
+
trend_count: 15,
|
|
62
|
+
evidence_count: 45,
|
|
63
|
+
last_synced: '2026-08-01',
|
|
64
|
+
webpage_url: 'https://fodda.ai/graphs/jack-morton-fan-experience-trends',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
graph_id: 'peak-sportstech',
|
|
68
|
+
name: 'PEAK SportsTech Report',
|
|
69
|
+
description: 'Sports venue infrastructure and smart concessions',
|
|
70
|
+
curator: 'PEAK Sports Research',
|
|
71
|
+
curator_url: 'https://peaksports.com',
|
|
72
|
+
quality_checker_name: 'Quality Lead',
|
|
73
|
+
quality_checker_title: 'Director',
|
|
74
|
+
quality_checker_company: 'Fodda',
|
|
75
|
+
update_frequency: 'quarterly',
|
|
76
|
+
domain: 'sports',
|
|
77
|
+
version: '1.0.0',
|
|
78
|
+
node_types: ['Trend'],
|
|
79
|
+
relationship_types: ['RELATES_TO'],
|
|
80
|
+
status: 'live',
|
|
81
|
+
topics: ['sports venues', 'concessions', 'fan hospitality', 'stadium tech'],
|
|
82
|
+
graph_type: 'industry report',
|
|
83
|
+
headline: 'SportsTech Infrastructure',
|
|
84
|
+
subhead: 'Next-Gen Stadium Hospitality',
|
|
85
|
+
geography: 'Global',
|
|
86
|
+
icon_url: 'https://fodda.ai/icons/peak.png',
|
|
87
|
+
company: 'PEAK Sports Research',
|
|
88
|
+
source_url: 'https://peaksports.com/report',
|
|
89
|
+
available_as: 'report',
|
|
90
|
+
is_playground: false,
|
|
91
|
+
last_updated: '2026-07-15',
|
|
92
|
+
published_date: '2026-07-15',
|
|
93
|
+
example_queries: ['intuit dome', 'frictionless checkout'],
|
|
94
|
+
portrait_url: '',
|
|
95
|
+
trend_count: 20,
|
|
96
|
+
evidence_count: 60,
|
|
97
|
+
last_synced: '2026-07-15',
|
|
98
|
+
webpage_url: 'https://fodda.ai/graphs/peak-sportstech',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
graph_id: 'dentsu-growth',
|
|
102
|
+
name: 'Dentsu Brand Growth',
|
|
103
|
+
description: 'Creative effectiveness and product design in marketing',
|
|
104
|
+
curator: 'Dentsu Creative',
|
|
105
|
+
curator_url: 'https://dentsu.com',
|
|
106
|
+
quality_checker_name: 'Quality Lead',
|
|
107
|
+
quality_checker_title: 'Director',
|
|
108
|
+
quality_checker_company: 'Fodda',
|
|
109
|
+
update_frequency: 'quarterly',
|
|
110
|
+
domain: 'brand',
|
|
111
|
+
version: '1.0.0',
|
|
112
|
+
node_types: ['Trend'],
|
|
113
|
+
relationship_types: ['RELATES_TO'],
|
|
114
|
+
status: 'live',
|
|
115
|
+
topics: ['brand growth', 'tactile marketing', 'creative effectiveness'],
|
|
116
|
+
graph_type: 'industry report',
|
|
117
|
+
headline: 'Brand Growth Benchmarks',
|
|
118
|
+
subhead: 'Tactile Design & Engagement',
|
|
119
|
+
geography: 'Global',
|
|
120
|
+
icon_url: 'https://fodda.ai/icons/dentsu.png',
|
|
121
|
+
company: 'Dentsu Creative',
|
|
122
|
+
source_url: 'https://dentsu.com/report',
|
|
123
|
+
available_as: 'report',
|
|
124
|
+
is_playground: false,
|
|
125
|
+
last_updated: '2026-06-01',
|
|
126
|
+
published_date: '2026-06-01',
|
|
127
|
+
example_queries: ['creative design', 'product marketing'],
|
|
128
|
+
portrait_url: '',
|
|
129
|
+
trend_count: 12,
|
|
130
|
+
evidence_count: 36,
|
|
131
|
+
last_synced: '2026-06-01',
|
|
132
|
+
webpage_url: 'https://fodda.ai/graphs/dentsu-growth',
|
|
133
|
+
}
|
|
134
|
+
]
|
|
135
|
+
};
|
|
136
|
+
const mockAnalysts = [
|
|
137
|
+
{
|
|
138
|
+
id: 'rec12345678901234',
|
|
139
|
+
analyst_id: 'peter-abraham-bicycles-cycling',
|
|
140
|
+
name: 'Peter Abraham',
|
|
141
|
+
description: 'Brand culture, participation, and sports community strategist',
|
|
142
|
+
expertSlug: 'peter-abraham-bicycles-cycling',
|
|
143
|
+
isVerifiedRealPerson: true,
|
|
144
|
+
is_digital_twin: true,
|
|
145
|
+
is_human_agent: true,
|
|
146
|
+
expert_in: 'Brand community culture, experiential participation, cycling and endurance sports',
|
|
147
|
+
what_they_offer: 'Advises brands on building authentic participatory community culture.',
|
|
148
|
+
topics: ['brand community', 'fan experience', 'participation', 'cycling', 'sports'],
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: 'rec98765432109876',
|
|
152
|
+
analyst_id: 'dr-elena-biotech',
|
|
153
|
+
name: 'Dr. Elena Rostova',
|
|
154
|
+
description: 'Biopharmaceutical research and immunology',
|
|
155
|
+
expertSlug: 'dr-elena-biotech',
|
|
156
|
+
isVerifiedRealPerson: true,
|
|
157
|
+
is_digital_twin: true,
|
|
158
|
+
is_human_agent: true,
|
|
159
|
+
expert_in: 'Immunology, clinical oncology, mRNA therapeutics',
|
|
160
|
+
what_they_offer: 'Reviews clinical trial design and biopharma regulatory pipelines.',
|
|
161
|
+
topics: ['oncology', 'immunology', 'biopharma'],
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
setCachedCatalogForTesting(mockCatalog, mockAnalysts);
|
|
165
|
+
// Live API shape with object evidence and relevance_score
|
|
166
|
+
const mockLiveReportRows = [
|
|
167
|
+
{
|
|
168
|
+
trend_id: 'jm-1',
|
|
169
|
+
name: 'Participation as the Price of Entry',
|
|
170
|
+
graph_id: 'jack-morton-fan-experience-trends',
|
|
171
|
+
summary: 'Three-quarters of adults identify with fandoms, demanding hands-on involvement.',
|
|
172
|
+
relevance_score: 0.94,
|
|
173
|
+
evidence: {
|
|
174
|
+
statistics: [
|
|
175
|
+
{ stat: '42%', snippet: '42% of modern fans actively seek hands-on community involvement rather than passive spectatorship.' },
|
|
176
|
+
{ percentage: '75%', snippet: '75% of adults surveyed identify with at least one fandom.' }
|
|
177
|
+
],
|
|
178
|
+
case_studies: [
|
|
179
|
+
{ title: 'Interactive Fanzone Activation', snippet: 'Hands-on fan labs delivered 3x higher dwell time during championship weekend.' }
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
trend_id: 'jm-2',
|
|
185
|
+
name: 'Tactile Hospitality and Sensory Immersion',
|
|
186
|
+
graph_id: 'jack-morton-fan-experience-trends',
|
|
187
|
+
summary: 'Physical stadium environments require tactile, sensory engagements to justify in-person attendance.',
|
|
188
|
+
relevance_score: 0.89,
|
|
189
|
+
evidence: {
|
|
190
|
+
statistics: [
|
|
191
|
+
{ stat: '$180', snippet: 'Average premium spend per attendee increases by 28% in immersive sensory hospitality suites.' }
|
|
192
|
+
],
|
|
193
|
+
case_studies: [
|
|
194
|
+
{ title: 'SanDisk FIFA Whistle USB Drive', snippet: 'SanDisk FIFA World Cup Whistle USB drive demonstrated how tactile product design drives consumer willingness to pay.' }
|
|
195
|
+
]
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
trend_id: 'peak-1',
|
|
200
|
+
name: 'Frictionless Concession Infrastructure',
|
|
201
|
+
graph_id: 'peak-sportstech',
|
|
202
|
+
summary: 'Intuit Dome deployed over 40 checkout-free outlets, proving frictionless infrastructure is table stakes for fan hospitality.',
|
|
203
|
+
relevance_score: 0.81,
|
|
204
|
+
evidence: {
|
|
205
|
+
statistics: [
|
|
206
|
+
{ stat: '40+ stores', snippet: 'Over 40 autonomous checkout stores deployed at Intuit Dome.' }
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
trend_id: 'dentsu-1',
|
|
212
|
+
name: 'Tactile Brand Merchandising',
|
|
213
|
+
graph_id: 'dentsu-growth',
|
|
214
|
+
summary: 'Tactile sensory merchandising drives higher consumer brand equity.',
|
|
215
|
+
relevance_score: 0.73,
|
|
216
|
+
evidence: {
|
|
217
|
+
case_studies: [
|
|
218
|
+
{ title: 'SanDisk FIFA Whistle USB Drive', snippet: 'SanDisk FIFA World Cup Whistle USB drive demonstrated how tactile product design drives consumer willingness to pay.' }
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
];
|
|
223
|
+
async function runTests() {
|
|
224
|
+
// -----------------------------------------------------------------------
|
|
225
|
+
// TEST 1: Evidence Extraction (Object vs Array shapes)
|
|
226
|
+
// -----------------------------------------------------------------------
|
|
227
|
+
console.log('--- TEST 1: Evidence Extraction from Object & Array Shapes ---');
|
|
228
|
+
const evObj = extractEvidenceFromRow(mockLiveReportRows[0]);
|
|
229
|
+
assert.strictEqual(evObj.stats.length, 2, 'Should extract 2 stats from object evidence');
|
|
230
|
+
assert.ok(evObj.stats.includes('42%'), 'Should contain 42%');
|
|
231
|
+
assert.ok(evObj.stats.includes('75%'), 'Should contain 75%');
|
|
232
|
+
assert.strictEqual(evObj.caseStudies.length, 1, 'Should extract 1 case study');
|
|
233
|
+
console.log('✅ PASS: Evidence object extraction correctly pulls stats, snippets, and case studies.\n');
|
|
234
|
+
// -----------------------------------------------------------------------
|
|
235
|
+
// TEST 2: Primary Report Graph Resolution
|
|
236
|
+
// -----------------------------------------------------------------------
|
|
237
|
+
console.log('--- TEST 2: Primary Report Graph Resolution ---');
|
|
238
|
+
const resolvedByName = resolvePrimaryReportGraph('What does the Jack Morton fan experience report say?');
|
|
239
|
+
assert.ok(resolvedByName, 'Should resolve graph from Jack Morton curator in query');
|
|
240
|
+
assert.strictEqual(resolvedByName?.graph_id, 'jack-morton-fan-experience-trends');
|
|
241
|
+
const resolvedByRows = resolvePrimaryReportGraph('fan engagement trends', mockLiveReportRows);
|
|
242
|
+
assert.ok(resolvedByRows, 'Should resolve primary graph from highest density in result rows');
|
|
243
|
+
assert.strictEqual(resolvedByRows?.graph_id, 'jack-morton-fan-experience-trends');
|
|
244
|
+
console.log('✅ PASS: Primary report graph resolution verified.\n');
|
|
245
|
+
// -----------------------------------------------------------------------
|
|
246
|
+
// TEST 3: Partitioning & Evidence Deduplication
|
|
247
|
+
// -----------------------------------------------------------------------
|
|
248
|
+
console.log('--- TEST 3: Partitioning & Cross-Graph Deduplication ---');
|
|
249
|
+
const { primaryRows, networkRows } = partitionReportResults(mockLiveReportRows, 'jack-morton-fan-experience-trends');
|
|
250
|
+
assert.strictEqual(primaryRows.length, 2, 'Should have 2 primary rows for Jack Morton graph');
|
|
251
|
+
// dentsu-1 contains duplicate SanDisk FIFA Whistle case study from jm-2, so it must be deduped out
|
|
252
|
+
assert.strictEqual(networkRows.length, 1, 'Network rows should have exactly 1 item after deduplicating duplicate SanDisk case study');
|
|
253
|
+
assert.strictEqual(networkRows[0].graph_id, 'peak-sportstech', 'Remaining network signal must be peak-sportstech');
|
|
254
|
+
console.log('✅ PASS: Partitioning and server-side deduplication verified.\n');
|
|
255
|
+
// -----------------------------------------------------------------------
|
|
256
|
+
// TEST 4: Human Expert Twin Matching & 0-Overlap Strictness
|
|
257
|
+
// -----------------------------------------------------------------------
|
|
258
|
+
console.log('--- TEST 4: Human Expert Digital Twin Matching ---');
|
|
259
|
+
const matchedTwin = matchHumanExpertTwin('fan experience brand community participation');
|
|
260
|
+
assert.ok(matchedTwin, 'Should match Peter Abraham on fan experience & brand community');
|
|
261
|
+
assert.strictEqual(matchedTwin?.name, 'Peter Abraham');
|
|
262
|
+
assert.strictEqual(matchedTwin?.slug, 'peter-abraham-bicycles-cycling');
|
|
263
|
+
assert.strictEqual(matchedTwin?.is_human_agent, true);
|
|
264
|
+
// 0-overlap test: query completely outside any twin's domain
|
|
265
|
+
const zeroOverlapTwin = matchHumanExpertTwin('superconducting quantum error correction transmon qubits');
|
|
266
|
+
assert.strictEqual(zeroOverlapTwin, undefined, 'Must NOT match any expert when topical overlap is zero');
|
|
267
|
+
console.log('✅ PASS: Human expert twin matched accurately and declined on zero overlap.\n');
|
|
268
|
+
// -----------------------------------------------------------------------
|
|
269
|
+
// TEST 5: 5-Pillar Payload Generation (Full Suite)
|
|
270
|
+
// -----------------------------------------------------------------------
|
|
271
|
+
console.log('--- TEST 5: 5-Pillar Editorial Payload Generation ---');
|
|
272
|
+
const payload = await buildReportEditorialBriefing({
|
|
273
|
+
data: { results: mockLiveReportRows, total: 4 },
|
|
274
|
+
query: 'What does the new Jack Morton fan experience report say?',
|
|
275
|
+
annotatedData: {
|
|
276
|
+
coverage: { status: 'ok' },
|
|
277
|
+
next_moves: {
|
|
278
|
+
candidates: [
|
|
279
|
+
{ prompt: 'Explore sports venue infrastructure', tool: 'get_report_intelligence', args: { query: 'PEAK SportsTech' } }
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
assert.strictEqual(payload.view, 'editorial');
|
|
285
|
+
assert.ok(payload.topline_hook.text.length > 10, 'Topline hook must be populated');
|
|
286
|
+
assert.ok(payload.shifts.length >= 2, 'Should extract structural shifts');
|
|
287
|
+
assert.ok(payload.shifts[0]?.title, 'First shift must have title');
|
|
288
|
+
assert.ok(payload.shifts[0]?.narrative, 'First shift must have narrative');
|
|
289
|
+
assert.ok(payload.shifts[0]?.stats.length > 0, 'First shift must carry extracted stats');
|
|
290
|
+
// Pillar 3 check
|
|
291
|
+
assert.strictEqual(payload.network_signals.length, 1, 'Should include peak-sportstech network signal');
|
|
292
|
+
const netSig = payload.network_signals[0];
|
|
293
|
+
assert.ok(netSig, 'Network signal must exist');
|
|
294
|
+
assert.strictEqual(netSig?.curator, 'PEAK Sports Research', 'Curator must be populated from catalog cache');
|
|
295
|
+
assert.strictEqual(netSig?.source_report, 'PEAK SportsTech Report');
|
|
296
|
+
assert.ok(netSig?.url.startsWith('https://'), `Network signal url must be absolute https: ${netSig?.url}`);
|
|
297
|
+
// Pillar 4 check
|
|
298
|
+
assert.ok(payload.expert_spotlight, 'Expert spotlight must be populated');
|
|
299
|
+
assert.strictEqual(payload.expert_spotlight?.name, 'Peter Abraham');
|
|
300
|
+
assert.strictEqual(payload.expert_spotlight?.consult_url, 'https://expert.fodda.ai/peter-abraham-bicycles-cycling');
|
|
301
|
+
assert.strictEqual(payload.expert_spotlight?.consult_tool, 'consult_human_agent');
|
|
302
|
+
// Pillar 5 check
|
|
303
|
+
assert.ok(payload.follow_ups.length >= 2, 'Should have runnable follow-ups');
|
|
304
|
+
for (const fu of payload.follow_ups) {
|
|
305
|
+
assert.ok(fu.prompt, 'Follow up must have prompt');
|
|
306
|
+
assert.ok(fu.tool, 'Follow up must specify tool');
|
|
307
|
+
assert.ok(typeof fu.args === 'object', 'Follow up must provide args object');
|
|
308
|
+
assert.ok(fu.app_url.startsWith('https://'), `Follow up app_url must be https: ${fu.app_url}`);
|
|
309
|
+
}
|
|
310
|
+
// Markdown rendering check
|
|
311
|
+
assert.ok(payload.briefing_markdown.includes('Strategic Briefing:'), 'Markdown must have main title');
|
|
312
|
+
assert.ok(payload.briefing_markdown.includes('Core Tension:'), 'Markdown must include Core Tension');
|
|
313
|
+
assert.ok(payload.briefing_markdown.includes('Core Structural Shifts'), 'Markdown must include shifts');
|
|
314
|
+
assert.ok(payload.briefing_markdown.includes('Cross-Graph Network Signals'), 'Markdown must include network signals');
|
|
315
|
+
assert.ok(payload.briefing_markdown.includes('Human Expert Digital Twin Spotlight'), 'Markdown must include expert spotlight');
|
|
316
|
+
console.log('✅ PASS: All 5 pillars verified with real catalog and object evidence.\n');
|
|
317
|
+
// -----------------------------------------------------------------------
|
|
318
|
+
// TEST 6: Pricing / SPT Invariant Safety Checks
|
|
319
|
+
// -----------------------------------------------------------------------
|
|
320
|
+
console.log('--- TEST 6: Pricing / SPT Invariant Safety Checks ---');
|
|
321
|
+
const jsonString = JSON.stringify(payload);
|
|
322
|
+
const forbiddenPatterns = [
|
|
323
|
+
/\bvia SPT\b/i,
|
|
324
|
+
/\bSPT_RATE\b/i,
|
|
325
|
+
/\btoken cost\b/i,
|
|
326
|
+
/\bshared payment token\b/i,
|
|
327
|
+
/\bSPT token\b/i,
|
|
328
|
+
];
|
|
329
|
+
for (const pattern of forbiddenPatterns) {
|
|
330
|
+
assert.ok(!pattern.test(jsonString), `Payload must not contain banned pricing/token terminology: ${pattern}`);
|
|
331
|
+
assert.ok(!pattern.test(payload.briefing_markdown), `Markdown must not contain banned pricing/token terminology: ${pattern}`);
|
|
332
|
+
}
|
|
333
|
+
console.log('✅ PASS: Zero SPT or machine-pricing terminology leaked in editorial text.\n');
|
|
334
|
+
// -----------------------------------------------------------------------
|
|
335
|
+
// TEST 7: Empty Coverage Honest Hook
|
|
336
|
+
// -----------------------------------------------------------------------
|
|
337
|
+
console.log('--- TEST 7: Honest Empty Coverage Hook ---');
|
|
338
|
+
const emptyPayload = await buildReportEditorialBriefing({
|
|
339
|
+
data: { results: [], total: 0 },
|
|
340
|
+
query: 'quantum cryogenic cooling in fast fashion',
|
|
341
|
+
annotatedData: {
|
|
342
|
+
coverage: { status: 'empty' },
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
assert.strictEqual(emptyPayload.view, 'editorial');
|
|
346
|
+
assert.ok(emptyPayload.topline_hook.text.includes('No published report intelligence was found specifically matching'), 'Empty hook must honestly state no published report was found');
|
|
347
|
+
assert.ok(!emptyPayload.topline_hook.text.includes('critical shifts across'), 'Must NOT assert fake critical shifts on empty coverage');
|
|
348
|
+
assert.strictEqual(emptyPayload.expert_spotlight, undefined, 'Must not attach an expert spotlight when coverage is empty / zero overlap');
|
|
349
|
+
console.log('✅ PASS: Honest empty coverage hook verified.\n');
|
|
350
|
+
console.log('🎉 ALL COMPREHENSIVE TESTS PASSED SUCCESSFULLY!');
|
|
351
|
+
}
|
|
352
|
+
runTests().catch(err => {
|
|
353
|
+
console.error('❌ Test failed:', err);
|
|
354
|
+
process.exit(1);
|
|
355
|
+
});
|
|
356
|
+
//# sourceMappingURL=test_report_editorial_briefing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_report_editorial_briefing.js","sourceRoot":"","sources":["../src/test_report_editorial_briefing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test_search_graph_quality.d.ts","sourceRoot":"","sources":["../src/test_search_graph_quality.ts"],"names":[],"mappings":""}
|