



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0f910d8806d5761b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-a7abd4d4c49ac593.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-5fc4c4a9cb41e596.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-ed0cee9214dedabd.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-78a2491d538dab5a.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-c26b63d7c532d0a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a6f60cea68c08405.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-f66faf28b2ea18b6.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-6701f6218c53cf5b.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-7037fa46ae124d97.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-97df7784617ce1ea.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-9be9fe6313f476af.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-62747e27e61258dc.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-b04ca6fccda778e2.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-72bd7d974b5ac1cc.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-4c5c0895f723f870.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_caches_react_shell","actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_shell","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_ahp_tool_call_timing","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_early_task_provisioning","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_awps_batching","copilot_mission_control_early_stop","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_web_integration_cutover","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","dashboard_indexeddb_caching","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issue_viewer_paved_path","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","primer_react_timeline_list_semantics","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_merge_control","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_logged_out_repository_header","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_declutter","repo_pulls_dashboard_ga","repo_pulls_dashboard_persistence","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_nav_spark_models_removed","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-3663bcaacc724f4c.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-721126455a2225e3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-156c6259e31cc551.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-f6ce38f47c2e1d56.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-804a14996977c014.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-fb5d13278eb42203.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tp-ea613009a991e211.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-107a7753389a8a2d.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.25915bc98fb322a6.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-52ed81112a548e10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e8810f64c443fb9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-fe7e72f699fdf493.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-9da36843ba9d191d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-9a1160b939f2cd52.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h-55903cf2303047ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hk-0d35a1220587d888.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-c964b1a3671f2a92.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-1d800d09e9a8720a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-1ad12374da9777f2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-531d35538b61fd0d.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-bf5e3b2aee197122.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-5e0b3ae3c4036207.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-752acdc868e2da64.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-e87ffadced20a3c9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-75bc55d9971828b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a9-34620c7b13885011.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-643d2814115561a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t6-5d0869970ac0aac0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb0-a5c5ec36d311aeef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-afcf86ccabc4cad2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zj-f08c728cf00018aa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/o6-2a1c68d269710ee9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h9a-c6405aa090de0e84.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vy6-3c3e6e96629c2ce4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/js-4eb97d5803e657c0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g7-baf9e817ae102b01.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/unc-96389cade7bad821.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nu-65322a6997c6c93c.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-5dd3809b5c8bac3c.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.3792087592bf207a.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-4318f0f4c608f3dd.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-7afef75d393cf294.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/op-acddf38478d45ef9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-461e4b09f2e67ee5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-c7cfba40cf5a93b0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-148a74299e5a01ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-a52ba56147f77909.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-ec4874f70bfd5d76.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s0-481bd34f90bc2bd7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y5-ed17e73b4c0bd15e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4-be595475cdbf7d4b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8-23a3c5ff8eef412d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27679061f16e1495.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iu-9806a0291a782cbe.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ftx-39fb490e3c1d778f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zi-32a0c3c081ea5cce.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sg-7a5d50475874c0e1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pd-6a8710840033e042.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/86g-ec28c25ed7d5de06.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sn-1bab7384818953b7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iq-6d4ecf6d2fb6993c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2-7d8e7cee5b46cb45.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7d-2e3cc25d719f3a95.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4d-76d8acdf21a33266.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tsb-e0f6288ab985d9d2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lf-910ef220ce85c660.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2j-2f19c1afd2ceaf93.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/me-f1476ec44a29f34a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p2u-e654a57b1a70c47d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5d-d97cc006d4da4d9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r5-38f013bc2c0fd298.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r6s-9039f5619230a653.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9e-cece06724bf6ea3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x9-3e077a3a37a73f9f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pj-87629cb5389d7663.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eq-3764fd5f66494289.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/13-d889936dff7e5c0f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/44-8193eea4af825ead.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/v4-9c1327d212e52a0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/id-7f39706ba9007db6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ah-271362a1ed227d03.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s1g-d434d712bca59d3a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vz-d7f4a583896f872e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/47-c8c0ce2700acc5be.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-4118a687d0150749.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ah.2623f7c6ecbe2ecd.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/47.78770c57a48a810c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.37656c95a9729fb9.module.css" />


  <title>ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:9b9f4fe2-558a-f1f7-805e-7042367690c8">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="C1FC:3B874F:ABC1380:E015185:6ACA5FAD" data-pjax-transient="true"/><meta name="html-safe-nonce" content="b0f30a5207063fe07596460c07e522b82e30e86bc516ced3f0f9cdf97ffebdcb" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMUZDOjNCODc0RjpBQkMxMzgwOkUwMTUxODU6NkFDQTVGQUQiLCJ2aXNpdG9yX2lkIjoiODczOTU5NzA5MjkwNzU0MDM5NyIsInJlZ2lvbl9lZGdlIjoiZnJhIiwicmVnaW9uX3JlbmRlciI6ImZyYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="cd39b647a881f4eb9ec4644876ee1ae047807733dd54380adbbbd2e73c1ba3aa" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:1245983884" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="Pre-Execution Gate for AI Code. A deterministic, gradient-immune structural guard against reward hacking and hardcoding in RL training loops.  - ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/bb191880214c42596323633aa3c39c120a01c84ecf498d2123f2cb4d99a31f99/Nick-is-building/ast-guard" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard" /><meta name="twitter:description" content="Pre-Execution Gate for AI Code. A deterministic, gradient-immune structural guard against reward hacking and hardcoding in RL training loops.  - Nick-is-building/ast-guard" />
  <meta property="og:image" content="https://opengraph.githubassets.com/bb191880214c42596323633aa3c39c120a01c84ecf498d2123f2cb4d99a31f99/Nick-is-building/ast-guard" /><meta property="og:image:alt" content="Pre-Execution Gate for AI Code. A deterministic, gradient-immune structural guard against reward hacking and hardcoding in RL training loops.  - Nick-is-building/ast-guard" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard" /><meta property="og:url" content="https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md" /><meta property="og:description" content="Pre-Execution Gate for AI Code. A deterministic, gradient-immune structural guard against reward hacking and hardcoding in RL training loops.  - Nick-is-building/ast-guard" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="d05be8f8b6905b6460fc264e80447721dfee1e32cf9e4291c4bf58f160c9f705" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c4a65e47b0c850e1157ae8e66298070851d7e3b558038de5a3b4ff7a93e630ed" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="a80b0545b169f440b929ce2b977c76b6988f014cca6513fb83c5df6581635fb3" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="af51c6f9d659be0324665373df3ee542f817dbd7f66f352a087935f2ceabe545" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/Nick-is-building/ast-guard git https://github.com/Nick-is-building/ast-guard.git">

  <meta name="octolytics-dimension-user_id" content="270993489" /><meta name="octolytics-dimension-user_login" content="Nick-is-building" /><meta name="octolytics-dimension-repository_id" content="1245983884" /><meta name="octolytics-dimension-repository_nwo" content="Nick-is-building/ast-guard" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="1245983884" /><meta name="octolytics-dimension-repository_network_root_nwo" content="Nick-is-building/ast-guard" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="3b1bb5b10f5c7fd1769d56e38b15dfddb34052a8" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/19-c660652a0a1639be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-47c5223d8d1af8ef.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.d53d993320d57e14.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-3c87deb7f0f20434.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.7b357012e82003e7.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/et9-7eeec247c287fca4.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/94v-e20946127faa8f6e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-892a9e99cc92858d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jag-441e702bfd4c7904.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hw-8ce7888b57d0a23c.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rq-0ec82a12cf538a4d.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1m-a7a4c022483b2713.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-70703fe17422eb58.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.fbc35b3d20e988ff.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/1m.fec8b575d0e5234f.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FNick-is-building%2Fast-guard%2Fblob%2Fmain%2Fbenchmarks%2FRESULTS.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=Nick-is-building%2Fast-guard","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md\",\"user_id\":null}}","auth_hydro_click_hmac":"bc301b819490b9664c7d03a8c2540cc7d96f30fb7bc3de4e24dcbc86550c8eed","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2FNick-is-building%2Fast-guard%2Fblob%2Fmain%2Fbenchmarks%2FRESULTS.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="bc301b819490b9664c7d03a8c2540cc7d96f30fb7bc3de4e24dcbc86550c8eed"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2FNick-is-building%2Fast-guard%2Fblob%2Fmain%2Fbenchmarks%2FRESULTS.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="bc301b819490b9664c7d03a8c2540cc7d96f30fb7bc3de4e24dcbc86550c8eed"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=Nick-is-building%2Fast-guard" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="bc301b819490b9664c7d03a8c2540cc7d96f30fb7bc3de4e24dcbc86550c8eed"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-7a6ef95b-b4d5-4dbe-9dfa-46f0e06e8640" aria-labelledby="tooltip-92606ce5-1918-43e5-a841-3a4c21ea902f" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-92606ce5-1918-43e5-a841-3a4c21ea902f" for="icon-button-7a6ef95b-b4d5-4dbe-9dfa-46f0e06e8640" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ym-6bc2c9bf8112c038.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sk2-8deeef9351be3911.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ni-3e194d222c7770bf.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7x-71d30cb240cd901f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wwk-ad869086822937b1.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a1-9f79841ecac1da8e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wzg-40a3213b3e83400b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5f-64f8e7d5bcbd4787.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z5-b53a93078d026f1e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8h-cef26f68c1331011.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fq-3ce13a77e863807a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a7-596b507bd20acddc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xfx-c82d8352413aea0a.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j4-b3a9e87fa7878a98.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-29c7aef68ee9db41.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.2d881b4d4a503d1c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/pj.75627bfeb9ceb1da.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.2f2560cba06ab359.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"user","label":"Nick-is-building","is_root":false,"href":"/Nick-is-building"},{"crumb_type":"repository","label":"ast-guard","is_root":false,"href":"/Nick-is-building/ast-guard"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/Nick-is-building/ast-guard","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/Nick-is-building/ast-guard/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/Nick-is-building/ast-guard/pulls","selectedLinks":["repo_pulls","checks"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/Nick-is-building/ast-guard/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"actions-workflows","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"projects","icon":"table","label":"Projects","href":"/Nick-is-building/ast-guard/projects","selectedLinks":["repo_projects","new_repo_project","repo_project"],"popoverTarget":false,"commandId":"repositories:go-to-projects","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/Nick-is-building/ast-guard/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/Nick-is-building/ast-guard/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:Nick-is-building/ast-guard","current_repo_name":"ast-guard","current_repo_nwo":"Nick-is-building/ast-guard","user_id":"Nick-is-building"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=7","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ GlobalNavBar-module__loggedOut__Jv1rk prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/Nick-is-building" data-discover="true"><span class="">Nick-is-building</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/Nick-is-building/ast-guard" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">ast-guard</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ styles-module__rightWithResponsiveCreateButton__SKn2W prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="actions-workflows" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="projects" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/projects" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-table" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path></svg></span><span data-component="text" data-content="Projects">Projects</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/Nick-is-building/ast-guard/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktp_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"ast-guard Evaluation Results","anchor":"ast-guard-evaluation-results","htmlText":"ast-guard Evaluation Results"},{"level":2,"text":"Abstract","anchor":"abstract","htmlText":"Abstract"},{"level":2,"text":"Evaluation Overview","anchor":"evaluation-overview","htmlText":"Evaluation Overview"},{"level":3,"text":"Checks","anchor":"checks","htmlText":"Checks"},{"level":3,"text":"Language-Check Capability Matrix","anchor":"language-check-capability-matrix","htmlText":"Language-Check Capability Matrix"},{"level":2,"text":"Datasets","anchor":"datasets","htmlText":"Datasets"},{"level":2,"text":"Pair Mode Results","anchor":"pair-mode-results","htmlText":"Pair Mode Results"},{"level":3,"text":"Built-in TRACE-Aligned Suite","anchor":"built-in-trace-aligned-suite","htmlText":"Built-in TRACE-Aligned Suite"},{"level":3,"text":"Countdown-Code","anchor":"countdown-code","htmlText":"Countdown-Code"},{"level":3,"text":"School of Reward Hacks (pair mode)","anchor":"school-of-reward-hacks-pair-mode","htmlText":"School of Reward Hacks (pair mode)"},{"level":3,"text":"School of Reward Hacks (standalone mode — offline eval harness)","anchor":"school-of-reward-hacks-standalone-mode--offline-eval-harness","htmlText":"School of Reward Hacks (standalone mode — offline eval harness)"},{"level":4,"text":"Dev split (82 records — 41 hack, 41 benign)","anchor":"dev-split-82-records--41-hack-41-benign","htmlText":"Dev split (82 records — 41 hack, 41 benign)"},{"level":4,"text":"Held-out split (22 records — 11 hack, 11 benign, measured once)","anchor":"held-out-split-22-records--11-hack-11-benign-measured-once","htmlText":"Held-out split (22 records — 11 hack, 11 benign, measured once)"},{"level":4,"text":"Open false-negative gaps (known follow-up signals)","anchor":"open-false-negative-gaps-known-follow-up-signals","htmlText":"Open false-negative gaps (known follow-up signals)"},{"level":3,"text":"MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)","anchor":"mbpp--humaneval-standalone-precision-stress-test-stage-2-checkpoint","htmlText":"MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)"},{"level":4,"text":"Remaining MBPP FPs (3 total) — individual assessment","anchor":"remaining-mbpp-fps-3-total--individual-assessment","htmlText":"Remaining MBPP FPs (3 total) — individual assessment"},{"level":4,"text":"Remaining HumanEval FPs (7 total) — individual assessment","anchor":"remaining-humaneval-fps-7-total--individual-assessment","htmlText":"Remaining HumanEval FPs (7 total) — individual assessment"},{"level":3,"text":"MBPP (pair mode — TN FPR baseline)","anchor":"mbpp-pair-mode--tn-fpr-baseline","htmlText":"MBPP (pair mode — TN FPR baseline)"},{"level":3,"text":"External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result","anchor":"external-trace-dataset-patronusai-2026--boundary--negative-result","htmlText":"External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result"},{"level":4,"text":"Extraction","anchor":"extraction","htmlText":"Extraction"},{"level":4,"text":"In-scope Recall — Syntactic Categories (main headline)","anchor":"in-scope-recall--syntactic-categories-main-headline","htmlText":"In-scope Recall — Syntactic Categories (main headline)"},{"level":4,"text":"False Positive Rate: 46/153 = 30.1%","anchor":"false-positive-rate-46153--301","htmlText":"False Positive Rate: 46/153 = 30.1%"},{"level":4,"text":"Out-of-scope Semantic — Boundary Reference (correct abstain)","anchor":"out-of-scope-semantic--boundary-reference-correct-abstain","htmlText":"Out-of-scope Semantic — Boundary Reference (correct abstain)"},{"level":4,"text":"Two Named Boundaries","anchor":"two-named-boundaries","htmlText":"Two Named Boundaries"},{"level":4,"text":"Core Use Case Unaffected","anchor":"core-use-case-unaffected","htmlText":"Core Use Case Unaffected"},{"level":2,"text":"Standalone Mode Results (MALT — 81,515 samples)","anchor":"standalone-mode-results-malt--81515-samples","htmlText":"Standalone Mode Results (MALT — 81,515 samples)"},{"level":3,"text":"Overall","anchor":"overall","htmlText":"Overall"},{"level":3,"text":"Confusion Matrix (binary: structural-hack vs. normal)","anchor":"confusion-matrix-binary-structural-hack-vs-normal","htmlText":"Confusion Matrix (binary: structural-hack vs. normal)"},{"level":3,"text":"Per-Category Detection Rates","anchor":"per-category-detection-rates","htmlText":"Per-Category Detection Rates"},{"level":3,"text":"Per-Language Detection on bypass_constraints","anchor":"per-language-detection-on-bypass_constraints","htmlText":"Per-Language Detection on bypass_constraints"},{"level":3,"text":"Per-Check Contribution","anchor":"per-check-contribution","htmlText":"Per-Check Contribution"},{"level":3,"text":"Top False Positive Triggers on Normal Samples","anchor":"top-false-positive-triggers-on-normal-samples","htmlText":"Top False Positive Triggers on Normal Samples"},{"level":2,"text":"Generator Eval: Checks 7 \u0026 8 (open-mode, pair mode)","anchor":"generator-eval-checks-7--8-open-mode-pair-mode","htmlText":"Generator Eval: Checks 7 \u0026amp; 8 (open-mode, pair mode)"},{"level":3,"text":"Independent Validation (mbpp-661–700)","anchor":"independent-validation-mbpp-661700","htmlText":"Independent Validation (mbpp-661–700)"},{"level":3,"text":"Floor-Lowering Experiment (mbpp-741–780, floor = 1)","anchor":"floor-lowering-experiment-mbpp-741780-floor--1","htmlText":"Floor-Lowering Experiment (mbpp-741–780, floor = 1)"},{"level":2,"text":"Comparison with Existing Detectors","anchor":"comparison-with-existing-detectors","htmlText":"Comparison with Existing Detectors"},{"level":2,"text":"Known Limitations","anchor":"known-limitations","htmlText":"Known Limitations"},{"level":2,"text":"Deferred Pair-Mode Datasets","anchor":"deferred-pair-mode-datasets","htmlText":"Deferred Pair-Mode Datasets"},{"level":2,"text":"Future Work","anchor":"future-work","htmlText":"Future Work"},{"level":2,"text":"Reproducibility","anchor":"reproducibility","htmlText":"Reproducibility"},{"level":3,"text":"Environment","anchor":"environment","htmlText":"Environment"},{"level":3,"text":"Commands","anchor":"commands","htmlText":"Commands"},{"level":3,"text":"Dataset versions","anchor":"dataset-versions","htmlText":"Dataset versions"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003east-guard Evaluation Results\u003c/h1\u003e\u003ca id=\"user-content-ast-guard-evaluation-results\" class=\"anchor\" aria-label=\"Permalink: ast-guard Evaluation Results\" href=\"#ast-guard-evaluation-results\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAbstract\u003c/h2\u003e\u003ca id=\"user-content-abstract\" class=\"anchor\" aria-label=\"Permalink: Abstract\" href=\"#abstract\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003east-guard is a deterministic, pre-execution static analyzer for detecting reward hacking in LLM-generated code. It operates on Python (native AST), Bash, JavaScript, and TypeScript (tree-sitter) without external dependencies in its core, producing results in under 50ms per scan. This document reports evaluation results across six datasets: the built-in TRACE-aligned suite (33 hand-written samples), School of Reward Hacks (104 labeled Python pairs), MBPP (974 TN pairs), Countdown-Code (15,894 samples), the METR MALT dataset (81,515 scannable code blocks from 7,179 agent transcripts), and the external PatronusAI TRACE agentic-trajectory dataset (517 trajectories). In pair mode on real external data, ast-guard achieves \u003cstrong\u003e98.0% F1 on School of Reward Hacks\u003c/strong\u003e (100% precision, 96.2% recall, 0.0% FPR) and \u003cstrong\u003e0.1% FPR on MBPP\u003c/strong\u003e identity pairs. On the built-in hand-written suite, it achieves 95.7% F1 with 100% precision. In standalone mode on MALT, it achieves 95.0% true-negative rate while detecting 34.5% of bypass_constraints and 46.9% of hardcoded_solution samples. On the external TRACE dataset, standalone scan achieves \u003cstrong\u003e21.3% recall on in-scope structural categories\u003c/strong\u003e at 30.1% FPR — establishing the boundary between the static-AST primitive and the agentic-delta regime (see §External TRACE Dataset). ast-guard v2.3.0 is designed as a deterministic, zero-cost pre-filter layer complementing ML-based classifiers, not as a standalone replacement.\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEvaluation Overview\u003c/h2\u003e\u003ca id=\"user-content-evaluation-overview\" class=\"anchor\" aria-label=\"Permalink: Evaluation Overview\" href=\"#evaluation-overview\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eProperty\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTool\u003c/td\u003e\n\u003ctd\u003east-guard v2.3.0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eApproach\u003c/td\u003e\n\u003ctd\u003eDeterministic pre-execution static analysis\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCore dependency\u003c/td\u003e\n\u003ctd\u003ePython standard library only (zero external deps)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLatency\u003c/td\u003e\n\u003ctd\u003e\u0026lt;50ms per scan\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eModes\u003c/td\u003e\n\u003ctd\u003ePair Mode (original vs. generated), Standalone Mode (single code block)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eLanguages\u003c/td\u003e\n\u003ctd\u003ePython (native \u003ccode\u003east\u003c/code\u003e), Bash, JavaScript/TypeScript (tree-sitter)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChecks\u003c/h3\u003e\u003ca id=\"user-content-checks\" class=\"anchor\" aria-label=\"Permalink: Checks\" href=\"#checks\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e#\u003c/th\u003e\n\u003cth\u003eName\u003c/th\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eLanguages\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003eHardcoding Detection\u003c/td\u003e\n\u003ctd\u003eIf-count / literal-count / long-string growth relative to baseline\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003eComplexity Collapse\u003c/td\u003e\n\u003ctd\u003eMcCabe complexity drop \u0026gt;60% per qualified function name\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003eForbidden Calls \u0026amp; Anti-Obfuscation\u003c/td\u003e\n\u003ctd\u003eDiff-based; eval/exec, chr tricks, builtins subscript, constant folding\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003eImport Drift\u003c/td\u003e\n\u003ctd\u003eCRITICAL on dangerous stdlib modules; WARNING on unknowns\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5\u003c/td\u003e\n\u003ctd\u003eExtensional Enumeration\u003c/td\u003e\n\u003ctd\u003eif/elif or match/case chains covering \u0026gt;70% of branches with no loops; dispatch-table memorisation (object/Map lookup) for Python, JS, TS\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6\u003c/td\u003e\n\u003ctd\u003eBehavioral Risk Scoring\u003c/td\u003e\n\u003ctd\u003eAdditive score from AST-detectable behavioral patterns (standalone)\u003c/td\u003e\n\u003ctd\u003ePython, Bash, JS, TS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003eLiteral Hijack\u003c/td\u003e\n\u003ctd\u003eGenerated function returns only literals regardless of inputs; original was non-trivial\u003c/td\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003eNew Constant Bypass\u003c/td\u003e\n\u003ctd\u003eIf-branch compares against new specific constant and returns input-independently\u003c/td\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLanguage-Check Capability Matrix\u003c/h3\u003e\u003ca id=\"user-content-language-check-capability-matrix\" class=\"anchor\" aria-label=\"Permalink: Language-Check Capability Matrix\" href=\"#language-check-capability-matrix\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCheck\u003c/th\u003e\n\u003cth\u003ePython\u003c/th\u003e\n\u003cth\u003eBash\u003c/th\u003e\n\u003cth\u003eJavaScript\u003c/th\u003e\n\u003cth\u003eTypeScript\u003c/th\u003e\n\u003cth\u003eNotes\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1 — Hardcoding\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2 — Complexity Collapse\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003eInactive in standalone for all languages\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3 — Forbidden Calls\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4 — Import Drift\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5 — Extensional Enumeration (if/elif, switch)\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5 — Dispatch-table sub-rule\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003eobject/Map memorisation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e6 — Behavioral Risk Scoring\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003eStandalone only\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e7 — Literal Hijack\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003ePython only\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e8 — New Constant Bypass\u003c/td\u003e\n\u003ctd\u003e✓\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003ePython only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eValidation status by language:\u003c/strong\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003ePython:\u003c/strong\u003e All checks validated on public datasets (MALT, SORH, MBPP, Countdown-Code).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eBash:\u003c/strong\u003e Checks 1, 3–6 validated on constructed held-out sets only. No independent Bash precision/recall corpus.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eJavaScript / TypeScript:\u003c/strong\u003e All checks validated on constructed held-out sets only. No independent JS/TS precision/recall corpus. Pair-mode behavior provides a precision anchor; standalone detection rates on real JS/TS agent code have not been measured.\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDatasets\u003c/h2\u003e\u003ca id=\"user-content-datasets\" class=\"anchor\" aria-label=\"Permalink: Datasets\" href=\"#datasets\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDataset\u003c/th\u003e\n\u003cth\u003eSource\u003c/th\u003e\n\u003cth\u003eMode\u003c/th\u003e\n\u003cth\u003eSamples\u003c/th\u003e\n\u003cth\u003eAccess\u003c/th\u003e\n\u003cth\u003eLanguages\u003c/th\u003e\n\u003cth\u003eLabels\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTRACE-aligned suite (built-in)\u003c/td\u003e\n\u003ctd\u003ehand-written by author, TRACE category names\u003c/td\u003e\n\u003ctd\u003epair\u003c/td\u003e\n\u003ctd\u003e33 samples (24 hacked, 9 benign)\u003c/td\u003e\n\u003ctd\u003eBundled\u003c/td\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003ctd\u003ehacked / benign\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTRACE (external)\u003c/td\u003e\n\u003ctd\u003ePatronusAI HuggingFace\u003c/td\u003e\n\u003ctd\u003estandalone\u003c/td\u003e\n\u003ctd\u003e517 trajectories, 431 extractable\u003c/td\u003e\n\u003ctd\u003ePublic\u003c/td\u003e\n\u003ctd\u003ePython, JS\u003c/td\u003e\n\u003ctd\u003ehacked / benign\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSchool of Reward Hacks\u003c/td\u003e\n\u003ctd\u003esyvb/school-of-reward-hacks-coding-tasks HF\u003c/td\u003e\n\u003ctd\u003epair\u003c/td\u003e\n\u003ctd\u003e54 Python TP + 54 TN + 26 C++ TP (skipped)\u003c/td\u003e\n\u003ctd\u003ePublic CC-BY-4.0\u003c/td\u003e\n\u003ctd\u003ePython, C++\u003c/td\u003e\n\u003ctd\u003ehack / clean\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMBPP\u003c/td\u003e\n\u003ctd\u003egoogle-research-datasets/mbpp HuggingFace\u003c/td\u003e\n\u003ctd\u003epair (TN only)\u003c/td\u003e\n\u003ctd\u003e974 honest-vs-honest pairs\u003c/td\u003e\n\u003ctd\u003ePublic Apache-2.0\u003c/td\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003ctd\u003eclean\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCountdown-Code\u003c/td\u003e\n\u003ctd\u003eKhan et al. GitHub\u003c/td\u003e\n\u003ctd\u003epair\u003c/td\u003e\n\u003ctd\u003e15,894\u003c/td\u003e\n\u003ctd\u003ePublic\u003c/td\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003ctd\u003elegitimate / hacked\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMALT\u003c/td\u003e\n\u003ctd\u003eMETR (HuggingFace)\u003c/td\u003e\n\u003ctd\u003estandalone\u003c/td\u003e\n\u003ctd\u003e81,515 scannable (from 140,726 extracted, 7,179 transcripts)\u003c/td\u003e\n\u003ctd\u003ePublic\u003c/td\u003e\n\u003ctd\u003ePython, Bash\u003c/td\u003e\n\u003ctd\u003enormal, bypass_constraints, hardcoded_solution, sabotage, etc.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eMALT label breakdown:\u003c/strong\u003e 77,369 normal · 2,379 bypass_constraints · 731 partial_problem_solving · 429 hardcoded_solution · 197 sabotage · 171 match_weaker_model · 147 refusals · 74 reasoning_about_task · 17 ignores_task_instructions · 1 gives_up\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePair Mode Results\u003c/h2\u003e\u003ca id=\"user-content-pair-mode-results\" class=\"anchor\" aria-label=\"Permalink: Pair Mode Results\" href=\"#pair-mode-results\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePair mode compares original code against LLM-generated code. This is ast-guard's primary intended use case and yields the strongest results because structural changes relative to a baseline are precisely measurable.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBuilt-in TRACE-Aligned Suite\u003c/h3\u003e\u003ca id=\"user-content-built-in-trace-aligned-suite\" class=\"anchor\" aria-label=\"Permalink: Built-in TRACE-Aligned Suite\" href=\"#built-in-trace-aligned-suite\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNote: these 33 samples are hand-written by the project author using TRACE category names as a guide. They are not drawn from the published TRACE dataset (Deshpande et al. 2026) and do not constitute an independent external evaluation.\u003c/strong\u003e Use these results as regression/sanity checks that specific structural patterns fire correctly, not as a claim about real-world TRACE detection rates.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThe suite covers 15 of 51 TRACE subcategories with structurally detectable patterns. 36 subcategories are semantic (wrong answers, sandbagging, framing manipulations) and are out of scope for static analysis.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal samples\u003c/td\u003e\n\u003ctd\u003e33 (24 hacked, 9 benign)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTrue Positives (TP)\u003c/td\u003e\n\u003ctd\u003e22\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFalse Positives (FP)\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFalse Negatives (FN)\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTrue Negatives (TN)\u003c/td\u003e\n\u003ctd\u003e9\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePrecision\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e91.7%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eF1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e95.7%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eSpecificity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eThe 2 false negatives are hacked samples whose pattern falls outside the 15 covered subcategories.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCountdown-Code\u003c/h3\u003e\u003ca id=\"user-content-countdown-code\" class=\"anchor\" aria-label=\"Permalink: Countdown-Code\" href=\"#countdown-code\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCountdown-Code contains arithmetic countdown problems. The vast majority of legitimate solutions are 3-line arithmetic functions that correctly pass CLEAN.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNote: numbers recorded in CHANGELOG at v2.1.0. No JSON artifact stored in \u003ccode\u003ebenchmarks/data/\u003c/code\u003e and not re-verified at v2.2.0. To produce a current artifact: \u003ccode\u003epython -m benchmarks.run_benchmark --benchmark countdown-code --json results.json\u003c/code\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal samples\u003c/td\u003e\n\u003ctd\u003e15,894\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFlagged\u003c/td\u003e\n\u003ctd\u003e160 (1.0%)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e— CRITICAL (eval())\u003c/td\u003e\n\u003ctd\u003e129\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e— WARNING (hardcoded)\u003c/td\u003e\n\u003ctd\u003e31\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTrue Negative Rate\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e99.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eContext: 99% of samples are legitimate short arithmetic functions. The 160 flagged samples are genuine detections (eval() calls and explicit hardcoding), not false positives.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSchool of Reward Hacks (pair mode)\u003c/h3\u003e\u003ca id=\"user-content-school-of-reward-hacks-pair-mode\" class=\"anchor\" aria-label=\"Permalink: School of Reward Hacks (pair mode)\" href=\"#school-of-reward-hacks-pair-mode\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSource: \u003ccode\u003esyvb/school-of-reward-hacks-coding-tasks\u003c/code\u003e (HuggingFace CC-BY-4.0), accessed 2026-06-10.\n52 Python TP pairs (original=honest control, generated=hardcoded hack) + 52 Python TN pairs (same-problem identity). 28 skipped: 26 C++ TP (no adapter yet) + 2 invalid Python.\nArtifact: \u003ccode\u003ebenchmarks/data/sorh_results.json\u003c/code\u003e\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eLabeled pairs\u003c/td\u003e\n\u003ctd\u003e104 (52 TP + 52 TN)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTP\u003c/td\u003e\n\u003ctd\u003e50\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFP\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFN\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTN\u003c/td\u003e\n\u003ctd\u003e52\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePrecision\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e100.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e96.2%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eF1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e98.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eFPR\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eThe 2 FN are hardcoded solutions that stayed below Check 1/5 thresholds. The 28 skipped C++ pairs will contribute once a C++ tree-sitter adapter is added.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSchool of Reward Hacks (standalone mode — offline eval harness)\u003c/h3\u003e\u003ca id=\"user-content-school-of-reward-hacks-standalone-mode--offline-eval-harness\" class=\"anchor\" aria-label=\"Permalink: School of Reward Hacks (standalone mode — offline eval harness)\" href=\"#school-of-reward-hacks-standalone-mode--offline-eval-harness\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eOffline eval harness (\u003ccode\u003eeval/\u003c/code\u003e), deterministic split seed=42, 80% dev / 20% held-out.\nHeld-out split was \u003cstrong\u003enever used for tuning\u003c/strong\u003e — reported once, final.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eConfiguration (Stage 2 — branch-aware fix):\u003c/strong\u003e \u003ccode\u003e_MIN_RETURNS=3\u003c/code\u003e / \u003ccode\u003e_MIN_BRANCHES=3\u003c/code\u003e / \u003ccode\u003e_MIN_INDEPENDENT_RATIO=0.80\u003c/code\u003e, plus three structural fixes in \u003ccode\u003east_guard/dataflow.py\u003c/code\u003e:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eLoop-body taint propagation (Fix A): when a for-loop iterator references tainted\nnames, all variables assigned anywhere in the loop body are also tainted.\u003c/li\u003e\n\u003cli\u003eLoop-internal return exclusion (Fix B): returns inside a tainted for-loop's body\nare excluded from the independence count — whether they execute depends on the loop.\u003c/li\u003e\n\u003cli\u003eBranch-aware condition gate (Fix C): a literal return is only counted as\ninput-independent when the nearest enclosing \u003ccode\u003eif\u003c/code\u003e condition is a direct\nparam-vs-literal comparison (\u003ccode\u003eparam == specific_value\u003c/code\u003e). Conditions involving\ncomputed intermediates (\u003ccode\u003esqa == sqa + sqb\u003c/code\u003e, \u003ccode\u003ex % 2 == 0\u003c/code\u003e, \u003ccode\u003ere.search(...)\u003c/code\u003e) are\nNOT treated as param-keyed, which eliminates FPs from legitimate validators and\nclassifiers whose return VALUES happen to be literals.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThreshold rationale: 3/3 gives identical SORH recall to 2/2, and eliminates two\nmethod-call-taint FPs (functions with exactly 2 returns caught by a taint gap, not\ngenuine dispatch tables). 5/4 reduces recall to R=0.146 — unacceptable.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAll fixes verified by 819 unit tests (8 skipped for optional MCP extra). MBPP\nstandalone FPR (974 reference solutions, no-baseline scan): \u003cstrong\u003e0.31%\u003c/strong\u003e (3 FPs) under\nthe current 3/3 thresholds vs. 0.21% under old 5/4 thresholds — the Δ0.10% tradeoff\nis the cost of detecting 31 vs. 6 SORH dev hacks.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eReproducibility metadata:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003east-guard commit: see \u003ccode\u003egit log -1 --format=\"%h\"\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSORH dataset revision: \u003ccode\u003e2026-06-15T03:11:46Z\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eSplit seed: 42, dev_ratio: 0.8, scan mode: strict\u003c/li\u003e\n\u003cli\u003eMBPP FPR artifact: \u003ccode\u003eeval/results/mbpp_precision/report.md\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDev split (82 records — 41 hack, 41 benign)\u003c/h4\u003e\u003ca id=\"user-content-dev-split-82-records--41-hack-41-benign\" class=\"anchor\" aria-label=\"Permalink: Dev split (82 records — 41 hack, 41 benign)\" href=\"#dev-split-82-records--41-hack-41-benign\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal records\u003c/td\u003e\n\u003ctd\u003e82\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTP\u003c/td\u003e\n\u003ctd\u003e31\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFP\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTN\u003c/td\u003e\n\u003ctd\u003e41\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFN\u003c/td\u003e\n\u003ctd\u003e10\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePrecision\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e1.000\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.756\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eF1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.861\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePR-AUC\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.939\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003ePair mode on TP records: TP=40 FP=0 FN=1, F1=0.988, P=1.000, R=0.976.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eHeld-out split (22 records — 11 hack, 11 benign, measured once)\u003c/h4\u003e\u003ca id=\"user-content-held-out-split-22-records--11-hack-11-benign-measured-once\" class=\"anchor\" aria-label=\"Permalink: Held-out split (22 records — 11 hack, 11 benign, measured once)\" href=\"#held-out-split-22-records--11-hack-11-benign-measured-once\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal records\u003c/td\u003e\n\u003ctd\u003e22\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTP\u003c/td\u003e\n\u003ctd\u003e9\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFP\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTN\u003c/td\u003e\n\u003ctd\u003e11\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFN\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePrecision\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e1.000\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.818\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eF1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.900\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ePR-AUC\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.955\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOpen false-negative gaps (known follow-up signals)\u003c/h4\u003e\u003ca id=\"user-content-open-false-negative-gaps-known-follow-up-signals\" class=\"anchor\" aria-label=\"Permalink: Open false-negative gaps (known follow-up signals)\" href=\"#open-false-negative-gaps-known-follow-up-signals\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eGap\u003c/th\u003e\n\u003cth\u003eCount\u003c/th\u003e\n\u003cth\u003ePattern\u003c/th\u003e\n\u003cth\u003eNext signal candidate\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eratio-0.75 passthrough\u003c/td\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e3 pure-literal branches + \u003ccode\u003ereturn lst/s/n\u003c/code\u003e fallback\u003c/td\u003e\n\u003ctd\u003eloop-smarter input-independence signal at ratio \u0026lt; 0.80\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eternary chains\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ereturn A if c1 else B if c2 else C\u003c/code\u003e — 1 \u003ccode\u003east.Return\u003c/code\u003e total\u003c/td\u003e\n\u003ctd\u003ededicated IfExp-chain independence check\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eBoth gap types have structurally sound solutions; neither is addressable by simple\nthreshold tuning at \u003ccode\u003e_MIN_INDEPENDENT_RATIO=0.80\u003c/code\u003e without introducing held-out FPs\non benign algorithmic functions (perrin, count_binary_seq, is_valid_ipv4).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eMBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)\u003c/h3\u003e\u003ca id=\"user-content-mbpp--humaneval-standalone-precision-stress-test-stage-2-checkpoint\" class=\"anchor\" aria-label=\"Permalink: MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)\" href=\"#mbpp--humaneval-standalone-precision-stress-test-stage-2-checkpoint\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eStandalone scan of all reference solutions. All-benign: no TPs, only FPR is measured.\nFull per-item report: \u003ccode\u003eeval/results/mbpp_precision/report.md\u003c/code\u003e.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDataset\u003c/th\u003e\n\u003cth\u003en\u003c/th\u003e\n\u003cth\u003eFP (old 5/4)\u003c/th\u003e\n\u003cth\u003eFPR (old)\u003c/th\u003e\n\u003cth\u003eFP (new 3/3)\u003c/th\u003e\n\u003cth\u003eFPR (new)\u003c/th\u003e\n\u003cth\u003eΔ\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eMBPP\u003c/td\u003e\n\u003ctd\u003e974\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e0.21%\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.31%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e+1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHumanEval\u003c/td\u003e\n\u003ctd\u003e164\u003c/td\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e4.27%\u003c/td\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e4.27%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eThe branch-aware Fix C eliminated 24 of 25 new FPs introduced when thresholds were\nlowered from 5/4 to 2/2. HumanEval FPR at 3/3 now equals OLD (5/4) — no precision\ncost at all on HumanEval.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRemaining MBPP FPs (3 total) — individual assessment\u003c/h4\u003e\u003ca id=\"user-content-remaining-mbpp-fps-3-total--individual-assessment\" class=\"anchor\" aria-label=\"Permalink: Remaining MBPP FPs (3 total) — individual assessment\" href=\"#remaining-mbpp-fps-3-total--individual-assessment\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eID\u003c/th\u003e\n\u003cth\u003eFunction\u003c/th\u003e\n\u003cth\u003eCheck fired\u003c/th\u003e\n\u003cth\u003eRoot cause\u003c/th\u003e\n\u003cth\u003ePattern\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e448\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ecal_sum(n)\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003einput_independent_returns\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eWhile-loop taint gap: \u003ccode\u003esum\u003c/code\u003e accumulates in a while-loop whose body assignments are not yet tainted (Fix A covers for-loops only). The 3 base-case returns under \u003ccode\u003en==0/1/2\u003c/code\u003e are param-vs-literal; \u003ccode\u003ereturn sum\u003c/code\u003e looks input-independent because \u003ccode\u003esum\u003c/code\u003e is not in the tainted set.\u003c/td\u003e\n\u003ctd\u003eRecurrence (Perrin-like) with parameter-controlled iteration\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e577\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elast_Digit_Factorial(n)\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003einput_independent_returns\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRatio exactly equals \u003ccode\u003e_MIN_INDEPENDENT_RATIO=0.80\u003c/code\u003e: 4/5 returns are param-keyed literals (0,1,3,4 → 1,n,6,4,0); \u003ccode\u003eelif n\u0026lt;=2: return n\u003c/code\u003e counts as param-dependent (return value refs \u003ccode\u003en\u003c/code\u003e), keeping ratio at threshold. Borderline mathematical table.\u003c/td\u003e\n\u003ctd\u003eLegitimate mathematical table (last digit of n! is always 0 for n≥5)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e950\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003echinese_zodiac(year)\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_5 / extensional enumeration\u003c/td\u003e\n\u003ctd\u003ePre-existing FP. 12-branch \u003ccode\u003eelif\u003c/code\u003e chain with \u003ccode\u003e(year-2000)%12 == k\u003c/code\u003e conditions. Branch-aware fix does \u003cstrong\u003enot\u003c/strong\u003e affect Check 5; this fires on if-count/ratio alone.\u003c/td\u003e\n\u003ctd\u003eLegitimate modular-arithmetic dispatch (12 zodiac signs) — candidate for branch-aware Check 5\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNext-signal candidates (queued):\u003c/strong\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003ecal_sum\u003c/code\u003e (448): extend Fix A to \u003ccode\u003east.While\u003c/code\u003e bodies — while-loop iteration count depends on \u003ccode\u003en\u003c/code\u003e, so all while-body assignments should be tainted.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003echinese_zodiac\u003c/code\u003e (950): branch-aware Check 5 — conditions like \u003ccode\u003e(year-2000)%12 == k\u003c/code\u003e use a computed modular expression, not a raw param comparison; a param-keyed gate on Check 5's enumeration check would correctly pass this.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRemaining HumanEval FPs (7 total) — individual assessment\u003c/h4\u003e\u003ca id=\"user-content-remaining-humaneval-fps-7-total--individual-assessment\" class=\"anchor\" aria-label=\"Permalink: Remaining HumanEval FPs (7 total) — individual assessment\" href=\"#remaining-humaneval-fps-7-total--individual-assessment\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAll 7 were already FPs under the old 5/4 thresholds; the branch-aware fix introduced zero new HumanEval regressions.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eID\u003c/th\u003e\n\u003cth\u003eFunction\u003c/th\u003e\n\u003cth\u003eCheck fired\u003c/th\u003e\n\u003cth\u003eRoot cause\u003c/th\u003e\n\u003cth\u003ePattern\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/46\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003efib4\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003eintent_mismatch_recursion\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRecursive Fibonacci-like function trips the \u003ccode\u003eintent_mismatch_recursion\u003c/code\u003e behavioral pattern (score 30). Legitimate use.\u003c/td\u003e\n\u003ctd\u003eRecurrence function — not a reward hack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/70\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estrange_sort_list\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAlternating min/max sort uses \u003ccode\u003esorted()\u003c/code\u003e twice. Trips \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e (score 30). Legitimate.\u003c/td\u003e\n\u003ctd\u003eAlgorithmic sorting, not a hack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/115\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003emax_fill\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_1 / hardcoding\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eimport math\u003c/code\u003e inside function body plus several integer constants trips the standalone literal-count threshold. Legitimate \u003ccode\u003emath.ceil\u003c/code\u003e usage.\u003c/td\u003e\n\u003ctd\u003eLegitimate import-inside-function + numeric constants\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/126\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eis_sorted\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUses \u003ccode\u003esorted()\u003c/code\u003e to verify order. Trips \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e (score 30). Legitimate predicate.\u003c/td\u003e\n\u003ctd\u003eSorting-based predicate, not a hack\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/127\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eintersection\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003eintent_mismatch_loop\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIterates over interval to check primality. Trips \u003ccode\u003eintent_mismatch_loop\u003c/code\u003e (score 30). Legitimate.\u003c/td\u003e\n\u003ctd\u003eNumber-theory computation\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/148\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ebf\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_6 / \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eHardcoded ordered list of 8 planet names used to determine relative position; triggers \u003ccode\u003eintent_mismatch_sort\u003c/code\u003e.\u003c/td\u003e\n\u003ctd\u003eDomain-knowledge lookup list (8 solar planets) — candidate for branch-aware Check 5\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHE/160\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edo_algebra\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003echeck_3 CRITICAL + check_6 / \u003ccode\u003eeval_dynamic\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eUses Python \u003ccode\u003eeval()\u003c/code\u003e legitimately to evaluate a user-supplied algebraic expression string. \u003ccode\u003eeval\u003c/code\u003e is on the Check 3 forbidden list by design; this is a correct fire on structural grounds — the function cannot be implemented without \u003ccode\u003eeval\u003c/code\u003e.\u003c/td\u003e\n\u003ctd\u003eUnavoidable \u003ccode\u003eeval\u003c/code\u003e use — structural FP by design\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eNext-signal candidates (queued):\u003c/strong\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eHE/148 \u003ccode\u003ebf\u003c/code\u003e: 8-element planet list is a canonical domain-knowledge constant, not test-case memorisation. A branch-aware Check 5 with a param-keyed condition gate (same logic as Fix C) would distinguish \u003ccode\u003ebf()\u003c/code\u003e's \u003ccode\u003eif planet in list\u003c/code\u003e from actual \u003ccode\u003eif n == specific_test_case\u003c/code\u003e enumerations.\u003c/li\u003e\n\u003cli\u003eHE/160 \u003ccode\u003edo_algebra\u003c/code\u003e: \u003ccode\u003eeval\u003c/code\u003e use is unavoidable for this task class. An allowlist entry for \u003ccode\u003eeval\u003c/code\u003e in expressions-evaluator contexts is the correct fix; out of scope for static analysis alone.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eMBPP (pair mode — TN FPR baseline)\u003c/h3\u003e\u003ca id=\"user-content-mbpp-pair-mode--tn-fpr-baseline\" class=\"anchor\" aria-label=\"Permalink: MBPP (pair mode — TN FPR baseline)\" href=\"#mbpp-pair-mode--tn-fpr-baseline\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSource: \u003ccode\u003egoogle-research-datasets/mbpp\u003c/code\u003e (HuggingFace Apache-2.0), accessed 2026-06-10.\n974 same-problem identity TN pairs: each MBPP reference solution compared to itself. Measures baseline FPR — an honest solution must never flag against the reference it was derived from.\nArtifact: \u003ccode\u003ebenchmarks/data/mbpp_results.json\u003c/code\u003e\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTN pairs\u003c/td\u003e\n\u003ctd\u003e974\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFP\u003c/td\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eFPR\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.1%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eThe single FP is task_id 950 (\u003ccode\u003echinese_zodiac\u003c/code\u003e): a legitimate 12-branch \u003ccode\u003eelif\u003c/code\u003e chain for the 12 zodiac signs that trips Check 5 (extensional enumeration). This is a known Check 5 edge case — constant-valued dispatch tables that happen to meet the ratio threshold.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExternal TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result\u003c/h3\u003e\u003ca id=\"user-content-external-trace-dataset-patronusai-2026--boundary--negative-result\" class=\"anchor\" aria-label=\"Permalink: External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result\" href=\"#external-trace-dataset-patronusai-2026--boundary--negative-result\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eFull eval report: \u003ccode\u003eeval/results/trace/report.md\u003c/code\u003e · Adapter: \u003ccode\u003eeval/adapters/trace.py\u003c/code\u003e · Commit: 7c52730\u003c/em\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eThis section documents a boundary result, not a recall target.\u003c/strong\u003e TRACE hacks are 1–2 line delta edits — changing \u003ccode\u003ethreshold=0.95\u003c/code\u003e to \u003ccode\u003ethreshold=0.0001\u003c/code\u003e, replacing \u003ccode\u003eassert predicted == expected\u003c/code\u003e with \u003ccode\u003eassert True\u003c/code\u003e, patching a validator to always pass. These deltas are invisible in the final file snapshot: the reconstructed file looks like normal code. Standalone scan on the final state is the wrong primitive for this regime. The numbers below establish that boundary honestly and identify two distinct limits.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExtraction\u003c/h4\u003e\u003ca id=\"user-content-extraction\" class=\"anchor\" aria-label=\"Permalink: Extraction\" href=\"#extraction\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCode is embedded as tool calls in a JSON \u003ccode\u003econversation\u003c/code\u003e field: \u003ccode\u003eWrite\u003c/code\u003e = full file snapshot, \u003ccode\u003eEdit\u003c/code\u003e = str_replace diff. No pair-mode baseline exists — standalone only.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eStatus\u003c/th\u003e\n\u003cth\u003en\u003c/th\u003e\n\u003cth\u003e%\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eNo in-scope files (.py / .js / .sh)\u003c/td\u003e\n\u003ctd\u003e86\u003c/td\u003e\n\u003ctd\u003e16.6%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eClean (Write baseline, patches applied)\u003c/td\u003e\n\u003ctd\u003e134\u003c/td\u003e\n\u003ctd\u003e25.9%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEdit-only fragment (largest \u003ccode\u003enew_string\u003c/code\u003e, no Write)\u003c/td\u003e\n\u003ctd\u003e294\u003c/td\u003e\n\u003ctd\u003e56.9%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eConflict-fallback (patch failed, partial content)\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e0.6%\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e68% of extractable trajectories use a code fragment, not the full file.\u003c/strong\u003e The fragment is the largest \u003ccode\u003enew_string\u003c/code\u003e from an Edit call — partial context extracted from a diff, not a reconstructed snapshot. This is a structural caveat on all recall figures: the scan target often does not contain the complete hack.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIn-scope Recall — Syntactic Categories (main headline)\u003c/h4\u003e\u003ca id=\"user-content-in-scope-recall--syntactic-categories-main-headline\" class=\"anchor\" aria-label=\"Permalink: In-scope Recall — Syntactic Categories (main headline)\" href=\"#in-scope-recall--syntactic-categories-main-headline\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn-scope categories where structural AST detection is plausible: 1.1.2 (test-infra patching), 1.1.3 (coverage gaming), 1.2.1 (output hardcoding), 1.2.2 (metric fabrication), 1.2.3 (eval-code modification).\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eCombined in-scope structural recall: 34/160 = 21.3%\u003c/strong\u003e (dev split, strict mode)\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003cth\u003eCode\u003c/th\u003e\n\u003cth\u003en (dev)\u003c/th\u003e\n\u003cth\u003eTP\u003c/th\u003e\n\u003cth\u003eRecall\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-metric-fabrication\u003c/td\u003e\n\u003ctd\u003e1.2.2\u003c/td\u003e\n\u003ctd\u003e18\u003c/td\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.444\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-output-hardcoding\u003c/td\u003e\n\u003ctd\u003e1.2.1\u003c/td\u003e\n\u003ctd\u003e30\u003c/td\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.267\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-eval-code-modification\u003c/td\u003e\n\u003ctd\u003e1.2.3\u003c/td\u003e\n\u003ctd\u003e26\u003c/td\u003e\n\u003ctd\u003e5\u003c/td\u003e\n\u003ctd\u003e0.192\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-coverage-gaming\u003c/td\u003e\n\u003ctd\u003e1.1.3\u003c/td\u003e\n\u003ctd\u003e38\u003c/td\u003e\n\u003ctd\u003e6\u003c/td\u003e\n\u003ctd\u003e0.158\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-test-infra-patching\u003c/td\u003e\n\u003ctd\u003e1.1.2\u003c/td\u003e\n\u003ctd\u003e48\u003c/td\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e0.146\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eGlobal precision = 0.535 (53 TP / 99 flagged). Per-category precision figures are degenerate (all-hack slices, no benign mixed in) and not reported. The real operating-point precision is global.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFalse Positive Rate: 46/153 = 30.1%\u003c/h4\u003e\u003ca id=\"user-content-false-positive-rate-46153--301\" class=\"anchor\" aria-label=\"Permalink: False Positive Rate: 46/153 = 30.1%\" href=\"#false-positive-rate-46153--301\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePrimary driver: Check 1's standalone literal threshold (80) triggers on legitimate data-processing scripts with many format strings, domain constants, and column names. Confirmed FP example: a 296-line CSV transformer with 114 literals (date format strings, \u003ccode\u003eVALID_CURRENCIES\u003c/code\u003e list, column names) — structurally indistinguishable from hardcoding at raw count. Language FPR: Python 31.9% (44/138); JavaScript 7.1% (1/14). Fix queued — see §Known Limitations.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOut-of-scope Semantic — Boundary Reference (correct abstain)\u003c/h4\u003e\u003ca id=\"user-content-out-of-scope-semantic--boundary-reference-correct-abstain\" class=\"anchor\" aria-label=\"Permalink: Out-of-scope Semantic — Boundary Reference (correct abstain)\" href=\"#out-of-scope-semantic--boundary-reference-correct-abstain\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThese categories are \u003cstrong\u003enot recall targets.\u003c/strong\u003e Low recall confirms correct scope-awareness:\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCategory\u003c/th\u003e\n\u003cth\u003eCode\u003c/th\u003e\n\u003cth\u003en (dev)\u003c/th\u003e\n\u003cth\u003eRecall\u003c/th\u003e\n\u003cth\u003eWhy out-of-scope\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-test-assertion-bypass\u003c/td\u003e\n\u003ctd\u003e1.1.1\u003c/td\u003e\n\u003ctd\u003e36\u003c/td\u003e\n\u003ctd\u003e0.111\u003c/td\u003e\n\u003ctd\u003eHigh-frequency case is metrics-dict mutation before assertion — semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-side-channel\u003c/td\u003e\n\u003ctd\u003e1.3.2\u003c/td\u003e\n\u003ctd\u003e14\u003c/td\u003e\n\u003ctd\u003e0.143\u003c/td\u003e\n\u003ctd\u003eOut-of-scope action encoded semantically\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-environment-manipulation\u003c/td\u003e\n\u003ctd\u003e1.3.1\u003c/td\u003e\n\u003ctd\u003e14\u003c/td\u003e\n\u003ctd\u003e0.214\u003c/td\u003e\n\u003ctd\u003eBash data/file manipulation — outside Python AST scope\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-deceptive-completion\u003c/td\u003e\n\u003ctd\u003e1.4.2\u003c/td\u003e\n\u003ctd\u003e19\u003c/td\u003e\n\u003ctd\u003e0.263\u003c/td\u003e\n\u003ctd\u003eCheck 6 process_termination fires incidentally; rest semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003etrace-scope-violation\u003c/td\u003e\n\u003ctd\u003e1.4.1\u003c/td\u003e\n\u003ctd\u003e16\u003c/td\u003e\n\u003ctd\u003e0.312\u003c/td\u003e\n\u003ctd\u003eCheck 6 subprocess/cache fires incidentally; intent violation is semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eCatches in 1.4.1/1.4.2 are incidental Check 6 behavioral fires, not structural understanding of the violation.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTwo Named Boundaries\u003c/h4\u003e\u003ca id=\"user-content-two-named-boundaries\" class=\"anchor\" aria-label=\"Permalink: Two Named Boundaries\" href=\"#two-named-boundaries\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e(a) Category boundary.\u003c/strong\u003e Semantic and test-manipulation codes (1.1.1, 1.3.1, 1.3.2, 1.4.1, 1.4.2) are out of scope by definition — they require understanding intent, not reading structure. 11–31% recall (incidental Check 6 fires) is the honest ceiling for purely structural analysis on these categories.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003e(b) Primitive boundary.\u003c/strong\u003e TRACE hacks live in the diff, not the snapshot. The correct primitive is \u003ccode\u003escan(old_string, new_string)\u003c/code\u003e per Edit call — pair-mode on each individual edit — which would expose complexity collapse (a function that had logic now returns \u003ccode\u003eTrue\u003c/code\u003e) and hardcoding signals (a threshold replaced by a literal). This is a named future-work extension; see §Future Work.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCore Use Case Unaffected\u003c/h4\u003e\u003ca id=\"user-content-core-use-case-unaffected\" class=\"anchor\" aria-label=\"Permalink: Core Use Case Unaffected\" href=\"#core-use-case-unaffected\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003east-guard's primary use case is \u003cstrong\u003esolution-level code gen\u003c/strong\u003e (RLVR training loops, code-gen CI): the unit of analysis is a complete function or module, not an agentic diff. That regime is validated on SORH (F1=0.98, FPR=0%) and MBPP (standalone FPR=0.31%). TRACE tests a different scan regime — agentic multi-turn editing of an existing codebase — for which standalone scan of the final state is structurally insufficient. The TRACE result is a boundary map, not a deficiency in the core use case.\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStandalone Mode Results (MALT — 81,515 samples)\u003c/h2\u003e\u003ca id=\"user-content-standalone-mode-results-malt--81515-samples\" class=\"anchor\" aria-label=\"Permalink: Standalone Mode Results (MALT — 81,515 samples)\" href=\"#standalone-mode-results-malt--81515-samples\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eStandalone mode scans a single code block without a baseline. This mode trades precision for applicability — it can analyze any code block from any source without requiring the original. The trade-off is an inherently higher false positive rate because structural \"suspicious patterns\" cannot be distinguished from legitimate use without context.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOverall\u003c/h3\u003e\u003ca id=\"user-content-overall\" class=\"anchor\" aria-label=\"Permalink: Overall\" href=\"#overall\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal scannable\u003c/td\u003e\n\u003ctd\u003e81,515\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal flagged\u003c/td\u003e\n\u003ctd\u003e4,944 (6.1%)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTotal clean\u003c/td\u003e\n\u003ctd\u003e76,571 (93.9%)\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eConfusion Matrix (binary: structural-hack vs. normal)\u003c/h3\u003e\u003ca id=\"user-content-confusion-matrix-binary-structural-hack-vs-normal\" class=\"anchor\" aria-label=\"Permalink: Confusion Matrix (binary: structural-hack vs. normal)\" href=\"#confusion-matrix-binary-structural-hack-vs-normal\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eBinary classification: \u003cstrong\u003ehack\u003c/strong\u003e = bypass_constraints + hardcoded_solution + sabotage (3,005 samples); \u003cstrong\u003enon-hack\u003c/strong\u003e = all other labels (78,510 samples).\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003eFlagged\u003c/th\u003e\n\u003cth\u003eClean\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eHack\u003c/strong\u003e (3,005)\u003c/td\u003e\n\u003ctd\u003eTP = 1,036\u003c/td\u003e\n\u003ctd\u003eFN = 1,969\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eNon-hack\u003c/strong\u003e (78,510)\u003c/td\u003e\n\u003ctd\u003eFP = 3,908\u003c/td\u003e\n\u003ctd\u003eTN = 74,602\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eTNR/Specificity measured on normal label only (77,369 samples). Some non-hack labels (partial_problem_solving, ignores_task_instructions) have legitimate reasons to use flagged patterns.\u003c/em\u003e\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003ePrecision\u003c/td\u003e\n\u003ctd\u003e21.0%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRecall\u003c/td\u003e\n\u003ctd\u003e34.5%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eF1\u003c/td\u003e\n\u003ctd\u003e26.1%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSpecificity (TNR on normal)\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e95.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eInterpretation:\u003c/strong\u003e The low precision is expected and acceptable — standalone mode is designed as a pre-filter, not a final classifier. The 95.0% specificity means the vast majority of legitimate agent code passes through without triggering a flag. The 34.5% recall covers only structurally detectable hacks; semantic hacks (giving wrong answers, sandbagging) cannot be detected by AST analysis.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePer-Category Detection Rates\u003c/h3\u003e\u003ca id=\"user-content-per-category-detection-rates\" class=\"anchor\" aria-label=\"Permalink: Per-Category Detection Rates\" href=\"#per-category-detection-rates\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLabel\u003c/th\u003e\n\u003cth\u003eSamples\u003c/th\u003e\n\u003cth\u003eFlagged\u003c/th\u003e\n\u003cth\u003eDetection Rate\u003c/th\u003e\n\u003cth\u003eLanguage breakdown\u003c/th\u003e\n\u003cth\u003eNotes\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003enormal\u003c/td\u003e\n\u003ctd\u003e77,369\u003c/td\u003e\n\u003ctd\u003e3,888\u003c/td\u003e\n\u003ctd\u003e5.0% (FPR)\u003c/td\u003e\n\u003ctd\u003e99.1% Python, 0.6% Bash, 0.3% JS\u003c/td\u003e\n\u003ctd\u003eLegitimate agent code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ebypass_constraints\u003c/td\u003e\n\u003ctd\u003e2,379\u003c/td\u003e\n\u003ctd\u003e820\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e34.5%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e82.2% Python, 16.4% Bash, 1.3% JS\u003c/td\u003e\n\u003ctd\u003eStructural bypasses; majority of misses are semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ehardcoded_solution\u003c/td\u003e\n\u003ctd\u003e429\u003c/td\u003e\n\u003ctd\u003e201\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e46.9%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e100% Python\u003c/td\u003e\n\u003ctd\u003eModule cache manipulation, input-independence, literal counts\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003esabotage\u003c/td\u003e\n\u003ctd\u003e197\u003c/td\u003e\n\u003ctd\u003e15\u003c/td\u003e\n\u003ctd\u003e7.6%\u003c/td\u003e\n\u003ctd\u003e91.4% Python, 7.6% Bash\u003c/td\u003e\n\u003ctd\u003eMixed structural and semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ematch_weaker_model\u003c/td\u003e\n\u003ctd\u003e171\u003c/td\u003e\n\u003ctd\u003e7\u003c/td\u003e\n\u003ctd\u003e4.1%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eHigh literal count; mostly semantic\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003epartial_problem_solving\u003c/td\u003e\n\u003ctd\u003e731\u003c/td\u003e\n\u003ctd\u003e8\u003c/td\u003e\n\u003ctd\u003e1.1%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eThreading imports in partial solutions\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003erefusals\u003c/td\u003e\n\u003ctd\u003e147\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e2.0%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003esubprocess in refusal context\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ereasoning_about_task\u003c/td\u003e\n\u003ctd\u003e74\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e2.7%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eUnknown imports\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eignores_task_instructions\u003c/td\u003e\n\u003ctd\u003e17\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003ctd\u003e0%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eToo few samples\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003egives_up\u003c/td\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003ctd\u003e0%\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePer-Language Detection on bypass_constraints\u003c/h3\u003e\u003ca id=\"user-content-per-language-detection-on-bypass_constraints\" class=\"anchor\" aria-label=\"Permalink: Per-Language Detection on bypass_constraints\" href=\"#per-language-detection-on-bypass_constraints\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eLanguage\u003c/th\u003e\n\u003cth\u003eSamples\u003c/th\u003e\n\u003cth\u003eDetected\u003c/th\u003e\n\u003cth\u003eDetection Rate\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003ePython\u003c/td\u003e\n\u003ctd\u003e1,956\u003c/td\u003e\n\u003ctd\u003e749\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e38.3%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eBash\u003c/td\u003e\n\u003ctd\u003e391\u003c/td\u003e\n\u003ctd\u003e69\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e17.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eJavaScript\u003c/td\u003e\n\u003ctd\u003e32\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e6.2%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eInterpretation of language gap:\u003c/strong\u003e The lower detection rate for Bash (17.6%) and JavaScript (6.2%) compared to Python (38.3%) reflects the nature of non-Python bypass in MALT, not a deficiency in the adapters. Analysis of missed samples shows 316 of 322 missed Bash bypass samples and 30 of 30 missed JS bypass samples have \u003cstrong\u003ezero structural signal\u003c/strong\u003e — they are agents that silently fail to complete the task or use semantically incorrect logic rather than structurally detectable hacks (eval chains, import hijacking, complexity collapse). Structural static analysis without a pair-mode baseline has an inherent ceiling here. In pair mode, Check 2 (complexity collapse) and Check 1 (literal growth) would provide additional signal for these cases.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003ePer-Check Contribution\u003c/h3\u003e\u003ca id=\"user-content-per-check-contribution\" class=\"anchor\" aria-label=\"Permalink: Per-Check Contribution\" href=\"#per-check-contribution\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTrigger counts across all 4,944 flagged samples (one sample may trigger multiple checks):\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eCheck\u003c/th\u003e\n\u003cth\u003eTriggers\u003c/th\u003e\n\u003cth\u003e% of Flagged\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e6 — Behavioral Risk Scoring\u003c/td\u003e\n\u003ctd\u003e2,664\u003c/td\u003e\n\u003ctd\u003e53.9%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e1 — Hardcoding\u003c/td\u003e\n\u003ctd\u003e2,272\u003c/td\u003e\n\u003ctd\u003e46.0%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4 — Import Drift\u003c/td\u003e\n\u003ctd\u003e1,072\u003c/td\u003e\n\u003ctd\u003e21.7%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3 — Forbidden Calls\u003c/td\u003e\n\u003ctd\u003e226\u003c/td\u003e\n\u003ctd\u003e4.6%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5 — Extensional Enumeration\u003c/td\u003e\n\u003ctd\u003e59\u003c/td\u003e\n\u003ctd\u003e1.2%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2 — Complexity Collapse\u003c/td\u003e\n\u003ctd\u003e~0\u003c/td\u003e\n\u003ctd\u003e~0%\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eNote: Check 2 does not fire in standalone mode — there is no baseline complexity to compare against. Check 6 is now the primary detection driver across all three supported languages (Python, Bash, JS).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eTop False Positive Triggers on Normal Samples\u003c/h3\u003e\u003ca id=\"user-content-top-false-positive-triggers-on-normal-samples\" class=\"anchor\" aria-label=\"Permalink: Top False Positive Triggers on Normal Samples\" href=\"#top-false-positive-triggers-on-normal-samples\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eFinding\u003c/th\u003e\n\u003cth\u003eCount\u003c/th\u003e\n\u003cth\u003eAssessment\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eForbidden import 'subprocess'\u003c/td\u003e\n\u003ctd\u003e397\u003c/td\u003e\n\u003ctd\u003eLegitimate agent use (shell commands, process management)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eintent_mismatch_computation +30\u003c/td\u003e\n\u003ctd\u003e310\u003c/td\u003e\n\u003ctd\u003eDocstring claims computation; body differs structurally\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eenviron_mutation +30\u003c/td\u003e\n\u003ctd\u003e256\u003c/td\u003e\n\u003ctd\u003eSetting env vars is normal in agent setup code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eprocess_termination +70\u003c/td\u003e\n\u003ctd\u003e244\u003c/td\u003e\n\u003ctd\u003esys.exit() in scripts and error handlers\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003estack_introspection +70\u003c/td\u003e\n\u003ctd\u003e224\u003c/td\u003e\n\u003ctd\u003einspect module in logging and utility code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003efile_write_unknown_target +10\u003c/td\u003e\n\u003ctd\u003e454\u003c/td\u003e\n\u003ctd\u003eUnresolvable filename; contributes to aggregate score only\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eBash/JS contribute 6 and 9 normal FPs respectively (negligible: 0.4% of total normal FPs), confirming the new behavioral modules are well-calibrated.\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGenerator Eval: Checks 7 \u0026amp; 8 (open-mode, pair mode)\u003c/h2\u003e\u003ca id=\"user-content-generator-eval-checks-7--8-open-mode-pair-mode\" class=\"anchor\" aria-label=\"Permalink: Generator Eval: Checks 7 \u0026amp; 8 (open-mode, pair mode)\" href=\"#generator-eval-checks-7--8-open-mode-pair-mode\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ePair-mode recall and precision measured on LLM-generated hacks and clean pairs produced\nby the built-in generator. Two independent splits reported; neither was used for check\ndevelopment.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIndependent Validation (mbpp-661–700)\u003c/h3\u003e\u003ca id=\"user-content-independent-validation-mbpp-661700\" class=\"anchor\" aria-label=\"Permalink: Independent Validation (mbpp-661–700)\" href=\"#independent-validation-mbpp-661700\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e40 seeds × 2 variants (imperative + adversarial) × claude-sonnet-4-6.\nFull results and analysis in \u003ccode\u003eMETHODOLOGY.md § Independent Validation\u003c/code\u003e.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eValue\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eHack pairs\u003c/td\u003e\n\u003ctd\u003e57\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRecall\u003c/td\u003e\n\u003ctd\u003e68.4%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePrecision (easy TN)\u003c/td\u003e\n\u003ctd\u003e100.0%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePrecision (hard TN)\u003c/td\u003e\n\u003ctd\u003e89.7%\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eNote: these numbers were recorded with \u003ccode\u003e_ORIG_COMPLEXITY_FLOOR = 2\u003c/code\u003e. The floor was\nsubsequently lowered to 1 after the floor-lowering experiment below.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFloor-Lowering Experiment (mbpp-741–780, floor = 1)\u003c/h3\u003e\u003ca id=\"user-content-floor-lowering-experiment-mbpp-741780-floor--1\" class=\"anchor\" aria-label=\"Permalink: Floor-Lowering Experiment (mbpp-741–780, floor = 1)\" href=\"#floor-lowering-experiment-mbpp-741780-floor--1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e40 seeds × 3 models × 3 variants. Evaluates \u003ccode\u003e_ORIG_COMPLEXITY_FLOOR = 1\u003c/code\u003e (current).\nFull protocol and per-config breakdown in \u003ccode\u003eMETHODOLOGY.md § Floor-Lowering Experiment\u003c/code\u003e.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003efloor=2 (old)\u003c/th\u003e\n\u003cth\u003efloor=1 (current)\u003c/th\u003e\n\u003cth\u003eΔ\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eHack pairs\u003c/td\u003e\n\u003ctd\u003e169\u003c/td\u003e\n\u003ctd\u003e169\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e0.757\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.864\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e+0.107\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePrecision (easy TN, 40 pairs)\u003c/td\u003e\n\u003ctd\u003e1.000\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e1.000\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePrecision (hard TN, 35 pairs)\u003c/td\u003e\n\u003ctd\u003e0.857\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0.857\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eNew FPs from floor change\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e0\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003eThe floor lowering from 2 to 1 recovers +10.7 pp recall at zero precision cost on this\nfresh, unseen split. The 5 pre-existing hard TN FPs are from Checks 1 and 2, unaffected\nby the floor change.\u003c/p\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eComparison with Existing Detectors\u003c/h2\u003e\u003ca id=\"user-content-comparison-with-existing-detectors\" class=\"anchor\" aria-label=\"Permalink: Comparison with Existing Detectors\" href=\"#comparison-with-existing-detectors\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eDirect comparison is limited because each tool covers different categories, uses different methods, and was evaluated on different dataset subsets.\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDetector\u003c/th\u003e\n\u003cth\u003eMethod\u003c/th\u003e\n\u003cth\u003eDataset\u003c/th\u003e\n\u003cth\u003eMetric\u003c/th\u003e\n\u003cth\u003eScore\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eGPT-4o (LLM-as-judge)†\u003c/td\u003e\n\u003ctd\u003eLLM-as-judge\u003c/td\u003e\n\u003ctd\u003eTRACE (all 54 cats)\u003c/td\u003e\n\u003ctd\u003eDetection Rate\u003c/td\u003e\n\u003ctd\u003e~63%†\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRewardHackWatch\u003c/td\u003e\n\u003ctd\u003eML + Regex + AST\u003c/td\u003e\n\u003ctd\u003eMALT (5,391)\u003c/td\u003e\n\u003ctd\u003eF1\u003c/td\u003e\n\u003ctd\u003e89.7%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003east-guard v2.3.0 Pair Mode\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eDeterministic AST\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003ebuilt-in TRACE-aligned suite (hand-written)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eF1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e95.7%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003east-guard v2.3.0 Standalone\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eDeterministic AST\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eMALT (81,515)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eSpecificity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e95.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003east-guard v2.3.0 Standalone\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eDeterministic AST\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eMALT (81,515)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eRecall (structural)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e34.5%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e† Approximate figure; no published source. Included as order-of-magnitude context only.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eKey differentiators:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003eZero cost at inference time\u003c/strong\u003e — no LLM calls, no model weights\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFully deterministic\u003c/strong\u003e — same input always produces the same output\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eZero external dependencies\u003c/strong\u003e in core (Python stdlib only)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u0026lt;50ms latency\u003c/strong\u003e — suitable for pre-execution gating\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFirst-class multilang\u003c/strong\u003e — Python, Bash, JavaScript, and TypeScript all run the same 6-check pipeline\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eComplementary layer\u003c/strong\u003e — designed to work alongside ML-based detectors, not replace them\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eKnown Limitations\u003c/h2\u003e\u003ca id=\"user-content-known-limitations\" class=\"anchor\" aria-label=\"Permalink: Known Limitations\" href=\"#known-limitations\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eStandalone precision is low by design.\u003c/strong\u003e Without a baseline, structural patterns that are suspicious in context (eval(), subprocess, file writes to test paths) cannot be distinguished from legitimate agent behavior using the same patterns.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eSemantic hacks are not detectable.\u003c/strong\u003e Reward hacking via wrong answers, sandbagging, adversarial framing, or reasoning manipulation leaves no structural AST signature. These account for the majority of MALT bypass_constraints and sabotage samples that are not detected, and nearly all of the non-Python bypass gap.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eBash and JavaScript bypass detection ceiling in standalone mode.\u003c/strong\u003e In MALT, 316/322 missed Bash bypass samples and 30/30 missed JS bypass samples show zero structural signal. The bypasses are semantically encoded (incorrect behavior, silent failure), not structurally encoded. Pair mode (with original code) would provide additional signal via Check 2 and Check 1.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eMALT code blocks are trajectory fragments.\u003c/strong\u003e Extracted blocks are not standalone programs — they may be mid-function snippets, partial imports, or continuation of earlier code. This affects both detection rates and false positive analysis.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eCheck 1 literal threshold over-fires on data-processing scripts.\u003c/strong\u003e The standalone literal threshold (80) is calibrated for function-level code blocks (SORH/MBPP context). Large data-pipeline files legitimately contain 80+ literals (date format strings, column names, domain constants, enum values). This is the primary driver of TRACE's 30.1% FPR and generalizes to any standalone scan of data-heavy files. \u003cstrong\u003eFix queued (Stage 2 calibration):\u003c/strong\u003e literal density per line / context-aware gating (e.g., co-occurrence with input-independence signal) rather than raw count. Not tuned on TRACE; fix will be validated on MBPP/SORH first.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eStandalone scan is the wrong primitive for agentic delta edits.\u003c/strong\u003e TRACE-style hacks operate in the diff (\u003ccode\u003eold_string → new_string\u003c/code\u003e), not the final file state. Standalone scan on the reconstructed snapshot misses the delta signal entirely — 21.3% in-scope recall on TRACE reflects this primitive mismatch, not a tuning deficit. The correct primitive is pair-mode scan per Edit call; see §Future Work.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eCheck 2 inactive in standalone mode.\u003c/strong\u003e Complexity collapse requires a baseline to compare against. Without an original code block, Check 2 produces no signal.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDeferred Pair-Mode Datasets\u003c/h2\u003e\u003ca id=\"user-content-deferred-pair-mode-datasets\" class=\"anchor\" aria-label=\"Permalink: Deferred Pair-Mode Datasets\" href=\"#deferred-pair-mode-datasets\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe following datasets were evaluated for pair-mode wiring and deferred:\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDataset\u003c/th\u003e\n\u003cth\u003eReason deferred\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eCountdown-Code\u003c/strong\u003e (Khan et al., arXiv:2603.07084)\u003c/td\u003e\n\u003ctd\u003eStatic JSONL dump exists (\u003ccode\u003eo4-mini-distillation-16k.jsonl\u003c/code\u003e, 16k records) but contains no \u003ccode\u003eis_hack\u003c/code\u003e label. Classifying which solutions are genuine vs. harness-manipulating requires running the verifier — generating rollouts is out of scope for a static benchmark.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTRACE\u003c/strong\u003e (PatronusAI, arXiv:2601.20103)\u003c/td\u003e\n\u003ctd\u003eStandalone eval completed (see §External TRACE Dataset). \u003cstrong\u003ePair mode on TRACE still deferred:\u003c/strong\u003e the correct scan unit is \u003ccode\u003escan(old_string, new_string)\u003c/code\u003e per Edit tool call — diff-aware pair mode on individual edits. This exposes complexity collapse and hardcoding signals invisible in the final snapshot. Named future-work extension; see §Future Work.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eTerminal Wrench\u003c/strong\u003e (arXiv:2604.17596)\u003c/td\u003e\n\u003ctd\u003e331 environments; baseline and hack expressed as bash terminal trajectories, not static code pairs. Heavy extraction work needed to produce \u003ccode\u003e(original_code, generated_code)\u003c/code\u003e pairs.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eMBPP-Honeypot / Obfuscation Atlas\u003c/strong\u003e (arXiv:2602.15515)\u003c/td\u003e\n\u003ctd\u003eNo static completion dump found on HuggingFace (\u003ccode\u003eethz-spylab/mbpp-honeypot\u003c/code\u003e does not exist). Env/training code only — no releasable artifact verified.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEvilGenie\u003c/strong\u003e (Gabor et al.)\u003c/td\u003e\n\u003ctd\u003eLive execution harness; no static \u003ccode\u003e(original, hacked)\u003c/code\u003e pair dump released. To use: generate rollouts with the harness, export as labeled pairs, write a custom loader.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFuture Work\u003c/h2\u003e\u003ca id=\"user-content-future-work\" class=\"anchor\" aria-label=\"Permalink: Future Work\" href=\"#future-work\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eNamed extensions, not yet implemented:\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eExtension\u003c/th\u003e\n\u003cth\u003eMotivation\u003c/th\u003e\n\u003cth\u003eDataset to validate on\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDiff-aware pair scan\u003c/strong\u003e (\u003ccode\u003escan(old_string, new_string)\u003c/code\u003e per Edit call)\u003c/td\u003e\n\u003ctd\u003eTRACE hacks live in the delta: complexity collapse and hardcoding signals become visible only when old and new are compared directly. Standalone scan on the final snapshot misses these.\u003c/td\u003e\n\u003ctd\u003eTRACE (517 trajectories)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eLiteral density / context-aware Check 1\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eRaw literal count over-fires on data-processing scripts. Density per line, or gating on co-occurrence with input-independence, would reduce false positives without affecting detection on function-level code.\u003c/td\u003e\n\u003ctd\u003eMBPP / SORH (regression)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eBranch-aware Check 5\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eModular-arithmetic dispatch tables (\u003ccode\u003e(year-2000)%12 == k\u003c/code\u003e) and planet-lookup lists are not extensional enumeration. A param-keyed condition gate (analogous to Fix C on Check 6) would eliminate the \u003ccode\u003echinese_zodiac\u003c/code\u003e and \u003ccode\u003ebf\u003c/code\u003e FPs.\u003c/td\u003e\n\u003ctd\u003eMBPP / HumanEval\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eWhile-loop taint propagation (Fix A extension)\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eFix A covers for-loops; while-loops with parameter-controlled iteration count (e.g., \u003ccode\u003ecal_sum\u003c/code\u003e) still exhibit the taint gap.\u003c/td\u003e\n\u003ctd\u003eMBPP\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003chr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eReproducibility\u003c/h2\u003e\u003ca id=\"user-content-reproducibility\" class=\"anchor\" aria-label=\"Permalink: Reproducibility\" href=\"#reproducibility\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEnvironment\u003c/h3\u003e\u003ca id=\"user-content-environment\" class=\"anchor\" aria-label=\"Permalink: Environment\" href=\"#environment\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"Python: 3.11+\nast-guard commit: f3475ed  (v2.3.0, JS/TS dispatch-table detection)\ntree-sitter: required for multilang (pip install ast-guard[multilang])\nMALT dataset: metr-evals/malt-public (HuggingFace, public)\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003ePython: 3.11+\nast-guard commit: f3475ed  (v2.3.0, JS/TS dispatch-table detection)\ntree-sitter: required for multilang (pip install ast-guard[multilang])\nMALT dataset: metr-evals/malt-public (HuggingFace, public)\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCommands\u003c/h3\u003e\u003ca id=\"user-content-commands\" class=\"anchor\" aria-label=\"Permalink: Commands\" href=\"#commands\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Install\ngit clone \u0026lt;repo\u0026gt; ast-guard \u0026amp;\u0026amp; cd ast-guard\npip install -e \u0026quot;.[multilang]\u0026quot;\npip install datasets  # required for MBPP and school-of-hacks download\n\n# Built-in TRACE benchmark\npython -m benchmarks.run_benchmark --benchmark trace\n\n# School of Reward Hacks (pair mode — TP+TN, requires download)\npython -m benchmarks.run_benchmark --benchmark school-of-hacks --download\n\n# MBPP (pair mode — TN FPR baseline, requires download)\npython -m benchmarks.run_benchmark --benchmark mbpp --download\n\n# Countdown-Code benchmark\npython -m benchmarks.run_benchmark --benchmark countdown-code\n\n# MALT benchmark (requires dataset at default path — user-managed; see memory note)\npython -m benchmarks.run_benchmark --benchmark malt\n\n# TRACE eval harness (standalone boundary eval — downloads ~20 MB from HuggingFace)\npython -m eval.run --dataset trace --output eval/results/trace --mode strict\n\n# Full cross-benchmark run with export\npython -m benchmarks.run_benchmark --benchmark all --json results.json\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Install\u003c/span\u003e\ngit clone \u003cspan class=\"pl-k\"\u003e\u0026lt;\u003c/span\u003erepo\u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e ast-guard \u003cspan class=\"pl-k\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ecd\u003c/span\u003e ast-guard\npip install -e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e.[multilang]\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\npip install datasets  \u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e required for MBPP and school-of-hacks download\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Built-in TRACE benchmark\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark trace\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e School of Reward Hacks (pair mode — TP+TN, requires download)\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark school-of-hacks --download\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e MBPP (pair mode — TN FPR baseline, requires download)\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark mbpp --download\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Countdown-Code benchmark\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark countdown-code\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e MALT benchmark (requires dataset at default path — user-managed; see memory note)\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark malt\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e TRACE eval harness (standalone boundary eval — downloads ~20 MB from HuggingFace)\u003c/span\u003e\npython -m eval.run --dataset trace --output eval/results/trace --mode strict\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e#\u003c/span\u003e Full cross-benchmark run with export\u003c/span\u003e\npython -m benchmarks.run_benchmark --benchmark all --json results.json\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDataset versions\u003c/h3\u003e\u003ca id=\"user-content-dataset-versions\" class=\"anchor\" aria-label=\"Permalink: Dataset versions\" href=\"#dataset-versions\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eDataset\u003c/th\u003e\n\u003cth\u003eVersion / Commit\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003eMALT\u003c/td\u003e\n\u003ctd\u003emetr-evals/malt-public, accessed 2026-05-31\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTRACE (external)\u003c/td\u003e\n\u003ctd\u003ePatronusAI HuggingFace, accessed 2026-06-22\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eCountdown-Code\u003c/td\u003e\n\u003ctd\u003eKhan et al. GitHub, main branch, accessed 2026-05-29\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSchool of Reward Hacks\u003c/td\u003e\n\u003ctd\u003esyvb/school-of-reward-hacks-coding-tasks, accessed 2026-06-10\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMBPP\u003c/td\u003e\n\u003ctd\u003egoogle-research-datasets/mbpp, accessed 2026-06-10\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"ast-guard Evaluation Results","fully_qualified_name":"ast-guard Evaluation Results","kind":"section_1","ident_start":2,"ident_end":30,"extent_start":0,"extent_end":37377,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":30}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":570,"utf16_col":0}}},{"name":"Abstract","fully_qualified_name":"Abstract","kind":"section_2","ident_start":35,"ident_end":43,"extent_start":32,"extent_end":1517,"ident_utf16":{"start":{"line_number":2,"utf16_col":3},"end":{"line_number":2,"utf16_col":11}},"extent_utf16":{"start":{"line_number":2,"utf16_col":0},"end":{"line_number":8,"utf16_col":0}}},{"name":"Evaluation Overview","fully_qualified_name":"Evaluation Overview","kind":"section_2","ident_start":1520,"ident_end":1539,"extent_start":1517,"extent_end":4332,"ident_utf16":{"start":{"line_number":8,"utf16_col":3},"end":{"line_number":8,"utf16_col":22}},"extent_utf16":{"start":{"line_number":8,"utf16_col":0},"end":{"line_number":53,"utf16_col":0}}},{"name":"Checks","fully_qualified_name":"Checks","kind":"section_3","ident_start":1941,"ident_end":1947,"extent_start":1937,"extent_end":3053,"ident_utf16":{"start":{"line_number":19,"utf16_col":4},"end":{"line_number":19,"utf16_col":10}},"extent_utf16":{"start":{"line_number":19,"utf16_col":0},"end":{"line_number":32,"utf16_col":0}}},{"name":"Language-Check Capability Matrix","fully_qualified_name":"Language-Check Capability Matrix","kind":"section_3","ident_start":3057,"ident_end":3089,"extent_start":3053,"extent_end":4332,"ident_utf16":{"start":{"line_number":32,"utf16_col":4},"end":{"line_number":32,"utf16_col":36}},"extent_utf16":{"start":{"line_number":32,"utf16_col":0},"end":{"line_number":53,"utf16_col":0}}},{"name":"Datasets","fully_qualified_name":"Datasets","kind":"section_2","ident_start":4335,"ident_end":4343,"extent_start":4332,"extent_end":5653,"ident_utf16":{"start":{"line_number":53,"utf16_col":3},"end":{"line_number":53,"utf16_col":11}},"extent_utf16":{"start":{"line_number":53,"utf16_col":0},"end":{"line_number":68,"utf16_col":0}}},{"name":"Pair Mode Results","fully_qualified_name":"Pair Mode Results","kind":"section_2","ident_start":5656,"ident_end":5673,"extent_start":5653,"extent_end":22431,"ident_utf16":{"start":{"line_number":68,"utf16_col":3},"end":{"line_number":68,"utf16_col":20}},"extent_utf16":{"start":{"line_number":68,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"Built-in TRACE-Aligned Suite","fully_qualified_name":"Built-in TRACE-Aligned Suite","kind":"section_3","ident_start":5896,"ident_end":5924,"extent_start":5892,"extent_end":6936,"ident_utf16":{"start":{"line_number":72,"utf16_col":4},"end":{"line_number":72,"utf16_col":32}},"extent_utf16":{"start":{"line_number":72,"utf16_col":0},"end":{"line_number":92,"utf16_col":0}}},{"name":"Countdown-Code","fully_qualified_name":"Countdown-Code","kind":"section_3","ident_start":6940,"ident_end":6954,"extent_start":6936,"extent_end":7728,"ident_utf16":{"start":{"line_number":92,"utf16_col":4},"end":{"line_number":92,"utf16_col":18}},"extent_utf16":{"start":{"line_number":92,"utf16_col":0},"end":{"line_number":108,"utf16_col":0}}},{"name":"School of Reward Hacks (pair mode)","fully_qualified_name":"School of Reward Hacks (pair mode)","kind":"section_3","ident_start":7732,"ident_end":7766,"extent_start":7728,"extent_end":8473,"ident_utf16":{"start":{"line_number":108,"utf16_col":4},"end":{"line_number":108,"utf16_col":38}},"extent_utf16":{"start":{"line_number":108,"utf16_col":0},"end":{"line_number":128,"utf16_col":0}}},{"name":"School of Reward Hacks (standalone mode — offline eval harness)","fully_qualified_name":"School of Reward Hacks (standalone mode — offline eval harness)","kind":"section_3","ident_start":8477,"ident_end":8542,"extent_start":8473,"extent_end":11740,"ident_utf16":{"start":{"line_number":128,"utf16_col":4},"end":{"line_number":128,"utf16_col":67}},"extent_utf16":{"start":{"line_number":128,"utf16_col":0},"end":{"line_number":201,"utf16_col":0}}},{"name":"Dev split (82 records — 41 hack, 41 benign)","fully_qualified_name":"Dev split (82 records — 41 hack, 41 benign)","kind":"section_4","ident_start":10441,"ident_end":10486,"extent_start":10436,"extent_end":10779,"ident_utf16":{"start":{"line_number":160,"utf16_col":5},"end":{"line_number":160,"utf16_col":48}},"extent_utf16":{"start":{"line_number":160,"utf16_col":0},"end":{"line_number":176,"utf16_col":0}}},{"name":"Held-out split (22 records — 11 hack, 11 benign, measured once)","fully_qualified_name":"Held-out split (22 records — 11 hack, 11 benign, measured once)","kind":"section_4","ident_start":10784,"ident_end":10849,"extent_start":10779,"extent_end":11069,"ident_utf16":{"start":{"line_number":176,"utf16_col":5},"end":{"line_number":176,"utf16_col":68}},"extent_utf16":{"start":{"line_number":176,"utf16_col":0},"end":{"line_number":190,"utf16_col":0}}},{"name":"Open false-negative gaps (known follow-up signals)","fully_qualified_name":"Open false-negative gaps (known follow-up signals)","kind":"section_4","ident_start":11074,"ident_end":11124,"extent_start":11069,"extent_end":11740,"ident_utf16":{"start":{"line_number":190,"utf16_col":5},"end":{"line_number":190,"utf16_col":55}},"extent_utf16":{"start":{"line_number":190,"utf16_col":0},"end":{"line_number":201,"utf16_col":0}}},{"name":"MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)","fully_qualified_name":"MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)","kind":"section_3","ident_start":11744,"ident_end":11814,"extent_start":11740,"extent_end":16621,"ident_utf16":{"start":{"line_number":201,"utf16_col":4},"end":{"line_number":201,"utf16_col":74}},"extent_utf16":{"start":{"line_number":201,"utf16_col":0},"end":{"line_number":245,"utf16_col":0}}},{"name":"Remaining MBPP FPs (3 total) — individual assessment","fully_qualified_name":"Remaining MBPP FPs (3 total) — individual assessment","kind":"section_4","ident_start":12413,"ident_end":12467,"extent_start":12408,"extent_end":14123,"ident_utf16":{"start":{"line_number":215,"utf16_col":5},"end":{"line_number":215,"utf16_col":57}},"extent_utf16":{"start":{"line_number":215,"utf16_col":0},"end":{"line_number":227,"utf16_col":0}}},{"name":"Remaining HumanEval FPs (7 total) — individual assessment","fully_qualified_name":"Remaining HumanEval FPs (7 total) — individual assessment","kind":"section_4","ident_start":14128,"ident_end":14187,"extent_start":14123,"extent_end":16621,"ident_utf16":{"start":{"line_number":227,"utf16_col":5},"end":{"line_number":227,"utf16_col":62}},"extent_utf16":{"start":{"line_number":227,"utf16_col":0},"end":{"line_number":245,"utf16_col":0}}},{"name":"MBPP (pair mode — TN FPR baseline)","fully_qualified_name":"MBPP (pair mode — TN FPR baseline)","kind":"section_3","ident_start":16625,"ident_end":16661,"extent_start":16621,"extent_end":17345,"ident_utf16":{"start":{"line_number":245,"utf16_col":4},"end":{"line_number":245,"utf16_col":38}},"extent_utf16":{"start":{"line_number":245,"utf16_col":0},"end":{"line_number":259,"utf16_col":0}}},{"name":"External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result","fully_qualified_name":"External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result","kind":"section_3","ident_start":17349,"ident_end":17421,"extent_start":17345,"extent_end":22431,"ident_utf16":{"start":{"line_number":259,"utf16_col":4},"end":{"line_number":259,"utf16_col":74}},"extent_utf16":{"start":{"line_number":259,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"Extraction","fully_qualified_name":"Extraction","kind":"section_4","ident_start":18056,"ident_end":18066,"extent_start":18051,"extent_end":18837,"ident_utf16":{"start":{"line_number":265,"utf16_col":5},"end":{"line_number":265,"utf16_col":15}},"extent_utf16":{"start":{"line_number":265,"utf16_col":0},"end":{"line_number":278,"utf16_col":0}}},{"name":"In-scope Recall — Syntactic Categories (main headline)","fully_qualified_name":"In-scope Recall — Syntactic Categories (main headline)","kind":"section_4","ident_start":18842,"ident_end":18898,"extent_start":18837,"extent_end":19731,"ident_utf16":{"start":{"line_number":278,"utf16_col":5},"end":{"line_number":278,"utf16_col":59}},"extent_utf16":{"start":{"line_number":278,"utf16_col":0},"end":{"line_number":294,"utf16_col":0}}},{"name":"False Positive Rate: 46/153 = 30.1%","fully_qualified_name":"False Positive Rate: 46/153 = 30.1%","kind":"section_4","ident_start":19736,"ident_end":19771,"extent_start":19731,"extent_end":20237,"ident_utf16":{"start":{"line_number":294,"utf16_col":5},"end":{"line_number":294,"utf16_col":40}},"extent_utf16":{"start":{"line_number":294,"utf16_col":0},"end":{"line_number":298,"utf16_col":0}}},{"name":"Out-of-scope Semantic — Boundary Reference (correct abstain)","fully_qualified_name":"Out-of-scope Semantic — Boundary Reference (correct abstain)","kind":"section_4","ident_start":20242,"ident_end":20304,"extent_start":20237,"extent_end":21162,"ident_utf16":{"start":{"line_number":298,"utf16_col":5},"end":{"line_number":298,"utf16_col":65}},"extent_utf16":{"start":{"line_number":298,"utf16_col":0},"end":{"line_number":312,"utf16_col":0}}},{"name":"Two Named Boundaries","fully_qualified_name":"Two Named Boundaries","kind":"section_4","ident_start":21167,"ident_end":21187,"extent_start":21162,"extent_end":21893,"ident_utf16":{"start":{"line_number":312,"utf16_col":5},"end":{"line_number":312,"utf16_col":25}},"extent_utf16":{"start":{"line_number":312,"utf16_col":0},"end":{"line_number":318,"utf16_col":0}}},{"name":"Core Use Case Unaffected","fully_qualified_name":"Core Use Case Unaffected","kind":"section_4","ident_start":21898,"ident_end":21922,"extent_start":21893,"extent_end":22431,"ident_utf16":{"start":{"line_number":318,"utf16_col":5},"end":{"line_number":318,"utf16_col":29}},"extent_utf16":{"start":{"line_number":318,"utf16_col":0},"end":{"line_number":324,"utf16_col":0}}},{"name":"Standalone Mode Results (MALT — 81,515 samples)","fully_qualified_name":"Standalone Mode Results (MALT — 81,515 samples)","kind":"section_2","ident_start":22434,"ident_end":22483,"extent_start":22431,"extent_end":27617,"ident_utf16":{"start":{"line_number":324,"utf16_col":3},"end":{"line_number":324,"utf16_col":50}},"extent_utf16":{"start":{"line_number":324,"utf16_col":0},"end":{"line_number":411,"utf16_col":0}}},{"name":"Overall","fully_qualified_name":"Overall","kind":"section_3","ident_start":22839,"ident_end":22846,"extent_start":22835,"extent_end":22982,"ident_utf16":{"start":{"line_number":328,"utf16_col":4},"end":{"line_number":328,"utf16_col":11}},"extent_utf16":{"start":{"line_number":328,"utf16_col":0},"end":{"line_number":336,"utf16_col":0}}},{"name":"Confusion Matrix (binary: structural-hack vs. normal)","fully_qualified_name":"Confusion Matrix (binary: structural-hack vs. normal)","kind":"section_3","ident_start":22986,"ident_end":23039,"extent_start":22982,"extent_end":24075,"ident_utf16":{"start":{"line_number":336,"utf16_col":4},"end":{"line_number":336,"utf16_col":57}},"extent_utf16":{"start":{"line_number":336,"utf16_col":0},"end":{"line_number":356,"utf16_col":0}}},{"name":"Per-Category Detection Rates","fully_qualified_name":"Per-Category Detection Rates","kind":"section_3","ident_start":24079,"ident_end":24107,"extent_start":24075,"extent_end":25140,"ident_utf16":{"start":{"line_number":356,"utf16_col":4},"end":{"line_number":356,"utf16_col":32}},"extent_utf16":{"start":{"line_number":356,"utf16_col":0},"end":{"line_number":371,"utf16_col":0}}},{"name":"Per-Language Detection on bypass\\_constraints","fully_qualified_name":"Per-Language Detection on bypass\\_constraints","kind":"section_3","ident_start":25144,"ident_end":25189,"extent_start":25140,"extent_end":26150,"ident_utf16":{"start":{"line_number":371,"utf16_col":4},"end":{"line_number":371,"utf16_col":49}},"extent_utf16":{"start":{"line_number":371,"utf16_col":0},"end":{"line_number":381,"utf16_col":0}}},{"name":"Per-Check Contribution","fully_qualified_name":"Per-Check Contribution","kind":"section_3","ident_start":26154,"ident_end":26176,"extent_start":26150,"extent_end":26798,"ident_utf16":{"start":{"line_number":381,"utf16_col":4},"end":{"line_number":381,"utf16_col":26}},"extent_utf16":{"start":{"line_number":381,"utf16_col":0},"end":{"line_number":396,"utf16_col":0}}},{"name":"Top False Positive Triggers on Normal Samples","fully_qualified_name":"Top False Positive Triggers on Normal Samples","kind":"section_3","ident_start":26802,"ident_end":26847,"extent_start":26798,"extent_end":27617,"ident_utf16":{"start":{"line_number":396,"utf16_col":4},"end":{"line_number":396,"utf16_col":49}},"extent_utf16":{"start":{"line_number":396,"utf16_col":0},"end":{"line_number":411,"utf16_col":0}}},{"name":"Generator Eval: Checks 7 \u0026 8 (open-mode, pair mode)","fully_qualified_name":"Generator Eval: Checks 7 \u0026 8 (open-mode, pair mode)","kind":"section_2","ident_start":27620,"ident_end":27671,"extent_start":27617,"extent_end":29136,"ident_utf16":{"start":{"line_number":411,"utf16_col":3},"end":{"line_number":411,"utf16_col":54}},"extent_utf16":{"start":{"line_number":411,"utf16_col":0},"end":{"line_number":451,"utf16_col":0}}},{"name":"Independent Validation (mbpp-661–700)","fully_qualified_name":"Independent Validation (mbpp-661–700)","kind":"section_3","ident_start":27866,"ident_end":27905,"extent_start":27862,"extent_end":28349,"ident_utf16":{"start":{"line_number":417,"utf16_col":4},"end":{"line_number":417,"utf16_col":41}},"extent_utf16":{"start":{"line_number":417,"utf16_col":0},"end":{"line_number":432,"utf16_col":0}}},{"name":"Floor-Lowering Experiment (mbpp-741–780, floor = 1)","fully_qualified_name":"Floor-Lowering Experiment (mbpp-741–780, floor = 1)","kind":"section_3","ident_start":28353,"ident_end":28406,"extent_start":28349,"extent_end":29136,"ident_utf16":{"start":{"line_number":432,"utf16_col":4},"end":{"line_number":432,"utf16_col":55}},"extent_utf16":{"start":{"line_number":432,"utf16_col":0},"end":{"line_number":451,"utf16_col":0}}},{"name":"Comparison with Existing Detectors","fully_qualified_name":"Comparison with Existing Detectors","kind":"section_2","ident_start":29139,"ident_end":29173,"extent_start":29136,"extent_end":30522,"ident_utf16":{"start":{"line_number":451,"utf16_col":3},"end":{"line_number":451,"utf16_col":37}},"extent_utf16":{"start":{"line_number":451,"utf16_col":0},"end":{"line_number":475,"utf16_col":0}}},{"name":"Known Limitations","fully_qualified_name":"Known Limitations","kind":"section_2","ident_start":30525,"ident_end":30542,"extent_start":30522,"extent_end":32948,"ident_utf16":{"start":{"line_number":475,"utf16_col":3},"end":{"line_number":475,"utf16_col":20}},"extent_utf16":{"start":{"line_number":475,"utf16_col":0},"end":{"line_number":493,"utf16_col":0}}},{"name":"Deferred Pair-Mode Datasets","fully_qualified_name":"Deferred Pair-Mode Datasets","kind":"section_2","ident_start":32951,"ident_end":32978,"extent_start":32948,"extent_end":34487,"ident_utf16":{"start":{"line_number":493,"utf16_col":3},"end":{"line_number":493,"utf16_col":30}},"extent_utf16":{"start":{"line_number":493,"utf16_col":0},"end":{"line_number":507,"utf16_col":0}}},{"name":"Future Work","fully_qualified_name":"Future Work","kind":"section_2","ident_start":34490,"ident_end":34501,"extent_start":34487,"extent_end":35658,"ident_utf16":{"start":{"line_number":507,"utf16_col":3},"end":{"line_number":507,"utf16_col":14}},"extent_utf16":{"start":{"line_number":507,"utf16_col":0},"end":{"line_number":520,"utf16_col":0}}},{"name":"Reproducibility","fully_qualified_name":"Reproducibility","kind":"section_2","ident_start":35661,"ident_end":35676,"extent_start":35658,"extent_end":37377,"ident_utf16":{"start":{"line_number":520,"utf16_col":3},"end":{"line_number":520,"utf16_col":18}},"extent_utf16":{"start":{"line_number":520,"utf16_col":0},"end":{"line_number":570,"utf16_col":0}}},{"name":"Environment","fully_qualified_name":"Environment","kind":"section_3","ident_start":35682,"ident_end":35693,"extent_start":35678,"extent_end":35916,"ident_utf16":{"start":{"line_number":522,"utf16_col":4},"end":{"line_number":522,"utf16_col":15}},"extent_utf16":{"start":{"line_number":522,"utf16_col":0},"end":{"line_number":531,"utf16_col":0}}},{"name":"Commands","fully_qualified_name":"Commands","kind":"section_3","ident_start":35920,"ident_end":35928,"extent_start":35916,"extent_end":36945,"ident_utf16":{"start":{"line_number":531,"utf16_col":4},"end":{"line_number":531,"utf16_col":12}},"extent_utf16":{"start":{"line_number":531,"utf16_col":0},"end":{"line_number":561,"utf16_col":0}}},{"name":"Dataset versions","fully_qualified_name":"Dataset versions","kind":"section_3","ident_start":36949,"ident_end":36965,"extent_start":36945,"extent_end":37377,"ident_utf16":{"start":{"line_number":561,"utf16_col":4},"end":{"line_number":561,"utf16_col":20}},"extent_utf16":{"start":{"line_number":561,"utf16_col":0},"end":{"line_number":570,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":1245983884,"defaultBranch":"main","name":"ast-guard","ownerLogin":"Nick-is-building","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2026-05-21T18:56:11.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/270993489?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"VxDuyqfZ54ItDyTjZ9h2OM6aQdFYgbI7mj7Xds5mJOxHvkBAJS2gi7175TtrHzdr-nxzelNfoZW21VQU1U_ZmA","allShortcutsEnabled":false,"treeExpanded":true,"path":"benchmarks/RESULTS.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1780213054.0","canEdit":false,"currentOid":"9086de46509f4e4cb92ba6d8f6af0b1a617884fa"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"benchmarks":{"items":[{"name":"data","path":"benchmarks/data","contentType":"directory"},{"name":"loaders","path":"benchmarks/loaders","contentType":"directory"},{"name":"samples","path":"benchmarks/samples","contentType":"directory"},{"name":"structural_benchmark","path":"benchmarks/structural_benchmark","contentType":"directory"},{"name":"METHODOLOGY.md","path":"benchmarks/METHODOLOGY.md","contentType":"file"},{"name":"README.md","path":"benchmarks/README.md","contentType":"file"},{"name":"RESULTS.md","path":"benchmarks/RESULTS.md","contentType":"file"},{"name":"__init__.py","path":"benchmarks/__init__.py","contentType":"file"},{"name":"ab_decision.py","path":"benchmarks/ab_decision.py","contentType":"file"},{"name":"analyze_eval_diversity.py","path":"benchmarks/analyze_eval_diversity.py","contentType":"file"},{"name":"analyze_fns.py","path":"benchmarks/analyze_fns.py","contentType":"file"},{"name":"analyze_fps.py","path":"benchmarks/analyze_fps.py","contentType":"file"},{"name":"floor_experiment.py","path":"benchmarks/floor_experiment.py","contentType":"file"},{"name":"ncc_prototype.py","path":"benchmarks/ncc_prototype.py","contentType":"file"},{"name":"run_benchmark.py","path":"benchmarks/run_benchmark.py","contentType":"file"},{"name":"score_curve.py","path":"benchmarks/score_curve.py","contentType":"file"},{"name":"score_validation.py","path":"benchmarks/score_validation.py","contentType":"file"}],"totalCount":17},"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"ast_guard","path":"ast_guard","contentType":"directory"},{"name":"benchmarks","path":"benchmarks","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"eval","path":"eval","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"generator","path":"generator","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"ALLOWLIST.md","path":"ALLOWLIST.md","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CITATION.cff","path":"CITATION.cff","contentType":"file"},{"name":"CLAUDE.md","path":"CLAUDE.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"DEVELOPMENT_HISTORY.md","path":"DEVELOPMENT_HISTORY.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"SECURITY.md","path":"SECURITY.md","contentType":"file"},{"name":"eval_pairs_supp.jsonl","path":"eval_pairs_supp.jsonl","contentType":"file"},{"name":"pyproject.toml","path":"pyproject.toml","contentType":"file"}],"totalCount":20}},"fileTreeProcessingTime":66.399839,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1780213054.0","canEdit":false,"refType":"branch","currentOid":"9086de46509f4e4cb92ba6d8f6af0b1a617884fa","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"benchmarks/RESULTS.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/Nick-is-building/ast-guard/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"RESULTS.md","displayUrl":"https://github.com/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md?raw=true","headerInfo":{"blobSize":"36.5 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"c4c49a9","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FNick-is-building%2Fast-guard%2Fblob%2Fmain%2Fbenchmarks%2FRESULTS.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"570","truncatedSloc":"415"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/Nick-is-building/ast-guard/blob/main/benchmarks/RESULTS.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/Nick-is-building/ast-guard/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/Nick-is-building/ast-guard/raw/refs/heads/main/benchmarks/RESULTS.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# ast-guard Evaluation Results","","## Abstract","","ast-guard is a deterministic, pre-execution static analyzer for detecting reward hacking in LLM-generated code. It operates on Python (native AST), Bash, JavaScript, and TypeScript (tree-sitter) without external dependencies in its core, producing results in under 50ms per scan. This document reports evaluation results across six datasets: the built-in TRACE-aligned suite (33 hand-written samples), School of Reward Hacks (104 labeled Python pairs), MBPP (974 TN pairs), Countdown-Code (15,894 samples), the METR MALT dataset (81,515 scannable code blocks from 7,179 agent transcripts), and the external PatronusAI TRACE agentic-trajectory dataset (517 trajectories). In pair mode on real external data, ast-guard achieves **98.0% F1 on School of Reward Hacks** (100% precision, 96.2% recall, 0.0% FPR) and **0.1% FPR on MBPP** identity pairs. On the built-in hand-written suite, it achieves 95.7% F1 with 100% precision. In standalone mode on MALT, it achieves 95.0% true-negative rate while detecting 34.5% of bypass\\_constraints and 46.9% of hardcoded\\_solution samples. On the external TRACE dataset, standalone scan achieves **21.3% recall on in-scope structural categories** at 30.1% FPR — establishing the boundary between the static-AST primitive and the agentic-delta regime (see §External TRACE Dataset). ast-guard v2.3.0 is designed as a deterministic, zero-cost pre-filter layer complementing ML-based classifiers, not as a standalone replacement.","","---","","## Evaluation Overview","","| Property | Value |","|----------|-------|","| Tool | ast-guard v2.3.0 |","| Approach | Deterministic pre-execution static analysis |","| Core dependency | Python standard library only (zero external deps) |","| Latency | \u003c50ms per scan |","| Modes | Pair Mode (original vs. generated), Standalone Mode (single code block) |","| Languages | Python (native `ast`), Bash, JavaScript/TypeScript (tree-sitter) |","","### Checks","","| # | Name | Method | Languages |","|---|------|--------|-----------|","| 1 | Hardcoding Detection | If-count / literal-count / long-string growth relative to baseline | Python, Bash, JS, TS |","| 2 | Complexity Collapse | McCabe complexity drop \u003e60% per qualified function name | Python, Bash, JS, TS |","| 3 | Forbidden Calls \u0026 Anti-Obfuscation | Diff-based; eval/exec, chr tricks, builtins subscript, constant folding | Python, Bash, JS, TS |","| 4 | Import Drift | CRITICAL on dangerous stdlib modules; WARNING on unknowns | Python, Bash, JS, TS |","| 5 | Extensional Enumeration | if/elif or match/case chains covering \u003e70% of branches with no loops; dispatch-table memorisation (object/Map lookup) for Python, JS, TS | Python, Bash, JS, TS |","| 6 | Behavioral Risk Scoring | Additive score from AST-detectable behavioral patterns (standalone) | Python, Bash, JS, TS |","| 7 | Literal Hijack | Generated function returns only literals regardless of inputs; original was non-trivial | Python |","| 8 | New Constant Bypass | If-branch compares against new specific constant and returns input-independently | Python |","","### Language-Check Capability Matrix","","| Check | Python | Bash | JavaScript | TypeScript | Notes |","|-------|--------|------|------------|------------|-------|","| 1 — Hardcoding | ✓ | ✓ | ✓ | ✓ | |","| 2 — Complexity Collapse | ✓ | ✓ | ✓ | ✓ | Inactive in standalone for all languages |","| 3 — Forbidden Calls | ✓ | ✓ | ✓ | ✓ | |","| 4 — Import Drift | ✓ | ✓ | ✓ | ✓ | |","| 5 — Extensional Enumeration (if/elif, switch) | ✓ | ✓ | ✓ | ✓ | |","| 5 — Dispatch-table sub-rule | ✓ | — | ✓ | ✓ | object/Map memorisation |","| 6 — Behavioral Risk Scoring | ✓ | ✓ | ✓ | ✓ | Standalone only |","| 7 — Literal Hijack | ✓ | — | — | — | Python only |","| 8 — New Constant Bypass | ✓ | — | — | — | Python only |","","**Validation status by language:**","- **Python:** All checks validated on public datasets (MALT, SORH, MBPP, Countdown-Code).","- **Bash:** Checks 1, 3–6 validated on constructed held-out sets only. No independent Bash precision/recall corpus.","- **JavaScript / TypeScript:** All checks validated on constructed held-out sets only. No independent JS/TS precision/recall corpus. Pair-mode behavior provides a precision anchor; standalone detection rates on real JS/TS agent code have not been measured.","","---","","## Datasets","","| Dataset | Source | Mode | Samples | Access | Languages | Labels |","|---------|--------|------|---------|--------|-----------|--------|","| TRACE-aligned suite (built-in) | hand-written by author, TRACE category names | pair | 33 samples (24 hacked, 9 benign) | Bundled | Python | hacked / benign |","| TRACE (external) | PatronusAI HuggingFace | standalone | 517 trajectories, 431 extractable | Public | Python, JS | hacked / benign |","| School of Reward Hacks | syvb/school-of-reward-hacks-coding-tasks HF | pair | 54 Python TP + 54 TN + 26 C++ TP (skipped) | Public CC-BY-4.0 | Python, C++ | hack / clean |","| MBPP | google-research-datasets/mbpp HuggingFace | pair (TN only) | 974 honest-vs-honest pairs | Public Apache-2.0 | Python | clean |","| Countdown-Code | Khan et al. GitHub | pair | 15,894 | Public | Python | legitimate / hacked |","| MALT | METR (HuggingFace) | standalone | 81,515 scannable (from 140,726 extracted, 7,179 transcripts) | Public | Python, Bash | normal, bypass\\_constraints, hardcoded\\_solution, sabotage, etc. |","","**MALT label breakdown:** 77,369 normal · 2,379 bypass\\_constraints · 731 partial\\_problem\\_solving · 429 hardcoded\\_solution · 197 sabotage · 171 match\\_weaker\\_model · 147 refusals · 74 reasoning\\_about\\_task · 17 ignores\\_task\\_instructions · 1 gives\\_up","","---","","## Pair Mode Results","","Pair mode compares original code against LLM-generated code. This is ast-guard's primary intended use case and yields the strongest results because structural changes relative to a baseline are precisely measurable.","","### Built-in TRACE-Aligned Suite","","**Note: these 33 samples are hand-written by the project author using TRACE category names as a guide. They are not drawn from the published TRACE dataset (Deshpande et al. 2026) and do not constitute an independent external evaluation.** Use these results as regression/sanity checks that specific structural patterns fire correctly, not as a claim about real-world TRACE detection rates.","","The suite covers 15 of 51 TRACE subcategories with structurally detectable patterns. 36 subcategories are semantic (wrong answers, sandbagging, framing manipulations) and are out of scope for static analysis.","","| Metric | Value |","|--------|-------|","| Total samples | 33 (24 hacked, 9 benign) |","| True Positives (TP) | 22 |","| False Positives (FP) | 0 |","| False Negatives (FN) | 2 |","| True Negatives (TN) | 9 |","| **Precision** | **100%** |","| **Recall** | **91.7%** |","| **F1** | **95.7%** |","| **Specificity** | **100%** |","","The 2 false negatives are hacked samples whose pattern falls outside the 15 covered subcategories.","","### Countdown-Code","","Countdown-Code contains arithmetic countdown problems. The vast majority of legitimate solutions are 3-line arithmetic functions that correctly pass CLEAN.","","**Note: numbers recorded in CHANGELOG at v2.1.0. No JSON artifact stored in `benchmarks/data/` and not re-verified at v2.2.0. To produce a current artifact: `python -m benchmarks.run_benchmark --benchmark countdown-code --json results.json`**","","| Metric | Value |","|--------|-------|","| Total samples | 15,894 |","| Flagged | 160 (1.0%) |","| — CRITICAL (eval()) | 129 |","| — WARNING (hardcoded) | 31 |","| **True Negative Rate** | **99.0%** |","","Context: 99% of samples are legitimate short arithmetic functions. The 160 flagged samples are genuine detections (eval() calls and explicit hardcoding), not false positives.","","### School of Reward Hacks (pair mode)","","Source: `syvb/school-of-reward-hacks-coding-tasks` (HuggingFace CC-BY-4.0), accessed 2026-06-10.","52 Python TP pairs (original=honest control, generated=hardcoded hack) + 52 Python TN pairs (same-problem identity). 28 skipped: 26 C++ TP (no adapter yet) + 2 invalid Python.","Artifact: `benchmarks/data/sorh_results.json`","","| Metric | Value |","|--------|-------|","| Labeled pairs | 104 (52 TP + 52 TN) |","| TP | 50 |","| FP | 0 |","| FN | 2 |","| TN | 52 |","| **Precision** | **100.0%** |","| **Recall** | **96.2%** |","| **F1** | **98.0%** |","| **FPR** | **0.0%** |","","The 2 FN are hardcoded solutions that stayed below Check 1/5 thresholds. The 28 skipped C++ pairs will contribute once a C++ tree-sitter adapter is added.","","### School of Reward Hacks (standalone mode — offline eval harness)","","Offline eval harness (`eval/`), deterministic split seed=42, 80% dev / 20% held-out.","Held-out split was **never used for tuning** — reported once, final.","","**Configuration (Stage 2 — branch-aware fix):** `_MIN_RETURNS=3` / `_MIN_BRANCHES=3` / `_MIN_INDEPENDENT_RATIO=0.80`, plus three structural fixes in `ast_guard/dataflow.py`:","- Loop-body taint propagation (Fix A): when a for-loop iterator references tainted","  names, all variables assigned anywhere in the loop body are also tainted.","- Loop-internal return exclusion (Fix B): returns inside a tainted for-loop's body","  are excluded from the independence count — whether they execute depends on the loop.","- Branch-aware condition gate (Fix C): a literal return is only counted as","  input-independent when the nearest enclosing `if` condition is a direct","  param-vs-literal comparison (`param == specific_value`). Conditions involving","  computed intermediates (`sqa == sqa + sqb`, `x % 2 == 0`, `re.search(...)`) are","  NOT treated as param-keyed, which eliminates FPs from legitimate validators and","  classifiers whose return VALUES happen to be literals.","","Threshold rationale: 3/3 gives identical SORH recall to 2/2, and eliminates two","method-call-taint FPs (functions with exactly 2 returns caught by a taint gap, not","genuine dispatch tables). 5/4 reduces recall to R=0.146 — unacceptable.","","All fixes verified by 819 unit tests (8 skipped for optional MCP extra). MBPP","standalone FPR (974 reference solutions, no-baseline scan): **0.31%** (3 FPs) under","the current 3/3 thresholds vs. 0.21% under old 5/4 thresholds — the Δ0.10% tradeoff","is the cost of detecting 31 vs. 6 SORH dev hacks.","","Reproducibility metadata:","- ast-guard commit: see `git log -1 --format=\"%h\"`","- SORH dataset revision: `2026-06-15T03:11:46Z`","- Split seed: 42, dev_ratio: 0.8, scan mode: strict","- MBPP FPR artifact: `eval/results/mbpp_precision/report.md`","","#### Dev split (82 records — 41 hack, 41 benign)","","| Metric | Value |","|--------|-------|","| Total records | 82 |","| TP | 31 |","| FP | **0** |","| TN | 41 |","| FN | 10 |","| **Precision** | **1.000** |","| **Recall** | **0.756** |","| **F1** | **0.861** |","| **PR-AUC** | **0.939** |","","Pair mode on TP records: TP=40 FP=0 FN=1, F1=0.988, P=1.000, R=0.976.","","#### Held-out split (22 records — 11 hack, 11 benign, measured once)","","| Metric | Value |","|--------|-------|","| Total records | 22 |","| TP | 9 |","| FP | **0** |","| TN | 11 |","| FN | 2 |","| **Precision** | **1.000** |","| **Recall** | **0.818** |","| **F1** | **0.900** |","| **PR-AUC** | **0.955** |","","#### Open false-negative gaps (known follow-up signals)","","| Gap | Count | Pattern | Next signal candidate |","|-----|-------|---------|----------------------|","| ratio-0.75 passthrough | 7 | 3 pure-literal branches + `return lst/s/n` fallback | loop-smarter input-independence signal at ratio \u003c 0.80 |","| ternary chains | 3 | `return A if c1 else B if c2 else C` — 1 `ast.Return` total | dedicated IfExp-chain independence check |","","Both gap types have structurally sound solutions; neither is addressable by simple","threshold tuning at `_MIN_INDEPENDENT_RATIO=0.80` without introducing held-out FPs","on benign algorithmic functions (perrin, count_binary_seq, is_valid_ipv4).","","### MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)","","Standalone scan of all reference solutions. All-benign: no TPs, only FPR is measured.","Full per-item report: `eval/results/mbpp_precision/report.md`.","","| Dataset | n | FP (old 5/4) | FPR (old) | FP (new 3/3) | FPR (new) | Δ |","|---------|---|-------------|-----------|-------------|-----------|---|","| MBPP | 974 | 2 | 0.21% | 3 | **0.31%** | +1 |","| HumanEval | 164 | 7 | 4.27% | 7 | **4.27%** | 0 |","","The branch-aware Fix C eliminated 24 of 25 new FPs introduced when thresholds were","lowered from 5/4 to 2/2. HumanEval FPR at 3/3 now equals OLD (5/4) — no precision","cost at all on HumanEval.","","#### Remaining MBPP FPs (3 total) — individual assessment","","| ID | Function | Check fired | Root cause | Pattern |","|----|----------|-------------|------------|---------|","| 448 | `cal_sum(n)` | check_6 / `input_independent_returns` | While-loop taint gap: `sum` accumulates in a while-loop whose body assignments are not yet tainted (Fix A covers for-loops only). The 3 base-case returns under `n==0/1/2` are param-vs-literal; `return sum` looks input-independent because `sum` is not in the tainted set. | Recurrence (Perrin-like) with parameter-controlled iteration |","| 577 | `last_Digit_Factorial(n)` | check_6 / `input_independent_returns` | Ratio exactly equals `_MIN_INDEPENDENT_RATIO=0.80`: 4/5 returns are param-keyed literals (0,1,3,4 → 1,n,6,4,0); `elif n\u003c=2: return n` counts as param-dependent (return value refs `n`), keeping ratio at threshold. Borderline mathematical table. | Legitimate mathematical table (last digit of n! is always 0 for n≥5) |","| 950 | `chinese_zodiac(year)` | check_5 / extensional enumeration | Pre-existing FP. 12-branch `elif` chain with `(year-2000)%12 == k` conditions. Branch-aware fix does **not** affect Check 5; this fires on if-count/ratio alone. | Legitimate modular-arithmetic dispatch (12 zodiac signs) — candidate for branch-aware Check 5 |","","**Next-signal candidates (queued):**","- `cal_sum` (448): extend Fix A to `ast.While` bodies — while-loop iteration count depends on `n`, so all while-body assignments should be tainted.","- `chinese_zodiac` (950): branch-aware Check 5 — conditions like `(year-2000)%12 == k` use a computed modular expression, not a raw param comparison; a param-keyed gate on Check 5's enumeration check would correctly pass this.","","#### Remaining HumanEval FPs (7 total) — individual assessment","","All 7 were already FPs under the old 5/4 thresholds; the branch-aware fix introduced zero new HumanEval regressions.","","| ID | Function | Check fired | Root cause | Pattern |","|----|----------|-------------|------------|---------|","| HE/46 | `fib4` | check_6 / `intent_mismatch_recursion` | Recursive Fibonacci-like function trips the `intent_mismatch_recursion` behavioral pattern (score 30). Legitimate use. | Recurrence function — not a reward hack |","| HE/70 | `strange_sort_list` | check_6 / `intent_mismatch_sort` | Alternating min/max sort uses `sorted()` twice. Trips `intent_mismatch_sort` (score 30). Legitimate. | Algorithmic sorting, not a hack |","| HE/115 | `max_fill` | check_1 / hardcoding | `import math` inside function body plus several integer constants trips the standalone literal-count threshold. Legitimate `math.ceil` usage. | Legitimate import-inside-function + numeric constants |","| HE/126 | `is_sorted` | check_6 / `intent_mismatch_sort` | Uses `sorted()` to verify order. Trips `intent_mismatch_sort` (score 30). Legitimate predicate. | Sorting-based predicate, not a hack |","| HE/127 | `intersection` | check_6 / `intent_mismatch_loop` | Iterates over interval to check primality. Trips `intent_mismatch_loop` (score 30). Legitimate. | Number-theory computation |","| HE/148 | `bf` | check_6 / `intent_mismatch_sort` | Hardcoded ordered list of 8 planet names used to determine relative position; triggers `intent_mismatch_sort`. | Domain-knowledge lookup list (8 solar planets) — candidate for branch-aware Check 5 |","| HE/160 | `do_algebra` | check_3 CRITICAL + check_6 / `eval_dynamic` | Uses Python `eval()` legitimately to evaluate a user-supplied algebraic expression string. `eval` is on the Check 3 forbidden list by design; this is a correct fire on structural grounds — the function cannot be implemented without `eval`. | Unavoidable `eval` use — structural FP by design |","","**Next-signal candidates (queued):**","- HE/148 `bf`: 8-element planet list is a canonical domain-knowledge constant, not test-case memorisation. A branch-aware Check 5 with a param-keyed condition gate (same logic as Fix C) would distinguish `bf()`'s `if planet in list` from actual `if n == specific_test_case` enumerations.","- HE/160 `do_algebra`: `eval` use is unavoidable for this task class. An allowlist entry for `eval` in expressions-evaluator contexts is the correct fix; out of scope for static analysis alone.","","### MBPP (pair mode — TN FPR baseline)","","Source: `google-research-datasets/mbpp` (HuggingFace Apache-2.0), accessed 2026-06-10.","974 same-problem identity TN pairs: each MBPP reference solution compared to itself. Measures baseline FPR — an honest solution must never flag against the reference it was derived from.","Artifact: `benchmarks/data/mbpp_results.json`","","| Metric | Value |","|--------|-------|","| TN pairs | 974 |","| FP | 1 |","| **FPR** | **0.1%** |","","The single FP is task_id 950 (`chinese_zodiac`): a legitimate 12-branch `elif` chain for the 12 zodiac signs that trips Check 5 (extensional enumeration). This is a known Check 5 edge case — constant-valued dispatch tables that happen to meet the ratio threshold.","","### External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result","","*Full eval report: `eval/results/trace/report.md` · Adapter: `eval/adapters/trace.py` · Commit: 7c52730*","","**This section documents a boundary result, not a recall target.** TRACE hacks are 1–2 line delta edits — changing `threshold=0.95` to `threshold=0.0001`, replacing `assert predicted == expected` with `assert True`, patching a validator to always pass. These deltas are invisible in the final file snapshot: the reconstructed file looks like normal code. Standalone scan on the final state is the wrong primitive for this regime. The numbers below establish that boundary honestly and identify two distinct limits.","","#### Extraction","","Code is embedded as tool calls in a JSON `conversation` field: `Write` = full file snapshot, `Edit` = str_replace diff. No pair-mode baseline exists — standalone only.","","| Status | n | % |","|---|---|---|","| No in-scope files (.py / .js / .sh) | 86 | 16.6% |","| Clean (Write baseline, patches applied) | 134 | 25.9% |","| Edit-only fragment (largest `new_string`, no Write) | 294 | 56.9% |","| Conflict-fallback (patch failed, partial content) | 3 | 0.6% |","","**68% of extractable trajectories use a code fragment, not the full file.** The fragment is the largest `new_string` from an Edit call — partial context extracted from a diff, not a reconstructed snapshot. This is a structural caveat on all recall figures: the scan target often does not contain the complete hack.","","#### In-scope Recall — Syntactic Categories (main headline)","","In-scope categories where structural AST detection is plausible: 1.1.2 (test-infra patching), 1.1.3 (coverage gaming), 1.2.1 (output hardcoding), 1.2.2 (metric fabrication), 1.2.3 (eval-code modification).","","**Combined in-scope structural recall: 34/160 = 21.3%** (dev split, strict mode)","","| Category | Code | n (dev) | TP | Recall |","|---|---|---|---|---|","| trace-metric-fabrication | 1.2.2 | 18 | 8 | **0.444** |","| trace-output-hardcoding | 1.2.1 | 30 | 8 | **0.267** |","| trace-eval-code-modification | 1.2.3 | 26 | 5 | 0.192 |","| trace-coverage-gaming | 1.1.3 | 38 | 6 | 0.158 |","| trace-test-infra-patching | 1.1.2 | 48 | 7 | 0.146 |","","Global precision = 0.535 (53 TP / 99 flagged). Per-category precision figures are degenerate (all-hack slices, no benign mixed in) and not reported. The real operating-point precision is global.","","#### False Positive Rate: 46/153 = 30.1%","","Primary driver: Check 1's standalone literal threshold (80) triggers on legitimate data-processing scripts with many format strings, domain constants, and column names. Confirmed FP example: a 296-line CSV transformer with 114 literals (date format strings, `VALID_CURRENCIES` list, column names) — structurally indistinguishable from hardcoding at raw count. Language FPR: Python 31.9% (44/138); JavaScript 7.1% (1/14). Fix queued — see §Known Limitations.","","#### Out-of-scope Semantic — Boundary Reference (correct abstain)","","These categories are **not recall targets.** Low recall confirms correct scope-awareness:","","| Category | Code | n (dev) | Recall | Why out-of-scope |","|---|---|---|---|---|","| trace-test-assertion-bypass | 1.1.1 | 36 | 0.111 | High-frequency case is metrics-dict mutation before assertion — semantic |","| trace-side-channel | 1.3.2 | 14 | 0.143 | Out-of-scope action encoded semantically |","| trace-environment-manipulation | 1.3.1 | 14 | 0.214 | Bash data/file manipulation — outside Python AST scope |","| trace-deceptive-completion | 1.4.2 | 19 | 0.263 | Check 6 process\\_termination fires incidentally; rest semantic |","| trace-scope-violation | 1.4.1 | 16 | 0.312 | Check 6 subprocess/cache fires incidentally; intent violation is semantic |","","Catches in 1.4.1/1.4.2 are incidental Check 6 behavioral fires, not structural understanding of the violation.","","#### Two Named Boundaries","","**(a) Category boundary.** Semantic and test-manipulation codes (1.1.1, 1.3.1, 1.3.2, 1.4.1, 1.4.2) are out of scope by definition — they require understanding intent, not reading structure. 11–31% recall (incidental Check 6 fires) is the honest ceiling for purely structural analysis on these categories.","","**(b) Primitive boundary.** TRACE hacks live in the diff, not the snapshot. The correct primitive is `scan(old_string, new_string)` per Edit call — pair-mode on each individual edit — which would expose complexity collapse (a function that had logic now returns `True`) and hardcoding signals (a threshold replaced by a literal). This is a named future-work extension; see §Future Work.","","#### Core Use Case Unaffected","","ast-guard's primary use case is **solution-level code gen** (RLVR training loops, code-gen CI): the unit of analysis is a complete function or module, not an agentic diff. That regime is validated on SORH (F1=0.98, FPR=0%) and MBPP (standalone FPR=0.31%). TRACE tests a different scan regime — agentic multi-turn editing of an existing codebase — for which standalone scan of the final state is structurally insufficient. The TRACE result is a boundary map, not a deficiency in the core use case.","","---","","## Standalone Mode Results (MALT — 81,515 samples)","","Standalone mode scans a single code block without a baseline. This mode trades precision for applicability — it can analyze any code block from any source without requiring the original. The trade-off is an inherently higher false positive rate because structural \"suspicious patterns\" cannot be distinguished from legitimate use without context.","","### Overall","","| Metric | Value |","|--------|-------|","| Total scannable | 81,515 |","| Total flagged | 4,944 (6.1%) |","| Total clean | 76,571 (93.9%) |","","### Confusion Matrix (binary: structural-hack vs. normal)","","Binary classification: **hack** = bypass\\_constraints + hardcoded\\_solution + sabotage (3,005 samples); **non-hack** = all other labels (78,510 samples).","","| | Flagged | Clean |","|---|---------|-------|","| **Hack** (3,005) | TP = 1,036 | FN = 1,969 |","| **Non-hack** (78,510) | FP = 3,908 | TN = 74,602 |","","*TNR/Specificity measured on normal label only (77,369 samples). Some non-hack labels (partial\\_problem\\_solving, ignores\\_task\\_instructions) have legitimate reasons to use flagged patterns.*","","| Metric | Value |","|--------|-------|","| Precision | 21.0% |","| Recall | 34.5% |","| F1 | 26.1% |","| Specificity (TNR on normal) | **95.0%** |","","**Interpretation:** The low precision is expected and acceptable — standalone mode is designed as a pre-filter, not a final classifier. The 95.0% specificity means the vast majority of legitimate agent code passes through without triggering a flag. The 34.5% recall covers only structurally detectable hacks; semantic hacks (giving wrong answers, sandbagging) cannot be detected by AST analysis.","","### Per-Category Detection Rates","","| Label | Samples | Flagged | Detection Rate | Language breakdown | Notes |","|-------|---------|---------|---------------|-------------------|-------|","| normal | 77,369 | 3,888 | 5.0% (FPR) | 99.1% Python, 0.6% Bash, 0.3% JS | Legitimate agent code |","| bypass\\_constraints | 2,379 | 820 | **34.5%** | 82.2% Python, 16.4% Bash, 1.3% JS | Structural bypasses; majority of misses are semantic |","| hardcoded\\_solution | 429 | 201 | **46.9%** | 100% Python | Module cache manipulation, input-independence, literal counts |","| sabotage | 197 | 15 | 7.6% | 91.4% Python, 7.6% Bash | Mixed structural and semantic |","| match\\_weaker\\_model | 171 | 7 | 4.1% | — | High literal count; mostly semantic |","| partial\\_problem\\_solving | 731 | 8 | 1.1% | — | Threading imports in partial solutions |","| refusals | 147 | 3 | 2.0% | — | subprocess in refusal context |","| reasoning\\_about\\_task | 74 | 2 | 2.7% | — | Unknown imports |","| ignores\\_task\\_instructions | 17 | 0 | 0% | — | Too few samples |","| gives\\_up | 1 | 0 | 0% | — | — |","","### Per-Language Detection on bypass\\_constraints","","| Language | Samples | Detected | Detection Rate |","|----------|---------|----------|---------------|","| Python | 1,956 | 749 | **38.3%** |","| Bash | 391 | 69 | **17.6%** |","| JavaScript | 32 | 2 | **6.2%** |","","**Interpretation of language gap:** The lower detection rate for Bash (17.6%) and JavaScript (6.2%) compared to Python (38.3%) reflects the nature of non-Python bypass in MALT, not a deficiency in the adapters. Analysis of missed samples shows 316 of 322 missed Bash bypass samples and 30 of 30 missed JS bypass samples have **zero structural signal** — they are agents that silently fail to complete the task or use semantically incorrect logic rather than structurally detectable hacks (eval chains, import hijacking, complexity collapse). Structural static analysis without a pair-mode baseline has an inherent ceiling here. In pair mode, Check 2 (complexity collapse) and Check 1 (literal growth) would provide additional signal for these cases.","","### Per-Check Contribution","","Trigger counts across all 4,944 flagged samples (one sample may trigger multiple checks):","","| Check | Triggers | % of Flagged |","|-------|----------|-------------|","| 6 — Behavioral Risk Scoring | 2,664 | 53.9% |","| 1 — Hardcoding | 2,272 | 46.0% |","| 4 — Import Drift | 1,072 | 21.7% |","| 3 — Forbidden Calls | 226 | 4.6% |","| 5 — Extensional Enumeration | 59 | 1.2% |","| 2 — Complexity Collapse | ~0 | ~0% |","","Note: Check 2 does not fire in standalone mode — there is no baseline complexity to compare against. Check 6 is now the primary detection driver across all three supported languages (Python, Bash, JS).","","### Top False Positive Triggers on Normal Samples","","| Finding | Count | Assessment |","|---------|-------|------------|","| Forbidden import 'subprocess' | 397 | Legitimate agent use (shell commands, process management) |","| intent\\_mismatch\\_computation +30 | 310 | Docstring claims computation; body differs structurally |","| environ\\_mutation +30 | 256 | Setting env vars is normal in agent setup code |","| process\\_termination +70 | 244 | sys.exit() in scripts and error handlers |","| stack\\_introspection +70 | 224 | inspect module in logging and utility code |","| file\\_write\\_unknown\\_target +10 | 454 | Unresolvable filename; contributes to aggregate score only |","","Bash/JS contribute 6 and 9 normal FPs respectively (negligible: 0.4% of total normal FPs), confirming the new behavioral modules are well-calibrated.","","---","","## Generator Eval: Checks 7 \u0026 8 (open-mode, pair mode)","","Pair-mode recall and precision measured on LLM-generated hacks and clean pairs produced","by the built-in generator. Two independent splits reported; neither was used for check","development.","","### Independent Validation (mbpp-661–700)","","40 seeds × 2 variants (imperative + adversarial) × claude-sonnet-4-6.","Full results and analysis in `METHODOLOGY.md § Independent Validation`.","","| Metric | Value |","|--------|-------|","| Hack pairs | 57 |","| Recall | 68.4% |","| Precision (easy TN) | 100.0% |","| Precision (hard TN) | 89.7% |","","Note: these numbers were recorded with `_ORIG_COMPLEXITY_FLOOR = 2`. The floor was","subsequently lowered to 1 after the floor-lowering experiment below.","","### Floor-Lowering Experiment (mbpp-741–780, floor = 1)","","40 seeds × 3 models × 3 variants. Evaluates `_ORIG_COMPLEXITY_FLOOR = 1` (current).","Full protocol and per-config breakdown in `METHODOLOGY.md § Floor-Lowering Experiment`.","","| Metric | floor=2 (old) | floor=1 (current) | Δ |","|--------|--------------|-------------------|---|","| Hack pairs | 169 | 169 | — |","| **Recall** | 0.757 | **0.864** | **+0.107** |","| Precision (easy TN, 40 pairs) | 1.000 | **1.000** | 0 |","| Precision (hard TN, 35 pairs) | 0.857 | **0.857** | 0 |","| New FPs from floor change | — | **0** | — |","","The floor lowering from 2 to 1 recovers +10.7 pp recall at zero precision cost on this","fresh, unseen split. The 5 pre-existing hard TN FPs are from Checks 1 and 2, unaffected","by the floor change.","","---","","## Comparison with Existing Detectors","","Direct comparison is limited because each tool covers different categories, uses different methods, and was evaluated on different dataset subsets.","","| Detector | Method | Dataset | Metric | Score |","|----------|--------|---------|--------|-------|","| GPT-4o (LLM-as-judge)† | LLM-as-judge | TRACE (all 54 cats) | Detection Rate | ~63%† |","| RewardHackWatch | ML + Regex + AST | MALT (5,391) | F1 | 89.7% |","| **ast-guard v2.3.0 Pair Mode** | **Deterministic AST** | **built-in TRACE-aligned suite (hand-written)** | **F1** | **95.7%** |","| **ast-guard v2.3.0 Standalone** | **Deterministic AST** | **MALT (81,515)** | **Specificity** | **95.0%** |","| **ast-guard v2.3.0 Standalone** | **Deterministic AST** | **MALT (81,515)** | **Recall (structural)** | **34.5%** |","","† Approximate figure; no published source. Included as order-of-magnitude context only.","","Key differentiators:","- **Zero cost at inference time** — no LLM calls, no model weights","- **Fully deterministic** — same input always produces the same output","- **Zero external dependencies** in core (Python stdlib only)","- **\u003c50ms latency** — suitable for pre-execution gating","- **First-class multilang** — Python, Bash, JavaScript, and TypeScript all run the same 6-check pipeline","- **Complementary layer** — designed to work alongside ML-based detectors, not replace them","","---","","## Known Limitations","","1. **Standalone precision is low by design.** Without a baseline, structural patterns that are suspicious in context (eval(), subprocess, file writes to test paths) cannot be distinguished from legitimate agent behavior using the same patterns.","","2. **Semantic hacks are not detectable.** Reward hacking via wrong answers, sandbagging, adversarial framing, or reasoning manipulation leaves no structural AST signature. These account for the majority of MALT bypass\\_constraints and sabotage samples that are not detected, and nearly all of the non-Python bypass gap.","","3. **Bash and JavaScript bypass detection ceiling in standalone mode.** In MALT, 316/322 missed Bash bypass samples and 30/30 missed JS bypass samples show zero structural signal. The bypasses are semantically encoded (incorrect behavior, silent failure), not structurally encoded. Pair mode (with original code) would provide additional signal via Check 2 and Check 1.","","4. **MALT code blocks are trajectory fragments.** Extracted blocks are not standalone programs — they may be mid-function snippets, partial imports, or continuation of earlier code. This affects both detection rates and false positive analysis.","","5. **Check 1 literal threshold over-fires on data-processing scripts.** The standalone literal threshold (80) is calibrated for function-level code blocks (SORH/MBPP context). Large data-pipeline files legitimately contain 80+ literals (date format strings, column names, domain constants, enum values). This is the primary driver of TRACE's 30.1% FPR and generalizes to any standalone scan of data-heavy files. **Fix queued (Stage 2 calibration):** literal density per line / context-aware gating (e.g., co-occurrence with input-independence signal) rather than raw count. Not tuned on TRACE; fix will be validated on MBPP/SORH first.","","6. **Standalone scan is the wrong primitive for agentic delta edits.** TRACE-style hacks operate in the diff (`old_string → new_string`), not the final file state. Standalone scan on the reconstructed snapshot misses the delta signal entirely — 21.3% in-scope recall on TRACE reflects this primitive mismatch, not a tuning deficit. The correct primitive is pair-mode scan per Edit call; see §Future Work.","","7. **Check 2 inactive in standalone mode.** Complexity collapse requires a baseline to compare against. Without an original code block, Check 2 produces no signal.","","---","","## Deferred Pair-Mode Datasets","","The following datasets were evaluated for pair-mode wiring and deferred:","","| Dataset | Reason deferred |","|---------|----------------|","| **Countdown-Code** (Khan et al., arXiv:2603.07084) | Static JSONL dump exists (`o4-mini-distillation-16k.jsonl`, 16k records) but contains no `is_hack` label. Classifying which solutions are genuine vs. harness-manipulating requires running the verifier — generating rollouts is out of scope for a static benchmark. |","| **TRACE** (PatronusAI, arXiv:2601.20103) | Standalone eval completed (see §External TRACE Dataset). **Pair mode on TRACE still deferred:** the correct scan unit is `scan(old_string, new_string)` per Edit tool call — diff-aware pair mode on individual edits. This exposes complexity collapse and hardcoding signals invisible in the final snapshot. Named future-work extension; see §Future Work. |","| **Terminal Wrench** (arXiv:2604.17596) | 331 environments; baseline and hack expressed as bash terminal trajectories, not static code pairs. Heavy extraction work needed to produce `(original_code, generated_code)` pairs. |","| **MBPP-Honeypot / Obfuscation Atlas** (arXiv:2602.15515) | No static completion dump found on HuggingFace (`ethz-spylab/mbpp-honeypot` does not exist). Env/training code only — no releasable artifact verified. |","| **EvilGenie** (Gabor et al.) | Live execution harness; no static `(original, hacked)` pair dump released. To use: generate rollouts with the harness, export as labeled pairs, write a custom loader. |","","---","","## Future Work","","Named extensions, not yet implemented:","","| Extension | Motivation | Dataset to validate on |","|---|---|---|","| **Diff-aware pair scan** (`scan(old_string, new_string)` per Edit call) | TRACE hacks live in the delta: complexity collapse and hardcoding signals become visible only when old and new are compared directly. Standalone scan on the final snapshot misses these. | TRACE (517 trajectories) |","| **Literal density / context-aware Check 1** | Raw literal count over-fires on data-processing scripts. Density per line, or gating on co-occurrence with input-independence, would reduce false positives without affecting detection on function-level code. | MBPP / SORH (regression) |","| **Branch-aware Check 5** | Modular-arithmetic dispatch tables (`(year-2000)%12 == k`) and planet-lookup lists are not extensional enumeration. A param-keyed condition gate (analogous to Fix C on Check 6) would eliminate the `chinese_zodiac` and `bf` FPs. | MBPP / HumanEval |","| **While-loop taint propagation (Fix A extension)** | Fix A covers for-loops; while-loops with parameter-controlled iteration count (e.g., `cal_sum`) still exhibit the taint gap. | MBPP |","","---","","## Reproducibility","","### Environment","","```","Python: 3.11+","ast-guard commit: f3475ed  (v2.3.0, JS/TS dispatch-table detection)","tree-sitter: required for multilang (pip install ast-guard[multilang])","MALT dataset: metr-evals/malt-public (HuggingFace, public)","```","","### Commands","","```bash","# Install","git clone \u003crepo\u003e ast-guard \u0026\u0026 cd ast-guard","pip install -e \".[multilang]\"","pip install datasets  # required for MBPP and school-of-hacks download","","# Built-in TRACE benchmark","python -m benchmarks.run_benchmark --benchmark trace","","# School of Reward Hacks (pair mode — TP+TN, requires download)","python -m benchmarks.run_benchmark --benchmark school-of-hacks --download","","# MBPP (pair mode — TN FPR baseline, requires download)","python -m benchmarks.run_benchmark --benchmark mbpp --download","","# Countdown-Code benchmark","python -m benchmarks.run_benchmark --benchmark countdown-code","","# MALT benchmark (requires dataset at default path — user-managed; see memory note)","python -m benchmarks.run_benchmark --benchmark malt","","# TRACE eval harness (standalone boundary eval — downloads ~20 MB from HuggingFace)","python -m eval.run --dataset trace --output eval/results/trace --mode strict","","# Full cross-benchmark run with export","python -m benchmarks.run_benchmark --benchmark all --json results.json","```","","### Dataset versions","","| Dataset | Version / Commit |","|---------|-----------------|","| MALT | metr-evals/malt-public, accessed 2026-05-31 |","| TRACE (external) | PatronusAI HuggingFace, accessed 2026-06-22 |","| Countdown-Code | Khan et al. GitHub, main branch, accessed 2026-05-29 |","| School of Reward Hacks | syvb/school-of-reward-hacks-coding-tasks, accessed 2026-06-10 |","| MBPP | google-research-datasets/mbpp, accessed 2026-06-10 |"],"stylingDirectives":[[[0,30,"pl-mh"],[2,30,"pl-en"]],[],[[0,11,"pl-mh"],[3,11,"pl-en"]],[],[],[],[[0,3,"pl-ms"]],[],[[0,22,"pl-mh"],[3,22,"pl-en"]],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[19,20,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[19,20,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[26,27,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[57,58,"pl-ml"]],[[0,1,"pl-ml"],[18,19,"pl-ml"],[70,71,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[82,83,"pl-ml"]],[[0,1,"pl-ml"],[12,13,"pl-ml"],[29,30,"pl-s"],[30,33,"pl-c1"],[33,34,"pl-s"],[79,80,"pl-ml"]],[],[[0,10,"pl-mh"],[4,10,"pl-en"]],[],[[0,1,"pl-ml"],[4,5,"pl-ml"],[11,12,"pl-ml"],[20,21,"pl-ml"],[32,33,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[11,12,"pl-ml"],[20,21,"pl-ml"],[32,33,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[27,28,"pl-ml"],[96,97,"pl-ml"],[119,120,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[26,27,"pl-ml"],[84,85,"pl-ml"],[107,108,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[41,42,"pl-ml"],[115,116,"pl-ml"],[138,139,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[19,20,"pl-ml"],[79,80,"pl-ml"],[102,103,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[30,31,"pl-ml"],[169,170,"pl-ml"],[192,193,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[30,31,"pl-ml"],[100,101,"pl-ml"],[123,124,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[21,22,"pl-ml"],[111,112,"pl-ml"],[120,121,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[26,27,"pl-ml"],[109,110,"pl-ml"],[118,119,"pl-ml"]],[],[[0,36,"pl-mh"],[4,36,"pl-en"]],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[17,18,"pl-ml"],[24,25,"pl-ml"],[37,38,"pl-ml"],[50,51,"pl-ml"],[58,59,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[17,18,"pl-ml"],[24,25,"pl-ml"],[37,38,"pl-ml"],[50,51,"pl-ml"],[58,59,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[21,22,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"],[33,34,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[26,27,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[42,43,"pl-ml"],[85,86,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[26,27,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[40,41,"pl-ml"]],[[0,1,"pl-ml"],[19,20,"pl-ml"],[23,24,"pl-ml"],[27,28,"pl-ml"],[31,32,"pl-ml"],[35,36,"pl-ml"],[37,38,"pl-ml"]],[[0,1,"pl-ml"],[48,49,"pl-ml"],[52,53,"pl-ml"],[56,57,"pl-ml"],[60,61,"pl-ml"],[64,65,"pl-ml"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[42,43,"pl-ml"],[46,47,"pl-ml"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[42,43,"pl-ml"],[46,47,"pl-ml"],[64,65,"pl-ml"]],[[0,1,"pl-ml"],[21,22,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"],[33,34,"pl-ml"],[37,38,"pl-ml"],[51,52,"pl-ml"]],[[0,1,"pl-ml"],[26,27,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[42,43,"pl-ml"],[56,57,"pl-ml"]],[],[[0,2,"pl-s"],[32,34,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[11,13,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[9,11,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[28,30,"pl-s"]],[],[[0,3,"pl-ms"]],[],[[0,11,"pl-mh"],[3,11,"pl-en"]],[],[[0,1,"pl-ml"],[10,11,"pl-ml"],[19,20,"pl-ml"],[26,27,"pl-ml"],[36,37,"pl-ml"],[45,46,"pl-ml"],[57,58,"pl-ml"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[19,20,"pl-ml"],[26,27,"pl-ml"],[36,37,"pl-ml"],[45,46,"pl-ml"],[57,58,"pl-ml"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[33,34,"pl-ml"],[80,81,"pl-ml"],[87,88,"pl-ml"],[122,123,"pl-ml"],[132,133,"pl-ml"],[141,142,"pl-ml"],[159,160,"pl-ml"]],[[0,1,"pl-ml"],[19,20,"pl-ml"],[44,45,"pl-ml"],[57,58,"pl-ml"],[93,94,"pl-ml"],[102,103,"pl-ml"],[115,116,"pl-ml"],[133,134,"pl-ml"]],[[0,1,"pl-ml"],[25,26,"pl-ml"],[71,72,"pl-ml"],[78,79,"pl-ml"],[123,124,"pl-ml"],[142,143,"pl-ml"],[156,157,"pl-ml"],[171,172,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[51,52,"pl-ml"],[68,69,"pl-ml"],[97,98,"pl-ml"],[117,118,"pl-ml"],[126,127,"pl-ml"],[134,135,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[38,39,"pl-ml"],[45,46,"pl-ml"],[54,55,"pl-ml"],[63,64,"pl-ml"],[72,73,"pl-ml"],[94,95,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[28,29,"pl-ml"],[41,42,"pl-ml"],[104,105,"pl-ml"],[113,114,"pl-ml"],[128,129,"pl-ml"],[144,146,"pl-c1"],[168,170,"pl-c1"],[195,196,"pl-ml"]],[],[[0,2,"pl-s"],[23,25,"pl-s"],[54,56,"pl-c1"],[81,83,"pl-c1"],[90,92,"pl-c1"],[115,117,"pl-c1"],[152,154,"pl-c1"],[160,162,"pl-c1"],[197,199,"pl-c1"],[204,206,"pl-c1"],[223,225,"pl-c1"],[229,231,"pl-c1"],[253,255,"pl-c1"]],[],[[0,3,"pl-ms"]],[],[[0,20,"pl-mh"],[3,20,"pl-en"]],[],[],[],[[0,32,"pl-mh"],[4,32,"pl-en"]],[],[[0,2,"pl-s"],[236,238,"pl-s"]],[],[],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[43,44,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[23,24,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[23,24,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[26,27,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[16,17,"pl-ml"],[18,20,"pl-s"],[24,26,"pl-s"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[11,13,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[15,17,"pl-s"],[18,19,"pl-ml"],[20,22,"pl-s"],[26,28,"pl-s"],[29,30,"pl-ml"]],[],[],[],[[0,18,"pl-mh"],[4,18,"pl-en"]],[],[],[],[[0,2,"pl-s"],[76,77,"pl-s"],[77,93,"pl-c1"],[93,94,"pl-s"],[157,158,"pl-s"],[158,239,"pl-c1"],[239,240,"pl-s"],[240,242,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[23,24,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[24,25,"pl-ml"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"],[27,29,"pl-s"],[34,36,"pl-s"],[37,38,"pl-ml"]],[],[],[],[[0,38,"pl-mh"],[4,38,"pl-en"]],[],[[8,9,"pl-s"],[9,49,"pl-c1"],[49,50,"pl-s"]],[],[[10,11,"pl-s"],[11,44,"pl-c1"],[44,45,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[38,39,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[9,10,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[9,10,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[16,17,"pl-ml"],[18,20,"pl-s"],[26,28,"pl-s"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[11,13,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[7,9,"pl-s"],[10,11,"pl-ml"],[12,14,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[],[],[],[[0,67,"pl-mh"],[4,67,"pl-en"]],[],[[22,23,"pl-s"],[23,28,"pl-c1"],[28,29,"pl-s"]],[[19,21,"pl-s"],[42,44,"pl-s"]],[],[[0,2,"pl-s"],[45,47,"pl-s"],[48,49,"pl-s"],[49,63,"pl-c1"],[63,64,"pl-s"],[67,68,"pl-s"],[68,83,"pl-c1"],[83,84,"pl-s"],[87,88,"pl-s"],[88,115,"pl-c1"],[115,116,"pl-s"],[149,150,"pl-s"],[150,171,"pl-c1"],[171,172,"pl-s"]],[[0,1,"pl-v"]],[],[[0,1,"pl-v"]],[],[[0,1,"pl-v"]],[[47,48,"pl-s"],[48,50,"pl-c1"],[50,51,"pl-s"]],[[31,32,"pl-s"],[32,55,"pl-c1"],[55,56,"pl-s"]],[[26,27,"pl-s"],[27,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,57,"pl-c1"],[57,58,"pl-s"],[60,61,"pl-s"],[61,75,"pl-c1"],[75,76,"pl-s"]],[],[],[],[],[],[],[],[],[[60,62,"pl-s"],[67,69,"pl-s"]],[],[],[],[],[[0,1,"pl-v"],[24,25,"pl-s"],[25,49,"pl-c1"],[49,50,"pl-s"]],[[0,1,"pl-v"],[25,26,"pl-s"],[26,46,"pl-c1"],[46,47,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[21,22,"pl-s"],[22,59,"pl-c1"],[59,60,"pl-s"]],[],[[0,48,"pl-mh"],[5,48,"pl-en"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[7,9,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[16,17,"pl-ml"],[18,20,"pl-s"],[25,27,"pl-s"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[11,13,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[],[],[],[[0,68,"pl-mh"],[5,68,"pl-en"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[9,10,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[7,9,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[10,11,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[9,10,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[16,17,"pl-ml"],[18,20,"pl-s"],[25,27,"pl-s"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[6,8,"pl-s"],[9,10,"pl-ml"],[11,13,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[15,17,"pl-s"],[22,24,"pl-s"],[25,26,"pl-ml"]],[],[[0,55,"pl-mh"],[5,55,"pl-en"]],[],[[0,1,"pl-ml"],[6,7,"pl-ml"],[14,15,"pl-ml"],[24,25,"pl-ml"],[48,49,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[14,15,"pl-ml"],[24,25,"pl-ml"],[47,48,"pl-ml"]],[[0,1,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"],[57,58,"pl-s"],[58,72,"pl-c1"],[72,73,"pl-s"],[83,84,"pl-ml"],[140,141,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[21,22,"pl-ml"],[23,24,"pl-s"],[24,58,"pl-c1"],[58,59,"pl-s"],[64,65,"pl-s"],[65,75,"pl-c1"],[75,76,"pl-s"],[83,84,"pl-ml"],[126,127,"pl-ml"]],[],[],[[20,21,"pl-s"],[21,48,"pl-c1"],[48,49,"pl-s"]],[],[],[[0,74,"pl-mh"],[4,74,"pl-en"]],[],[],[[22,23,"pl-s"],[23,60,"pl-c1"],[60,61,"pl-s"]],[],[[0,1,"pl-ml"],[10,11,"pl-ml"],[14,15,"pl-ml"],[29,30,"pl-ml"],[41,42,"pl-ml"],[56,57,"pl-ml"],[68,69,"pl-ml"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[14,15,"pl-ml"],[28,29,"pl-ml"],[40,41,"pl-ml"],[54,55,"pl-ml"],[66,67,"pl-ml"],[70,71,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[13,14,"pl-ml"],[17,18,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"],[31,33,"pl-s"],[38,40,"pl-s"],[41,42,"pl-ml"],[46,47,"pl-ml"]],[[0,1,"pl-ml"],[12,13,"pl-ml"],[18,19,"pl-ml"],[22,23,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[36,38,"pl-s"],[43,45,"pl-s"],[46,47,"pl-ml"],[50,51,"pl-ml"]],[],[],[],[],[],[[0,57,"pl-mh"],[5,57,"pl-en"]],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[16,17,"pl-ml"],[30,31,"pl-ml"],[43,44,"pl-ml"],[53,54,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[16,17,"pl-ml"],[30,31,"pl-ml"],[43,44,"pl-ml"],[53,54,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[8,9,"pl-s"],[9,19,"pl-c1"],[19,20,"pl-s"],[21,22,"pl-ml"],[33,34,"pl-s"],[34,59,"pl-c1"],[59,60,"pl-s"],[61,62,"pl-ml"],[85,86,"pl-s"],[86,89,"pl-c1"],[89,90,"pl-s"],[223,224,"pl-s"],[224,232,"pl-c1"],[232,233,"pl-s"],[256,257,"pl-s"],[257,267,"pl-c1"],[267,268,"pl-s"],[301,302,"pl-s"],[302,305,"pl-c1"],[305,306,"pl-s"],[334,335,"pl-ml"],[397,398,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[8,9,"pl-s"],[9,32,"pl-c1"],[32,33,"pl-s"],[34,35,"pl-ml"],[46,47,"pl-s"],[47,72,"pl-c1"],[72,73,"pl-s"],[74,75,"pl-ml"],[97,98,"pl-s"],[98,125,"pl-c1"],[125,126,"pl-s"],[188,189,"pl-s"],[189,208,"pl-c1"],[208,209,"pl-s"],[255,256,"pl-s"],[256,257,"pl-c1"],[257,258,"pl-s"],[320,321,"pl-ml"],[391,392,"pl-ml"]],[[0,1,"pl-ml"],[6,7,"pl-ml"],[8,9,"pl-s"],[9,29,"pl-c1"],[29,30,"pl-s"],[31,32,"pl-ml"],[67,68,"pl-ml"],[96,97,"pl-s"],[97,101,"pl-c1"],[101,102,"pl-s"],[114,115,"pl-s"],[115,134,"pl-c1"],[134,135,"pl-s"],[170,172,"pl-s"],[175,177,"pl-s"],[230,231,"pl-ml"],[326,327,"pl-ml"]],[],[[0,2,"pl-s"],[34,36,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[35,36,"pl-s"],[36,45,"pl-c1"],[45,46,"pl-s"],[94,95,"pl-s"],[95,96,"pl-c1"],[96,97,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[65,66,"pl-s"],[66,85,"pl-c1"],[85,86,"pl-s"]],[],[[0,62,"pl-mh"],[5,62,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[5,6,"pl-ml"],[16,17,"pl-ml"],[30,31,"pl-ml"],[43,44,"pl-ml"],[53,54,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[16,17,"pl-ml"],[30,31,"pl-ml"],[43,44,"pl-ml"],[53,54,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[10,11,"pl-s"],[11,15,"pl-c1"],[15,16,"pl-s"],[17,18,"pl-ml"],[29,30,"pl-s"],[30,55,"pl-c1"],[55,56,"pl-s"],[57,58,"pl-ml"],[103,104,"pl-s"],[104,129,"pl-c1"],[129,130,"pl-s"],[178,179,"pl-ml"],[220,221,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[10,11,"pl-s"],[11,28,"pl-c1"],[28,29,"pl-s"],[30,31,"pl-ml"],[42,43,"pl-s"],[43,63,"pl-c1"],[63,64,"pl-s"],[65,66,"pl-ml"],[97,98,"pl-s"],[98,106,"pl-c1"],[106,107,"pl-s"],[121,122,"pl-s"],[122,142,"pl-c1"],[142,143,"pl-s"],[168,169,"pl-ml"],[202,203,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[11,12,"pl-s"],[12,20,"pl-c1"],[20,21,"pl-s"],[22,23,"pl-ml"],[45,46,"pl-ml"],[47,48,"pl-s"],[48,59,"pl-c1"],[59,60,"pl-s"],[170,171,"pl-s"],[171,180,"pl-c1"],[180,181,"pl-s"],[189,190,"pl-ml"],[245,246,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[11,12,"pl-s"],[12,21,"pl-c1"],[21,22,"pl-s"],[23,24,"pl-ml"],[35,36,"pl-s"],[36,56,"pl-c1"],[56,57,"pl-s"],[58,59,"pl-ml"],[65,66,"pl-s"],[66,74,"pl-c1"],[74,75,"pl-s"],[99,100,"pl-s"],[100,120,"pl-c1"],[120,121,"pl-s"],[156,157,"pl-ml"],[194,195,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[11,12,"pl-s"],[12,24,"pl-c1"],[24,25,"pl-s"],[26,27,"pl-ml"],[38,39,"pl-s"],[39,59,"pl-c1"],[59,60,"pl-s"],[61,62,"pl-ml"],[112,113,"pl-s"],[113,133,"pl-c1"],[133,134,"pl-s"],[159,160,"pl-ml"],[187,188,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[11,12,"pl-s"],[12,14,"pl-c1"],[14,15,"pl-s"],[16,17,"pl-ml"],[28,29,"pl-s"],[29,49,"pl-c1"],[49,50,"pl-s"],[51,52,"pl-ml"],[140,141,"pl-s"],[141,161,"pl-c1"],[161,162,"pl-s"],[164,165,"pl-ml"],[250,251,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[11,12,"pl-s"],[12,22,"pl-c1"],[22,23,"pl-s"],[24,25,"pl-ml"],[55,56,"pl-s"],[56,68,"pl-c1"],[68,69,"pl-s"],[70,71,"pl-ml"],[84,85,"pl-s"],[85,91,"pl-c1"],[91,92,"pl-s"],[163,164,"pl-s"],[164,168,"pl-c1"],[168,169,"pl-s"],[304,305,"pl-s"],[305,309,"pl-c1"],[309,310,"pl-s"],[312,313,"pl-ml"],[326,327,"pl-s"],[327,331,"pl-c1"],[331,332,"pl-s"],[363,364,"pl-ml"]],[],[[0,2,"pl-s"],[34,36,"pl-s"]],[[0,1,"pl-v"],[9,10,"pl-s"],[10,12,"pl-c1"],[12,13,"pl-s"],[204,205,"pl-s"],[205,209,"pl-c1"],[209,210,"pl-s"],[213,214,"pl-s"],[214,231,"pl-c1"],[231,232,"pl-s"],[245,246,"pl-s"],[246,272,"pl-c1"],[272,273,"pl-s"]],[[0,1,"pl-v"],[9,10,"pl-s"],[10,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,28,"pl-c1"],[28,29,"pl-s"],[93,94,"pl-s"],[94,98,"pl-c1"],[98,99,"pl-s"]],[],[[0,38,"pl-mh"],[4,38,"pl-en"]],[],[[8,9,"pl-s"],[9,38,"pl-c1"],[38,39,"pl-s"]],[],[[10,11,"pl-s"],[11,44,"pl-c1"],[44,45,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[9,10,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[7,9,"pl-s"],[10,11,"pl-ml"],[12,14,"pl-s"],[18,20,"pl-s"],[21,22,"pl-ml"]],[],[[30,31,"pl-s"],[31,45,"pl-c1"],[45,46,"pl-s"],[72,73,"pl-s"],[73,77,"pl-c1"],[77,78,"pl-s"]],[],[[0,74,"pl-mh"],[4,74,"pl-en"]],[],[[0,1,"pl-s"],[19,20,"pl-s"],[20,48,"pl-c1"],[48,49,"pl-s"],[61,62,"pl-s"],[62,84,"pl-c1"],[84,85,"pl-s"],[103,104,"pl-s"]],[],[[0,2,"pl-s"],[64,66,"pl-s"],[115,116,"pl-s"],[116,130,"pl-c1"],[130,131,"pl-s"],[135,136,"pl-s"],[136,152,"pl-c1"],[152,153,"pl-s"],[165,166,"pl-s"],[166,194,"pl-c1"],[194,195,"pl-s"],[201,202,"pl-s"],[202,213,"pl-c1"],[213,214,"pl-s"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[[41,42,"pl-s"],[42,54,"pl-c1"],[54,55,"pl-s"],[63,64,"pl-s"],[64,69,"pl-c1"],[69,70,"pl-s"],[93,94,"pl-s"],[94,98,"pl-c1"],[98,99,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[13,14,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[8,9,"pl-ml"],[12,13,"pl-ml"]],[[0,1,"pl-ml"],[38,39,"pl-ml"],[43,44,"pl-ml"],[51,52,"pl-ml"]],[[0,1,"pl-ml"],[42,43,"pl-ml"],[48,49,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-s"],[31,41,"pl-c1"],[41,42,"pl-s"],[54,55,"pl-ml"],[60,61,"pl-ml"],[68,69,"pl-ml"]],[[0,1,"pl-ml"],[52,53,"pl-ml"],[56,57,"pl-ml"],[63,64,"pl-ml"]],[],[[0,2,"pl-s"],[73,75,"pl-s"],[104,105,"pl-s"],[105,115,"pl-c1"],[115,116,"pl-s"]],[],[[0,59,"pl-mh"],[5,59,"pl-en"]],[],[],[],[[0,2,"pl-s"],[53,55,"pl-s"]],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[18,19,"pl-ml"],[28,29,"pl-ml"],[33,34,"pl-ml"],[42,43,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[8,9,"pl-ml"],[12,13,"pl-ml"],[16,17,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[27,28,"pl-ml"],[35,36,"pl-ml"],[40,41,"pl-ml"],[44,45,"pl-ml"],[46,48,"pl-s"],[53,55,"pl-s"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[26,27,"pl-ml"],[34,35,"pl-ml"],[39,40,"pl-ml"],[43,44,"pl-ml"],[45,47,"pl-s"],[52,54,"pl-s"],[55,56,"pl-ml"]],[[0,1,"pl-ml"],[31,32,"pl-ml"],[39,40,"pl-ml"],[44,45,"pl-ml"],[48,49,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[24,25,"pl-ml"],[32,33,"pl-ml"],[37,38,"pl-ml"],[41,42,"pl-ml"],[49,50,"pl-ml"]],[[0,1,"pl-ml"],[28,29,"pl-ml"],[36,37,"pl-ml"],[41,42,"pl-ml"],[45,46,"pl-ml"],[53,54,"pl-ml"]],[],[],[],[[0,40,"pl-mh"],[5,40,"pl-en"]],[],[[258,259,"pl-s"],[259,275,"pl-c1"],[275,276,"pl-s"]],[],[[0,65,"pl-mh"],[5,65,"pl-en"]],[],[[21,23,"pl-s"],[42,44,"pl-s"]],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[18,19,"pl-ml"],[28,29,"pl-ml"],[37,38,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[8,9,"pl-ml"],[12,13,"pl-ml"],[16,17,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[38,39,"pl-ml"],[43,44,"pl-ml"],[51,52,"pl-ml"],[126,127,"pl-ml"]],[[0,1,"pl-ml"],[21,22,"pl-ml"],[29,30,"pl-ml"],[34,35,"pl-ml"],[42,43,"pl-ml"],[85,86,"pl-ml"]],[[0,1,"pl-ml"],[33,34,"pl-ml"],[41,42,"pl-ml"],[46,47,"pl-ml"],[54,55,"pl-ml"],[111,112,"pl-ml"]],[[0,1,"pl-ml"],[29,30,"pl-ml"],[37,38,"pl-ml"],[42,43,"pl-ml"],[50,51,"pl-ml"],[67,69,"pl-c1"],[115,116,"pl-ml"]],[[0,1,"pl-ml"],[24,25,"pl-ml"],[32,33,"pl-ml"],[37,38,"pl-ml"],[45,46,"pl-ml"],[121,122,"pl-ml"]],[],[],[],[[0,25,"pl-mh"],[5,25,"pl-en"]],[],[[0,2,"pl-s"],[24,26,"pl-s"]],[],[[0,2,"pl-s"],[25,27,"pl-s"],[101,102,"pl-s"],[102,130,"pl-c1"],[130,131,"pl-s"],[262,263,"pl-s"],[263,267,"pl-c1"],[267,268,"pl-s"]],[],[[0,29,"pl-mh"],[5,29,"pl-en"]],[],[[32,34,"pl-s"],[57,59,"pl-s"]],[],[[0,3,"pl-ms"]],[],[[0,50,"pl-mh"],[3,50,"pl-en"]],[],[],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[18,19,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[16,17,"pl-ml"],[31,32,"pl-ml"]],[[0,1,"pl-ml"],[14,15,"pl-ml"],[31,32,"pl-ml"]],[],[[0,57,"pl-mh"],[4,57,"pl-en"]],[],[[23,25,"pl-s"],[29,31,"pl-s"],[40,42,"pl-c1"],[65,67,"pl-c1"],[104,106,"pl-s"],[114,116,"pl-s"]],[],[[0,1,"pl-ml"],[2,3,"pl-ml"],[12,13,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[14,15,"pl-ml"],[22,23,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[8,10,"pl-s"],[19,20,"pl-ml"],[32,33,"pl-ml"],[45,46,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[12,14,"pl-s"],[24,25,"pl-ml"],[37,38,"pl-ml"],[51,52,"pl-ml"]],[],[[0,1,"pl-s"],[94,96,"pl-c1"],[103,105,"pl-c1"],[121,123,"pl-c1"],[127,129,"pl-c1"],[191,192,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[12,13,"pl-ml"],[20,21,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[5,6,"pl-ml"],[13,14,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[32,34,"pl-s"],[39,41,"pl-s"],[42,43,"pl-ml"]],[],[[0,2,"pl-s"],[17,19,"pl-s"]],[],[[0,32,"pl-mh"],[4,32,"pl-en"]],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[18,19,"pl-ml"],[28,29,"pl-ml"],[45,46,"pl-ml"],[66,67,"pl-ml"],[74,75,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[18,19,"pl-ml"],[28,29,"pl-ml"],[44,45,"pl-ml"],[64,65,"pl-ml"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[18,19,"pl-ml"],[26,27,"pl-ml"],[39,40,"pl-ml"],[74,75,"pl-ml"],[98,99,"pl-ml"]],[[0,1,"pl-ml"],[8,10,"pl-c1"],[22,23,"pl-ml"],[30,31,"pl-ml"],[36,37,"pl-ml"],[38,40,"pl-s"],[45,47,"pl-s"],[48,49,"pl-ml"],[84,85,"pl-ml"],[139,140,"pl-ml"]],[[0,1,"pl-ml"],[11,13,"pl-c1"],[22,23,"pl-ml"],[28,29,"pl-ml"],[34,35,"pl-ml"],[36,38,"pl-s"],[43,45,"pl-s"],[46,47,"pl-ml"],[60,61,"pl-ml"],[124,125,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[17,18,"pl-ml"],[22,23,"pl-ml"],[29,30,"pl-ml"],[55,56,"pl-ml"],[87,88,"pl-ml"]],[[0,1,"pl-ml"],[7,9,"pl-c1"],[15,17,"pl-c1"],[23,24,"pl-ml"],[29,30,"pl-ml"],[33,34,"pl-ml"],[40,41,"pl-ml"],[44,45,"pl-ml"],[82,83,"pl-ml"]],[[0,1,"pl-ml"],[9,11,"pl-c1"],[18,20,"pl-c1"],[28,29,"pl-ml"],[34,35,"pl-ml"],[38,39,"pl-ml"],[45,46,"pl-ml"],[49,50,"pl-ml"],[90,91,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[17,18,"pl-ml"],[21,22,"pl-ml"],[28,29,"pl-ml"],[32,33,"pl-ml"],[64,65,"pl-ml"]],[[0,1,"pl-ml"],[11,13,"pl-c1"],[18,20,"pl-c1"],[25,26,"pl-ml"],[30,31,"pl-ml"],[34,35,"pl-ml"],[41,42,"pl-ml"],[45,46,"pl-ml"],[63,64,"pl-ml"]],[[0,1,"pl-ml"],[9,11,"pl-c1"],[15,17,"pl-c1"],[30,31,"pl-ml"],[35,36,"pl-ml"],[39,40,"pl-ml"],[44,45,"pl-ml"],[48,49,"pl-ml"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[7,9,"pl-c1"],[12,13,"pl-ml"],[16,17,"pl-ml"],[20,21,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"],[33,34,"pl-ml"]],[],[[0,49,"pl-mh"],[4,49,"pl-en"],[36,38,"pl-c1"]],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[21,22,"pl-ml"],[32,33,"pl-ml"],[49,50,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[21,22,"pl-ml"],[32,33,"pl-ml"],[48,49,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"],[23,24,"pl-ml"],[25,27,"pl-s"],[32,34,"pl-s"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[13,14,"pl-ml"],[18,19,"pl-ml"],[20,22,"pl-s"],[27,29,"pl-s"],[30,31,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[18,19,"pl-ml"],[22,23,"pl-ml"],[24,26,"pl-s"],[30,32,"pl-s"],[33,34,"pl-ml"]],[],[[0,2,"pl-s"],[33,35,"pl-s"],[325,327,"pl-s"],[349,351,"pl-s"]],[],[[0,26,"pl-mh"],[4,26,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[19,20,"pl-ml"],[34,35,"pl-ml"]],[[0,1,"pl-ml"],[8,9,"pl-ml"],[19,20,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[38,39,"pl-ml"],[46,47,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[25,26,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[19,20,"pl-ml"],[27,28,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[28,29,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[30,31,"pl-ml"],[35,36,"pl-ml"],[42,43,"pl-ml"]],[[0,1,"pl-ml"],[26,27,"pl-ml"],[28,29,"pl-s"],[31,32,"pl-ml"],[33,34,"pl-s"],[37,38,"pl-ml"]],[],[],[],[[0,49,"pl-mh"],[4,49,"pl-en"]],[],[[0,1,"pl-ml"],[10,11,"pl-ml"],[18,19,"pl-ml"],[31,32,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[18,19,"pl-ml"],[31,32,"pl-ml"]],[[0,1,"pl-ml"],[32,33,"pl-ml"],[38,39,"pl-ml"],[98,99,"pl-ml"]],[[0,1,"pl-ml"],[8,10,"pl-c1"],[18,20,"pl-c1"],[36,37,"pl-ml"],[42,43,"pl-ml"],[100,101,"pl-ml"]],[[0,1,"pl-ml"],[9,11,"pl-c1"],[24,25,"pl-ml"],[30,31,"pl-ml"],[79,80,"pl-ml"]],[[0,1,"pl-ml"],[9,11,"pl-c1"],[27,28,"pl-ml"],[33,34,"pl-ml"],[76,77,"pl-ml"]],[[0,1,"pl-ml"],[7,9,"pl-c1"],[27,28,"pl-ml"],[33,34,"pl-ml"],[78,79,"pl-ml"]],[[0,1,"pl-ml"],[6,8,"pl-c1"],[13,15,"pl-c1"],[22,24,"pl-c1"],[35,36,"pl-ml"],[41,42,"pl-ml"],[102,103,"pl-ml"]],[],[],[],[[0,3,"pl-ms"]],[],[[0,54,"pl-mh"],[3,54,"pl-en"]],[],[],[],[],[],[[0,41,"pl-mh"],[4,41,"pl-en"]],[],[],[[29,30,"pl-s"],[30,69,"pl-c1"],[69,70,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[18,19,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[17,18,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[31,32,"pl-ml"]],[[0,1,"pl-ml"],[22,23,"pl-ml"],[30,31,"pl-ml"]],[],[[39,40,"pl-s"],[40,66,"pl-c1"],[66,67,"pl-s"]],[],[],[[0,55,"pl-mh"],[4,55,"pl-en"]],[],[[44,45,"pl-s"],[45,71,"pl-c1"],[71,72,"pl-s"]],[[42,43,"pl-s"],[43,85,"pl-c1"],[85,86,"pl-s"]],[],[[0,1,"pl-ml"],[9,10,"pl-ml"],[25,26,"pl-ml"],[45,46,"pl-ml"],[49,50,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[24,25,"pl-ml"],[44,45,"pl-ml"],[48,49,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[19,20,"pl-ml"],[25,26,"pl-ml"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[10,12,"pl-s"],[13,14,"pl-ml"],[21,22,"pl-ml"],[23,25,"pl-s"],[30,32,"pl-s"],[33,34,"pl-ml"],[35,37,"pl-s"],[43,45,"pl-s"],[46,47,"pl-ml"]],[[0,1,"pl-ml"],[32,33,"pl-ml"],[40,41,"pl-ml"],[42,44,"pl-s"],[49,51,"pl-s"],[52,53,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[32,33,"pl-ml"],[40,41,"pl-ml"],[42,44,"pl-s"],[49,51,"pl-s"],[52,53,"pl-ml"],[56,57,"pl-ml"]],[[0,1,"pl-ml"],[28,29,"pl-ml"],[32,33,"pl-ml"],[34,36,"pl-s"],[37,39,"pl-s"],[40,41,"pl-ml"],[44,45,"pl-ml"]],[],[],[],[],[],[[0,3,"pl-ms"]],[],[[0,37,"pl-mh"],[3,37,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[20,21,"pl-ml"],[30,31,"pl-ml"],[39,40,"pl-ml"],[47,48,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[20,21,"pl-ml"],[30,31,"pl-ml"],[39,40,"pl-ml"],[47,48,"pl-ml"]],[[0,1,"pl-ml"],[25,26,"pl-ml"],[40,41,"pl-ml"],[62,63,"pl-ml"],[79,80,"pl-ml"],[81,82,"pl-s"],[87,88,"pl-ml"]],[[0,1,"pl-ml"],[18,19,"pl-ml"],[37,38,"pl-ml"],[52,53,"pl-ml"],[57,58,"pl-ml"],[65,66,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[30,32,"pl-s"],[33,34,"pl-ml"],[35,37,"pl-s"],[54,56,"pl-s"],[57,58,"pl-ml"],[59,61,"pl-s"],[104,106,"pl-s"],[107,108,"pl-ml"],[109,111,"pl-s"],[113,115,"pl-s"],[116,117,"pl-ml"],[118,120,"pl-s"],[125,127,"pl-s"],[128,129,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[31,33,"pl-s"],[34,35,"pl-ml"],[36,38,"pl-s"],[55,57,"pl-s"],[58,59,"pl-ml"],[60,62,"pl-s"],[75,77,"pl-s"],[78,79,"pl-ml"],[80,82,"pl-s"],[93,95,"pl-s"],[96,97,"pl-ml"],[98,100,"pl-s"],[105,107,"pl-s"],[108,109,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[31,33,"pl-s"],[34,35,"pl-ml"],[36,38,"pl-s"],[55,57,"pl-s"],[58,59,"pl-ml"],[60,62,"pl-s"],[75,77,"pl-s"],[78,79,"pl-ml"],[80,82,"pl-s"],[101,103,"pl-s"],[104,105,"pl-ml"],[106,108,"pl-s"],[113,115,"pl-s"],[116,117,"pl-ml"]],[],[],[],[],[[0,1,"pl-v"],[2,4,"pl-s"],[31,33,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[23,25,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[30,32,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[17,19,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[25,27,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[23,25,"pl-s"]],[],[[0,3,"pl-ms"]],[],[[0,20,"pl-mh"],[3,20,"pl-en"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[43,45,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[39,41,"pl-s"],[217,219,"pl-c1"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[69,71,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[47,49,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[69,71,"pl-s"],[412,414,"pl-s"],[447,449,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[68,70,"pl-s"],[110,111,"pl-s"],[111,134,"pl-c1"],[134,135,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-v"],[3,5,"pl-s"],[41,43,"pl-s"]],[],[[0,3,"pl-ms"]],[],[[0,30,"pl-mh"],[3,30,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[10,11,"pl-ml"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[18,20,"pl-s"],[53,54,"pl-ml"],[81,82,"pl-s"],[82,112,"pl-c1"],[112,113,"pl-s"],[144,145,"pl-s"],[145,152,"pl-c1"],[152,153,"pl-s"],[318,319,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[9,11,"pl-s"],[43,44,"pl-ml"],[102,104,"pl-s"],[138,140,"pl-s"],[166,167,"pl-s"],[167,195,"pl-c1"],[195,196,"pl-s"],[396,397,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[19,21,"pl-s"],[41,42,"pl-ml"],[183,184,"pl-s"],[184,215,"pl-c1"],[215,216,"pl-s"],[224,225,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[37,39,"pl-s"],[59,60,"pl-ml"],[109,110,"pl-s"],[110,135,"pl-c1"],[135,136,"pl-s"],[212,213,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[13,15,"pl-s"],[31,32,"pl-ml"],[67,68,"pl-s"],[68,86,"pl-c1"],[86,87,"pl-s"],[200,201,"pl-ml"]],[],[[0,3,"pl-ms"]],[],[[0,14,"pl-mh"],[3,14,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[12,13,"pl-ml"],[25,26,"pl-ml"],[50,51,"pl-ml"]],[[0,1,"pl-ml"],[4,5,"pl-ml"],[8,9,"pl-ml"],[12,13,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[24,26,"pl-s"],[28,29,"pl-s"],[29,57,"pl-c1"],[57,58,"pl-s"],[74,75,"pl-ml"],[262,263,"pl-ml"],[289,290,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[43,45,"pl-s"],[46,47,"pl-ml"],[256,257,"pl-ml"],[283,284,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[24,26,"pl-s"],[27,28,"pl-ml"],[65,66,"pl-s"],[66,85,"pl-c1"],[85,86,"pl-s"],[226,227,"pl-s"],[227,241,"pl-c1"],[241,242,"pl-s"],[247,248,"pl-s"],[248,250,"pl-c1"],[250,251,"pl-s"],[257,258,"pl-ml"],[276,277,"pl-ml"]],[[0,1,"pl-ml"],[2,4,"pl-s"],[50,52,"pl-s"],[53,54,"pl-ml"],[140,141,"pl-s"],[141,148,"pl-c1"],[148,149,"pl-s"],[180,181,"pl-ml"],[187,188,"pl-ml"]],[],[[0,3,"pl-ms"]],[],[[0,18,"pl-mh"],[3,18,"pl-en"]],[],[[0,15,"pl-mh"],[4,15,"pl-en"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,13,"pl-c1"]],[[0,67,"pl-c1"]],[[0,70,"pl-c1"]],[[0,58,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,9,"pl-c"],[0,1,"pl-c"]],[[10,11,"pl-k"],[15,16,"pl-k"],[27,29,"pl-k"],[30,32,"pl-c1"]],[[15,29,"pl-s"],[15,16,"pl-pds"],[28,29,"pl-pds"]],[[22,70,"pl-c"],[22,23,"pl-c"]],[],[[0,26,"pl-c"],[0,1,"pl-c"]],[],[],[[0,63,"pl-c"],[0,1,"pl-c"]],[],[],[[0,55,"pl-c"],[0,1,"pl-c"]],[],[],[[0,26,"pl-c"],[0,1,"pl-c"]],[],[],[[0,83,"pl-c"],[0,1,"pl-c"]],[],[],[[0,83,"pl-c"],[0,1,"pl-c"]],[],[],[[0,38,"pl-c"],[0,1,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,20,"pl-mh"],[4,20,"pl-en"]],[],[[0,1,"pl-ml"],[10,11,"pl-ml"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[53,54,"pl-ml"]],[[0,1,"pl-ml"],[19,20,"pl-ml"],[65,66,"pl-ml"]],[[0,1,"pl-ml"],[17,18,"pl-ml"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[25,26,"pl-ml"],[89,90,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[60,61,"pl-ml"]]],"colorizedLines":null}},"title":"ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard","appPayload":{},"meta":{"title":"ast-guard/benchmarks/RESULTS.md at main · Nick-is-building/ast-guard"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/Nick-is-building/ast-guard" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/Nick-is-building/ast-guard/tree/main" data-discover="true">ast-guard</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/Nick-is-building/ast-guard/tree/main/benchmarks" data-discover="true">benchmarks</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">RESULTS.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/Nick-is-building/ast-guard/commits/main/benchmarks/RESULTS.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/Nick-is-building/ast-guard/commits/main/benchmarks/RESULTS.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="36.5 KB" style="--truncate-max-width:100%"><span>570 lines (415 loc) · 36.5 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/Nick-is-building/ast-guard/tree/main" data-discover="true">ast-guard</a></li><li class="Breadcrumb-module__listItem__Ib0x_"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><a class="Breadcrumb-module__directoryLink__kQy_t prc-Link-Link-9ZwDx" data-component="Link" href="/Nick-is-building/ast-guard/tree/main/benchmarks" data-discover="true">benchmarks</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">RESULTS.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="36.5 KB" style="--truncate-max-width:100%"><span>570 lines (415 loc) · 36.5 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/Nick-is-building/ast-guard/raw/refs/heads/main/benchmarks/RESULTS.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">ast-guard Evaluation Results</h1><a id="user-content-ast-guard-evaluation-results" class="anchor" aria-label="Permalink: ast-guard Evaluation Results" href="#ast-guard-evaluation-results"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Abstract</h2><a id="user-content-abstract" class="anchor" aria-label="Permalink: Abstract" href="#abstract"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">ast-guard is a deterministic, pre-execution static analyzer for detecting reward hacking in LLM-generated code. It operates on Python (native AST), Bash, JavaScript, and TypeScript (tree-sitter) without external dependencies in its core, producing results in under 50ms per scan. This document reports evaluation results across six datasets: the built-in TRACE-aligned suite (33 hand-written samples), School of Reward Hacks (104 labeled Python pairs), MBPP (974 TN pairs), Countdown-Code (15,894 samples), the METR MALT dataset (81,515 scannable code blocks from 7,179 agent transcripts), and the external PatronusAI TRACE agentic-trajectory dataset (517 trajectories). In pair mode on real external data, ast-guard achieves <strong>98.0% F1 on School of Reward Hacks</strong> (100% precision, 96.2% recall, 0.0% FPR) and <strong>0.1% FPR on MBPP</strong> identity pairs. On the built-in hand-written suite, it achieves 95.7% F1 with 100% precision. In standalone mode on MALT, it achieves 95.0% true-negative rate while detecting 34.5% of bypass_constraints and 46.9% of hardcoded_solution samples. On the external TRACE dataset, standalone scan achieves <strong>21.3% recall on in-scope structural categories</strong> at 30.1% FPR — establishing the boundary between the static-AST primitive and the agentic-delta regime (see §External TRACE Dataset). ast-guard v2.3.0 is designed as a deterministic, zero-cost pre-filter layer complementing ML-based classifiers, not as a standalone replacement.</p>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Evaluation Overview</h2><a id="user-content-evaluation-overview" class="anchor" aria-label="Permalink: Evaluation Overview" href="#evaluation-overview"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Property</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tool</td>
<td>ast-guard v2.3.0</td>
</tr>
<tr>
<td>Approach</td>
<td>Deterministic pre-execution static analysis</td>
</tr>
<tr>
<td>Core dependency</td>
<td>Python standard library only (zero external deps)</td>
</tr>
<tr>
<td>Latency</td>
<td>&lt;50ms per scan</td>
</tr>
<tr>
<td>Modes</td>
<td>Pair Mode (original vs. generated), Standalone Mode (single code block)</td>
</tr>
<tr>
<td>Languages</td>
<td>Python (native <code>ast</code>), Bash, JavaScript/TypeScript (tree-sitter)</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Checks</h3><a id="user-content-checks" class="anchor" aria-label="Permalink: Checks" href="#checks"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Method</th>
<th>Languages</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Hardcoding Detection</td>
<td>If-count / literal-count / long-string growth relative to baseline</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>2</td>
<td>Complexity Collapse</td>
<td>McCabe complexity drop &gt;60% per qualified function name</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>3</td>
<td>Forbidden Calls &amp; Anti-Obfuscation</td>
<td>Diff-based; eval/exec, chr tricks, builtins subscript, constant folding</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>4</td>
<td>Import Drift</td>
<td>CRITICAL on dangerous stdlib modules; WARNING on unknowns</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>5</td>
<td>Extensional Enumeration</td>
<td>if/elif or match/case chains covering &gt;70% of branches with no loops; dispatch-table memorisation (object/Map lookup) for Python, JS, TS</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>6</td>
<td>Behavioral Risk Scoring</td>
<td>Additive score from AST-detectable behavioral patterns (standalone)</td>
<td>Python, Bash, JS, TS</td>
</tr>
<tr>
<td>7</td>
<td>Literal Hijack</td>
<td>Generated function returns only literals regardless of inputs; original was non-trivial</td>
<td>Python</td>
</tr>
<tr>
<td>8</td>
<td>New Constant Bypass</td>
<td>If-branch compares against new specific constant and returns input-independently</td>
<td>Python</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Language-Check Capability Matrix</h3><a id="user-content-language-check-capability-matrix" class="anchor" aria-label="Permalink: Language-Check Capability Matrix" href="#language-check-capability-matrix"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Check</th>
<th>Python</th>
<th>Bash</th>
<th>JavaScript</th>
<th>TypeScript</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>1 — Hardcoding</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td></td>
</tr>
<tr>
<td>2 — Complexity Collapse</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>Inactive in standalone for all languages</td>
</tr>
<tr>
<td>3 — Forbidden Calls</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td></td>
</tr>
<tr>
<td>4 — Import Drift</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td></td>
</tr>
<tr>
<td>5 — Extensional Enumeration (if/elif, switch)</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td></td>
</tr>
<tr>
<td>5 — Dispatch-table sub-rule</td>
<td>✓</td>
<td>—</td>
<td>✓</td>
<td>✓</td>
<td>object/Map memorisation</td>
</tr>
<tr>
<td>6 — Behavioral Risk Scoring</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>✓</td>
<td>Standalone only</td>
</tr>
<tr>
<td>7 — Literal Hijack</td>
<td>✓</td>
<td>—</td>
<td>—</td>
<td>—</td>
<td>Python only</td>
</tr>
<tr>
<td>8 — New Constant Bypass</td>
<td>✓</td>
<td>—</td>
<td>—</td>
<td>—</td>
<td>Python only</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>Validation status by language:</strong></p>
<ul dir="auto">
<li><strong>Python:</strong> All checks validated on public datasets (MALT, SORH, MBPP, Countdown-Code).</li>
<li><strong>Bash:</strong> Checks 1, 3–6 validated on constructed held-out sets only. No independent Bash precision/recall corpus.</li>
<li><strong>JavaScript / TypeScript:</strong> All checks validated on constructed held-out sets only. No independent JS/TS precision/recall corpus. Pair-mode behavior provides a precision anchor; standalone detection rates on real JS/TS agent code have not been measured.</li>
</ul>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Datasets</h2><a id="user-content-datasets" class="anchor" aria-label="Permalink: Datasets" href="#datasets"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Dataset</th>
<th>Source</th>
<th>Mode</th>
<th>Samples</th>
<th>Access</th>
<th>Languages</th>
<th>Labels</th>
</tr>
</thead>
<tbody>
<tr>
<td>TRACE-aligned suite (built-in)</td>
<td>hand-written by author, TRACE category names</td>
<td>pair</td>
<td>33 samples (24 hacked, 9 benign)</td>
<td>Bundled</td>
<td>Python</td>
<td>hacked / benign</td>
</tr>
<tr>
<td>TRACE (external)</td>
<td>PatronusAI HuggingFace</td>
<td>standalone</td>
<td>517 trajectories, 431 extractable</td>
<td>Public</td>
<td>Python, JS</td>
<td>hacked / benign</td>
</tr>
<tr>
<td>School of Reward Hacks</td>
<td>syvb/school-of-reward-hacks-coding-tasks HF</td>
<td>pair</td>
<td>54 Python TP + 54 TN + 26 C++ TP (skipped)</td>
<td>Public CC-BY-4.0</td>
<td>Python, C++</td>
<td>hack / clean</td>
</tr>
<tr>
<td>MBPP</td>
<td>google-research-datasets/mbpp HuggingFace</td>
<td>pair (TN only)</td>
<td>974 honest-vs-honest pairs</td>
<td>Public Apache-2.0</td>
<td>Python</td>
<td>clean</td>
</tr>
<tr>
<td>Countdown-Code</td>
<td>Khan et al. GitHub</td>
<td>pair</td>
<td>15,894</td>
<td>Public</td>
<td>Python</td>
<td>legitimate / hacked</td>
</tr>
<tr>
<td>MALT</td>
<td>METR (HuggingFace)</td>
<td>standalone</td>
<td>81,515 scannable (from 140,726 extracted, 7,179 transcripts)</td>
<td>Public</td>
<td>Python, Bash</td>
<td>normal, bypass_constraints, hardcoded_solution, sabotage, etc.</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>MALT label breakdown:</strong> 77,369 normal · 2,379 bypass_constraints · 731 partial_problem_solving · 429 hardcoded_solution · 197 sabotage · 171 match_weaker_model · 147 refusals · 74 reasoning_about_task · 17 ignores_task_instructions · 1 gives_up</p>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Pair Mode Results</h2><a id="user-content-pair-mode-results" class="anchor" aria-label="Permalink: Pair Mode Results" href="#pair-mode-results"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Pair mode compares original code against LLM-generated code. This is ast-guard's primary intended use case and yields the strongest results because structural changes relative to a baseline are precisely measurable.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Built-in TRACE-Aligned Suite</h3><a id="user-content-built-in-trace-aligned-suite" class="anchor" aria-label="Permalink: Built-in TRACE-Aligned Suite" href="#built-in-trace-aligned-suite"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>Note: these 33 samples are hand-written by the project author using TRACE category names as a guide. They are not drawn from the published TRACE dataset (Deshpande et al. 2026) and do not constitute an independent external evaluation.</strong> Use these results as regression/sanity checks that specific structural patterns fire correctly, not as a claim about real-world TRACE detection rates.</p>
<p dir="auto">The suite covers 15 of 51 TRACE subcategories with structurally detectable patterns. 36 subcategories are semantic (wrong answers, sandbagging, framing manipulations) and are out of scope for static analysis.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Total samples</td>
<td>33 (24 hacked, 9 benign)</td>
</tr>
<tr>
<td>True Positives (TP)</td>
<td>22</td>
</tr>
<tr>
<td>False Positives (FP)</td>
<td>0</td>
</tr>
<tr>
<td>False Negatives (FN)</td>
<td>2</td>
</tr>
<tr>
<td>True Negatives (TN)</td>
<td>9</td>
</tr>
<tr>
<td><strong>Precision</strong></td>
<td><strong>100%</strong></td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td><strong>91.7%</strong></td>
</tr>
<tr>
<td><strong>F1</strong></td>
<td><strong>95.7%</strong></td>
</tr>
<tr>
<td><strong>Specificity</strong></td>
<td><strong>100%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">The 2 false negatives are hacked samples whose pattern falls outside the 15 covered subcategories.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Countdown-Code</h3><a id="user-content-countdown-code" class="anchor" aria-label="Permalink: Countdown-Code" href="#countdown-code"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Countdown-Code contains arithmetic countdown problems. The vast majority of legitimate solutions are 3-line arithmetic functions that correctly pass CLEAN.</p>
<p dir="auto"><strong>Note: numbers recorded in CHANGELOG at v2.1.0. No JSON artifact stored in <code>benchmarks/data/</code> and not re-verified at v2.2.0. To produce a current artifact: <code>python -m benchmarks.run_benchmark --benchmark countdown-code --json results.json</code></strong></p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Total samples</td>
<td>15,894</td>
</tr>
<tr>
<td>Flagged</td>
<td>160 (1.0%)</td>
</tr>
<tr>
<td>— CRITICAL (eval())</td>
<td>129</td>
</tr>
<tr>
<td>— WARNING (hardcoded)</td>
<td>31</td>
</tr>
<tr>
<td><strong>True Negative Rate</strong></td>
<td><strong>99.0%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Context: 99% of samples are legitimate short arithmetic functions. The 160 flagged samples are genuine detections (eval() calls and explicit hardcoding), not false positives.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">School of Reward Hacks (pair mode)</h3><a id="user-content-school-of-reward-hacks-pair-mode" class="anchor" aria-label="Permalink: School of Reward Hacks (pair mode)" href="#school-of-reward-hacks-pair-mode"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Source: <code>syvb/school-of-reward-hacks-coding-tasks</code> (HuggingFace CC-BY-4.0), accessed 2026-06-10.
52 Python TP pairs (original=honest control, generated=hardcoded hack) + 52 Python TN pairs (same-problem identity). 28 skipped: 26 C++ TP (no adapter yet) + 2 invalid Python.
Artifact: <code>benchmarks/data/sorh_results.json</code></p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Labeled pairs</td>
<td>104 (52 TP + 52 TN)</td>
</tr>
<tr>
<td>TP</td>
<td>50</td>
</tr>
<tr>
<td>FP</td>
<td>0</td>
</tr>
<tr>
<td>FN</td>
<td>2</td>
</tr>
<tr>
<td>TN</td>
<td>52</td>
</tr>
<tr>
<td><strong>Precision</strong></td>
<td><strong>100.0%</strong></td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td><strong>96.2%</strong></td>
</tr>
<tr>
<td><strong>F1</strong></td>
<td><strong>98.0%</strong></td>
</tr>
<tr>
<td><strong>FPR</strong></td>
<td><strong>0.0%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">The 2 FN are hardcoded solutions that stayed below Check 1/5 thresholds. The 28 skipped C++ pairs will contribute once a C++ tree-sitter adapter is added.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">School of Reward Hacks (standalone mode — offline eval harness)</h3><a id="user-content-school-of-reward-hacks-standalone-mode--offline-eval-harness" class="anchor" aria-label="Permalink: School of Reward Hacks (standalone mode — offline eval harness)" href="#school-of-reward-hacks-standalone-mode--offline-eval-harness"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Offline eval harness (<code>eval/</code>), deterministic split seed=42, 80% dev / 20% held-out.
Held-out split was <strong>never used for tuning</strong> — reported once, final.</p>
<p dir="auto"><strong>Configuration (Stage 2 — branch-aware fix):</strong> <code>_MIN_RETURNS=3</code> / <code>_MIN_BRANCHES=3</code> / <code>_MIN_INDEPENDENT_RATIO=0.80</code>, plus three structural fixes in <code>ast_guard/dataflow.py</code>:</p>
<ul dir="auto">
<li>Loop-body taint propagation (Fix A): when a for-loop iterator references tainted
names, all variables assigned anywhere in the loop body are also tainted.</li>
<li>Loop-internal return exclusion (Fix B): returns inside a tainted for-loop's body
are excluded from the independence count — whether they execute depends on the loop.</li>
<li>Branch-aware condition gate (Fix C): a literal return is only counted as
input-independent when the nearest enclosing <code>if</code> condition is a direct
param-vs-literal comparison (<code>param == specific_value</code>). Conditions involving
computed intermediates (<code>sqa == sqa + sqb</code>, <code>x % 2 == 0</code>, <code>re.search(...)</code>) are
NOT treated as param-keyed, which eliminates FPs from legitimate validators and
classifiers whose return VALUES happen to be literals.</li>
</ul>
<p dir="auto">Threshold rationale: 3/3 gives identical SORH recall to 2/2, and eliminates two
method-call-taint FPs (functions with exactly 2 returns caught by a taint gap, not
genuine dispatch tables). 5/4 reduces recall to R=0.146 — unacceptable.</p>
<p dir="auto">All fixes verified by 819 unit tests (8 skipped for optional MCP extra). MBPP
standalone FPR (974 reference solutions, no-baseline scan): <strong>0.31%</strong> (3 FPs) under
the current 3/3 thresholds vs. 0.21% under old 5/4 thresholds — the Δ0.10% tradeoff
is the cost of detecting 31 vs. 6 SORH dev hacks.</p>
<p dir="auto">Reproducibility metadata:</p>
<ul dir="auto">
<li>ast-guard commit: see <code>git log -1 --format="%h"</code></li>
<li>SORH dataset revision: <code>2026-06-15T03:11:46Z</code></li>
<li>Split seed: 42, dev_ratio: 0.8, scan mode: strict</li>
<li>MBPP FPR artifact: <code>eval/results/mbpp_precision/report.md</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Dev split (82 records — 41 hack, 41 benign)</h4><a id="user-content-dev-split-82-records--41-hack-41-benign" class="anchor" aria-label="Permalink: Dev split (82 records — 41 hack, 41 benign)" href="#dev-split-82-records--41-hack-41-benign"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Total records</td>
<td>82</td>
</tr>
<tr>
<td>TP</td>
<td>31</td>
</tr>
<tr>
<td>FP</td>
<td><strong>0</strong></td>
</tr>
<tr>
<td>TN</td>
<td>41</td>
</tr>
<tr>
<td>FN</td>
<td>10</td>
</tr>
<tr>
<td><strong>Precision</strong></td>
<td><strong>1.000</strong></td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td><strong>0.756</strong></td>
</tr>
<tr>
<td><strong>F1</strong></td>
<td><strong>0.861</strong></td>
</tr>
<tr>
<td><strong>PR-AUC</strong></td>
<td><strong>0.939</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Pair mode on TP records: TP=40 FP=0 FN=1, F1=0.988, P=1.000, R=0.976.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Held-out split (22 records — 11 hack, 11 benign, measured once)</h4><a id="user-content-held-out-split-22-records--11-hack-11-benign-measured-once" class="anchor" aria-label="Permalink: Held-out split (22 records — 11 hack, 11 benign, measured once)" href="#held-out-split-22-records--11-hack-11-benign-measured-once"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Total records</td>
<td>22</td>
</tr>
<tr>
<td>TP</td>
<td>9</td>
</tr>
<tr>
<td>FP</td>
<td><strong>0</strong></td>
</tr>
<tr>
<td>TN</td>
<td>11</td>
</tr>
<tr>
<td>FN</td>
<td>2</td>
</tr>
<tr>
<td><strong>Precision</strong></td>
<td><strong>1.000</strong></td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td><strong>0.818</strong></td>
</tr>
<tr>
<td><strong>F1</strong></td>
<td><strong>0.900</strong></td>
</tr>
<tr>
<td><strong>PR-AUC</strong></td>
<td><strong>0.955</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Open false-negative gaps (known follow-up signals)</h4><a id="user-content-open-false-negative-gaps-known-follow-up-signals" class="anchor" aria-label="Permalink: Open false-negative gaps (known follow-up signals)" href="#open-false-negative-gaps-known-follow-up-signals"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Gap</th>
<th>Count</th>
<th>Pattern</th>
<th>Next signal candidate</th>
</tr>
</thead>
<tbody>
<tr>
<td>ratio-0.75 passthrough</td>
<td>7</td>
<td>3 pure-literal branches + <code>return lst/s/n</code> fallback</td>
<td>loop-smarter input-independence signal at ratio &lt; 0.80</td>
</tr>
<tr>
<td>ternary chains</td>
<td>3</td>
<td><code>return A if c1 else B if c2 else C</code> — 1 <code>ast.Return</code> total</td>
<td>dedicated IfExp-chain independence check</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Both gap types have structurally sound solutions; neither is addressable by simple
threshold tuning at <code>_MIN_INDEPENDENT_RATIO=0.80</code> without introducing held-out FPs
on benign algorithmic functions (perrin, count_binary_seq, is_valid_ipv4).</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)</h3><a id="user-content-mbpp--humaneval-standalone-precision-stress-test-stage-2-checkpoint" class="anchor" aria-label="Permalink: MBPP + HumanEval Standalone Precision Stress Test (Stage 2 checkpoint)" href="#mbpp--humaneval-standalone-precision-stress-test-stage-2-checkpoint"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Standalone scan of all reference solutions. All-benign: no TPs, only FPR is measured.
Full per-item report: <code>eval/results/mbpp_precision/report.md</code>.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Dataset</th>
<th>n</th>
<th>FP (old 5/4)</th>
<th>FPR (old)</th>
<th>FP (new 3/3)</th>
<th>FPR (new)</th>
<th>Δ</th>
</tr>
</thead>
<tbody>
<tr>
<td>MBPP</td>
<td>974</td>
<td>2</td>
<td>0.21%</td>
<td>3</td>
<td><strong>0.31%</strong></td>
<td>+1</td>
</tr>
<tr>
<td>HumanEval</td>
<td>164</td>
<td>7</td>
<td>4.27%</td>
<td>7</td>
<td><strong>4.27%</strong></td>
<td>0</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">The branch-aware Fix C eliminated 24 of 25 new FPs introduced when thresholds were
lowered from 5/4 to 2/2. HumanEval FPR at 3/3 now equals OLD (5/4) — no precision
cost at all on HumanEval.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Remaining MBPP FPs (3 total) — individual assessment</h4><a id="user-content-remaining-mbpp-fps-3-total--individual-assessment" class="anchor" aria-label="Permalink: Remaining MBPP FPs (3 total) — individual assessment" href="#remaining-mbpp-fps-3-total--individual-assessment"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>ID</th>
<th>Function</th>
<th>Check fired</th>
<th>Root cause</th>
<th>Pattern</th>
</tr>
</thead>
<tbody>
<tr>
<td>448</td>
<td><code>cal_sum(n)</code></td>
<td>check_6 / <code>input_independent_returns</code></td>
<td>While-loop taint gap: <code>sum</code> accumulates in a while-loop whose body assignments are not yet tainted (Fix A covers for-loops only). The 3 base-case returns under <code>n==0/1/2</code> are param-vs-literal; <code>return sum</code> looks input-independent because <code>sum</code> is not in the tainted set.</td>
<td>Recurrence (Perrin-like) with parameter-controlled iteration</td>
</tr>
<tr>
<td>577</td>
<td><code>last_Digit_Factorial(n)</code></td>
<td>check_6 / <code>input_independent_returns</code></td>
<td>Ratio exactly equals <code>_MIN_INDEPENDENT_RATIO=0.80</code>: 4/5 returns are param-keyed literals (0,1,3,4 → 1,n,6,4,0); <code>elif n&lt;=2: return n</code> counts as param-dependent (return value refs <code>n</code>), keeping ratio at threshold. Borderline mathematical table.</td>
<td>Legitimate mathematical table (last digit of n! is always 0 for n≥5)</td>
</tr>
<tr>
<td>950</td>
<td><code>chinese_zodiac(year)</code></td>
<td>check_5 / extensional enumeration</td>
<td>Pre-existing FP. 12-branch <code>elif</code> chain with <code>(year-2000)%12 == k</code> conditions. Branch-aware fix does <strong>not</strong> affect Check 5; this fires on if-count/ratio alone.</td>
<td>Legitimate modular-arithmetic dispatch (12 zodiac signs) — candidate for branch-aware Check 5</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>Next-signal candidates (queued):</strong></p>
<ul dir="auto">
<li><code>cal_sum</code> (448): extend Fix A to <code>ast.While</code> bodies — while-loop iteration count depends on <code>n</code>, so all while-body assignments should be tainted.</li>
<li><code>chinese_zodiac</code> (950): branch-aware Check 5 — conditions like <code>(year-2000)%12 == k</code> use a computed modular expression, not a raw param comparison; a param-keyed gate on Check 5's enumeration check would correctly pass this.</li>
</ul>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Remaining HumanEval FPs (7 total) — individual assessment</h4><a id="user-content-remaining-humaneval-fps-7-total--individual-assessment" class="anchor" aria-label="Permalink: Remaining HumanEval FPs (7 total) — individual assessment" href="#remaining-humaneval-fps-7-total--individual-assessment"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">All 7 were already FPs under the old 5/4 thresholds; the branch-aware fix introduced zero new HumanEval regressions.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>ID</th>
<th>Function</th>
<th>Check fired</th>
<th>Root cause</th>
<th>Pattern</th>
</tr>
</thead>
<tbody>
<tr>
<td>HE/46</td>
<td><code>fib4</code></td>
<td>check_6 / <code>intent_mismatch_recursion</code></td>
<td>Recursive Fibonacci-like function trips the <code>intent_mismatch_recursion</code> behavioral pattern (score 30). Legitimate use.</td>
<td>Recurrence function — not a reward hack</td>
</tr>
<tr>
<td>HE/70</td>
<td><code>strange_sort_list</code></td>
<td>check_6 / <code>intent_mismatch_sort</code></td>
<td>Alternating min/max sort uses <code>sorted()</code> twice. Trips <code>intent_mismatch_sort</code> (score 30). Legitimate.</td>
<td>Algorithmic sorting, not a hack</td>
</tr>
<tr>
<td>HE/115</td>
<td><code>max_fill</code></td>
<td>check_1 / hardcoding</td>
<td><code>import math</code> inside function body plus several integer constants trips the standalone literal-count threshold. Legitimate <code>math.ceil</code> usage.</td>
<td>Legitimate import-inside-function + numeric constants</td>
</tr>
<tr>
<td>HE/126</td>
<td><code>is_sorted</code></td>
<td>check_6 / <code>intent_mismatch_sort</code></td>
<td>Uses <code>sorted()</code> to verify order. Trips <code>intent_mismatch_sort</code> (score 30). Legitimate predicate.</td>
<td>Sorting-based predicate, not a hack</td>
</tr>
<tr>
<td>HE/127</td>
<td><code>intersection</code></td>
<td>check_6 / <code>intent_mismatch_loop</code></td>
<td>Iterates over interval to check primality. Trips <code>intent_mismatch_loop</code> (score 30). Legitimate.</td>
<td>Number-theory computation</td>
</tr>
<tr>
<td>HE/148</td>
<td><code>bf</code></td>
<td>check_6 / <code>intent_mismatch_sort</code></td>
<td>Hardcoded ordered list of 8 planet names used to determine relative position; triggers <code>intent_mismatch_sort</code>.</td>
<td>Domain-knowledge lookup list (8 solar planets) — candidate for branch-aware Check 5</td>
</tr>
<tr>
<td>HE/160</td>
<td><code>do_algebra</code></td>
<td>check_3 CRITICAL + check_6 / <code>eval_dynamic</code></td>
<td>Uses Python <code>eval()</code> legitimately to evaluate a user-supplied algebraic expression string. <code>eval</code> is on the Check 3 forbidden list by design; this is a correct fire on structural grounds — the function cannot be implemented without <code>eval</code>.</td>
<td>Unavoidable <code>eval</code> use — structural FP by design</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>Next-signal candidates (queued):</strong></p>
<ul dir="auto">
<li>HE/148 <code>bf</code>: 8-element planet list is a canonical domain-knowledge constant, not test-case memorisation. A branch-aware Check 5 with a param-keyed condition gate (same logic as Fix C) would distinguish <code>bf()</code>'s <code>if planet in list</code> from actual <code>if n == specific_test_case</code> enumerations.</li>
<li>HE/160 <code>do_algebra</code>: <code>eval</code> use is unavoidable for this task class. An allowlist entry for <code>eval</code> in expressions-evaluator contexts is the correct fix; out of scope for static analysis alone.</li>
</ul>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">MBPP (pair mode — TN FPR baseline)</h3><a id="user-content-mbpp-pair-mode--tn-fpr-baseline" class="anchor" aria-label="Permalink: MBPP (pair mode — TN FPR baseline)" href="#mbpp-pair-mode--tn-fpr-baseline"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Source: <code>google-research-datasets/mbpp</code> (HuggingFace Apache-2.0), accessed 2026-06-10.
974 same-problem identity TN pairs: each MBPP reference solution compared to itself. Measures baseline FPR — an honest solution must never flag against the reference it was derived from.
Artifact: <code>benchmarks/data/mbpp_results.json</code></p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>TN pairs</td>
<td>974</td>
</tr>
<tr>
<td>FP</td>
<td>1</td>
</tr>
<tr>
<td><strong>FPR</strong></td>
<td><strong>0.1%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">The single FP is task_id 950 (<code>chinese_zodiac</code>): a legitimate 12-branch <code>elif</code> chain for the 12 zodiac signs that trips Check 5 (extensional enumeration). This is a known Check 5 edge case — constant-valued dispatch tables that happen to meet the ratio threshold.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result</h3><a id="user-content-external-trace-dataset-patronusai-2026--boundary--negative-result" class="anchor" aria-label="Permalink: External TRACE Dataset (PatronusAI, 2026) — Boundary / Negative Result" href="#external-trace-dataset-patronusai-2026--boundary--negative-result"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><em>Full eval report: <code>eval/results/trace/report.md</code> · Adapter: <code>eval/adapters/trace.py</code> · Commit: 7c52730</em></p>
<p dir="auto"><strong>This section documents a boundary result, not a recall target.</strong> TRACE hacks are 1–2 line delta edits — changing <code>threshold=0.95</code> to <code>threshold=0.0001</code>, replacing <code>assert predicted == expected</code> with <code>assert True</code>, patching a validator to always pass. These deltas are invisible in the final file snapshot: the reconstructed file looks like normal code. Standalone scan on the final state is the wrong primitive for this regime. The numbers below establish that boundary honestly and identify two distinct limits.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Extraction</h4><a id="user-content-extraction" class="anchor" aria-label="Permalink: Extraction" href="#extraction"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Code is embedded as tool calls in a JSON <code>conversation</code> field: <code>Write</code> = full file snapshot, <code>Edit</code> = str_replace diff. No pair-mode baseline exists — standalone only.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Status</th>
<th>n</th>
<th>%</th>
</tr>
</thead>
<tbody>
<tr>
<td>No in-scope files (.py / .js / .sh)</td>
<td>86</td>
<td>16.6%</td>
</tr>
<tr>
<td>Clean (Write baseline, patches applied)</td>
<td>134</td>
<td>25.9%</td>
</tr>
<tr>
<td>Edit-only fragment (largest <code>new_string</code>, no Write)</td>
<td>294</td>
<td>56.9%</td>
</tr>
<tr>
<td>Conflict-fallback (patch failed, partial content)</td>
<td>3</td>
<td>0.6%</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>68% of extractable trajectories use a code fragment, not the full file.</strong> The fragment is the largest <code>new_string</code> from an Edit call — partial context extracted from a diff, not a reconstructed snapshot. This is a structural caveat on all recall figures: the scan target often does not contain the complete hack.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">In-scope Recall — Syntactic Categories (main headline)</h4><a id="user-content-in-scope-recall--syntactic-categories-main-headline" class="anchor" aria-label="Permalink: In-scope Recall — Syntactic Categories (main headline)" href="#in-scope-recall--syntactic-categories-main-headline"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">In-scope categories where structural AST detection is plausible: 1.1.2 (test-infra patching), 1.1.3 (coverage gaming), 1.2.1 (output hardcoding), 1.2.2 (metric fabrication), 1.2.3 (eval-code modification).</p>
<p dir="auto"><strong>Combined in-scope structural recall: 34/160 = 21.3%</strong> (dev split, strict mode)</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Category</th>
<th>Code</th>
<th>n (dev)</th>
<th>TP</th>
<th>Recall</th>
</tr>
</thead>
<tbody>
<tr>
<td>trace-metric-fabrication</td>
<td>1.2.2</td>
<td>18</td>
<td>8</td>
<td><strong>0.444</strong></td>
</tr>
<tr>
<td>trace-output-hardcoding</td>
<td>1.2.1</td>
<td>30</td>
<td>8</td>
<td><strong>0.267</strong></td>
</tr>
<tr>
<td>trace-eval-code-modification</td>
<td>1.2.3</td>
<td>26</td>
<td>5</td>
<td>0.192</td>
</tr>
<tr>
<td>trace-coverage-gaming</td>
<td>1.1.3</td>
<td>38</td>
<td>6</td>
<td>0.158</td>
</tr>
<tr>
<td>trace-test-infra-patching</td>
<td>1.1.2</td>
<td>48</td>
<td>7</td>
<td>0.146</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Global precision = 0.535 (53 TP / 99 flagged). Per-category precision figures are degenerate (all-hack slices, no benign mixed in) and not reported. The real operating-point precision is global.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">False Positive Rate: 46/153 = 30.1%</h4><a id="user-content-false-positive-rate-46153--301" class="anchor" aria-label="Permalink: False Positive Rate: 46/153 = 30.1%" href="#false-positive-rate-46153--301"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Primary driver: Check 1's standalone literal threshold (80) triggers on legitimate data-processing scripts with many format strings, domain constants, and column names. Confirmed FP example: a 296-line CSV transformer with 114 literals (date format strings, <code>VALID_CURRENCIES</code> list, column names) — structurally indistinguishable from hardcoding at raw count. Language FPR: Python 31.9% (44/138); JavaScript 7.1% (1/14). Fix queued — see §Known Limitations.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Out-of-scope Semantic — Boundary Reference (correct abstain)</h4><a id="user-content-out-of-scope-semantic--boundary-reference-correct-abstain" class="anchor" aria-label="Permalink: Out-of-scope Semantic — Boundary Reference (correct abstain)" href="#out-of-scope-semantic--boundary-reference-correct-abstain"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">These categories are <strong>not recall targets.</strong> Low recall confirms correct scope-awareness:</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Category</th>
<th>Code</th>
<th>n (dev)</th>
<th>Recall</th>
<th>Why out-of-scope</th>
</tr>
</thead>
<tbody>
<tr>
<td>trace-test-assertion-bypass</td>
<td>1.1.1</td>
<td>36</td>
<td>0.111</td>
<td>High-frequency case is metrics-dict mutation before assertion — semantic</td>
</tr>
<tr>
<td>trace-side-channel</td>
<td>1.3.2</td>
<td>14</td>
<td>0.143</td>
<td>Out-of-scope action encoded semantically</td>
</tr>
<tr>
<td>trace-environment-manipulation</td>
<td>1.3.1</td>
<td>14</td>
<td>0.214</td>
<td>Bash data/file manipulation — outside Python AST scope</td>
</tr>
<tr>
<td>trace-deceptive-completion</td>
<td>1.4.2</td>
<td>19</td>
<td>0.263</td>
<td>Check 6 process_termination fires incidentally; rest semantic</td>
</tr>
<tr>
<td>trace-scope-violation</td>
<td>1.4.1</td>
<td>16</td>
<td>0.312</td>
<td>Check 6 subprocess/cache fires incidentally; intent violation is semantic</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Catches in 1.4.1/1.4.2 are incidental Check 6 behavioral fires, not structural understanding of the violation.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Two Named Boundaries</h4><a id="user-content-two-named-boundaries" class="anchor" aria-label="Permalink: Two Named Boundaries" href="#two-named-boundaries"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><strong>(a) Category boundary.</strong> Semantic and test-manipulation codes (1.1.1, 1.3.1, 1.3.2, 1.4.1, 1.4.2) are out of scope by definition — they require understanding intent, not reading structure. 11–31% recall (incidental Check 6 fires) is the honest ceiling for purely structural analysis on these categories.</p>
<p dir="auto"><strong>(b) Primitive boundary.</strong> TRACE hacks live in the diff, not the snapshot. The correct primitive is <code>scan(old_string, new_string)</code> per Edit call — pair-mode on each individual edit — which would expose complexity collapse (a function that had logic now returns <code>True</code>) and hardcoding signals (a threshold replaced by a literal). This is a named future-work extension; see §Future Work.</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Core Use Case Unaffected</h4><a id="user-content-core-use-case-unaffected" class="anchor" aria-label="Permalink: Core Use Case Unaffected" href="#core-use-case-unaffected"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">ast-guard's primary use case is <strong>solution-level code gen</strong> (RLVR training loops, code-gen CI): the unit of analysis is a complete function or module, not an agentic diff. That regime is validated on SORH (F1=0.98, FPR=0%) and MBPP (standalone FPR=0.31%). TRACE tests a different scan regime — agentic multi-turn editing of an existing codebase — for which standalone scan of the final state is structurally insufficient. The TRACE result is a boundary map, not a deficiency in the core use case.</p>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Standalone Mode Results (MALT — 81,515 samples)</h2><a id="user-content-standalone-mode-results-malt--81515-samples" class="anchor" aria-label="Permalink: Standalone Mode Results (MALT — 81,515 samples)" href="#standalone-mode-results-malt--81515-samples"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Standalone mode scans a single code block without a baseline. This mode trades precision for applicability — it can analyze any code block from any source without requiring the original. The trade-off is an inherently higher false positive rate because structural "suspicious patterns" cannot be distinguished from legitimate use without context.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Overall</h3><a id="user-content-overall" class="anchor" aria-label="Permalink: Overall" href="#overall"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Total scannable</td>
<td>81,515</td>
</tr>
<tr>
<td>Total flagged</td>
<td>4,944 (6.1%)</td>
</tr>
<tr>
<td>Total clean</td>
<td>76,571 (93.9%)</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Confusion Matrix (binary: structural-hack vs. normal)</h3><a id="user-content-confusion-matrix-binary-structural-hack-vs-normal" class="anchor" aria-label="Permalink: Confusion Matrix (binary: structural-hack vs. normal)" href="#confusion-matrix-binary-structural-hack-vs-normal"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Binary classification: <strong>hack</strong> = bypass_constraints + hardcoded_solution + sabotage (3,005 samples); <strong>non-hack</strong> = all other labels (78,510 samples).</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th></th>
<th>Flagged</th>
<th>Clean</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Hack</strong> (3,005)</td>
<td>TP = 1,036</td>
<td>FN = 1,969</td>
</tr>
<tr>
<td><strong>Non-hack</strong> (78,510)</td>
<td>FP = 3,908</td>
<td>TN = 74,602</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><em>TNR/Specificity measured on normal label only (77,369 samples). Some non-hack labels (partial_problem_solving, ignores_task_instructions) have legitimate reasons to use flagged patterns.</em></p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Precision</td>
<td>21.0%</td>
</tr>
<tr>
<td>Recall</td>
<td>34.5%</td>
</tr>
<tr>
<td>F1</td>
<td>26.1%</td>
</tr>
<tr>
<td>Specificity (TNR on normal)</td>
<td><strong>95.0%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>Interpretation:</strong> The low precision is expected and acceptable — standalone mode is designed as a pre-filter, not a final classifier. The 95.0% specificity means the vast majority of legitimate agent code passes through without triggering a flag. The 34.5% recall covers only structurally detectable hacks; semantic hacks (giving wrong answers, sandbagging) cannot be detected by AST analysis.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Per-Category Detection Rates</h3><a id="user-content-per-category-detection-rates" class="anchor" aria-label="Permalink: Per-Category Detection Rates" href="#per-category-detection-rates"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Label</th>
<th>Samples</th>
<th>Flagged</th>
<th>Detection Rate</th>
<th>Language breakdown</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>normal</td>
<td>77,369</td>
<td>3,888</td>
<td>5.0% (FPR)</td>
<td>99.1% Python, 0.6% Bash, 0.3% JS</td>
<td>Legitimate agent code</td>
</tr>
<tr>
<td>bypass_constraints</td>
<td>2,379</td>
<td>820</td>
<td><strong>34.5%</strong></td>
<td>82.2% Python, 16.4% Bash, 1.3% JS</td>
<td>Structural bypasses; majority of misses are semantic</td>
</tr>
<tr>
<td>hardcoded_solution</td>
<td>429</td>
<td>201</td>
<td><strong>46.9%</strong></td>
<td>100% Python</td>
<td>Module cache manipulation, input-independence, literal counts</td>
</tr>
<tr>
<td>sabotage</td>
<td>197</td>
<td>15</td>
<td>7.6%</td>
<td>91.4% Python, 7.6% Bash</td>
<td>Mixed structural and semantic</td>
</tr>
<tr>
<td>match_weaker_model</td>
<td>171</td>
<td>7</td>
<td>4.1%</td>
<td>—</td>
<td>High literal count; mostly semantic</td>
</tr>
<tr>
<td>partial_problem_solving</td>
<td>731</td>
<td>8</td>
<td>1.1%</td>
<td>—</td>
<td>Threading imports in partial solutions</td>
</tr>
<tr>
<td>refusals</td>
<td>147</td>
<td>3</td>
<td>2.0%</td>
<td>—</td>
<td>subprocess in refusal context</td>
</tr>
<tr>
<td>reasoning_about_task</td>
<td>74</td>
<td>2</td>
<td>2.7%</td>
<td>—</td>
<td>Unknown imports</td>
</tr>
<tr>
<td>ignores_task_instructions</td>
<td>17</td>
<td>0</td>
<td>0%</td>
<td>—</td>
<td>Too few samples</td>
</tr>
<tr>
<td>gives_up</td>
<td>1</td>
<td>0</td>
<td>0%</td>
<td>—</td>
<td>—</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Per-Language Detection on bypass_constraints</h3><a id="user-content-per-language-detection-on-bypass_constraints" class="anchor" aria-label="Permalink: Per-Language Detection on bypass_constraints" href="#per-language-detection-on-bypass_constraints"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Language</th>
<th>Samples</th>
<th>Detected</th>
<th>Detection Rate</th>
</tr>
</thead>
<tbody>
<tr>
<td>Python</td>
<td>1,956</td>
<td>749</td>
<td><strong>38.3%</strong></td>
</tr>
<tr>
<td>Bash</td>
<td>391</td>
<td>69</td>
<td><strong>17.6%</strong></td>
</tr>
<tr>
<td>JavaScript</td>
<td>32</td>
<td>2</td>
<td><strong>6.2%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto"><strong>Interpretation of language gap:</strong> The lower detection rate for Bash (17.6%) and JavaScript (6.2%) compared to Python (38.3%) reflects the nature of non-Python bypass in MALT, not a deficiency in the adapters. Analysis of missed samples shows 316 of 322 missed Bash bypass samples and 30 of 30 missed JS bypass samples have <strong>zero structural signal</strong> — they are agents that silently fail to complete the task or use semantically incorrect logic rather than structurally detectable hacks (eval chains, import hijacking, complexity collapse). Structural static analysis without a pair-mode baseline has an inherent ceiling here. In pair mode, Check 2 (complexity collapse) and Check 1 (literal growth) would provide additional signal for these cases.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Per-Check Contribution</h3><a id="user-content-per-check-contribution" class="anchor" aria-label="Permalink: Per-Check Contribution" href="#per-check-contribution"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Trigger counts across all 4,944 flagged samples (one sample may trigger multiple checks):</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Check</th>
<th>Triggers</th>
<th>% of Flagged</th>
</tr>
</thead>
<tbody>
<tr>
<td>6 — Behavioral Risk Scoring</td>
<td>2,664</td>
<td>53.9%</td>
</tr>
<tr>
<td>1 — Hardcoding</td>
<td>2,272</td>
<td>46.0%</td>
</tr>
<tr>
<td>4 — Import Drift</td>
<td>1,072</td>
<td>21.7%</td>
</tr>
<tr>
<td>3 — Forbidden Calls</td>
<td>226</td>
<td>4.6%</td>
</tr>
<tr>
<td>5 — Extensional Enumeration</td>
<td>59</td>
<td>1.2%</td>
</tr>
<tr>
<td>2 — Complexity Collapse</td>
<td>~0</td>
<td>~0%</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Note: Check 2 does not fire in standalone mode — there is no baseline complexity to compare against. Check 6 is now the primary detection driver across all three supported languages (Python, Bash, JS).</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Top False Positive Triggers on Normal Samples</h3><a id="user-content-top-false-positive-triggers-on-normal-samples" class="anchor" aria-label="Permalink: Top False Positive Triggers on Normal Samples" href="#top-false-positive-triggers-on-normal-samples"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Finding</th>
<th>Count</th>
<th>Assessment</th>
</tr>
</thead>
<tbody>
<tr>
<td>Forbidden import 'subprocess'</td>
<td>397</td>
<td>Legitimate agent use (shell commands, process management)</td>
</tr>
<tr>
<td>intent_mismatch_computation +30</td>
<td>310</td>
<td>Docstring claims computation; body differs structurally</td>
</tr>
<tr>
<td>environ_mutation +30</td>
<td>256</td>
<td>Setting env vars is normal in agent setup code</td>
</tr>
<tr>
<td>process_termination +70</td>
<td>244</td>
<td>sys.exit() in scripts and error handlers</td>
</tr>
<tr>
<td>stack_introspection +70</td>
<td>224</td>
<td>inspect module in logging and utility code</td>
</tr>
<tr>
<td>file_write_unknown_target +10</td>
<td>454</td>
<td>Unresolvable filename; contributes to aggregate score only</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Bash/JS contribute 6 and 9 normal FPs respectively (negligible: 0.4% of total normal FPs), confirming the new behavioral modules are well-calibrated.</p>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Generator Eval: Checks 7 &amp; 8 (open-mode, pair mode)</h2><a id="user-content-generator-eval-checks-7--8-open-mode-pair-mode" class="anchor" aria-label="Permalink: Generator Eval: Checks 7 &amp; 8 (open-mode, pair mode)" href="#generator-eval-checks-7--8-open-mode-pair-mode"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Pair-mode recall and precision measured on LLM-generated hacks and clean pairs produced
by the built-in generator. Two independent splits reported; neither was used for check
development.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Independent Validation (mbpp-661–700)</h3><a id="user-content-independent-validation-mbpp-661700" class="anchor" aria-label="Permalink: Independent Validation (mbpp-661–700)" href="#independent-validation-mbpp-661700"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">40 seeds × 2 variants (imperative + adversarial) × claude-sonnet-4-6.
Full results and analysis in <code>METHODOLOGY.md § Independent Validation</code>.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<td>Hack pairs</td>
<td>57</td>
</tr>
<tr>
<td>Recall</td>
<td>68.4%</td>
</tr>
<tr>
<td>Precision (easy TN)</td>
<td>100.0%</td>
</tr>
<tr>
<td>Precision (hard TN)</td>
<td>89.7%</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">Note: these numbers were recorded with <code>_ORIG_COMPLEXITY_FLOOR = 2</code>. The floor was
subsequently lowered to 1 after the floor-lowering experiment below.</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Floor-Lowering Experiment (mbpp-741–780, floor = 1)</h3><a id="user-content-floor-lowering-experiment-mbpp-741780-floor--1" class="anchor" aria-label="Permalink: Floor-Lowering Experiment (mbpp-741–780, floor = 1)" href="#floor-lowering-experiment-mbpp-741780-floor--1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">40 seeds × 3 models × 3 variants. Evaluates <code>_ORIG_COMPLEXITY_FLOOR = 1</code> (current).
Full protocol and per-config breakdown in <code>METHODOLOGY.md § Floor-Lowering Experiment</code>.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Metric</th>
<th>floor=2 (old)</th>
<th>floor=1 (current)</th>
<th>Δ</th>
</tr>
</thead>
<tbody>
<tr>
<td>Hack pairs</td>
<td>169</td>
<td>169</td>
<td>—</td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td>0.757</td>
<td><strong>0.864</strong></td>
<td><strong>+0.107</strong></td>
</tr>
<tr>
<td>Precision (easy TN, 40 pairs)</td>
<td>1.000</td>
<td><strong>1.000</strong></td>
<td>0</td>
</tr>
<tr>
<td>Precision (hard TN, 35 pairs)</td>
<td>0.857</td>
<td><strong>0.857</strong></td>
<td>0</td>
</tr>
<tr>
<td>New FPs from floor change</td>
<td>—</td>
<td><strong>0</strong></td>
<td>—</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">The floor lowering from 2 to 1 recovers +10.7 pp recall at zero precision cost on this
fresh, unseen split. The 5 pre-existing hard TN FPs are from Checks 1 and 2, unaffected
by the floor change.</p>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Comparison with Existing Detectors</h2><a id="user-content-comparison-with-existing-detectors" class="anchor" aria-label="Permalink: Comparison with Existing Detectors" href="#comparison-with-existing-detectors"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Direct comparison is limited because each tool covers different categories, uses different methods, and was evaluated on different dataset subsets.</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Detector</th>
<th>Method</th>
<th>Dataset</th>
<th>Metric</th>
<th>Score</th>
</tr>
</thead>
<tbody>
<tr>
<td>GPT-4o (LLM-as-judge)†</td>
<td>LLM-as-judge</td>
<td>TRACE (all 54 cats)</td>
<td>Detection Rate</td>
<td>~63%†</td>
</tr>
<tr>
<td>RewardHackWatch</td>
<td>ML + Regex + AST</td>
<td>MALT (5,391)</td>
<td>F1</td>
<td>89.7%</td>
</tr>
<tr>
<td><strong>ast-guard v2.3.0 Pair Mode</strong></td>
<td><strong>Deterministic AST</strong></td>
<td><strong>built-in TRACE-aligned suite (hand-written)</strong></td>
<td><strong>F1</strong></td>
<td><strong>95.7%</strong></td>
</tr>
<tr>
<td><strong>ast-guard v2.3.0 Standalone</strong></td>
<td><strong>Deterministic AST</strong></td>
<td><strong>MALT (81,515)</strong></td>
<td><strong>Specificity</strong></td>
<td><strong>95.0%</strong></td>
</tr>
<tr>
<td><strong>ast-guard v2.3.0 Standalone</strong></td>
<td><strong>Deterministic AST</strong></td>
<td><strong>MALT (81,515)</strong></td>
<td><strong>Recall (structural)</strong></td>
<td><strong>34.5%</strong></td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">† Approximate figure; no published source. Included as order-of-magnitude context only.</p>
<p dir="auto">Key differentiators:</p>
<ul dir="auto">
<li><strong>Zero cost at inference time</strong> — no LLM calls, no model weights</li>
<li><strong>Fully deterministic</strong> — same input always produces the same output</li>
<li><strong>Zero external dependencies</strong> in core (Python stdlib only)</li>
<li><strong>&lt;50ms latency</strong> — suitable for pre-execution gating</li>
<li><strong>First-class multilang</strong> — Python, Bash, JavaScript, and TypeScript all run the same 6-check pipeline</li>
<li><strong>Complementary layer</strong> — designed to work alongside ML-based detectors, not replace them</li>
</ul>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Known Limitations</h2><a id="user-content-known-limitations" class="anchor" aria-label="Permalink: Known Limitations" href="#known-limitations"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ol dir="auto">
<li>
<p dir="auto"><strong>Standalone precision is low by design.</strong> Without a baseline, structural patterns that are suspicious in context (eval(), subprocess, file writes to test paths) cannot be distinguished from legitimate agent behavior using the same patterns.</p>
</li>
<li>
<p dir="auto"><strong>Semantic hacks are not detectable.</strong> Reward hacking via wrong answers, sandbagging, adversarial framing, or reasoning manipulation leaves no structural AST signature. These account for the majority of MALT bypass_constraints and sabotage samples that are not detected, and nearly all of the non-Python bypass gap.</p>
</li>
<li>
<p dir="auto"><strong>Bash and JavaScript bypass detection ceiling in standalone mode.</strong> In MALT, 316/322 missed Bash bypass samples and 30/30 missed JS bypass samples show zero structural signal. The bypasses are semantically encoded (incorrect behavior, silent failure), not structurally encoded. Pair mode (with original code) would provide additional signal via Check 2 and Check 1.</p>
</li>
<li>
<p dir="auto"><strong>MALT code blocks are trajectory fragments.</strong> Extracted blocks are not standalone programs — they may be mid-function snippets, partial imports, or continuation of earlier code. This affects both detection rates and false positive analysis.</p>
</li>
<li>
<p dir="auto"><strong>Check 1 literal threshold over-fires on data-processing scripts.</strong> The standalone literal threshold (80) is calibrated for function-level code blocks (SORH/MBPP context). Large data-pipeline files legitimately contain 80+ literals (date format strings, column names, domain constants, enum values). This is the primary driver of TRACE's 30.1% FPR and generalizes to any standalone scan of data-heavy files. <strong>Fix queued (Stage 2 calibration):</strong> literal density per line / context-aware gating (e.g., co-occurrence with input-independence signal) rather than raw count. Not tuned on TRACE; fix will be validated on MBPP/SORH first.</p>
</li>
<li>
<p dir="auto"><strong>Standalone scan is the wrong primitive for agentic delta edits.</strong> TRACE-style hacks operate in the diff (<code>old_string → new_string</code>), not the final file state. Standalone scan on the reconstructed snapshot misses the delta signal entirely — 21.3% in-scope recall on TRACE reflects this primitive mismatch, not a tuning deficit. The correct primitive is pair-mode scan per Edit call; see §Future Work.</p>
</li>
<li>
<p dir="auto"><strong>Check 2 inactive in standalone mode.</strong> Complexity collapse requires a baseline to compare against. Without an original code block, Check 2 produces no signal.</p>
</li>
</ol>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Deferred Pair-Mode Datasets</h2><a id="user-content-deferred-pair-mode-datasets" class="anchor" aria-label="Permalink: Deferred Pair-Mode Datasets" href="#deferred-pair-mode-datasets"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The following datasets were evaluated for pair-mode wiring and deferred:</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Dataset</th>
<th>Reason deferred</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Countdown-Code</strong> (Khan et al., arXiv:2603.07084)</td>
<td>Static JSONL dump exists (<code>o4-mini-distillation-16k.jsonl</code>, 16k records) but contains no <code>is_hack</code> label. Classifying which solutions are genuine vs. harness-manipulating requires running the verifier — generating rollouts is out of scope for a static benchmark.</td>
</tr>
<tr>
<td><strong>TRACE</strong> (PatronusAI, arXiv:2601.20103)</td>
<td>Standalone eval completed (see §External TRACE Dataset). <strong>Pair mode on TRACE still deferred:</strong> the correct scan unit is <code>scan(old_string, new_string)</code> per Edit tool call — diff-aware pair mode on individual edits. This exposes complexity collapse and hardcoding signals invisible in the final snapshot. Named future-work extension; see §Future Work.</td>
</tr>
<tr>
<td><strong>Terminal Wrench</strong> (arXiv:2604.17596)</td>
<td>331 environments; baseline and hack expressed as bash terminal trajectories, not static code pairs. Heavy extraction work needed to produce <code>(original_code, generated_code)</code> pairs.</td>
</tr>
<tr>
<td><strong>MBPP-Honeypot / Obfuscation Atlas</strong> (arXiv:2602.15515)</td>
<td>No static completion dump found on HuggingFace (<code>ethz-spylab/mbpp-honeypot</code> does not exist). Env/training code only — no releasable artifact verified.</td>
</tr>
<tr>
<td><strong>EvilGenie</strong> (Gabor et al.)</td>
<td>Live execution harness; no static <code>(original, hacked)</code> pair dump released. To use: generate rollouts with the harness, export as labeled pairs, write a custom loader.</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Future Work</h2><a id="user-content-future-work" class="anchor" aria-label="Permalink: Future Work" href="#future-work"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Named extensions, not yet implemented:</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Extension</th>
<th>Motivation</th>
<th>Dataset to validate on</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Diff-aware pair scan</strong> (<code>scan(old_string, new_string)</code> per Edit call)</td>
<td>TRACE hacks live in the delta: complexity collapse and hardcoding signals become visible only when old and new are compared directly. Standalone scan on the final snapshot misses these.</td>
<td>TRACE (517 trajectories)</td>
</tr>
<tr>
<td><strong>Literal density / context-aware Check 1</strong></td>
<td>Raw literal count over-fires on data-processing scripts. Density per line, or gating on co-occurrence with input-independence, would reduce false positives without affecting detection on function-level code.</td>
<td>MBPP / SORH (regression)</td>
</tr>
<tr>
<td><strong>Branch-aware Check 5</strong></td>
<td>Modular-arithmetic dispatch tables (<code>(year-2000)%12 == k</code>) and planet-lookup lists are not extensional enumeration. A param-keyed condition gate (analogous to Fix C on Check 6) would eliminate the <code>chinese_zodiac</code> and <code>bf</code> FPs.</td>
<td>MBPP / HumanEval</td>
</tr>
<tr>
<td><strong>While-loop taint propagation (Fix A extension)</strong></td>
<td>Fix A covers for-loops; while-loops with parameter-controlled iteration count (e.g., <code>cal_sum</code>) still exhibit the taint gap.</td>
<td>MBPP</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<hr>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Reproducibility</h2><a id="user-content-reproducibility" class="anchor" aria-label="Permalink: Reproducibility" href="#reproducibility"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Environment</h3><a id="user-content-environment" class="anchor" aria-label="Permalink: Environment" href="#environment"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="Python: 3.11+
ast-guard commit: f3475ed  (v2.3.0, JS/TS dispatch-table detection)
tree-sitter: required for multilang (pip install ast-guard[multilang])
MALT dataset: metr-evals/malt-public (HuggingFace, public)"><pre class="notranslate"><code>Python: 3.11+
ast-guard commit: f3475ed  (v2.3.0, JS/TS dispatch-table detection)
tree-sitter: required for multilang (pip install ast-guard[multilang])
MALT dataset: metr-evals/malt-public (HuggingFace, public)
</code></pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Commands</h3><a id="user-content-commands" class="anchor" aria-label="Permalink: Commands" href="#commands"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Install
git clone &lt;repo&gt; ast-guard &amp;&amp; cd ast-guard
pip install -e &quot;.[multilang]&quot;
pip install datasets  # required for MBPP and school-of-hacks download

# Built-in TRACE benchmark
python -m benchmarks.run_benchmark --benchmark trace

# School of Reward Hacks (pair mode — TP+TN, requires download)
python -m benchmarks.run_benchmark --benchmark school-of-hacks --download

# MBPP (pair mode — TN FPR baseline, requires download)
python -m benchmarks.run_benchmark --benchmark mbpp --download

# Countdown-Code benchmark
python -m benchmarks.run_benchmark --benchmark countdown-code

# MALT benchmark (requires dataset at default path — user-managed; see memory note)
python -m benchmarks.run_benchmark --benchmark malt

# TRACE eval harness (standalone boundary eval — downloads ~20 MB from HuggingFace)
python -m eval.run --dataset trace --output eval/results/trace --mode strict

# Full cross-benchmark run with export
python -m benchmarks.run_benchmark --benchmark all --json results.json"><pre><span class="pl-c"><span class="pl-c">#</span> Install</span>
git clone <span class="pl-k">&lt;</span>repo<span class="pl-k">&gt;</span> ast-guard <span class="pl-k">&amp;&amp;</span> <span class="pl-c1">cd</span> ast-guard
pip install -e <span class="pl-s"><span class="pl-pds">"</span>.[multilang]<span class="pl-pds">"</span></span>
pip install datasets  <span class="pl-c"><span class="pl-c">#</span> required for MBPP and school-of-hacks download</span>

<span class="pl-c"><span class="pl-c">#</span> Built-in TRACE benchmark</span>
python -m benchmarks.run_benchmark --benchmark trace

<span class="pl-c"><span class="pl-c">#</span> School of Reward Hacks (pair mode — TP+TN, requires download)</span>
python -m benchmarks.run_benchmark --benchmark school-of-hacks --download

<span class="pl-c"><span class="pl-c">#</span> MBPP (pair mode — TN FPR baseline, requires download)</span>
python -m benchmarks.run_benchmark --benchmark mbpp --download

<span class="pl-c"><span class="pl-c">#</span> Countdown-Code benchmark</span>
python -m benchmarks.run_benchmark --benchmark countdown-code

<span class="pl-c"><span class="pl-c">#</span> MALT benchmark (requires dataset at default path — user-managed; see memory note)</span>
python -m benchmarks.run_benchmark --benchmark malt

<span class="pl-c"><span class="pl-c">#</span> TRACE eval harness (standalone boundary eval — downloads ~20 MB from HuggingFace)</span>
python -m eval.run --dataset trace --output eval/results/trace --mode strict

<span class="pl-c"><span class="pl-c">#</span> Full cross-benchmark run with export</span>
python -m benchmarks.run_benchmark --benchmark all --json results.json</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Dataset versions</h3><a id="user-content-dataset-versions" class="anchor" aria-label="Permalink: Dataset versions" href="#dataset-versions"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>Dataset</th>
<th>Version / Commit</th>
</tr>
</thead>
<tbody>
<tr>
<td>MALT</td>
<td>metr-evals/malt-public, accessed 2026-05-31</td>
</tr>
<tr>
<td>TRACE (external)</td>
<td>PatronusAI HuggingFace, accessed 2026-06-22</td>
</tr>
<tr>
<td>Countdown-Code</td>
<td>Khan et al. GitHub, main branch, accessed 2026-05-29</td>
</tr>
<tr>
<td>School of Reward Hacks</td>
<td>syvb/school-of-reward-hacks-coding-tasks, accessed 2026-06-10</td>
</tr>
<tr>
<td>MBPP</td>
<td>google-research-datasets/mbpp, accessed 2026-06-10</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

