{"nodes": [{"id": "remix_changelog", "label": "Thingtime web app changelog", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "remix_changelog_pr99_eval_csp", "label": "PR #99 persisted-state, CSP, register-body hardening", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "remix_changelog_pr167_auth_register_limit", "label": "PR #167 auth.register public sign-up rate limit", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "remix_changelog_service_account_rate_limit", "label": "Service-account provisioning rate limit + body cap", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "remix_changelog_legacy_function_state_repair", "label": "Legacy Thingtime function state repair on hydration", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}, {"id": "remix_changelog_root_bootstrap_secret_leak_fix", "label": "Root bootstrap no longer exposes server secrets", "file_type": "document", "source_file": "remix/CHANGELOG.md", "source_location": null, "source_url": null, "captured_at": null, "author": null, "contributor": null}], "edges": [{"source": "remix_changelog", "target": "remix_changelog_pr99_eval_csp", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog", "target": "remix_changelog_pr167_auth_register_limit", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog", "target": "remix_changelog_service_account_rate_limit", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog", "target": "remix_changelog_legacy_function_state_repair", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog", "target": "remix_changelog_root_bootstrap_secret_leak_fix", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_service_account_rate_limit", "target": "todo_claude_todo_09_security_hardening_a3_service_account", "relation": "cites", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_service_account_rate_limit", "target": "remix_app_routes_api_v1_auth_service_account__service_account", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_service_account_rate_limit", "target": "remix_app_api_http_readjsonbody", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 0.9, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_service_account_rate_limit", "target": "remix_app_api_utils_ratelimit_enforceratelimit", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_pr99_eval_csp", "target": "todo_claude_todo_09_security_hardening_c_eval_csp", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 0.9, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_pr99_eval_csp", "target": "todo_claude_todo_09_security_hardening_d_date_parse", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 0.9, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_pr99_eval_csp", "target": "remix_index_tt_boot_script", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 0.9, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_pr99_eval_csp", "target": "remix_changelog_pr167_auth_register_limit", "relation": "references", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_pr167_auth_register_limit", "target": "todo_claude_todo_09_security_hardening_b_rate_limiting", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.85, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 1.0}, {"source": "remix_changelog_legacy_function_state_repair", "target": "remix_app_providers_thingtimepersistcodec", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.7, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 0.8}, {"source": "remix_changelog_legacy_function_state_repair", "target": "remix_app_providers_thingtimeprovider", "relation": "references", "confidence": "INFERRED", "confidence_score": 0.75, "source_file": "remix/CHANGELOG.md", "source_location": null, "weight": 0.8}], "hyperedges": []}