{"nodes": [{"id": "todo_claude_todo_09_security_hardening_spec", "label": "Security hardening spec (09)", "file_type": "document", "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "todo_claude_todo_09_security_hardening_unauth_endpoints", "label": "Unauthenticated admin/data endpoints (A1\u2013A3)", "file_type": "rationale", "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "todo_claude_todo_09_security_hardening_auth_rate_limiting", "label": "Auth-endpoint rate limiting + input caps", "file_type": "rationale", "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "todo_claude_todo_09_security_hardening_persisted_state_eval", "label": "Persisted-state eval \u2192 arbitrary code execution", "file_type": "rationale", "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "todo_claude_todo_09_security_hardening_persisted_state_eval", "target": "todo_todo_persist_reviver", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 0.95, "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "weight": 1.0}, {"source": "todo_claude_todo_09_security_hardening_spec", "target": "todo_claude_todo_09_security_hardening_unauth_endpoints", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "weight": 1.0}, {"source": "todo_claude_todo_09_security_hardening_spec", "target": "todo_claude_todo_09_security_hardening_auth_rate_limiting", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "weight": 1.0}, {"source": "todo_claude_todo_09_security_hardening_spec", "target": "todo_claude_todo_09_security_hardening_persisted_state_eval", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "TODO/claude-todo/09-security-hardening.md", "source_location": null, "weight": 1.0}], "hyperedges": [{"id": "persisted_state_hardening", "label": "Persisted browser-state eval/reviver hardening", "nodes": ["todo_todo_eval_csp", "todo_todo_persist_reviver", "todo_claude_todo_09_security_hardening_persisted_state_eval", "prs_154_claude_unified_things_page_796e34_unified_things_page_persisted_function_revival"], "relation": "form", "confidence": "INFERRED", "confidence_score": 0.7, "source_file": "TODO/claude-todo/09-security-hardening.md"}]}