from pathlib import Path
p = Path(r"C:\Users\dream\CCAI-Demo-Canvas-Upgrades\phd-advisor-frontend\src\components\canvas\canvasData.js")
c = p.read_text(encoding="utf-8")
start = c.index("export const INSIGHTS = [")
end = c.index("export const WIDGET_CATALOG")
insights = r'''export const INSIGHTS = [
{
id: 'i-progress',
title: 'Program progress',
icon: 'graph',
category: 'progress',
confidence: 82,
summary: 'Zero Trust Phase 2 is 78% complete. MFA enforced for workforce; service accounts and legacy VPN exceptions remain the main gaps before audit sampling.',
bullets: [
'Identity: MFA 94% workforce · service accounts in remediation',
'Network: micro-segmentation pilot on 3 app tiers',
'Risk: 12 VPN exceptions still lack compensating controls',
],
pinned: true,
sources: 18,
updatedMinutesAgo: 5,
quotes: [
'"MFA rollout blocked on two legacy HR integrations." — IAM workstream notes',
'"Auditors will sample VPN exception register first." — GRC advisor chat',
],
},
{
id: 'i-method',
title: 'Controls posture',
icon: 'flask',
category: 'theory',
confidence: 71,
summary: 'SOC 2 CC6/CC7 mappings are drafted. Detection use cases cover ransomware and cred theft; log retention and IR tabletop evidence are still thin.',
bullets: [
'Mapped: CC6.1–CC6.7 access controls with Okta + AWS',
'Open: centralized logging retention proof for 365 days',
'Open: tabletop scenario for ransomware + exfil not yet run',
],
sources: 14,
updatedMinutesAgo: 14,
quotes: [
'"Need SIEM retention screenshots before fieldwork." — compliance advisor',
'"Tabletop scheduled but not executed." — IR lead notes',
],
},
{
id: 'i-lit',
title: 'Threat landscape',
icon: 'book',
category: 'literature',
confidence: 76,
summary: 'Strong coverage of identity attacks, SaaS misconfigurations, and supply-chain risks for your stack. Weaker on OT exposure and insider threat playbooks.',
bullets: [
'Coverage: MITRE techniques for cloud identity & SaaS',
'Gap: limited intel on OAuth consent phishing variants',
'Gap: no formal insider-threat escalation path documented',
],
sources: 32,
updatedMinutesAgo: 28,
quotes: [
'"OAuth abuse is the fastest-moving thread in your sector." — threat intel advisor',
'"Insider playbook is a one-pager — not enough for audit." — GRC advisor',
],
},
{
id: 'i-questions',
title: 'Open security questions',
icon: 'sparkles',
category: 'theory',
confidence: 63,
summary: 'Three live threads. Q1 (scope of zero trust for contractors) gates architecture sign-off. Q2–Q3 affect detection engineering priorities.',
bullets: [
'Q1: Do contractors get full ZTNA or bastion-only access?',
'Q2: Which SIEM detections are in-scope for SOC 2 evidence?',
'Q3: Is customer data in EU regions in scope for DPA addendum?',
],
sources: 9,
updatedMinutesAgo: 41,
quotes: [
'"Contractor access model blocks network design." — architect advisor',
'"EU data residency may expand audit scope." — privacy advisor',
],
},
{
id: 'i-next',
title: 'Next steps',
icon: 'arrow',
category: 'action',
confidence: 85,
summary: 'Near-term actions tied to audit date and production cutover. Two items have slipped one sprint.',
bullets: [
'Close 12 VPN exceptions or document compensating controls',
'Run ransomware tabletop & upload minutes to evidence locker',
'Ship 5 high-fidelity detections to production SIEM',
'Finalize vendor SOC 2 bridge letter for subprocessors',
],
sources: 7,
updatedMinutesAgo: 9,
quotes: [
'"VPN exceptions are the #1 audit finding risk." — GRC advisor',
'"Detections without tuning will false-positive in week one." — SOC advisor',
],
},
{
id: 'i-blockers',
title: 'Blockers & risks',
icon: 'alert',
category: 'risk',
confidence: 74,
summary: 'One technical blocker (legacy logging), one governance blocker (exception approvals). Governance is the higher audit risk.',
bullets: [
'Technical: legacy app logs not reaching SIEM — 18% of prod traffic',
'Governance: exception approval SLA > 10 days — auditors will flag',
],
sources: 6,
updatedMinutesAgo: 20,
quotes: [
'"Without those logs you cannot prove detective controls." — detection engineer',
'"Exception backlog reads as control failure." — devil\'s advocate advisor',
],
},
];
'''
p.write_text(c[:start] + insights + c[end:], encoding="utf-8")
print("insights updated")