Copy disabled (too large)
Download .txt
Showing preview only (105,901K chars total). Download the full file to get everything.
Repository: Dicklesworthstone/beads_viewer
Branch: main
Commit: 02ec2b741510
Files: 4000
Total size: 348.9 MB
Directory structure:
gitextract_u7xk8btr/
├── .beads/
│ ├── .gitignore
│ ├── README.md
│ ├── correlation_feedback.jsonl
│ ├── feedback.json
│ ├── issues.jsonl
│ ├── metadata.json
│ ├── sync_base.jsonl
│ └── tree-state.json
├── .gitattributes
├── .github/
│ └── workflows/
│ ├── acfs-checksums-dispatch.yml
│ ├── ci.yml
│ ├── flake-update.yml
│ ├── fuzz.yml
│ ├── notify-acfs.yml
│ ├── release-notes.yml
│ └── release.yml
├── .gitignore
├── .goreleaser.yaml
├── .ubsignore
├── AGENTS.md
├── AGENT_FRIENDLINESS_REPORT.md
├── CHANGELOG.md
├── CLEANED_UP_PROMPTS_USED_TO_CREATE_PROJECT.md
├── GOLANG_BEST_PRACTICES.md
├── LICENSE
├── Makefile
├── OPPORTUNITY_MATRIX.md
├── PERFORMANCE_ANALYSIS_ROUND_2.md
├── PERF_OPTIMIZATION_ROUND_1_RESULTS.md
├── PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__GPT.md
├── PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__OPUS.md
├── README.md
├── SKILL.md
├── UPGRADE_LOG.md
├── benchmarks/
│ ├── baseline_20260106_152724.txt
│ ├── baseline_round1_20260109_221659.txt
│ ├── post_pooling_benchmarks.txt
│ └── profile_comparison.txt
├── bv-graph-wasm/
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── src/
│ │ ├── advanced/
│ │ │ └── mod.rs
│ │ ├── algorithms/
│ │ │ ├── articulation.rs
│ │ │ ├── betweenness.rs
│ │ │ ├── coverage.rs
│ │ │ ├── critical_path.rs
│ │ │ ├── cycles.rs
│ │ │ ├── eigenvector.rs
│ │ │ ├── hits.rs
│ │ │ ├── k_paths.rs
│ │ │ ├── kcore.rs
│ │ │ ├── mod.rs
│ │ │ ├── pagerank.rs
│ │ │ ├── parallel_cut.rs
│ │ │ ├── slack.rs
│ │ │ ├── subgraph.rs
│ │ │ ├── topk_set.rs
│ │ │ └── topo.rs
│ │ ├── graph.rs
│ │ ├── lib.rs
│ │ ├── reachability.rs
│ │ ├── subgraph.rs
│ │ └── whatif.rs
│ └── tests/
│ └── golden_test.rs
├── bv_profile
├── bv_test
├── cmd/
│ └── bv/
│ ├── burndown_test.go
│ ├── main.go
│ ├── main_robot_test.go
│ ├── main_test.go
│ ├── profile_test.go
│ ├── robot_registry.go
│ ├── robot_registry_test.go
│ └── search_output.go
├── codecov.yml
├── coverage_report.txt
├── docs/
│ ├── accessor_pattern.md
│ ├── bead-history-feature-plan.md
│ ├── complementary-features-analysis.md
│ ├── labels-view-feature-plan.md
│ ├── performance.md
│ ├── semantic-search-embedding.md
│ └── testing.md
├── flake.nix
├── go.mod
├── go.sum
├── install.ps1
├── install.sh
├── internal/
│ └── datasource/
│ ├── diff.go
│ ├── jsonl.go
│ ├── load.go
│ ├── reader.go
│ ├── reader_test.go
│ ├── select.go
│ ├── source.go
│ ├── source_test.go
│ ├── sqlite.go
│ ├── validate.go
│ └── watch.go
├── pkg/
│ ├── agents/
│ │ ├── blurb.go
│ │ ├── blurb_test.go
│ │ ├── detect.go
│ │ ├── detect_test.go
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── integration_test.go
│ │ ├── prefs.go
│ │ ├── prefs_test.go
│ │ ├── tty_guard.go
│ │ └── tty_guard_test.go
│ ├── analysis/
│ │ ├── advanced_insights.go
│ │ ├── advanced_insights_test.go
│ │ ├── articulation_test.go
│ │ ├── bench_generators_test.go
│ │ ├── bench_pathological_test.go
│ │ ├── bench_realdata_test.go
│ │ ├── bench_test.go
│ │ ├── benchmark_test.go
│ │ ├── betweenness_approx.go
│ │ ├── betweenness_approx_test.go
│ │ ├── buffer_pool_test.go
│ │ ├── cache.go
│ │ ├── cache_extra_test.go
│ │ ├── cache_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── cycle_warnings.go
│ │ ├── cycle_warnings_test.go
│ │ ├── dependency_suggest.go
│ │ ├── dependency_suggest_test.go
│ │ ├── diff.go
│ │ ├── diff_extended_test.go
│ │ ├── diff_test.go
│ │ ├── duplicates.go
│ │ ├── duplicates_test.go
│ │ ├── e2e_startup_test.go
│ │ ├── eta.go
│ │ ├── eta_test.go
│ │ ├── feedback.go
│ │ ├── feedback_test.go
│ │ ├── file_lock_unix.go
│ │ ├── file_lock_windows.go
│ │ ├── golden_test.go
│ │ ├── graph.go
│ │ ├── graph_accessor_benchmark_test.go
│ │ ├── graph_accessor_test.go
│ │ ├── graph_cycles.go
│ │ ├── graph_cycles_test.go
│ │ ├── graph_extra_test.go
│ │ ├── graph_test.go
│ │ ├── insights.go
│ │ ├── insights_signals_test.go
│ │ ├── insights_test.go
│ │ ├── invariance_test.go
│ │ ├── label_health.go
│ │ ├── label_health_test.go
│ │ ├── label_suggest.go
│ │ ├── label_suggest_test.go
│ │ ├── perf_invariants_test.go
│ │ ├── plan.go
│ │ ├── plan_extended_test.go
│ │ ├── plan_test.go
│ │ ├── priority.go
│ │ ├── priority_test.go
│ │ ├── real_data_test.go
│ │ ├── risk.go
│ │ ├── risk_test.go
│ │ ├── sample_integration_test.go
│ │ ├── status_fullstats_test.go
│ │ ├── suggest_all.go
│ │ ├── suggest_all_test.go
│ │ ├── suggestions.go
│ │ ├── suggestions_test.go
│ │ ├── testdata/
│ │ │ └── startup_baseline.json
│ │ ├── triage.go
│ │ ├── triage_context.go
│ │ ├── triage_context_test.go
│ │ ├── triage_test.go
│ │ ├── whatif.go
│ │ └── whatif_test.go
│ ├── baseline/
│ │ ├── baseline.go
│ │ └── baseline_test.go
│ ├── beadscli/
│ │ └── beadscli.go
│ ├── cass/
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── correlation.go
│ │ ├── correlation_test.go
│ │ ├── detector.go
│ │ ├── detector_test.go
│ │ ├── doc.go
│ │ ├── safety_test.go
│ │ ├── search.go
│ │ └── search_test.go
│ ├── correlation/
│ │ ├── beads_files.go
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── causality.go
│ │ ├── causality_test.go
│ │ ├── cocommit.go
│ │ ├── cocommit_test.go
│ │ ├── correlator.go
│ │ ├── correlator_test.go
│ │ ├── explicit.go
│ │ ├── explicit_test.go
│ │ ├── extractor.go
│ │ ├── extractor_test.go
│ │ ├── feedback.go
│ │ ├── file_index.go
│ │ ├── file_index_test.go
│ │ ├── gitlog.go
│ │ ├── gitlog_test.go
│ │ ├── incremental.go
│ │ ├── incremental_test.go
│ │ ├── network.go
│ │ ├── network_test.go
│ │ ├── orphan.go
│ │ ├── orphan_test.go
│ │ ├── related.go
│ │ ├── related_test.go
│ │ ├── reverse.go
│ │ ├── reverse_test.go
│ │ ├── scorer.go
│ │ ├── scorer_test.go
│ │ ├── stream.go
│ │ ├── stream_test.go
│ │ ├── temporal.go
│ │ ├── temporal_path_test.go
│ │ ├── temporal_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── debug/
│ │ ├── debug.go
│ │ └── debug_test.go
│ ├── drift/
│ │ ├── config.go
│ │ ├── drift.go
│ │ ├── drift_test.go
│ │ └── summary_test.go
│ ├── export/
│ │ ├── .wrangler/
│ │ │ └── cache/
│ │ │ ├── pages.json
│ │ │ └── wrangler-account.json
│ │ ├── cloudflare.go
│ │ ├── cloudflare_test.go
│ │ ├── deploy_flow_test.go
│ │ ├── external_tools_test.go
│ │ ├── gh_pages_e2e_test.go
│ │ ├── github.go
│ │ ├── github_test.go
│ │ ├── graph_export.go
│ │ ├── graph_export_test.go
│ │ ├── graph_interactive.go
│ │ ├── graph_interactive_test.go
│ │ ├── graph_render_beautiful.go
│ │ ├── graph_render_beautiful_test.go
│ │ ├── graph_render_golden_test.go
│ │ ├── graph_snapshot.go
│ │ ├── graph_snapshot_bench_test.go
│ │ ├── graph_snapshot_svg_test.go
│ │ ├── graph_snapshot_test.go
│ │ ├── init_and_push_test.go
│ │ ├── integration_test.go
│ │ ├── livereload.go
│ │ ├── livereload_test.go
│ │ ├── main_test.go
│ │ ├── markdown.go
│ │ ├── markdown_test.go
│ │ ├── mermaid_generator.go
│ │ ├── preview.go
│ │ ├── preview_flow_test.go
│ │ ├── preview_test.go
│ │ ├── sqlite_export.go
│ │ ├── sqlite_export_metrics_test.go
│ │ ├── sqlite_export_test.go
│ │ ├── sqlite_schema.go
│ │ ├── sqlite_schema_test.go
│ │ ├── sqlite_types.go
│ │ ├── viewer_assets/
│ │ │ ├── charts.js
│ │ │ ├── coi-serviceworker.js
│ │ │ ├── graph-demo.html
│ │ │ ├── graph.js
│ │ │ ├── hybrid_scorer.js
│ │ │ ├── hybrid_scorer.test.js
│ │ │ ├── index.html
│ │ │ ├── styles.css
│ │ │ ├── vendor/
│ │ │ │ ├── bv_graph.js
│ │ │ │ ├── bv_graph_bg.wasm
│ │ │ │ ├── sql-wasm.js
│ │ │ │ ├── sql-wasm.wasm
│ │ │ │ └── tailwindcss.js
│ │ │ ├── viewer.js
│ │ │ └── wasm_loader.js
│ │ ├── viewer_embed.go
│ │ ├── viewer_embed_test.go
│ │ ├── wasm_scorer/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ └── lib.rs
│ │ │ └── tests/
│ │ │ └── parity_test.rs
│ │ ├── wizard.go
│ │ ├── wizard_flow_test.go
│ │ ├── wizard_prereq_test.go
│ │ └── wizard_test.go
│ ├── hooks/
│ │ ├── config.go
│ │ ├── config_yaml_test.go
│ │ ├── executor.go
│ │ ├── executor_extra_test.go
│ │ ├── executor_test.go
│ │ ├── executor_unix_test.go
│ │ ├── executor_windows_test.go
│ │ ├── loader_extra_test.go
│ │ └── runhooks_test.go
│ ├── instance/
│ │ ├── lock.go
│ │ ├── lock_test.go
│ │ ├── lock_unix.go
│ │ └── lock_windows.go
│ ├── loader/
│ │ ├── benchmark_test.go
│ │ ├── bom_test.go
│ │ ├── fuzz_test.go
│ │ ├── git.go
│ │ ├── git_test.go
│ │ ├── gitignore.go
│ │ ├── gitignore_test.go
│ │ ├── loader.go
│ │ ├── loader_extra_test.go
│ │ ├── loader_test.go
│ │ ├── pool.go
│ │ ├── pool_test.go
│ │ ├── real_data_test.go
│ │ ├── robustness_test.go
│ │ ├── sprint.go
│ │ ├── sprint_test.go
│ │ └── synthetic_test.go
│ ├── metrics/
│ │ ├── cache.go
│ │ ├── metrics_test.go
│ │ └── timing.go
│ ├── model/
│ │ ├── types.go
│ │ └── types_test.go
│ ├── recipe/
│ │ ├── defaults/
│ │ │ └── recipes.yaml
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── search/
│ │ ├── bench_helpers_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── documents.go
│ │ ├── documents_test.go
│ │ ├── embedder.go
│ │ ├── embedder_test.go
│ │ ├── hash_embedder.go
│ │ ├── hash_embedder_test.go
│ │ ├── hybrid_scorer.go
│ │ ├── hybrid_scorer_bench_test.go
│ │ ├── hybrid_scorer_impl.go
│ │ ├── hybrid_scorer_real_test.go
│ │ ├── hybrid_scorer_test.go
│ │ ├── index_sync.go
│ │ ├── index_sync_test.go
│ │ ├── lexical_boost.go
│ │ ├── lexical_boost_test.go
│ │ ├── metrics_cache.go
│ │ ├── metrics_cache_bench_test.go
│ │ ├── metrics_cache_impl.go
│ │ ├── metrics_cache_test.go
│ │ ├── normalizers.go
│ │ ├── normalizers_test.go
│ │ ├── presets.go
│ │ ├── presets_test.go
│ │ ├── query_adjust.go
│ │ ├── query_adjust_test.go
│ │ ├── search_pipeline_real_test.go
│ │ ├── short_query_hybrid_test.go
│ │ ├── vector_index.go
│ │ ├── vector_index_test.go
│ │ ├── weights.go
│ │ └── weights_test.go
│ ├── testutil/
│ │ ├── assertions.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ └── proptest/
│ │ ├── proptest.go
│ │ └── proptest_test.go
│ ├── ui/
│ │ ├── actionable.go
│ │ ├── actionable_test.go
│ │ ├── agent_prompt_modal.go
│ │ ├── agent_prompt_modal_test.go
│ │ ├── attention.go
│ │ ├── attention_test.go
│ │ ├── background_worker.go
│ │ ├── background_worker_test.go
│ │ ├── benchmark_test.go
│ │ ├── board.go
│ │ ├── board_test.go
│ │ ├── capslock.go
│ │ ├── capslock_test.go
│ │ ├── cass_session_modal.go
│ │ ├── cass_session_modal_test.go
│ │ ├── context.go
│ │ ├── context_help.go
│ │ ├── context_help_test.go
│ │ ├── context_test.go
│ │ ├── coverage_extra_test.go
│ │ ├── delegate.go
│ │ ├── delegate_test.go
│ │ ├── flow_matrix.go
│ │ ├── flow_matrix_test.go
│ │ ├── graph.go
│ │ ├── graph_bench_test.go
│ │ ├── graph_golden_test.go
│ │ ├── graph_internal_test.go
│ │ ├── graph_test.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── history.go
│ │ ├── history_selection_test.go
│ │ ├── history_test.go
│ │ ├── insights.go
│ │ ├── insights_test.go
│ │ ├── integration_test.go
│ │ ├── item.go
│ │ ├── item_test.go
│ │ ├── keybindings.go
│ │ ├── keybindings_test.go
│ │ ├── label_dashboard.go
│ │ ├── label_dashboard_test.go
│ │ ├── label_picker.go
│ │ ├── label_picker_test.go
│ │ ├── logic_test.go
│ │ ├── main_test.go
│ │ ├── markdown.go
│ │ ├── markdown_test.go
│ │ ├── model.go
│ │ ├── model_test.go
│ │ ├── recipe_picker.go
│ │ ├── recipe_picker_test.go
│ │ ├── repo_picker.go
│ │ ├── repo_picker_test.go
│ │ ├── semantic_search.go
│ │ ├── semantic_search_test.go
│ │ ├── shortcuts_sidebar.go
│ │ ├── shortcuts_sidebar_test.go
│ │ ├── snapshot.go
│ │ ├── snapshot_test.go
│ │ ├── sprint_view.go
│ │ ├── sprint_view_keys_test.go
│ │ ├── styles.go
│ │ ├── styles_test.go
│ │ ├── theme.go
│ │ ├── theme_test.go
│ │ ├── tree.go
│ │ ├── tree_bench_test.go
│ │ ├── tree_test.go
│ │ ├── triage_preservation_test.go
│ │ ├── truncate_test.go
│ │ ├── tutorial.go
│ │ ├── tutorial_components.go
│ │ ├── tutorial_content.go
│ │ ├── tutorial_progress.go
│ │ ├── tutorial_progress_test.go
│ │ ├── tutorial_test.go
│ │ ├── update_keys_test.go
│ │ ├── update_modal.go
│ │ ├── update_modal_test.go
│ │ ├── update_test.go
│ │ ├── velocity_comparison.go
│ │ ├── velocity_comparison_test.go
│ │ ├── visuals.go
│ │ ├── visuals_test.go
│ │ ├── workspace_filter_test.go
│ │ ├── workspace_repos.go
│ │ └── workspace_repos_test.go
│ ├── updater/
│ │ ├── download_test.go
│ │ ├── fileops_test.go
│ │ ├── helpers_test.go
│ │ ├── integration_test.go
│ │ ├── network_test.go
│ │ ├── updater.go
│ │ └── updater_test.go
│ ├── util/
│ │ └── topk/
│ │ ├── topk.go
│ │ └── topk_test.go
│ ├── version/
│ │ ├── version.go
│ │ └── version_test.go
│ ├── watcher/
│ │ ├── debouncer.go
│ │ ├── fsdetect.go
│ │ ├── fsdetect_darwin.go
│ │ ├── fsdetect_linux.go
│ │ ├── fsdetect_linux_test.go
│ │ ├── fsdetect_other.go
│ │ ├── fsdetect_windows.go
│ │ ├── watcher.go
│ │ └── watcher_test.go
│ ├── workspace/
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ └── xfetch/
│ ├── xfetch.go
│ └── xfetch_test.go
├── screenshots/
│ └── convert_webp.py
├── scripts/
│ ├── benchmark.sh
│ ├── benchmark_compare.sh
│ ├── build_hybrid_wasm.sh
│ ├── capture_baseline.sh
│ ├── coverage.sh
│ ├── e2e_hybrid_search.sh
│ ├── e2e_web_hybrid_scoring.js
│ ├── generate_testdata.go
│ ├── test_buffer_pooling_e2e.sh
│ ├── test_datasource_e2e.sh
│ ├── test_toon_e2e.sh
│ └── verify_isomorphic.sh
├── testdata/
│ ├── expected/
│ │ ├── chain_10_metrics.json
│ │ ├── complex_20_metrics.json
│ │ ├── cycle_5_metrics.json
│ │ ├── diamond_5_metrics.json
│ │ └── star_10_metrics.json
│ ├── golden/
│ │ └── graph_render/
│ │ ├── chain_10.mermaid.golden
│ │ ├── chain_10.svg.golden
│ │ ├── chain_10_ascii.golden
│ │ ├── complex_20.svg.golden
│ │ ├── complex_20_ascii.golden
│ │ ├── diamond_5.mermaid.golden
│ │ ├── diamond_5.svg.golden
│ │ ├── diamond_5_ascii.golden
│ │ ├── star_10.mermaid.golden
│ │ ├── star_10.svg.golden
│ │ └── star_10_ascii.golden
│ └── graphs/
│ ├── chain_10.json
│ ├── complex_20.json
│ ├── cycle_5.json
│ ├── diamond_5.json
│ └── star_10.json
├── tests/
│ ├── e2e/
│ │ ├── README.md
│ │ ├── agents_integration_e2e_test.go
│ │ ├── board_e2e_test.go
│ │ ├── board_swimlane_e2e_test.go
│ │ ├── brief_exports_test.go
│ │ ├── cass_modal_e2e_test.go
│ │ ├── common_test.go
│ │ ├── correlation_e2e_test.go
│ │ ├── cycle_visualization_e2e_test.go
│ │ ├── drift_test.go
│ │ ├── emit_script_test.go
│ │ ├── error_scenarios_e2e_test.go
│ │ ├── export_cloudflare_test.go
│ │ ├── export_graph_topologies_test.go
│ │ ├── export_incremental_test.go
│ │ ├── export_offline_test.go
│ │ ├── export_pages_test.go
│ │ ├── forecast_test.go
│ │ ├── graph_analysis_detailed_e2e_test.go
│ │ ├── graph_export_e2e_test.go
│ │ ├── graph_navigation_e2e_test.go
│ │ ├── harness.sh
│ │ ├── harness_test.sh
│ │ ├── history_timeline_e2e_test.go
│ │ ├── main_test.go
│ │ ├── performance_regression_e2e_test.go
│ │ ├── race_conditions_e2e_test.go
│ │ ├── robot_alerts_test.go
│ │ ├── robot_burndown_scope_test.go
│ │ ├── robot_burndown_test.go
│ │ ├── robot_capacity_test.go
│ │ ├── robot_contract_test.go
│ │ ├── robot_diff_test.go
│ │ ├── robot_graph_test.go
│ │ ├── robot_history_test.go
│ │ ├── robot_matrix_test.go
│ │ ├── robot_search_hybrid_test.go
│ │ ├── robot_search_test.go
│ │ ├── robot_sprint_test.go
│ │ ├── robot_stderr_cleanliness_test.go
│ │ ├── robot_suggest_test.go
│ │ ├── robot_validation_test.go
│ │ ├── search_benchmark_test.go
│ │ ├── triage_detailed_e2e_test.go
│ │ ├── tui_hybrid_search_test.go
│ │ ├── tui_snapshot_test.go
│ │ ├── update_flow_test.go
│ │ ├── wizard_flow_e2e_test.go
│ │ ├── workflow_e2e_test.go
│ │ └── workspace_robot_output_e2e_test.go
│ └── testdata/
│ ├── .gitignore
│ ├── minimal.jsonl
│ ├── real/
│ │ ├── cass.jsonl
│ │ └── srps.jsonl
│ ├── search_hybrid.jsonl
│ └── synthetic_complex.jsonl
└── vendor/
├── git.sr.ht/
│ └── ~sbinet/
│ └── gg/
│ ├── LICENSE.md
│ ├── README.md
│ ├── bezier.go
│ ├── context.go
│ ├── gg.go
│ ├── gradient.go
│ ├── matrix.go
│ ├── path.go
│ ├── pattern.go
│ ├── point.go
│ ├── util.go
│ └── wrap.go
├── github.com/
│ ├── Dicklesworthstone/
│ │ └── toon-go/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── toon.go
│ ├── ajstarks/
│ │ └── svgo/
│ │ ├── LICENSE
│ │ ├── LICENSE-link.txt
│ │ ├── README.markdown
│ │ ├── doc.go
│ │ ├── newsvg
│ │ └── svg.go
│ ├── alecthomas/
│ │ └── chroma/
│ │ └── v2/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .goreleaser.yml
│ │ ├── AGENTS.md
│ │ ├── Bitfile
│ │ ├── COPYING
│ │ ├── Dockerfile
│ │ ├── Justfile
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── coalesce.go
│ │ ├── colour.go
│ │ ├── delegate.go
│ │ ├── doc.go
│ │ ├── emitters.go
│ │ ├── formatter.go
│ │ ├── formatters/
│ │ │ ├── api.go
│ │ │ ├── html/
│ │ │ │ └── html.go
│ │ │ ├── json.go
│ │ │ ├── svg/
│ │ │ │ ├── font_liberation_mono.go
│ │ │ │ └── svg.go
│ │ │ ├── tokens.go
│ │ │ ├── tty_indexed.go
│ │ │ └── tty_truecolour.go
│ │ ├── iterator.go
│ │ ├── lexer.go
│ │ ├── lexers/
│ │ │ ├── README.md
│ │ │ ├── caddyfile.go
│ │ │ ├── cl.go
│ │ │ ├── dns.go
│ │ │ ├── emacs.go
│ │ │ ├── embedded/
│ │ │ │ ├── abap.xml
│ │ │ │ ├── abnf.xml
│ │ │ │ ├── actionscript.xml
│ │ │ │ ├── actionscript_3.xml
│ │ │ │ ├── ada.xml
│ │ │ │ ├── agda.xml
│ │ │ │ ├── al.xml
│ │ │ │ ├── alloy.xml
│ │ │ │ ├── angular2.xml
│ │ │ │ ├── antlr.xml
│ │ │ │ ├── apacheconf.xml
│ │ │ │ ├── apl.xml
│ │ │ │ ├── applescript.xml
│ │ │ │ ├── arangodb_aql.xml
│ │ │ │ ├── arduino.xml
│ │ │ │ ├── armasm.xml
│ │ │ │ ├── atl.xml
│ │ │ │ ├── autohotkey.xml
│ │ │ │ ├── autoit.xml
│ │ │ │ ├── awk.xml
│ │ │ │ ├── ballerina.xml
│ │ │ │ ├── bash.xml
│ │ │ │ ├── bash_session.xml
│ │ │ │ ├── batchfile.xml
│ │ │ │ ├── beef.xml
│ │ │ │ ├── bibtex.xml
│ │ │ │ ├── bicep.xml
│ │ │ │ ├── blitzbasic.xml
│ │ │ │ ├── bnf.xml
│ │ │ │ ├── bqn.xml
│ │ │ │ ├── brainfuck.xml
│ │ │ │ ├── c#.xml
│ │ │ │ ├── c++.xml
│ │ │ │ ├── c.xml
│ │ │ │ ├── c3.xml
│ │ │ │ ├── cap_n_proto.xml
│ │ │ │ ├── cassandra_cql.xml
│ │ │ │ ├── ceylon.xml
│ │ │ │ ├── cfengine3.xml
│ │ │ │ ├── cfstatement.xml
│ │ │ │ ├── chaiscript.xml
│ │ │ │ ├── chapel.xml
│ │ │ │ ├── cheetah.xml
│ │ │ │ ├── clojure.xml
│ │ │ │ ├── cmake.xml
│ │ │ │ ├── cobol.xml
│ │ │ │ ├── coffeescript.xml
│ │ │ │ ├── common_lisp.xml
│ │ │ │ ├── coq.xml
│ │ │ │ ├── core.xml
│ │ │ │ ├── crystal.xml
│ │ │ │ ├── css.xml
│ │ │ │ ├── csv.xml
│ │ │ │ ├── cue.xml
│ │ │ │ ├── cython.xml
│ │ │ │ ├── d.xml
│ │ │ │ ├── dart.xml
│ │ │ │ ├── dax.xml
│ │ │ │ ├── desktop_entry.xml
│ │ │ │ ├── devicetree.xml
│ │ │ │ ├── diff.xml
│ │ │ │ ├── django_jinja.xml
│ │ │ │ ├── dns.xml
│ │ │ │ ├── docker.xml
│ │ │ │ ├── dtd.xml
│ │ │ │ ├── dylan.xml
│ │ │ │ ├── ebnf.xml
│ │ │ │ ├── elixir.xml
│ │ │ │ ├── elm.xml
│ │ │ │ ├── emacslisp.xml
│ │ │ │ ├── erlang.xml
│ │ │ │ ├── factor.xml
│ │ │ │ ├── fennel.xml
│ │ │ │ ├── fish.xml
│ │ │ │ ├── forth.xml
│ │ │ │ ├── fortran.xml
│ │ │ │ ├── fortranfixed.xml
│ │ │ │ ├── fsharp.xml
│ │ │ │ ├── gas.xml
│ │ │ │ ├── gdscript.xml
│ │ │ │ ├── gdscript3.xml
│ │ │ │ ├── gherkin.xml
│ │ │ │ ├── gleam.xml
│ │ │ │ ├── glsl.xml
│ │ │ │ ├── gnuplot.xml
│ │ │ │ ├── go_template.xml
│ │ │ │ ├── graphql.xml
│ │ │ │ ├── groff.xml
│ │ │ │ ├── groovy.xml
│ │ │ │ ├── handlebars.xml
│ │ │ │ ├── hare.xml
│ │ │ │ ├── haskell.xml
│ │ │ │ ├── hcl.xml
│ │ │ │ ├── hexdump.xml
│ │ │ │ ├── hlb.xml
│ │ │ │ ├── hlsl.xml
│ │ │ │ ├── holyc.xml
│ │ │ │ ├── html.xml
│ │ │ │ ├── hy.xml
│ │ │ │ ├── idris.xml
│ │ │ │ ├── igor.xml
│ │ │ │ ├── ini.xml
│ │ │ │ ├── io.xml
│ │ │ │ ├── iscdhcpd.xml
│ │ │ │ ├── j.xml
│ │ │ │ ├── janet.xml
│ │ │ │ ├── java.xml
│ │ │ │ ├── javascript.xml
│ │ │ │ ├── json.xml
│ │ │ │ ├── jsonata.xml
│ │ │ │ ├── jsonnet.xml
│ │ │ │ ├── julia.xml
│ │ │ │ ├── jungle.xml
│ │ │ │ ├── kakoune.xml
│ │ │ │ ├── kdl.xml
│ │ │ │ ├── kotlin.xml
│ │ │ │ ├── lean.xml
│ │ │ │ ├── lighttpd_configuration_file.xml
│ │ │ │ ├── llvm.xml
│ │ │ │ ├── lox.xml
│ │ │ │ ├── lua.xml
│ │ │ │ ├── makefile.xml
│ │ │ │ ├── mako.xml
│ │ │ │ ├── mason.xml
│ │ │ │ ├── materialize_sql_dialect.xml
│ │ │ │ ├── mathematica.xml
│ │ │ │ ├── matlab.xml
│ │ │ │ ├── mcfunction.xml
│ │ │ │ ├── meson.xml
│ │ │ │ ├── metal.xml
│ │ │ │ ├── microcad.xml
│ │ │ │ ├── minizinc.xml
│ │ │ │ ├── mlir.xml
│ │ │ │ ├── modelica.xml
│ │ │ │ ├── modula-2.xml
│ │ │ │ ├── mojo.xml
│ │ │ │ ├── monkeyc.xml
│ │ │ │ ├── moonbit.xml
│ │ │ │ ├── moonscript.xml
│ │ │ │ ├── morrowindscript.xml
│ │ │ │ ├── myghty.xml
│ │ │ │ ├── mysql.xml
│ │ │ │ ├── nasm.xml
│ │ │ │ ├── natural.xml
│ │ │ │ ├── ndisasm.xml
│ │ │ │ ├── newspeak.xml
│ │ │ │ ├── nginx_configuration_file.xml
│ │ │ │ ├── nim.xml
│ │ │ │ ├── nix.xml
│ │ │ │ ├── nsis.xml
│ │ │ │ ├── nu.xml
│ │ │ │ ├── objective-c.xml
│ │ │ │ ├── objectpascal.xml
│ │ │ │ ├── ocaml.xml
│ │ │ │ ├── octave.xml
│ │ │ │ ├── odin.xml
│ │ │ │ ├── onesenterprise.xml
│ │ │ │ ├── openedge_abl.xml
│ │ │ │ ├── openscad.xml
│ │ │ │ ├── org_mode.xml
│ │ │ │ ├── pacmanconf.xml
│ │ │ │ ├── perl.xml
│ │ │ │ ├── php.xml
│ │ │ │ ├── pig.xml
│ │ │ │ ├── pkgconfig.xml
│ │ │ │ ├── pl_pgsql.xml
│ │ │ │ ├── plaintext.xml
│ │ │ │ ├── plutus_core.xml
│ │ │ │ ├── pony.xml
│ │ │ │ ├── postgresql_sql_dialect.xml
│ │ │ │ ├── postscript.xml
│ │ │ │ ├── povray.xml
│ │ │ │ ├── powerquery.xml
│ │ │ │ ├── powershell.xml
│ │ │ │ ├── prolog.xml
│ │ │ │ ├── promela.xml
│ │ │ │ ├── promql.xml
│ │ │ │ ├── properties.xml
│ │ │ │ ├── protocol_buffer.xml
│ │ │ │ ├── prql.xml
│ │ │ │ ├── psl.xml
│ │ │ │ ├── puppet.xml
│ │ │ │ ├── python.xml
│ │ │ │ ├── python_2.xml
│ │ │ │ ├── qbasic.xml
│ │ │ │ ├── qml.xml
│ │ │ │ ├── r.xml
│ │ │ │ ├── racket.xml
│ │ │ │ ├── ragel.xml
│ │ │ │ ├── react.xml
│ │ │ │ ├── reasonml.xml
│ │ │ │ ├── reg.xml
│ │ │ │ ├── rego.xml
│ │ │ │ ├── rexx.xml
│ │ │ │ ├── rgbasm.xml
│ │ │ │ ├── ring.xml
│ │ │ │ ├── rpgle.xml
│ │ │ │ ├── rpm_spec.xml
│ │ │ │ ├── ruby.xml
│ │ │ │ ├── rust.xml
│ │ │ │ ├── sas.xml
│ │ │ │ ├── sass.xml
│ │ │ │ ├── scala.xml
│ │ │ │ ├── scheme.xml
│ │ │ │ ├── scilab.xml
│ │ │ │ ├── scss.xml
│ │ │ │ ├── sed.xml
│ │ │ │ ├── sieve.xml
│ │ │ │ ├── smali.xml
│ │ │ │ ├── smalltalk.xml
│ │ │ │ ├── smarty.xml
│ │ │ │ ├── snbt.xml
│ │ │ │ ├── snobol.xml
│ │ │ │ ├── solidity.xml
│ │ │ │ ├── sourcepawn.xml
│ │ │ │ ├── sparql.xml
│ │ │ │ ├── sql.xml
│ │ │ │ ├── squidconf.xml
│ │ │ │ ├── standard_ml.xml
│ │ │ │ ├── stas.xml
│ │ │ │ ├── stylus.xml
│ │ │ │ ├── swift.xml
│ │ │ │ ├── systemd.xml
│ │ │ │ ├── systemverilog.xml
│ │ │ │ ├── tablegen.xml
│ │ │ │ ├── tal.xml
│ │ │ │ ├── tasm.xml
│ │ │ │ ├── tcl.xml
│ │ │ │ ├── tcsh.xml
│ │ │ │ ├── termcap.xml
│ │ │ │ ├── terminfo.xml
│ │ │ │ ├── terraform.xml
│ │ │ │ ├── tex.xml
│ │ │ │ ├── thrift.xml
│ │ │ │ ├── toml.xml
│ │ │ │ ├── tradingview.xml
│ │ │ │ ├── transact-sql.xml
│ │ │ │ ├── turing.xml
│ │ │ │ ├── turtle.xml
│ │ │ │ ├── twig.xml
│ │ │ │ ├── txtpb.xml
│ │ │ │ ├── typescript.xml
│ │ │ │ ├── typoscript.xml
│ │ │ │ ├── typoscriptcssdata.xml
│ │ │ │ ├── typoscripthtmldata.xml
│ │ │ │ ├── typst.xml
│ │ │ │ ├── ucode.xml
│ │ │ │ ├── v.xml
│ │ │ │ ├── v_shell.xml
│ │ │ │ ├── vala.xml
│ │ │ │ ├── vb_net.xml
│ │ │ │ ├── verilog.xml
│ │ │ │ ├── vhdl.xml
│ │ │ │ ├── vhs.xml
│ │ │ │ ├── viml.xml
│ │ │ │ ├── vue.xml
│ │ │ │ ├── wat.xml
│ │ │ │ ├── wdte.xml
│ │ │ │ ├── webgpu_shading_language.xml
│ │ │ │ ├── webvtt.xml
│ │ │ │ ├── whiley.xml
│ │ │ │ ├── xml.xml
│ │ │ │ ├── xorg.xml
│ │ │ │ ├── yaml.xml
│ │ │ │ ├── yang.xml
│ │ │ │ ├── z80_assembly.xml
│ │ │ │ ├── zed.xml
│ │ │ │ └── zig.xml
│ │ │ ├── gemtext.go
│ │ │ ├── genshi.go
│ │ │ ├── go.go
│ │ │ ├── haxe.go
│ │ │ ├── html.go
│ │ │ ├── http.go
│ │ │ ├── lexers.go
│ │ │ ├── markdown.go
│ │ │ ├── markless.go
│ │ │ ├── mysql.go
│ │ │ ├── php.go
│ │ │ ├── raku.go
│ │ │ ├── rst.go
│ │ │ ├── svelte.go
│ │ │ ├── typoscript.go
│ │ │ └── zed.go
│ │ ├── mutators.go
│ │ ├── pygments-lexers.txt
│ │ ├── quick/
│ │ │ └── quick.go
│ │ ├── regexp.go
│ │ ├── registry.go
│ │ ├── remap.go
│ │ ├── renovate.json5
│ │ ├── serialise.go
│ │ ├── style.go
│ │ ├── styles/
│ │ │ ├── abap.xml
│ │ │ ├── algol.xml
│ │ │ ├── algol_nu.xml
│ │ │ ├── api.go
│ │ │ ├── arduino.xml
│ │ │ ├── ashen.xml
│ │ │ ├── aura-theme-dark-soft.xml
│ │ │ ├── aura-theme-dark.xml
│ │ │ ├── autumn.xml
│ │ │ ├── average.xml
│ │ │ ├── base16-snazzy.xml
│ │ │ ├── borland.xml
│ │ │ ├── bw.xml
│ │ │ ├── catppuccin-frappe.xml
│ │ │ ├── catppuccin-latte.xml
│ │ │ ├── catppuccin-macchiato.xml
│ │ │ ├── catppuccin-mocha.xml
│ │ │ ├── colorful.xml
│ │ │ ├── compat.go
│ │ │ ├── doom-one.xml
│ │ │ ├── doom-one2.xml
│ │ │ ├── dracula.xml
│ │ │ ├── emacs.xml
│ │ │ ├── evergarden.xml
│ │ │ ├── friendly.xml
│ │ │ ├── fruity.xml
│ │ │ ├── github-dark.xml
│ │ │ ├── github.xml
│ │ │ ├── gruvbox-light.xml
│ │ │ ├── gruvbox.xml
│ │ │ ├── hr_high_contrast.xml
│ │ │ ├── hrdark.xml
│ │ │ ├── igor.xml
│ │ │ ├── lovelace.xml
│ │ │ ├── manni.xml
│ │ │ ├── modus-operandi.xml
│ │ │ ├── modus-vivendi.xml
│ │ │ ├── monokai.xml
│ │ │ ├── monokailight.xml
│ │ │ ├── murphy.xml
│ │ │ ├── native.xml
│ │ │ ├── nord.xml
│ │ │ ├── nordic.xml
│ │ │ ├── onedark.xml
│ │ │ ├── onesenterprise.xml
│ │ │ ├── paraiso-dark.xml
│ │ │ ├── paraiso-light.xml
│ │ │ ├── pastie.xml
│ │ │ ├── perldoc.xml
│ │ │ ├── pygments.xml
│ │ │ ├── rainbow_dash.xml
│ │ │ ├── rose-pine-dawn.xml
│ │ │ ├── rose-pine-moon.xml
│ │ │ ├── rose-pine.xml
│ │ │ ├── rpgle.xml
│ │ │ ├── rrt.xml
│ │ │ ├── solarized-dark.xml
│ │ │ ├── solarized-dark256.xml
│ │ │ ├── solarized-light.xml
│ │ │ ├── swapoff.xml
│ │ │ ├── tango.xml
│ │ │ ├── tokyonight-day.xml
│ │ │ ├── tokyonight-moon.xml
│ │ │ ├── tokyonight-night.xml
│ │ │ ├── tokyonight-storm.xml
│ │ │ ├── trac.xml
│ │ │ ├── vim.xml
│ │ │ ├── vs.xml
│ │ │ ├── vulcan.xml
│ │ │ ├── witchhazel.xml
│ │ │ ├── xcode-dark.xml
│ │ │ └── xcode.xml
│ │ ├── table.py
│ │ ├── tokentype_enumer.go
│ │ └── types.go
│ ├── atotto/
│ │ └── clipboard/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── clipboard.go
│ │ ├── clipboard_darwin.go
│ │ ├── clipboard_plan9.go
│ │ ├── clipboard_unix.go
│ │ └── clipboard_windows.go
│ ├── aymanbagabas/
│ │ └── go-osc52/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── osc52.go
│ ├── aymerick/
│ │ └── douceur/
│ │ ├── LICENSE
│ │ ├── css/
│ │ │ ├── declaration.go
│ │ │ ├── rule.go
│ │ │ └── stylesheet.go
│ │ └── parser/
│ │ └── parser.go
│ ├── catppuccin/
│ │ └── go/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .goreleaser.yaml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── flake.nix
│ │ ├── frappe.go
│ │ ├── go.tera
│ │ ├── latte.go
│ │ ├── macchiato.go
│ │ ├── main.go
│ │ ├── mocha.go
│ │ └── renovate.json
│ ├── charmbracelet/
│ │ ├── bubbles/
│ │ │ ├── LICENSE
│ │ │ ├── cursor/
│ │ │ │ └── cursor.go
│ │ │ ├── filepicker/
│ │ │ │ ├── filepicker.go
│ │ │ │ ├── hidden_unix.go
│ │ │ │ └── hidden_windows.go
│ │ │ ├── help/
│ │ │ │ └── help.go
│ │ │ ├── key/
│ │ │ │ └── key.go
│ │ │ ├── list/
│ │ │ │ ├── README.md
│ │ │ │ ├── defaultitem.go
│ │ │ │ ├── keys.go
│ │ │ │ ├── list.go
│ │ │ │ └── style.go
│ │ │ ├── paginator/
│ │ │ │ └── paginator.go
│ │ │ ├── runeutil/
│ │ │ │ └── runeutil.go
│ │ │ ├── spinner/
│ │ │ │ └── spinner.go
│ │ │ ├── textarea/
│ │ │ │ ├── memoization/
│ │ │ │ │ └── memoization.go
│ │ │ │ └── textarea.go
│ │ │ ├── textinput/
│ │ │ │ └── textinput.go
│ │ │ └── viewport/
│ │ │ ├── keymap.go
│ │ │ └── viewport.go
│ │ ├── bubbletea/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yaml
│ │ │ ├── commands.go
│ │ │ ├── exec.go
│ │ │ ├── focus.go
│ │ │ ├── inputreader_other.go
│ │ │ ├── inputreader_windows.go
│ │ │ ├── key.go
│ │ │ ├── key_other.go
│ │ │ ├── key_sequences.go
│ │ │ ├── key_windows.go
│ │ │ ├── logging.go
│ │ │ ├── mouse.go
│ │ │ ├── nil_renderer.go
│ │ │ ├── options.go
│ │ │ ├── renderer.go
│ │ │ ├── screen.go
│ │ │ ├── signals_unix.go
│ │ │ ├── signals_windows.go
│ │ │ ├── standard_renderer.go
│ │ │ ├── tea.go
│ │ │ ├── tea_init.go
│ │ │ ├── tty.go
│ │ │ ├── tty_unix.go
│ │ │ └── tty_windows.go
│ │ ├── colorprofile/
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── env.go
│ │ │ ├── env_other.go
│ │ │ ├── env_windows.go
│ │ │ ├── profile.go
│ │ │ └── writer.go
│ │ ├── glamour/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yml
│ │ │ ├── ansi/
│ │ │ │ ├── ansi.go
│ │ │ │ ├── baseelement.go
│ │ │ │ ├── blockelement.go
│ │ │ │ ├── blockstack.go
│ │ │ │ ├── codeblock.go
│ │ │ │ ├── codespan.go
│ │ │ │ ├── context.go
│ │ │ │ ├── elements.go
│ │ │ │ ├── emphasis.go
│ │ │ │ ├── heading.go
│ │ │ │ ├── image.go
│ │ │ │ ├── link.go
│ │ │ │ ├── listitem.go
│ │ │ │ ├── margin.go
│ │ │ │ ├── paragraph.go
│ │ │ │ ├── renderer.go
│ │ │ │ ├── style.go
│ │ │ │ ├── table.go
│ │ │ │ ├── table_links.go
│ │ │ │ ├── task.go
│ │ │ │ └── templatehelper.go
│ │ │ ├── examples.sh
│ │ │ ├── gallery.sh
│ │ │ ├── glamour.go
│ │ │ ├── internal/
│ │ │ │ └── autolink/
│ │ │ │ └── autolink.go
│ │ │ └── styles/
│ │ │ ├── README.md
│ │ │ ├── ascii.json
│ │ │ ├── dark.json
│ │ │ ├── dracula.go
│ │ │ ├── dracula.json
│ │ │ ├── light.json
│ │ │ ├── notty.json
│ │ │ ├── pink.json
│ │ │ ├── styles.go
│ │ │ ├── tokyo-night.go
│ │ │ └── tokyo_night.json
│ │ ├── huh/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── accessor.go
│ │ │ ├── clamp.go
│ │ │ ├── eval.go
│ │ │ ├── field_confirm.go
│ │ │ ├── field_filepicker.go
│ │ │ ├── field_input.go
│ │ │ ├── field_multiselect.go
│ │ │ ├── field_note.go
│ │ │ ├── field_select.go
│ │ │ ├── field_text.go
│ │ │ ├── form.go
│ │ │ ├── group.go
│ │ │ ├── huh.go
│ │ │ ├── internal/
│ │ │ │ ├── accessibility/
│ │ │ │ │ └── accessibility.go
│ │ │ │ └── selector/
│ │ │ │ └── selector.go
│ │ │ ├── keymap.go
│ │ │ ├── layout.go
│ │ │ ├── option.go
│ │ │ ├── run.go
│ │ │ ├── theme.go
│ │ │ ├── validate.go
│ │ │ └── wrap.go
│ │ ├── lipgloss/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yaml
│ │ │ ├── align.go
│ │ │ ├── ansi_unix.go
│ │ │ ├── ansi_windows.go
│ │ │ ├── borders.go
│ │ │ ├── color.go
│ │ │ ├── get.go
│ │ │ ├── join.go
│ │ │ ├── lipgloss.go
│ │ │ ├── position.go
│ │ │ ├── ranges.go
│ │ │ ├── renderer.go
│ │ │ ├── runes.go
│ │ │ ├── set.go
│ │ │ ├── size.go
│ │ │ ├── style.go
│ │ │ ├── table/
│ │ │ │ ├── resizing.go
│ │ │ │ ├── rows.go
│ │ │ │ ├── table.go
│ │ │ │ └── util.go
│ │ │ ├── tree/
│ │ │ │ ├── children.go
│ │ │ │ ├── enumerator.go
│ │ │ │ ├── renderer.go
│ │ │ │ └── tree.go
│ │ │ ├── unset.go
│ │ │ └── whitespace.go
│ │ └── x/
│ │ ├── ansi/
│ │ │ ├── LICENSE
│ │ │ ├── ansi.go
│ │ │ ├── ascii.go
│ │ │ ├── background.go
│ │ │ ├── c0.go
│ │ │ ├── c1.go
│ │ │ ├── charset.go
│ │ │ ├── clipboard.go
│ │ │ ├── color.go
│ │ │ ├── ctrl.go
│ │ │ ├── cursor.go
│ │ │ ├── cwd.go
│ │ │ ├── doc.go
│ │ │ ├── finalterm.go
│ │ │ ├── focus.go
│ │ │ ├── graphics.go
│ │ │ ├── hyperlink.go
│ │ │ ├── inband.go
│ │ │ ├── iterm2.go
│ │ │ ├── keypad.go
│ │ │ ├── kitty.go
│ │ │ ├── method.go
│ │ │ ├── mode.go
│ │ │ ├── mode_deprecated.go
│ │ │ ├── modes.go
│ │ │ ├── mouse.go
│ │ │ ├── notification.go
│ │ │ ├── palette.go
│ │ │ ├── parser/
│ │ │ │ ├── const.go
│ │ │ │ ├── seq.go
│ │ │ │ └── transition_table.go
│ │ │ ├── parser.go
│ │ │ ├── parser_decode.go
│ │ │ ├── parser_handler.go
│ │ │ ├── parser_sync.go
│ │ │ ├── passthrough.go
│ │ │ ├── paste.go
│ │ │ ├── progress.go
│ │ │ ├── reset.go
│ │ │ ├── screen.go
│ │ │ ├── sgr.go
│ │ │ ├── status.go
│ │ │ ├── style.go
│ │ │ ├── termcap.go
│ │ │ ├── title.go
│ │ │ ├── truncate.go
│ │ │ ├── urxvt.go
│ │ │ ├── util.go
│ │ │ ├── width.go
│ │ │ ├── winop.go
│ │ │ ├── wrap.go
│ │ │ └── xterm.go
│ │ ├── cellbuf/
│ │ │ ├── LICENSE
│ │ │ ├── buffer.go
│ │ │ ├── cell.go
│ │ │ ├── errors.go
│ │ │ ├── geom.go
│ │ │ ├── hardscroll.go
│ │ │ ├── hashmap.go
│ │ │ ├── link.go
│ │ │ ├── pen.go
│ │ │ ├── screen.go
│ │ │ ├── sequence.go
│ │ │ ├── style.go
│ │ │ ├── tabstop.go
│ │ │ ├── utils.go
│ │ │ ├── wrap.go
│ │ │ └── writer.go
│ │ ├── exp/
│ │ │ ├── slice/
│ │ │ │ ├── LICENSE
│ │ │ │ └── slice.go
│ │ │ └── strings/
│ │ │ ├── LICENSE
│ │ │ ├── contains.go
│ │ │ └── join.go
│ │ └── term/
│ │ ├── LICENSE
│ │ ├── term.go
│ │ ├── term_other.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_windows.go
│ │ ├── terminal.go
│ │ └── util.go
│ ├── clipperhouse/
│ │ ├── displaywidth/
│ │ │ ├── .gitignore
│ │ │ ├── AGENTS.md
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── gen.go
│ │ │ ├── graphemes.go
│ │ │ ├── options.go
│ │ │ ├── trie.go
│ │ │ ├── truncate.go
│ │ │ └── width.go
│ │ └── uax29/
│ │ └── v2/
│ │ ├── LICENSE
│ │ └── graphemes/
│ │ ├── README.md
│ │ ├── ansi.go
│ │ ├── ansi8.go
│ │ ├── iterator.go
│ │ ├── reader.go
│ │ ├── splitfunc.go
│ │ └── trie.go
│ ├── dlclark/
│ │ └── regexp2/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── ATTRIB
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── fastclock.go
│ │ ├── match.go
│ │ ├── regexp.go
│ │ ├── replace.go
│ │ ├── runner.go
│ │ ├── syntax/
│ │ │ ├── charclass.go
│ │ │ ├── code.go
│ │ │ ├── escape.go
│ │ │ ├── fuzz.go
│ │ │ ├── parser.go
│ │ │ ├── prefix.go
│ │ │ ├── replacerdata.go
│ │ │ ├── tree.go
│ │ │ └── writer.go
│ │ └── testoutput1
│ ├── dustin/
│ │ └── go-humanize/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.markdown
│ │ ├── big.go
│ │ ├── bigbytes.go
│ │ ├── bytes.go
│ │ ├── comma.go
│ │ ├── commaf.go
│ │ ├── ftoa.go
│ │ ├── humanize.go
│ │ ├── number.go
│ │ ├── ordinals.go
│ │ ├── si.go
│ │ └── times.go
│ ├── erikgeiser/
│ │ └── coninput/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── keycodes.go
│ │ ├── mode.go
│ │ ├── read.go
│ │ └── records.go
│ ├── fsnotify/
│ │ └── fsnotify/
│ │ ├── .cirrus.yml
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── backend_fen.go
│ │ ├── backend_inotify.go
│ │ ├── backend_kqueue.go
│ │ ├── backend_other.go
│ │ ├── backend_windows.go
│ │ ├── fsnotify.go
│ │ ├── internal/
│ │ │ ├── darwin.go
│ │ │ ├── debug_darwin.go
│ │ │ ├── debug_dragonfly.go
│ │ │ ├── debug_freebsd.go
│ │ │ ├── debug_kqueue.go
│ │ │ ├── debug_linux.go
│ │ │ ├── debug_netbsd.go
│ │ │ ├── debug_openbsd.go
│ │ │ ├── debug_solaris.go
│ │ │ ├── debug_windows.go
│ │ │ ├── freebsd.go
│ │ │ ├── internal.go
│ │ │ ├── unix.go
│ │ │ ├── unix2.go
│ │ │ └── windows.go
│ │ ├── shared.go
│ │ ├── staticcheck.conf
│ │ ├── system_bsd.go
│ │ └── system_darwin.go
│ ├── goccy/
│ │ └── go-json/
│ │ ├── .codecov.yml
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── color.go
│ │ ├── decode.go
│ │ ├── docker-compose.yml
│ │ ├── encode.go
│ │ ├── error.go
│ │ ├── internal/
│ │ │ ├── decoder/
│ │ │ │ ├── anonymous_field.go
│ │ │ │ ├── array.go
│ │ │ │ ├── assign.go
│ │ │ │ ├── bool.go
│ │ │ │ ├── bytes.go
│ │ │ │ ├── compile.go
│ │ │ │ ├── compile_norace.go
│ │ │ │ ├── compile_race.go
│ │ │ │ ├── context.go
│ │ │ │ ├── float.go
│ │ │ │ ├── func.go
│ │ │ │ ├── int.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── invalid.go
│ │ │ │ ├── map.go
│ │ │ │ ├── number.go
│ │ │ │ ├── option.go
│ │ │ │ ├── path.go
│ │ │ │ ├── ptr.go
│ │ │ │ ├── slice.go
│ │ │ │ ├── stream.go
│ │ │ │ ├── string.go
│ │ │ │ ├── struct.go
│ │ │ │ ├── type.go
│ │ │ │ ├── uint.go
│ │ │ │ ├── unmarshal_json.go
│ │ │ │ ├── unmarshal_text.go
│ │ │ │ └── wrapped_string.go
│ │ │ ├── encoder/
│ │ │ │ ├── code.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compiler.go
│ │ │ │ ├── compiler_norace.go
│ │ │ │ ├── compiler_race.go
│ │ │ │ ├── context.go
│ │ │ │ ├── decode_rune.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── indent.go
│ │ │ │ ├── int.go
│ │ │ │ ├── map112.go
│ │ │ │ ├── map113.go
│ │ │ │ ├── opcode.go
│ │ │ │ ├── option.go
│ │ │ │ ├── optype.go
│ │ │ │ ├── query.go
│ │ │ │ ├── string.go
│ │ │ │ ├── string_table.go
│ │ │ │ ├── vm/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── hack.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ ├── vm_color/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── hack.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ ├── vm_color_indent/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ └── vm_indent/
│ │ │ │ ├── debug_vm.go
│ │ │ │ ├── hack.go
│ │ │ │ ├── util.go
│ │ │ │ └── vm.go
│ │ │ ├── errors/
│ │ │ │ └── error.go
│ │ │ └── runtime/
│ │ │ ├── rtype.go
│ │ │ ├── struct_field.go
│ │ │ └── type.go
│ │ ├── json.go
│ │ ├── option.go
│ │ ├── path.go
│ │ └── query.go
│ ├── golang/
│ │ └── freetype/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ └── raster/
│ │ ├── geom.go
│ │ ├── paint.go
│ │ ├── raster.go
│ │ └── stroke.go
│ ├── google/
│ │ └── uuid/
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── marshal.go
│ │ ├── node.go
│ │ ├── node_js.go
│ │ ├── node_net.go
│ │ ├── null.go
│ │ ├── sql.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ ├── version4.go
│ │ ├── version6.go
│ │ └── version7.go
│ ├── gorilla/
│ │ └── css/
│ │ ├── LICENSE
│ │ └── scanner/
│ │ ├── doc.go
│ │ └── scanner.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ └── trap_windows.go
│ ├── mattn/
│ │ ├── go-isatty/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── go.test.sh
│ │ │ ├── isatty_bsd.go
│ │ │ ├── isatty_others.go
│ │ │ ├── isatty_plan9.go
│ │ │ ├── isatty_solaris.go
│ │ │ ├── isatty_tcgets.go
│ │ │ └── isatty_windows.go
│ │ ├── go-localereader/
│ │ │ ├── README.md
│ │ │ ├── localereader.go
│ │ │ ├── localereader_unix.go
│ │ │ └── localereader_windows.go
│ │ └── go-runewidth/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benchstat.txt
│ │ ├── new.txt
│ │ ├── old.txt
│ │ ├── runewidth.go
│ │ ├── runewidth_appengine.go
│ │ ├── runewidth_js.go
│ │ ├── runewidth_posix.go
│ │ ├── runewidth_table.go
│ │ └── runewidth_windows.go
│ ├── microcosm-cc/
│ │ └── bluemonday/
│ │ ├── CONTRIBUTING.md
│ │ ├── CREDITS.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── css/
│ │ │ └── handlers.go
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── policies.go
│ │ ├── policy.go
│ │ └── sanitize.go
│ ├── mitchellh/
│ │ └── hashstructure/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── errors.go
│ │ ├── hashstructure.go
│ │ └── include.go
│ ├── muesli/
│ │ ├── ansi/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── ansi.go
│ │ │ ├── buffer.go
│ │ │ ├── compressor/
│ │ │ │ └── writer.go
│ │ │ └── writer.go
│ │ ├── cancelreader/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci-soft.yml
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── cancelreader.go
│ │ │ ├── cancelreader_bsd.go
│ │ │ ├── cancelreader_default.go
│ │ │ ├── cancelreader_linux.go
│ │ │ ├── cancelreader_select.go
│ │ │ ├── cancelreader_unix.go
│ │ │ └── cancelreader_windows.go
│ │ ├── reflow/
│ │ │ ├── LICENSE
│ │ │ ├── ansi/
│ │ │ │ ├── ansi.go
│ │ │ │ ├── buffer.go
│ │ │ │ └── writer.go
│ │ │ ├── indent/
│ │ │ │ └── indent.go
│ │ │ ├── padding/
│ │ │ │ └── padding.go
│ │ │ └── wordwrap/
│ │ │ └── wordwrap.go
│ │ └── termenv/
│ │ ├── .gitignore
│ │ ├── .golangci-soft.yml
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── ansi_compat.md
│ │ ├── ansicolors.go
│ │ ├── color.go
│ │ ├── constants_linux.go
│ │ ├── constants_solaris.go
│ │ ├── constants_unix.go
│ │ ├── constants_zos.go
│ │ ├── copy.go
│ │ ├── hyperlink.go
│ │ ├── notification.go
│ │ ├── output.go
│ │ ├── profile.go
│ │ ├── screen.go
│ │ ├── style.go
│ │ ├── templatehelper.go
│ │ ├── termenv.go
│ │ ├── termenv_other.go
│ │ ├── termenv_posix.go
│ │ ├── termenv_solaris.go
│ │ ├── termenv_unix.go
│ │ └── termenv_windows.go
│ ├── ncruces/
│ │ └── go-strftime/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── parser.go
│ │ ├── pkg.go
│ │ ├── specifiers.go
│ │ └── strftime.go
│ ├── remyoudompheng/
│ │ └── bigfft/
│ │ ├── LICENSE
│ │ ├── README
│ │ ├── arith_decl.go
│ │ ├── fermat.go
│ │ ├── fft.go
│ │ └── scan.go
│ ├── rivo/
│ │ └── uniseg/
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── eastasianwidth.go
│ │ ├── emojipresentation.go
│ │ ├── gen_breaktest.go
│ │ ├── gen_properties.go
│ │ ├── grapheme.go
│ │ ├── graphemeproperties.go
│ │ ├── graphemerules.go
│ │ ├── line.go
│ │ ├── lineproperties.go
│ │ ├── linerules.go
│ │ ├── properties.go
│ │ ├── sentence.go
│ │ ├── sentenceproperties.go
│ │ ├── sentencerules.go
│ │ ├── step.go
│ │ ├── width.go
│ │ ├── word.go
│ │ ├── wordproperties.go
│ │ └── wordrules.go
│ ├── spf13/
│ │ ├── cobra/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .mailmap
│ │ │ ├── CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── active_help.go
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completionsV2.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── completions.go
│ │ │ ├── fish_completions.go
│ │ │ ├── flag_groups.go
│ │ │ ├── powershell_completions.go
│ │ │ ├── shell_completions.go
│ │ │ └── zsh_completions.go
│ │ └── pflag/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .golangci.yaml
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bool.go
│ │ ├── bool_func.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── errors.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float32_slice.go
│ │ ├── float64.go
│ │ ├── float64_slice.go
│ │ ├── func.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int32_slice.go
│ │ ├── int64.go
│ │ ├── int64_slice.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── ipnet_slice.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_int64.go
│ │ ├── string_to_string.go
│ │ ├── text.go
│ │ ├── time.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ └── uint_slice.go
│ ├── xo/
│ │ └── terminfo/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── caps.go
│ │ ├── capvals.go
│ │ ├── color.go
│ │ ├── dec.go
│ │ ├── load.go
│ │ ├── param.go
│ │ ├── stack.go
│ │ └── terminfo.go
│ └── yuin/
│ ├── goldmark/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── ast/
│ │ │ ├── ast.go
│ │ │ ├── block.go
│ │ │ └── inline.go
│ │ ├── extension/
│ │ │ ├── ast/
│ │ │ │ ├── definition_list.go
│ │ │ │ ├── footnote.go
│ │ │ │ ├── strikethrough.go
│ │ │ │ ├── table.go
│ │ │ │ └── tasklist.go
│ │ │ ├── cjk.go
│ │ │ ├── definition_list.go
│ │ │ ├── footnote.go
│ │ │ ├── gfm.go
│ │ │ ├── linkify.go
│ │ │ ├── package.go
│ │ │ ├── strikethrough.go
│ │ │ ├── table.go
│ │ │ ├── tasklist.go
│ │ │ └── typographer.go
│ │ ├── markdown.go
│ │ ├── parser/
│ │ │ ├── attribute.go
│ │ │ ├── atx_heading.go
│ │ │ ├── auto_link.go
│ │ │ ├── blockquote.go
│ │ │ ├── code_block.go
│ │ │ ├── code_span.go
│ │ │ ├── delimiter.go
│ │ │ ├── emphasis.go
│ │ │ ├── fcode_block.go
│ │ │ ├── html_block.go
│ │ │ ├── link.go
│ │ │ ├── link_ref.go
│ │ │ ├── list.go
│ │ │ ├── list_item.go
│ │ │ ├── paragraph.go
│ │ │ ├── parser.go
│ │ │ ├── raw_html.go
│ │ │ ├── setext_headings.go
│ │ │ └── thematic_break.go
│ │ ├── renderer/
│ │ │ ├── html/
│ │ │ │ └── html.go
│ │ │ └── renderer.go
│ │ ├── text/
│ │ │ ├── package.go
│ │ │ ├── reader.go
│ │ │ └── segment.go
│ │ └── util/
│ │ ├── html5entities.gen.go
│ │ ├── html5entities.go
│ │ ├── unicode_case_folding.gen.go
│ │ ├── unicode_case_folding.go
│ │ ├── util.go
│ │ ├── util_cjk.go
│ │ ├── util_safe.go
│ │ ├── util_unsafe_go120.go
│ │ └── util_unsafe_go121.go
│ └── goldmark-emoji/
│ ├── .gitignore
│ ├── LICENSE
│ ├── README.md
│ ├── ast/
│ │ └── emoji.go
│ ├── definition/
│ │ ├── definition.go
│ │ ├── github.gen.go
│ │ └── github.go
│ └── emoji.go
├── golang.org/
│ └── x/
│ ├── image/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── draw/
│ │ │ ├── draw.go
│ │ │ ├── impl.go
│ │ │ └── scale.go
│ │ ├── font/
│ │ │ ├── basicfont/
│ │ │ │ ├── basicfont.go
│ │ │ │ └── data.go
│ │ │ ├── font.go
│ │ │ ├── opentype/
│ │ │ │ └── opentype.go
│ │ │ └── sfnt/
│ │ │ ├── cmap.go
│ │ │ ├── data.go
│ │ │ ├── gpos.go
│ │ │ ├── postscript.go
│ │ │ ├── sfnt.go
│ │ │ └── truetype.go
│ │ ├── math/
│ │ │ ├── f64/
│ │ │ │ └── f64.go
│ │ │ └── fixed/
│ │ │ └── fixed.go
│ │ └── vector/
│ │ ├── acc_amd64.go
│ │ ├── acc_amd64.s
│ │ ├── acc_other.go
│ │ ├── gen_acc_amd64.s.tmpl
│ │ ├── raster_fixed.go
│ │ ├── raster_floating.go
│ │ └── vector.go
│ ├── net/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ └── html/
│ │ ├── atom/
│ │ │ ├── atom.go
│ │ │ └── table.go
│ │ ├── const.go
│ │ ├── doc.go
│ │ ├── doctype.go
│ │ ├── entity.go
│ │ ├── escape.go
│ │ ├── foreign.go
│ │ ├── iter.go
│ │ ├── node.go
│ │ ├── nodetype_string.go
│ │ ├── parse.go
│ │ ├── render.go
│ │ └── token.go
│ ├── sync/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── errgroup/
│ │ │ └── errgroup.go
│ │ └── singleflight/
│ │ └── singleflight.go
│ ├── sys/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_bsd_386.s
│ │ │ ├── asm_bsd_amd64.s
│ │ │ ├── asm_bsd_arm.s
│ │ │ ├── asm_bsd_arm64.s
│ │ │ ├── asm_bsd_ppc64.s
│ │ │ ├── asm_bsd_riscv64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_loong64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_openbsd_mips64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── asm_zos_s390x.s
│ │ │ ├── auxv.go
│ │ │ ├── auxv_unsupported.go
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── bpxsvc_zos.go
│ │ │ ├── bpxsvc_zos.s
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dev_zos.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── fdset.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ifreq_linux.go
│ │ │ ├── ioctl_linux.go
│ │ │ ├── ioctl_signed.go
│ │ │ ├── ioctl_unsigned.go
│ │ │ ├── ioctl_zos.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mmap_nomremap.go
│ │ │ ├── mremap.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── ptrace_darwin.go
│ │ │ ├── ptrace_ios.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_dragonfly.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── sockcmsg_unix_other.go
│ │ │ ├── sockcmsg_zos.go
│ │ │ ├── symaddr_zos_s390x.s
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ ├── syscall_hurd.go
│ │ │ ├── syscall_hurd_386.go
│ │ │ ├── syscall_illumos.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_alarm.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gc_arm.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_loong64.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_openbsd_libc.go
│ │ │ ├── syscall_openbsd_mips64.go
│ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── syscall_zos_s390x.go
│ │ │ ├── sysvshm_linux.go
│ │ │ ├── sysvshm_unix.go
│ │ │ ├── sysvshm_unix_other.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── vgetrandom_linux.go
│ │ │ ├── vgetrandom_unsupported.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ ├── zerrors_linux.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_loong64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zerrors_zos_s390x.go
│ │ │ ├── zptrace_armnn_linux.go
│ │ │ ├── zptrace_linux_arm64.go
│ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ ├── zptrace_x86_linux.go
│ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ ├── zsyscall_linux.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_loong64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_386.s
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsyscall_zos_s390x.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_loong64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ ├── zsysnum_zos_s390x.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ ├── ztypes_linux.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_loong64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ ├── ztypes_solaris_amd64.go
│ │ │ └── ztypes_zos_s390x.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── setupapi_windows.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── types_windows_arm64.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── term/
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── codereview.cfg
│ │ ├── term.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_unsupported.go
│ │ ├── term_windows.go
│ │ └── terminal.go
│ └── text/
│ ├── LICENSE
│ ├── PATENTS
│ ├── cases/
│ │ ├── cases.go
│ │ ├── context.go
│ │ ├── fold.go
│ │ ├── icu.go
│ │ ├── info.go
│ │ ├── map.go
│ │ ├── tables15.0.0.go
│ │ ├── tables17.0.0.go
│ │ └── trieval.go
│ ├── encoding/
│ │ ├── charmap/
│ │ │ ├── charmap.go
│ │ │ └── tables.go
│ │ ├── encoding.go
│ │ └── internal/
│ │ ├── identifier/
│ │ │ ├── identifier.go
│ │ │ └── mib.go
│ │ └── internal.go
│ ├── internal/
│ │ ├── internal.go
│ │ ├── language/
│ │ │ ├── common.go
│ │ │ ├── compact/
│ │ │ │ ├── compact.go
│ │ │ │ ├── language.go
│ │ │ │ ├── parents.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── compact.go
│ │ │ ├── compose.go
│ │ │ ├── coverage.go
│ │ │ ├── language.go
│ │ │ ├── lookup.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── match.go
│ │ └── tag/
│ │ └── tag.go
│ ├── language/
│ │ ├── coverage.go
│ │ ├── doc.go
│ │ ├── language.go
│ │ ├── match.go
│ │ ├── parse.go
│ │ ├── tables.go
│ │ └── tags.go
│ ├── transform/
│ │ └── transform.go
│ └── unicode/
│ └── norm/
│ ├── composition.go
│ ├── forminfo.go
│ ├── input.go
│ ├── iter.go
│ ├── normalize.go
│ ├── readwriter.go
│ ├── tables15.0.0.go
│ ├── tables17.0.0.go
│ ├── transform.go
│ └── trie.go
├── gonum.org/
│ └── v1/
│ └── gonum/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── blas/
│ │ ├── README.md
│ │ ├── blas.go
│ │ ├── blas64/
│ │ │ ├── blas64.go
│ │ │ ├── conv.go
│ │ │ ├── conv_symmetric.go
│ │ │ └── doc.go
│ │ ├── cblas128/
│ │ │ ├── cblas128.go
│ │ │ ├── conv.go
│ │ │ ├── conv_hermitian.go
│ │ │ ├── conv_symmetric.go
│ │ │ └── doc.go
│ │ ├── conversions.bash
│ │ ├── doc.go
│ │ └── gonum/
│ │ ├── dgemm.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ ├── gonum.go
│ │ ├── level1cmplx128.go
│ │ ├── level1cmplx64.go
│ │ ├── level1float32.go
│ │ ├── level1float32_dsdot.go
│ │ ├── level1float32_sdot.go
│ │ ├── level1float32_sdsdot.go
│ │ ├── level1float64.go
│ │ ├── level1float64_ddot.go
│ │ ├── level2cmplx128.go
│ │ ├── level2cmplx64.go
│ │ ├── level2float32.go
│ │ ├── level2float64.go
│ │ ├── level3cmplx128.go
│ │ ├── level3cmplx64.go
│ │ ├── level3float32.go
│ │ ├── level3float64.go
│ │ ├── sgemm.go
│ │ └── single_precision.bash
│ ├── floats/
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── floats.go
│ │ └── scalar/
│ │ ├── doc.go
│ │ └── scalar.go
│ ├── graph/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── complement.go
│ │ ├── doc.go
│ │ ├── graph.go
│ │ ├── internal/
│ │ │ ├── linear/
│ │ │ │ ├── doc.go
│ │ │ │ └── linear.go
│ │ │ └── set/
│ │ │ ├── doc.go
│ │ │ ├── same.go
│ │ │ ├── same_appengine.go
│ │ │ └── set.go
│ │ ├── iterator/
│ │ │ ├── doc.go
│ │ │ ├── edges.go
│ │ │ ├── hiter_noswiss.go
│ │ │ ├── hiter_swiss.go
│ │ │ ├── lines.go
│ │ │ ├── lines_map.go
│ │ │ ├── lines_map_safe.go
│ │ │ ├── map.go
│ │ │ ├── map.s
│ │ │ ├── nodes.go
│ │ │ ├── nodes_map.go
│ │ │ └── nodes_map_safe.go
│ │ ├── multigraph.go
│ │ ├── network/
│ │ │ ├── betweenness.go
│ │ │ ├── diffusion.go
│ │ │ ├── distance.go
│ │ │ ├── doc.go
│ │ │ ├── hits.go
│ │ │ ├── maximum_flow.go
│ │ │ ├── network.go
│ │ │ └── page.go
│ │ ├── nodes_edges.go
│ │ ├── path/
│ │ │ ├── a_star.go
│ │ │ ├── bellman_ford_moore.go
│ │ │ ├── dijkstra.go
│ │ │ ├── disjoint.go
│ │ │ ├── doc.go
│ │ │ ├── floydwarshall.go
│ │ │ ├── johnson_apsp.go
│ │ │ ├── shortest.go
│ │ │ ├── spanning_tree.go
│ │ │ ├── weight.go
│ │ │ └── yen_ksp.go
│ │ ├── set/
│ │ │ └── uid/
│ │ │ └── uid.go
│ │ ├── simple/
│ │ │ ├── dense_directed_matrix.go
│ │ │ ├── dense_undirected_matrix.go
│ │ │ ├── directed.go
│ │ │ ├── doc.go
│ │ │ ├── simple.go
│ │ │ ├── undirected.go
│ │ │ ├── weighted_directed.go
│ │ │ └── weighted_undirected.go
│ │ ├── spectral/
│ │ │ ├── doc.go
│ │ │ └── laplacian.go
│ │ ├── topo/
│ │ │ ├── bron_kerbosch.go
│ │ │ ├── clique_graph.go
│ │ │ ├── doc.go
│ │ │ ├── johnson_cycles.go
│ │ │ ├── non_tomita_choice.go
│ │ │ ├── paton_cycles.go
│ │ │ ├── tarjan.go
│ │ │ ├── tomita_choice.go
│ │ │ └── topo.go
│ │ ├── traverse/
│ │ │ ├── doc.go
│ │ │ └── traverse.go
│ │ └── undirect.go
│ ├── internal/
│ │ ├── asm/
│ │ │ ├── c128/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotcinc_amd64.s
│ │ │ │ ├── dotcunitary_amd64.s
│ │ │ │ ├── dotuinc_amd64.s
│ │ │ │ ├── dotuunitary_amd64.s
│ │ │ │ ├── dscalinc_amd64.s
│ │ │ │ ├── dscalunitary_amd64.s
│ │ │ │ ├── scal.go
│ │ │ │ ├── scalUnitary_amd64.s
│ │ │ │ ├── scalinc_amd64.s
│ │ │ │ ├── stubs.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ └── stubs_noasm.go
│ │ │ ├── c64/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── conj.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotcinc_amd64.s
│ │ │ │ ├── dotcunitary_amd64.s
│ │ │ │ ├── dotuinc_amd64.s
│ │ │ │ ├── dotuunitary_amd64.s
│ │ │ │ ├── scal.go
│ │ │ │ ├── stubs.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ └── stubs_noasm.go
│ │ │ ├── f32/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── ddotinc_amd64.s
│ │ │ │ ├── ddotunitary_amd64.s
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotinc_amd64.s
│ │ │ │ ├── dotunitary_amd64.s
│ │ │ │ ├── ge_amd64.go
│ │ │ │ ├── ge_amd64.s
│ │ │ │ ├── ge_noasm.go
│ │ │ │ ├── gemv.go
│ │ │ │ ├── l2norm.go
│ │ │ │ ├── scal.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ ├── stubs_noasm.go
│ │ │ │ └── sum_amd64.s
│ │ │ └── f64/
│ │ │ ├── abssum_amd64.s
│ │ │ ├── abssuminc_amd64.s
│ │ │ ├── add_amd64.s
│ │ │ ├── addconst_amd64.s
│ │ │ ├── axpy.go
│ │ │ ├── axpyinc_amd64.s
│ │ │ ├── axpyincto_amd64.s
│ │ │ ├── axpyunitary_amd64.s
│ │ │ ├── axpyunitaryto_amd64.s
│ │ │ ├── cumprod_amd64.s
│ │ │ ├── cumsum_amd64.s
│ │ │ ├── div_amd64.s
│ │ │ ├── divto_amd64.s
│ │ │ ├── doc.go
│ │ │ ├── dot.go
│ │ │ ├── dot_amd64.s
│ │ │ ├── ge_amd64.go
│ │ │ ├── ge_noasm.go
│ │ │ ├── gemvN_amd64.s
│ │ │ ├── gemvT_amd64.s
│ │ │ ├── ger_amd64.s
│ │ │ ├── l1norm_amd64.s
│ │ │ ├── l2norm_amd64.s
│ │ │ ├── l2norm_noasm.go
│ │ │ ├── l2normdist_amd64.s
│ │ │ ├── l2norminc_amd64.s
│ │ │ ├── linfnorm_amd64.s
│ │ │ ├── scal.go
│ │ │ ├── scalinc_amd64.s
│ │ │ ├── scalincto_amd64.s
│ │ │ ├── scalunitary_amd64.s
│ │ │ ├── scalunitaryto_amd64.s
│ │ │ ├── stubs_amd64.go
│ │ │ ├── stubs_noasm.go
│ │ │ └── sum_amd64.s
│ │ ├── cmplx64/
│ │ │ ├── abs.go
│ │ │ ├── conj.go
│ │ │ ├── doc.go
│ │ │ ├── isinf.go
│ │ │ ├── isnan.go
│ │ │ └── sqrt.go
│ │ ├── math32/
│ │ │ ├── doc.go
│ │ │ ├── math.go
│ │ │ ├── signbit.go
│ │ │ ├── sqrt.go
│ │ │ ├── sqrt_amd64.go
│ │ │ ├── sqrt_amd64.s
│ │ │ ├── sqrt_arm64.go
│ │ │ └── sqrt_arm64.s
│ │ └── order/
│ │ ├── doc.go
│ │ └── order.go
│ ├── lapack/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── gonum/
│ │ │ ├── dbdsqr.go
│ │ │ ├── dgebak.go
│ │ │ ├── dgebal.go
│ │ │ ├── dgebd2.go
│ │ │ ├── dgebrd.go
│ │ │ ├── dgecon.go
│ │ │ ├── dgeev.go
│ │ │ ├── dgehd2.go
│ │ │ ├── dgehrd.go
│ │ │ ├── dgelq2.go
│ │ │ ├── dgelqf.go
│ │ │ ├── dgels.go
│ │ │ ├── dgeql2.go
│ │ │ ├── dgeqp3.go
│ │ │ ├── dgeqr2.go
│ │ │ ├── dgeqrf.go
│ │ │ ├── dgerq2.go
│ │ │ ├── dgerqf.go
│ │ │ ├── dgesc2.go
│ │ │ ├── dgesv.go
│ │ │ ├── dgesvd.go
│ │ │ ├── dgetc2.go
│ │ │ ├── dgetf2.go
│ │ │ ├── dgetrf.go
│ │ │ ├── dgetri.go
│ │ │ ├── dgetrs.go
│ │ │ ├── dgghrd.go
│ │ │ ├── dggsvd3.go
│ │ │ ├── dggsvp3.go
│ │ │ ├── dgtsv.go
│ │ │ ├── dhseqr.go
│ │ │ ├── dlabrd.go
│ │ │ ├── dlacn2.go
│ │ │ ├── dlacpy.go
│ │ │ ├── dlae2.go
│ │ │ ├── dlaev2.go
│ │ │ ├── dlaexc.go
│ │ │ ├── dlag2.go
│ │ │ ├── dlags2.go
│ │ │ ├── dlagtm.go
│ │ │ ├── dlahqr.go
│ │ │ ├── dlahr2.go
│ │ │ ├── dlaln2.go
│ │ │ ├── dlangb.go
│ │ │ ├── dlange.go
│ │ │ ├── dlangt.go
│ │ │ ├── dlanhs.go
│ │ │ ├── dlansb.go
│ │ │ ├── dlanst.go
│ │ │ ├── dlansy.go
│ │ │ ├── dlantb.go
│ │ │ ├── dlantr.go
│ │ │ ├── dlanv2.go
│ │ │ ├── dlapll.go
│ │ │ ├── dlapmr.go
│ │ │ ├── dlapmt.go
│ │ │ ├── dlapy2.go
│ │ │ ├── dlaqp2.go
│ │ │ ├── dlaqps.go
│ │ │ ├── dlaqr04.go
│ │ │ ├── dlaqr1.go
│ │ │ ├── dlaqr23.go
│ │ │ ├── dlaqr5.go
│ │ │ ├── dlarf.go
│ │ │ ├── dlarfb.go
│ │ │ ├── dlarfg.go
│ │ │ ├── dlarft.go
│ │ │ ├── dlarfx.go
│ │ │ ├── dlartg.go
│ │ │ ├── dlas2.go
│ │ │ ├── dlascl.go
│ │ │ ├── dlaset.go
│ │ │ ├── dlasq1.go
│ │ │ ├── dlasq2.go
│ │ │ ├── dlasq3.go
│ │ │ ├── dlasq4.go
│ │ │ ├── dlasq5.go
│ │ │ ├── dlasq6.go
│ │ │ ├── dlasr.go
│ │ │ ├── dlasrt.go
│ │ │ ├── dlassq.go
│ │ │ ├── dlasv2.go
│ │ │ ├── dlaswp.go
│ │ │ ├── dlasy2.go
│ │ │ ├── dlatbs.go
│ │ │ ├── dlatdf.go
│ │ │ ├── dlatrd.go
│ │ │ ├── dlatrs.go
│ │ │ ├── dlauu2.go
│ │ │ ├── dlauum.go
│ │ │ ├── doc.go
│ │ │ ├── dorg2l.go
│ │ │ ├── dorg2r.go
│ │ │ ├── dorgbr.go
│ │ │ ├── dorghr.go
│ │ │ ├── dorgl2.go
│ │ │ ├── dorglq.go
│ │ │ ├── dorgql.go
│ │ │ ├── dorgqr.go
│ │ │ ├── dorgr2.go
│ │ │ ├── dorgtr.go
│ │ │ ├── dorm2r.go
│ │ │ ├── dormbr.go
│ │ │ ├── dormhr.go
│ │ │ ├── dorml2.go
│ │ │ ├── dormlq.go
│ │ │ ├── dormqr.go
│ │ │ ├── dormr2.go
│ │ │ ├── dpbcon.go
│ │ │ ├── dpbtf2.go
│ │ │ ├── dpbtrf.go
│ │ │ ├── dpbtrs.go
│ │ │ ├── dpocon.go
│ │ │ ├── dpotf2.go
│ │ │ ├── dpotrf.go
│ │ │ ├── dpotri.go
│ │ │ ├── dpotrs.go
│ │ │ ├── dpstf2.go
│ │ │ ├── dpstrf.go
│ │ │ ├── dptcon.go
│ │ │ ├── dptsv.go
│ │ │ ├── dpttrf.go
│ │ │ ├── dpttrs.go
│ │ │ ├── dptts2.go
│ │ │ ├── drscl.go
│ │ │ ├── dsteqr.go
│ │ │ ├── dsterf.go
│ │ │ ├── dsyev.go
│ │ │ ├── dsytd2.go
│ │ │ ├── dsytrd.go
│ │ │ ├── dtbtrs.go
│ │ │ ├── dtgsja.go
│ │ │ ├── dtrcon.go
│ │ │ ├── dtrevc3.go
│ │ │ ├── dtrexc.go
│ │ │ ├── dtrti2.go
│ │ │ ├── dtrtri.go
│ │ │ ├── dtrtrs.go
│ │ │ ├── errors.go
│ │ │ ├── iladlc.go
│ │ │ ├── iladlr.go
│ │ │ ├── ilaenv.go
│ │ │ ├── iparmq.go
│ │ │ └── lapack.go
│ │ ├── lapack.go
│ │ └── lapack64/
│ │ ├── doc.go
│ │ └── lapack64.go
│ └── mat/
│ ├── README.md
│ ├── band.go
│ ├── cdense.go
│ ├── cholesky.go
│ ├── cmatrix.go
│ ├── consts.go
│ ├── dense.go
│ ├── dense_arithmetic.go
│ ├── diagonal.go
│ ├── doc.go
│ ├── eigen.go
│ ├── errors.go
│ ├── format.go
│ ├── gsvd.go
│ ├── hogsvd.go
│ ├── index_bound_checks.go
│ ├── index_no_bound_checks.go
│ ├── inner.go
│ ├── io.go
│ ├── lq.go
│ ├── lu.go
│ ├── matrix.go
│ ├── offset.go
│ ├── offset_appengine.go
│ ├── pool.go
│ ├── product.go
│ ├── qr.go
│ ├── shadow.go
│ ├── shadow_common.go
│ ├── shadow_complex.go
│ ├── solve.go
│ ├── svd.go
│ ├── symband.go
│ ├── symmetric.go
│ ├── triangular.go
│ ├── triband.go
│ ├── tridiag.go
│ └── vector.go
├── gopkg.in/
│ └── yaml.v3/
│ ├── LICENSE
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── modernc.org/
│ ├── libc/
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── LICENSE-3RD-PARTY.md
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── abi0_linux_amd64.go
│ │ ├── abi0_linux_amd64.s
│ │ ├── aliases.go
│ │ ├── asm_386.s
│ │ ├── atomic.go
│ │ ├── atomic32.go
│ │ ├── atomic64.go
│ │ ├── build_all_targets.sh
│ │ ├── builder.json
│ │ ├── builtin.go
│ │ ├── builtin32.go
│ │ ├── builtin64.go
│ │ ├── builtin_all.go
│ │ ├── capi_darwin_amd64.go
│ │ ├── capi_darwin_arm64.go
│ │ ├── capi_freebsd_386.go
│ │ ├── capi_freebsd_amd64.go
│ │ ├── capi_freebsd_arm.go
│ │ ├── capi_freebsd_arm64.go
│ │ ├── capi_illumos_amd64.go
│ │ ├── capi_linux_386.go
│ │ ├── capi_linux_amd64.go
│ │ ├── capi_linux_arm.go
│ │ ├── capi_linux_arm64.go
│ │ ├── capi_linux_loong64.go
│ │ ├── capi_linux_mips64le.go
│ │ ├── capi_linux_ppc64le.go
│ │ ├── capi_linux_riscv64.go
│ │ ├── capi_linux_s390x.go
│ │ ├── capi_netbsd_amd64.go
│ │ ├── capi_netbsd_arm.go
│ │ ├── capi_openbsd_386.go
│ │ ├── capi_openbsd_amd64.go
│ │ ├── capi_openbsd_arm64.go
│ │ ├── capi_windows_386.go
│ │ ├── capi_windows_amd64.go
│ │ ├── capi_windows_arm64.go
│ │ ├── ccgo.go
│ │ ├── ccgo_linux_386.go
│ │ ├── ccgo_linux_amd64.go
│ │ ├── ccgo_linux_arm.go
│ │ ├── ccgo_linux_arm64.go
│ │ ├── ccgo_linux_loong64.go
│ │ ├── ccgo_linux_ppc64le.go
│ │ ├── ccgo_linux_riscv64.go
│ │ ├── ccgo_linux_s390x.go
│ │ ├── dmesg.go
│ │ ├── errno/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── errno_darwin_amd64.go
│ │ │ ├── errno_darwin_arm64.go
│ │ │ ├── errno_freebsd_386.go
│ │ │ ├── errno_freebsd_amd64.go
│ │ │ ├── errno_freebsd_arm.go
│ │ │ ├── errno_freebsd_arm64.go
│ │ │ ├── errno_illumos_amd64.go
│ │ │ ├── errno_linux_386.go
│ │ │ ├── errno_linux_amd64.go
│ │ │ ├── errno_linux_arm.go
│ │ │ ├── errno_linux_arm64.go
│ │ │ ├── errno_linux_loong64.go
│ │ │ ├── errno_linux_mips64le.go
│ │ │ ├── errno_linux_ppc64le.go
│ │ │ ├── errno_linux_riscv64.go
│ │ │ ├── errno_linux_s390x.go
│ │ │ ├── errno_netbsd_amd64.go
│ │ │ ├── errno_netbsd_arm.go
│ │ │ ├── errno_openbsd_386.go
│ │ │ ├── errno_openbsd_amd64.go
│ │ │ ├── errno_openbsd_arm64.go
│ │ │ ├── errno_windows_386.go
│ │ │ ├── errno_windows_amd64.go
│ │ │ └── errno_windows_arm64.go
│ │ ├── etc.go
│ │ ├── etc_musl.go
│ │ ├── fcntl/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── fcntl_darwin_amd64.go
│ │ │ ├── fcntl_darwin_arm64.go
│ │ │ ├── fcntl_freebsd_386.go
│ │ │ ├── fcntl_freebsd_amd64.go
│ │ │ ├── fcntl_freebsd_arm.go
│ │ │ ├── fcntl_freebsd_arm64.go
│ │ │ ├── fcntl_illumos_amd64.go
│ │ │ ├── fcntl_linux_386.go
│ │ │ ├── fcntl_linux_amd64.go
│ │ │ ├── fcntl_linux_arm.go
│ │ │ ├── fcntl_linux_arm64.go
│ │ │ ├── fcntl_linux_loong64.go
│ │ │ ├── fcntl_linux_mips64le.go
│ │ │ ├── fcntl_linux_ppc64le.go
│ │ │ ├── fcntl_linux_riscv64.go
│ │ │ ├── fcntl_linux_s390x.go
│ │ │ ├── fcntl_netbsd_amd64.go
│ │ │ ├── fcntl_netbsd_arm.go
│ │ │ ├── fcntl_openbsd_386.go
│ │ │ ├── fcntl_openbsd_amd64.go
│ │ │ ├── fcntl_openbsd_arm64.go
│ │ │ ├── fcntl_windows_386.go
│ │ │ ├── fcntl_windows_amd64.go
│ │ │ └── fcntl_windows_arm64.go
│ │ ├── fsync.go
│ │ ├── fts/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── fts_darwin_amd64.go
│ │ │ ├── fts_darwin_arm64.go
│ │ │ ├── fts_freebsd_386.go
│ │ │ ├── fts_freebsd_amd64.go
│ │ │ ├── fts_freebsd_arm.go
│ │ │ ├── fts_freebsd_arm64.go
│ │ │ ├── fts_illumos_amd64.go
│ │ │ ├── fts_linux_386.go
│ │ │ ├── fts_linux_amd64.go
│ │ │ ├── fts_linux_arm.go
│ │ │ ├── fts_linux_arm64.go
│ │ │ ├── fts_linux_loong64.go
│ │ │ ├── fts_linux_mips64le.go
│ │ │ ├── fts_linux_ppc64le.go
│ │ │ ├── fts_linux_riscv64.go
│ │ │ ├── fts_linux_s390x.go
│ │ │ ├── fts_netbsd_amd64.go
│ │ │ ├── fts_netbsd_arm.go
│ │ │ ├── fts_openbsd_386.go
│ │ │ ├── fts_openbsd_amd64.go
│ │ │ └── fts_openbsd_arm64.go
│ │ ├── grp/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── grp_darwin_amd64.go
│ │ │ ├── grp_darwin_arm64.go
│ │ │ ├── grp_freebsd_386.go
│ │ │ ├── grp_freebsd_amd64.go
│ │ │ ├── grp_freebsd_arm.go
│ │ │ ├── grp_freebsd_arm64.go
│ │ │ ├── grp_illumos_amd64.go
│ │ │ ├── grp_linux_386.go
│ │ │ ├── grp_linux_amd64.go
│ │ │ ├── grp_linux_arm.go
│ │ │ ├── grp_linux_arm64.go
│ │ │ ├── grp_linux_loong64.go
│ │ │ ├── grp_linux_mips64le.go
│ │ │ ├── grp_linux_ppc64le.go
│ │ │ ├── grp_linux_riscv64.go
│ │ │ ├── grp_linux_s390x.go
│ │ │ ├── grp_netbsd_amd64.go
│ │ │ ├── grp_netbsd_arm.go
│ │ │ ├── grp_openbsd_386.go
│ │ │ ├── grp_openbsd_amd64.go
│ │ │ └── grp_openbsd_arm64.go
│ │ ├── honnef.co/
│ │ │ └── go/
│ │ │ └── netdb/
│ │ │ ├── README.md
│ │ │ └── netdb.go
│ │ ├── int128.go
│ │ ├── ioutil_darwin.go
│ │ ├── ioutil_freebsd.go
│ │ ├── ioutil_illumos.go
│ │ ├── ioutil_linux.go
│ │ ├── ioutil_netbsd.go
│ │ ├── ioutil_openbsd.go
│ │ ├── langinfo/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── langinfo_darwin_amd64.go
│ │ │ ├── langinfo_darwin_arm64.go
│ │ │ ├── langinfo_freebsd_386.go
│ │ │ ├── langinfo_freebsd_amd64.go
│ │ │ ├── langinfo_freebsd_arm.go
│ │ │ ├── langinfo_freebsd_arm64.go
│ │ │ ├── langinfo_illumos_amd64.go
│ │ │ ├── langinfo_linux_386.go
│ │ │ ├── langinfo_linux_amd64.go
│ │ │ ├── langinfo_linux_arm.go
│ │ │ ├── langinfo_linux_arm64.go
│ │ │ ├── langinfo_linux_loong64.go
│ │ │ ├── langinfo_linux_mips64le.go
│ │ │ ├── langinfo_linux_ppc64le.go
│ │ │ ├── langinfo_linux_riscv64.go
│ │ │ ├── langinfo_linux_s390x.go
│ │ │ ├── langinfo_netbsd_amd64.go
│ │ │ ├── langinfo_netbsd_arm.go
│ │ │ ├── langinfo_openbsd_386.go
│ │ │ ├── langinfo_openbsd_amd64.go
│ │ │ └── langinfo_openbsd_arm64.go
│ │ ├── libc.go
│ │ ├── libc32.go
│ │ ├── libc64.go
│ │ ├── libc_386.go
│ │ ├── libc_all.go
│ │ ├── libc_amd64.go
│ │ ├── libc_arm.go
│ │ ├── libc_arm64.go
│ │ ├── libc_darwin.go
│ │ ├── libc_darwin_amd64.go
│ │ ├── libc_darwin_arm64.go
│ │ ├── libc_freebsd.go
│ │ ├── libc_freebsd_386.go
│ │ ├── libc_freebsd_amd64.go
│ │ ├── libc_freebsd_arm.go
│ │ ├── libc_freebsd_arm64.go
│ │ ├── libc_illumos.go
│ │ ├── libc_illumos_amd64.go
│ │ ├── libc_linux.go
│ │ ├── libc_linux_amd64.go
│ │ ├── libc_linux_mips64le.go
│ │ ├── libc_mips64le.go
│ │ ├── libc_musl.go
│ │ ├── libc_musl_linux_386.go
│ │ ├── libc_musl_linux_amd64.go
│ │ ├── libc_musl_linux_arm.go
│ │ ├── libc_musl_linux_arm64.go
│ │ ├── libc_musl_linux_loong64.go
│ │ ├── libc_musl_linux_ppc64le.go
│ │ ├── libc_musl_linux_riscv64.go
│ │ ├── libc_musl_linux_s390x.go
│ │ ├── libc_netbsd.go
│ │ ├── libc_netbsd_amd64.go
│ │ ├── libc_netbsd_arm.go
│ │ ├── libc_openbsd.go
│ │ ├── libc_openbsd_386.go
│ │ ├── libc_openbsd_amd64.go
│ │ ├── libc_openbsd_arm64.go
│ │ ├── libc_unix.go
│ │ ├── libc_unix1.go
│ │ ├── libc_unix2.go
│ │ ├── libc_unix3.go
│ │ ├── libc_windows.go
│ │ ├── libc_windows_386.go
│ │ ├── libc_windows_386.s
│ │ ├── libc_windows_amd64.go
│ │ ├── libc_windows_arm64.go
│ │ ├── libc_windows_arm64.s
│ │ ├── limits/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── limits_darwin_amd64.go
│ │ │ ├── limits_darwin_arm64.go
│ │ │ ├── limits_freebsd_386.go
│ │ │ ├── limits_freebsd_amd64.go
│ │ │ ├── limits_freebsd_arm.go
│ │ │ ├── limits_freebsd_arm64.go
│ │ │ ├── limits_illumos_amd64.go
│ │ │ ├── limits_linux_386.go
│ │ │ ├── limits_linux_amd64.go
│ │ │ ├── limits_linux_arm.go
│ │ │ ├── limits_linux_arm64.go
│ │ │ ├── limits_linux_loong64.go
│ │ │ ├── limits_linux_mips64le.go
│ │ │ ├── limits_linux_ppc64le.go
│ │ │ ├── limits_linux_riscv64.go
│ │ │ ├── limits_linux_s390x.go
│ │ │ ├── limits_netbsd_amd64.go
│ │ │ ├── limits_netbsd_arm.go
│ │ │ ├── limits_openbsd_386.go
│ │ │ ├── limits_openbsd_amd64.go
│ │ │ ├── limits_openbsd_arm64.go
│ │ │ ├── limits_windows_386.go
│ │ │ ├── limits_windows_amd64.go
│ │ │ └── limits_windows_arm64.go
│ │ ├── mem.go
│ │ ├── mem_brk.go
│ │ ├── mem_brk_musl.go
│ │ ├── mem_expvar.go
│ │ ├── mem_musl.go
│ │ ├── memgrind.go
│ │ ├── memgrind_musl.go
│ │ ├── musl_darwin_amd64.go
│ │ ├── musl_darwin_arm64.go
│ │ ├── musl_freebsd_386.go
│ │ ├── musl_freebsd_amd64.go
│ │ ├── musl_freebsd_arm.go
│ │ ├── musl_freebsd_arm64.go
│ │ ├── musl_illumos_amd64.go
│ │ ├── musl_linux_mips64le.go
│ │ ├── musl_netbsd_amd64.go
│ │ ├── musl_netbsd_arm.go
│ │ ├── musl_openbsd_386.go
│ │ ├── musl_openbsd_amd64.go
│ │ ├── musl_openbsd_arm64.go
│ │ ├── musl_windows_386.go
│ │ ├── musl_windows_amd64.go
│ │ ├── musl_windows_arm64.go
│ │ ├── netdb/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── netdb_darwin_amd64.go
│ │ │ ├── netdb_darwin_arm64.go
│ │ │ ├── netdb_freebsd_386.go
│ │ │ ├── netdb_freebsd_amd64.go
│ │ │ ├── netdb_freebsd_arm.go
│ │ │ ├── netdb_freebsd_arm64.go
│ │ │ ├── netdb_illumos_amd64.go
│ │ │ ├── netdb_linux_386.go
│ │ │ ├── netdb_linux_amd64.go
│ │ │ ├── netdb_linux_arm.go
│ │ │ ├── netdb_linux_arm64.go
│ │ │ ├── netdb_linux_loong64.go
│ │ │ ├── netdb_linux_mips64le.go
│ │ │ ├── netdb_linux_ppc64le.go
│ │ │ ├── netdb_linux_riscv64.go
│ │ │ ├── netdb_linux_s390x.go
│ │ │ ├── netdb_netbsd_amd64.go
│ │ │ ├── netdb_netbsd_arm.go
│ │ │ ├── netdb_openbsd_386.go
│ │ │ ├── netdb_openbsd_amd64.go
│ │ │ └── netdb_openbsd_arm64.go
│ │ ├── netinet/
│ │ │ └── in/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── in_darwin_amd64.go
│ │ │ ├── in_darwin_arm64.go
│ │ │ ├── in_freebsd_386.go
│ │ │ ├── in_freebsd_amd64.go
│ │ │ ├── in_freebsd_arm.go
│ │ │ ├── in_freebsd_arm64.go
│ │ │ ├── in_illumos_amd64.go
│ │ │ ├── in_linux_386.go
│ │ │ ├── in_linux_amd64.go
│ │ │ ├── in_linux_arm.go
│ │ │ ├── in_linux_arm64.go
│ │ │ ├── in_linux_loong64.go
│ │ │ ├── in_linux_mips64le.go
│ │ │ ├── in_linux_ppc64le.go
│ │ │ ├── in_linux_riscv64.go
│ │ │ ├── in_linux_s390x.go
│ │ │ ├── in_netbsd_amd64.go
│ │ │ ├── in_netbsd_arm.go
│ │ │ ├── in_openbsd_386.go
│ │ │ ├── in_openbsd_amd64.go
│ │ │ └── in_openbsd_arm64.go
│ │ ├── nodmesg.go
│ │ ├── nofsync.go
│ │ ├── poll/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── poll_darwin_amd64.go
│ │ │ ├── poll_darwin_arm64.go
│ │ │ ├── poll_freebsd_386.go
│ │ │ ├── poll_freebsd_amd64.go
│ │ │ ├── poll_freebsd_arm.go
│ │ │ ├── poll_freebsd_arm64.go
│ │ │ ├── poll_illumos_amd64.go
│ │ │ ├── poll_linux_386.go
│ │ │ ├── poll_linux_amd64.go
│ │ │ ├── poll_linux_arm.go
│ │ │ ├── poll_linux_arm64.go
│ │ │ ├── poll_linux_loong64.go
│ │ │ ├── poll_linux_mips64le.go
│ │ │ ├── poll_linux_ppc64le.go
│ │ │ ├── poll_linux_riscv64.go
│ │ │ ├── poll_linux_s390x.go
│ │ │ ├── poll_netbsd_amd64.go
│ │ │ ├── poll_netbsd_arm.go
│ │ │ ├── poll_openbsd_386.go
│ │ │ ├── poll_openbsd_amd64.go
│ │ │ └── poll_openbsd_arm64.go
│ │ ├── printf.go
│ │ ├── probes.go
│ │ ├── pthread/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── pthread_darwin_amd64.go
│ │ │ ├── pthread_darwin_arm64.go
│ │ │ ├── pthread_freebsd_386.go
│ │ │ ├── pthread_freebsd_amd64.go
│ │ │ ├── pthread_freebsd_arm.go
│ │ │ ├── pthread_freebsd_arm64.go
│ │ │ ├── pthread_illumos_amd64.go
│ │ │ ├── pthread_linux_386.go
│ │ │ ├── pthread_linux_amd64.go
│ │ │ ├── pthread_linux_arm.go
│ │ │ ├── pthread_linux_arm64.go
│ │ │ ├── pthread_linux_loong64.go
│ │ │ ├── pthread_linux_mips64le.go
│ │ │ ├── pthread_linux_ppc64le.go
│ │ │ ├── pthread_linux_riscv64.go
│ │ │ ├── pthread_linux_s390x.go
│ │ │ ├── pthread_netbsd_amd64.go
│ │ │ ├── pthread_netbsd_arm.go
│ │ │ ├── pthread_openbsd_386.go
│ │ │ ├── pthread_openbsd_amd64.go
│ │ │ ├── pthread_openbsd_arm64.go
│ │ │ ├── pthread_windows_386.go
│ │ │ ├── pthread_windows_amd64.go
│ │ │ └── pthread_windows_arm64.go
│ │ ├── pthread.go
│ │ ├── pthread_all.go
│ │ ├── pthread_musl.go
│ │ ├── pwd/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── pwd_darwin_amd64.go
│ │ │ ├── pwd_darwin_arm64.go
│ │ │ ├── pwd_freebsd_386.go
│ │ │ ├── pwd_freebsd_amd64.go
│ │ │ ├── pwd_freebsd_arm.go
│ │ │ ├── pwd_freebsd_arm64.go
│ │ │ ├── pwd_illumos_amd64.go
│ │ │ ├── pwd_linux_386.go
│ │ │ ├── pwd_linux_amd64.go
│ │ │ ├── pwd_linux_arm.go
│ │ │ ├── pwd_linux_arm64.go
│ │ │ ├── pwd_linux_loong64.go
│ │ │ ├── pwd_linux_mips64le.go
│ │ │ ├── pwd_linux_ppc64le.go
│ │ │ ├── pwd_linux_riscv64.go
│ │ │ ├── pwd_linux_s390x.go
│ │ │ ├── pwd_netbsd_amd64.go
│ │ │ ├── pwd_netbsd_arm.go
│ │ │ ├── pwd_openbsd_386.go
│ │ │ ├── pwd_openbsd_amd64.go
│ │ │ └── pwd_openbsd_arm64.go
│ │ ├── rtl.go
│ │ ├── scanf.go
│ │ ├── signal/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── more_darwin_amd64.go
│ │ │ ├── more_darwin_arm64.go
│ │ │ ├── more_freebsd_386.go
│ │ │ ├── more_freebsd_amd64.go
│ │ │ ├── more_freebsd_arm.go
│ │ │ ├── more_freebsd_arm64.go
│ │ │ ├── more_illumos_amd64.go
│ │ │ ├── more_linux_386.go
│ │ │ ├── more_linux_amd64.go
│ │ │ ├── more_linux_arm.go
│ │ │ ├── more_linux_arm64.go
│ │ │ ├── more_linux_loong64.go
│ │ │ ├── more_linux_mips64le.go
│ │ │ ├── more_linux_ppc64le.go
│ │ │ ├── more_linux_riscv64.go
│ │ │ ├── more_linux_s390x.go
│ │ │ ├── more_netbsd_amd64.go
│ │ │ ├── more_netbsd_arm.go
│ │ │ ├── more_openbsd_386.go
│ │ │ ├── more_openbsd_amd64.go
│ │ │ ├── more_openbsd_arm64.go
│ │ │ ├── signal_darwin_amd64.go
│ │ │ ├── signal_darwin_arm64.go
│ │ │ ├── signal_freebsd_386.go
│ │ │ ├── signal_freebsd_amd64.go
│ │ │ ├── signal_freebsd_arm.go
│ │ │ ├── signal_freebsd_arm64.go
│ │ │ ├── signal_illumos_amd64.go
│ │ │ ├── signal_linux_386.go
│ │ │ ├── signal_linux_amd64.go
│ │ │ ├── signal_linux_arm.go
│ │ │ ├── signal_linux_arm64.go
│ │ │ ├── signal_linux_loong64.go
│ │ │ ├── signal_linux_mips64le.go
│ │ │ ├── signal_linux_ppc64le.go
│ │ │ ├── signal_linux_riscv64.go
│ │ │ ├── signal_linux_s390x.go
│ │ │ ├── signal_netbsd_amd64.go
│ │ │ ├── signal_netbsd_arm.go
│ │ │ ├── signal_openbsd_386.go
│ │ │ ├── signal_openbsd_amd64.go
│ │ │ ├── signal_openbsd_arm64.go
│ │ │ ├── signal_windows_386.go
│ │ │ ├── signal_windows_amd64.go
│ │ │ └── signal_windows_arm64.go
│ │ ├── stdatomic.go
│ │ ├── stdio/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── stdio_darwin_amd64.go
│ │ │ ├── stdio_darwin_arm64.go
│ │ │ ├── stdio_freebsd_386.go
│ │ │ ├── stdio_freebsd_amd64.go
│ │ │ ├── stdio_freebsd_arm.go
│ │ │ ├── stdio_freebsd_arm64.go
│ │ │ ├── stdio_illumos_amd64.go
│ │ │ ├── stdio_linux_386.go
│ │ │ ├── stdio_linux_amd64.go
│ │ │ ├── stdio_linux_arm.go
│ │ │ ├── stdio_linux_arm64.go
│ │ │ ├── stdio_linux_loong64.go
│ │ │ ├── stdio_linux_mips64le.go
│ │ │ ├── stdio_linux_ppc64le.go
│ │ │ ├── stdio_linux_riscv64.go
│ │ │ ├── stdio_linux_s390x.go
│ │ │ ├── stdio_netbsd_amd64.go
│ │ │ ├── stdio_netbsd_arm.go
│ │ │ ├── stdio_openbsd_386.go
│ │ │ ├── stdio_openbsd_amd64.go
│ │ │ ├── stdio_openbsd_arm64.go
│ │ │ ├── stdio_windows_386.go
│ │ │ ├── stdio_windows_amd64.go
│ │ │ └── stdio_windows_arm64.go
│ │ ├── stdlib/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── stdlib_darwin_amd64.go
│ │ │ ├── stdlib_darwin_arm64.go
│ │ │ ├── stdlib_freebsd_386.go
│ │ │ ├── stdlib_freebsd_amd64.go
│ │ │ ├── stdlib_freebsd_arm.go
│ │ │ ├── stdlib_freebsd_arm64.go
│ │ │ ├── stdlib_illumos_amd64.go
│ │ │ ├── stdlib_linux_386.go
│ │ │ ├── stdlib_linux_amd64.go
│ │ │ ├── stdlib_linux_arm.go
│ │ │ ├── stdlib_linux_arm64.go
│ │ │ ├── stdlib_linux_loong64.go
│ │ │ ├── stdlib_linux_mips64le.go
│ │ │ ├── stdlib_linux_ppc64le.go
│ │ │ ├── stdlib_linux_riscv64.go
│ │ │ ├── stdlib_linux_s390x.go
│ │ │ ├── stdlib_netbsd_amd64.go
│ │ │ ├── stdlib_netbsd_arm.go
│ │ │ ├── stdlib_openbsd_386.go
│ │ │ ├── stdlib_openbsd_amd64.go
│ │ │ ├── stdlib_openbsd_arm64.go
│ │ │ ├── stdlib_windows_386.go
│ │ │ ├── stdlib_windows_amd64.go
│ │ │ └── stdlib_windows_arm64.go
│ │ ├── straceoff.go
│ │ ├── straceon.go
│ │ ├── surface.new
│ │ ├── surface.old
│ │ ├── sync.go
│ │ ├── sys/
│ │ │ ├── socket/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_freebsd_386.go
│ │ │ │ ├── capi_freebsd_amd64.go
│ │ │ │ ├── capi_freebsd_arm.go
│ │ │ │ ├── capi_freebsd_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── capi_netbsd_amd64.go
│ │ │ │ ├── capi_netbsd_arm.go
│ │ │ │ ├── capi_openbsd_386.go
│ │ │ │ ├── capi_openbsd_amd64.go
│ │ │ │ ├── capi_openbsd_arm64.go
│ │ │ │ ├── socket_darwin_amd64.go
│ │ │ │ ├── socket_darwin_arm64.go
│ │ │ │ ├── socket_freebsd_386.go
│ │ │ │ ├── socket_freebsd_amd64.go
│ │ │ │ ├── socket_freebsd_arm.go
│ │ │ │ ├── socket_freebsd_arm64.go
│ │ │ │ ├── socket_illumos_amd64.go
│ │ │ │ ├── socket_linux_386.go
│ │ │ │ ├── socket_linux_amd64.go
│ │ │ │ ├── socket_linux_arm.go
│ │ │ │ ├── socket_linux_arm64.go
│ │ │ │ ├── socket_linux_loong64.go
│ │ │ │ ├── socket_linux_mips64le.go
│ │ │ │ ├── socket_linux_ppc64le.go
│ │ │ │ ├── socket_linux_riscv64.go
│ │ │ │ ├── socket_linux_s390x.go
│ │ │ │ ├── socket_netbsd_amd64.go
│ │ │ │ ├── socket_netbsd_arm.go
│ │ │ │ ├── socket_openbsd_386.go
│ │ │ │ ├── socket_openbsd_amd64.go
│ │ │ │ └── socket_openbsd_arm64.go
│ │ │ ├── stat/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_freebsd_386.go
│ │ │ │ ├── capi_freebsd_amd64.go
│ │ │ │ ├── capi_freebsd_arm.go
│ │ │ │ ├── capi_freebsd_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── capi_netbsd_amd64.go
│ │ │ │ ├── capi_netbsd_arm.go
│ │ │ │ ├── capi_openbsd_386.go
│ │ │ │ ├── capi_openbsd_amd64.go
│ │ │ │ ├── capi_openbsd_arm64.go
│ │ │ │ ├── capi_windows_386.go
│ │ │ │ ├── capi_windows_amd64.go
│ │ │ │ ├── capi_windows_arm64.go
│ │ │ │ ├── stat_darwin_amd64.go
│ │ │ │ ├── stat_darwin_arm64.go
│ │ │ │ ├── stat_freebsd_386.go
│ │ │ │ ├── stat_freebsd_amd64.go
│ │ │ │ ├── stat_freebsd_arm.go
│ │ │ │ ├── stat_freebsd_arm64.go
│ │ │ │ ├── stat_illumos_amd64.go
│ │ │ │ ├── stat_linux_386.go
│ │ │ │ ├── stat_linux_amd64.go
│ │ │ │ ├── stat_linux_arm.go
│ │ │ │ ├── stat_linux_arm64.go
│ │ │ │ ├── stat_linux_loong64.go
│ │ │ │ ├── stat_linux_mips64le.go
│ │ │ │ ├── stat_linux_ppc64le.go
│ │ │ │ ├── stat_linux_riscv64.go
│ │ │ │ ├── stat_linux_s390x.go
│ │ │ │ ├── stat_netbsd_amd64.go
│ │ │ │ ├── stat_netbsd_arm.go
│ │ │ │ ├── stat_openbsd_386.go
│ │ │ │ ├── stat_openbsd_amd64.go
│ │ │ │ ├── stat_openbsd_arm64.go
│ │ │ │ ├── stat_windows_386.go
│ │ │ │ ├── stat_windows_amd64.go
│ │ │ │ └── stat_windows_arm64.go
│ │ │ └── types/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── types_darwin_amd64.go
│ │ │ ├── types_darwin_arm64.go
│ │ │ ├── types_freebsd_386.go
│ │ │ ├── types_freebsd_amd64.go
│ │ │ ├── types_freebsd_arm.go
│ │ │ ├── types_freebsd_arm64.go
│ │ │ ├── types_illumos_amd64.go
│ │ │ ├── types_linux_386.go
│ │ │ ├── types_linux_amd64.go
│ │ │ ├── types_linux_arm.go
│ │ │ ├── types_linux_arm64.go
│ │ │ ├── types_linux_loong64.go
│ │ │ ├── types_linux_mips64le.go
│ │ │ ├── types_linux_ppc64le.go
│ │ │ ├── types_linux_riscv64.go
│ │ │ ├── types_linux_s390x.go
│ │ │ ├── types_netbsd_amd64.go
│ │ │ ├── types_netbsd_arm.go
│ │ │ ├── types_openbsd_386.go
│ │ │ ├── types_openbsd_amd64.go
│ │ │ ├── types_openbsd_arm64.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ └── types_windows_arm64.go
│ │ ├── syscall_musl.go
│ │ ├── termios/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── termios_darwin_amd64.go
│ │ │ ├── termios_darwin_arm64.go
│ │ │ ├── termios_freebsd_386.go
│ │ │ ├── termios_freebsd_amd64.go
│ │ │ ├── termios_freebsd_arm.go
│ │ │ ├── termios_freebsd_arm64.go
│ │ │ ├── termios_illumos_amd64.go
│ │ │ ├── termios_linux_386.go
│ │ │ ├── termios_linux_amd64.go
│ │ │ ├── termios_linux_arm.go
│ │ │ ├── termios_linux_arm64.go
│ │ │ ├── termios_linux_loong64.go
│ │ │ ├── termios_linux_mips64le.go
│ │ │ ├── termios_linux_ppc64le.go
│ │ │ ├── termios_linux_riscv64.go
│ │ │ ├── termios_linux_s390x.go
│ │ │ ├── termios_netbsd_amd64.go
│ │ │ ├── termios_netbsd_arm.go
│ │ │ ├── termios_openbsd_386.go
│ │ │ ├── termios_openbsd_amd64.go
│ │ │ └── termios_openbsd_arm64.go
│ │ ├── time/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── time_darwin_amd64.go
│ │ │ ├── time_darwin_arm64.go
│ │ │ ├── time_freebsd_386.go
│ │ │ ├── time_freebsd_amd64.go
│ │ │ ├── time_freebsd_arm.go
│ │ │ ├── time_freebsd_arm64.go
│ │ │ ├── time_illumos_amd64.go
│ │ │ ├── time_linux_386.go
│ │ │ ├── time_linux_amd64.go
│ │ │ ├── time_linux_arm.go
│ │ │ ├── time_linux_arm64.go
│ │ │ ├── time_linux_loong64.go
│ │ │ ├── time_linux_mips64le.go
│ │ │ ├── time_linux_ppc64le.go
│ │ │ ├── time_linux_riscv64.go
│ │ │ ├── time_linux_s390x.go
│ │ │ ├── time_netbsd_amd64.go
│ │ │ ├── time_netbsd_arm.go
│ │ │ ├── time_openbsd_386.go
│ │ │ ├── time_openbsd_amd64.go
│ │ │ ├── time_openbsd_arm64.go
│ │ │ ├── time_windows_386.go
│ │ │ ├── time_windows_amd64.go
│ │ │ └── time_windows_arm64.go
│ │ ├── tls_linux_amd64.go
│ │ ├── tls_linux_amd64.s
│ │ ├── unistd/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── unistd_darwin_amd64.go
│ │ │ ├── unistd_darwin_arm64.go
│ │ │ ├── unistd_freebsd_386.go
│ │ │ ├── unistd_freebsd_amd64.go
│ │ │ ├── unistd_freebsd_arm.go
│ │ │ ├── unistd_freebsd_arm64.go
│ │ │ ├── unistd_illumos_amd64.go
│ │ │ ├── unistd_linux_386.go
│ │ │ ├── unistd_linux_amd64.go
│ │ │ ├── unistd_linux_arm.go
│ │ │ ├── unistd_linux_arm64.go
│ │ │ ├── unistd_linux_loong64.go
│ │ │ ├── unistd_linux_mips64le.go
│ │ │ ├── unistd_linux_ppc64le.go
│ │ │ ├── unistd_linux_riscv64.go
│ │ │ ├── unistd_linux_s390x.go
│ │ │ ├── unistd_netbsd_amd64.go
│ │ │ ├── unistd_netbsd_arm.go
│ │ │ ├── unistd_openbsd_386.go
│ │ │ ├── unistd_openbsd_amd64.go
│ │ │ ├── unistd_openbsd_arm64.go
│ │ │ ├── unistd_windows_386.go
│ │ │ ├── unistd_windows_amd64.go
│ │ │ └── unistd_windows_arm64.go
│ │ ├── utime/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── utime_darwin_amd64.go
│ │ │ ├── utime_darwin_arm64.go
│ │ │ ├── utime_freebsd_386.go
│ │ │ ├── utime_freebsd_amd64.go
│ │ │ ├── utime_freebsd_arm.go
│ │ │ ├── utime_freebsd_arm64.go
│ │ │ ├── utime_illumos_amd64.go
│ │ │ ├── utime_linux_386.go
│ │ │ ├── utime_linux_amd64.go
│ │ │ ├── utime_linux_arm.go
│ │ │ ├── utime_linux_arm64.go
│ │ │ ├── utime_linux_loong64.go
│ │ │ ├── utime_linux_mips64le.go
│ │ │ ├── utime_linux_ppc64le.go
│ │ │ ├── utime_linux_riscv64.go
│ │ │ ├── utime_linux_s390x.go
│ │ │ ├── utime_netbsd_amd64.go
│ │ │ ├── utime_netbsd_arm.go
│ │ │ ├── utime_openbsd_386.go
│ │ │ ├── utime_openbsd_amd64.go
│ │ │ ├── utime_openbsd_arm64.go
│ │ │ ├── utime_windows_386.go
│ │ │ ├── utime_windows_amd64.go
│ │ │ └── utime_windows_arm64.go
│ │ ├── uuid/
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── uuid/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── uuid_darwin_amd64.go
│ │ │ │ ├── uuid_darwin_arm64.go
│ │ │ │ ├── uuid_illumos_amd64.go
│ │ │ │ ├── uuid_linux_386.go
│ │ │ │ ├── uuid_linux_amd64.go
│ │ │ │ ├── uuid_linux_arm.go
│ │ │ │ ├── uuid_linux_arm64.go
│ │ │ │ ├── uuid_linux_loong64.go
│ │ │ │ ├── uuid_linux_mips64le.go
│ │ │ │ ├── uuid_linux_ppc64le.go
│ │ │ │ ├── uuid_linux_riscv64.go
│ │ │ │ └── uuid_linux_s390x.go
│ │ │ ├── uuid_freebsd_386.go
│ │ │ ├── uuid_freebsd_amd64.go
│ │ │ ├── uuid_freebsd_arm.go
│ │ │ ├── uuid_freebsd_arm64.go
│ │ │ ├── uuid_netbsd_amd64.go
│ │ │ ├── uuid_netbsd_arm.go
│ │ │ ├── uuid_openbsd_386.go
│ │ │ ├── uuid_openbsd_amd64.go
│ │ │ └── uuid_openbsd_arm64.go
│ │ ├── watch.go
│ │ └── wctype/
│ │ ├── capi_darwin_amd64.go
│ │ ├── capi_darwin_arm64.go
│ │ ├── capi_freebsd_386.go
│ │ ├── capi_freebsd_amd64.go
│ │ ├── capi_freebsd_arm.go
│ │ ├── capi_freebsd_arm64.go
│ │ ├── capi_illumos_amd64.go
│ │ ├── capi_linux_386.go
│ │ ├── capi_linux_amd64.go
│ │ ├── capi_linux_arm.go
│ │ ├── capi_linux_arm64.go
│ │ ├── capi_linux_loong64.go
│ │ ├── capi_linux_mips64le.go
│ │ ├── capi_linux_ppc64le.go
│ │ ├── capi_linux_riscv64.go
│ │ ├── capi_linux_s390x.go
│ │ ├── capi_netbsd_amd64.go
│ │ ├── capi_netbsd_arm.go
│ │ ├── capi_openbsd_386.go
│ │ ├── capi_openbsd_amd64.go
│ │ ├── capi_openbsd_arm64.go
│ │ ├── capi_windows_386.go
│ │ ├── capi_windows_amd64.go
│ │ ├── capi_windows_arm64.go
│ │ ├── wctype_darwin_amd64.go
│ │ ├── wctype_darwin_arm64.go
│ │ ├── wctype_freebsd_386.go
│ │ ├── wctype_freebsd_amd64.go
│ │ ├── wctype_freebsd_arm.go
│ │ ├── wctype_freebsd_arm64.go
│ │ ├── wctype_illumos_amd64.go
│ │ ├── wctype_linux_386.go
│ │ ├── wctype_linux_amd64.go
│ │ ├── wctype_linux_arm.go
│ │ ├── wctype_linux_arm64.go
│ │ ├── wctype_linux_loong64.go
│ │ ├── wctype_linux_mips64le.go
│ │ ├── wctype_linux_ppc64le.go
│ │ ├── wctype_linux_riscv64.go
│ │ ├── wctype_linux_s390x.go
│ │ ├── wctype_netbsd_amd64.go
│ │ ├── wctype_netbsd_arm.go
│ │ ├── wctype_openbsd_386.go
│ │ ├── wctype_openbsd_amd64.go
│ │ ├── wctype_openbsd_arm64.go
│ │ ├── wctype_windows_386.go
│ │ ├── wctype_windows_amd64.go
│ │ └── wctype_windows_arm64.go
│ ├── mathutil/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README
│ │ ├── binarylog.go
│ │ ├── bits.go
│ │ ├── builder.json
│ │ ├── envelope.go
│ │ ├── int.go
│ │ ├── mathutil.go
│ │ ├── nist-sts-2-1-1-report
│ │ ├── permute.go
│ │ ├── poly.go
│ │ ├── primes.go
│ │ ├── rat.go
│ │ ├── rnd.go
│ │ ├── sqr.go
│ │ ├── sqr_std.go
│ │ ├── tables.go
│ │ └── test_deps.go
│ ├── memory/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── LICENSE-GO
│ │ ├── LICENSE-LOGO
│ │ ├── LICENSE-MMAP-GO
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── builder.json
│ │ ├── counters.go
│ │ ├── memory.go
│ │ ├── memory32.go
│ │ ├── memory64.go
│ │ ├── mmap_unix.go
│ │ ├── mmap_windows.go
│ │ ├── nocounters.go
│ │ ├── trace_disabled.go
│ │ └── trace_enabled.go
│ └── sqlite/
│ ├── AUTHORS
│ ├── CHANGELOG.md
│ ├── CONTRIBUTORS
│ ├── GOVERNANCE.md
│ ├── HACKING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── SQLITE-LICENSE
│ ├── backup.go
│ ├── builder.json
│ ├── conn.go
│ ├── convert.go
│ ├── dmesg.go
│ ├── doc.go
│ ├── driver.go
│ ├── error.go
│ ├── fcntl.go
│ ├── issue120.diff
│ ├── lib/
│ │ ├── defs.go
│ │ ├── hooks.go
│ │ ├── hooks_linux_arm64.go
│ │ ├── mutex.go
│ │ ├── sqlite_darwin_amd64.go
│ │ ├── sqlite_darwin_arm64.go
│ │ ├── sqlite_freebsd_386.go
│ │ ├── sqlite_freebsd_amd64.go
│ │ ├── sqlite_freebsd_arm.go
│ │ ├── sqlite_freebsd_arm64.go
│ │ ├── sqlite_linux_386.go
│ │ ├── sqlite_linux_amd64.go
│ │ ├── sqlite_linux_arm.go
│ │ ├── sqlite_linux_arm64.go
│ │ ├── sqlite_linux_loong64.go
│ │ ├── sqlite_linux_ppc64le.go
│ │ ├── sqlite_linux_riscv64.go
│ │ ├── sqlite_linux_s390x.go
│ │ ├── sqlite_netbsd_amd64.go
│ │ ├── sqlite_openbsd_amd64.go
│ │ ├── sqlite_openbsd_arm64.go
│ │ ├── sqlite_windows.go
│ │ └── sqlite_windows_386.go
│ ├── mutex.go
│ ├── nodmesg.go
│ ├── norlimit.go
│ ├── pre_update_hook.go
│ ├── result.go
│ ├── rlimit.go
│ ├── rows.go
│ ├── rulimit.go
│ ├── sqlite.go
│ ├── stmt.go
│ ├── tpch.sh
│ ├── tx.go
│ ├── unconvert.sh
│ ├── vtab/
│ │ ├── doc.go
│ │ └── vtab.go
│ └── vtab.go
├── modules.txt
└── pgregory.net/
└── rapid/
├── .editorconfig
├── .gitattributes
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── TODO.md
├── collections.go
├── combinators.go
├── data.go
├── doc.go
├── engine.go
├── floats.go
├── generator.go
├── integers.go
├── make.go
├── persist.go
├── shrink.go
├── statemachine.go
├── strings.go
├── utils.go
└── vis.go
================================================
FILE CONTENTS
================================================
================================================
FILE: .beads/.gitignore
================================================
# SQLite databases
*.db
*.db?*
*.db-journal
*.db-wal
*.db-shm
# Daemon runtime files
daemon.lock
daemon.log
daemon.pid
bd.sock
sync-state.json
last-touched
.sync.lock
# Local version tracking (prevents upgrade notification spam after git ops)
.local_version
# Legacy database files
db.sqlite
bd.db
# Worktree redirect file (contains relative path to main repo's .beads/)
# Must not be committed as paths would be wrong in other clones
redirect
# Merge artifacts (temporary files from 3-way merge)
beads.base.jsonl
beads.base.meta.json
beads.left.jsonl
beads.left.meta.json
beads.right.jsonl
beads.right.meta.json
# bv (beads viewer) lock file
.bv.lock
# NOTE: Do NOT add negation patterns (e.g., !issues.jsonl) here.
# They would override fork protection in .git/info/exclude, allowing
# contributors to accidentally commit upstream issue databases.
# The JSONL files (issues.jsonl, interactions.jsonl) and config files
# are tracked by git by default since no pattern above ignores them.
# Local history backups
.br_history/
================================================
FILE: .beads/README.md
================================================
# Beads - AI-Native Issue Tracking
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
## What is Beads?
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
## Quick Start
### Essential Commands
```bash
# Create new issues
bd create "Add user authentication"
# View all issues
bd list
# View issue details
bd show <issue-id>
# Update issue status
bd update <issue-id> --status in_progress
bd update <issue-id> --status done
# Sync with git remote
bd sync
```
### Working with Issues
Issues in Beads are:
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
- **Branch-aware**: Issues can follow your branch workflow
- **Always in sync**: Auto-syncs with your commits
## Why Beads?
✨ **AI-Native Design**
- Built specifically for AI-assisted development workflows
- CLI-first interface works seamlessly with AI coding agents
- No context switching to web UIs
🚀 **Developer Focused**
- Issues live in your repo, right next to your code
- Works offline, syncs when you push
- Fast, lightweight, and stays out of your way
🔧 **Git Integration**
- Automatic sync with git commits
- Branch-aware issue tracking
- Intelligent JSONL merge resolution
## Get Started with Beads
Try Beads in your own projects:
```bash
# Install Beads
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
# Initialize in your repo
bd init
# Create your first issue
bd create "Try out Beads"
```
## Learn More
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
- **Quick Start Guide**: Run `bd quickstart`
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
---
*Beads: Issue tracking that moves at the speed of thought* ⚡
================================================
FILE: .beads/correlation_feedback.jsonl
================================================
{"commit_sha":"8855d76f67556c672c924cdf32543ff4592aa2b1","bead_id":"bv-35qc","feedback_at":"2025-12-18T01:49:21.78059Z","feedback_by":"BrownHill","type":"confirm","reason":"Testing feedback system","original_conf":0.99}
================================================
FILE: .beads/feedback.json
================================================
{
"version": "1.0",
"created_at": "2025-12-16T16:48:54.588218-05:00",
"updated_at": "2025-12-16T16:49:06.367846-05:00",
"events": [],
"adjustments": [
{
"name": "PageRank",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "Betweenness",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "BlockerRatio",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "Staleness",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "PriorityBoost",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "TimeToImpact",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "Urgency",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
},
{
"name": "Risk",
"adjustment": 1,
"samples": 0,
"last_updated": "2025-12-16T16:49:06.367846-05:00"
}
],
"stats": {
"total_accepted": 0,
"total_ignored": 0,
"avg_accept_score": 0,
"avg_ignore_score": 0
}
}
================================================
FILE: .beads/issues.jsonl
================================================
{"id":"bd-14zq","title":"Treat blocked status as non-actionable","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-21T09:56:23.099692432Z","created_by":"ubuntu","updated_at":"2026-01-21T09:59:49.059692546Z","closed_at":"2026-01-21T09:59:49.059601154Z","close_reason":"Status blocked is informational; actionable ignores status","compaction_level":0,"original_size":0}
{"id":"bd-18cb","title":"Baseline + golden outputs for analysis/triage","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:26:26.866352997Z","created_by":"ubuntu","updated_at":"2026-01-21T19:32:27.951532012Z","closed_at":"2026-01-21T19:32:27.951486216Z","close_reason":"Baseline + golden outputs captured","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-18cb","depends_on_id":"bd-20y5","type":"discovered-from","created_at":"2026-01-21T19:26:26.894977126Z","created_by":"ubuntu"}]}
{"id":"bd-1a2t","title":"TOON: Set up dependency chain for implementation beads","description":"Link the TOON implementation beads with proper dependencies.\n\n## Dependency Order\n1. bd-xgf7 (tru wrapper) - no deps\n2. bd-2ew5 (format.go) - depends on bd-xgf7\n3. bd-2juk (newRobotEncoder) - depends on bd-2ew5\n4. bd-1zid (env vars) - depends on bd-2juk\n5. Unit tests - depends on bd-2juk\n6. E2E tests - depends on all above\n7. Docs - depends on implementation\n\n## Parent\nbd-t3c (Integrate TOON into bv) is the parent orchestration bead.","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-25T07:23:47.137480009Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:37.741706911Z","closed_at":"2026-02-01T07:06:37.741676584Z","close_reason":"TOON dependency chain complete - all implementation beads (bd-xgf7, bd-2ew5, bd-2juk) are already implemented","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-1gfr","title":"Extreme optimization round 3 (impact scoring)","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-21T19:01:51.928220842Z","created_by":"ubuntu","updated_at":"2026-01-21T19:20:06.025562471Z","closed_at":"2026-01-21T19:20:06.025516594Z","close_reason":"Round 3 completed: baseline+golden captured, profiling+matrix done, blockerCounts precompute lever implemented, verification and benchmarks completed.","compaction_level":0,"original_size":0}
{"id":"bd-1lbi","title":"TOON: Add --stats flag for token savings display","description":"Add optional `--stats` flag to show token savings on stderr.\n\n## Usage\n```bash\nbv --robot-triage --format toon --stats\n# Output: TOON encoded (2456 chars → 1180 chars, 52% savings)\n```\n\n## Implementation\n- Compare JSON byte size vs TOON byte size\n- Print stats to stderr\n- Similar to tru --stats behavior","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-25T07:23:00.113866115Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:56.609734209Z","closed_at":"2026-02-01T07:06:56.609715603Z","close_reason":"Already implemented - --stats flag shows token savings on stderr, estimateTokens function in main.go","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-1m4u","title":"Optimize refresh time from 5s to <500ms","description":"## Summary\nInvestigate and optimize the 5-second refresh time to achieve sub-second updates.\n\n## Context\n- GitHub Issue #70 reports refreshing feels slow (~5s)\n- Need to profile and identify bottlenecks\n- Likely candidates: file polling, DB queries, UI re-render\n\n## Requirements\n1. Profile current refresh cycle to identify bottleneck\n2. Optimize the slowest component\n3. Target: <500ms refresh time\n4. Maintain correctness (no stale data)\n\n## Investigation Steps\n1. Add timing instrumentation to refresh cycle\n2. Measure: file stat, DB query, item filtering, UI render\n3. Identify which phase takes >1s\n\n## Potential Optimizations\n- File watching instead of polling (fsnotify)\n- Incremental DB queries (only changed items)\n- Virtual list rendering (only visible items)\n- Background refresh with UI update batching\n\n## Files to Investigate\n- pkg/ui/model.go - Main update loop\n- pkg/ui/refresh.go - Refresh logic (if exists)\n- pkg/storage/ - Database queries\n\n## Acceptance Criteria\n- [ ] Identify root cause of 5s refresh\n- [ ] Implement fix for <500ms refresh\n- [ ] No regression in correctness\n- [ ] Add --profile flag for future debugging","notes":"Sync reload uses pooled loader + max line buffer; skips insights/graph/board rebuilds unless view is active; attention overlay recomputed if open. Auto-enables background mode after >1s reloads (opt-out BV_BACKGROUND_MODE=0). Board/graph toggles re-apply filters to refresh views. Fixed async issue cloning when pooled issues are in use to avoid pool reuse corrupting background tasks.\nPerf check: BV_ROBOT=1 go run ./cmd/bv --profile-startup --profile-json using .beads/issues.jsonl -> load_jsonl 178.824141ms, total_with_load 270.508948ms, phase2_total 78.239557ms, recommendations: startup <500ms.","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-23T05:03:33.882102418Z","created_by":"ubuntu","updated_at":"2026-02-09T18:42:12.555715763Z","closed_at":"2026-02-09T18:42:12.555695815Z","close_reason":"done","compaction_level":0,"original_size":0}
{"id":"bd-1tgr","title":"Profile triage hotspots (buildQuickWins) with bench+pprof","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:28:59.352972969Z","created_by":"ubuntu","updated_at":"2026-01-21T17:55:36.529803466Z","closed_at":"2026-01-21T17:55:36.529747801Z","close_reason":"done","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1tgr","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:28:59.453094315Z","created_by":"ubuntu"}],"comments":[{"id":60,"issue_id":"bd-1tgr","author":"Dicklesworthstone","text":"## Profiling Complete\n\n**buildQuickWins is NOT a hotspot** - dropped from profile (cum < 40ms on 696 issues).\n\n### Real Triage Hotspots (CPU):\n1. NewAnalyzer: 12.67% cumulative - graph construction\n2. ComputeTriageFromAnalyzer: 10.33% cumulative\n3. ComputeImpactScoresFromStats: 3.81% flat\n4. buildRecommendationsFromTriageScores: 3.69% cumulative\n5. UnblocksMap: 3.44% cumulative\n\n### Root Cause: Memory Allocation Pressure\n- mallocgc: 36% cumulative\n- memclrNoHeapPointers: 28% flat\n- GC overhead: 23% cumulative\n\nOptimization should focus on reducing allocations in:\n- Graph construction (NewAnalyzer)\n- Map operations (UnblocksMap, mapassign)\n- Slice growth (growslice)\n","created_at":"2026-01-21T17:55:29Z"}]}
{"id":"bd-1ty1","title":"Extreme optimization round 2 (analysis/triage perf)","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-21T18:18:21.173249196Z","created_by":"ubuntu","updated_at":"2026-01-21T18:45:10.835213758Z","closed_at":"2026-01-21T18:45:10.835117457Z","close_reason":"Round 2 perf loop complete: baseline+golden captured, profiling+matrix done, unblocks map refactor landed, verification/benchmarks completed.","compaction_level":0,"original_size":0}
{"id":"bd-1wse","title":"Optimize graph-build allocations (one lever)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:30:03.430896354Z","created_by":"ubuntu","updated_at":"2026-01-21T18:08:20.615023672Z","closed_at":"2026-01-21T18:07:28.799992439Z","close_reason":"Implemented compact adjacency graph; verification in bd-guup","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1wse","depends_on_id":"bd-29yy","type":"blocks","created_at":"2026-01-21T17:30:07.999799597Z","created_by":"ubuntu"},{"issue_id":"bd-1wse","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:30:04.814361394Z","created_by":"ubuntu"}],"comments":[{"id":64,"issue_id":"bd-1wse","author":"Dicklesworthstone","text":"## Graph-Build Optimization Complete\n\nReplaced Gonum's map-backed DirectedGraph with compactDirectedGraph using adjacency lists.\n\n### Benchmark Results (696 issues)\n\n| Benchmark | Before | After | Improvement |\n|-----------|--------|-------|-------------|\n| FullTriage | 67ms | 1.3ms | 52x faster |\n| TriagePhase1Only | 57ms | 1.2ms | 48x faster |\n| FullAnalysis | 46ms | 477μs | 96x faster |\n| FastAnalysis | 23ms | 471μs | 49x faster |\n| GraphBuild | 1.2ms | 323μs | 3.7x faster |\n\n### Memory Improvements (GraphBuild only)\n| Metric | Before | After | Improvement |\n|--------|--------|-------|-------------|\n| Bytes/op | 735KB | 444KB | 40% less |\n| Allocs/op | 4,647 | 2,512 | 46% fewer |\n\n### Changes\n- compactDirectedGraph uses []int64 adjacency lists vs map[int64]set\n- Pre-allocates node array at known size\n- Eliminates map grow/rehash overhead\n- All tests pass\n","created_at":"2026-01-21T18:08:20Z"}]}
{"id":"bd-1xc4","title":"Verify (golden checksums + benchmarks) + report","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:26:46.690973893Z","created_by":"ubuntu","updated_at":"2026-01-21T21:47:15.905565280Z","closed_at":"2026-01-21T21:47:15.905514364Z","close_reason":"done","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-1xc4","depends_on_id":"bd-20y5","type":"discovered-from","created_at":"2026-01-21T19:26:46.720872351Z","created_by":"ubuntu"}],"comments":[{"id":65,"issue_id":"bd-1xc4","author":"GreenHarbor","text":"## Verification Report (2026-01-21)\n\n### Golden Tests - ALL PASS\n\n| Package | Test | Status |\n|---------|------|--------|\n| pkg/analysis | TestValidateGoldenFiles (5 subtests) | PASS |\n| pkg/analysis | TestTriageSanity_GoldenRecommendationOrder | PASS |\n| pkg/export | TestGraphRender_GoldenSVG (4 subtests) | PASS |\n| pkg/export | TestGraphExport_GoldenMermaid (3 subtests) | PASS |\n| pkg/ui | TestGraphView_GoldenASCII (4 subtests) | PASS |\n\n### Real-Data Benchmarks (712 issues)\n\n| Benchmark | Result | Notes |\n|-----------|--------|-------|\n| FullTriage | ~1.7ms | Matches documented 1.3ms (696 issues) |\n| TriagePhase1Only | ~34-42ms | With async Phase 2 |\n| FullAnalysis | ~11.5-22ms | Complete graph analysis |\n| FastAnalysis | ~13-21ms | Phase 1 only |\n| GraphBuild | ~13-54ms | Graph construction |\n| IssueLoading | ~377-629ms | JSONL parsing |\n\n### Quick Benchmarks (Synthetic Data)\n\n| Benchmark | Result |\n|-----------|--------|\n| FullAnalysis_ManyCycles20 | 51.4us |\n| FullAnalysis_Sparse100 | 215us |\n| FullAnalysis_Sparse1000 | 2.6ms |\n| FullAnalysis_Dense100 | 394us |\n| GraphModel_Rebuild_Layered1000 | 842us |\n| GraphModel_Rebuild_Layered10000 | 10.2ms |\n\n### Full Test Suite - ALL PASS\n\nAll 25 packages pass including tests/e2e (211.6s).\n\n### Verification Summary\n\n1. Golden files match - All golden test comparisons pass\n2. Performance targets met - FullTriage ~1.7ms matches documented ~1.3ms\n3. Compact graph optimization verified - Real-data benchmarks confirm the 52x improvement documented in README\n4. No regressions detected - All tests pass, benchmarks within expected ranges\n\nVerified by: GreenHarbor (claude-code/opus-4.5)\n","created_at":"2026-01-21T21:47:07Z"}]}
{"id":"bd-1zid","title":"TOON: Add BV_OUTPUT_FORMAT env var support","description":"Add environment variable support for format selection.\n\n## Precedence\n1. CLI flag `--format toon` (highest)\n2. `BV_OUTPUT_FORMAT=toon`\n3. `TOON_DEFAULT_FORMAT=toon`\n4. Default: json\n\n## Implementation\n```go\nfunc getRobotFormat() string {\n if format := os.Getenv(\"BV_OUTPUT_FORMAT\"); format != \"\" {\n return format\n }\n if format := os.Getenv(\"TOON_DEFAULT_FORMAT\"); format != \"\" {\n return format\n }\n return \"json\"\n}\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T07:19:16.872852012Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:42.357129978Z","closed_at":"2026-02-01T07:06:42.357112285Z","close_reason":"Already implemented - BV_OUTPUT_FORMAT env var is checked in resolveRobotOutputFormat at main.go:6787","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-20y5","title":"Extreme performance optimization round (analysis pipeline)","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-21T19:26:12.552718945Z","created_by":"ubuntu","updated_at":"2026-01-21T21:59:55.063655085Z","closed_at":"2026-01-21T21:59:55.063571197Z","close_reason":"Completed: All 5 subtasks completed - baseline/golden outputs, single-lever optimization, verification, JSON compaction, and opportunity matrix profiling. See OPPORTUNITY_MATRIX.md for future optimization roadmap.","compaction_level":0,"original_size":0}
{"id":"bd-220f","title":"Optimize triage unblocks map allocations","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:16:51.675308867Z","created_by":"ubuntu","updated_at":"2026-01-21T17:18:08.460882978Z","closed_at":"2026-01-21T17:18:08.459051197Z","close_reason":"Completed","compaction_level":0,"original_size":0}
{"id":"bd-23lq","title":"Fix Solarized Dark / non-truecolor terminal color compatibility (GH #101)","description":"## Context\nGitHub issue #101 filed by mhpaler (2026-02-07). On macOS Terminal.app with Solarized Dark profile, the right-hand detail pane is rendered with a solid ANSI Green (#2) background making text unreadable. Bottom status bar also has low-contrast color blocks.\n\n## Root Cause Analysis\nThe codebase uses hex color values everywhere (Dracula theme: #50FA7B for green, #282A36 for dark bg, #1A3D2A for green badge bg). Charmbracelet colorprofile package Convert() method downgrades colors: TrueColor → ANSI256 → ANSI (16 colors). When the terminal is ANSI (16-color):\n1. ansi.Convert16(c) maps #50FA7B → ANSI Green (slot #2)\n2. In Solarized Dark, ANSI Green (slot #2) is a bright green background color\n3. Multiple background fills use green-adjacent hex colors that all degrade to ANSI Green as background\n4. The glamour markdown renderer docBgPtr is hardcoded to #282a36 which also gets degraded\n\n## Chosen Approach: Color-profile-aware styling\nAt startup, detect the terminal color profile using colorprofile.Detect(). Then:\n1. If TrueColor or ANSI256: use current Dracula hex colors (no change for most users)\n2. If ANSI (16) or below: use terminal default bg (no explicit bg), use ANSI foreground colors that work across all palettes (white, default, bold)\n3. For glamour markdown: set docBgPtr to nil (transparent) when not TrueColor\n\nThis approach preserves the beautiful Dracula look for TrueColor users (the majority) while making the app usable on 16-color terminals.\n\n## Implementation Plan\n\n### Step 1: Add color profile detection to theme.go\n- Import colorprofile package\n- Detect profile once at init time\n- Export a TermProfile variable\n\n### Step 2: Update styles.go background colors\n- For ANSI mode: replace all Background() calls with conditional logic\n- Use lipgloss.NoColor{} for backgrounds when profile < TrueColor\n- Keep foreground colors but use ANSI-safe palette (e.g., lipgloss.Color(\"7\") for white)\n\n### Step 3: Fix markdown.go glamour rendering\n- Set docBgPtr to nil when profile < TrueColor\n- This makes markdown render with transparent bg, using terminal default\n\n### Step 4: Update model.go status bar\n- Lines 5422-5901 have extensive bg color usage in the status bar\n- Apply same conditional: skip bg colors for ANSI mode\n- Use bold/dim instead of color for visual hierarchy\n\n## Key Files\n- pkg/ui/theme.go (add profile detection, conditional color functions)\n- pkg/ui/styles.go (conditional backgrounds)\n- pkg/ui/markdown.go (conditional docBgPtr)\n- pkg/ui/model.go (status bar colors, lines 5422-5901)\n- vendor/github.com/charmbracelet/colorprofile (reference for API)\n\n## Testing\n- Test on both TrueColor (iTerm2/WezTerm) and ANSI (macOS Terminal with Solarized)\n- Verify no visual regression for TrueColor users\n- Verify readability on Solarized Dark/Light, Monokai, default terminal profiles\n- Use TERM=xterm (forces 16-color) for local testing\n\n## Considerations\n- Must NOT break the experience for TrueColor users (most users)\n- Solarized is very widely used; this is a real usability bug\n- The colorprofile package is already vendored, so no new deps\n- Consider adding a --no-bg or --theme CLI flag for users who want explicit control","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-02-08T18:17:38.046656489Z","created_by":"ubuntu","updated_at":"2026-02-09T17:42:04.024443138Z","closed_at":"2026-02-09T17:42:04.024420987Z","close_reason":"Implemented color profile detection with ThemeBg/ThemeFg helpers in theme.go. Replaced all hardcoded lipgloss.Color hex values in velocity_comparison.go, visuals.go, model.go. Fixed markdown_test.go. All tests pass.","external_ref":"gh:Dicklesworthstone/beads_viewer#101","source_repo":".","compaction_level":0,"original_size":0,"labels":["bug","color","terminal-compat","ui"],"comments":[{"id":68,"issue_id":"bd-23lq","author":"Dicklesworthstone","text":"IMPLEMENTATION OPTIMIZATION: To minimize code touches across 4 files (theme.go, styles.go, markdown.go, model.go lines 5422-5901), create centralized helper functions in theme.go:\n\nvar TermProfile colorprofile.Profile // detected once at init\n\nfunc ThemeBg(hex string) lipgloss.TerminalColor {\n if TermProfile < colorprofile.TrueColor { return lipgloss.NoColor{} }\n return lipgloss.Color(hex)\n}\n\nfunc ThemeFg(hex string) lipgloss.TerminalColor {\n if TermProfile < colorprofile.ANSI256 { return lipgloss.ANSIColor(7) } // white\n return lipgloss.Color(hex)\n}\n\nThen replace direct hex references with ThemeBg()/ThemeFg() calls. This centralizes the conditional logic in ONE place rather than adding if-statements across hundreds of lines in model.go. If the profile changes (e.g., user sets TERM after startup), only the helpers need updating.","created_at":"2026-02-08T18:59:32Z"}]}
{"id":"bd-29b3","title":"Profile + opportunity matrix (identify top hotspots)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:26:33.601983923Z","created_by":"ubuntu","updated_at":"2026-01-21T21:59:43.034124196Z","closed_at":"2026-01-21T21:59:43.034077237Z","close_reason":"Completed: Created OPPORTUNITY_MATRIX.md with 12 optimization opportunities identified from CPU/memory profiling. Document includes detailed analysis, implementation roadmap, and success criteria.","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-29b3","depends_on_id":"bd-20y5","type":"discovered-from","created_at":"2026-01-21T19:26:33.631753288Z","created_by":"ubuntu"}]}
{"id":"bd-29yy","title":"Profile graph-build allocations (Gonum build path)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:29:44.927865045Z","created_by":"ubuntu","updated_at":"2026-01-21T18:01:11.802831432Z","closed_at":"2026-01-21T18:01:11.802742084Z","close_reason":"done","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-29yy","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:29:45.228769634Z","created_by":"ubuntu"}],"comments":[{"id":63,"issue_id":"bd-29yy","author":"Dicklesworthstone","text":"## Graph-Build Profiling Complete\n\n### Memory Allocation Breakdown (874MB total for 951 iterations)\n| Component | Flat | % | Cumulative |\n|-----------|------|---|------------|\n| NewAnalyzer | 369MB | 42% | 749MB (86%) |\n| DirectedGraph.SetEdge | 263MB | 30% | 263MB |\n| DirectedGraph.AddNode | 53MB | 6% | 90MB |\n| bufio.NewReaderSize | 50MB | 6% | 50MB |\n| set.Ints.Add | 37MB | 4% | 37MB |\n| DirectedGraph.NewEdge | 23MB | 3% | 23MB |\n\n### CPU Breakdown\n| Component | Cumulative % |\n|-----------|-------------|\n| NewAnalyzer | 61% |\n| DirectedGraph.SetEdge | 27% |\n| mapassign_fast64 | 24% |\n| mallocgc | 19% |\n| GC overhead | 14% |\n| DirectedGraph.AddNode | 9% |\n\n### Root Cause\nGonum's DirectedGraph uses **map-backed edge sets** which cause:\n1. Heavy allocation in SetEdge (263MB)\n2. Map grow/rehash overhead (17% CPU in table.grow)\n3. GC pressure from small allocations\n\n### Recommended Optimization (for bd-1wse)\nReplace Gonum's DirectedGraph with a compact adjacency-list implementation:\n- Pre-allocate node array at known size\n- Use []int64 adjacency lists instead of map-backed sets\n- Eliminates map overhead entirely\n\nBenchmark: 735KB/op, 4647 allocs/op for 696 issues\n","created_at":"2026-01-21T18:01:04Z"}]}
{"id":"bd-2ew5","title":"TOON: Add --format flag and Format enum (pkg/robot/format.go)","description":"Add output format infrastructure.\n\n## Files\n- `pkg/robot/format.go` (NEW)\n- `cmd/bv/main.go` (modify flag definitions)\n\n## Implementation\n\n```go\ntype Format string\n\nconst (\n FormatJSON Format = \"json\"\n FormatTOON Format = \"toon\"\n FormatAuto Format = \"auto\"\n)\n\nfunc Encode(payload any, format Format, w io.Writer) error {\n switch format {\n case FormatTOON:\n output, err := encodeToon(payload)\n if err != nil {\n return err\n }\n _, err = w.Write([]byte(output))\n return err\n case FormatAuto:\n // Try TOON, fallback to JSON\n default:\n return json.NewEncoder(w).Encode(payload)\n }\n}\n```\n\n## CLI Flag\n```go\noutputFormat := flag.String(\"format\", \"\",\n \"Structured output format for --robot-* commands: json or toon\")\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-25T07:17:45.188873455Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:21.449513971Z","closed_at":"2026-02-01T07:06:21.449495165Z","close_reason":"Already implemented - --format flag exists in main.go:59, Format enum handled via string constant","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-2juk","title":"TOON: Update newRobotEncoder for format support","description":"Modify `newRobotEncoder` to accept format parameter.\n\n## File\n`cmd/bv/main.go` (line ~6583)\n\n## Current\n```go\nfunc newRobotEncoder(w io.Writer) *json.Encoder {\n encoder := json.NewEncoder(w)\n if os.Getenv(\"BV_PRETTY_JSON\") == \"1\" {\n encoder.SetIndent(\"\", \" \")\n }\n return encoder\n}\n```\n\n## New\n```go\nfunc newRobotEncoder(w io.Writer, format string) *robotEncoder {\n return &robotEncoder{\n w: w,\n format: Format(format),\n pretty: os.Getenv(\"BV_PRETTY_JSON\") == \"1\",\n }\n}\n```\n\n## Impact\n35+ callsites need updating from:\n`encoder := newRobotEncoder(os.Stdout)`\nto:\n`encoder := newRobotEncoder(os.Stdout, *robotFormat)`","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-25T07:18:29.261346652Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:25.226203135Z","closed_at":"2026-02-01T07:06:25.226183929Z","close_reason":"Already implemented - newRobotEncoder at main.go:6780 switches on robotOutputFormat for toon/json","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-2kxo","title":"TASK: bv --robot-schema output for JSON Schema","description":"Problem: agents lack a canonical JSON schema for robot outputs, which hurts validation and tool integration.\n\nGoal:\n- Add `--robot-schema` (or `bv robot-docs schemas`) that emits JSON Schema for each robot command output.\n- Provide a top-level map keyed by command name (robot-triage, robot-plan, etc.).\n- Include schema versioning and link to output envelope.\n\nAcceptance:\n- Command returns JSON/TOON only on stdout.\n- Schemas cover at least: robot-triage, robot-next, robot-plan, robot-insights, robot-priority, robot-graph.\n- README/robot-help updated with usage example.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T10:09:58.036791807Z","created_by":"ubuntu","updated_at":"2026-02-01T07:05:41.843764095Z","closed_at":"2026-02-01T07:05:41.843734840Z","close_reason":"Implemented --robot-schema with JSON Schema output for all robot commands","source_repo":".","compaction_level":0,"original_size":0,"labels":["agent-friendly","robot","schema"],"dependencies":[{"issue_id":"bd-2kxo","depends_on_id":"bd-c5g","type":"discovered-from","created_at":"2026-01-25T10:09:58.036791807Z","created_by":"ubuntu"}]}
{"id":"bd-2lmf","title":"TOON: Add Go unit tests for format encoding","description":"Unit tests for TOON encoding.\n\n## File\n`pkg/robot/toon_test.go`\n\n## Test Cases\n```go\nfunc TestTriageResultTOON(t *testing.T) {\n triage := analysis.TriageResult{...}\n output, err := encodeToon(triage)\n require.NoError(t, err)\n}\n\nfunc TestTabularArray(t *testing.T) {\n recs := []analysis.Recommendation{{...}, {...}}\n output, err := encodeToon(recs)\n require.NoError(t, err)\n require.Contains(t, output, \"[2]{\")\n}\n\nfunc TestRoundTrip(t *testing.T) {\n // Encode to TOON, decode with tru, compare\n}\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T07:21:30.761349396Z","created_by":"ubuntu","updated_at":"2026-02-01T07:08:58.124558723Z","closed_at":"2026-02-01T07:08:58.124538205Z","close_reason":"Added 4 comprehensive TOON unit tests: TestTOONOutputFormat, TestTOONRoundTrip, TestTOONTokenStats, TestTOONSchemaOutput","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-2rih","title":"Test: Solarized and non-TrueColor terminal color compatibility","description":"## What\nTest suite and manual verification script for the color compatibility fix (bd-23lq).\n\n## Automated Tests (Go unit tests)\n\n### pkg/ui/theme_test.go (NEW or MODIFY existing)\n- TestColorProfile_Detection: verify Detect() returns a valid profile\n- TestConditionalBgColor_TrueColor: when profile=TrueColor, returns hex color\n- TestConditionalBgColor_ANSI: when profile=ANSI, returns NoColor\n- TestConditionalFgColor_TrueColor: returns hex foreground\n- TestConditionalFgColor_ANSI: returns ANSI-safe color index\n\n### pkg/ui/styles_test.go\n- TestStylesBgTransparent_ANSI: verify no explicit bg in ANSI mode\n- TestStylesBgPresent_TrueColor: verify bg colors present in TrueColor mode\n\n### pkg/ui/markdown_test.go\n- TestGlamourDocBg_TrueColor: docBgPtr = #282a36\n- TestGlamourDocBg_ANSI: docBgPtr = nil (transparent)\n\n## Manual Test Script (scripts/test_color_compat.sh)\n```bash\n#\\!/usr/bin/env bash\n# Test bv rendering under different color profiles\n# Run this on a machine with bv binary available\n\nlog() { printf \"[%s] [%s] %s\\n\" \"$(date -Iseconds)\" \"$1\" \"$2\"; }\n\n# Test 1: Force 16-color mode\nlog \"TEST_1\" \"Starting: TERM=xterm (16 colors)\"\nTERM=xterm bv --robot-triage > /dev/null 2>&1 && log \"TEST_1\" \"PASS: No crash in 16-color mode\" || log \"TEST_1\" \"FAIL: Crash in 16-color mode\"\n\n# Test 2: Force 256-color mode\nlog \"TEST_2\" \"Starting: TERM=xterm-256color\"\nTERM=xterm-256color bv --robot-triage > /dev/null 2>&1 && log \"TEST_2\" \"PASS: No crash in 256-color mode\" || log \"TEST_2\" \"FAIL: Crash in 256-color mode\"\n\n# Test 3: TrueColor mode (default)\nlog \"TEST_3\" \"Starting: COLORTERM=truecolor\"\nCOLORTERM=truecolor bv --robot-triage > /dev/null 2>&1 && log \"TEST_3\" \"PASS: No crash in TrueColor mode\" || log \"TEST_3\" \"FAIL: Crash in TrueColor mode\"\n\n# Test 4: Dumb terminal\nlog \"TEST_4\" \"Starting: TERM=dumb\"\nTERM=dumb bv --robot-triage > /dev/null 2>&1 && log \"TEST_4\" \"PASS: No crash in dumb terminal\" || log \"TEST_4\" \"FAIL: Crash in dumb terminal\"\n```\n\n## Acceptance Criteria\n- All Go unit tests pass: go test ./pkg/ui/ -v -run TestColor\n- Manual script exits 0 on all 4 modes\n- Visual inspection: no unreadable text on Solarized Dark with TERM=xterm\n- No regression: TrueColor rendering unchanged (screenshot comparison)","status":"closed","priority":2,"issue_type":"task","created_at":"2026-02-08T18:36:44.477292394Z","created_by":"ubuntu","updated_at":"2026-02-09T17:45:01.923512201Z","closed_at":"2026-02-09T17:45:01.923476494Z","close_reason":"Added 8 color profile tests in theme_test.go, verified crash safety across 16-color/256-color/dumb terminal modes. Updated markdown_test.go in prior commit.","external_ref":"gh:Dicklesworthstone/beads_viewer#101/test","source_repo":".","compaction_level":0,"original_size":0,"labels":["color","terminal-compat","testing"],"dependencies":[{"issue_id":"bd-2rih","depends_on_id":"bd-23lq","type":"blocks","created_at":"2026-02-08T18:36:49.867294615Z","created_by":"ubuntu"}],"comments":[{"id":69,"issue_id":"bd-2rih","author":"Dicklesworthstone","text":"MANUAL TEST SCOPE: The scripts/test_color_compat.sh script uses bv --robot-triage (JSON output) which does NOT test TUI color rendering. It tests crash-safety under different TERM settings. This is still valuable (verifying no panic from colorprofile.Detect() in different terminals) but does NOT verify visual correctness. For visual testing, a human must run bare 'bv' (interactive TUI) under TERM=xterm and visually inspect that backgrounds are transparent and text is readable. This is inherently manual and cannot be automated.","created_at":"2026-02-08T19:26:43Z"}]}
{"id":"bd-2v50","title":"FEATURE: bv robot-docs JSON (capabilities + examples)","description":"Problem: robot-help is plain text and not machine-readable for agents.\n\nGoal:\n- Add a machine-readable robot docs entrypoint (e.g., `bv robot-docs <topic>` or `--robot-docs`) that returns JSON/TOON.\n- Topics should include: guide (quickstart), commands (flag inventory), examples (copy-paste), exit-codes/error handling.\n- Include version + output_format and keep stdout data-only.\n\nAcceptance:\n- New command documented in README/--robot-help.\n- Output is stable JSON with top-level metadata (generated_at, data_hash, version).\n- Works with `--format json|toon` and respects env BV_OUTPUT_FORMAT.","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-25T10:11:55.341236131Z","created_by":"ubuntu","updated_at":"2026-02-02T02:23:38.004213375Z","closed_at":"2026-02-02T02:23:38.004194901Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["agent-friendly","docs","robot"],"dependencies":[{"issue_id":"bd-2v50","depends_on_id":"bd-c5g","type":"discovered-from","created_at":"2026-01-25T10:11:55.341236131Z","created_by":"ubuntu"}]}
{"id":"bd-2x6d","title":"FEATURE: bv robot-docs JSON (capabilities + examples)","description":"Problem: robot-help is plain text and not machine-readable for agents.\n\nGoal:\n- Add a machine-readable robot docs entrypoint (e.g., `bv robot-docs <topic>` or `--robot-docs`) that returns JSON/TOON.\n- Topics should include: guide (quickstart), commands (flag inventory), examples (copy-paste), exit-codes/error handling.\n- Include version + output_format and keep stdout data-only.\n\nAcceptance:\n- New command documented in README/--robot-help.\n- Output is stable JSON with top-level metadata (generated_at, data_hash, version).\n- Works with `--format json|toon` and respects env BV_OUTPUT_FORMAT.","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-25T10:09:44.244353633Z","created_by":"ubuntu","updated_at":"2026-01-25T10:12:23.835510553Z","closed_at":"2026-01-25T10:12:23.835492829Z","close_reason":"Duplicate of bd-2v50 (same robot-docs task)","source_repo":".","compaction_level":0,"original_size":0,"labels":["agent-friendly","docs","robot"],"dependencies":[{"issue_id":"bd-2x6d","depends_on_id":"bd-c5g","type":"discovered-from","created_at":"2026-01-25T10:09:44.244353633Z","created_by":"ubuntu"}]}
{"id":"bd-2xui","title":"Implement one lever (impact scoring hotspot, score>=2.0)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:02:17.834258355Z","created_by":"ubuntu","updated_at":"2026-01-21T19:19:47.835467517Z","closed_at":"2026-01-21T19:19:47.835415279Z","close_reason":"Implemented impact scoring lever: precompute blockerCounts slice in NewAnalyzer during edge pass (preserves duplicate semantics) and reuse in ComputeImpactScoresFromStats. Bench (BEADS_DIR=/tmp/bv_snapshot_20260121_140244): B/op 744KB → 697KB (~6% less), allocs 3524 → 3511; hyperfine mean 1.556s → 1.408s (~9% faster).","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-2xui","depends_on_id":"bd-1gfr","type":"discovered-from","created_at":"2026-01-21T19:02:17.864903580Z","created_by":"ubuntu"}]}
{"id":"bd-31ym","title":"Capture golden output + baseline benchmarks (triage/analysis)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T18:18:29.906465752Z","created_by":"ubuntu","updated_at":"2026-01-21T18:24:14.777510771Z","closed_at":"2026-01-21T18:24:14.777460346Z","close_reason":"Captured deterministic triage golden output + baseline benchmarks (FullTriage 1.146ms/op, 1.10MB/op, 3517 allocs; GraphBuild 309µs/op, 446KB/op, 2522 allocs; FullAnalysis 507µs/op, 515KB/op, 3350 allocs). Golden hash 83e38a7e7ad5ff9c6aaa93cbb690558af31352a0507e12a11ccf3e10cd666dd4.","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-31ym","depends_on_id":"bd-1ty1","type":"discovered-from","created_at":"2026-01-21T18:18:29.937129843Z","created_by":"ubuntu"}]}
{"id":"bd-334a","title":"Verify outputs + re-run benchmarks/tests (impact scoring)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:02:26.704288526Z","created_by":"ubuntu","updated_at":"2026-01-21T19:19:58.139035074Z","closed_at":"2026-01-21T19:19:58.138990199Z","close_reason":"Verification: triage hash matches golden (BEADS_DIR=/tmp/bv_snapshot_20260121_140244; sha256 8e20a4a4572c22b0a2ce3ed74ff58082cb0e78507c404acf33c02704439fed80). Tests: go test ./pkg/analysis -run 'Priority' (pass).","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-334a","depends_on_id":"bd-1gfr","type":"discovered-from","created_at":"2026-01-21T19:02:26.736306176Z","created_by":"ubuntu"}]}
{"id":"bd-33ar","title":"Run real-data triage benchmark + record baseline","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:30:46.476744114Z","created_by":"ubuntu","updated_at":"2026-01-21T18:09:10.665979246Z","closed_at":"2026-01-21T18:09:10.665929983Z","close_reason":"done","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-33ar","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:30:46.499074096Z","created_by":"ubuntu"},{"issue_id":"bd-33ar","depends_on_id":"bd-3kom","type":"blocks","created_at":"2026-01-21T17:30:46.508621584Z","created_by":"ubuntu"}]}
{"id":"bd-37ki","title":"Add fallback release notes workflow for manual releases","description":"When GoReleaser fails and binaries are uploaded manually through GitHub UI, the release gets no release notes. Need a fallback workflow that auto-generates notes for any release with minimal/empty body.\n\nImplementation:\n\n1. Create .github/workflows/release-notes-fallback.yml:\n triggers:\n on:\n release:\n types: [created, edited]\n permissions:\n contents: write\n\n2. Detection logic:\n - Fetch release body via gh api\n - Skip if body length >= 100 chars (already has meaningful notes)\n - Skip if body contains \"## \" (has markdown headers = intentional content)\n - Skip if body contains idempotency marker \"<!-- auto-generated-notes -->\"\n - Skip draft releases (only process published releases)\n\n3. Previous tag detection:\n ```bash\n CURRENT_TAG=\"${{ github.event.release.tag_name }}\"\n PREVIOUS_TAG=$(git describe --tags --abbrev=0 --exclude=\"$CURRENT_TAG\" 2>/dev/null || echo \"\")\n if [ -z \"$PREVIOUS_TAG\" ]; then\n PREVIOUS_TAG=$(git rev-list --max-parents=0 HEAD | head -1)\n fi\n ```\n\n4. Generate release notes via GitHub API:\n gh api repos/$REPO/releases/generate-notes \\\n -f tag_name=\"$CURRENT_TAG\" \\\n -f previous_tag_name=\"$PREVIOUS_TAG\" \\\n --jq .body\n\n5. Apply changelog filters matching .goreleaser.yaml (lines 33-38):\n - Exclude lines starting with \"* docs:\" or \"* test:\" or \"* chore:\"\n - Preserve all other commit types (feat, fix, refactor, perf, etc.)\n\n6. Append idempotency marker to prevent duplicate runs:\n BODY=\"$GENERATED_NOTES\\n\\n<!-- auto-generated-notes -->\"\n\n7. Update release:\n gh api repos/$REPO/releases/$RELEASE_ID \\\n -X PATCH \\\n -f body=\"$BODY\"\n\n8. Error handling:\n - GitHub API rate limit (429): retry with exponential backoff (3 attempts)\n - Permission errors (403): fail with clear message about token permissions\n - Empty generated notes: append \"No notable changes in this release.\" instead of leaving blank\n - Tag format validation: support both v-prefixed (v1.2.3) and bare (1.2.3) tags\n - First release (no previous tag): include all commits from initial commit\n\nEDGE CASES:\n- Release body has markdown but < 100 chars: check for \"## \" header to avoid overwriting intentional content\n- Previous tag is ancient (1000+ commits): GitHub API handles pagination, notes may be truncated\n- Multiple releases created rapidly: each triggers independently; idempotency marker prevents double-write\n- GoReleaser runs AFTER manual release: GoReleaser updates body, next edit event re-triggers but marker prevents overwrite\n- Non-semver tag format (release-20260206): git describe still works, API generates notes normally\n- Release body has HTML entities: API returns raw markdown, no entity issues\n\nTESTS:\n\nIntegration Tests (GitHub Actions workflow_dispatch for manual testing):\n- test_manual_release_empty_body: create release with empty body -> notes generated\n- test_manual_release_short_body: body = \"bugfix\" -> notes generated (< 100 chars)\n- test_manual_release_long_body: body = 200 chars of real notes -> skipped (has content)\n- test_manual_release_with_headers: body = \"## Notes\\nSomething\" -> skipped (has ## header)\n- test_idempotency: run workflow twice -> body unchanged on second run (marker detected)\n- test_first_release: no previous tag -> all commits included\n- test_draft_release: draft release -> skipped (only published)\n\nE2E Tests (run in CI after workflow creation):\n- test_goreleaser_then_fallback: GoReleaser succeeds -> fallback skips (body already populated)\n- test_goreleaser_fail_then_manual: GoReleaser fails, manual upload -> fallback fills notes\n- test_filter_docs_test_commits: verify docs: and test: commits excluded from generated notes\n- test_empty_changelog: only docs/test commits between tags -> \"No notable changes\" message\n\nManual Verification Checklist:\n- [ ] Create manual release via GitHub UI with empty body\n- [ ] Verify workflow triggers within 60 seconds\n- [ ] Verify release body populated with filtered changelog\n- [ ] Verify idempotency marker present in body source\n- [ ] Re-trigger workflow -> body unchanged\n- [ ] Compare output with GoReleaser-generated notes for consistency\n\nGitHub issue: beads_viewer #99","status":"closed","priority":3,"issue_type":"feature","created_at":"2026-02-07T03:08:15.092410581Z","created_by":"ubuntu","updated_at":"2026-02-09T17:49:49.469781885Z","closed_at":"2026-02-09T17:49:49.469757009Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-39ct","title":"Compact JSON for robot outputs (BV_PRETTY_JSON opt-in)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T21:38:47.621151284Z","created_by":"ubuntu","updated_at":"2026-01-21T21:39:16.309747617Z","closed_at":"2026-01-21T21:39:16.309673067Z","close_reason":"Completed: switched robot JSON encoding to compact by default","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-39ct","depends_on_id":"bd-20y5","type":"discovered-from","created_at":"2026-01-21T21:38:47.658648445Z","created_by":"ubuntu"}]}
{"id":"bd-3c0m","title":"Extreme optimization round: triage + graph build + real-data benchmark","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-21T17:28:41.018872529Z","created_by":"ubuntu","updated_at":"2026-01-21T17:48:38.448990116Z","closed_at":"2026-01-21T17:48:38.448933660Z","close_reason":"done","compaction_level":0,"original_size":0,"comments":[{"id":59,"issue_id":"bd-3c0m","author":"Dicklesworthstone","text":"## Epic Complete: Benchmark Infrastructure Ready\n\n### Baseline Results (696 real issues)\n| Benchmark | Time/op | Allocs/op |\n|-----------|---------|-----------|\n| FullTriage | 67ms | 5011 |\n| TriagePhase1Only | 57ms | 5013 |\n| FullAnalysis | 46ms | 4692 |\n| FastAnalysis | 23ms | 4692 |\n| GraphBuild | 25ms | 4647 |\n| IssueLoading | 471ms | 16633 |\n\n### Profiling Insights\n**CPU hotspots:** mallocgc 36%, memclr 28%, GC 23%, NewAnalyzer 13%\n**Memory:** bufio.NewReaderSize 50MB, NewAnalyzer 50MB, UnblocksMap 21MB\n\n### Files Added\n- pkg/analysis/bench_realdata_test.go\n\nChild beads can now proceed with specific optimizations.\n","created_at":"2026-01-21T17:48:26Z"}]}
{"id":"bd-3far","title":"Update all dependencies to latest stable versions","description":"## Go Dependency Update for beads_viewer\n\n### Steps\n1. `cd /data/projects/beads_viewer`\n2. `go get -u ./...` -- update all dependencies\n3. `go mod tidy` -- clean up go.mod and go.sum\n4. `go vet ./...` -- verify no issues\n5. `go build ./cmd/bv/` -- verify compilation\n6. `go test ./...` -- run all tests\n7. Run `bv --robot-triage` on a test workspace to verify TUI and robot commands work\n\n### Key Dependencies to Watch\n- `github.com/charmbracelet/bubbletea` -- TUI framework, breaking changes possible\n- `github.com/charmbracelet/lipgloss` -- styling, often updated alongside bubbletea\n- `github.com/go-git/go-git/v5` -- git operations, check API stability\n- `github.com/mattn/go-sqlite3` -- SQLite bindings, cgo dependency\n- `github.com/pgvector/pgvector-go` -- vector search, if used\n\n### Verification\n- `bv --version` shows correct version\n- TUI mode launches without errors\n- All robot commands produce valid JSON\n- Static site export works (`bv --export-pages /tmp/test-pages`)","status":"open","priority":3,"issue_type":"task","created_at":"2026-02-11T06:19:37.420319339Z","created_by":"ubuntu","updated_at":"2026-02-11T07:44:29.116693593Z","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-3fqy","title":"TOON: Update --help and robot help docs","description":"Document TOON format in CLI help.\n\n## Files\n- `cmd/bv/main.go` - Flag help text\n- README.md - Usage examples\n\n## Help Text\n```\nOUTPUT FORMAT\n --format toon Token-optimized output (~50% fewer tokens than JSON)\n BV_OUTPUT_FORMAT=toon Environment variable alternative\n```\n\n## README Addition\n```markdown\n### Token-Optimized Output (TOON)\n\nFor AI agents, TOON format reduces token usage by ~50%:\n\n\\`\\`\\`bash\nbv --robot-triage --format toon\nbv --robot-insights --format toon\nexport BV_OUTPUT_FORMAT=toon\n\\`\\`\\`\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T07:20:37.084755450Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:50.264355110Z","closed_at":"2026-02-01T07:06:50.264332086Z","close_reason":"Already implemented - --robot-help includes format documentation, --format flag has help text","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-3kom","title":"Add real-data triage benchmark (project .beads)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:30:38.406848107Z","created_by":"ubuntu","updated_at":"2026-01-21T18:08:50.521491132Z","closed_at":"2026-01-21T18:08:50.521440948Z","close_reason":"done","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3kom","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:30:38.414637954Z","created_by":"ubuntu"}]}
{"id":"bd-3om2","title":"Graph snapshot top bottleneck should show zero-score leader","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-21T10:08:06.149975183Z","created_by":"ubuntu","updated_at":"2026-01-21T16:57:24.609851346Z","closed_at":"2026-01-21T16:57:24.609274198Z","close_reason":"done","compaction_level":0,"original_size":0}
{"id":"bd-3qlo","title":"Handle sqlite export remove failures","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-21T09:46:55.072304638Z","created_by":"ubuntu","updated_at":"2026-01-21T09:49:21.498452777Z","closed_at":"2026-01-21T09:49:21.498032796Z","close_reason":"Handled os.Remove failure in SQLite export","compaction_level":0,"original_size":0}
{"id":"bd-3s1x","title":"Verify outputs + rerun benchmarks/tests; document perf deltas","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T18:18:52.437952525Z","created_by":"ubuntu","updated_at":"2026-01-21T18:45:00.682841569Z","closed_at":"2026-01-21T18:45:00.682657142Z","close_reason":"Verification complete: go test ./pkg/analysis -run 'UnblocksInvariance|PerfInvariants' (pass), sha256sum -c /tmp/bv_golden_outputs/golden_checksums.txt OK, benchmarked FullTriage with BEADS_DIR snapshot (1.25ms/op, 733KB/op, 3482 allocs).","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3s1x","depends_on_id":"bd-1ty1","type":"discovered-from","created_at":"2026-01-21T18:18:52.503130994Z","created_by":"ubuntu"}]}
{"id":"bd-3s4c","title":"Optimize buildQuickWins allocations (one lever)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:29:07.684700968Z","created_by":"ubuntu","updated_at":"2026-01-21T17:56:07.643534633Z","closed_at":"2026-01-21T17:56:07.643482755Z","close_reason":"wont_fix","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3s4c","depends_on_id":"bd-1tgr","type":"blocks","created_at":"2026-01-21T17:29:11.738379306Z","created_by":"ubuntu"},{"issue_id":"bd-3s4c","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:29:11.552516856Z","created_by":"ubuntu"}],"comments":[{"id":61,"issue_id":"bd-3s4c","author":"Dicklesworthstone","text":"Profiling (bd-1tgr) showed buildQuickWins is NOT a hotspot - cumulative time <40ms on 696 issues. No optimization needed. Closing as won't_fix.","created_at":"2026-01-21T17:56:00Z"}]}
{"id":"bd-3v9s","title":"Replace hardcoded bd references with br throughout","description":"bv still emits hardcoded bd (old Go binary) commands in robot output, triage recommendations, markdown exports, and emit-script mode. All should use br (beads_rust). This is a bug since bd is deprecated.\n\nALL AFFECTED LOCATIONS (17 sites across 4 files):\n\ncmd/bv/main.go:\n- Line 2779: robot-next ClaimCmd (bd update %s --status=in_progress)\n- Line 2780: robot-next ShowCmd (bd show %s)\n- Line 2997: emit-script claim comment\n- Line 2999: emit-script show command\n- Line 3007: emit-script quick actions (top pick)\n- Line 3012: emit-script quick actions (all items)\n\npkg/analysis/triage.go:\n- Line 964: buildCommands() listReady (bd ready)\n- Line 965: buildCommands() listBlocked (bd blocked)\n- Line 970: buildCommands() claimTop (bd update --status in_progress) [note: missing = sign]\n- Line 971: buildCommands() showTop (bd show)\n- Line 1571: TrackRecommendationGroup ClaimCommand (CI=1 bd update --status in_progress --json)\n- Line 1631: LabelRecommendationGroup ClaimCommand\n\npkg/export/markdown.go:\n- Line 390: bd show bulk command\n- Line 396: bd update bulk command\n- Lines 422,428,436: bd update/show per-issue\n- Line 439: bd show final\n\npkg/analysis/label_suggest.go:\n- Line 242: bd update --add-label suggestion\n\nImplementation:\n\n1. Create pkg/analysis/cli_detect.go:\n - BeadsCLI() string: auto-detect br vs bd on PATH via exec.LookPath(); prefer br; error if neither found\n - ClaimCommand(id string) string: returns \"br update ID --claim\" (atomic) when br, or \"bd update ID --status=in_progress\" when bd\n - ShowCommand(id string) string: returns \"br show ID\" or \"bd show ID\"\n - ListReady() string: returns \"br ready\" or \"bd ready\"\n - ListBlocked() string: returns \"br blocked\" or \"bd blocked\"\n - LabelCommand(id, label string) string: for add-label operations\n - Cache detection result in package-level var (detect once, use many times)\n\n2. Replace all 17 hardcoded bd references with dynamic calls to cli_detect functions\n3. Unify command format: all robot/CI commands use \"CI=1 br update ID --claim --json\" pattern\n4. Shell-escape IDs in emit-script output (use existing shellEscape helper where present)\n5. Update existing tests to validate both br and bd command formats\n\nEDGE CASES:\n- Neither br nor bd on PATH: BeadsCLI() returns \"br\" with warning log (reasonable default since br is current)\n- Old br version without --claim flag: ClaimCommand falls back to \"br update ID --status=in_progress --actor $USER\"\n- IDs containing shell special chars: escape with single quotes in emit-script mode\n- Windows paths in emit-script: use forward slashes (br handles both)\n- Empty recommendations: quick actions section still generates valid (but empty) script\n\nTESTS (28+ required):\n\nUnit Tests (pkg/analysis/cli_detect_test.go):\n- test_beads_cli_prefers_br: when both br and bd on PATH, returns \"br\"\n- test_beads_cli_fallback_bd: when only bd on PATH, returns \"bd\"\n- test_beads_cli_neither: when neither on PATH, returns \"br\" (default)\n- test_claim_command_br: format is \"br update ID --claim\"\n- test_claim_command_bd: format is \"bd update ID --status=in_progress\"\n- test_show_command_format: both br and bd variants correct\n- test_list_ready_format: both br and bd variants\n- test_list_blocked_format: both br and bd variants\n- test_label_command_format: both br and bd variants\n- test_shell_escape_ids: IDs with spaces, quotes, slashes escaped properly\n- test_detection_cached: BeadsCLI() called 100x returns same result without 100 exec.LookPath calls\n\nIntegration Tests (existing test files updated):\n- test_robot_next_uses_br: --robot-next JSON contains \"br\" not \"bd\"\n- test_robot_triage_uses_br: --robot-triage commands use \"br\"\n- test_emit_script_uses_br: --emit-script bash output uses \"br\"\n- test_emit_script_claim_all_loop: \"claim all\" loop uses correct br format\n- test_markdown_export_uses_br: markdown export commands use \"br\"\n- test_track_recommendation_claim: TrackRecommendationGroup.ClaimCommand uses \"br update --claim\"\n- test_label_recommendation_claim: LabelRecommendationGroup.ClaimCommand uses \"br update --claim\"\n- test_label_suggest_uses_br: label suggestion actions use \"br\"\n\nE2E Tests:\n- test_robot_next_output_contract: full --robot-next output validates against JSON schema with br commands\n- test_emit_script_executable: emitted bash script is valid bash (shellcheck passes)\n- test_markdown_export_valid: exported markdown has correct br commands\n\nRegression:\n- All existing emit_script_test.go tests updated to accept br instead of bd\n- All existing robot_contract_test.go tests updated (lines 473-476)\n\nGitHub issue: beads_viewer PR #100 (closed, reimplemented independently)","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-02-07T03:08:09.417151886Z","created_by":"ubuntu","updated_at":"2026-02-09T18:37:19.330475335Z","closed_at":"2026-02-09T18:37:19.330447012Z","close_reason":"Replaced all hardcoded bd (legacy Go binary) references with br (beads_rust) across entire codebase: 28+ files including source, tests, tutorials, help text, blurb templates, and loader messages. All 25 test packages pass.","source_repo":".","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-3v9s","depends_on_id":"bd-x1tm","type":"blocks","created_at":"2026-02-07T21:10:09.057268834Z","created_by":"ubuntu"}],"comments":[{"id":66,"issue_id":"bd-3v9s","author":"Dicklesworthstone","text":"COORDINATION NOTE: This bead touches the same robot output paths as bd-x1tm (Normalize robot output envelope + _meta, P2, in-progress). When implementing:\n1. Check bd-x1tm status first — if merged, robot-next/triage output format may have changed\n2. The ClaimCmd/ShowCmd fields in robot-next JSON are affected by BOTH beads\n3. If bd-x1tm adds _meta envelope wrapper, cli_detect functions should generate commands inside the new envelope format\n4. Coordinate: implement bd-3v9s AFTER bd-x1tm lands to avoid merge conflicts in cmd/bv/main.go lines 2779-3012\n\nADDITIONAL TEST LOGGING REQUIREMENTS:\nAll test assertions should include descriptive failure messages, e.g.:\n assert.Contains(t, output, \"br update\", \"robot-next ClaimCmd should use br, not bd\")\n assert.NotContains(t, output, \"bd \", \"no hardcoded bd commands should remain in output\")\n\nE2E test scripts should log:\n - Which binary was detected (br vs bd) and full path\n - Each replacement site verified (file:line)\n - Before/after command format for each site\n - Pass/fail summary with count: 'Verified 17/17 sites migrated from bd to br'","created_at":"2026-02-07T21:10:04Z"}]}
{"id":"bd-fzbj","title":"Capture baseline + golden outputs (impact scoring focus)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:02:00.928282607Z","created_by":"ubuntu","updated_at":"2026-01-21T19:03:55.606408741Z","closed_at":"2026-01-21T19:03:55.606304004Z","close_reason":"Captured baseline (hyperfine mean 1.556s for FullTriage; single run 1.49ms/op, 744KB/op, 3524 allocs with BEADS_DIR=/tmp/bv_snapshot_20260121_140244). Golden output saved at /tmp/bv_golden_outputs_20260121_140342 (sha256 8e20a4a4572c22b0a2ce3ed74ff58082cb0e78507c404acf33c02704439fed80).","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-fzbj","depends_on_id":"bd-1gfr","type":"discovered-from","created_at":"2026-01-21T19:02:00.957580755Z","created_by":"ubuntu"}]}
{"id":"bd-guup","title":"Verify graph-build change (golden+bench+memprofile)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:30:27.643256509Z","created_by":"ubuntu","updated_at":"2026-01-21T18:07:55.041957539Z","closed_at":"2026-01-21T18:07:55.041878671Z","close_reason":"Bench+memprofile verified; deterministic triage hash unchanged","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-guup","depends_on_id":"bd-1wse","type":"blocks","created_at":"2026-01-21T17:30:28.123722386Z","created_by":"ubuntu"},{"issue_id":"bd-guup","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:30:28.017680765Z","created_by":"ubuntu"}]}
{"id":"bd-ll5a","title":"Profile hotspots + opportunity matrix (impact scoring)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:02:09.260012379Z","created_by":"ubuntu","updated_at":"2026-01-21T19:19:24.295906795Z","closed_at":"2026-01-21T19:19:24.295857332Z","close_reason":"Profiled FullTriage (BEADS_DIR=/tmp/bv_snapshot_20260121_140244). CPU (flat/cum): ComputeImpactScoresFromStats ~7% cum, graphStructureHash ~4% cum, NewAnalyzer ~18% cum; alloc_space: buildUnblocksMap 4.63MB, ComputeImpactScoresFromStats 4.58MB, graphStructureHash 1.54MB. Opportunity matrix: precompute blockerCounts into slice (Impact 3, Conf 4, Effort 2, Score ~6.0) selected as next lever.","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-ll5a","depends_on_id":"bd-1gfr","type":"discovered-from","created_at":"2026-01-21T19:02:09.291840922Z","created_by":"ubuntu"}]}
{"id":"bd-mxal","title":"Profile hotspots (CPU + alloc) and build opportunity matrix","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T18:18:37.555451577Z","created_by":"ubuntu","updated_at":"2026-01-21T18:27:34.414517088Z","closed_at":"2026-01-21T18:27:34.414463327Z","close_reason":"Profiled BenchmarkRealData_FullTriage (cpu+alloc). CPU cum: ComputeTriageWithOptions 59.7%, ComputeTriageFromAnalyzer 31.8%, NewAnalyzer 19.9%, ComputeImpactScoresFromStats 13.7%, graphStructureHash 7.6%, UnblocksMap 6.6% cum. Alloc_space: NewAnalyzer 32.9% flat, UnblocksMap 22.6% flat (+ computeUnblocksMapInternal/buildUnblocksMap 8.5%/8.3%), graphStructureHash 3.6% flat, ComputeImpactScoresFromStats 5.8% flat. Opportunity matrix: UnblocksMap rewrite (Impact 4, Conf 4, Effort 3, Score ~5.3) chosen as next lever.","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-mxal","depends_on_id":"bd-1ty1","type":"discovered-from","created_at":"2026-01-21T18:18:37.585876658Z","created_by":"ubuntu"}]}
{"id":"bd-n0wb","title":"Migrate from Go flag to cobra/pflag for double-dash options (GH#102)","description":"## Problem\n\nbv uses Go's standard `flag` package which only supports single-dash convention (`-flag`) for all 129 flags. The rest of the ACFS ecosystem (br, ntm, dcg) uses double-dash convention (`--flag`). This inconsistency confuses users and breaks muscle memory.\n\n## Current State\n\nAll 129 flags are defined in `cmd/bv/main.go:52-207` using `flag.String()`, `flag.Bool()`, `flag.Int()`, `flag.Float64()`. The `flag.Parse()` call is at line 208. The beads_reference implementation at `beads_reference/cmd/bd/flags.go` already uses cobra/pflag via `github.com/spf13/cobra`.\n\n## Implementation Plan\n\n### Phase 1: Add cobra/pflag dependency\n\n```bash\ncd /data/projects/beads_viewer\ngo get github.com/spf13/cobra\ngo get github.com/spf13/pflag\n```\n\n### Phase 2: Create root command\n\nCreate `cmd/bv/root.go` with a cobra.Command that replaces the flag-based dispatch. Group the 129 flags into logical categories using pflag flag groups:\n\n- System flags (--help, --version, --cpu-profile)\n- Robot/AI commands (--robot-triage, --robot-insights, etc.)\n- Export commands (--export-md, --export-pages, --export-graph)\n- Filter flags (--label, --severity, --robot-by-label)\n- History flags (--diff-since, --as-of, --bead-history)\n- Sprint/capacity flags (--robot-sprint-list, --robot-forecast)\n\n### Phase 3: Migrate flags from flag.Type() to cmd.Flags().Type()\n\nConvert each flag definition. Example:\n```go\n// Before (flag package):\nrobotTriage := flag.Bool(\"robot-triage\", false, \"Output unified triage\")\n// After (pflag via cobra):\ncmd.Flags().BoolVar(&robotTriage, \"robot-triage\", false, \"Output unified triage\")\n```\n\npflag automatically supports both `--robot-triage` and `-robot-triage` (backward compat).\n\n### Phase 4: Add short flags for common operations\n\n```go\ncmd.Flags().StringVarP(&format, \"format\", \"f\", \"\", \"Output format\")\ncmd.Flags().StringVarP(&recipe, \"recipe\", \"r\", \"\", \"Apply named recipe\")\ncmd.Flags().StringVarP(&label, \"label\", \"l\", \"\", \"Scope analysis to label\")\ncmd.Flags().BoolVarP(&help, \"help\", \"h\", false, \"Show help\")\n```\n\n### Phase 5: Backward compatibility\n\npflag accepts both single-dash and double-dash by default, so existing scripts using `-robot-triage` will continue to work. No breaking changes.\n\n## Files to Modify\n\n- `cmd/bv/main.go` lines 52-208 (flag definitions and parse call)\n- `go.mod` (add cobra/pflag dependencies)\n- No new files needed if keeping flat command structure (no subcommands yet)","acceptance_criteria":"1. All 129 flags work with --double-dash convention\n2. All 129 flags still work with -single-dash convention (backward compat)\n3. Common flags have short aliases (-f, -r, -l, -h)\n4. `bv --help` shows organized flag groups\n5. `bv --robot-help` still works\n6. All existing CLI scripts and agent integrations continue to work\n7. pflag/cobra added to go.mod\n8. `go vet` and `go build` clean\n9. TUI mode still works (no subcommand required)","notes":"## Unit Tests\n\n1. **test_double_dash_flags**: Invoke bv with `--robot-triage`. Assert it runs triage mode.\n2. **test_single_dash_backward_compat**: Invoke bv with `-robot-triage`. Assert it still works.\n3. **test_short_flags**: Invoke bv with `-f json`. Assert format is json.\n4. **test_help_output_organized**: Invoke bv with `--help`. Assert output contains flag group headers.\n5. **test_version_flag**: Invoke bv with `--version`. Assert version string printed.\n\n## E2E Test Script (scripts/test_cobra_migration.sh)\n\n```bash\n#!/usr/bin/env bash\nset -euo pipefail\necho \"=== bv cobra/pflag migration E2E test ===\"\nPASS=0; FAIL=0\nBV=\"${BV:-bv}\"\n\n# Test 1: double-dash flag\n$BV --version >/dev/null 2>&1 && ((PASS++)) || { echo \"FAIL: --version\"; ((FAIL++)); }\n\n# Test 2: single-dash backward compat\n$BV -version >/dev/null 2>&1 && ((PASS++)) || { echo \"FAIL: -version (compat)\"; ((FAIL++)); }\n\n# Test 3: robot-triage with double-dash\n$BV --robot-triage --format json 2>/dev/null | python3 -m json.tool >/dev/null 2>&1 && ((PASS++)) || { echo \"FAIL: --robot-triage --format json\"; ((FAIL++)); }\n\n# Test 4: help output\n$BV --help 2>&1 | grep -q \"robot-triage\" && ((PASS++)) || { echo \"FAIL: --help missing robot-triage\"; ((FAIL++)); }\n\n# Test 5: short flag\n$BV -h 2>&1 | grep -q \"Usage\" && ((PASS++)) || { echo \"FAIL: -h short flag\"; ((FAIL++)); }\n\necho \"Results: $PASS passed, $FAIL failed\"\n[[ $FAIL -eq 0 ]] && echo \"ALL PASS\" || exit 1\n```","status":"in_progress","priority":3,"issue_type":"feature","created_at":"2026-02-11T06:22:05.689388998Z","created_by":"ubuntu","updated_at":"2026-03-23T00:40:43.437056350Z","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-q9r9","title":"Implement single-lever optimization (score >= 2.0)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T19:26:39.603723203Z","created_by":"ubuntu","updated_at":"2026-01-21T20:52:52.067195469Z","closed_at":"2026-01-21T20:52:52.066742084Z","close_reason":"Use pointer maps in CompareSnapshots to avoid Issue struct copies","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-q9r9","depends_on_id":"bd-20y5","type":"discovered-from","created_at":"2026-01-21T19:26:39.635717288Z","created_by":"ubuntu"}]}
{"id":"bd-s8wz","title":"TOON: Add E2E shell script tests","description":"E2E verification script for TOON integration.\n\n## File\n`scripts/test_bv_toon.sh`\n\n## Test Cases\n1. Format flag tests (`--format json`, `--format toon`)\n2. Env var tests (`BV_OUTPUT_FORMAT`, `TOON_DEFAULT_FORMAT`)\n3. Precedence tests (CLI overrides env)\n4. Round-trip verification (encode → decode → compare)\n5. Token savings measurement (>= 40% target)\n6. All 35+ robot commands work with TOON\n\n## Script Template\n```bash\n#!/bin/bash\nbv --robot-triage > /tmp/triage.json\nbv --robot-triage --format toon > /tmp/triage.toon\ntru --decode /tmp/triage.toon > /tmp/decoded.json\ndiff <(jq -S . /tmp/triage.json) <(jq -S . /tmp/decoded.json)\necho \"Round-trip OK\"\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T07:22:15.679571934Z","created_by":"ubuntu","updated_at":"2026-02-01T18:01:12.394667119Z","closed_at":"2026-02-01T18:01:12.394648224Z","close_reason":"Test script completed and passing - test_toon_e2e.sh covers all requirements","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-sfad","title":"Test: release notes fallback workflow correctness","description":"## What\nTest the release-notes-fallback workflow (bd-t8dx) to verify it correctly populates empty releases.\n\n## Test Plan\n\n### Test 1: Workflow YAML validation\n1. Run `gh workflow list -R Dicklesworthstone/beads_viewer` to verify workflow is registered\n2. Validate YAML syntax: `python3 -c \"import yaml; yaml.safe_load(open(\\\".github/workflows/release-notes-fallback.yml\\\"))\"` \n3. Verify trigger is `on: release: types: [created, edited]`\n4. Log: workflow name, triggers, jobs\n\n### Test 2: Idempotency marker test\n1. Create a draft release with body containing \"<!-- auto-generated -->\"\n2. Trigger workflow (or simulate the logic)\n3. Verify: body is NOT overwritten (idempotency marker detected)\n4. Delete draft release\n5. Log: release body before/after\n\n### Test 3: Empty release gets notes\n1. Create a draft release with empty body\n2. Run the generate-notes API: `gh api repos/{owner}/{repo}/releases/generate-notes -f tag_name=v0.14.4`\n3. Verify: non-empty notes returned\n4. Delete draft release\n5. Log: generated notes content, character count\n\n### Test 4: Existing notes are preserved\n1. Create a draft release with body \"Manual release notes here\"\n2. Verify: workflow would NOT overwrite (body length > 50 chars)\n3. Delete draft release\n4. Log: body content, skip reason\n\n## Acceptance Criteria\n- YAML is valid and workflow registers\n- Idempotency prevents double-write\n- Empty releases get auto-generated notes\n- Manual releases are not overwritten","status":"closed","priority":2,"issue_type":"task","created_at":"2026-02-08T18:37:07.112634091Z","created_by":"ubuntu","updated_at":"2026-02-09T18:41:35.152036737Z","closed_at":"2026-02-09T18:41:35.152017390Z","close_reason":"done","external_ref":"gh:Dicklesworthstone/beads_viewer#99/test","source_repo":".","compaction_level":0,"original_size":0,"labels":["ci","release","testing"],"dependencies":[{"issue_id":"bd-sfad","depends_on_id":"bd-t8dx","type":"blocks","created_at":"2026-02-08T18:37:11.746934358Z","created_by":"ubuntu"}]}
{"id":"bd-t8dx","title":"Add release notes fallback workflow for manual releases (GH #99)","description":"## Context\nGitHub issue #99 filed by qiviut (2026-02-06). Releases created by GoReleaser (via GH Actions) have full changelogs, but manually-created releases have no release notes. Example: v0.14.3 (GoReleaser) has notes, v0.14.4 (manual) has none.\n\n## Owner Response\nConfirmed the gap. When GoReleaser fails, binaries are uploaded manually via GitHub UI with minimal description. Proposed adding a fallback workflow triggered on release: [created] events.\n\n## Current State\n- Only workflow: .github/workflows/release.yml (triggers on push: tags: ['v*'], runs GoReleaser)\n- GoReleaser config: .goreleaser.yaml (changelog: sort: asc, filters: exclude: ['^docs:', '^test:'])\n- Beads bd-3v9s and bd-37ki created to track this, but NO actual workflow file was added\n- Two commits (e0a1bd8, b50820a) only added beads entries, not implementation\n\n## Implementation Plan\nCreate .github/workflows/release-notes-fallback.yml that:\n1. Triggers on release: types: [created, edited]\n2. Checks if release body is empty or minimal (< 50 characters)\n3. Uses GitHub API: gh api repos/{owner}/{repo}/releases/generate-notes -f tag_name=$TAG\n4. Updates release body: gh api repos/{owner}/{repo}/releases/{id} -X PATCH -f body=\"$NOTES\"\n5. Includes idempotency marker (<!-- auto-generated -->) so it doesn't overwrite manually written notes on subsequent edits\n\n## Key Files\n- NEW: .github/workflows/release-notes-fallback.yml\n- EXISTING: .github/workflows/release.yml (reference for trigger patterns)\n- EXISTING: .goreleaser.yaml (reference for changelog config)","status":"closed","priority":2,"issue_type":"task","created_at":"2026-02-08T18:17:19.887335054Z","created_by":"ubuntu","updated_at":"2026-02-09T17:46:50.221771136Z","closed_at":"2026-02-09T17:46:50.221749706Z","close_reason":"Enhanced release-notes.yml with edited trigger, 50-char threshold, idempotency marker, previous tag detection, and API-based note generation with fallback.","external_ref":"gh:Dicklesworthstone/beads_viewer#99","source_repo":".","compaction_level":0,"original_size":0,"labels":["ci","release","workflow"],"comments":[{"id":67,"issue_id":"bd-t8dx","author":"Dicklesworthstone","text":"Implementation: Create .github/workflows/release-notes-fallback.yml triggered on release created/edited. Step 1: check if body has idempotency marker or >50 chars (skip if so). Step 2: generate notes via gh api repos/OWNER/REPO/releases/generate-notes, append marker, PATCH release. Key: idempotency via HTML comment, 50-char threshold preserves manual notes, previous tag detection for accurate diff. See bd-sfad for test plan.","created_at":"2026-02-08T18:39:10Z"}]}
{"id":"bd-wphn","title":"Fix CI: pkg/export coverage below 69% threshold","status":"closed","priority":1,"issue_type":"bug","created_at":"2026-02-09T18:45:10.488654902Z","created_by":"ubuntu","updated_at":"2026-02-09T18:52:33.543130432Z","closed_at":"2026-02-09T18:52:33.543110374Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-x1j3","title":"Verify buildQuickWins change (golden+bench+memprofile)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T17:29:25.601192719Z","created_by":"ubuntu","updated_at":"2026-01-21T17:56:40.522146255Z","closed_at":"2026-01-21T17:56:40.521447361Z","close_reason":"wont_fix","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-x1j3","depends_on_id":"bd-3c0m","type":"blocks","created_at":"2026-01-21T17:29:25.832017842Z","created_by":"ubuntu"},{"issue_id":"bd-x1j3","depends_on_id":"bd-3s4c","type":"blocks","created_at":"2026-01-21T17:29:25.925752476Z","created_by":"ubuntu"}],"comments":[{"id":62,"issue_id":"bd-x1j3","author":"Dicklesworthstone","text":"No buildQuickWins changes to verify - profiling showed it's not a hotspot. Parent task bd-3s4c closed as won't_fix.","created_at":"2026-01-21T17:56:27Z"}]}
{"id":"bd-x1tm","title":"TASK: Normalize robot output envelope + _meta","description":"Problem: robot outputs vary in metadata and envelope fields, making automation brittle.\n\nGoal:\n- Standardize a top-level envelope across all robot commands.\n- Required fields: generated_at, data_hash, output_format, version; optional _meta with timings/cache/phase2_ready.\n- Ensure errors are structured and consistent across commands.\n\nAcceptance:\n- All robot outputs share the same envelope keys.\n- README/robot-docs updated with envelope spec.\n- New tests or golden fixtures validate envelope consistency.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-25T10:10:09.421034701Z","created_by":"ubuntu","updated_at":"2026-02-09T18:11:49.519484530Z","closed_at":"2026-02-09T18:11:49.519465444Z","close_reason":"done","source_repo":".","compaction_level":0,"original_size":0,"labels":["agent-friendly","consistency","robot"],"dependencies":[{"issue_id":"bd-x1tm","depends_on_id":"bd-c5g","type":"discovered-from","created_at":"2026-01-25T10:10:09.421034701Z","created_by":"ubuntu"}]}
{"id":"bd-xgf7","title":"TOON: Create tru binary wrapper (pkg/robot/toon.go)","description":"Create Go wrapper for toon_rust tru binary.\n\n## File\n`pkg/robot/toon.go`\n\n## Implementation\nUse shell-out pattern from /data/projects/templates/toon_go_template.go:\n\n```go\nfunc encodeToon(payload any) (string, error) {\n jsonBytes, err := json.Marshal(payload)\n if err != nil {\n return \"\", err\n }\n trPath, err := getToonBinary()\n if err != nil {\n return \"\", err\n }\n cmd := exec.Command(trPath)\n cmd.Stdin = bytes.NewReader(jsonBytes)\n // ...\n}\n```\n\n## Dependencies\n- toon_rust tru binary must be installed\n- TOON_TRU_BIN env var for custom path","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-25T07:16:31.960405372Z","created_by":"ubuntu","updated_at":"2026-02-01T07:06:17.263276562Z","closed_at":"2026-02-01T07:06:17.263256955Z","close_reason":"Already implemented in cmd/bv/main.go using toon-go package - toonRobotEncoder struct handles encoding","source_repo":".","compaction_level":0,"original_size":0}
{"id":"bd-xlu1","title":"Implement one optimization lever (score >=2.0)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-21T18:18:45.186857548Z","created_by":"ubuntu","updated_at":"2026-01-21T18:44:50.918024998Z","closed_at":"2026-01-21T18:44:50.917978050Z","close_reason":"Implemented unblocks map refactor using graph adjacency + slice counters (single lever). Verified old/new unblocks map equivalence on current dataset (diffs=0). Bench with fixed snapshot (BEADS_DIR=/tmp/bv_snapshot): FullTriage 1.90ms/op → 1.25ms/op (~34% faster), 1.09MB/op → 733KB/op (~33% less), allocs 3486 → 3482. Golden triage hash updated due to dataset changes; sha256sum -c now OK.","compaction_level":0,"original_size":0,"dependencies":[{"issue_id":"bd-xlu1","depends_on_id":"bd-1ty1","type":"discovered-from","created_at":"2026-01-21T18:18:45.217094235Z","created_by":"ubuntu"}]}
{"id":"bv-03h1","title":"Worker Health Monitoring and Watchdog Recovery","description":"## PURPOSE\nDetect when the BackgroundWorker goroutine has died or become unresponsive,\nand automatically recover. The UI should never become permanently stale due\nto a silent worker failure.\n\n## PROBLEM\nGoroutines can fail silently:\n- Panic not caught by recover()\n- Deadlock on channel operation\n- Infinite loop in processing\n- Runtime crash in C code (rare but possible)\n\nIf the worker dies:\n- File changes are no longer detected\n- UI shows increasingly stale data\n- User has no indication anything is wrong\n- Only fix is to restart bv\n\n## RATIONALE\nProduction systems need watchdogs. The UI depends on the worker goroutine\nbeing alive. We must detect failure and recover automatically.\n\n## SOLUTION\n\n### 1. Heartbeat Mechanism\n\n```go\ntype BackgroundWorker struct {\n // ... existing fields ...\n \n heartbeatCh chan struct{} // Worker sends heartbeat\n lastHeartbeat time.Time // Last received heartbeat\n watchdogCtx context.Context\n watchdogCancel context.CancelFunc\n}\n\n// Worker sends heartbeat periodically\nfunc (w *BackgroundWorker) run() {\n defer w.wg.Done()\n \n heartbeatTicker := time.NewTicker(5 * time.Second)\n defer heartbeatTicker.Stop()\n \n for {\n select {\n case <-w.ctx.Done():\n return\n \n case <-w.watcher.Changed():\n w.handleFileChange()\n \n case <-heartbeatTicker.C:\n // Send heartbeat\n select {\n case w.heartbeatCh <- struct{}{}:\n default:\n // Channel full, that's fine\n }\n }\n }\n}\n```\n\n### 2. Watchdog Goroutine\n\n```go\n// startWatchdog monitors worker health and restarts if needed\nfunc (w *BackgroundWorker) startWatchdog() {\n w.watchdogCtx, w.watchdogCancel = context.WithCancel(context.Background())\n \n go func() {\n ticker := time.NewTicker(10 * time.Second)\n defer ticker.Stop()\n \n for {\n select {\n case <-w.watchdogCtx.Done():\n return\n \n case <-w.heartbeatCh:\n w.lastHeartbeat = time.Now()\n \n case <-ticker.C:\n w.checkHealth()\n }\n }\n }()\n}\n\nfunc (w *BackgroundWorker) checkHealth() {\n if time.Since(w.lastHeartbeat) > 30*time.Second {\n log.Printf(\"Worker heartbeat missed for 30s, attempting recovery\")\n w.attemptRecovery()\n }\n}\n```\n\n### 3. Recovery Logic\n\n```go\nfunc (w *BackgroundWorker) attemptRecovery() {\n // Increment recovery counter\n w.recoveryCount++\n if w.recoveryCount > 3 {\n log.Printf(\"Worker failed to recover after 3 attempts\")\n // Send error to UI\n select {\n case w.errorCh <- SnapshotErrorMsg{\n Err: errors.New(\"background worker unresponsive\"),\n Recoverable: false,\n }:\n default:\n }\n return\n }\n \n // Cancel old context\n w.cancel()\n \n // Wait briefly for cleanup\n done := make(chan struct{})\n go func() {\n w.wg.Wait()\n close(done)\n }()\n \n select {\n case <-done:\n // Clean exit\n case <-time.After(5 * time.Second):\n log.Printf(\"Worker didn't exit cleanly, forcing restart\")\n }\n \n // Restart\n w.ctx, w.cancel = context.WithCancel(context.Background())\n w.wg.Add(1)\n go w.run()\n \n // Trigger refresh\n w.triggerProcessing()\n \n log.Printf(\"Worker recovered (attempt %d)\", w.recoveryCount)\n}\n```\n\n### 4. Health Status Exposure\n\n```go\ntype WorkerHealth struct {\n Alive bool\n LastHeartbeat time.Time\n RecoveryCount int\n UptimeSince time.Time\n}\n\nfunc (w *BackgroundWorker) Health() WorkerHealth {\n return WorkerHealth{\n Alive: w.started.Load() && time.Since(w.lastHeartbeat) < 30*time.Second,\n LastHeartbeat: w.lastHeartbeat,\n RecoveryCount: w.recoveryCount,\n UptimeSince: w.startTime,\n }\n}\n```\n\n### 5. UI Health Indicator\n\n```go\nfunc (m Model) renderHealthIndicator() string {\n if m.backgroundWorker == nil {\n return \"\"\n }\n \n health := m.backgroundWorker.Health()\n if !health.Alive {\n return lipgloss.NewStyle().\n Foreground(lipgloss.Color(\"196\")).\n Render(\"⚠ Worker unresponsive\")\n }\n \n if health.RecoveryCount > 0 {\n return lipgloss.NewStyle().\n Foreground(lipgloss.Color(\"214\")).\n Render(fmt.Sprintf(\"↻ Recovered x%d\", health.RecoveryCount))\n }\n \n return \"\"\n}\n```\n\n### 6. Panic Recovery in Worker\n\n```go\nfunc (w *BackgroundWorker) run() {\n defer w.wg.Done()\n defer func() {\n if r := recover(); r != nil {\n log.Printf(\"Worker panic recovered: %v\\n%s\", r, debug.Stack())\n // Watchdog will detect missed heartbeats and restart\n }\n }()\n \n // ... main loop\n}\n```\n\n## TESTING\n\n```go\nfunc TestWatchdog_DetectsDeadWorker(t *testing.T) {\n worker := createTestWorker(t)\n worker.Start()\n \n // Simulate worker death by stopping heartbeats\n worker.stopHeartbeats()\n \n // Wait for watchdog to detect\n time.Sleep(35 * time.Second)\n \n // Should have attempted recovery\n require.Greater(t, worker.recoveryCount, 0)\n}\n\nfunc TestWatchdog_RecoversPanickedWorker(t *testing.T) {\n worker := createTestWorker(t)\n worker.Start()\n \n // Get initial snapshot\n <-worker.snapshotCh\n \n // Inject panic on next processing\n worker.injectPanic = true\n worker.TriggerRefresh()\n \n // Wait for recovery\n time.Sleep(35 * time.Second)\n \n // Should be alive again\n health := worker.Health()\n require.True(t, health.Alive)\n require.Equal(t, 1, health.RecoveryCount)\n}\n\nfunc TestWatchdog_GivesUpAfterMaxRetries(t *testing.T) {\n worker := createTestWorkerWithBrokenRun(t)\n worker.Start()\n \n // Wait for all recovery attempts\n time.Sleep(2 * time.Minute)\n \n // Should have given up\n require.Equal(t, 3, worker.recoveryCount)\n \n // Should have sent unrecoverable error\n err := <-worker.errorCh\n require.False(t, err.Recoverable)\n}\n\nfunc TestWatchdog_HeartbeatResetAfterRecovery(t *testing.T) {\n worker := createTestWorker(t)\n worker.Start()\n \n initialHeartbeat := worker.lastHeartbeat\n time.Sleep(6 * time.Second)\n \n // Heartbeat should have updated\n require.True(t, worker.lastHeartbeat.After(initialHeartbeat))\n}\n```\n\n## ACCEPTANCE CRITERIA\n- [ ] Worker sends heartbeat every 5 seconds\n- [ ] Watchdog checks health every 10 seconds\n- [ ] Recovery triggered after 30 seconds no heartbeat\n- [ ] Max 3 recovery attempts before giving up\n- [ ] Panic in worker caught and recovered\n- [ ] Health status exposed to UI\n- [ ] UI shows indicator when worker unhealthy\n- [ ] Tests verify detection and recovery\n\n## DEPENDENCIES\n- Part of BackgroundWorker (bv-b94b)\n- Error notification uses error handling (bv-u9gz)","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-06T19:42:17.260581913Z","created_by":"ubuntu","updated_at":"2026-01-10T09:17:39.892512078Z","closed_at":"2026-01-10T09:17:39.892512078Z","close_reason":"Added worker heartbeat+watchdog with recovery + UI health badges","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-03h1","depends_on_id":"bv-b94b","type":"blocks","created_at":"2026-01-06T19:43:32.875823297Z","created_by":"ubuntu","metadata":"","thread_id":""}]}
{"id":"bv-0atb","title":"Pages export README: add live URL and meaningful insights","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-17T20:31:38.688625Z","updated_at":"2025-12-17T20:31:45.953262Z","closed_at":"2025-12-17T20:31:45.953262Z","close_reason":"Fixed: README now includes computed live GitHub Pages URL at the top, Top Priorities with reasons and impact scores, Critical Bottlenecks table, Cycles as structural bugs, Graph Analysis insights with density interpretation, and compact status summary. Replaced useless count tables with actionable intelligence.","source_repo":".","compaction_level":0}
{"id":"bv-0cfl","title":"Create shared heap-based top-K utility package","description":"# Create Shared Heap-Based Top-K Utility Package\n\n## Problem Statement\nMultiple optimization tasks require heap-based top-K selection:\n- bv-d12l: Top-K in triage (pkg/analysis/triage.go)\n- bv-fwjm: Top-K in vector search (pkg/search/vector_index.go)\n- Potential future uses in recommendations, rankings\n\nEach implementing their own heap is redundant and error-prone.\n\n## Proposed Solution\nCreate a reusable, generic top-K utility in `pkg/util/topk/`.\n\n### API Design\n```go\n// pkg/util/topk/topk.go\npackage topk\n\n// Collector collects top-K items by score\ntype Collector[T any] struct {\n k int\n items []scored[T]\n less func(a, b T) bool // For deterministic ordering of equal scores\n}\n\ntype scored[T any] struct {\n item T\n score float64\n}\n\n// New creates a collector for top k items\nfunc New[T any](k int, less func(a, b T) bool) *Collector[T]\n\n// Add considers an item for inclusion in top-K\n// Returns true if item was added (score high enough)\nfunc (c *Collector[T]) Add(item T, score float64) bool\n\n// Results returns top-K items in descending score order\nfunc (c *Collector[T]) Results() []T\n\n// ResultsWithScores returns items with their scores\nfunc (c *Collector[T]) ResultsWithScores() []scored[T]\n\n// Reset clears the collector for reuse\nfunc (c *Collector[T]) Reset()\n```\n\n### Implementation\n```go\npackage topk\n\nimport \"container/heap\"\n\ntype Collector[T any] struct {\n k int\n heap minHeap[T]\n less func(a, b T) bool\n}\n\ntype minHeap[T any] []scored[T]\n\nfunc (h minHeap[T]) Len() int { return len(h) }\nfunc (h minHeap[T]) Less(i, j int) bool { return h[i].score < h[j].score }\nfunc (h minHeap[T]) Swap(i, j int) { h[i], h[j] = h[j], h[i] }\nfunc (h *minHeap[T]) Push(x any) { *h = append(*h, x.(scored[T])) }\nfunc (h *minHeap[T]) Pop() any {\n old := *h\n n := len(old)\n x := old[n-1]\n *h = old[:n-1]\n return x\n}\n\nfunc New[T any](k int, less func(a, b T) bool) *Collector[T] {\n return &Collector[T]{\n k: k,\n heap: make(minHeap[T], 0, k),\n less: less,\n }\n}\n\nfunc (c *Collector[T]) Add(item T, score float64) bool {\n if c.heap.Len() < c.k {\n heap.Push(&c.heap, scored[T]{item, score})\n return true\n }\n if score > c.heap[0].score {\n heap.Pop(&c.heap)\n heap.Push(&c.heap, scored[T]{item, score})\n return true\n }\n return false\n}\n\nfunc (c *Collector[T]) Results() []T {\n // Sort by score descending, then by less func for ties\n result := make([]T, c.heap.Len())\n temp := make(minHeap[T], c.heap.Len())\n copy(temp, c.heap)\n \n for i := len(result) - 1; i >= 0; i-- {\n result[i] = heap.Pop(&temp).(scored[T]).item\n }\n return result\n}\n```\n\n### Usage Examples\n```go\n// In triage.go\ncollector := topk.New[Issue](10, func(a, b Issue) bool {\n return a.ID < b.ID // Deterministic tie-breaking\n})\nfor _, issue := range issues {\n collector.Add(issue, scores[issue.ID])\n}\ntopIssues := collector.Results()\n\n// In vector_index.go\ncollector := topk.New[Document](k, func(a, b Document) bool {\n return a.ID < b.ID\n})\nfor _, doc := range documents {\n collector.Add(doc, cosineSimilarity(query, doc.Embedding))\n}\nresults := collector.Results()\n```\n\n## Files to Create\n- `pkg/util/topk/topk.go` - Main implementation\n- `pkg/util/topk/topk_test.go` - Unit tests\n\n## Testing Strategy\n1. Test k=0, k=1, k=n, k>n edge cases\n2. Test deterministic ordering for equal scores\n3. Benchmark vs sort.Slice approach\n4. Test Reset() for collector reuse\n\n## Dependencies\nThis is a shared utility. Create BEFORE:\n- bv-d12l (Top-K in triage)\n- bv-fwjm (Top-K in vector search)\n\n## Risk Assessment\n- **Low Risk**: Simple, well-understood data structure\n- **Reusable**: Eliminates code duplication\n- **Generic**: Uses Go 1.18+ generics for type safety","status":"closed","priority":0,"issue_type":"task","created_at":"2026-01-12T05:55:52.317342567Z","created_by":"ubuntu","updated_at":"2026-01-12T06:20:12.328305340Z","closed_at":"2026-01-12T06:20:12.328305340Z","close_reason":"Implemented shared heap-based top-K utility in pkg/util/topk. Tests pass, benchmarks show ~15x improvement over sort.Slice.","source_repo":".","compaction_level":0}
{"id":"bv-0d11","title":"Unit Tests: Tutorial Page Rendering Validation","description":"# Unit Tests: Tutorial Page Rendering Validation\n\n## Background\nThe tutorial system (pkg/ui/tutorial.go) has 17+ content pages. We need tests to ensure:\n1. All pages render without errors\n2. Markdown formatting works correctly\n3. Navigation between pages works\n4. Progress tracking persists correctly\n\n## Existing Tests (tutorial_test.go)\n- Basic navigation tests\n- Scrolling tests\n- Some progress tests\n\n## Additional Tests Needed\n\n### Page Rendering:\n1. Each page's content string is valid markdown\n2. Each page renders through Glamour without error\n3. No page exceeds reasonable width (causes wrapping issues)\n4. Headers, lists, code blocks render correctly\n5. Special characters (backticks, etc.) are escaped properly\n\n### Page Navigation:\n1. TOC correctly lists all pages\n2. Clicking TOC item navigates to page\n3. j/k navigation works in page list\n4. Page content scrolls correctly\n5. Progress indicator updates\n\n### Progress Persistence:\n1. Viewing a page marks it as viewed\n2. Progress persists across sessions (mock file system)\n3. CompletedOnce flag works correctly\n4. LastPageID resume works\n5. Corrupted progress file doesn't crash\n\n### Context Filtering:\n1. Pages filter correctly by context (list, board, graph, etc.)\n2. Filtered view shows only relevant pages\n3. Navigation within filtered view works\n\n### Edge Cases:\n1. Empty page content\n2. Very long page content (scrolling)\n3. Page with only code blocks\n4. Page with mermaid diagrams\n5. Wide terminal vs narrow terminal rendering\n\n## Test Data\nConsider test fixtures:\n- Minimal page content\n- Maximum page content (stress test)\n- Various markdown elements\n\n## Acceptance Criteria\n- [ ] All pages render without error\n- [ ] Navigation tests are comprehensive\n- [ ] Progress persistence is tested with mocks\n- [ ] Context filtering is tested\n- [ ] Edge cases don't cause panics","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T22:20:09.117175Z","updated_at":"2025-12-18T02:10:03.491601Z","closed_at":"2025-12-18T02:10:03.491601Z","close_reason":"Added 15 comprehensive test functions: all pages render, valid content/structure, line width, narrow/short/minimal terminals, markdown validation, TOC coverage, scrolling, sections, context filtering, Glamour rendering.","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0d11","depends_on_id":"bv-fj2t","type":"blocks","created_at":"2025-12-17T22:21:16.725874Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0d11","depends_on_id":"bv-h6jw","type":"blocks","created_at":"2025-12-17T22:21:19.423914Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0d11","depends_on_id":"bv-wra5","type":"blocks","created_at":"2025-12-17T22:21:19.284739Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-0i5i","title":"Epic: Robot Flag Validation — Declarative Command Registry","description":"Replace the 45-line boolean disjunction in robotMode detection with a declarative command registry. Subtasks: bv-swfe (quick modifier validation), bv-a7d4 (registry type), bv-bw5t (migration), bv-ghx1 (tests). Critical path: bv-swfe -> bv-ghx1; bv-a7d4 -> bv-bw5t (parallel tracks).","status":"open","priority":2,"issue_type":"epic","created_at":"2026-03-22T23:11:09.714100940Z","created_by":"ubuntu","updated_at":"2026-03-22T23:25:25.522230878Z","source_repo":".","compaction_level":0,"original_size":0,"labels":["architecture","cli"]}
{"id":"bv-0jaz","title":"Persistence: Handle stale/deleted issue IDs gracefully","description":"## Task: Handle Stale/Deleted Issue IDs Gracefully\n\n### Background\n\nOver time, issues get deleted, renamed, or closed. The state file may contain IDs that no longer exist in the current issue set. This task ensures we handle these gracefully.\n\n### Scenarios\n\n1. **Issue deleted**: ID in state file but not in current issues\n2. **Issue closed**: ID exists but issue is now closed/archived\n3. **ID format changed**: Old ID format no longer matches\n4. **Project switch**: State file from different project\n\n### Strategy\n\n**Don't fail, don't accumulate garbage**\n\n1. On load: Skip unknown IDs silently (already handled in bv-afcm)\n2. On save: Only save IDs that exist in current tree (automatic)\n3. Periodic cleanup: Remove stale IDs from state file (this task)\n\n### Implementation\n\n```go\n// cleanupState removes stale IDs from the state file.\n// Called after successful build to prune non-existent issues.\nfunc (t *TreeModel) cleanupState() error {\n path := t.statePath()\n data, err := os.ReadFile(path)\n if err != nil {\n return nil // No file to clean\n }\n \n var state TreeState\n if err := json.Unmarshal(data, &state); err != nil {\n return nil // Corrupted, will be overwritten on next save\n }\n \n // Remove IDs not in current tree\n cleaned := make(map[string]bool)\n for id, expanded := range state.ExpandedIDs {\n if _, exists := t.issueMap[id]; exists {\n cleaned[id] = expanded\n }\n // Else: stale ID, don't copy to cleaned map\n }\n \n // Only write if we removed something\n if len(cleaned) < len(state.ExpandedIDs) {\n state.ExpandedIDs = cleaned\n data, _ := json.MarshalIndent(state, \"\", \" \")\n return os.WriteFile(path, data, 0644)\n }\n \n return nil\n}\n```\n\n### When to call cleanup\n\nOption A: On every build (recommended)\n```go\nfunc (t *TreeModel) Build(issues []model.Issue) {\n // ... build logic ...\n t.loadState()\n t.cleanupState() // Prune stale IDs\n t.built = true\n}\n```\n\nOption B: Only on explicit user action (e.g., command)\n- Less I/O but state file grows unbounded\n\n**Recommendation: Option A** - cleanup is fast and prevents accumulation.\n\n### Edge cases\n\n1. **All IDs stale**: Result is empty state file (valid)\n2. **Write fails**: Log warning, continue (state will be cleaned next time)\n3. **Race condition**: Multiple bv instances editing same file - last write wins (acceptable)\n\n### Test cases\n\n```go\nfunc TestCleanupStaleIDs(t *testing.T) {\n dir := t.TempDir()\n \n // Create state with some stale IDs\n state := TreeState{\n Version: 1,\n ExpandedIDs: map[string]bool{\n \"test-1\": true, // Exists\n \"test-2\": true, // Exists\n \"deleted-1\": true, // Stale\n \"deleted-2\": false, // Stale\n },\n }\n data, _ := json.Marshal(state)\n statePath := filepath.Join(dir, \"tree-state.json\")\n os.WriteFile(statePath, data, 0644)\n \n // Build tree with only test-1 and test-2\n issues := []model.Issue{\n {ID: \"test-1\"},\n {ID: \"test-2\"},\n }\n tree := NewTreeModel(testTheme())\n tree.beadsDir = dir\n tree.Build(issues)\n \n // Verify stale IDs removed\n data, _ = os.ReadFile(statePath)\n var cleaned TreeState\n json.Unmarshal(data, &cleaned)\n \n if _, exists := cleaned.ExpandedIDs[\"deleted-1\"]; exists {\n t.Error(\"stale ID deleted-1 should have been removed\")\n }\n if _, exists := cleaned.ExpandedIDs[\"test-1\"]; !exists {\n t.Error(\"valid ID test-1 should have been preserved\")\n }\n}\n```\n\n### Files to modify\n- `pkg/ui/tree.go` - Add cleanupState(), call from Build()\n\n### Success Criteria\n- [ ] Stale IDs removed on build\n- [ ] Valid IDs preserved\n- [ ] No errors on empty state\n- [ ] Cleanup is fast (< 5ms)\n\n### Dependencies\n- bv-afcm (load state) - cleanup runs after load\n\n### Notes\n- This is a maintenance task, low user-visible impact\n- Prevents state file from growing indefinitely\n- Could log \"cleaned N stale entries\" for observability","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-06T00:52:47.136070Z","created_by":"jemanuel","updated_at":"2026-01-06T01:30:32.235482Z","closed_at":"2026-01-06T01:30:32.235482Z","close_reason":"Already handled: loadState ignores unknown IDs, saveState only writes current tree nodes. Stale IDs are automatically cleaned on next save operation.","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0jaz","depends_on_id":"bv-afcm","type":"blocks","created_at":"2026-01-06T00:55:01.805474Z","created_by":"jemanuel","metadata":"","thread_id":""},{"issue_id":"bv-0jaz","depends_on_id":"bv-nnju","type":"parent-child","created_at":"2026-01-06T00:54:55.478489Z","created_by":"jemanuel","metadata":"","thread_id":""}]}
{"id":"bv-0kll","title":"Unit test: suggest_all.go - Suggestion orchestration","description":"Create comprehensive unit tests for pkg/analysis/suggest_all.go\n\n## File Overview\nsuggest_all.go orchestrates all suggestion types:\n- Calls each individual suggester\n- Combines and deduplicates results\n- Applies global filtering and ranking\n\n## Test Cases to Implement\n1. **Orchestration Tests**\n - Empty graph produces no suggestions\n - Single suggester enabled\n - All suggesters enabled\n - Verify no duplicate suggestions across types\n\n2. **Configuration Tests**\n - Test with each suggester enabled/disabled\n - Test confidence threshold filtering\n - Test maximum suggestions limit\n - Test type filtering\n\n3. **Integration Tests**\n - Small graph with known suggestion opportunities\n - Graph with cycles (should produce cycle suggestions)\n - Graph with similar titles (should produce duplicate suggestions)\n - Graph with unlabeled high-impact items (should produce label suggestions)\n\n4. **Ranking Tests**\n - Verify suggestions sorted by confidence\n - Verify deterministic ordering (stable sort)\n - Test tie-breaking behavior\n\n## Implementation Notes\n- Create fixture graphs with known properties\n- Test each suggester independently first\n- Then test orchestration combinations\n- Benchmark full suggestion pipeline","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T01:05:52.037114Z","updated_at":"2025-12-17T03:57:42.071847Z","closed_at":"2025-12-17T03:57:42.071847Z","close_reason":"Comprehensive unit tests for suggest_all.go implemented: 24 tests covering config, orchestration, filtering, sorting, limits, deduplication, integration, and edge cases. All tests passing.","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0kll","depends_on_id":"bv-75ds","type":"blocks","created_at":"2025-12-17T01:06:13.237238Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0kll","depends_on_id":"bv-ixzo","type":"blocks","created_at":"2025-12-17T01:06:13.404275Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0kll","depends_on_id":"bv-otc5","type":"blocks","created_at":"2025-12-17T01:06:13.065856Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0kll","depends_on_id":"bv-tm6c","type":"blocks","created_at":"2025-12-17T01:06:13.583281Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0kll","depends_on_id":"bv-xcf1","type":"blocks","created_at":"2025-12-17T01:06:12.916056Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-0n0v","title":"Tree: Integrate with main Model and add E shortcut","description":"## Purpose\nWire the TreeModel into the main Model, enabling users to toggle tree view with the `E` key and ensuring all state management works correctly.\n\n## Integration Points\n\n### 1. View() Dispatch (model.go)\nAdd case for focusTree in the View() method:\n\n```go\nfunc (m Model) View() string {\n // ... existing cases ...\n \n case focusTree:\n return m.renderTreeView()\n \n // ...\n}\n\nfunc (m Model) renderTreeView() string {\n // Handle split view vs full view based on width\n if m.width > SplitViewThreshold {\n return m.renderTreeSplitView()\n }\n return m.tree.View()\n}\n```\n\n### 2. Update() Key Handling\nAdd focusTree case in the key handling switch:\n\n```go\ncase focusTree:\n switch msg.String() {\n case \"j\", \"down\":\n m.tree.MoveDown()\n case \"k\", \"up\":\n m.tree.MoveUp()\n case \"enter\", \" \":\n m.tree.ToggleExpand()\n case \"l\", \"right\":\n m.tree.ExpandOrMoveToChild()\n case \"h\", \"left\":\n m.tree.CollapseOrJumpToParent()\n case \"g\":\n if m.waitingForG {\n m.tree.JumpToTop()\n m.waitingForG = false\n } else {\n m.waitingForG = true\n }\n case \"G\":\n m.tree.JumpToBottom()\n case \"o\":\n m.tree.ExpandAll()\n case \"O\":\n m.tree.CollapseAll()\n case \"E\", \"esc\":\n m.focused = focusList\n case \"?\":\n m.toggleHelp()\n case \"tab\":\n m.focused = focusDetail\n }\n \n // Sync detail panel with selection\n if issue := m.tree.SelectedIssue(); issue \\!= nil {\n m.updateDetailForIssue(issue)\n }\n```\n\n### 3. Keyboard Shortcut to Enter Tree View\nIn the focusList key handling, add `E`:\n\n```go\ncase focusList:\n switch msg.String() {\n // ... existing cases ...\n \n case \"E\":\n // Enter tree view (bv-gllx)\n m.tree.Build(m.getFilteredIssues())\n m.focused = focusTree\n }\n```\n\n### 4. Window Resize Handling\nUpdate tree viewport on resize:\n\n```go\ncase tea.WindowSizeMsg:\n m.width = msg.Width\n m.height = msg.Height\n \n // ... existing resize handling ...\n \n // Update tree viewport dimensions\n m.tree.SetSize(m.width, m.height-headerHeight-footerHeight)\n```\n\n### 5. Filter Change Handling\nRebuild tree when filters change:\n\n```go\nfunc (m *Model) applyFilter() {\n // ... existing filter logic ...\n \n // Rebuild tree with new filter (preserves expand state)\n if m.focused == focusTree {\n m.tree.Build(m.getFilteredIssues())\n }\n}\n```\n\n### 6. Detail Panel Sync\nWhen selection changes in tree, update detail panel:\n\n```go\nfunc (m *Model) updateDetailForIssue(issue *model.Issue) {\n m.selectedIssueID = issue.ID\n m.updateViewportContent()\n}\n```\n\n### 7. Context Help Integration\nAdd tree view help to context_help.go:\n\n```go\nconst contextHelpTree = `## Tree View\n\n**Navigation**\n j/k Move up/down\n Enter Expand/collapse\n h/← Collapse or jump to parent\n l/→ Expand or move to child\n gg/G Jump to top/bottom\n\n**Expand/Collapse**\n o Expand all descendants\n O Collapse all\n\n**Exit**\n E/Esc Return to list view\n Tab Toggle detail panel`\n```\n\nUpdate the context map:\n```go\nvar ContextHelpContent = map[Context]string{\n // ... existing ...\n ContextTree: contextHelpTree,\n}\n```\n\n### 8. Status Bar Updates\nShow tree-specific info in status bar:\n\n```go\nfunc (m Model) renderStatusBar() string {\n // ... existing ...\n \n if m.focused == focusTree {\n info = fmt.Sprintf(\"Tree: %d nodes | %d roots | %d expanded\",\n len(m.tree.flatList),\n len(m.tree.roots),\n m.tree.expandedCount())\n }\n}\n```\n\n## State Synchronization\n\n### Tree ↔ List Selection Sync\nWhen entering tree view:\n1. Find currently selected list item in tree\n2. Set tree cursor to that node\n3. Expand ancestors to make it visible\n\nWhen exiting tree view:\n1. Get currently selected tree node\n2. Find that issue in list\n3. Set list selection to that index\n\n### Expand State Persistence\nStore expanded IDs in Model (not just TreeModel):\n```go\ntype Model struct {\n // ... existing ...\n treeExpandedIDs map[string]bool // Persist across tree rebuilds\n}\n```\n\n## Error Handling\n\n### Empty Tree\nIf no issues after filter:\n- Show helpful message: \"No issues match current filter\"\n- Allow exiting with E/Esc\n\n### Missing Parents\nIf parent-child dep references non-existent ID:\n- Log warning (debug mode)\n- Treat issue as root node\n- Do not crash\n\n## Acceptance Criteria\n- [ ] `E` key enters tree view from list\n- [ ] `E` or `Esc` exits tree view to list\n- [ ] All navigation keys work as documented\n- [ ] Detail panel syncs with tree selection\n- [ ] Filter changes rebuild tree correctly\n- [ ] Window resize adjusts tree viewport\n- [ ] Context help shows tree shortcuts\n- [ ] Status bar shows tree statistics\n- [ ] Selection preserved when switching views","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T17:46:41.137768Z","updated_at":"2026-01-05T23:29:54.334682Z","closed_at":"2026-01-05T23:29:54.334682Z","close_reason":"Integrated TreeModel with main Model: E key toggles tree view, all navigation keys (j/k/h/l/g/G/o/O/ctrl+d/u/enter/tab/E/esc) work, mouse scroll support, detail panel sync via tab. Build and tests pass.","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0n0v","depends_on_id":"bv-1371","type":"blocks","created_at":"2026-01-03T17:47:45.181713Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0n0v","depends_on_id":"bv-2fpk","type":"blocks","created_at":"2026-01-03T17:47:44.981653Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-0n0v","depends_on_id":"bv-gllx","type":"parent-child","created_at":"2026-01-03T17:47:43.909321Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-0s5y","title":"README: Pages Export Updates","description":"Update existing Pages Export section: (1) Document pre-computed graph layout (graph_layout.json, ~82KB, ~16x faster render), (2) Detail pane in exported viewer (sliding panel, markdown, metrics, deps), (3) Update technical notes (hybrid architecture: tiny layout JSON + full SQLite). Update file size estimates.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-18T06:49:49.872680Z","updated_at":"2025-12-18T07:15:22.739748Z","closed_at":"2025-12-18T07:15:22.739763Z","source_repo":".","compaction_level":0,"labels":["documentation","pages-export"],"dependencies":[{"issue_id":"bv-0s5y","depends_on_id":"bv-s57m","type":"blocks","created_at":"2025-12-18T06:49:49.876278Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-0trk","title":"Help Modal Tutorial Entry Point (Space key)","description":"# Help Modal Tutorial Entry Point (Space key)\n\n## Background\nThe **primary discoverable path** to the tutorial is through the help modal. When user presses \\`?\\`, they see the shortcuts reference. From there, pressing \\`Space\\` launches the full interactive tutorial.\n\nThis is better than relying solely on CapsLock because:\n1. **Discoverable** - Help modal can show hint\n2. **Reliable** - Space works on all terminals\n3. **Progressive** - Natural flow from quick reference to detailed tutorial\n4. **Intuitive** - \"I need more help\" → press Space for more\n\n## User Flow\n\n\\`\\`\\`\nUser presses ? \n │\n ▼\n┌────────────────────────────────────────────────────────┐\n│ Keyboard Shortcuts │\n│ ───────────────── │\n│ Navigation │\n│ j/k Move up/down │\n│ Enter View details │\n│ ... │\n│ │\n│ Views │\n│ b Kanban board │\n│ g Graph view │\n│ ... │\n│ │\n│ ──────────────────────────────────────────────────── │\n│ Space: Interactive Tutorial │ Esc: Close │ ;: Sidebar │\n└────────────────────────────────────────────────────────┘\n │\n ▼ (user presses Space)\n │\n Full Tutorial opens\n\\`\\`\\`\n\n## Implementation\n\n### Update Help Modal View\nAdd footer hint in the help overlay:\n\n\\`\\`\\`go\nfunc (m Model) renderHelp() string {\n // ... existing help content ...\n \n footer := helpFooterStyle.Render(\n \"Space: Interactive Tutorial │ Esc: Close │ ;: Toggle Sidebar\",\n )\n \n return lipgloss.JoinVertical(lipgloss.Left, content, footer)\n}\n\\`\\`\\`\n\n### Handle Space in Help Modal\n\\`\\`\\`go\nfunc (m Model) handleHelpKeys(msg tea.KeyMsg) Model {\n switch msg.String() {\n case \" \": // Space\n m.showHelp = false\n m.showTutorial = true\n m.tutorialModel.SetContextMode(false, \"\") // Full tutorial\n return m\n case \"escape\", \"q\", \"?\":\n m.showHelp = false\n return m\n // ... existing scroll handling ...\n }\n return m\n}\n\\`\\`\\`\n\n## Visual Design for Hint\n- Footer should be subtle but visible\n- \"Space\" highlighted in key style (like other shortcuts)\n- \"Interactive Tutorial\" clearly indicates what happens\n- Consistent with overall help modal styling\n\n## Alternative Entry Points (for reference)\nAfter this task, tutorial can be accessed via:\n1. \\`?\\` → \\`Space\\` (primary, discoverable)\n2. \\`CapsLock\\` (power user shortcut)\n3. \\`CapsLock\\` double-tap (context help)\n\n## Acceptance Criteria\n- [ ] Help modal footer shows Space hint\n- [ ] Space from help modal opens full tutorial\n- [ ] Help modal closes when tutorial opens\n- [ ] Hint styling is consistent with theme\n- [ ] No conflicts with existing help modal keys\n\n## Testing\n- Verify Space opens tutorial\n- Verify other help modal functionality unaffected\n- Verify hint is visible at various terminal sizes\n\n## Dependencies\nDepends on: Tutorial Model Infrastructure (needs tutorial to open)\nShould coordinate with: CapsLock Key Detection (alternative entry)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-17T20:09:07.379156Z","updated_at":"2025-12-17T21:42:34.375513Z","closed_at":"2025-12-17T21:42:34.375513Z","close_reason":"Closed","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0trk","depends_on_id":"bv-d6vi","type":"blocks","created_at":"2025-12-17T20:09:16.495437Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-0wpn","title":"Project velocity should include boundary closures","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-11T17:13:44.573539366Z","created_by":"ubuntu","updated_at":"2026-01-11T17:15:27.568090440Z","closed_at":"2026-01-11T17:15:27.568090440Z","close_reason":"Include boundary closures in project velocity counts","source_repo":".","compaction_level":0}
{"id":"bv-0zk6","title":"E2E: Robot command matrix - comprehensive coverage","description":"Create E2E tests for all robot commands with full parameter coverage.\n\n## Robot Commands to Test\n1. --robot-triage (mega command)\n2. --robot-next (minimal triage)\n3. --robot-insights (graph metrics)\n4. --robot-plan (execution plan)\n5. --robot-priority (recommendations)\n6. --robot-suggest (hygiene suggestions)\n7. --robot-diff (snapshot comparison)\n8. --robot-history (git correlation)\n9. --robot-search (semantic search)\n10. --robot-forecast (ETA prediction)\n11. --robot-label-health\n12. --robot-label-flow\n13. --robot-label-attention\n14. --robot-recipes\n15. --robot-help\n\n## Test Matrix Per Command\n- Default invocation\n- With --label filter\n- With --recipe filter \n- With various --robot-* options\n- Empty data edge case\n- Large data (1000+ issues)\n- Error handling (invalid options)\n\n## Contract Validation\n- JSON schema compliance\n- Required fields present\n- data_hash consistency\n- Deterministic output\n\n## Implementation\n- Create test_robot_matrix.go\n- Table-driven test for each command\n- Shared fixtures for consistency\n- Golden file outputs for regression","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T01:08:15.405184Z","updated_at":"2025-12-17T03:25:58.040590Z","closed_at":"2025-12-17T03:25:58.040590Z","close_reason":"Added robot_matrix_test.go with 12 comprehensive tests covering recipes, help, drift, empty data, label filters, error handling, determinism, usage hints, recipe filtering, and triage sections","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-0zk6","depends_on_id":"bv-cwzm","type":"blocks","created_at":"2025-12-17T01:08:28.603320Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-100","title":"Define LabelHealth type and core structures","description":"Create pkg/analysis/label_health.go with LabelHealth, VelocityMetrics, FreshnessMetrics, FlowMetrics, CriticalityMetrics, LabelDependency, CrossLabelFlow types. Foundation for all label analysis.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:52:58.723976Z","updated_at":"2025-12-16T03:34:02.641271Z","closed_at":"2025-12-16T03:34:02.641271Z","close_reason":"Created pkg/analysis/label_health.go with all required types: LabelHealth, VelocityMetrics, FreshnessMetrics, FlowMetrics, CriticalityMetrics, LabelDependency, CrossLabelFlow, LabelPath, LabelSummary, LabelAnalysisResult. Includes helper functions and tests.","source_repo":".","compaction_level":0,"labels":["labels-view","phase-1"],"dependencies":[{"issue_id":"bv-100","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.766084Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-101","title":"Implement label extraction from issues","description":"Create function to extract unique labels from bead.Bead slice, with counts and basic statistics. Handle edge cases (no labels, duplicate labels).","notes":"Implemented label extraction stats: ExtractLabels/LabelExtractionResult with counts, top labels; go tests passing","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:00.278395Z","updated_at":"2025-12-16T04:04:18.173333Z","closed_at":"2025-12-16T04:04:18.173338Z","source_repo":".","compaction_level":0,"labels":["labels-view","phase-1"],"dependencies":[{"issue_id":"bv-101","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.766906Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-102","title":"Implement basic velocity calculation","description":"Calculate issues closed per time period for a label. Handle cases where modified dates aren't available. Return VelocityMetrics with history, average, and trend.","notes":"Basic velocity calc wired into label health; deterministic label ordering; tests pass","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:01.786059Z","updated_at":"2025-12-16T04:10:24.054466Z","closed_at":"2025-12-16T04:10:24.054466Z","close_reason":"Velocity calculation implemented with ComputeVelocityMetrics and ComputeFreshnessMetrics. Added 10 comprehensive tests for trend detection, average calculation, score capping.","source_repo":".","compaction_level":0,"labels":["labels-view","phase-1"],"dependencies":[{"issue_id":"bv-102","depends_on_id":"bv-101","type":"blocks","created_at":"2025-12-15T22:10:49.767355Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-102","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.767730Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-103","title":"Implement composite health score algorithm","description":"ComputeLabelHealth function: combine velocity (30%), freshness (25%), flow (25%), criticality (20%) into 0-100 score. Include component breakdown for debugging.","notes":"Composite label health scoring stabilized (clamp, rounding); velocity/freshness integrated; tests pass","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:02.993666Z","updated_at":"2025-12-16T04:08:18.621468Z","closed_at":"2025-12-16T04:08:18.621480Z","source_repo":".","compaction_level":0,"labels":["labels-view","phase-1"],"dependencies":[{"issue_id":"bv-103","depends_on_id":"bv-100","type":"blocks","created_at":"2025-12-15T22:10:49.768120Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-103","depends_on_id":"bv-101","type":"blocks","created_at":"2025-12-15T22:10:49.768475Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-103","depends_on_id":"bv-102","type":"blocks","created_at":"2025-12-15T22:10:49.768824Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-103","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.769172Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-104","title":"Create LabelDashboard view component","description":"New Bubble Tea component in pkg/ui/label_dashboard.go. Table layout showing all labels with health score, open count, blocked count, velocity, stalest issue age. j/k navigation, enter for drilldown.","notes":"Label health cache now invalidates on file change; keeps dashboard fast but fresh. Footer hint remains.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:20.038393Z","updated_at":"2025-12-16T08:04:15.752372Z","closed_at":"2025-12-16T08:04:15.752372Z","close_reason":"LabelDashboard fully implemented with table layout, health scores, blocked counts, velocity, j/k navigation, enter for drilldown, cache invalidation on file change","source_repo":".","compaction_level":0,"labels":["labels-view","phase-2"],"dependencies":[{"issue_id":"bv-104","depends_on_id":"bv-103","type":"blocks","created_at":"2025-12-15T22:10:49.769536Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-104","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.769897Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-105","title":"Implement health score rendering with visual indicators","description":"Render health as colored bar (green/yellow/red gradient). Add attention indicator for low-health labels. Support adaptive colors for light/dark terminals.","notes":"Added label health detail modal (open from dashboard with 'h'); close on esc/q/enter. Health bar and indicators remain. Tests passing.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:21.145502Z","updated_at":"2025-12-16T08:03:38.037160Z","closed_at":"2025-12-16T08:03:38.037160Z","close_reason":"Health bar rendering with green/yellow/red gradient implemented in renderHealthCell(); attention indicators added","source_repo":".","compaction_level":0,"labels":["labels-view","phase-2"],"dependencies":[{"issue_id":"bv-105","depends_on_id":"bv-104","type":"blocks","created_at":"2025-12-15T22:10:49.770279Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-105","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.770640Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-106","title":"Implement health detail popup overlay","description":"Modal overlay showing health score breakdown: velocity component, freshness component, flow component, criticality component. Each with progress bar and explanation. Triggered by 'h' key.","notes":"Modal now shows incoming & outgoing cross-label deps; footer hint for label hotkeys added. All tests passing.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:22.422412Z","updated_at":"2025-12-16T08:03:39.631413Z","closed_at":"2025-12-16T08:03:39.631413Z","close_reason":"Health detail modal with component breakdown implemented; shows velocity, freshness, flow, criticality; triggered by 'h' key","source_repo":".","compaction_level":0,"labels":["labels-view","phase-2"],"dependencies":[{"issue_id":"bv-106","depends_on_id":"bv-104","type":"blocks","created_at":"2025-12-15T22:10:49.771004Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-106","depends_on_id":"bv-105","type":"blocks","created_at":"2025-12-15T22:10:49.771358Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-106","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.771712Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-107","title":"Create LabelDrilldown view component","description":"Filtered issue list for single label. Header showing label metrics (health, velocity, blocked count, critical path length). Reuse existing list component with label filter applied.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:23.203521Z","updated_at":"2025-12-16T08:03:40.875274Z","closed_at":"2025-12-16T08:03:40.875274Z","close_reason":"LabelDrilldown implemented in model.go with filtered issue list, header metrics, and 'd' key activation","source_repo":".","compaction_level":0,"labels":["labels-view","phase-3"],"dependencies":[{"issue_id":"bv-107","depends_on_id":"bv-104","type":"blocks","created_at":"2025-12-15T22:10:49.772077Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-107","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.772438Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-108","title":"Implement cross-label dependency display in drilldown","description":"Show 'Depends on: backend(3), database(2)' and 'Blocks: testing(4), docs(1)' in drilldown header. Compute from issue dependencies crossing label boundaries.","notes":"Detail modal now shows incoming & outgoing cross-label deps with top-6 lists. Label health cache persists across opens; invalidates on file change. Missing beads message aligned with tests.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:24.850386Z","updated_at":"2025-12-16T06:54:53.108393Z","closed_at":"2025-12-16T06:54:53.108393Z","close_reason":"Implemented cross-label dependency display showing incoming/outgoing deps with top-5 lists","source_repo":".","compaction_level":0,"labels":["labels-view","phase-3"],"dependencies":[{"issue_id":"bv-108","depends_on_id":"bv-107","type":"blocks","created_at":"2025-12-15T22:10:49.772805Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-108","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.773173Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-108","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.773517Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-109","title":"Implement label-specific graph analysis sub-view","description":"Press 'g' in drilldown to show PageRank/betweenness/critical-path computed on label's subgraph only. Reuse existing insights rendering with filtered data.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:25.901661Z","updated_at":"2025-12-16T17:39:52.721956Z","closed_at":"2025-12-16T17:39:52.721956Z","close_reason":"Added 'g' key in label drilldown to show graph analysis sub-view with PageRank and Critical Path computed on label subgraph","source_repo":".","compaction_level":0,"labels":["labels-view","phase-3"],"dependencies":[{"issue_id":"bv-109","depends_on_id":"bv-107","type":"blocks","created_at":"2025-12-15T22:10:49.773885Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-109","depends_on_id":"bv-113","type":"blocks","created_at":"2025-12-15T22:10:49.774250Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-109","depends_on_id":"bv-114","type":"blocks","created_at":"2025-12-15T22:10:49.774683Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-109","depends_on_id":"bv-115","type":"blocks","created_at":"2025-12-15T22:10:49.775163Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-109","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.775584Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-10g","title":"Implement interactive deployment wizard (--pages flag)","description":"# Implement Interactive Deployment Wizard (--pages flag)\n\n## Context\nThe deployment wizard is an interactive CLI experience (like mcp_agent_mail's share wizard) that guides users through exporting and deploying their static site.\n\n## Requirements\n\n### New CLI Flag\n```go\npagesWizard := flag.Bool(\"pages\", false, \"Launch interactive Pages deployment wizard\")\n```\n\n### Wizard Flow\n```\n$ bv --pages\n\n╔══════════════════════════════════════════════════════════════════╗\n║ bv → Static Site Deployment Wizard ║\n╠══════════════════════════════════════════════════════════════════╣\n║ This wizard will: ║\n║ 1. Export your issues to a static HTML bundle ║\n║ 2. Preview it locally ║\n║ 3. Deploy to GitHub Pages or Cloudflare Pages ║\n║ ║\n║ Press Ctrl+C anytime to cancel ║\n╚══════════════════════════════════════════════════════════════════╝\n\nStep 1: Export Configuration\n────────────────────────────\nInclude closed issues? [y/N]: n\nCustom site title (default: \"Project Issues\"): My Project Dashboard\nCustom subtitle: Sprint 42 Status\n\nStep 2: Deployment Target\n────────────────────────────\nWhere do you want to deploy?\n 1. GitHub Pages (create new repository)\n 2. Cloudflare Pages (fast global CDN)\n 3. Export locally only\n\nChoice [1]: 1\n\nStep 3: GitHub Configuration\n────────────────────────────\nRepository name: my-project-status\nMake repository private? [y/N]: n\nRepository description: Issue tracker dashboard\n\nStep 4: Prerequisites Check\n────────────────────────────\n✓ gh CLI installed and authenticated\n✓ git configured (user: John Doe <john@example.com>)\n\nStep 5: Export\n────────────────────────────\nExporting static site...\n → Loading issues from .beads/beads.jsonl\n → Found 178 issues (85 open, 93 closed)\n → Running graph analysis...\n → Generating triage data...\n → Writing JSON files...\n → Copying viewer assets...\n✓ Bundle created: /tmp/bv-pages-abc123\n\nStep 6: Preview\n────────────────────────────\nPreview the site before deploying? [Y/n]: y\nStarting preview server at http://localhost:9000...\nPress 'r' to refresh, 'd' to deploy, 'q' to quit\n\n[Browser opens]\n\nStep 7: Deploy\n────────────────────────────\nCreating GitHub repository...\n✓ Created: johnsmith/my-project-status\nPushing to GitHub...\n✓ Files pushed to main branch\nEnabling GitHub Pages...\n✓ Pages enabled\n\n╔══════════════════════════════════════════════════════════════════╗\n║ Deployment Complete! 🎉 ║\n╠══════════════════════════════════════════════════════════════════╣\n║ Repository: https://github.com/johnsmith/my-project-status ║\n║ Live site: https://johnsmith.github.io/my-project-status/ ║\n║ ║\n║ Note: GitHub Pages may take 1-2 minutes to become available ║\n║ ║\n║ To update later: ║\n║ bv --export-pages ./update-bundle ║\n║ cd ./update-bundle && git add . && git commit && git push ║\n╚══════════════════════════════════════════════════════════════════╝\n```\n\n### Implementation Structure\n```go\n// pkg/export/wizard.go\n\ntype WizardConfig struct {\n IncludeClosed bool\n Title string\n Subtitle string\n DeployTarget string // \"github\", \"cloudflare\", \"local\"\n RepoName string\n RepoPrivate bool\n RepoDescription string\n OutputPath string\n}\n\nfunc RunWizard(beadsPath string) error {\n config := &WizardConfig{}\n \n // Step 1: Collect export options\n if err := collectExportOptions(config); err != nil {\n return err\n }\n \n // Step 2: Collect deployment target\n if err := collectDeployTarget(config); err != nil {\n return err\n }\n \n // Step 3: Check prerequisites\n if err := checkPrerequisites(config); err != nil {\n return err\n }\n \n // Step 4: Export bundle\n bundlePath, err := exportBundle(beadsPath, config)\n if err != nil {\n return err\n }\n \n // Step 5: Preview\n if shouldPreview() {\n action := runPreview(bundlePath)\n if action == \"quit\" {\n return nil\n }\n }\n \n // Step 6: Deploy\n return deploy(bundlePath, config)\n}\n```\n\n### Terminal UI\nUse Go packages for nice TUI:\n- `github.com/charmbracelet/huh` for forms (consistent with bubbletea)\n- `github.com/charmbracelet/lipgloss` for styling\n- Or simpler: `bufio.Scanner` + ANSI colors\n\n### State Persistence\nSave wizard config for future runs:\n```\n~/.config/bv/pages-wizard.json\n{\n \"last_repo_name\": \"my-project-status\",\n \"last_deploy_target\": \"github\",\n \"include_closed\": false\n}\n```\n\n## Acceptance Criteria\n- [ ] --pages flag launches wizard\n- [ ] All steps work interactively\n- [ ] Prerequisites check validates tools\n- [ ] Preview server works with key controls\n- [ ] GitHub deployment creates/updates repo\n- [ ] Success message shows correct URLs\n- [ ] Config saved for next run\n- [ ] Ctrl+C cleanly exits at any step\n- [ ] Works in non-TTY with sensible defaults\n\n## Error Handling\n- gh not installed: Offer to install (brew) or show manual instructions\n- gh not authenticated: Run `gh auth login` inline\n- Repo exists: Option to update or choose new name\n- Network errors: Clear message with retry option","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T04:07:42.077822Z","updated_at":"2025-12-16T08:29:58.295390Z","closed_at":"2025-12-16T08:29:58.295390Z","close_reason":"Implemented interactive deployment wizard with --pages flag. Steps: export config, target selection, prerequisites check, export/preview/deploy flow. Tests pass.","source_repo":".","compaction_level":0,"labels":["phase-3","static-pages"],"dependencies":[{"issue_id":"bv-10g","depends_on_id":"bv-50r","type":"blocks","created_at":"2025-12-16T04:10:55.093274Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-10g","depends_on_id":"bv-73f","type":"blocks","created_at":"2025-12-16T04:10:54.931358Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-10g","depends_on_id":"bv-kdn","type":"blocks","created_at":"2025-12-16T04:10:55.285680Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-110","title":"Implement CrossLabelFlow computation","description":"ComputeCrossLabelFlows function: analyze all dependencies, group by (from_label, to_label) pairs, return counts. Handle issues with multiple labels (count each pairing).","notes":"Implemented ComputeCrossLabelFlow with matrix/dep list/bottlenecks; tests added; deterministic ordering","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:40.145284Z","updated_at":"2025-12-16T04:10:12.774648Z","closed_at":"2025-12-16T04:10:12.774656Z","source_repo":".","compaction_level":0,"labels":["labels-view","phase-4"],"dependencies":[{"issue_id":"bv-110","depends_on_id":"bv-101","type":"blocks","created_at":"2025-12-15T22:10:49.776028Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-110","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.776469Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-111","title":"Create flow matrix view component","description":"Matrix visualization showing label-to-label dependencies. Rows = dependents, Cols = dependencies. Numbers show count of cross-label edges. Color intensity by count.","notes":"Key F shows cross-label flow matrix (rows=from, cols=to, counts). Uses ComputeCrossLabelFlow + FlowMatrixView text table.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:41.074320Z","updated_at":"2025-12-16T08:03:42.458509Z","closed_at":"2025-12-16T08:03:42.458509Z","close_reason":"FlowMatrixView implemented in flow_matrix.go with label-to-label dependency matrix; wired into model via 'F' key","source_repo":".","compaction_level":0,"labels":["labels-view","phase-4"],"dependencies":[{"issue_id":"bv-111","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.776895Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-111","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.777286Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-112","title":"Implement blockage impact cascade analysis","description":"When a label has blocked issues, compute transitive downstream impact. Show tree: database(4 blocked) -> backend: 3 waiting -> testing: 2 waiting. Include recommendations for which issues to unblock first.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:42.028946Z","updated_at":"2025-12-16T17:58:47.846237Z","closed_at":"2025-12-16T17:58:47.846237Z","close_reason":"Implemented ComputeBlockageCascade with BFS for transitive downstream impact, cascade levels, recommendations, helper methods and 7 tests","source_repo":".","compaction_level":0,"labels":["labels-view","phase-4"],"dependencies":[{"issue_id":"bv-112","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.777681Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-112","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.778056Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-113","title":"Implement label subgraph extraction","description":"ComputeLabelSubgraph function: extract issues with given label plus their direct dependencies (even if outside label). Build adjacency for label-scoped graph analysis.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:43.717852Z","updated_at":"2025-12-16T04:35:59.804995Z","closed_at":"2025-12-16T04:35:59.804995Z","close_reason":"Implemented ComputeLabelSubgraph function with LabelSubgraph type. Added 8 comprehensive tests for edge cases (empty, dependencies, roots/leaves, adjacency, non-blocking deps).","source_repo":".","compaction_level":0,"labels":["labels-view","phase-5"],"dependencies":[{"issue_id":"bv-113","depends_on_id":"bv-101","type":"blocks","created_at":"2025-12-15T22:10:49.778446Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-113","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.778816Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-114","title":"Implement label-specific PageRank","description":"Run PageRank on label subgraph. Return map[string]float64 with issue IDs. Normalize scores within label context. Reuse existing PageRank algorithm with filtered adjacency.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:45.036027Z","updated_at":"2025-12-16T04:38:56.790970Z","closed_at":"2025-12-16T04:38:56.790970Z","close_reason":"Implemented ComputeLabelPageRank and ComputeLabelPageRankFromIssues. Returns LabelPageRankResult with scores, normalized values, top issues, and core-only scores. Added 6 comprehensive tests.","source_repo":".","compaction_level":0,"labels":["labels-view","phase-5"],"dependencies":[{"issue_id":"bv-114","depends_on_id":"bv-113","type":"blocks","created_at":"2025-12-15T22:10:49.779288Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-114","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.779798Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-115","title":"Implement label-specific critical path","description":"Find longest dependency chain within label's subgraph. Return path as []string issue IDs. Shows label's internal bottleneck structure.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:53:46.420788Z","updated_at":"2025-12-16T16:51:32.015075Z","closed_at":"2025-12-16T16:51:32.015075Z","close_reason":"Implemented ComputeLabelCriticalPath function and tests","source_repo":".","compaction_level":0,"labels":["labels-view","phase-5"],"dependencies":[{"issue_id":"bv-115","depends_on_id":"bv-113","type":"blocks","created_at":"2025-12-15T22:10:49.780283Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-115","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.780754Z","created_by":"import","metadata":"{}","thread_id":""}],"comments":[{"id":1,"issue_id":"bv-115","author":"WhiteCastle","text":"I closed bv-99 to unblock the remaining label-view tasks. I’m working on bv-115 now: implement label-subgraph critical path as an explicit path ([]issue IDs), plus tests. Will update/close when merged.","created_at":"2025-12-17T04:59:01Z"}]}
{"id":"bv-116","title":"Implement attention score algorithm","description":"attention = (pagerank_sum * staleness_factor * block_impact) / velocity. Compute for all labels, rank by attention needed. Higher = needs more attention.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:02.911756Z","updated_at":"2025-12-16T04:41:36.794731Z","closed_at":"2025-12-16T04:41:36.794731Z","close_reason":"Implemented ComputeLabelAttentionScores with formula: (pagerank_sum * staleness_factor * block_impact) / velocity. Returns ranked labels by attention needed. Added 7 comprehensive tests.","source_repo":".","compaction_level":0,"labels":["labels-view","phase-6"],"dependencies":[{"issue_id":"bv-116","depends_on_id":"bv-103","type":"blocks","created_at":"2025-12-15T22:10:49.781190Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-116","depends_on_id":"bv-114","type":"blocks","created_at":"2025-12-15T22:10:49.781648Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-116","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.782624Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-117","title":"Create attention ranking view component","description":"Dashboard showing labels sorted by attention score. Each row: rank, label name, attention score, brief reason (e.g., 'High PageRank, 4 blocked, low velocity'). Quick jump via number keys.","notes":"Added footer/help hints for label intelligence keys: L labels, A attention, F flow.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:04.428644Z","updated_at":"2025-12-16T07:27:14.968847Z","closed_at":"2025-12-16T07:27:14.968847Z","close_reason":"Implemented attention ranking view with quick jump via number keys 1-9","source_repo":".","compaction_level":0,"labels":["labels-view","phase-6"],"dependencies":[{"issue_id":"bv-117","depends_on_id":"bv-116","type":"blocks","created_at":"2025-12-15T22:10:49.783226Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-117","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.783649Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-118","title":"Integrate label intelligence into Insights view","description":"Add 'Label Intelligence' section to existing Insights: labels needing attention, velocity trends, cross-label bottlenecks, recommendations. Computed on demand, shown alongside graph metrics.","notes":"Insights view now accepts extraText/labelAttention/labelFlow; keys A/F render attention table or flow matrix inside insights pane.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:05.544363Z","updated_at":"2025-12-16T08:04:17.057795Z","closed_at":"2025-12-16T08:04:17.057795Z","close_reason":"Label intelligence integrated into Insights view; keys A/F render attention table or flow matrix inside insights pane","source_repo":".","compaction_level":0,"labels":["labels-view","phase-6"],"dependencies":[{"issue_id":"bv-118","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.784465Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-118","depends_on_id":"bv-116","type":"blocks","created_at":"2025-12-15T22:10:49.784072Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-118","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.784849Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-119","title":"Implement --robot-label-health command","description":"New robot flag: bv --robot-label-health [label]. Without arg: all labels' health. With arg: deep analysis of single label. JSON output with health, components, recommendations.","notes":"Implemented --robot-label-health command with JSON output and help text.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:06.784118Z","updated_at":"2025-12-16T04:13:42.237180Z","closed_at":"2025-12-16T04:13:42.237227Z","source_repo":".","compaction_level":0,"labels":["labels-view","phase-7"],"dependencies":[{"issue_id":"bv-119","depends_on_id":"bv-103","type":"blocks","created_at":"2025-12-15T22:10:49.785252Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-119","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.785640Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-120","title":"Implement --robot-label-flow command","description":"New robot flag: bv --robot-label-flow. JSON output with cross-label flows array, source/sink label classifications, flow insights.","notes":"Implemented --robot-label-flow command (JSON output for cross-label dependencies), CLI help and usage hints; leverages existing ComputeCrossLabelFlow","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:07.567524Z","updated_at":"2025-12-16T04:15:54.091632Z","closed_at":"2025-12-16T04:15:54.091648Z","source_repo":".","compaction_level":0,"labels":["labels-view","phase-7"],"dependencies":[{"issue_id":"bv-120","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.786035Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-120","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.788117Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-121","title":"Implement --robot-label-attention command","description":"New robot flag: bv --robot-label-attention --limit=N. JSON output with attention-ranked labels, scores, and reasons. Default limit 5.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:08.566321Z","updated_at":"2025-12-16T04:49:43.146304Z","closed_at":"2025-12-16T04:49:43.146304Z","close_reason":"Implemented --robot-label-attention command with --attention-limit flag","source_repo":".","compaction_level":0,"labels":["labels-view","phase-7"],"dependencies":[{"issue_id":"bv-121","depends_on_id":"bv-116","type":"blocks","created_at":"2025-12-15T22:10:49.788578Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-121","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.788969Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-122","title":"Add --label filter to existing robot commands","description":"Add --label=X flag to --robot-insights, --robot-plan, --robot-priority. When set, analysis scoped to label's subgraph. Include label health context in output.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:09.570570Z","updated_at":"2025-12-16T08:11:21.629825Z","closed_at":"2025-12-16T08:11:21.629825Z","close_reason":"Added --label flag to scope robot commands to label subgraph with health context","source_repo":".","compaction_level":0,"labels":["labels-view","phase-7"],"dependencies":[{"issue_id":"bv-122","depends_on_id":"bv-103","type":"blocks","created_at":"2025-12-15T22:10:49.789756Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-122","depends_on_id":"bv-113","type":"blocks","created_at":"2025-12-15T22:10:49.789384Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-122","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.790135Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-123","title":"Implement historical velocity computation","description":"Calculate velocity per week for past N weeks. Requires bead history feature (bv-62) for accurate historical data. Without history, use current snapshot to estimate.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:25.824262Z","updated_at":"2025-12-16T16:03:34.302883Z","closed_at":"2025-12-16T16:03:34.302883Z","close_reason":"Implemented historical velocity computation with weekly bucketing, moving averages, trend detection, and comprehensive tests","source_repo":".","compaction_level":0,"labels":["labels-view","phase-8"],"dependencies":[{"issue_id":"bv-123","depends_on_id":"bv-102","type":"blocks","created_at":"2025-12-15T22:10:49.790560Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-123","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.790981Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-124","title":"Implement velocity trend detection","description":"Analyze velocity history to classify trend: increasing, decreasing, stable, volatile. Use simple linear regression or moving average comparison. Include in VelocityMetrics.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:26.672673Z","updated_at":"2025-12-16T16:27:21.777974Z","closed_at":"2025-12-16T16:27:21.777974Z","close_reason":"Implemented GetVelocityTrend() in HistoricalVelocity with moving average comparison. Returns accelerating/decelerating/stable/erratic classifications with variance-based volatility detection.","source_repo":".","compaction_level":0,"labels":["labels-view","phase-8"],"dependencies":[{"issue_id":"bv-124","depends_on_id":"bv-123","type":"blocks","created_at":"2025-12-15T22:10:49.791391Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-124","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.791787Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-125","title":"Create velocity comparison view component","description":"Side-by-side velocity comparison for all labels. Columns: label, W-4, W-3, W-2, W-1, Avg, Trend indicator. Sparkline-style mini bar chart per row.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:27.856557Z","updated_at":"2025-12-16T19:26:14.664921Z","closed_at":"2025-12-16T19:26:14.664921Z","close_reason":"Closed","source_repo":".","compaction_level":0,"labels":["labels-view","phase-8"],"dependencies":[{"issue_id":"bv-125","depends_on_id":"bv-124","type":"blocks","created_at":"2025-12-15T22:10:49.792176Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-125","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.792561Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-126","title":"Add keyboard shortcuts for label navigation","description":"Main view: 'L' opens label dashboard, 'l' opens quick label filter popup with fuzzy search. Implement fuzzy search with fzf-style scoring. Integrate with existing keybinding system.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:28.924842Z","updated_at":"2025-12-16T18:06:53.742878Z","closed_at":"2025-12-16T18:06:53.742878Z","close_reason":"Added 'l' key for quick label filter popup with fuzzy search, LabelPickerModel with fzf-style scoring, and 14 tests","source_repo":".","compaction_level":0,"labels":["labels-view","phase-2"],"dependencies":[{"issue_id":"bv-126","depends_on_id":"bv-104","type":"blocks","created_at":"2025-12-15T22:10:49.792955Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-126","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.793345Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-127","title":"Write comprehensive tests for label analysis functions","description":"Unit tests for: LabelHealth computation, CrossLabelFlow, subgraph extraction, label PageRank, attention score. Include edge cases: no labels, single label, circular dependencies.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:30.369339Z","updated_at":"2025-12-16T04:56:26.562627Z","closed_at":"2025-12-16T04:56:26.562627Z","close_reason":"Added comprehensive edge case tests: circular deps, no labels, single label, integration tests","source_repo":".","compaction_level":0,"labels":["labels-view","testing"],"dependencies":[{"issue_id":"bv-127","depends_on_id":"bv-103","type":"blocks","created_at":"2025-12-15T22:10:49.793729Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-127","depends_on_id":"bv-110","type":"blocks","created_at":"2025-12-15T22:10:49.794133Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-127","depends_on_id":"bv-113","type":"blocks","created_at":"2025-12-15T22:10:49.794527Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-127","depends_on_id":"bv-116","type":"blocks","created_at":"2025-12-15T22:10:49.794898Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-127","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.795275Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-128","title":"Document label analysis in robot-help output","description":"Update AGENTS.md and --robot-help with label commands: --robot-label-health, --robot-label-flow, --robot-label-attention, --label filter. Include usage examples.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:54:32.144608Z","updated_at":"2025-12-16T18:09:38.415333Z","closed_at":"2025-12-16T18:09:38.415333Z","close_reason":"Updated AGENTS.md with label analysis commands: --robot-label-health, --robot-label-flow, --robot-label-attention, --label filter, plus usage examples","source_repo":".","compaction_level":0,"labels":["docs","labels-view"],"dependencies":[{"issue_id":"bv-128","depends_on_id":"bv-119","type":"blocks","created_at":"2025-12-15T22:10:49.795674Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-128","depends_on_id":"bv-120","type":"blocks","created_at":"2025-12-15T22:10:49.796062Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-128","depends_on_id":"bv-121","type":"blocks","created_at":"2025-12-15T22:10:49.796434Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-128","depends_on_id":"bv-122","type":"blocks","created_at":"2025-12-15T22:10:49.796819Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-128","depends_on_id":"bv-99","type":"blocks","created_at":"2025-12-15T22:10:49.797203Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-129","title":"Parallelization gain metric","description":"Add parallelization_gain signal shown only for top-N recommendations (respect caps). Compute via simulated removal (condensed DAG), deterministic, status-flagged. Integrate into advanced_insights.metrics with a single-line 'how to use' in output footer.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:58:01.745006Z","updated_at":"2025-12-16T02:43:04.546524Z","closed_at":"2025-12-16T02:43:04.546524Z","close_reason":"Implemented parallelization_gain metric in WhatIfDelta with tests and usage hints","source_repo":".","compaction_level":0,"labels":["ai-agent,advanced-insights"],"dependencies":[{"issue_id":"bv-129","depends_on_id":"bv-80","type":"parent-child","created_at":"2025-12-15T22:10:49.797599Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-129","depends_on_id":"bv-81","type":"blocks","created_at":"2025-12-15T22:10:49.797969Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-129","depends_on_id":"bv-82","type":"blocks","created_at":"2025-12-15T22:10:49.798349Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-12tz","title":"Fix staticcheck warnings across analysis/export/ui","description":"Run staticcheck and fix obvious findings: remove dead code/unused fields, fix minor style warnings, update deprecated viewport scroll calls, and address potential nil deref in export tests.","notes":"Fixed staticcheck ./... findings: removed dead/unused helpers and fields (analysis/ui/cmd), cleaned up minor style issues (error strings, unnecessary fmt.Sprintf), updated viewport scroll calls to ScrollUp/Down, and tightened nil-safety in export tests. go test ./... and staticcheck clean.","status":"closed","priority":2,"issue_type":"chore","created_at":"2025-12-17T00:23:46.842499Z","updated_at":"2025-12-17T00:36:22.114163Z","closed_at":"2025-12-17T00:36:22.114167Z","close_reason":"Fixed all 7 staticcheck warnings: removed unused formatDueIn function, replaced t.Sub(time.Now()) with time.Until(), removed unused showVelocityComparison and searchTerm fields, updated deprecated viewport.LineUp/LineDown to ScrollUp/ScrollDown, and simplified nil map check in test","source_repo":".","compaction_level":0,"labels":["cleanup","staticcheck"]}
{"id":"bv-130","title":"Cycle break suggestions for high-impact beads","description":"For beads inside cycles, compute minimal edge removals ranked by collateral impact (dependents lost). Use condensed SCCs + heuristics; cap count/runtime; deterministic ordering. Output suggestions[] kind='cycle_break' with rationale/status; include explicit advisory: 'Structural fix—apply before executing dependents.' Integrate with advanced_insights and reuse hash/config.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:58:14.938028Z","updated_at":"2025-12-16T02:50:14.098369Z","closed_at":"2025-12-16T02:50:14.098369Z","close_reason":"Implemented as part of bv-181 advanced_insights.cycle_break: edge removals ranked by impact (frequency across cycles) with collateral count (dependents affected), deterministic ordering, capped suggestions (CycleBreakLimit=5), rationale text, status tracking, and advisory text. Fully integrated into --robot-insights output.","source_repo":".","compaction_level":0,"labels":["ai-agent,advanced-insights"],"dependencies":[{"issue_id":"bv-130","depends_on_id":"bv-54","type":"blocks","created_at":"2025-12-15T22:10:49.799134Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-130","depends_on_id":"bv-80","type":"parent-child","created_at":"2025-12-15T22:10:49.798743Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-130","depends_on_id":"bv-85","type":"blocks","created_at":"2025-12-15T22:10:49.799503Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-131","title":"Agent brief export bundle","description":"Agent brief export bundle: single command emits priorities JSON, insights JSON, priority brief PNG, graph snapshot PNG/SVG, jq helper snippets, and hash/config. Caps respected; concise readme/help entry; designed for CI bots to post to chat with clear legend links.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T20:58:27.153968Z","updated_at":"2025-12-16T21:44:51.702904Z","closed_at":"2025-12-16T21:44:51.702904Z","close_reason":"Implemented --agent-brief <dir> command that exports triage.json, insights.json, brief.md, helpers.md, and meta.json","source_repo":".","compaction_level":0,"labels":["export,ai-agent,advanced-insights"],"dependencies":[{"issue_id":"bv-131","depends_on_id":"bv-84","type":"blocks","created_at":"2025-12-15T22:10:49.800281Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-131","depends_on_id":"bv-89","type":"blocks","created_at":"2025-12-15T22:10:49.801451Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-131","depends_on_id":"bv-92","type":"parent-child","created_at":"2025-12-15T22:10:49.799891Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-131","depends_on_id":"bv-94","type":"blocks","created_at":"2025-12-15T22:10:49.800667Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-131","depends_on_id":"bv-96","type":"blocks","created_at":"2025-12-15T22:10:49.801039Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-132","title":"Agent Swarm Protocol: Multi-Agent Coordination","description":"Enable multiple AI agents to work on the same project without conflicts.\n\n## INTEGRATION PRINCIPLES FOR AI AGENTS\n\n### Problem This Solves\nWithout coordination, multiple agents (Claude Code, Cursor, Codex) will:\n- Work on the same issues simultaneously\n- Edit the same files causing merge conflicts\n- Duplicate effort or produce conflicting changes\n\n### How It Integrates With Existing Commands\nThis feature AUGMENTS existing commands, doesn't replace them:\n\n1. **--robot-plan** will include a new field:\n ```json\n {\n \"tracks\": [...],\n \"agent_claims\": {\n \"bv-42\": {\"agent\": \"claude-opus-1\", \"claimed_at\": \"...\", \"expires_at\": \"...\"}\n },\n \"available_for_claim\": [\"bv-43\", \"bv-44\"] // Excludes claimed work\n }\n ```\n\n2. **--robot-priority** will filter out claimed items by default:\n ```json\n {\n \"recommendations\": [...], // Only unclaimed items\n \"claimed_by_others\": 3 // How many filtered out\n }\n ```\n\n### Self-Documenting Output Pattern\nEvery agent-related robot command MUST include an 'explanation' field:\n```json\n{\n \"command\": \"--robot-agents\",\n \"result\": {...},\n \"explanation\": {\n \"what\": \"Shows all agents currently registered on this project\",\n \"when_to_use\": \"Before starting work to see who else is active\",\n \"action\": \"If you see other agents, use --robot-claim to reserve your work\"\n }\n}\n```\n\n### Claim Expiration\nClaims auto-expire after 30 minutes of no heartbeat. This prevents orphaned claims from blocking work.\n\n### File Hints Are Advisory\nFile reservation hints are NOT locks - they're signals to other agents. An agent seeing a conflict should:\n1. Check if the other agent is still active (recent heartbeat)\n2. If inactive > 30min, proceed with work\n3. If active, choose different work or coordinate\n\nLabels: [agent-swarm coordination]","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-15T21:02:31.916870Z","updated_at":"2025-12-16T00:26:24.451124Z","closed_at":"2025-12-16T00:26:24.451124Z","close_reason":"Out of scope: agent swarm coordination is handled by mcp_agent_mail project","source_repo":".","compaction_level":0,"labels":["agent-swarm","coordination"]}
{"id":"bv-133","title":"Unified Triage Intelligence","description":"# Unified Triage Intelligence: The Mega Command\n\n**This is THE primary entry point for AI agents using bv.**\n\n## Vision\n\nInstead of agents calling 5-10 different robot commands and mentally merging results, `--robot-triage` provides EVERYTHING an agent needs in ONE call:\n\n- What should I work on? (recommendations)\n- Are there fires to put out? (alerts)\n- Who else is working? (team awareness)\n- Will I conflict with anyone? (file conflicts)\n- What's the project health? (stats, graph, labels)\n- Any handoffs waiting for me? (collaboration)\n\n## Design Principles\n\n1. **One call = full context** - Agent calls triage once, has everything\n2. **Critical first** - Alerts before recommendations\n3. **Actionable throughout** - Every section says what to DO\n4. **Self-documenting** - Output explains itself\n5. **Team-aware** - Multi-agent coordination built-in\n6. **Progressive detail** - Summaries by default, deep-dive commands available\n\n## Output Structure (Priority Order)\n\n```\n1. meta - Command info, timestamp, data hash\n2. quick_ref - One-line summary for fast parsing\n3. alerts - Critical issues FIRST (fires before features)\n4. top_pick - THE #1 recommendation with full reasoning\n5. your_session - Your claims, handoffs, context\n6. team - Other agents, conflicts, available tracks\n7. recommendations- Next 5 items after top_pick\n8. quick_wins - Low-effort high-impact items\n9. blockers - Items that unblock the most work\n10. project_health- Stats, graph health, label health, drift\n11. suggestions - Hygiene hints (missing deps, stale claims)\n12. commands - Exact commands for next steps\n```\n\n## Relationship to Other Commands\n\n`--robot-triage` INCLUDES summaries from:\n- Agent Swarm (team, your_session, conflicts)\n- Proactive Alerts (alerts section)\n- Priority scoring (recommendations, top_pick)\n- Labels View (project_health.labels)\n- Execution Plan (available tracks)\n- History (your_session context)\n- Drift (project_health.drift)\n- Suggestions (suggestions section)\n\nIndividual commands remain for DEEP DIVES:\n- `--robot-plan` for full execution tracks\n- `--robot-insights` for complete graph metrics\n- `--robot-agents` for detailed agent activity\n- `--robot-alerts` for full alert details\n- `--robot-history` for commit correlation\n\n## Companion: --robot-next\n\nFor agents that just want ONE answer:\n```bash\nbv --robot-next # Returns ONLY top_pick, nothing else\n```\n\n## Success Criteria\n\nAn AI agent should be able to:\n1. Call `--robot-triage` at session start\n2. Immediately understand what to work on\n3. Know if there are any critical issues\n4. See team context without additional calls\n5. Get exact commands for next actions","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-15T21:02:33.707789Z","updated_at":"2025-12-16T04:15:56.242275Z","closed_at":"2025-12-16T04:15:56.242275Z","close_reason":"Core triage intelligence complete: types defined, unified scoring, reason generation, --robot-triage and --robot-next commands implemented. TUI integration (bv-151) remaining as enhancement","source_repo":".","compaction_level":0,"labels":["intelligence","triage"]}
{"id":"bv-134","title":"Sprint & Forecast System","description":"Add time dimension for planning and projections. Sprint/milestone definitions, ETA estimation per bead based on velocity and complexity, burndown tracking, capacity modeling. Enables realistic project planning and deadline management.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-15T21:02:35.613381Z","updated_at":"2025-12-16T19:27:25.150745Z","closed_at":"2025-12-16T19:27:25.150745Z","close_reason":"All 7 children completed: Sprint types, CRUD, ETA estimation, robot-forecast, robot-burndown, capacity simulation, and TUI sprint view","source_repo":".","compaction_level":0,"labels":["forecast","planning"],"comments":[{"id":2,"issue_id":"bv-134","author":"WhiteCastle","text":"Unblocked forecast tasks by converting their bv-134 dependency from blocking (blocks) to non-blocking (parent-child). This keeps epic grouping (bd epic status) without gating robot triage/actionability.","created_at":"2025-12-17T04:59:01Z"},{"id":3,"issue_id":"bv-134","author":"WhiteCastle","text":"bv-155 is now closed (types + sprints.jsonl loader). Robot-next now recommends bv-157 (ETA algorithm) as next high-impact (unblocks bv-158 + bv-160).","created_at":"2025-12-17T04:59:01Z"}]}
{"id":"bv-135","title":"Proactive Alerts Engine","description":"Background analysis that surfaces issues PROACTIVELY (not just when asked).\n\n## RELATIONSHIP TO EXISTING DRIFT SYSTEM\n\npkg/drift/drift.go ALREADY implements drift detection with:\n- Alert types: new_cycle, pagerank_change, density_growth, blocked_increase\n- Severity levels: critical, warning, info\n- --check-drift and --robot-drift CLI\n\nTHIS FEATURE EXTENDS drift to add:\n1. **Velocity anomaly detection** (new - not in drift.go)\n2. **Individual issue staleness** (priority.go has staleness but per-issue, not alerting)\n3. **Integration with triage** (alerts feed into --robot-triage)\n\n## WHAT'S NEW vs WHAT EXISTS\n\n| Alert Type | Exists? | Location |\n|------------|---------|----------|\n| new_cycle | YES | pkg/drift/drift.go |\n| pagerank_change | YES | pkg/drift/drift.go |\n| density_growth | YES | pkg/drift/drift.go |\n| blocked_increase | YES | pkg/drift/drift.go |\n| velocity_drop | NEW | This feature |\n| stale_issue | NEW | This feature (per-issue, not aggregate) |\n| abandoned_claim | NEW | Needs agent swarm |\n\n## INTEGRATION PATTERN\n\nAlerts should be INCLUDED in triage output, not a separate command agents must call:\n\n```json\n{\n \"recommendation\": {...},\n \"alerts\": [\n {\n \"type\": \"velocity_drop\",\n \"severity\": \"warning\", \n \"label\": \"database\",\n \"message\": \"Velocity dropped 40% this week (was 4/wk, now 2.4/wk)\",\n \"action\": \"Consider prioritizing database work or checking for blockers\"\n }\n ]\n}\n```\n\n## CONFIGURATION REUSE\n\nUse existing .bv/drift.yaml for thresholds:\n```yaml\n# Existing drift thresholds\ndensity_warning_pct: 50\nblocked_increase_threshold: 3\n\n# NEW alert thresholds (add to same file)\nvelocity_drop_threshold: 0.3 # 30% drop triggers warning\nstale_days_warning: 14\nstale_days_critical: 30\n```\n\n## DO NOT CREATE ALERT FATIGUE\n\nOnly surface alerts that are ACTIONABLE:\n- Don't alert on everything\n- Group related alerts\n- Provide clear action steps\n\nLabels: [alerts proactive]","notes":"Completed --robot-alerts CLI integration and proactive alerts (stale/blocking cascades); thresholds in drift config; tests passing.","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-15T21:02:37.151212Z","updated_at":"2025-12-16T03:47:26.513071Z","closed_at":"2025-12-16T03:47:26.513082Z","source_repo":".","compaction_level":0,"labels":["alerts","proactive"]}
{"id":"bv-136","title":"Dependency Graph Visualization","description":"Make the computed dependency graph visible in exportable formats.\n\n## WHAT ALREADY EXISTS vs WHAT'S NEW\n\n| Feature | Exists? | Location |\n|---------|---------|----------|\n| Mermaid diagram | YES | pkg/export/markdown.go (in markdown export) |\n| ASCII art TUI | YES | pkg/ui/graph.go (full GraphModel with navigation) |\n| DOT format | NEW | This feature |\n| --robot-graph CLI | NEW | This feature |\n| Standalone Mermaid export | NEW | Mermaid exists but only in markdown bundle |\n\n## WHAT THIS FEATURE ACTUALLY ADDS\n\n1. **--robot-graph command**: Dedicated CLI for graph export\n ```bash\n bv --robot-graph # Default: JSON adjacency\n bv --robot-graph --format=dot # Graphviz DOT\n bv --robot-graph --format=mermaid # Standalone Mermaid\n bv --robot-graph --label=backend # Filter to label\n bv --robot-graph --root=bv-42 # Subgraph from root\n ```\n\n2. **DOT format** (NEW): For Graphviz rendering\n ```dot\n digraph G {\n rankdir=LR;\n node [shape=box];\n \"bv-42\" [label=\"API schema\\nP1 open\" color=\"green\"];\n \"bv-31\" -> \"bv-42\" [style=bold]; // blocks\n }\n ```\n\n3. **Subgraph extraction**: Already partially in graph.go but expose as reusable function\n\n## ROBOT OUTPUT PATTERN\n\n```json\n{\n \"format\": \"dot\",\n \"graph\": \"digraph G {...}\",\n \"nodes\": 12,\n \"edges\": 8,\n \"filters_applied\": {\"label\": \"backend\", \"depth\": 2},\n \"explanation\": {\n \"what\": \"Dependency graph in Graphviz DOT format\",\n \"how_to_render\": \"Save to file.dot, run: dot -Tpng file.dot -o graph.png\",\n \"when_to_use\": \"When you need a visual overview of dependencies for documentation or debugging\"\n }\n}\n```\n\n## INTEGRATION: DO NOT DUPLICATE EXISTING\n\n- Reuse sanitizeMermaidID/sanitizeMermaidText from pkg/export/markdown.go\n- Reuse GraphModel structure from pkg/ui/graph.go for subgraph logic\n- Just add the CLI flag and DOT format renderer\n\nLabels: [graph visualization]","status":"closed","priority":2,"issue_type":"epic","created_at":"2025-12-15T21:02:38.478013Z","updated_at":"2025-12-16T15:33:19.544745Z","closed_at":"2025-12-16T15:33:19.544745Z","close_reason":"Implemented --robot-graph command with JSON/DOT/Mermaid formats, label filtering, and subgraph extraction. Added comprehensive tests.","source_repo":".","compaction_level":0,"labels":["graph","visualization"]}
{"id":"bv-137","title":"Smart Suggestions Engine","description":"Intelligent recommendations to improve project hygiene. Missing dependency detection, duplicate detection (with semantic search when available), label suggestions from content, stale cleanup recommendations, cycle prevention warnings.","status":"closed","priority":3,"issue_type":"epic","created_at":"2025-12-15T21:02:39.821765Z","updated_at":"2025-12-16T21:55:56.373690Z","closed_at":"2025-12-16T21:55:56.373690Z","close_reason":"All suggestion types implemented: duplicates, dependencies, labels, cycles, and --robot-suggest CLI command","source_repo":".","compaction_level":0,"labels":["hygiene","suggestions"]}
{"id":"bv-1371","title":"Tree: Implement View() rendering with lipgloss","description":"## Purpose\nRender the tree structure as beautiful terminal output using lipgloss styling, matching the existing bv visual language.\n\n## Visual Design Language\n\n### Tree Characters (Box Drawing)\n```\n│ Vertical line (continuing)\n├─ Branch (has siblings below)\n└─ Last branch (no siblings below)\n▸ Collapsed indicator (has hidden children)\n▾ Expanded indicator (children visible)\n• Leaf node (no children)\n```\n\n### Complete Example\n```\n▾ 🎯 P1 EPIC-001 Auth system overhaul\n│ ├─ • ✨ P2 FEAT-002 OAuth integration\n│ ├─ ▾ ✨ P2 FEAT-003 Session management\n│ │ ├─ • 📝 P2 TASK-006 Add session store\n│ │ └─ • 📝 P3 TASK-007 Session timeout UI\n│ └─ • 🐛 P1 BUG-004 Login race condition\n▸ 🎯 P2 EPIC-005 Dashboard redesign (collapsed)\n• ✨ P3 FEAT-100 Standalone feature (no children)\n```\n\n### Color Scheme (from existing theme)\n| Element | Color | Lipgloss |\n|---------|-------|----------|\n| Tree lines | Muted | theme.Muted |\n| Expand/collapse indicator | Secondary | theme.Secondary |\n| Issue type icon | By type | Existing icon colors |\n| Priority badge | By priority | Existing priority colors |\n| Issue ID | Accent | theme.Accent |\n| Issue title | Text | theme.Text |\n| Selected row | Inverted | theme.SelectedBg |\n| Status indicator | By status | Green/yellow/red/gray |\n\n### Icons by Type (match existing)\n```go\nvar typeIcons = map[model.IssueType]string{\n model.TypeEpic: \"🎯\",\n model.TypeFeature: \"✨\",\n model.TypeBug: \"🐛\",\n model.TypeTask: \"📝\",\n model.TypeChore: \"🔧\",\n}\n```\n\n### Priority Badges\n```\nP0 = red background, white text\nP1 = orange background\nP2 = yellow background \nP3 = gray background\nP4+ = dim gray\n```\n\n## Layout Modes\n\n### Wide Terminal (width > 100)\nSplit view: Tree (60%) | Detail Panel (40%)\n\n```\n┌─────────────────────────────────┬─────────────────────────┐\n│ ▾ 🎯 P1 EPIC-001 Auth overhaul │ EPIC-001 │\n│ │ ├─ ✨ P2 FEAT-002 OAuth │ ─────────────────────── │\n│ │ ├─ ▸ ✨ P2 FEAT-003 Session │ Auth system overhaul │\n│ │ └─ 🐛 P1 BUG-004 Login bug │ │\n│ ▸ 🎯 P2 EPIC-005 Dashboard │ Priority: P1 (High) │\n│ │ Type: Epic │\n│ │ Status: In Progress │\n│ │ │\n│ │ **Description** │\n│ │ Refactor the entire... │\n├─────────────────────────────────┴─────────────────────────┤\n│ E: Exit │ j/k: Navigate │ Enter: Expand │ ?: Help │\n└───────────────────────────────────────────────────────────┘\n```\n\n### Narrow Terminal (width < 100)\nFull-width tree, Tab to toggle detail panel\n\n```\n┌─────────────────────────────────────────┐\n│ ▾ 🎯 P1 EPIC-001 Auth system overhaul │\n│ │ ├─ ✨ P2 FEAT-002 OAuth integration │\n│ │ ├─ ▸ ✨ P2 FEAT-003 Session mgmt │\n│ │ └─ 🐛 P1 BUG-004 Login race condition │\n│ ▸ 🎯 P2 EPIC-005 Dashboard redesign │\n├─────────────────────────────────────────┤\n│ E: Exit │ Tab: Detail │ Enter: Expand │\n└─────────────────────────────────────────┘\n```\n\n## Rendering Algorithm\n\n### Per-Node Rendering\n```go\nfunc (t *TreeModel) renderNode(node *TreeNode, isLast bool, prefix string) string {\n var sb strings.Builder\n r := t.theme.Renderer\n \n // Tree structure characters\n branch := \"├─\"\n if isLast {\n branch = \"└─\"\n }\n \n // Expand/collapse indicator\n var indicator string\n if len(node.Children) > 0 {\n if node.Expanded {\n indicator = \"▾\"\n } else {\n indicator = \"▸\"\n }\n } else {\n indicator = \"•\"\n }\n \n // Build the line\n treeChars := r.NewStyle().Foreground(t.theme.Muted)\n \n sb.WriteString(prefix)\n sb.WriteString(treeChars.Render(branch + \" \"))\n sb.WriteString(indicator + \" \")\n sb.WriteString(renderIssueCompact(node.Issue, t.theme))\n \n return sb.String()\n}\n```\n\n### Title Truncation\nIf title exceeds available width:\n- Truncate with ellipsis: \"Very long title that...\"\n- Ensure minimum visible: 20 chars before truncation\n- Account for tree prefix width at each depth\n\n### Viewport Scrolling\nUse bubbles/viewport for:\n- Scroll when tree exceeds terminal height\n- Show scroll indicators (▲ ▼) at edges\n- Ensure selected row is always visible\n\n## Acceptance Criteria\n- [ ] Tree renders with proper indentation\n- [ ] Box-drawing characters align correctly\n- [ ] Icons and colors match existing theme\n- [ ] Selected row is visually distinct\n- [ ] Split view works on wide terminals\n- [ ] Truncation handles long titles gracefully\n- [ ] Scrolling works for tall trees\n- [ ] No visual glitches on resize","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-03T17:46:00.665395Z","updated_at":"2026-01-05T23:15:28.660722Z","closed_at":"2026-01-05T23:15:28.660722Z","close_reason":"Implemented View() rendering with: tree line characters (│├└), expand/collapse indicators (▾▸•), type icons, priority badges, status indicators, selected row highlighting via theme.Selected, empty state message with help text. Added 4 new tests for View() rendering. All 15 tree tests pass.","source_repo":".","compaction_level":0,"dependencies":[{"issue_id":"bv-1371","depends_on_id":"bv-gllx","type":"parent-child","created_at":"2026-01-03T17:47:43.723251Z","created_by":"daemon","metadata":"{}","thread_id":""},{"issue_id":"bv-1371","depends_on_id":"bv-j3ck","type":"blocks","created_at":"2026-01-03T17:47:44.794566Z","created_by":"daemon","metadata":"{}","thread_id":""}]}
{"id":"bv-138","title":"Define AgentRegistration and WorkClaim data types","description":"Core data types for Agent Swarm Protocol\n\n## Data Model\n```go\n// .beads/agents.jsonl storage format\ntype AgentRegistration struct {\n Name string `json:\"name\"` // \"claude-opus-1\"\n Model string `json:\"model\"` // \"claude-opus-4\"\n Program string `json:\"program\"` // \"claude-code\", \"cursor\", \"devin\"\n StartedAt time.Time `json:\"started_at\"`\n LastSeen time.Time `json:\"last_seen\"`\n ClaimedWork []string `json:\"claimed_work\"` // bead IDs\n FileHints []string `json:\"file_hints\"` // files being touched\n}\n\ntype WorkClaim struct {\n BeadID string `json:\"bead_id\"`\n Agent string `json:\"agent\"`\n ClaimedAt time.Time `json:\"claimed_at\"`\n ExpiresAt time.Time `json:\"expires_at\"` // auto-release after inactivity\n Reason string `json:\"reason\"` // \"implementing\", \"reviewing\", \"testing\"\n}\n```\n\n## Storage\n- Store in `.beads/agents.jsonl` (same pattern as issues.jsonl)\n- One line per agent registration\n- WorkClaims embedded in AgentRegistration.ClaimedWork\n\n## Heartbeat Logic\n- Agent updates LastSeen on each operation\n- Claims auto-expire after 30 minutes of inactivity (configurable)\n- Stale agents (LastSeen > 1 hour) marked inactive\n\n## Integration Points\n- Triage considers claims (bv-147 ClaimPenalty)\n- Graph viz can show claim status\n- Alerts when claims conflict or expire","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T21:02:59.552140Z","updated_at":"2025-12-16T00:08:22.094291Z","closed_at":"2025-12-16T00:08:22.094291Z","close_reason":"Implemented AgentRegistration, WorkClaim, FileHint types and Store with persistence, heartbeat, and expiry. 52 tests passing.","source_repo":".","compaction_level":0,"labels":["agent-swarm","types"],"dependencies":[{"issue_id":"bv-138","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.801958Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-139","title":"Implement agent registry and heartbeat system","description":"Agent registry management and heartbeat system\n\n## Commands\n```bash\nbv --robot-agents # List all agents (active + inactive)\nbv --robot-agent-register # Register this agent (reads from env)\nbv --robot-agent-heartbeat # Update LastSeen timestamp\n```\n\n## Registration Flow\n1. Agent starts session\n2. Calls --robot-agent-register with name, model, program\n3. System assigns unique name if collision (claude-opus-1, claude-opus-2)\n4. Returns agent ID for subsequent operations\n\n## Heartbeat Flow\n1. Agent calls --robot-agent-heartbeat periodically (every 5 min recommended)\n2. System updates LastSeen\n3. Returns current claims and any conflicts\n\n## Environment Variables (for auto-detection)\n```\nBV_AGENT_NAME=claude-opus-1\nBV_AGENT_MODEL=claude-opus-4\nBV_AGENT_PROGRAM=claude-code\n```\n\n## Output Format\n```json\n{\n \"explanation\": {\n \"what\": \"Active agent registry\",\n \"when_to_use\": \"Before claiming work, to see who else is active\",\n \"action\": \"Coordinate with listed agents to avoid conflicts\"\n },\n \"agents\": [\n {\n \"name\": \"claude-opus-1\",\n \"model\": \"claude-opus-4\",\n \"program\": \"claude-code\",\n \"active\": true,\n \"claims\": [\"bv-42\", \"bv-43\"],\n \"last_seen\": \"2025-01-15T10:30:00Z\"\n }\n ],\n \"total_active\": 2,\n \"total_claims\": 5\n}\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T21:03:00.966958Z","updated_at":"2025-12-16T00:15:28.655781Z","closed_at":"2025-12-16T00:15:28.655781Z","close_reason":"Implemented --robot-agents, --robot-agent-register, --robot-agent-heartbeat CLI commands with full documentation. All tests passing.","source_repo":".","compaction_level":0,"labels":["agent-swarm","registry"],"dependencies":[{"issue_id":"bv-139","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.802442Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-139","depends_on_id":"bv-138","type":"blocks","created_at":"2025-12-15T22:10:49.802854Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-140","title":"Implement work claiming and releasing","description":"Work claiming and releasing mechanism\n\n## Commands\n```bash\nbv --robot-claim bv-42 # Claim a bead\nbv --robot-claim bv-42 bv-43 # Claim multiple beads\nbv --robot-release bv-42 # Release a claim\nbv --robot-release --all # Release all claims for this agent\n```\n\n## Claim Semantics\n- Soft lock (advisory, not enforced)\n- Auto-expires after 30 min inactivity (configurable)\n- Renewed by heartbeat or explicit --robot-claim\n- Other agents see claim but can override with --force\n\n## Conflict Handling\n- If already claimed by another agent: return warning, not error\n- Include claim holder info so agents can coordinate\n- --force flag allows override (for emergencies)\n\n## Output Format (claim)\n```json\n{\n \"explanation\": {\n \"what\": \"Work claim result\",\n \"when_to_use\": \"Before starting work on an issue\",\n \"action\": \"Proceed with work if granted, coordinate if conflict\"\n },\n \"granted\": [\"bv-42\"],\n \"conflicts\": [\n {\n \"bead_id\": \"bv-43\",\n \"holder\": \"claude-opus-2\",\n \"claimed_at\": \"2025-01-15T10:00:00Z\",\n \"expires_at\": \"2025-01-15T10:30:00Z\"\n }\n ],\n \"message\": \"Claimed 1 of 2 requested beads\"\n}\n```\n\n## Integration with Triage\n- Triage scoring (bv-147) applies ClaimPenalty to claimed items\n- --robot-triage excludes your own claims from recommendations\n- --robot-next never suggests items claimed by others","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T21:03:01.985667Z","updated_at":"2025-12-16T00:26:19.503017Z","closed_at":"2025-12-16T00:26:19.503017Z","close_reason":"Out of scope: agent coordination handled by mcp_agent_mail","source_repo":".","compaction_level":0,"labels":["agent-swarm","claims"],"dependencies":[{"issue_id":"bv-140","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.803283Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-140","depends_on_id":"bv-139","type":"blocks","created_at":"2025-12-15T22:10:49.803679Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-141","title":"Implement file reservation hints","description":"**NOTE: This task covers file hints AND conflict detection (title is legacy)**\n\nFile hints + conflict detection for multi-agent safety\n\n## Commands\n```bash\nbv --robot-file-hints bv-42 pkg/api/*.go # Declare files you will touch\nbv --robot-conflicts # Check for current conflicts\n```\n\n## Part 1: File Hints Declaration\nAgents declare which files they intend to modify when claiming work.\n\n```go\ntype FileHint struct {\n AgentName string `json:\"agent\"`\n BeadID string `json:\"bead_id\"`\n Paths []string `json:\"paths\"` // exact paths or globs\n DeclaredAt time.Time `json:\"declared_at\"`\n}\n```\n\n## Part 2: Conflict Detection\nSystem checks for overlapping file hints between agents.\n\n```go\ntype FileConflict struct {\n Path string `json:\"path\"`\n Agents []string `json:\"agents\"`\n BeadIDs []string `json:\"bead_ids\"`\n Severity string `json:\"severity\"` // \"warning\" or \"error\"\n}\n```\n\n## Output Format (--robot-conflicts)\n```json\n{\n \"explanation\": {\n \"what\": \"File conflict analysis\",\n \"when_to_use\": \"Before making changes, or when git conflicts occur\",\n \"action\": \"Coordinate with conflicting agents before proceeding\"\n },\n \"conflicts\": [{\n \"path\": \"pkg/api/handlers.go\",\n \"agents\": [\"claude-opus-1\", \"cursor-agent\"],\n \"bead_ids\": [\"bv-42\", \"bv-55\"],\n \"severity\": \"warning\"\n }],\n \"clean_paths\": 42,\n \"conflict_count\": 1\n}\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T21:03:03.093567Z","updated_at":"2025-12-16T00:26:19.504036Z","closed_at":"2025-12-16T00:26:19.504036Z","close_reason":"Out of scope: agent coordination handled by mcp_agent_mail","source_repo":".","compaction_level":0,"labels":["agent-swarm","files"],"dependencies":[{"issue_id":"bv-141","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.804099Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-141","depends_on_id":"bv-139","type":"blocks","created_at":"2025-12-15T22:10:49.804510Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-142","title":"Implement conflict detection","description":"**NOTE: This task is about HANDOFF MESSAGING (title \"conflict detection\" is legacy)**\n\nAgent-to-agent handoff messaging for work transitions\n\n## Commands\n```bash\nbv --robot-handoff bv-42 \"Finished API, needs frontend integration\"\nbv --robot-messages # View handoff messages\n```\n\n## Purpose\nWhen an agent finishes part of a task or needs to pass context to another agent:\n- Send structured handoff message attached to a bead\n- Other agents see pending handoffs when claiming work\n- Enables smooth multi-agent collaboration\n\n## Data Model\n```go\ntype HandoffMessage struct {\n ID string `json:\"id\"`\n BeadID string `json:\"bead_id\"`\n FromAgent string `json:\"from_agent\"`\n ToAgent string `json:\"to_agent\"` // specific agent or \"*\" for any\n Message string `json:\"message\"`\n Timestamp time.Time `json:\"timestamp\"`\n Read bool `json:\"read\"`\n}\n```\n\n## Storage\nPersisted in `.beads/handoffs.jsonl` (same pattern as issues.jsonl)\n\n## Integration Points\n- Triage surfaces unread handoffs in recommendations\n- --robot-next prioritizes items with pending handoffs\n- Claiming a bead shows any pending handoffs\n\n## Output Format (receiving)\n```json\n{\n \"explanation\": {\n \"what\": \"Pending handoff messages\",\n \"when_to_use\": \"Before starting work on a claimed bead\",\n \"action\": \"Read context from previous agent before proceeding\"\n },\n \"pending_handoffs\": [{\n \"bead_id\": \"bv-42\",\n \"from_agent\": \"claude-opus-1\",\n \"message\": \"Finished API changes, needs frontend integration\",\n \"timestamp\": \"2025-01-15T11:00:00Z\"\n }],\n \"count\": 1\n}\n```","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-15T21:03:04.517846Z","updated_at":"2025-12-16T00:26:19.504798Z","closed_at":"2025-12-16T00:26:19.504798Z","close_reason":"Out of scope: agent coordination handled by mcp_agent_mail","source_repo":".","compaction_level":0,"labels":["agent-swarm","conflicts"],"dependencies":[{"issue_id":"bv-142","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.804934Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-142","depends_on_id":"bv-140","type":"blocks","created_at":"2025-12-15T22:10:49.805331Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-142","depends_on_id":"bv-141","type":"blocks","created_at":"2025-12-15T22:10:49.805743Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-143","title":"Implement intelligent work partitioning","description":"INCREMENTAL ENHANCEMENT on existing partitioning\n\n## What Already Exists (DO NOT DUPLICATE)\n- `pkg/analysis/plan.go:findConnectedComponents()` - groups related issues via union-find\n- `pkg/analysis/plan.go:buildTracks()` - creates ExecutionTrack[] from components\n- `--robot-plan` already outputs parallel tracks\n\n## What This Adds (NEW VALUE)\nGiven N agents, recommend OPTIMAL assignment strategy:\n1. Agent skill/label matching (assign backend track to backend-skilled agent)\n2. Component sizing (balance work across agents fairly)\n3. Conflict minimization (avoid file overlap between agents)\n4. Priority sequencing (highest impact tracks assigned first)\n\n## Implementation Approach\n1. REUSE: Call `GetExecutionPlan()` to get existing tracks\n2. ADD: Score each track by total priority, PageRank sum, estimated effort\n3. ADD: Match tracks to agent capabilities (if provided)\n4. ADD: Output assignment recommendations with rationale\n\n## Robot Output Format\n```json\n{\n \"explanation\": {\n \"what\": \"Agent work partitioning recommendations\",\n \"when_to_use\": \"Starting multi-agent work session\",\n \"action\": \"Assign tracks to agents as recommended\"\n },\n \"assignments\": [\n {\n \"agent_slot\": 1,\n \"tracks\": [\"track-1\", \"track-3\"],\n \"total_items\": 8,\n \"rationale\": \"Database-focused work, highest combined priority\"\n }\n ]\n}\n```","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T21:03:06.499551Z","updated_at":"2025-12-16T00:26:19.505509Z","closed_at":"2025-12-16T00:26:19.505509Z","close_reason":"Out of scope: agent coordination handled by mcp_agent_mail","source_repo":".","compaction_level":0,"labels":["agent-swarm","partitioning"],"dependencies":[{"issue_id":"bv-143","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.806169Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-143","depends_on_id":"bv-140","type":"blocks","created_at":"2025-12-15T22:10:49.806568Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-143","depends_on_id":"bv-53","type":"blocks","created_at":"2025-12-15T22:10:49.806976Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-144","title":"Add agent context to robot outputs","description":"Include current agent claims in --robot-insights, --robot-plan, --robot-priority outputs. Show which work is claimed by whom. Filter available work.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T21:03:07.448383Z","updated_at":"2025-12-16T00:26:19.506091Z","closed_at":"2025-12-16T00:26:19.506091Z","close_reason":"Out of scope: agent coordination handled by mcp_agent_mail","source_repo":".","compaction_level":0,"labels":["agent-swarm","integration"],"dependencies":[{"issue_id":"bv-144","depends_on_id":"bv-132","type":"blocks","created_at":"2025-12-15T22:10:49.807387Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-144","depends_on_id":"bv-139","type":"blocks","created_at":"2025-12-15T22:10:49.807783Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-145","title":"Top-k unlock set (submodular selection)","description":"Provide a robot flag that returns the best *set* of k beads (not just a rank list) maximizing downstream unlocks via greedy submodular selection. Guardrails: cap iterations by k (default k=3); deterministic tie-breaks (ID); reuse analyzer/cache hash; accept filters/recipes; output includes marginal gains per pick, final gain, data_hash/config. Keep JSON concise; optional --topk-table for human-friendly view. Integrate into advanced_insights sets[] with kind='topk_set' and one-line usage hint.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-15T21:03:27.083238Z","updated_at":"2025-12-16T02:54:35.428943Z","closed_at":"2025-12-16T02:54:35.428943Z","close_reason":"Implemented greedy submodular selection for top-k unlock set. Features: O(k*n) algorithm selecting issues maximizing downstream unlocks, marginal gain tracking, deterministic tie-breaks, capping support. Integrated into advanced_insights.topk_set with status tracking.","source_repo":".","compaction_level":0,"labels":["ai-agent,advanced-insights"],"dependencies":[{"issue_id":"bv-145","depends_on_id":"bv-80","type":"parent-child","created_at":"2025-12-15T22:10:49.808206Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-145","depends_on_id":"bv-81","type":"blocks","created_at":"2025-12-15T22:10:49.808629Z","created_by":"import","metadata":"{}","thread_id":""},{"issue_id":"bv-145","depends_on_id":"bv-82","type":"blocks","created_at":"2025-12-15T22:10:49.809052Z","created_by":"import","metadata":"{}","thread_id":""}]}
{"id":"bv-146","title":"Define TriageRecommendation and TriageAlert types","description":"# Triage Types: Complete Data Model\n\n## Core Result Type\n\n```go\ntype TriageResult struct {\n Meta TriageMeta `json:\"meta\"`\n QuickRef QuickRef `json:\"quick_ref\"`\n Alerts AlertsByLevel `json:\"alerts\"`\n TopPick *TopPick `json:\"top_pick\"` // nil if nothing to work on\n YourSession *SessionContext `json:\"your_session\"` // nil if no agent identity\n Team TeamStatus `json:\"team\"`\n Recommendations []Recommendation `json:\"recommendations\"`\n QuickWins []QuickWin `json:\"quick_wins\"`\n BlockersToClear []BlockerItem `json:\"blockers_to_clear\"`\n ProjectHealth ProjectHealth `json:\"project_health\"`\n Suggestions []Suggestion `json:\"suggestions\"`\n Commands CommandHelpers `json:\"commands\"`\n}\n```\n\n## Supporting Types\n\n```go\ntype TriageMeta struct {\n Command string `json:\"command\"`\n GeneratedAt time.Time `json:\"generated_at\"`\n DataHash string `json:\"data_hash\"`\n AgentIdentity string `json:\"agent_identity,omitempty\"`\n}\n\ntype QuickRef struct {\n TopPick string `json:\"top_pick\"` // \"bv-43: Title\"\n CriticalAlerts int `json:\"critical_alerts\"`\n Warnings int `json:\"warnings\"`\n YourClaims int `json:\"your_claims\"`\n TeamActive int `json:\"team_active\"`\n ActionableItems int `json:\"actionable_items\"`\n Status string `json:\"status\"` // \"ready_to_work\", \"alerts_pending\", \"all_claimed\"\n}\n\ntype AlertsByLevel struct {\n Critical []TriageAlert `json:\"critical\"`\n Warning []TriageAlert `json:\"warning\"`\n Info []TriageAlert `json:\"info\"`\n}\n\ntype TriageAlert struct {\n Type string `json:\"type\"` // Uses drift.AlertType + new types\n BeadID string `json:\"bead_id,omitempty\"`\n BeadIDs []string `json:\"bead_ids,omitempty\"` // For multi-bead alerts\n Message string `json:\"message\"`\n Action string `json:\"action\"` // What to do about it\n}\n\ntype TopPick struct {\n BeadID string `json:\"bead_id\"`\n Title string `json:\"title\"`\n Type string `json:\"type\"`\n Priority string `json:\"priority\"`\n Score float64 `json:\"score\"`\n Why []string `json:\"why\"` // Human-readable reasons with emoji\n Labels []string `json:\"labels\"`\n EstimatedImpact string `json:\"estimated_impact\"`\n FilesLikely []string `json:\"files_likely,omitempty\"`\n ClaimCommand string `json:\"claim_command\"`\n}\n\ntype SessionContext struct {\n AgentName string `json:\"agent_name\"`\n Claims []ClaimInfo `json:\"claims\"`\n PendingHandoffs []HandoffInfo `json:\"pending_handoffs\"`\n RecentActivity string `json:\"recent_activity\"`\n}\n\ntype ClaimInfo struct {\n BeadID string `json:\"bead_id\"`\n Title string `json:\"title\"`\n ClaimedAt time.Time `json:\"claimed_at\"`\n Files []string `json:\"files,omitempty\"`\n}\n\ntype HandoffInfo struct {\n FromAgent string `json:\"from_agent\"`\n BeadID string `json:\"bead_id\"`\n Message string `json:\"message\"`\n ReceivedAt time.Time `json:\"received_at\"`\n}\n\ntype TeamStatus struct {\n ActiveAgents []AgentSummary `json:\"active_agents\"`\n TotalClaimed int `json:\"total_claimed\"`\n FileConflicts []FileConflict `json:\"file_conflicts\"`\n AvailableTracks []string `json:\"available_tracks\"`\n CoordinationHint string `json:\"coordination_hint,omitempty\"`\n}\n\ntype AgentSummary struct {\n Name string `json:\"name\"`\n Claims []string `json:\"claims\"`\n LastSeen string `json:\"last_seen\"`\n Track string `json:\"track,omitempty\"`\n}\n\ntype Recommendation struct {\n Rank int `json:\"rank\"`\n BeadID string `json:\"bead_id\"`\n Score float64 `json:\"score\"`\n Title string `json:\"title\"`\n Why string `json:\"why\"`\n}\n\ntype QuickWin struct {\n BeadID string `json:\"bead_id\"`\n Title string `json:\"title\"`\n Effort string `json:\"effort\"` // \"low\", \"medium\"\n Impact string `json:\"impact\"` // \"low\", \"medium\", \"high\"\n}\n\ntype BlockerItem struct {\n BeadID string `json:\"bead_id\"`\n Title string `json:\"title\"`\n Unblocks int `json:\"unblocks\"`\n PrioritySum int `json:\"priority_sum\"`\n}\n\ntype ProjectHealth struct {\n Counts HealthCounts `json:\"counts\"`\n Graph GraphHealth `json:\"graph\"`\n LabelsAttention []LabelAttention `json:\"labels_attention\"`\n Velocity VelocityInfo `json:\"velocity\"`\n Drift DriftSummary `json:\"drift\"`\n}\n\ntype HealthCounts struct {\n Total int `json:\"total\"`\n Open int `json:\"open\"`\n InProgress int `json:\"in_progress\"`\n Blocked int `json:\"blocked\"`\n ClosedWeek int `json:\"closed_week\"`\n}\n\ntype GraphHealth struct {\n Cycles int `json:\"cycles\"`\n Density float64 `json:\"density\"`\n LongestChain int `json:\"longest_chain\"`\n Health string `json:\"health\"` // \"good\", \"warning\", \"critical\"\n}\n\ntype LabelAttention struct {\n Label string `json:\"label\"`\n Health int `json:\"health\"` // 0-100\n Issue string `json:\"issue\"`\n}\n\ntype VelocityInfo struct {\n ClosedPerWeek int `json:\"closed_per_week\"`\n Trend string `json:\"trend\"` // \"improving\", \"stable\", \"declining\"\n}\n\ntype DriftSummary struct {\n BaselineAge string `json:\"baseline_age\"`\n SignificantChanges bool `json:\"significant_changes\"`\n}\n\ntype Suggestion struct {\n Type string `json:\"type\"` // \"missing_dep\
Showing preview only (208K chars total). Download the full file or copy to clipboard to get everything.
gitextract_u7xk8btr/
├── .beads/
│ ├── .gitignore
│ ├── README.md
│ ├── correlation_feedback.jsonl
│ ├── feedback.json
│ ├── issues.jsonl
│ ├── metadata.json
│ ├── sync_base.jsonl
│ └── tree-state.json
├── .gitattributes
├── .github/
│ └── workflows/
│ ├── acfs-checksums-dispatch.yml
│ ├── ci.yml
│ ├── flake-update.yml
│ ├── fuzz.yml
│ ├── notify-acfs.yml
│ ├── release-notes.yml
│ └── release.yml
├── .gitignore
├── .goreleaser.yaml
├── .ubsignore
├── AGENTS.md
├── AGENT_FRIENDLINESS_REPORT.md
├── CHANGELOG.md
├── CLEANED_UP_PROMPTS_USED_TO_CREATE_PROJECT.md
├── GOLANG_BEST_PRACTICES.md
├── LICENSE
├── Makefile
├── OPPORTUNITY_MATRIX.md
├── PERFORMANCE_ANALYSIS_ROUND_2.md
├── PERF_OPTIMIZATION_ROUND_1_RESULTS.md
├── PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__GPT.md
├── PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__OPUS.md
├── README.md
├── SKILL.md
├── UPGRADE_LOG.md
├── benchmarks/
│ ├── baseline_20260106_152724.txt
│ ├── baseline_round1_20260109_221659.txt
│ ├── post_pooling_benchmarks.txt
│ └── profile_comparison.txt
├── bv-graph-wasm/
│ ├── Cargo.toml
│ ├── Makefile
│ ├── README.md
│ ├── src/
│ │ ├── advanced/
│ │ │ └── mod.rs
│ │ ├── algorithms/
│ │ │ ├── articulation.rs
│ │ │ ├── betweenness.rs
│ │ │ ├── coverage.rs
│ │ │ ├── critical_path.rs
│ │ │ ├── cycles.rs
│ │ │ ├── eigenvector.rs
│ │ │ ├── hits.rs
│ │ │ ├── k_paths.rs
│ │ │ ├── kcore.rs
│ │ │ ├── mod.rs
│ │ │ ├── pagerank.rs
│ │ │ ├── parallel_cut.rs
│ │ │ ├── slack.rs
│ │ │ ├── subgraph.rs
│ │ │ ├── topk_set.rs
│ │ │ └── topo.rs
│ │ ├── graph.rs
│ │ ├── lib.rs
│ │ ├── reachability.rs
│ │ ├── subgraph.rs
│ │ └── whatif.rs
│ └── tests/
│ └── golden_test.rs
├── bv_profile
├── bv_test
├── cmd/
│ └── bv/
│ ├── burndown_test.go
│ ├── main.go
│ ├── main_robot_test.go
│ ├── main_test.go
│ ├── profile_test.go
│ ├── robot_registry.go
│ ├── robot_registry_test.go
│ └── search_output.go
├── codecov.yml
├── coverage_report.txt
├── docs/
│ ├── accessor_pattern.md
│ ├── bead-history-feature-plan.md
│ ├── complementary-features-analysis.md
│ ├── labels-view-feature-plan.md
│ ├── performance.md
│ ├── semantic-search-embedding.md
│ └── testing.md
├── flake.nix
├── go.mod
├── go.sum
├── install.ps1
├── install.sh
├── internal/
│ └── datasource/
│ ├── diff.go
│ ├── jsonl.go
│ ├── load.go
│ ├── reader.go
│ ├── reader_test.go
│ ├── select.go
│ ├── source.go
│ ├── source_test.go
│ ├── sqlite.go
│ ├── validate.go
│ └── watch.go
├── pkg/
│ ├── agents/
│ │ ├── blurb.go
│ │ ├── blurb_test.go
│ │ ├── detect.go
│ │ ├── detect_test.go
│ │ ├── file.go
│ │ ├── file_test.go
│ │ ├── integration_test.go
│ │ ├── prefs.go
│ │ ├── prefs_test.go
│ │ ├── tty_guard.go
│ │ └── tty_guard_test.go
│ ├── analysis/
│ │ ├── advanced_insights.go
│ │ ├── advanced_insights_test.go
│ │ ├── articulation_test.go
│ │ ├── bench_generators_test.go
│ │ ├── bench_pathological_test.go
│ │ ├── bench_realdata_test.go
│ │ ├── bench_test.go
│ │ ├── benchmark_test.go
│ │ ├── betweenness_approx.go
│ │ ├── betweenness_approx_test.go
│ │ ├── buffer_pool_test.go
│ │ ├── cache.go
│ │ ├── cache_extra_test.go
│ │ ├── cache_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── cycle_warnings.go
│ │ ├── cycle_warnings_test.go
│ │ ├── dependency_suggest.go
│ │ ├── dependency_suggest_test.go
│ │ ├── diff.go
│ │ ├── diff_extended_test.go
│ │ ├── diff_test.go
│ │ ├── duplicates.go
│ │ ├── duplicates_test.go
│ │ ├── e2e_startup_test.go
│ │ ├── eta.go
│ │ ├── eta_test.go
│ │ ├── feedback.go
│ │ ├── feedback_test.go
│ │ ├── file_lock_unix.go
│ │ ├── file_lock_windows.go
│ │ ├── golden_test.go
│ │ ├── graph.go
│ │ ├── graph_accessor_benchmark_test.go
│ │ ├── graph_accessor_test.go
│ │ ├── graph_cycles.go
│ │ ├── graph_cycles_test.go
│ │ ├── graph_extra_test.go
│ │ ├── graph_test.go
│ │ ├── insights.go
│ │ ├── insights_signals_test.go
│ │ ├── insights_test.go
│ │ ├── invariance_test.go
│ │ ├── label_health.go
│ │ ├── label_health_test.go
│ │ ├── label_suggest.go
│ │ ├── label_suggest_test.go
│ │ ├── perf_invariants_test.go
│ │ ├── plan.go
│ │ ├── plan_extended_test.go
│ │ ├── plan_test.go
│ │ ├── priority.go
│ │ ├── priority_test.go
│ │ ├── real_data_test.go
│ │ ├── risk.go
│ │ ├── risk_test.go
│ │ ├── sample_integration_test.go
│ │ ├── status_fullstats_test.go
│ │ ├── suggest_all.go
│ │ ├── suggest_all_test.go
│ │ ├── suggestions.go
│ │ ├── suggestions_test.go
│ │ ├── testdata/
│ │ │ └── startup_baseline.json
│ │ ├── triage.go
│ │ ├── triage_context.go
│ │ ├── triage_context_test.go
│ │ ├── triage_test.go
│ │ ├── whatif.go
│ │ └── whatif_test.go
│ ├── baseline/
│ │ ├── baseline.go
│ │ └── baseline_test.go
│ ├── beadscli/
│ │ └── beadscli.go
│ ├── cass/
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── correlation.go
│ │ ├── correlation_test.go
│ │ ├── detector.go
│ │ ├── detector_test.go
│ │ ├── doc.go
│ │ ├── safety_test.go
│ │ ├── search.go
│ │ └── search_test.go
│ ├── correlation/
│ │ ├── beads_files.go
│ │ ├── cache.go
│ │ ├── cache_test.go
│ │ ├── causality.go
│ │ ├── causality_test.go
│ │ ├── cocommit.go
│ │ ├── cocommit_test.go
│ │ ├── correlator.go
│ │ ├── correlator_test.go
│ │ ├── explicit.go
│ │ ├── explicit_test.go
│ │ ├── extractor.go
│ │ ├── extractor_test.go
│ │ ├── feedback.go
│ │ ├── file_index.go
│ │ ├── file_index_test.go
│ │ ├── gitlog.go
│ │ ├── gitlog_test.go
│ │ ├── incremental.go
│ │ ├── incremental_test.go
│ │ ├── network.go
│ │ ├── network_test.go
│ │ ├── orphan.go
│ │ ├── orphan_test.go
│ │ ├── related.go
│ │ ├── related_test.go
│ │ ├── reverse.go
│ │ ├── reverse_test.go
│ │ ├── scorer.go
│ │ ├── scorer_test.go
│ │ ├── stream.go
│ │ ├── stream_test.go
│ │ ├── temporal.go
│ │ ├── temporal_path_test.go
│ │ ├── temporal_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── debug/
│ │ ├── debug.go
│ │ └── debug_test.go
│ ├── drift/
│ │ ├── config.go
│ │ ├── drift.go
│ │ ├── drift_test.go
│ │ └── summary_test.go
│ ├── export/
│ │ ├── .wrangler/
│ │ │ └── cache/
│ │ │ ├── pages.json
│ │ │ └── wrangler-account.json
│ │ ├── cloudflare.go
│ │ ├── cloudflare_test.go
│ │ ├── deploy_flow_test.go
│ │ ├── external_tools_test.go
│ │ ├── gh_pages_e2e_test.go
│ │ ├── github.go
│ │ ├── github_test.go
│ │ ├── graph_export.go
│ │ ├── graph_export_test.go
│ │ ├── graph_interactive.go
│ │ ├── graph_interactive_test.go
│ │ ├── graph_render_beautiful.go
│ │ ├── graph_render_beautiful_test.go
│ │ ├── graph_render_golden_test.go
│ │ ├── graph_snapshot.go
│ │ ├── graph_snapshot_bench_test.go
│ │ ├── graph_snapshot_svg_test.go
│ │ ├── graph_snapshot_test.go
│ │ ├── init_and_push_test.go
│ │ ├── integration_test.go
│ │ ├── livereload.go
│ │ ├── livereload_test.go
│ │ ├── main_test.go
│ │ ├── markdown.go
│ │ ├── markdown_test.go
│ │ ├── mermaid_generator.go
│ │ ├── preview.go
│ │ ├── preview_flow_test.go
│ │ ├── preview_test.go
│ │ ├── sqlite_export.go
│ │ ├── sqlite_export_metrics_test.go
│ │ ├── sqlite_export_test.go
│ │ ├── sqlite_schema.go
│ │ ├── sqlite_schema_test.go
│ │ ├── sqlite_types.go
│ │ ├── viewer_assets/
│ │ │ ├── charts.js
│ │ │ ├── coi-serviceworker.js
│ │ │ ├── graph-demo.html
│ │ │ ├── graph.js
│ │ │ ├── hybrid_scorer.js
│ │ │ ├── hybrid_scorer.test.js
│ │ │ ├── index.html
│ │ │ ├── styles.css
│ │ │ ├── vendor/
│ │ │ │ ├── bv_graph.js
│ │ │ │ ├── bv_graph_bg.wasm
│ │ │ │ ├── sql-wasm.js
│ │ │ │ ├── sql-wasm.wasm
│ │ │ │ └── tailwindcss.js
│ │ │ ├── viewer.js
│ │ │ └── wasm_loader.js
│ │ ├── viewer_embed.go
│ │ ├── viewer_embed_test.go
│ │ ├── wasm_scorer/
│ │ │ ├── Cargo.toml
│ │ │ ├── src/
│ │ │ │ └── lib.rs
│ │ │ └── tests/
│ │ │ └── parity_test.rs
│ │ ├── wizard.go
│ │ ├── wizard_flow_test.go
│ │ ├── wizard_prereq_test.go
│ │ └── wizard_test.go
│ ├── hooks/
│ │ ├── config.go
│ │ ├── config_yaml_test.go
│ │ ├── executor.go
│ │ ├── executor_extra_test.go
│ │ ├── executor_test.go
│ │ ├── executor_unix_test.go
│ │ ├── executor_windows_test.go
│ │ ├── loader_extra_test.go
│ │ └── runhooks_test.go
│ ├── instance/
│ │ ├── lock.go
│ │ ├── lock_test.go
│ │ ├── lock_unix.go
│ │ └── lock_windows.go
│ ├── loader/
│ │ ├── benchmark_test.go
│ │ ├── bom_test.go
│ │ ├── fuzz_test.go
│ │ ├── git.go
│ │ ├── git_test.go
│ │ ├── gitignore.go
│ │ ├── gitignore_test.go
│ │ ├── loader.go
│ │ ├── loader_extra_test.go
│ │ ├── loader_test.go
│ │ ├── pool.go
│ │ ├── pool_test.go
│ │ ├── real_data_test.go
│ │ ├── robustness_test.go
│ │ ├── sprint.go
│ │ ├── sprint_test.go
│ │ └── synthetic_test.go
│ ├── metrics/
│ │ ├── cache.go
│ │ ├── metrics_test.go
│ │ └── timing.go
│ ├── model/
│ │ ├── types.go
│ │ └── types_test.go
│ ├── recipe/
│ │ ├── defaults/
│ │ │ └── recipes.yaml
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ ├── search/
│ │ ├── bench_helpers_test.go
│ │ ├── config.go
│ │ ├── config_test.go
│ │ ├── documents.go
│ │ ├── documents_test.go
│ │ ├── embedder.go
│ │ ├── embedder_test.go
│ │ ├── hash_embedder.go
│ │ ├── hash_embedder_test.go
│ │ ├── hybrid_scorer.go
│ │ ├── hybrid_scorer_bench_test.go
│ │ ├── hybrid_scorer_impl.go
│ │ ├── hybrid_scorer_real_test.go
│ │ ├── hybrid_scorer_test.go
│ │ ├── index_sync.go
│ │ ├── index_sync_test.go
│ │ ├── lexical_boost.go
│ │ ├── lexical_boost_test.go
│ │ ├── metrics_cache.go
│ │ ├── metrics_cache_bench_test.go
│ │ ├── metrics_cache_impl.go
│ │ ├── metrics_cache_test.go
│ │ ├── normalizers.go
│ │ ├── normalizers_test.go
│ │ ├── presets.go
│ │ ├── presets_test.go
│ │ ├── query_adjust.go
│ │ ├── query_adjust_test.go
│ │ ├── search_pipeline_real_test.go
│ │ ├── short_query_hybrid_test.go
│ │ ├── vector_index.go
│ │ ├── vector_index_test.go
│ │ ├── weights.go
│ │ └── weights_test.go
│ ├── testutil/
│ │ ├── assertions.go
│ │ ├── generator.go
│ │ ├── generator_test.go
│ │ └── proptest/
│ │ ├── proptest.go
│ │ └── proptest_test.go
│ ├── ui/
│ │ ├── actionable.go
│ │ ├── actionable_test.go
│ │ ├── agent_prompt_modal.go
│ │ ├── agent_prompt_modal_test.go
│ │ ├── attention.go
│ │ ├── attention_test.go
│ │ ├── background_worker.go
│ │ ├── background_worker_test.go
│ │ ├── benchmark_test.go
│ │ ├── board.go
│ │ ├── board_test.go
│ │ ├── capslock.go
│ │ ├── capslock_test.go
│ │ ├── cass_session_modal.go
│ │ ├── cass_session_modal_test.go
│ │ ├── context.go
│ │ ├── context_help.go
│ │ ├── context_help_test.go
│ │ ├── context_test.go
│ │ ├── coverage_extra_test.go
│ │ ├── delegate.go
│ │ ├── delegate_test.go
│ │ ├── flow_matrix.go
│ │ ├── flow_matrix_test.go
│ │ ├── graph.go
│ │ ├── graph_bench_test.go
│ │ ├── graph_golden_test.go
│ │ ├── graph_internal_test.go
│ │ ├── graph_test.go
│ │ ├── helpers.go
│ │ ├── helpers_test.go
│ │ ├── history.go
│ │ ├── history_selection_test.go
│ │ ├── history_test.go
│ │ ├── insights.go
│ │ ├── insights_test.go
│ │ ├── integration_test.go
│ │ ├── item.go
│ │ ├── item_test.go
│ │ ├── keybindings.go
│ │ ├── keybindings_test.go
│ │ ├── label_dashboard.go
│ │ ├── label_dashboard_test.go
│ │ ├── label_picker.go
│ │ ├── label_picker_test.go
│ │ ├── logic_test.go
│ │ ├── main_test.go
│ │ ├── markdown.go
│ │ ├── markdown_test.go
│ │ ├── model.go
│ │ ├── model_test.go
│ │ ├── recipe_picker.go
│ │ ├── recipe_picker_test.go
│ │ ├── repo_picker.go
│ │ ├── repo_picker_test.go
│ │ ├── semantic_search.go
│ │ ├── semantic_search_test.go
│ │ ├── shortcuts_sidebar.go
│ │ ├── shortcuts_sidebar_test.go
│ │ ├── snapshot.go
│ │ ├── snapshot_test.go
│ │ ├── sprint_view.go
│ │ ├── sprint_view_keys_test.go
│ │ ├── styles.go
│ │ ├── styles_test.go
│ │ ├── theme.go
│ │ ├── theme_test.go
│ │ ├── tree.go
│ │ ├── tree_bench_test.go
│ │ ├── tree_test.go
│ │ ├── triage_preservation_test.go
│ │ ├── truncate_test.go
│ │ ├── tutorial.go
│ │ ├── tutorial_components.go
│ │ ├── tutorial_content.go
│ │ ├── tutorial_progress.go
│ │ ├── tutorial_progress_test.go
│ │ ├── tutorial_test.go
│ │ ├── update_keys_test.go
│ │ ├── update_modal.go
│ │ ├── update_modal_test.go
│ │ ├── update_test.go
│ │ ├── velocity_comparison.go
│ │ ├── velocity_comparison_test.go
│ │ ├── visuals.go
│ │ ├── visuals_test.go
│ │ ├── workspace_filter_test.go
│ │ ├── workspace_repos.go
│ │ └── workspace_repos_test.go
│ ├── updater/
│ │ ├── download_test.go
│ │ ├── fileops_test.go
│ │ ├── helpers_test.go
│ │ ├── integration_test.go
│ │ ├── network_test.go
│ │ ├── updater.go
│ │ └── updater_test.go
│ ├── util/
│ │ └── topk/
│ │ ├── topk.go
│ │ └── topk_test.go
│ ├── version/
│ │ ├── version.go
│ │ └── version_test.go
│ ├── watcher/
│ │ ├── debouncer.go
│ │ ├── fsdetect.go
│ │ ├── fsdetect_darwin.go
│ │ ├── fsdetect_linux.go
│ │ ├── fsdetect_linux_test.go
│ │ ├── fsdetect_other.go
│ │ ├── fsdetect_windows.go
│ │ ├── watcher.go
│ │ └── watcher_test.go
│ ├── workspace/
│ │ ├── loader.go
│ │ ├── loader_test.go
│ │ ├── types.go
│ │ └── types_test.go
│ └── xfetch/
│ ├── xfetch.go
│ └── xfetch_test.go
├── screenshots/
│ └── convert_webp.py
├── scripts/
│ ├── benchmark.sh
│ ├── benchmark_compare.sh
│ ├── build_hybrid_wasm.sh
│ ├── capture_baseline.sh
│ ├── coverage.sh
│ ├── e2e_hybrid_search.sh
│ ├── e2e_web_hybrid_scoring.js
│ ├── generate_testdata.go
│ ├── test_buffer_pooling_e2e.sh
│ ├── test_datasource_e2e.sh
│ ├── test_toon_e2e.sh
│ └── verify_isomorphic.sh
├── testdata/
│ ├── expected/
│ │ ├── chain_10_metrics.json
│ │ ├── complex_20_metrics.json
│ │ ├── cycle_5_metrics.json
│ │ ├── diamond_5_metrics.json
│ │ └── star_10_metrics.json
│ ├── golden/
│ │ └── graph_render/
│ │ ├── chain_10.mermaid.golden
│ │ ├── chain_10.svg.golden
│ │ ├── chain_10_ascii.golden
│ │ ├── complex_20.svg.golden
│ │ ├── complex_20_ascii.golden
│ │ ├── diamond_5.mermaid.golden
│ │ ├── diamond_5.svg.golden
│ │ ├── diamond_5_ascii.golden
│ │ ├── star_10.mermaid.golden
│ │ ├── star_10.svg.golden
│ │ └── star_10_ascii.golden
│ └── graphs/
│ ├── chain_10.json
│ ├── complex_20.json
│ ├── cycle_5.json
│ ├── diamond_5.json
│ └── star_10.json
├── tests/
│ ├── e2e/
│ │ ├── README.md
│ │ ├── agents_integration_e2e_test.go
│ │ ├── board_e2e_test.go
│ │ ├── board_swimlane_e2e_test.go
│ │ ├── brief_exports_test.go
│ │ ├── cass_modal_e2e_test.go
│ │ ├── common_test.go
│ │ ├── correlation_e2e_test.go
│ │ ├── cycle_visualization_e2e_test.go
│ │ ├── drift_test.go
│ │ ├── emit_script_test.go
│ │ ├── error_scenarios_e2e_test.go
│ │ ├── export_cloudflare_test.go
│ │ ├── export_graph_topologies_test.go
│ │ ├── export_incremental_test.go
│ │ ├── export_offline_test.go
│ │ ├── export_pages_test.go
│ │ ├── forecast_test.go
│ │ ├── graph_analysis_detailed_e2e_test.go
│ │ ├── graph_export_e2e_test.go
│ │ ├── graph_navigation_e2e_test.go
│ │ ├── harness.sh
│ │ ├── harness_test.sh
│ │ ├── history_timeline_e2e_test.go
│ │ ├── main_test.go
│ │ ├── performance_regression_e2e_test.go
│ │ ├── race_conditions_e2e_test.go
│ │ ├── robot_alerts_test.go
│ │ ├── robot_burndown_scope_test.go
│ │ ├── robot_burndown_test.go
│ │ ├── robot_capacity_test.go
│ │ ├── robot_contract_test.go
│ │ ├── robot_diff_test.go
│ │ ├── robot_graph_test.go
│ │ ├── robot_history_test.go
│ │ ├── robot_matrix_test.go
│ │ ├── robot_search_hybrid_test.go
│ │ ├── robot_search_test.go
│ │ ├── robot_sprint_test.go
│ │ ├── robot_stderr_cleanliness_test.go
│ │ ├── robot_suggest_test.go
│ │ ├── robot_validation_test.go
│ │ ├── search_benchmark_test.go
│ │ ├── triage_detailed_e2e_test.go
│ │ ├── tui_hybrid_search_test.go
│ │ ├── tui_snapshot_test.go
│ │ ├── update_flow_test.go
│ │ ├── wizard_flow_e2e_test.go
│ │ ├── workflow_e2e_test.go
│ │ └── workspace_robot_output_e2e_test.go
│ └── testdata/
│ ├── .gitignore
│ ├── minimal.jsonl
│ ├── real/
│ │ ├── cass.jsonl
│ │ └── srps.jsonl
│ ├── search_hybrid.jsonl
│ └── synthetic_complex.jsonl
└── vendor/
├── git.sr.ht/
│ └── ~sbinet/
│ └── gg/
│ ├── LICENSE.md
│ ├── README.md
│ ├── bezier.go
│ ├── context.go
│ ├── gg.go
│ ├── gradient.go
│ ├── matrix.go
│ ├── path.go
│ ├── pattern.go
│ ├── point.go
│ ├── util.go
│ └── wrap.go
├── github.com/
│ ├── Dicklesworthstone/
│ │ └── toon-go/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── toon.go
│ ├── ajstarks/
│ │ └── svgo/
│ │ ├── LICENSE
│ │ ├── LICENSE-link.txt
│ │ ├── README.markdown
│ │ ├── doc.go
│ │ ├── newsvg
│ │ └── svg.go
│ ├── alecthomas/
│ │ └── chroma/
│ │ └── v2/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── .goreleaser.yml
│ │ ├── AGENTS.md
│ │ ├── Bitfile
│ │ ├── COPYING
│ │ ├── Dockerfile
│ │ ├── Justfile
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── coalesce.go
│ │ ├── colour.go
│ │ ├── delegate.go
│ │ ├── doc.go
│ │ ├── emitters.go
│ │ ├── formatter.go
│ │ ├── formatters/
│ │ │ ├── api.go
│ │ │ ├── html/
│ │ │ │ └── html.go
│ │ │ ├── json.go
│ │ │ ├── svg/
│ │ │ │ ├── font_liberation_mono.go
│ │ │ │ └── svg.go
│ │ │ ├── tokens.go
│ │ │ ├── tty_indexed.go
│ │ │ └── tty_truecolour.go
│ │ ├── iterator.go
│ │ ├── lexer.go
│ │ ├── lexers/
│ │ │ ├── README.md
│ │ │ ├── caddyfile.go
│ │ │ ├── cl.go
│ │ │ ├── dns.go
│ │ │ ├── emacs.go
│ │ │ ├── embedded/
│ │ │ │ ├── abap.xml
│ │ │ │ ├── abnf.xml
│ │ │ │ ├── actionscript.xml
│ │ │ │ ├── actionscript_3.xml
│ │ │ │ ├── ada.xml
│ │ │ │ ├── agda.xml
│ │ │ │ ├── al.xml
│ │ │ │ ├── alloy.xml
│ │ │ │ ├── angular2.xml
│ │ │ │ ├── antlr.xml
│ │ │ │ ├── apacheconf.xml
│ │ │ │ ├── apl.xml
│ │ │ │ ├── applescript.xml
│ │ │ │ ├── arangodb_aql.xml
│ │ │ │ ├── arduino.xml
│ │ │ │ ├── armasm.xml
│ │ │ │ ├── atl.xml
│ │ │ │ ├── autohotkey.xml
│ │ │ │ ├── autoit.xml
│ │ │ │ ├── awk.xml
│ │ │ │ ├── ballerina.xml
│ │ │ │ ├── bash.xml
│ │ │ │ ├── bash_session.xml
│ │ │ │ ├── batchfile.xml
│ │ │ │ ├── beef.xml
│ │ │ │ ├── bibtex.xml
│ │ │ │ ├── bicep.xml
│ │ │ │ ├── blitzbasic.xml
│ │ │ │ ├── bnf.xml
│ │ │ │ ├── bqn.xml
│ │ │ │ ├── brainfuck.xml
│ │ │ │ ├── c#.xml
│ │ │ │ ├── c++.xml
│ │ │ │ ├── c.xml
│ │ │ │ ├── c3.xml
│ │ │ │ ├── cap_n_proto.xml
│ │ │ │ ├── cassandra_cql.xml
│ │ │ │ ├── ceylon.xml
│ │ │ │ ├── cfengine3.xml
│ │ │ │ ├── cfstatement.xml
│ │ │ │ ├── chaiscript.xml
│ │ │ │ ├── chapel.xml
│ │ │ │ ├── cheetah.xml
│ │ │ │ ├── clojure.xml
│ │ │ │ ├── cmake.xml
│ │ │ │ ├── cobol.xml
│ │ │ │ ├── coffeescript.xml
│ │ │ │ ├── common_lisp.xml
│ │ │ │ ├── coq.xml
│ │ │ │ ├── core.xml
│ │ │ │ ├── crystal.xml
│ │ │ │ ├── css.xml
│ │ │ │ ├── csv.xml
│ │ │ │ ├── cue.xml
│ │ │ │ ├── cython.xml
│ │ │ │ ├── d.xml
│ │ │ │ ├── dart.xml
│ │ │ │ ├── dax.xml
│ │ │ │ ├── desktop_entry.xml
│ │ │ │ ├── devicetree.xml
│ │ │ │ ├── diff.xml
│ │ │ │ ├── django_jinja.xml
│ │ │ │ ├── dns.xml
│ │ │ │ ├── docker.xml
│ │ │ │ ├── dtd.xml
│ │ │ │ ├── dylan.xml
│ │ │ │ ├── ebnf.xml
│ │ │ │ ├── elixir.xml
│ │ │ │ ├── elm.xml
│ │ │ │ ├── emacslisp.xml
│ │ │ │ ├── erlang.xml
│ │ │ │ ├── factor.xml
│ │ │ │ ├── fennel.xml
│ │ │ │ ├── fish.xml
│ │ │ │ ├── forth.xml
│ │ │ │ ├── fortran.xml
│ │ │ │ ├── fortranfixed.xml
│ │ │ │ ├── fsharp.xml
│ │ │ │ ├── gas.xml
│ │ │ │ ├── gdscript.xml
│ │ │ │ ├── gdscript3.xml
│ │ │ │ ├── gherkin.xml
│ │ │ │ ├── gleam.xml
│ │ │ │ ├── glsl.xml
│ │ │ │ ├── gnuplot.xml
│ │ │ │ ├── go_template.xml
│ │ │ │ ├── graphql.xml
│ │ │ │ ├── groff.xml
│ │ │ │ ├── groovy.xml
│ │ │ │ ├── handlebars.xml
│ │ │ │ ├── hare.xml
│ │ │ │ ├── haskell.xml
│ │ │ │ ├── hcl.xml
│ │ │ │ ├── hexdump.xml
│ │ │ │ ├── hlb.xml
│ │ │ │ ├── hlsl.xml
│ │ │ │ ├── holyc.xml
│ │ │ │ ├── html.xml
│ │ │ │ ├── hy.xml
│ │ │ │ ├── idris.xml
│ │ │ │ ├── igor.xml
│ │ │ │ ├── ini.xml
│ │ │ │ ├── io.xml
│ │ │ │ ├── iscdhcpd.xml
│ │ │ │ ├── j.xml
│ │ │ │ ├── janet.xml
│ │ │ │ ├── java.xml
│ │ │ │ ├── javascript.xml
│ │ │ │ ├── json.xml
│ │ │ │ ├── jsonata.xml
│ │ │ │ ├── jsonnet.xml
│ │ │ │ ├── julia.xml
│ │ │ │ ├── jungle.xml
│ │ │ │ ├── kakoune.xml
│ │ │ │ ├── kdl.xml
│ │ │ │ ├── kotlin.xml
│ │ │ │ ├── lean.xml
│ │ │ │ ├── lighttpd_configuration_file.xml
│ │ │ │ ├── llvm.xml
│ │ │ │ ├── lox.xml
│ │ │ │ ├── lua.xml
│ │ │ │ ├── makefile.xml
│ │ │ │ ├── mako.xml
│ │ │ │ ├── mason.xml
│ │ │ │ ├── materialize_sql_dialect.xml
│ │ │ │ ├── mathematica.xml
│ │ │ │ ├── matlab.xml
│ │ │ │ ├── mcfunction.xml
│ │ │ │ ├── meson.xml
│ │ │ │ ├── metal.xml
│ │ │ │ ├── microcad.xml
│ │ │ │ ├── minizinc.xml
│ │ │ │ ├── mlir.xml
│ │ │ │ ├── modelica.xml
│ │ │ │ ├── modula-2.xml
│ │ │ │ ├── mojo.xml
│ │ │ │ ├── monkeyc.xml
│ │ │ │ ├── moonbit.xml
│ │ │ │ ├── moonscript.xml
│ │ │ │ ├── morrowindscript.xml
│ │ │ │ ├── myghty.xml
│ │ │ │ ├── mysql.xml
│ │ │ │ ├── nasm.xml
│ │ │ │ ├── natural.xml
│ │ │ │ ├── ndisasm.xml
│ │ │ │ ├── newspeak.xml
│ │ │ │ ├── nginx_configuration_file.xml
│ │ │ │ ├── nim.xml
│ │ │ │ ├── nix.xml
│ │ │ │ ├── nsis.xml
│ │ │ │ ├── nu.xml
│ │ │ │ ├── objective-c.xml
│ │ │ │ ├── objectpascal.xml
│ │ │ │ ├── ocaml.xml
│ │ │ │ ├── octave.xml
│ │ │ │ ├── odin.xml
│ │ │ │ ├── onesenterprise.xml
│ │ │ │ ├── openedge_abl.xml
│ │ │ │ ├── openscad.xml
│ │ │ │ ├── org_mode.xml
│ │ │ │ ├── pacmanconf.xml
│ │ │ │ ├── perl.xml
│ │ │ │ ├── php.xml
│ │ │ │ ├── pig.xml
│ │ │ │ ├── pkgconfig.xml
│ │ │ │ ├── pl_pgsql.xml
│ │ │ │ ├── plaintext.xml
│ │ │ │ ├── plutus_core.xml
│ │ │ │ ├── pony.xml
│ │ │ │ ├── postgresql_sql_dialect.xml
│ │ │ │ ├── postscript.xml
│ │ │ │ ├── povray.xml
│ │ │ │ ├── powerquery.xml
│ │ │ │ ├── powershell.xml
│ │ │ │ ├── prolog.xml
│ │ │ │ ├── promela.xml
│ │ │ │ ├── promql.xml
│ │ │ │ ├── properties.xml
│ │ │ │ ├── protocol_buffer.xml
│ │ │ │ ├── prql.xml
│ │ │ │ ├── psl.xml
│ │ │ │ ├── puppet.xml
│ │ │ │ ├── python.xml
│ │ │ │ ├── python_2.xml
│ │ │ │ ├── qbasic.xml
│ │ │ │ ├── qml.xml
│ │ │ │ ├── r.xml
│ │ │ │ ├── racket.xml
│ │ │ │ ├── ragel.xml
│ │ │ │ ├── react.xml
│ │ │ │ ├── reasonml.xml
│ │ │ │ ├── reg.xml
│ │ │ │ ├── rego.xml
│ │ │ │ ├── rexx.xml
│ │ │ │ ├── rgbasm.xml
│ │ │ │ ├── ring.xml
│ │ │ │ ├── rpgle.xml
│ │ │ │ ├── rpm_spec.xml
│ │ │ │ ├── ruby.xml
│ │ │ │ ├── rust.xml
│ │ │ │ ├── sas.xml
│ │ │ │ ├── sass.xml
│ │ │ │ ├── scala.xml
│ │ │ │ ├── scheme.xml
│ │ │ │ ├── scilab.xml
│ │ │ │ ├── scss.xml
│ │ │ │ ├── sed.xml
│ │ │ │ ├── sieve.xml
│ │ │ │ ├── smali.xml
│ │ │ │ ├── smalltalk.xml
│ │ │ │ ├── smarty.xml
│ │ │ │ ├── snbt.xml
│ │ │ │ ├── snobol.xml
│ │ │ │ ├── solidity.xml
│ │ │ │ ├── sourcepawn.xml
│ │ │ │ ├── sparql.xml
│ │ │ │ ├── sql.xml
│ │ │ │ ├── squidconf.xml
│ │ │ │ ├── standard_ml.xml
│ │ │ │ ├── stas.xml
│ │ │ │ ├── stylus.xml
│ │ │ │ ├── swift.xml
│ │ │ │ ├── systemd.xml
│ │ │ │ ├── systemverilog.xml
│ │ │ │ ├── tablegen.xml
│ │ │ │ ├── tal.xml
│ │ │ │ ├── tasm.xml
│ │ │ │ ├── tcl.xml
│ │ │ │ ├── tcsh.xml
│ │ │ │ ├── termcap.xml
│ │ │ │ ├── terminfo.xml
│ │ │ │ ├── terraform.xml
│ │ │ │ ├── tex.xml
│ │ │ │ ├── thrift.xml
│ │ │ │ ├── toml.xml
│ │ │ │ ├── tradingview.xml
│ │ │ │ ├── transact-sql.xml
│ │ │ │ ├── turing.xml
│ │ │ │ ├── turtle.xml
│ │ │ │ ├── twig.xml
│ │ │ │ ├── txtpb.xml
│ │ │ │ ├── typescript.xml
│ │ │ │ ├── typoscript.xml
│ │ │ │ ├── typoscriptcssdata.xml
│ │ │ │ ├── typoscripthtmldata.xml
│ │ │ │ ├── typst.xml
│ │ │ │ ├── ucode.xml
│ │ │ │ ├── v.xml
│ │ │ │ ├── v_shell.xml
│ │ │ │ ├── vala.xml
│ │ │ │ ├── vb_net.xml
│ │ │ │ ├── verilog.xml
│ │ │ │ ├── vhdl.xml
│ │ │ │ ├── vhs.xml
│ │ │ │ ├── viml.xml
│ │ │ │ ├── vue.xml
│ │ │ │ ├── wat.xml
│ │ │ │ ├── wdte.xml
│ │ │ │ ├── webgpu_shading_language.xml
│ │ │ │ ├── webvtt.xml
│ │ │ │ ├── whiley.xml
│ │ │ │ ├── xml.xml
│ │ │ │ ├── xorg.xml
│ │ │ │ ├── yaml.xml
│ │ │ │ ├── yang.xml
│ │ │ │ ├── z80_assembly.xml
│ │ │ │ ├── zed.xml
│ │ │ │ └── zig.xml
│ │ │ ├── gemtext.go
│ │ │ ├── genshi.go
│ │ │ ├── go.go
│ │ │ ├── haxe.go
│ │ │ ├── html.go
│ │ │ ├── http.go
│ │ │ ├── lexers.go
│ │ │ ├── markdown.go
│ │ │ ├── markless.go
│ │ │ ├── mysql.go
│ │ │ ├── php.go
│ │ │ ├── raku.go
│ │ │ ├── rst.go
│ │ │ ├── svelte.go
│ │ │ ├── typoscript.go
│ │ │ └── zed.go
│ │ ├── mutators.go
│ │ ├── pygments-lexers.txt
│ │ ├── quick/
│ │ │ └── quick.go
│ │ ├── regexp.go
│ │ ├── registry.go
│ │ ├── remap.go
│ │ ├── renovate.json5
│ │ ├── serialise.go
│ │ ├── style.go
│ │ ├── styles/
│ │ │ ├── abap.xml
│ │ │ ├── algol.xml
│ │ │ ├── algol_nu.xml
│ │ │ ├── api.go
│ │ │ ├── arduino.xml
│ │ │ ├── ashen.xml
│ │ │ ├── aura-theme-dark-soft.xml
│ │ │ ├── aura-theme-dark.xml
│ │ │ ├── autumn.xml
│ │ │ ├── average.xml
│ │ │ ├── base16-snazzy.xml
│ │ │ ├── borland.xml
│ │ │ ├── bw.xml
│ │ │ ├── catppuccin-frappe.xml
│ │ │ ├── catppuccin-latte.xml
│ │ │ ├── catppuccin-macchiato.xml
│ │ │ ├── catppuccin-mocha.xml
│ │ │ ├── colorful.xml
│ │ │ ├── compat.go
│ │ │ ├── doom-one.xml
│ │ │ ├── doom-one2.xml
│ │ │ ├── dracula.xml
│ │ │ ├── emacs.xml
│ │ │ ├── evergarden.xml
│ │ │ ├── friendly.xml
│ │ │ ├── fruity.xml
│ │ │ ├── github-dark.xml
│ │ │ ├── github.xml
│ │ │ ├── gruvbox-light.xml
│ │ │ ├── gruvbox.xml
│ │ │ ├── hr_high_contrast.xml
│ │ │ ├── hrdark.xml
│ │ │ ├── igor.xml
│ │ │ ├── lovelace.xml
│ │ │ ├── manni.xml
│ │ │ ├── modus-operandi.xml
│ │ │ ├── modus-vivendi.xml
│ │ │ ├── monokai.xml
│ │ │ ├── monokailight.xml
│ │ │ ├── murphy.xml
│ │ │ ├── native.xml
│ │ │ ├── nord.xml
│ │ │ ├── nordic.xml
│ │ │ ├── onedark.xml
│ │ │ ├── onesenterprise.xml
│ │ │ ├── paraiso-dark.xml
│ │ │ ├── paraiso-light.xml
│ │ │ ├── pastie.xml
│ │ │ ├── perldoc.xml
│ │ │ ├── pygments.xml
│ │ │ ├── rainbow_dash.xml
│ │ │ ├── rose-pine-dawn.xml
│ │ │ ├── rose-pine-moon.xml
│ │ │ ├── rose-pine.xml
│ │ │ ├── rpgle.xml
│ │ │ ├── rrt.xml
│ │ │ ├── solarized-dark.xml
│ │ │ ├── solarized-dark256.xml
│ │ │ ├── solarized-light.xml
│ │ │ ├── swapoff.xml
│ │ │ ├── tango.xml
│ │ │ ├── tokyonight-day.xml
│ │ │ ├── tokyonight-moon.xml
│ │ │ ├── tokyonight-night.xml
│ │ │ ├── tokyonight-storm.xml
│ │ │ ├── trac.xml
│ │ │ ├── vim.xml
│ │ │ ├── vs.xml
│ │ │ ├── vulcan.xml
│ │ │ ├── witchhazel.xml
│ │ │ ├── xcode-dark.xml
│ │ │ └── xcode.xml
│ │ ├── table.py
│ │ ├── tokentype_enumer.go
│ │ └── types.go
│ ├── atotto/
│ │ └── clipboard/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── clipboard.go
│ │ ├── clipboard_darwin.go
│ │ ├── clipboard_plan9.go
│ │ ├── clipboard_unix.go
│ │ └── clipboard_windows.go
│ ├── aymanbagabas/
│ │ └── go-osc52/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ └── osc52.go
│ ├── aymerick/
│ │ └── douceur/
│ │ ├── LICENSE
│ │ ├── css/
│ │ │ ├── declaration.go
│ │ │ ├── rule.go
│ │ │ └── stylesheet.go
│ │ └── parser/
│ │ └── parser.go
│ ├── catppuccin/
│ │ └── go/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .goreleaser.yaml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── flake.nix
│ │ ├── frappe.go
│ │ ├── go.tera
│ │ ├── latte.go
│ │ ├── macchiato.go
│ │ ├── main.go
│ │ ├── mocha.go
│ │ └── renovate.json
│ ├── charmbracelet/
│ │ ├── bubbles/
│ │ │ ├── LICENSE
│ │ │ ├── cursor/
│ │ │ │ └── cursor.go
│ │ │ ├── filepicker/
│ │ │ │ ├── filepicker.go
│ │ │ │ ├── hidden_unix.go
│ │ │ │ └── hidden_windows.go
│ │ │ ├── help/
│ │ │ │ └── help.go
│ │ │ ├── key/
│ │ │ │ └── key.go
│ │ │ ├── list/
│ │ │ │ ├── README.md
│ │ │ │ ├── defaultitem.go
│ │ │ │ ├── keys.go
│ │ │ │ ├── list.go
│ │ │ │ └── style.go
│ │ │ ├── paginator/
│ │ │ │ └── paginator.go
│ │ │ ├── runeutil/
│ │ │ │ └── runeutil.go
│ │ │ ├── spinner/
│ │ │ │ └── spinner.go
│ │ │ ├── textarea/
│ │ │ │ ├── memoization/
│ │ │ │ │ └── memoization.go
│ │ │ │ └── textarea.go
│ │ │ ├── textinput/
│ │ │ │ └── textinput.go
│ │ │ └── viewport/
│ │ │ ├── keymap.go
│ │ │ └── viewport.go
│ │ ├── bubbletea/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yaml
│ │ │ ├── commands.go
│ │ │ ├── exec.go
│ │ │ ├── focus.go
│ │ │ ├── inputreader_other.go
│ │ │ ├── inputreader_windows.go
│ │ │ ├── key.go
│ │ │ ├── key_other.go
│ │ │ ├── key_sequences.go
│ │ │ ├── key_windows.go
│ │ │ ├── logging.go
│ │ │ ├── mouse.go
│ │ │ ├── nil_renderer.go
│ │ │ ├── options.go
│ │ │ ├── renderer.go
│ │ │ ├── screen.go
│ │ │ ├── signals_unix.go
│ │ │ ├── signals_windows.go
│ │ │ ├── standard_renderer.go
│ │ │ ├── tea.go
│ │ │ ├── tea_init.go
│ │ │ ├── tty.go
│ │ │ ├── tty_unix.go
│ │ │ └── tty_windows.go
│ │ ├── colorprofile/
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── env.go
│ │ │ ├── env_other.go
│ │ │ ├── env_windows.go
│ │ │ ├── profile.go
│ │ │ └── writer.go
│ │ ├── glamour/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yml
│ │ │ ├── ansi/
│ │ │ │ ├── ansi.go
│ │ │ │ ├── baseelement.go
│ │ │ │ ├── blockelement.go
│ │ │ │ ├── blockstack.go
│ │ │ │ ├── codeblock.go
│ │ │ │ ├── codespan.go
│ │ │ │ ├── context.go
│ │ │ │ ├── elements.go
│ │ │ │ ├── emphasis.go
│ │ │ │ ├── heading.go
│ │ │ │ ├── image.go
│ │ │ │ ├── link.go
│ │ │ │ ├── listitem.go
│ │ │ │ ├── margin.go
│ │ │ │ ├── paragraph.go
│ │ │ │ ├── renderer.go
│ │ │ │ ├── style.go
│ │ │ │ ├── table.go
│ │ │ │ ├── table_links.go
│ │ │ │ ├── task.go
│ │ │ │ └── templatehelper.go
│ │ │ ├── examples.sh
│ │ │ ├── gallery.sh
│ │ │ ├── glamour.go
│ │ │ ├── internal/
│ │ │ │ └── autolink/
│ │ │ │ └── autolink.go
│ │ │ └── styles/
│ │ │ ├── README.md
│ │ │ ├── ascii.json
│ │ │ ├── dark.json
│ │ │ ├── dracula.go
│ │ │ ├── dracula.json
│ │ │ ├── light.json
│ │ │ ├── notty.json
│ │ │ ├── pink.json
│ │ │ ├── styles.go
│ │ │ ├── tokyo-night.go
│ │ │ └── tokyo_night.json
│ │ ├── huh/
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── accessor.go
│ │ │ ├── clamp.go
│ │ │ ├── eval.go
│ │ │ ├── field_confirm.go
│ │ │ ├── field_filepicker.go
│ │ │ ├── field_input.go
│ │ │ ├── field_multiselect.go
│ │ │ ├── field_note.go
│ │ │ ├── field_select.go
│ │ │ ├── field_text.go
│ │ │ ├── form.go
│ │ │ ├── group.go
│ │ │ ├── huh.go
│ │ │ ├── internal/
│ │ │ │ ├── accessibility/
│ │ │ │ │ └── accessibility.go
│ │ │ │ └── selector/
│ │ │ │ └── selector.go
│ │ │ ├── keymap.go
│ │ │ ├── layout.go
│ │ │ ├── option.go
│ │ │ ├── run.go
│ │ │ ├── theme.go
│ │ │ ├── validate.go
│ │ │ └── wrap.go
│ │ ├── lipgloss/
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .goreleaser.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── Taskfile.yaml
│ │ │ ├── align.go
│ │ │ ├── ansi_unix.go
│ │ │ ├── ansi_windows.go
│ │ │ ├── borders.go
│ │ │ ├── color.go
│ │ │ ├── get.go
│ │ │ ├── join.go
│ │ │ ├── lipgloss.go
│ │ │ ├── position.go
│ │ │ ├── ranges.go
│ │ │ ├── renderer.go
│ │ │ ├── runes.go
│ │ │ ├── set.go
│ │ │ ├── size.go
│ │ │ ├── style.go
│ │ │ ├── table/
│ │ │ │ ├── resizing.go
│ │ │ │ ├── rows.go
│ │ │ │ ├── table.go
│ │ │ │ └── util.go
│ │ │ ├── tree/
│ │ │ │ ├── children.go
│ │ │ │ ├── enumerator.go
│ │ │ │ ├── renderer.go
│ │ │ │ └── tree.go
│ │ │ ├── unset.go
│ │ │ └── whitespace.go
│ │ └── x/
│ │ ├── ansi/
│ │ │ ├── LICENSE
│ │ │ ├── ansi.go
│ │ │ ├── ascii.go
│ │ │ ├── background.go
│ │ │ ├── c0.go
│ │ │ ├── c1.go
│ │ │ ├── charset.go
│ │ │ ├── clipboard.go
│ │ │ ├── color.go
│ │ │ ├── ctrl.go
│ │ │ ├── cursor.go
│ │ │ ├── cwd.go
│ │ │ ├── doc.go
│ │ │ ├── finalterm.go
│ │ │ ├── focus.go
│ │ │ ├── graphics.go
│ │ │ ├── hyperlink.go
│ │ │ ├── inband.go
│ │ │ ├── iterm2.go
│ │ │ ├── keypad.go
│ │ │ ├── kitty.go
│ │ │ ├── method.go
│ │ │ ├── mode.go
│ │ │ ├── mode_deprecated.go
│ │ │ ├── modes.go
│ │ │ ├── mouse.go
│ │ │ ├── notification.go
│ │ │ ├── palette.go
│ │ │ ├── parser/
│ │ │ │ ├── const.go
│ │ │ │ ├── seq.go
│ │ │ │ └── transition_table.go
│ │ │ ├── parser.go
│ │ │ ├── parser_decode.go
│ │ │ ├── parser_handler.go
│ │ │ ├── parser_sync.go
│ │ │ ├── passthrough.go
│ │ │ ├── paste.go
│ │ │ ├── progress.go
│ │ │ ├── reset.go
│ │ │ ├── screen.go
│ │ │ ├── sgr.go
│ │ │ ├── status.go
│ │ │ ├── style.go
│ │ │ ├── termcap.go
│ │ │ ├── title.go
│ │ │ ├── truncate.go
│ │ │ ├── urxvt.go
│ │ │ ├── util.go
│ │ │ ├── width.go
│ │ │ ├── winop.go
│ │ │ ├── wrap.go
│ │ │ └── xterm.go
│ │ ├── cellbuf/
│ │ │ ├── LICENSE
│ │ │ ├── buffer.go
│ │ │ ├── cell.go
│ │ │ ├── errors.go
│ │ │ ├── geom.go
│ │ │ ├── hardscroll.go
│ │ │ ├── hashmap.go
│ │ │ ├── link.go
│ │ │ ├── pen.go
│ │ │ ├── screen.go
│ │ │ ├── sequence.go
│ │ │ ├── style.go
│ │ │ ├── tabstop.go
│ │ │ ├── utils.go
│ │ │ ├── wrap.go
│ │ │ └── writer.go
│ │ ├── exp/
│ │ │ ├── slice/
│ │ │ │ ├── LICENSE
│ │ │ │ └── slice.go
│ │ │ └── strings/
│ │ │ ├── LICENSE
│ │ │ ├── contains.go
│ │ │ └── join.go
│ │ └── term/
│ │ ├── LICENSE
│ │ ├── term.go
│ │ ├── term_other.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_windows.go
│ │ ├── terminal.go
│ │ └── util.go
│ ├── clipperhouse/
│ │ ├── displaywidth/
│ │ │ ├── .gitignore
│ │ │ ├── AGENTS.md
│ │ │ ├── CHANGELOG.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── gen.go
│ │ │ ├── graphemes.go
│ │ │ ├── options.go
│ │ │ ├── trie.go
│ │ │ ├── truncate.go
│ │ │ └── width.go
│ │ └── uax29/
│ │ └── v2/
│ │ ├── LICENSE
│ │ └── graphemes/
│ │ ├── README.md
│ │ ├── ansi.go
│ │ ├── ansi8.go
│ │ ├── iterator.go
│ │ ├── reader.go
│ │ ├── splitfunc.go
│ │ └── trie.go
│ ├── dlclark/
│ │ └── regexp2/
│ │ ├── .gitignore
│ │ ├── .travis.yml
│ │ ├── ATTRIB
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── fastclock.go
│ │ ├── match.go
│ │ ├── regexp.go
│ │ ├── replace.go
│ │ ├── runner.go
│ │ ├── syntax/
│ │ │ ├── charclass.go
│ │ │ ├── code.go
│ │ │ ├── escape.go
│ │ │ ├── fuzz.go
│ │ │ ├── parser.go
│ │ │ ├── prefix.go
│ │ │ ├── replacerdata.go
│ │ │ ├── tree.go
│ │ │ └── writer.go
│ │ └── testoutput1
│ ├── dustin/
│ │ └── go-humanize/
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.markdown
│ │ ├── big.go
│ │ ├── bigbytes.go
│ │ ├── bytes.go
│ │ ├── comma.go
│ │ ├── commaf.go
│ │ ├── ftoa.go
│ │ ├── humanize.go
│ │ ├── number.go
│ │ ├── ordinals.go
│ │ ├── si.go
│ │ └── times.go
│ ├── erikgeiser/
│ │ └── coninput/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── keycodes.go
│ │ ├── mode.go
│ │ ├── read.go
│ │ └── records.go
│ ├── fsnotify/
│ │ └── fsnotify/
│ │ ├── .cirrus.yml
│ │ ├── .gitignore
│ │ ├── .mailmap
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── backend_fen.go
│ │ ├── backend_inotify.go
│ │ ├── backend_kqueue.go
│ │ ├── backend_other.go
│ │ ├── backend_windows.go
│ │ ├── fsnotify.go
│ │ ├── internal/
│ │ │ ├── darwin.go
│ │ │ ├── debug_darwin.go
│ │ │ ├── debug_dragonfly.go
│ │ │ ├── debug_freebsd.go
│ │ │ ├── debug_kqueue.go
│ │ │ ├── debug_linux.go
│ │ │ ├── debug_netbsd.go
│ │ │ ├── debug_openbsd.go
│ │ │ ├── debug_solaris.go
│ │ │ ├── debug_windows.go
│ │ │ ├── freebsd.go
│ │ │ ├── internal.go
│ │ │ ├── unix.go
│ │ │ ├── unix2.go
│ │ │ └── windows.go
│ │ ├── shared.go
│ │ ├── staticcheck.conf
│ │ ├── system_bsd.go
│ │ └── system_darwin.go
│ ├── goccy/
│ │ └── go-json/
│ │ ├── .codecov.yml
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── color.go
│ │ ├── decode.go
│ │ ├── docker-compose.yml
│ │ ├── encode.go
│ │ ├── error.go
│ │ ├── internal/
│ │ │ ├── decoder/
│ │ │ │ ├── anonymous_field.go
│ │ │ │ ├── array.go
│ │ │ │ ├── assign.go
│ │ │ │ ├── bool.go
│ │ │ │ ├── bytes.go
│ │ │ │ ├── compile.go
│ │ │ │ ├── compile_norace.go
│ │ │ │ ├── compile_race.go
│ │ │ │ ├── context.go
│ │ │ │ ├── float.go
│ │ │ │ ├── func.go
│ │ │ │ ├── int.go
│ │ │ │ ├── interface.go
│ │ │ │ ├── invalid.go
│ │ │ │ ├── map.go
│ │ │ │ ├── number.go
│ │ │ │ ├── option.go
│ │ │ │ ├── path.go
│ │ │ │ ├── ptr.go
│ │ │ │ ├── slice.go
│ │ │ │ ├── stream.go
│ │ │ │ ├── string.go
│ │ │ │ ├── struct.go
│ │ │ │ ├── type.go
│ │ │ │ ├── uint.go
│ │ │ │ ├── unmarshal_json.go
│ │ │ │ ├── unmarshal_text.go
│ │ │ │ └── wrapped_string.go
│ │ │ ├── encoder/
│ │ │ │ ├── code.go
│ │ │ │ ├── compact.go
│ │ │ │ ├── compiler.go
│ │ │ │ ├── compiler_norace.go
│ │ │ │ ├── compiler_race.go
│ │ │ │ ├── context.go
│ │ │ │ ├── decode_rune.go
│ │ │ │ ├── encoder.go
│ │ │ │ ├── indent.go
│ │ │ │ ├── int.go
│ │ │ │ ├── map112.go
│ │ │ │ ├── map113.go
│ │ │ │ ├── opcode.go
│ │ │ │ ├── option.go
│ │ │ │ ├── optype.go
│ │ │ │ ├── query.go
│ │ │ │ ├── string.go
│ │ │ │ ├── string_table.go
│ │ │ │ ├── vm/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── hack.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ ├── vm_color/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── hack.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ ├── vm_color_indent/
│ │ │ │ │ ├── debug_vm.go
│ │ │ │ │ ├── util.go
│ │ │ │ │ └── vm.go
│ │ │ │ └── vm_indent/
│ │ │ │ ├── debug_vm.go
│ │ │ │ ├── hack.go
│ │ │ │ ├── util.go
│ │ │ │ └── vm.go
│ │ │ ├── errors/
│ │ │ │ └── error.go
│ │ │ └── runtime/
│ │ │ ├── rtype.go
│ │ │ ├── struct_field.go
│ │ │ └── type.go
│ │ ├── json.go
│ │ ├── option.go
│ │ ├── path.go
│ │ └── query.go
│ ├── golang/
│ │ └── freetype/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ └── raster/
│ │ ├── geom.go
│ │ ├── paint.go
│ │ ├── raster.go
│ │ └── stroke.go
│ ├── google/
│ │ └── uuid/
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── dce.go
│ │ ├── doc.go
│ │ ├── hash.go
│ │ ├── marshal.go
│ │ ├── node.go
│ │ ├── node_js.go
│ │ ├── node_net.go
│ │ ├── null.go
│ │ ├── sql.go
│ │ ├── time.go
│ │ ├── util.go
│ │ ├── uuid.go
│ │ ├── version1.go
│ │ ├── version4.go
│ │ ├── version6.go
│ │ └── version7.go
│ ├── gorilla/
│ │ └── css/
│ │ ├── LICENSE
│ │ └── scanner/
│ │ ├── doc.go
│ │ └── scanner.go
│ ├── inconshreveable/
│ │ └── mousetrap/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── trap_others.go
│ │ └── trap_windows.go
│ ├── mattn/
│ │ ├── go-isatty/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── doc.go
│ │ │ ├── go.test.sh
│ │ │ ├── isatty_bsd.go
│ │ │ ├── isatty_others.go
│ │ │ ├── isatty_plan9.go
│ │ │ ├── isatty_solaris.go
│ │ │ ├── isatty_tcgets.go
│ │ │ └── isatty_windows.go
│ │ ├── go-localereader/
│ │ │ ├── README.md
│ │ │ ├── localereader.go
│ │ │ ├── localereader_unix.go
│ │ │ └── localereader_windows.go
│ │ └── go-runewidth/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── benchstat.txt
│ │ ├── new.txt
│ │ ├── old.txt
│ │ ├── runewidth.go
│ │ ├── runewidth_appengine.go
│ │ ├── runewidth_js.go
│ │ ├── runewidth_posix.go
│ │ ├── runewidth_table.go
│ │ └── runewidth_windows.go
│ ├── microcosm-cc/
│ │ └── bluemonday/
│ │ ├── CONTRIBUTING.md
│ │ ├── CREDITS.md
│ │ ├── LICENSE.md
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── css/
│ │ │ └── handlers.go
│ │ ├── doc.go
│ │ ├── helpers.go
│ │ ├── policies.go
│ │ ├── policy.go
│ │ └── sanitize.go
│ ├── mitchellh/
│ │ └── hashstructure/
│ │ └── v2/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── errors.go
│ │ ├── hashstructure.go
│ │ └── include.go
│ ├── muesli/
│ │ ├── ansi/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── ansi.go
│ │ │ ├── buffer.go
│ │ │ ├── compressor/
│ │ │ │ └── writer.go
│ │ │ └── writer.go
│ │ ├── cancelreader/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci-soft.yml
│ │ │ ├── .golangci.yml
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── cancelreader.go
│ │ │ ├── cancelreader_bsd.go
│ │ │ ├── cancelreader_default.go
│ │ │ ├── cancelreader_linux.go
│ │ │ ├── cancelreader_select.go
│ │ │ ├── cancelreader_unix.go
│ │ │ └── cancelreader_windows.go
│ │ ├── reflow/
│ │ │ ├── LICENSE
│ │ │ ├── ansi/
│ │ │ │ ├── ansi.go
│ │ │ │ ├── buffer.go
│ │ │ │ └── writer.go
│ │ │ ├── indent/
│ │ │ │ └── indent.go
│ │ │ ├── padding/
│ │ │ │ └── padding.go
│ │ │ └── wordwrap/
│ │ │ └── wordwrap.go
│ │ └── termenv/
│ │ ├── .gitignore
│ │ ├── .golangci-soft.yml
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── ansi_compat.md
│ │ ├── ansicolors.go
│ │ ├── color.go
│ │ ├── constants_linux.go
│ │ ├── constants_solaris.go
│ │ ├── constants_unix.go
│ │ ├── constants_zos.go
│ │ ├── copy.go
│ │ ├── hyperlink.go
│ │ ├── notification.go
│ │ ├── output.go
│ │ ├── profile.go
│ │ ├── screen.go
│ │ ├── style.go
│ │ ├── templatehelper.go
│ │ ├── termenv.go
│ │ ├── termenv_other.go
│ │ ├── termenv_posix.go
│ │ ├── termenv_solaris.go
│ │ ├── termenv_unix.go
│ │ └── termenv_windows.go
│ ├── ncruces/
│ │ └── go-strftime/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── parser.go
│ │ ├── pkg.go
│ │ ├── specifiers.go
│ │ └── strftime.go
│ ├── remyoudompheng/
│ │ └── bigfft/
│ │ ├── LICENSE
│ │ ├── README
│ │ ├── arith_decl.go
│ │ ├── fermat.go
│ │ ├── fft.go
│ │ └── scan.go
│ ├── rivo/
│ │ └── uniseg/
│ │ ├── LICENSE.txt
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── eastasianwidth.go
│ │ ├── emojipresentation.go
│ │ ├── gen_breaktest.go
│ │ ├── gen_properties.go
│ │ ├── grapheme.go
│ │ ├── graphemeproperties.go
│ │ ├── graphemerules.go
│ │ ├── line.go
│ │ ├── lineproperties.go
│ │ ├── linerules.go
│ │ ├── properties.go
│ │ ├── sentence.go
│ │ ├── sentenceproperties.go
│ │ ├── sentencerules.go
│ │ ├── step.go
│ │ ├── width.go
│ │ ├── word.go
│ │ ├── wordproperties.go
│ │ └── wordrules.go
│ ├── spf13/
│ │ ├── cobra/
│ │ │ ├── .gitignore
│ │ │ ├── .golangci.yml
│ │ │ ├── .mailmap
│ │ │ ├── CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE.txt
│ │ │ ├── MAINTAINERS
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── SECURITY.md
│ │ │ ├── active_help.go
│ │ │ ├── args.go
│ │ │ ├── bash_completions.go
│ │ │ ├── bash_completionsV2.go
│ │ │ ├── cobra.go
│ │ │ ├── command.go
│ │ │ ├── command_notwin.go
│ │ │ ├── command_win.go
│ │ │ ├── completions.go
│ │ │ ├── fish_completions.go
│ │ │ ├── flag_groups.go
│ │ │ ├── powershell_completions.go
│ │ │ ├── shell_completions.go
│ │ │ └── zsh_completions.go
│ │ └── pflag/
│ │ ├── .editorconfig
│ │ ├── .gitignore
│ │ ├── .golangci.yaml
│ │ ├── .travis.yml
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── bool.go
│ │ ├── bool_func.go
│ │ ├── bool_slice.go
│ │ ├── bytes.go
│ │ ├── count.go
│ │ ├── duration.go
│ │ ├── duration_slice.go
│ │ ├── errors.go
│ │ ├── flag.go
│ │ ├── float32.go
│ │ ├── float32_slice.go
│ │ ├── float64.go
│ │ ├── float64_slice.go
│ │ ├── func.go
│ │ ├── golangflag.go
│ │ ├── int.go
│ │ ├── int16.go
│ │ ├── int32.go
│ │ ├── int32_slice.go
│ │ ├── int64.go
│ │ ├── int64_slice.go
│ │ ├── int8.go
│ │ ├── int_slice.go
│ │ ├── ip.go
│ │ ├── ip_slice.go
│ │ ├── ipmask.go
│ │ ├── ipnet.go
│ │ ├── ipnet_slice.go
│ │ ├── string.go
│ │ ├── string_array.go
│ │ ├── string_slice.go
│ │ ├── string_to_int.go
│ │ ├── string_to_int64.go
│ │ ├── string_to_string.go
│ │ ├── text.go
│ │ ├── time.go
│ │ ├── uint.go
│ │ ├── uint16.go
│ │ ├── uint32.go
│ │ ├── uint64.go
│ │ ├── uint8.go
│ │ └── uint_slice.go
│ ├── xo/
│ │ └── terminfo/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── caps.go
│ │ ├── capvals.go
│ │ ├── color.go
│ │ ├── dec.go
│ │ ├── load.go
│ │ ├── param.go
│ │ ├── stack.go
│ │ └── terminfo.go
│ └── yuin/
│ ├── goldmark/
│ │ ├── .gitignore
│ │ ├── .golangci.yml
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── ast/
│ │ │ ├── ast.go
│ │ │ ├── block.go
│ │ │ └── inline.go
│ │ ├── extension/
│ │ │ ├── ast/
│ │ │ │ ├── definition_list.go
│ │ │ │ ├── footnote.go
│ │ │ │ ├── strikethrough.go
│ │ │ │ ├── table.go
│ │ │ │ └── tasklist.go
│ │ │ ├── cjk.go
│ │ │ ├── definition_list.go
│ │ │ ├── footnote.go
│ │ │ ├── gfm.go
│ │ │ ├── linkify.go
│ │ │ ├── package.go
│ │ │ ├── strikethrough.go
│ │ │ ├── table.go
│ │ │ ├── tasklist.go
│ │ │ └── typographer.go
│ │ ├── markdown.go
│ │ ├── parser/
│ │ │ ├── attribute.go
│ │ │ ├── atx_heading.go
│ │ │ ├── auto_link.go
│ │ │ ├── blockquote.go
│ │ │ ├── code_block.go
│ │ │ ├── code_span.go
│ │ │ ├── delimiter.go
│ │ │ ├── emphasis.go
│ │ │ ├── fcode_block.go
│ │ │ ├── html_block.go
│ │ │ ├── link.go
│ │ │ ├── link_ref.go
│ │ │ ├── list.go
│ │ │ ├── list_item.go
│ │ │ ├── paragraph.go
│ │ │ ├── parser.go
│ │ │ ├── raw_html.go
│ │ │ ├── setext_headings.go
│ │ │ └── thematic_break.go
│ │ ├── renderer/
│ │ │ ├── html/
│ │ │ │ └── html.go
│ │ │ └── renderer.go
│ │ ├── text/
│ │ │ ├── package.go
│ │ │ ├── reader.go
│ │ │ └── segment.go
│ │ └── util/
│ │ ├── html5entities.gen.go
│ │ ├── html5entities.go
│ │ ├── unicode_case_folding.gen.go
│ │ ├── unicode_case_folding.go
│ │ ├── util.go
│ │ ├── util_cjk.go
│ │ ├── util_safe.go
│ │ ├── util_unsafe_go120.go
│ │ └── util_unsafe_go121.go
│ └── goldmark-emoji/
│ ├── .gitignore
│ ├── LICENSE
│ ├── README.md
│ ├── ast/
│ │ └── emoji.go
│ ├── definition/
│ │ ├── definition.go
│ │ ├── github.gen.go
│ │ └── github.go
│ └── emoji.go
├── golang.org/
│ └── x/
│ ├── image/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── draw/
│ │ │ ├── draw.go
│ │ │ ├── impl.go
│ │ │ └── scale.go
│ │ ├── font/
│ │ │ ├── basicfont/
│ │ │ │ ├── basicfont.go
│ │ │ │ └── data.go
│ │ │ ├── font.go
│ │ │ ├── opentype/
│ │ │ │ └── opentype.go
│ │ │ └── sfnt/
│ │ │ ├── cmap.go
│ │ │ ├── data.go
│ │ │ ├── gpos.go
│ │ │ ├── postscript.go
│ │ │ ├── sfnt.go
│ │ │ └── truetype.go
│ │ ├── math/
│ │ │ ├── f64/
│ │ │ │ └── f64.go
│ │ │ └── fixed/
│ │ │ └── fixed.go
│ │ └── vector/
│ │ ├── acc_amd64.go
│ │ ├── acc_amd64.s
│ │ ├── acc_other.go
│ │ ├── gen_acc_amd64.s.tmpl
│ │ ├── raster_fixed.go
│ │ ├── raster_floating.go
│ │ └── vector.go
│ ├── net/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ └── html/
│ │ ├── atom/
│ │ │ ├── atom.go
│ │ │ └── table.go
│ │ ├── const.go
│ │ ├── doc.go
│ │ ├── doctype.go
│ │ ├── entity.go
│ │ ├── escape.go
│ │ ├── foreign.go
│ │ ├── iter.go
│ │ ├── node.go
│ │ ├── nodetype_string.go
│ │ ├── parse.go
│ │ ├── render.go
│ │ └── token.go
│ ├── sync/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── errgroup/
│ │ │ └── errgroup.go
│ │ └── singleflight/
│ │ └── singleflight.go
│ ├── sys/
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── plan9/
│ │ │ ├── asm.s
│ │ │ ├── asm_plan9_386.s
│ │ │ ├── asm_plan9_amd64.s
│ │ │ ├── asm_plan9_arm.s
│ │ │ ├── const_plan9.go
│ │ │ ├── dir_plan9.go
│ │ │ ├── env_plan9.go
│ │ │ ├── errors_plan9.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mksysnum_plan9.sh
│ │ │ ├── pwd_plan9.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── str.go
│ │ │ ├── syscall.go
│ │ │ ├── syscall_plan9.go
│ │ │ ├── zsyscall_plan9_386.go
│ │ │ ├── zsyscall_plan9_amd64.go
│ │ │ ├── zsyscall_plan9_arm.go
│ │ │ └── zsysnum_plan9.go
│ │ ├── unix/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── affinity_linux.go
│ │ │ ├── aliases.go
│ │ │ ├── asm_aix_ppc64.s
│ │ │ ├── asm_bsd_386.s
│ │ │ ├── asm_bsd_amd64.s
│ │ │ ├── asm_bsd_arm.s
│ │ │ ├── asm_bsd_arm64.s
│ │ │ ├── asm_bsd_ppc64.s
│ │ │ ├── asm_bsd_riscv64.s
│ │ │ ├── asm_linux_386.s
│ │ │ ├── asm_linux_amd64.s
│ │ │ ├── asm_linux_arm.s
│ │ │ ├── asm_linux_arm64.s
│ │ │ ├── asm_linux_loong64.s
│ │ │ ├── asm_linux_mips64x.s
│ │ │ ├── asm_linux_mipsx.s
│ │ │ ├── asm_linux_ppc64x.s
│ │ │ ├── asm_linux_riscv64.s
│ │ │ ├── asm_linux_s390x.s
│ │ │ ├── asm_openbsd_mips64.s
│ │ │ ├── asm_solaris_amd64.s
│ │ │ ├── asm_zos_s390x.s
│ │ │ ├── auxv.go
│ │ │ ├── auxv_unsupported.go
│ │ │ ├── bluetooth_linux.go
│ │ │ ├── bpxsvc_zos.go
│ │ │ ├── bpxsvc_zos.s
│ │ │ ├── cap_freebsd.go
│ │ │ ├── constants.go
│ │ │ ├── dev_aix_ppc.go
│ │ │ ├── dev_aix_ppc64.go
│ │ │ ├── dev_darwin.go
│ │ │ ├── dev_dragonfly.go
│ │ │ ├── dev_freebsd.go
│ │ │ ├── dev_linux.go
│ │ │ ├── dev_netbsd.go
│ │ │ ├── dev_openbsd.go
│ │ │ ├── dev_zos.go
│ │ │ ├── dirent.go
│ │ │ ├── endian_big.go
│ │ │ ├── endian_little.go
│ │ │ ├── env_unix.go
│ │ │ ├── fcntl.go
│ │ │ ├── fcntl_darwin.go
│ │ │ ├── fcntl_linux_32bit.go
│ │ │ ├── fdset.go
│ │ │ ├── gccgo.go
│ │ │ ├── gccgo_c.c
│ │ │ ├── gccgo_linux_amd64.go
│ │ │ ├── ifreq_linux.go
│ │ │ ├── ioctl_linux.go
│ │ │ ├── ioctl_signed.go
│ │ │ ├── ioctl_unsigned.go
│ │ │ ├── ioctl_zos.go
│ │ │ ├── mkall.sh
│ │ │ ├── mkerrors.sh
│ │ │ ├── mmap_nomremap.go
│ │ │ ├── mremap.go
│ │ │ ├── pagesize_unix.go
│ │ │ ├── pledge_openbsd.go
│ │ │ ├── ptrace_darwin.go
│ │ │ ├── ptrace_ios.go
│ │ │ ├── race.go
│ │ │ ├── race0.go
│ │ │ ├── readdirent_getdents.go
│ │ │ ├── readdirent_getdirentries.go
│ │ │ ├── sockcmsg_dragonfly.go
│ │ │ ├── sockcmsg_linux.go
│ │ │ ├── sockcmsg_unix.go
│ │ │ ├── sockcmsg_unix_other.go
│ │ │ ├── sockcmsg_zos.go
│ │ │ ├── symaddr_zos_s390x.s
│ │ │ ├── syscall.go
│ │ │ ├── syscall_aix.go
│ │ │ ├── syscall_aix_ppc.go
│ │ │ ├── syscall_aix_ppc64.go
│ │ │ ├── syscall_bsd.go
│ │ │ ├── syscall_darwin.go
│ │ │ ├── syscall_darwin_amd64.go
│ │ │ ├── syscall_darwin_arm64.go
│ │ │ ├── syscall_darwin_libSystem.go
│ │ │ ├── syscall_dragonfly.go
│ │ │ ├── syscall_dragonfly_amd64.go
│ │ │ ├── syscall_freebsd.go
│ │ │ ├── syscall_freebsd_386.go
│ │ │ ├── syscall_freebsd_amd64.go
│ │ │ ├── syscall_freebsd_arm.go
│ │ │ ├── syscall_freebsd_arm64.go
│ │ │ ├── syscall_freebsd_riscv64.go
│ │ │ ├── syscall_hurd.go
│ │ │ ├── syscall_hurd_386.go
│ │ │ ├── syscall_illumos.go
│ │ │ ├── syscall_linux.go
│ │ │ ├── syscall_linux_386.go
│ │ │ ├── syscall_linux_alarm.go
│ │ │ ├── syscall_linux_amd64.go
│ │ │ ├── syscall_linux_amd64_gc.go
│ │ │ ├── syscall_linux_arm.go
│ │ │ ├── syscall_linux_arm64.go
│ │ │ ├── syscall_linux_gc.go
│ │ │ ├── syscall_linux_gc_386.go
│ │ │ ├── syscall_linux_gc_arm.go
│ │ │ ├── syscall_linux_gccgo_386.go
│ │ │ ├── syscall_linux_gccgo_arm.go
│ │ │ ├── syscall_linux_loong64.go
│ │ │ ├── syscall_linux_mips64x.go
│ │ │ ├── syscall_linux_mipsx.go
│ │ │ ├── syscall_linux_ppc.go
│ │ │ ├── syscall_linux_ppc64x.go
│ │ │ ├── syscall_linux_riscv64.go
│ │ │ ├── syscall_linux_s390x.go
│ │ │ ├── syscall_linux_sparc64.go
│ │ │ ├── syscall_netbsd.go
│ │ │ ├── syscall_netbsd_386.go
│ │ │ ├── syscall_netbsd_amd64.go
│ │ │ ├── syscall_netbsd_arm.go
│ │ │ ├── syscall_netbsd_arm64.go
│ │ │ ├── syscall_openbsd.go
│ │ │ ├── syscall_openbsd_386.go
│ │ │ ├── syscall_openbsd_amd64.go
│ │ │ ├── syscall_openbsd_arm.go
│ │ │ ├── syscall_openbsd_arm64.go
│ │ │ ├── syscall_openbsd_libc.go
│ │ │ ├── syscall_openbsd_mips64.go
│ │ │ ├── syscall_openbsd_ppc64.go
│ │ │ ├── syscall_openbsd_riscv64.go
│ │ │ ├── syscall_solaris.go
│ │ │ ├── syscall_solaris_amd64.go
│ │ │ ├── syscall_unix.go
│ │ │ ├── syscall_unix_gc.go
│ │ │ ├── syscall_unix_gc_ppc64x.go
│ │ │ ├── syscall_zos_s390x.go
│ │ │ ├── sysvshm_linux.go
│ │ │ ├── sysvshm_unix.go
│ │ │ ├── sysvshm_unix_other.go
│ │ │ ├── timestruct.go
│ │ │ ├── unveil_openbsd.go
│ │ │ ├── vgetrandom_linux.go
│ │ │ ├── vgetrandom_unsupported.go
│ │ │ ├── xattr_bsd.go
│ │ │ ├── zerrors_aix_ppc.go
│ │ │ ├── zerrors_aix_ppc64.go
│ │ │ ├── zerrors_darwin_amd64.go
│ │ │ ├── zerrors_darwin_arm64.go
│ │ │ ├── zerrors_dragonfly_amd64.go
│ │ │ ├── zerrors_freebsd_386.go
│ │ │ ├── zerrors_freebsd_amd64.go
│ │ │ ├── zerrors_freebsd_arm.go
│ │ │ ├── zerrors_freebsd_arm64.go
│ │ │ ├── zerrors_freebsd_riscv64.go
│ │ │ ├── zerrors_linux.go
│ │ │ ├── zerrors_linux_386.go
│ │ │ ├── zerrors_linux_amd64.go
│ │ │ ├── zerrors_linux_arm.go
│ │ │ ├── zerrors_linux_arm64.go
│ │ │ ├── zerrors_linux_loong64.go
│ │ │ ├── zerrors_linux_mips.go
│ │ │ ├── zerrors_linux_mips64.go
│ │ │ ├── zerrors_linux_mips64le.go
│ │ │ ├── zerrors_linux_mipsle.go
│ │ │ ├── zerrors_linux_ppc.go
│ │ │ ├── zerrors_linux_ppc64.go
│ │ │ ├── zerrors_linux_ppc64le.go
│ │ │ ├── zerrors_linux_riscv64.go
│ │ │ ├── zerrors_linux_s390x.go
│ │ │ ├── zerrors_linux_sparc64.go
│ │ │ ├── zerrors_netbsd_386.go
│ │ │ ├── zerrors_netbsd_amd64.go
│ │ │ ├── zerrors_netbsd_arm.go
│ │ │ ├── zerrors_netbsd_arm64.go
│ │ │ ├── zerrors_openbsd_386.go
│ │ │ ├── zerrors_openbsd_amd64.go
│ │ │ ├── zerrors_openbsd_arm.go
│ │ │ ├── zerrors_openbsd_arm64.go
│ │ │ ├── zerrors_openbsd_mips64.go
│ │ │ ├── zerrors_openbsd_ppc64.go
│ │ │ ├── zerrors_openbsd_riscv64.go
│ │ │ ├── zerrors_solaris_amd64.go
│ │ │ ├── zerrors_zos_s390x.go
│ │ │ ├── zptrace_armnn_linux.go
│ │ │ ├── zptrace_linux_arm64.go
│ │ │ ├── zptrace_mipsnn_linux.go
│ │ │ ├── zptrace_mipsnnle_linux.go
│ │ │ ├── zptrace_x86_linux.go
│ │ │ ├── zsymaddr_zos_s390x.s
│ │ │ ├── zsyscall_aix_ppc.go
│ │ │ ├── zsyscall_aix_ppc64.go
│ │ │ ├── zsyscall_aix_ppc64_gc.go
│ │ │ ├── zsyscall_aix_ppc64_gccgo.go
│ │ │ ├── zsyscall_darwin_amd64.go
│ │ │ ├── zsyscall_darwin_amd64.s
│ │ │ ├── zsyscall_darwin_arm64.go
│ │ │ ├── zsyscall_darwin_arm64.s
│ │ │ ├── zsyscall_dragonfly_amd64.go
│ │ │ ├── zsyscall_freebsd_386.go
│ │ │ ├── zsyscall_freebsd_amd64.go
│ │ │ ├── zsyscall_freebsd_arm.go
│ │ │ ├── zsyscall_freebsd_arm64.go
│ │ │ ├── zsyscall_freebsd_riscv64.go
│ │ │ ├── zsyscall_illumos_amd64.go
│ │ │ ├── zsyscall_linux.go
│ │ │ ├── zsyscall_linux_386.go
│ │ │ ├── zsyscall_linux_amd64.go
│ │ │ ├── zsyscall_linux_arm.go
│ │ │ ├── zsyscall_linux_arm64.go
│ │ │ ├── zsyscall_linux_loong64.go
│ │ │ ├── zsyscall_linux_mips.go
│ │ │ ├── zsyscall_linux_mips64.go
│ │ │ ├── zsyscall_linux_mips64le.go
│ │ │ ├── zsyscall_linux_mipsle.go
│ │ │ ├── zsyscall_linux_ppc.go
│ │ │ ├── zsyscall_linux_ppc64.go
│ │ │ ├── zsyscall_linux_ppc64le.go
│ │ │ ├── zsyscall_linux_riscv64.go
│ │ │ ├── zsyscall_linux_s390x.go
│ │ │ ├── zsyscall_linux_sparc64.go
│ │ │ ├── zsyscall_netbsd_386.go
│ │ │ ├── zsyscall_netbsd_amd64.go
│ │ │ ├── zsyscall_netbsd_arm.go
│ │ │ ├── zsyscall_netbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_386.go
│ │ │ ├── zsyscall_openbsd_386.s
│ │ │ ├── zsyscall_openbsd_amd64.go
│ │ │ ├── zsyscall_openbsd_amd64.s
│ │ │ ├── zsyscall_openbsd_arm.go
│ │ │ ├── zsyscall_openbsd_arm.s
│ │ │ ├── zsyscall_openbsd_arm64.go
│ │ │ ├── zsyscall_openbsd_arm64.s
│ │ │ ├── zsyscall_openbsd_mips64.go
│ │ │ ├── zsyscall_openbsd_mips64.s
│ │ │ ├── zsyscall_openbsd_ppc64.go
│ │ │ ├── zsyscall_openbsd_ppc64.s
│ │ │ ├── zsyscall_openbsd_riscv64.go
│ │ │ ├── zsyscall_openbsd_riscv64.s
│ │ │ ├── zsyscall_solaris_amd64.go
│ │ │ ├── zsyscall_zos_s390x.go
│ │ │ ├── zsysctl_openbsd_386.go
│ │ │ ├── zsysctl_openbsd_amd64.go
│ │ │ ├── zsysctl_openbsd_arm.go
│ │ │ ├── zsysctl_openbsd_arm64.go
│ │ │ ├── zsysctl_openbsd_mips64.go
│ │ │ ├── zsysctl_openbsd_ppc64.go
│ │ │ ├── zsysctl_openbsd_riscv64.go
│ │ │ ├── zsysnum_darwin_amd64.go
│ │ │ ├── zsysnum_darwin_arm64.go
│ │ │ ├── zsysnum_dragonfly_amd64.go
│ │ │ ├── zsysnum_freebsd_386.go
│ │ │ ├── zsysnum_freebsd_amd64.go
│ │ │ ├── zsysnum_freebsd_arm.go
│ │ │ ├── zsysnum_freebsd_arm64.go
│ │ │ ├── zsysnum_freebsd_riscv64.go
│ │ │ ├── zsysnum_linux_386.go
│ │ │ ├── zsysnum_linux_amd64.go
│ │ │ ├── zsysnum_linux_arm.go
│ │ │ ├── zsysnum_linux_arm64.go
│ │ │ ├── zsysnum_linux_loong64.go
│ │ │ ├── zsysnum_linux_mips.go
│ │ │ ├── zsysnum_linux_mips64.go
│ │ │ ├── zsysnum_linux_mips64le.go
│ │ │ ├── zsysnum_linux_mipsle.go
│ │ │ ├── zsysnum_linux_ppc.go
│ │ │ ├── zsysnum_linux_ppc64.go
│ │ │ ├── zsysnum_linux_ppc64le.go
│ │ │ ├── zsysnum_linux_riscv64.go
│ │ │ ├── zsysnum_linux_s390x.go
│ │ │ ├── zsysnum_linux_sparc64.go
│ │ │ ├── zsysnum_netbsd_386.go
│ │ │ ├── zsysnum_netbsd_amd64.go
│ │ │ ├── zsysnum_netbsd_arm.go
│ │ │ ├── zsysnum_netbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_386.go
│ │ │ ├── zsysnum_openbsd_amd64.go
│ │ │ ├── zsysnum_openbsd_arm.go
│ │ │ ├── zsysnum_openbsd_arm64.go
│ │ │ ├── zsysnum_openbsd_mips64.go
│ │ │ ├── zsysnum_openbsd_ppc64.go
│ │ │ ├── zsysnum_openbsd_riscv64.go
│ │ │ ├── zsysnum_zos_s390x.go
│ │ │ ├── ztypes_aix_ppc.go
│ │ │ ├── ztypes_aix_ppc64.go
│ │ │ ├── ztypes_darwin_amd64.go
│ │ │ ├── ztypes_darwin_arm64.go
│ │ │ ├── ztypes_dragonfly_amd64.go
│ │ │ ├── ztypes_freebsd_386.go
│ │ │ ├── ztypes_freebsd_amd64.go
│ │ │ ├── ztypes_freebsd_arm.go
│ │ │ ├── ztypes_freebsd_arm64.go
│ │ │ ├── ztypes_freebsd_riscv64.go
│ │ │ ├── ztypes_linux.go
│ │ │ ├── ztypes_linux_386.go
│ │ │ ├── ztypes_linux_amd64.go
│ │ │ ├── ztypes_linux_arm.go
│ │ │ ├── ztypes_linux_arm64.go
│ │ │ ├── ztypes_linux_loong64.go
│ │ │ ├── ztypes_linux_mips.go
│ │ │ ├── ztypes_linux_mips64.go
│ │ │ ├── ztypes_linux_mips64le.go
│ │ │ ├── ztypes_linux_mipsle.go
│ │ │ ├── ztypes_linux_ppc.go
│ │ │ ├── ztypes_linux_ppc64.go
│ │ │ ├── ztypes_linux_ppc64le.go
│ │ │ ├── ztypes_linux_riscv64.go
│ │ │ ├── ztypes_linux_s390x.go
│ │ │ ├── ztypes_linux_sparc64.go
│ │ │ ├── ztypes_netbsd_386.go
│ │ │ ├── ztypes_netbsd_amd64.go
│ │ │ ├── ztypes_netbsd_arm.go
│ │ │ ├── ztypes_netbsd_arm64.go
│ │ │ ├── ztypes_openbsd_386.go
│ │ │ ├── ztypes_openbsd_amd64.go
│ │ │ ├── ztypes_openbsd_arm.go
│ │ │ ├── ztypes_openbsd_arm64.go
│ │ │ ├── ztypes_openbsd_mips64.go
│ │ │ ├── ztypes_openbsd_ppc64.go
│ │ │ ├── ztypes_openbsd_riscv64.go
│ │ │ ├── ztypes_solaris_amd64.go
│ │ │ └── ztypes_zos_s390x.go
│ │ └── windows/
│ │ ├── aliases.go
│ │ ├── dll_windows.go
│ │ ├── env_windows.go
│ │ ├── eventlog.go
│ │ ├── exec_windows.go
│ │ ├── memory_windows.go
│ │ ├── mkerrors.bash
│ │ ├── mkknownfolderids.bash
│ │ ├── mksyscall.go
│ │ ├── race.go
│ │ ├── race0.go
│ │ ├── security_windows.go
│ │ ├── service.go
│ │ ├── setupapi_windows.go
│ │ ├── str.go
│ │ ├── syscall.go
│ │ ├── syscall_windows.go
│ │ ├── types_windows.go
│ │ ├── types_windows_386.go
│ │ ├── types_windows_amd64.go
│ │ ├── types_windows_arm.go
│ │ ├── types_windows_arm64.go
│ │ ├── zerrors_windows.go
│ │ ├── zknownfolderids_windows.go
│ │ └── zsyscall_windows.go
│ ├── term/
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── PATENTS
│ │ ├── README.md
│ │ ├── codereview.cfg
│ │ ├── term.go
│ │ ├── term_plan9.go
│ │ ├── term_unix.go
│ │ ├── term_unix_bsd.go
│ │ ├── term_unix_other.go
│ │ ├── term_unsupported.go
│ │ ├── term_windows.go
│ │ └── terminal.go
│ └── text/
│ ├── LICENSE
│ ├── PATENTS
│ ├── cases/
│ │ ├── cases.go
│ │ ├── context.go
│ │ ├── fold.go
│ │ ├── icu.go
│ │ ├── info.go
│ │ ├── map.go
│ │ ├── tables15.0.0.go
│ │ ├── tables17.0.0.go
│ │ └── trieval.go
│ ├── encoding/
│ │ ├── charmap/
│ │ │ ├── charmap.go
│ │ │ └── tables.go
│ │ ├── encoding.go
│ │ └── internal/
│ │ ├── identifier/
│ │ │ ├── identifier.go
│ │ │ └── mib.go
│ │ └── internal.go
│ ├── internal/
│ │ ├── internal.go
│ │ ├── language/
│ │ │ ├── common.go
│ │ │ ├── compact/
│ │ │ │ ├── compact.go
│ │ │ │ ├── language.go
│ │ │ │ ├── parents.go
│ │ │ │ ├── tables.go
│ │ │ │ └── tags.go
│ │ │ ├── compact.go
│ │ │ ├── compose.go
│ │ │ ├── coverage.go
│ │ │ ├── language.go
│ │ │ ├── lookup.go
│ │ │ ├── match.go
│ │ │ ├── parse.go
│ │ │ ├── tables.go
│ │ │ └── tags.go
│ │ ├── match.go
│ │ └── tag/
│ │ └── tag.go
│ ├── language/
│ │ ├── coverage.go
│ │ ├── doc.go
│ │ ├── language.go
│ │ ├── match.go
│ │ ├── parse.go
│ │ ├── tables.go
│ │ └── tags.go
│ ├── transform/
│ │ └── transform.go
│ └── unicode/
│ └── norm/
│ ├── composition.go
│ ├── forminfo.go
│ ├── input.go
│ ├── iter.go
│ ├── normalize.go
│ ├── readwriter.go
│ ├── tables15.0.0.go
│ ├── tables17.0.0.go
│ ├── transform.go
│ └── trie.go
├── gonum.org/
│ └── v1/
│ └── gonum/
│ ├── AUTHORS
│ ├── CONTRIBUTORS
│ ├── LICENSE
│ ├── blas/
│ │ ├── README.md
│ │ ├── blas.go
│ │ ├── blas64/
│ │ │ ├── blas64.go
│ │ │ ├── conv.go
│ │ │ ├── conv_symmetric.go
│ │ │ └── doc.go
│ │ ├── cblas128/
│ │ │ ├── cblas128.go
│ │ │ ├── conv.go
│ │ │ ├── conv_hermitian.go
│ │ │ ├── conv_symmetric.go
│ │ │ └── doc.go
│ │ ├── conversions.bash
│ │ ├── doc.go
│ │ └── gonum/
│ │ ├── dgemm.go
│ │ ├── doc.go
│ │ ├── errors.go
│ │ ├── gonum.go
│ │ ├── level1cmplx128.go
│ │ ├── level1cmplx64.go
│ │ ├── level1float32.go
│ │ ├── level1float32_dsdot.go
│ │ ├── level1float32_sdot.go
│ │ ├── level1float32_sdsdot.go
│ │ ├── level1float64.go
│ │ ├── level1float64_ddot.go
│ │ ├── level2cmplx128.go
│ │ ├── level2cmplx64.go
│ │ ├── level2float32.go
│ │ ├── level2float64.go
│ │ ├── level3cmplx128.go
│ │ ├── level3cmplx64.go
│ │ ├── level3float32.go
│ │ ├── level3float64.go
│ │ ├── sgemm.go
│ │ └── single_precision.bash
│ ├── floats/
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── floats.go
│ │ └── scalar/
│ │ ├── doc.go
│ │ └── scalar.go
│ ├── graph/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── complement.go
│ │ ├── doc.go
│ │ ├── graph.go
│ │ ├── internal/
│ │ │ ├── linear/
│ │ │ │ ├── doc.go
│ │ │ │ └── linear.go
│ │ │ └── set/
│ │ │ ├── doc.go
│ │ │ ├── same.go
│ │ │ ├── same_appengine.go
│ │ │ └── set.go
│ │ ├── iterator/
│ │ │ ├── doc.go
│ │ │ ├── edges.go
│ │ │ ├── hiter_noswiss.go
│ │ │ ├── hiter_swiss.go
│ │ │ ├── lines.go
│ │ │ ├── lines_map.go
│ │ │ ├── lines_map_safe.go
│ │ │ ├── map.go
│ │ │ ├── map.s
│ │ │ ├── nodes.go
│ │ │ ├── nodes_map.go
│ │ │ └── nodes_map_safe.go
│ │ ├── multigraph.go
│ │ ├── network/
│ │ │ ├── betweenness.go
│ │ │ ├── diffusion.go
│ │ │ ├── distance.go
│ │ │ ├── doc.go
│ │ │ ├── hits.go
│ │ │ ├── maximum_flow.go
│ │ │ ├── network.go
│ │ │ └── page.go
│ │ ├── nodes_edges.go
│ │ ├── path/
│ │ │ ├── a_star.go
│ │ │ ├── bellman_ford_moore.go
│ │ │ ├── dijkstra.go
│ │ │ ├── disjoint.go
│ │ │ ├── doc.go
│ │ │ ├── floydwarshall.go
│ │ │ ├── johnson_apsp.go
│ │ │ ├── shortest.go
│ │ │ ├── spanning_tree.go
│ │ │ ├── weight.go
│ │ │ └── yen_ksp.go
│ │ ├── set/
│ │ │ └── uid/
│ │ │ └── uid.go
│ │ ├── simple/
│ │ │ ├── dense_directed_matrix.go
│ │ │ ├── dense_undirected_matrix.go
│ │ │ ├── directed.go
│ │ │ ├── doc.go
│ │ │ ├── simple.go
│ │ │ ├── undirected.go
│ │ │ ├── weighted_directed.go
│ │ │ └── weighted_undirected.go
│ │ ├── spectral/
│ │ │ ├── doc.go
│ │ │ └── laplacian.go
│ │ ├── topo/
│ │ │ ├── bron_kerbosch.go
│ │ │ ├── clique_graph.go
│ │ │ ├── doc.go
│ │ │ ├── johnson_cycles.go
│ │ │ ├── non_tomita_choice.go
│ │ │ ├── paton_cycles.go
│ │ │ ├── tarjan.go
│ │ │ ├── tomita_choice.go
│ │ │ └── topo.go
│ │ ├── traverse/
│ │ │ ├── doc.go
│ │ │ └── traverse.go
│ │ └── undirect.go
│ ├── internal/
│ │ ├── asm/
│ │ │ ├── c128/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotcinc_amd64.s
│ │ │ │ ├── dotcunitary_amd64.s
│ │ │ │ ├── dotuinc_amd64.s
│ │ │ │ ├── dotuunitary_amd64.s
│ │ │ │ ├── dscalinc_amd64.s
│ │ │ │ ├── dscalunitary_amd64.s
│ │ │ │ ├── scal.go
│ │ │ │ ├── scalUnitary_amd64.s
│ │ │ │ ├── scalinc_amd64.s
│ │ │ │ ├── stubs.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ └── stubs_noasm.go
│ │ │ ├── c64/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── conj.go
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotcinc_amd64.s
│ │ │ │ ├── dotcunitary_amd64.s
│ │ │ │ ├── dotuinc_amd64.s
│ │ │ │ ├── dotuunitary_amd64.s
│ │ │ │ ├── scal.go
│ │ │ │ ├── stubs.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ └── stubs_noasm.go
│ │ │ ├── f32/
│ │ │ │ ├── axpyinc_amd64.s
│ │ │ │ ├── axpyincto_amd64.s
│ │ │ │ ├── axpyunitary_amd64.s
│ │ │ │ ├── axpyunitaryto_amd64.s
│ │ │ │ ├── ddotinc_amd64.s
│ │ │ │ ├── ddotunitary_amd64.s
│ │ │ │ ├── doc.go
│ │ │ │ ├── dotinc_amd64.s
│ │ │ │ ├── dotunitary_amd64.s
│ │ │ │ ├── ge_amd64.go
│ │ │ │ ├── ge_amd64.s
│ │ │ │ ├── ge_noasm.go
│ │ │ │ ├── gemv.go
│ │ │ │ ├── l2norm.go
│ │ │ │ ├── scal.go
│ │ │ │ ├── stubs_amd64.go
│ │ │ │ ├── stubs_noasm.go
│ │ │ │ └── sum_amd64.s
│ │ │ └── f64/
│ │ │ ├── abssum_amd64.s
│ │ │ ├── abssuminc_amd64.s
│ │ │ ├── add_amd64.s
│ │ │ ├── addconst_amd64.s
│ │ │ ├── axpy.go
│ │ │ ├── axpyinc_amd64.s
│ │ │ ├── axpyincto_amd64.s
│ │ │ ├── axpyunitary_amd64.s
│ │ │ ├── axpyunitaryto_amd64.s
│ │ │ ├── cumprod_amd64.s
│ │ │ ├── cumsum_amd64.s
│ │ │ ├── div_amd64.s
│ │ │ ├── divto_amd64.s
│ │ │ ├── doc.go
│ │ │ ├── dot.go
│ │ │ ├── dot_amd64.s
│ │ │ ├── ge_amd64.go
│ │ │ ├── ge_noasm.go
│ │ │ ├── gemvN_amd64.s
│ │ │ ├── gemvT_amd64.s
│ │ │ ├── ger_amd64.s
│ │ │ ├── l1norm_amd64.s
│ │ │ ├── l2norm_amd64.s
│ │ │ ├── l2norm_noasm.go
│ │ │ ├── l2normdist_amd64.s
│ │ │ ├── l2norminc_amd64.s
│ │ │ ├── linfnorm_amd64.s
│ │ │ ├── scal.go
│ │ │ ├── scalinc_amd64.s
│ │ │ ├── scalincto_amd64.s
│ │ │ ├── scalunitary_amd64.s
│ │ │ ├── scalunitaryto_amd64.s
│ │ │ ├── stubs_amd64.go
│ │ │ ├── stubs_noasm.go
│ │ │ └── sum_amd64.s
│ │ ├── cmplx64/
│ │ │ ├── abs.go
│ │ │ ├── conj.go
│ │ │ ├── doc.go
│ │ │ ├── isinf.go
│ │ │ ├── isnan.go
│ │ │ └── sqrt.go
│ │ ├── math32/
│ │ │ ├── doc.go
│ │ │ ├── math.go
│ │ │ ├── signbit.go
│ │ │ ├── sqrt.go
│ │ │ ├── sqrt_amd64.go
│ │ │ ├── sqrt_amd64.s
│ │ │ ├── sqrt_arm64.go
│ │ │ └── sqrt_arm64.s
│ │ └── order/
│ │ ├── doc.go
│ │ └── order.go
│ ├── lapack/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── doc.go
│ │ ├── gonum/
│ │ │ ├── dbdsqr.go
│ │ │ ├── dgebak.go
│ │ │ ├── dgebal.go
│ │ │ ├── dgebd2.go
│ │ │ ├── dgebrd.go
│ │ │ ├── dgecon.go
│ │ │ ├── dgeev.go
│ │ │ ├── dgehd2.go
│ │ │ ├── dgehrd.go
│ │ │ ├── dgelq2.go
│ │ │ ├── dgelqf.go
│ │ │ ├── dgels.go
│ │ │ ├── dgeql2.go
│ │ │ ├── dgeqp3.go
│ │ │ ├── dgeqr2.go
│ │ │ ├── dgeqrf.go
│ │ │ ├── dgerq2.go
│ │ │ ├── dgerqf.go
│ │ │ ├── dgesc2.go
│ │ │ ├── dgesv.go
│ │ │ ├── dgesvd.go
│ │ │ ├── dgetc2.go
│ │ │ ├── dgetf2.go
│ │ │ ├── dgetrf.go
│ │ │ ├── dgetri.go
│ │ │ ├── dgetrs.go
│ │ │ ├── dgghrd.go
│ │ │ ├── dggsvd3.go
│ │ │ ├── dggsvp3.go
│ │ │ ├── dgtsv.go
│ │ │ ├── dhseqr.go
│ │ │ ├── dlabrd.go
│ │ │ ├── dlacn2.go
│ │ │ ├── dlacpy.go
│ │ │ ├── dlae2.go
│ │ │ ├── dlaev2.go
│ │ │ ├── dlaexc.go
│ │ │ ├── dlag2.go
│ │ │ ├── dlags2.go
│ │ │ ├── dlagtm.go
│ │ │ ├── dlahqr.go
│ │ │ ├── dlahr2.go
│ │ │ ├── dlaln2.go
│ │ │ ├── dlangb.go
│ │ │ ├── dlange.go
│ │ │ ├── dlangt.go
│ │ │ ├── dlanhs.go
│ │ │ ├── dlansb.go
│ │ │ ├── dlanst.go
│ │ │ ├── dlansy.go
│ │ │ ├── dlantb.go
│ │ │ ├── dlantr.go
│ │ │ ├── dlanv2.go
│ │ │ ├── dlapll.go
│ │ │ ├── dlapmr.go
│ │ │ ├── dlapmt.go
│ │ │ ├── dlapy2.go
│ │ │ ├── dlaqp2.go
│ │ │ ├── dlaqps.go
│ │ │ ├── dlaqr04.go
│ │ │ ├── dlaqr1.go
│ │ │ ├── dlaqr23.go
│ │ │ ├── dlaqr5.go
│ │ │ ├── dlarf.go
│ │ │ ├── dlarfb.go
│ │ │ ├── dlarfg.go
│ │ │ ├── dlarft.go
│ │ │ ├── dlarfx.go
│ │ │ ├── dlartg.go
│ │ │ ├── dlas2.go
│ │ │ ├── dlascl.go
│ │ │ ├── dlaset.go
│ │ │ ├── dlasq1.go
│ │ │ ├── dlasq2.go
│ │ │ ├── dlasq3.go
│ │ │ ├── dlasq4.go
│ │ │ ├── dlasq5.go
│ │ │ ├── dlasq6.go
│ │ │ ├── dlasr.go
│ │ │ ├── dlasrt.go
│ │ │ ├── dlassq.go
│ │ │ ├── dlasv2.go
│ │ │ ├── dlaswp.go
│ │ │ ├── dlasy2.go
│ │ │ ├── dlatbs.go
│ │ │ ├── dlatdf.go
│ │ │ ├── dlatrd.go
│ │ │ ├── dlatrs.go
│ │ │ ├── dlauu2.go
│ │ │ ├── dlauum.go
│ │ │ ├── doc.go
│ │ │ ├── dorg2l.go
│ │ │ ├── dorg2r.go
│ │ │ ├── dorgbr.go
│ │ │ ├── dorghr.go
│ │ │ ├── dorgl2.go
│ │ │ ├── dorglq.go
│ │ │ ├── dorgql.go
│ │ │ ├── dorgqr.go
│ │ │ ├── dorgr2.go
│ │ │ ├── dorgtr.go
│ │ │ ├── dorm2r.go
│ │ │ ├── dormbr.go
│ │ │ ├── dormhr.go
│ │ │ ├── dorml2.go
│ │ │ ├── dormlq.go
│ │ │ ├── dormqr.go
│ │ │ ├── dormr2.go
│ │ │ ├── dpbcon.go
│ │ │ ├── dpbtf2.go
│ │ │ ├── dpbtrf.go
│ │ │ ├── dpbtrs.go
│ │ │ ├── dpocon.go
│ │ │ ├── dpotf2.go
│ │ │ ├── dpotrf.go
│ │ │ ├── dpotri.go
│ │ │ ├── dpotrs.go
│ │ │ ├── dpstf2.go
│ │ │ ├── dpstrf.go
│ │ │ ├── dptcon.go
│ │ │ ├── dptsv.go
│ │ │ ├── dpttrf.go
│ │ │ ├── dpttrs.go
│ │ │ ├── dptts2.go
│ │ │ ├── drscl.go
│ │ │ ├── dsteqr.go
│ │ │ ├── dsterf.go
│ │ │ ├── dsyev.go
│ │ │ ├── dsytd2.go
│ │ │ ├── dsytrd.go
│ │ │ ├── dtbtrs.go
│ │ │ ├── dtgsja.go
│ │ │ ├── dtrcon.go
│ │ │ ├── dtrevc3.go
│ │ │ ├── dtrexc.go
│ │ │ ├── dtrti2.go
│ │ │ ├── dtrtri.go
│ │ │ ├── dtrtrs.go
│ │ │ ├── errors.go
│ │ │ ├── iladlc.go
│ │ │ ├── iladlr.go
│ │ │ ├── ilaenv.go
│ │ │ ├── iparmq.go
│ │ │ └── lapack.go
│ │ ├── lapack.go
│ │ └── lapack64/
│ │ ├── doc.go
│ │ └── lapack64.go
│ └── mat/
│ ├── README.md
│ ├── band.go
│ ├── cdense.go
│ ├── cholesky.go
│ ├── cmatrix.go
│ ├── consts.go
│ ├── dense.go
│ ├── dense_arithmetic.go
│ ├── diagonal.go
│ ├── doc.go
│ ├── eigen.go
│ ├── errors.go
│ ├── format.go
│ ├── gsvd.go
│ ├── hogsvd.go
│ ├── index_bound_checks.go
│ ├── index_no_bound_checks.go
│ ├── inner.go
│ ├── io.go
│ ├── lq.go
│ ├── lu.go
│ ├── matrix.go
│ ├── offset.go
│ ├── offset_appengine.go
│ ├── pool.go
│ ├── product.go
│ ├── qr.go
│ ├── shadow.go
│ ├── shadow_common.go
│ ├── shadow_complex.go
│ ├── solve.go
│ ├── svd.go
│ ├── symband.go
│ ├── symmetric.go
│ ├── triangular.go
│ ├── triband.go
│ ├── tridiag.go
│ └── vector.go
├── gopkg.in/
│ └── yaml.v3/
│ ├── LICENSE
│ ├── NOTICE
│ ├── README.md
│ ├── apic.go
│ ├── decode.go
│ ├── emitterc.go
│ ├── encode.go
│ ├── parserc.go
│ ├── readerc.go
│ ├── resolve.go
│ ├── scannerc.go
│ ├── sorter.go
│ ├── writerc.go
│ ├── yaml.go
│ ├── yamlh.go
│ └── yamlprivateh.go
├── modernc.org/
│ ├── libc/
│ │ ├── .gitignore
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTING.md
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── LICENSE-3RD-PARTY.md
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── abi0_linux_amd64.go
│ │ ├── abi0_linux_amd64.s
│ │ ├── aliases.go
│ │ ├── asm_386.s
│ │ ├── atomic.go
│ │ ├── atomic32.go
│ │ ├── atomic64.go
│ │ ├── build_all_targets.sh
│ │ ├── builder.json
│ │ ├── builtin.go
│ │ ├── builtin32.go
│ │ ├── builtin64.go
│ │ ├── builtin_all.go
│ │ ├── capi_darwin_amd64.go
│ │ ├── capi_darwin_arm64.go
│ │ ├── capi_freebsd_386.go
│ │ ├── capi_freebsd_amd64.go
│ │ ├── capi_freebsd_arm.go
│ │ ├── capi_freebsd_arm64.go
│ │ ├── capi_illumos_amd64.go
│ │ ├── capi_linux_386.go
│ │ ├── capi_linux_amd64.go
│ │ ├── capi_linux_arm.go
│ │ ├── capi_linux_arm64.go
│ │ ├── capi_linux_loong64.go
│ │ ├── capi_linux_mips64le.go
│ │ ├── capi_linux_ppc64le.go
│ │ ├── capi_linux_riscv64.go
│ │ ├── capi_linux_s390x.go
│ │ ├── capi_netbsd_amd64.go
│ │ ├── capi_netbsd_arm.go
│ │ ├── capi_openbsd_386.go
│ │ ├── capi_openbsd_amd64.go
│ │ ├── capi_openbsd_arm64.go
│ │ ├── capi_windows_386.go
│ │ ├── capi_windows_amd64.go
│ │ ├── capi_windows_arm64.go
│ │ ├── ccgo.go
│ │ ├── ccgo_linux_386.go
│ │ ├── ccgo_linux_amd64.go
│ │ ├── ccgo_linux_arm.go
│ │ ├── ccgo_linux_arm64.go
│ │ ├── ccgo_linux_loong64.go
│ │ ├── ccgo_linux_ppc64le.go
│ │ ├── ccgo_linux_riscv64.go
│ │ ├── ccgo_linux_s390x.go
│ │ ├── dmesg.go
│ │ ├── errno/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── errno_darwin_amd64.go
│ │ │ ├── errno_darwin_arm64.go
│ │ │ ├── errno_freebsd_386.go
│ │ │ ├── errno_freebsd_amd64.go
│ │ │ ├── errno_freebsd_arm.go
│ │ │ ├── errno_freebsd_arm64.go
│ │ │ ├── errno_illumos_amd64.go
│ │ │ ├── errno_linux_386.go
│ │ │ ├── errno_linux_amd64.go
│ │ │ ├── errno_linux_arm.go
│ │ │ ├── errno_linux_arm64.go
│ │ │ ├── errno_linux_loong64.go
│ │ │ ├── errno_linux_mips64le.go
│ │ │ ├── errno_linux_ppc64le.go
│ │ │ ├── errno_linux_riscv64.go
│ │ │ ├── errno_linux_s390x.go
│ │ │ ├── errno_netbsd_amd64.go
│ │ │ ├── errno_netbsd_arm.go
│ │ │ ├── errno_openbsd_386.go
│ │ │ ├── errno_openbsd_amd64.go
│ │ │ ├── errno_openbsd_arm64.go
│ │ │ ├── errno_windows_386.go
│ │ │ ├── errno_windows_amd64.go
│ │ │ └── errno_windows_arm64.go
│ │ ├── etc.go
│ │ ├── etc_musl.go
│ │ ├── fcntl/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── fcntl_darwin_amd64.go
│ │ │ ├── fcntl_darwin_arm64.go
│ │ │ ├── fcntl_freebsd_386.go
│ │ │ ├── fcntl_freebsd_amd64.go
│ │ │ ├── fcntl_freebsd_arm.go
│ │ │ ├── fcntl_freebsd_arm64.go
│ │ │ ├── fcntl_illumos_amd64.go
│ │ │ ├── fcntl_linux_386.go
│ │ │ ├── fcntl_linux_amd64.go
│ │ │ ├── fcntl_linux_arm.go
│ │ │ ├── fcntl_linux_arm64.go
│ │ │ ├── fcntl_linux_loong64.go
│ │ │ ├── fcntl_linux_mips64le.go
│ │ │ ├── fcntl_linux_ppc64le.go
│ │ │ ├── fcntl_linux_riscv64.go
│ │ │ ├── fcntl_linux_s390x.go
│ │ │ ├── fcntl_netbsd_amd64.go
│ │ │ ├── fcntl_netbsd_arm.go
│ │ │ ├── fcntl_openbsd_386.go
│ │ │ ├── fcntl_openbsd_amd64.go
│ │ │ ├── fcntl_openbsd_arm64.go
│ │ │ ├── fcntl_windows_386.go
│ │ │ ├── fcntl_windows_amd64.go
│ │ │ └── fcntl_windows_arm64.go
│ │ ├── fsync.go
│ │ ├── fts/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── fts_darwin_amd64.go
│ │ │ ├── fts_darwin_arm64.go
│ │ │ ├── fts_freebsd_386.go
│ │ │ ├── fts_freebsd_amd64.go
│ │ │ ├── fts_freebsd_arm.go
│ │ │ ├── fts_freebsd_arm64.go
│ │ │ ├── fts_illumos_amd64.go
│ │ │ ├── fts_linux_386.go
│ │ │ ├── fts_linux_amd64.go
│ │ │ ├── fts_linux_arm.go
│ │ │ ├── fts_linux_arm64.go
│ │ │ ├── fts_linux_loong64.go
│ │ │ ├── fts_linux_mips64le.go
│ │ │ ├── fts_linux_ppc64le.go
│ │ │ ├── fts_linux_riscv64.go
│ │ │ ├── fts_linux_s390x.go
│ │ │ ├── fts_netbsd_amd64.go
│ │ │ ├── fts_netbsd_arm.go
│ │ │ ├── fts_openbsd_386.go
│ │ │ ├── fts_openbsd_amd64.go
│ │ │ └── fts_openbsd_arm64.go
│ │ ├── grp/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── grp_darwin_amd64.go
│ │ │ ├── grp_darwin_arm64.go
│ │ │ ├── grp_freebsd_386.go
│ │ │ ├── grp_freebsd_amd64.go
│ │ │ ├── grp_freebsd_arm.go
│ │ │ ├── grp_freebsd_arm64.go
│ │ │ ├── grp_illumos_amd64.go
│ │ │ ├── grp_linux_386.go
│ │ │ ├── grp_linux_amd64.go
│ │ │ ├── grp_linux_arm.go
│ │ │ ├── grp_linux_arm64.go
│ │ │ ├── grp_linux_loong64.go
│ │ │ ├── grp_linux_mips64le.go
│ │ │ ├── grp_linux_ppc64le.go
│ │ │ ├── grp_linux_riscv64.go
│ │ │ ├── grp_linux_s390x.go
│ │ │ ├── grp_netbsd_amd64.go
│ │ │ ├── grp_netbsd_arm.go
│ │ │ ├── grp_openbsd_386.go
│ │ │ ├── grp_openbsd_amd64.go
│ │ │ └── grp_openbsd_arm64.go
│ │ ├── honnef.co/
│ │ │ └── go/
│ │ │ └── netdb/
│ │ │ ├── README.md
│ │ │ └── netdb.go
│ │ ├── int128.go
│ │ ├── ioutil_darwin.go
│ │ ├── ioutil_freebsd.go
│ │ ├── ioutil_illumos.go
│ │ ├── ioutil_linux.go
│ │ ├── ioutil_netbsd.go
│ │ ├── ioutil_openbsd.go
│ │ ├── langinfo/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── langinfo_darwin_amd64.go
│ │ │ ├── langinfo_darwin_arm64.go
│ │ │ ├── langinfo_freebsd_386.go
│ │ │ ├── langinfo_freebsd_amd64.go
│ │ │ ├── langinfo_freebsd_arm.go
│ │ │ ├── langinfo_freebsd_arm64.go
│ │ │ ├── langinfo_illumos_amd64.go
│ │ │ ├── langinfo_linux_386.go
│ │ │ ├── langinfo_linux_amd64.go
│ │ │ ├── langinfo_linux_arm.go
│ │ │ ├── langinfo_linux_arm64.go
│ │ │ ├── langinfo_linux_loong64.go
│ │ │ ├── langinfo_linux_mips64le.go
│ │ │ ├── langinfo_linux_ppc64le.go
│ │ │ ├── langinfo_linux_riscv64.go
│ │ │ ├── langinfo_linux_s390x.go
│ │ │ ├── langinfo_netbsd_amd64.go
│ │ │ ├── langinfo_netbsd_arm.go
│ │ │ ├── langinfo_openbsd_386.go
│ │ │ ├── langinfo_openbsd_amd64.go
│ │ │ └── langinfo_openbsd_arm64.go
│ │ ├── libc.go
│ │ ├── libc32.go
│ │ ├── libc64.go
│ │ ├── libc_386.go
│ │ ├── libc_all.go
│ │ ├── libc_amd64.go
│ │ ├── libc_arm.go
│ │ ├── libc_arm64.go
│ │ ├── libc_darwin.go
│ │ ├── libc_darwin_amd64.go
│ │ ├── libc_darwin_arm64.go
│ │ ├── libc_freebsd.go
│ │ ├── libc_freebsd_386.go
│ │ ├── libc_freebsd_amd64.go
│ │ ├── libc_freebsd_arm.go
│ │ ├── libc_freebsd_arm64.go
│ │ ├── libc_illumos.go
│ │ ├── libc_illumos_amd64.go
│ │ ├── libc_linux.go
│ │ ├── libc_linux_amd64.go
│ │ ├── libc_linux_mips64le.go
│ │ ├── libc_mips64le.go
│ │ ├── libc_musl.go
│ │ ├── libc_musl_linux_386.go
│ │ ├── libc_musl_linux_amd64.go
│ │ ├── libc_musl_linux_arm.go
│ │ ├── libc_musl_linux_arm64.go
│ │ ├── libc_musl_linux_loong64.go
│ │ ├── libc_musl_linux_ppc64le.go
│ │ ├── libc_musl_linux_riscv64.go
│ │ ├── libc_musl_linux_s390x.go
│ │ ├── libc_netbsd.go
│ │ ├── libc_netbsd_amd64.go
│ │ ├── libc_netbsd_arm.go
│ │ ├── libc_openbsd.go
│ │ ├── libc_openbsd_386.go
│ │ ├── libc_openbsd_amd64.go
│ │ ├── libc_openbsd_arm64.go
│ │ ├── libc_unix.go
│ │ ├── libc_unix1.go
│ │ ├── libc_unix2.go
│ │ ├── libc_unix3.go
│ │ ├── libc_windows.go
│ │ ├── libc_windows_386.go
│ │ ├── libc_windows_386.s
│ │ ├── libc_windows_amd64.go
│ │ ├── libc_windows_arm64.go
│ │ ├── libc_windows_arm64.s
│ │ ├── limits/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── limits_darwin_amd64.go
│ │ │ ├── limits_darwin_arm64.go
│ │ │ ├── limits_freebsd_386.go
│ │ │ ├── limits_freebsd_amd64.go
│ │ │ ├── limits_freebsd_arm.go
│ │ │ ├── limits_freebsd_arm64.go
│ │ │ ├── limits_illumos_amd64.go
│ │ │ ├── limits_linux_386.go
│ │ │ ├── limits_linux_amd64.go
│ │ │ ├── limits_linux_arm.go
│ │ │ ├── limits_linux_arm64.go
│ │ │ ├── limits_linux_loong64.go
│ │ │ ├── limits_linux_mips64le.go
│ │ │ ├── limits_linux_ppc64le.go
│ │ │ ├── limits_linux_riscv64.go
│ │ │ ├── limits_linux_s390x.go
│ │ │ ├── limits_netbsd_amd64.go
│ │ │ ├── limits_netbsd_arm.go
│ │ │ ├── limits_openbsd_386.go
│ │ │ ├── limits_openbsd_amd64.go
│ │ │ ├── limits_openbsd_arm64.go
│ │ │ ├── limits_windows_386.go
│ │ │ ├── limits_windows_amd64.go
│ │ │ └── limits_windows_arm64.go
│ │ ├── mem.go
│ │ ├── mem_brk.go
│ │ ├── mem_brk_musl.go
│ │ ├── mem_expvar.go
│ │ ├── mem_musl.go
│ │ ├── memgrind.go
│ │ ├── memgrind_musl.go
│ │ ├── musl_darwin_amd64.go
│ │ ├── musl_darwin_arm64.go
│ │ ├── musl_freebsd_386.go
│ │ ├── musl_freebsd_amd64.go
│ │ ├── musl_freebsd_arm.go
│ │ ├── musl_freebsd_arm64.go
│ │ ├── musl_illumos_amd64.go
│ │ ├── musl_linux_mips64le.go
│ │ ├── musl_netbsd_amd64.go
│ │ ├── musl_netbsd_arm.go
│ │ ├── musl_openbsd_386.go
│ │ ├── musl_openbsd_amd64.go
│ │ ├── musl_openbsd_arm64.go
│ │ ├── musl_windows_386.go
│ │ ├── musl_windows_amd64.go
│ │ ├── musl_windows_arm64.go
│ │ ├── netdb/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── netdb_darwin_amd64.go
│ │ │ ├── netdb_darwin_arm64.go
│ │ │ ├── netdb_freebsd_386.go
│ │ │ ├── netdb_freebsd_amd64.go
│ │ │ ├── netdb_freebsd_arm.go
│ │ │ ├── netdb_freebsd_arm64.go
│ │ │ ├── netdb_illumos_amd64.go
│ │ │ ├── netdb_linux_386.go
│ │ │ ├── netdb_linux_amd64.go
│ │ │ ├── netdb_linux_arm.go
│ │ │ ├── netdb_linux_arm64.go
│ │ │ ├── netdb_linux_loong64.go
│ │ │ ├── netdb_linux_mips64le.go
│ │ │ ├── netdb_linux_ppc64le.go
│ │ │ ├── netdb_linux_riscv64.go
│ │ │ ├── netdb_linux_s390x.go
│ │ │ ├── netdb_netbsd_amd64.go
│ │ │ ├── netdb_netbsd_arm.go
│ │ │ ├── netdb_openbsd_386.go
│ │ │ ├── netdb_openbsd_amd64.go
│ │ │ └── netdb_openbsd_arm64.go
│ │ ├── netinet/
│ │ │ └── in/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── in_darwin_amd64.go
│ │ │ ├── in_darwin_arm64.go
│ │ │ ├── in_freebsd_386.go
│ │ │ ├── in_freebsd_amd64.go
│ │ │ ├── in_freebsd_arm.go
│ │ │ ├── in_freebsd_arm64.go
│ │ │ ├── in_illumos_amd64.go
│ │ │ ├── in_linux_386.go
│ │ │ ├── in_linux_amd64.go
│ │ │ ├── in_linux_arm.go
│ │ │ ├── in_linux_arm64.go
│ │ │ ├── in_linux_loong64.go
│ │ │ ├── in_linux_mips64le.go
│ │ │ ├── in_linux_ppc64le.go
│ │ │ ├── in_linux_riscv64.go
│ │ │ ├── in_linux_s390x.go
│ │ │ ├── in_netbsd_amd64.go
│ │ │ ├── in_netbsd_arm.go
│ │ │ ├── in_openbsd_386.go
│ │ │ ├── in_openbsd_amd64.go
│ │ │ └── in_openbsd_arm64.go
│ │ ├── nodmesg.go
│ │ ├── nofsync.go
│ │ ├── poll/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── poll_darwin_amd64.go
│ │ │ ├── poll_darwin_arm64.go
│ │ │ ├── poll_freebsd_386.go
│ │ │ ├── poll_freebsd_amd64.go
│ │ │ ├── poll_freebsd_arm.go
│ │ │ ├── poll_freebsd_arm64.go
│ │ │ ├── poll_illumos_amd64.go
│ │ │ ├── poll_linux_386.go
│ │ │ ├── poll_linux_amd64.go
│ │ │ ├── poll_linux_arm.go
│ │ │ ├── poll_linux_arm64.go
│ │ │ ├── poll_linux_loong64.go
│ │ │ ├── poll_linux_mips64le.go
│ │ │ ├── poll_linux_ppc64le.go
│ │ │ ├── poll_linux_riscv64.go
│ │ │ ├── poll_linux_s390x.go
│ │ │ ├── poll_netbsd_amd64.go
│ │ │ ├── poll_netbsd_arm.go
│ │ │ ├── poll_openbsd_386.go
│ │ │ ├── poll_openbsd_amd64.go
│ │ │ └── poll_openbsd_arm64.go
│ │ ├── printf.go
│ │ ├── probes.go
│ │ ├── pthread/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── pthread_darwin_amd64.go
│ │ │ ├── pthread_darwin_arm64.go
│ │ │ ├── pthread_freebsd_386.go
│ │ │ ├── pthread_freebsd_amd64.go
│ │ │ ├── pthread_freebsd_arm.go
│ │ │ ├── pthread_freebsd_arm64.go
│ │ │ ├── pthread_illumos_amd64.go
│ │ │ ├── pthread_linux_386.go
│ │ │ ├── pthread_linux_amd64.go
│ │ │ ├── pthread_linux_arm.go
│ │ │ ├── pthread_linux_arm64.go
│ │ │ ├── pthread_linux_loong64.go
│ │ │ ├── pthread_linux_mips64le.go
│ │ │ ├── pthread_linux_ppc64le.go
│ │ │ ├── pthread_linux_riscv64.go
│ │ │ ├── pthread_linux_s390x.go
│ │ │ ├── pthread_netbsd_amd64.go
│ │ │ ├── pthread_netbsd_arm.go
│ │ │ ├── pthread_openbsd_386.go
│ │ │ ├── pthread_openbsd_amd64.go
│ │ │ ├── pthread_openbsd_arm64.go
│ │ │ ├── pthread_windows_386.go
│ │ │ ├── pthread_windows_amd64.go
│ │ │ └── pthread_windows_arm64.go
│ │ ├── pthread.go
│ │ ├── pthread_all.go
│ │ ├── pthread_musl.go
│ │ ├── pwd/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── pwd_darwin_amd64.go
│ │ │ ├── pwd_darwin_arm64.go
│ │ │ ├── pwd_freebsd_386.go
│ │ │ ├── pwd_freebsd_amd64.go
│ │ │ ├── pwd_freebsd_arm.go
│ │ │ ├── pwd_freebsd_arm64.go
│ │ │ ├── pwd_illumos_amd64.go
│ │ │ ├── pwd_linux_386.go
│ │ │ ├── pwd_linux_amd64.go
│ │ │ ├── pwd_linux_arm.go
│ │ │ ├── pwd_linux_arm64.go
│ │ │ ├── pwd_linux_loong64.go
│ │ │ ├── pwd_linux_mips64le.go
│ │ │ ├── pwd_linux_ppc64le.go
│ │ │ ├── pwd_linux_riscv64.go
│ │ │ ├── pwd_linux_s390x.go
│ │ │ ├── pwd_netbsd_amd64.go
│ │ │ ├── pwd_netbsd_arm.go
│ │ │ ├── pwd_openbsd_386.go
│ │ │ ├── pwd_openbsd_amd64.go
│ │ │ └── pwd_openbsd_arm64.go
│ │ ├── rtl.go
│ │ ├── scanf.go
│ │ ├── signal/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── more_darwin_amd64.go
│ │ │ ├── more_darwin_arm64.go
│ │ │ ├── more_freebsd_386.go
│ │ │ ├── more_freebsd_amd64.go
│ │ │ ├── more_freebsd_arm.go
│ │ │ ├── more_freebsd_arm64.go
│ │ │ ├── more_illumos_amd64.go
│ │ │ ├── more_linux_386.go
│ │ │ ├── more_linux_amd64.go
│ │ │ ├── more_linux_arm.go
│ │ │ ├── more_linux_arm64.go
│ │ │ ├── more_linux_loong64.go
│ │ │ ├── more_linux_mips64le.go
│ │ │ ├── more_linux_ppc64le.go
│ │ │ ├── more_linux_riscv64.go
│ │ │ ├── more_linux_s390x.go
│ │ │ ├── more_netbsd_amd64.go
│ │ │ ├── more_netbsd_arm.go
│ │ │ ├── more_openbsd_386.go
│ │ │ ├── more_openbsd_amd64.go
│ │ │ ├── more_openbsd_arm64.go
│ │ │ ├── signal_darwin_amd64.go
│ │ │ ├── signal_darwin_arm64.go
│ │ │ ├── signal_freebsd_386.go
│ │ │ ├── signal_freebsd_amd64.go
│ │ │ ├── signal_freebsd_arm.go
│ │ │ ├── signal_freebsd_arm64.go
│ │ │ ├── signal_illumos_amd64.go
│ │ │ ├── signal_linux_386.go
│ │ │ ├── signal_linux_amd64.go
│ │ │ ├── signal_linux_arm.go
│ │ │ ├── signal_linux_arm64.go
│ │ │ ├── signal_linux_loong64.go
│ │ │ ├── signal_linux_mips64le.go
│ │ │ ├── signal_linux_ppc64le.go
│ │ │ ├── signal_linux_riscv64.go
│ │ │ ├── signal_linux_s390x.go
│ │ │ ├── signal_netbsd_amd64.go
│ │ │ ├── signal_netbsd_arm.go
│ │ │ ├── signal_openbsd_386.go
│ │ │ ├── signal_openbsd_amd64.go
│ │ │ ├── signal_openbsd_arm64.go
│ │ │ ├── signal_windows_386.go
│ │ │ ├── signal_windows_amd64.go
│ │ │ └── signal_windows_arm64.go
│ │ ├── stdatomic.go
│ │ ├── stdio/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── stdio_darwin_amd64.go
│ │ │ ├── stdio_darwin_arm64.go
│ │ │ ├── stdio_freebsd_386.go
│ │ │ ├── stdio_freebsd_amd64.go
│ │ │ ├── stdio_freebsd_arm.go
│ │ │ ├── stdio_freebsd_arm64.go
│ │ │ ├── stdio_illumos_amd64.go
│ │ │ ├── stdio_linux_386.go
│ │ │ ├── stdio_linux_amd64.go
│ │ │ ├── stdio_linux_arm.go
│ │ │ ├── stdio_linux_arm64.go
│ │ │ ├── stdio_linux_loong64.go
│ │ │ ├── stdio_linux_mips64le.go
│ │ │ ├── stdio_linux_ppc64le.go
│ │ │ ├── stdio_linux_riscv64.go
│ │ │ ├── stdio_linux_s390x.go
│ │ │ ├── stdio_netbsd_amd64.go
│ │ │ ├── stdio_netbsd_arm.go
│ │ │ ├── stdio_openbsd_386.go
│ │ │ ├── stdio_openbsd_amd64.go
│ │ │ ├── stdio_openbsd_arm64.go
│ │ │ ├── stdio_windows_386.go
│ │ │ ├── stdio_windows_amd64.go
│ │ │ └── stdio_windows_arm64.go
│ │ ├── stdlib/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── stdlib_darwin_amd64.go
│ │ │ ├── stdlib_darwin_arm64.go
│ │ │ ├── stdlib_freebsd_386.go
│ │ │ ├── stdlib_freebsd_amd64.go
│ │ │ ├── stdlib_freebsd_arm.go
│ │ │ ├── stdlib_freebsd_arm64.go
│ │ │ ├── stdlib_illumos_amd64.go
│ │ │ ├── stdlib_linux_386.go
│ │ │ ├── stdlib_linux_amd64.go
│ │ │ ├── stdlib_linux_arm.go
│ │ │ ├── stdlib_linux_arm64.go
│ │ │ ├── stdlib_linux_loong64.go
│ │ │ ├── stdlib_linux_mips64le.go
│ │ │ ├── stdlib_linux_ppc64le.go
│ │ │ ├── stdlib_linux_riscv64.go
│ │ │ ├── stdlib_linux_s390x.go
│ │ │ ├── stdlib_netbsd_amd64.go
│ │ │ ├── stdlib_netbsd_arm.go
│ │ │ ├── stdlib_openbsd_386.go
│ │ │ ├── stdlib_openbsd_amd64.go
│ │ │ ├── stdlib_openbsd_arm64.go
│ │ │ ├── stdlib_windows_386.go
│ │ │ ├── stdlib_windows_amd64.go
│ │ │ └── stdlib_windows_arm64.go
│ │ ├── straceoff.go
│ │ ├── straceon.go
│ │ ├── surface.new
│ │ ├── surface.old
│ │ ├── sync.go
│ │ ├── sys/
│ │ │ ├── socket/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_freebsd_386.go
│ │ │ │ ├── capi_freebsd_amd64.go
│ │ │ │ ├── capi_freebsd_arm.go
│ │ │ │ ├── capi_freebsd_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── capi_netbsd_amd64.go
│ │ │ │ ├── capi_netbsd_arm.go
│ │ │ │ ├── capi_openbsd_386.go
│ │ │ │ ├── capi_openbsd_amd64.go
│ │ │ │ ├── capi_openbsd_arm64.go
│ │ │ │ ├── socket_darwin_amd64.go
│ │ │ │ ├── socket_darwin_arm64.go
│ │ │ │ ├── socket_freebsd_386.go
│ │ │ │ ├── socket_freebsd_amd64.go
│ │ │ │ ├── socket_freebsd_arm.go
│ │ │ │ ├── socket_freebsd_arm64.go
│ │ │ │ ├── socket_illumos_amd64.go
│ │ │ │ ├── socket_linux_386.go
│ │ │ │ ├── socket_linux_amd64.go
│ │ │ │ ├── socket_linux_arm.go
│ │ │ │ ├── socket_linux_arm64.go
│ │ │ │ ├── socket_linux_loong64.go
│ │ │ │ ├── socket_linux_mips64le.go
│ │ │ │ ├── socket_linux_ppc64le.go
│ │ │ │ ├── socket_linux_riscv64.go
│ │ │ │ ├── socket_linux_s390x.go
│ │ │ │ ├── socket_netbsd_amd64.go
│ │ │ │ ├── socket_netbsd_arm.go
│ │ │ │ ├── socket_openbsd_386.go
│ │ │ │ ├── socket_openbsd_amd64.go
│ │ │ │ └── socket_openbsd_arm64.go
│ │ │ ├── stat/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_freebsd_386.go
│ │ │ │ ├── capi_freebsd_amd64.go
│ │ │ │ ├── capi_freebsd_arm.go
│ │ │ │ ├── capi_freebsd_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── capi_netbsd_amd64.go
│ │ │ │ ├── capi_netbsd_arm.go
│ │ │ │ ├── capi_openbsd_386.go
│ │ │ │ ├── capi_openbsd_amd64.go
│ │ │ │ ├── capi_openbsd_arm64.go
│ │ │ │ ├── capi_windows_386.go
│ │ │ │ ├── capi_windows_amd64.go
│ │ │ │ ├── capi_windows_arm64.go
│ │ │ │ ├── stat_darwin_amd64.go
│ │ │ │ ├── stat_darwin_arm64.go
│ │ │ │ ├── stat_freebsd_386.go
│ │ │ │ ├── stat_freebsd_amd64.go
│ │ │ │ ├── stat_freebsd_arm.go
│ │ │ │ ├── stat_freebsd_arm64.go
│ │ │ │ ├── stat_illumos_amd64.go
│ │ │ │ ├── stat_linux_386.go
│ │ │ │ ├── stat_linux_amd64.go
│ │ │ │ ├── stat_linux_arm.go
│ │ │ │ ├── stat_linux_arm64.go
│ │ │ │ ├── stat_linux_loong64.go
│ │ │ │ ├── stat_linux_mips64le.go
│ │ │ │ ├── stat_linux_ppc64le.go
│ │ │ │ ├── stat_linux_riscv64.go
│ │ │ │ ├── stat_linux_s390x.go
│ │ │ │ ├── stat_netbsd_amd64.go
│ │ │ │ ├── stat_netbsd_arm.go
│ │ │ │ ├── stat_openbsd_386.go
│ │ │ │ ├── stat_openbsd_amd64.go
│ │ │ │ ├── stat_openbsd_arm64.go
│ │ │ │ ├── stat_windows_386.go
│ │ │ │ ├── stat_windows_amd64.go
│ │ │ │ └── stat_windows_arm64.go
│ │ │ └── types/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── types_darwin_amd64.go
│ │ │ ├── types_darwin_arm64.go
│ │ │ ├── types_freebsd_386.go
│ │ │ ├── types_freebsd_amd64.go
│ │ │ ├── types_freebsd_arm.go
│ │ │ ├── types_freebsd_arm64.go
│ │ │ ├── types_illumos_amd64.go
│ │ │ ├── types_linux_386.go
│ │ │ ├── types_linux_amd64.go
│ │ │ ├── types_linux_arm.go
│ │ │ ├── types_linux_arm64.go
│ │ │ ├── types_linux_loong64.go
│ │ │ ├── types_linux_mips64le.go
│ │ │ ├── types_linux_ppc64le.go
│ │ │ ├── types_linux_riscv64.go
│ │ │ ├── types_linux_s390x.go
│ │ │ ├── types_netbsd_amd64.go
│ │ │ ├── types_netbsd_arm.go
│ │ │ ├── types_openbsd_386.go
│ │ │ ├── types_openbsd_amd64.go
│ │ │ ├── types_openbsd_arm64.go
│ │ │ ├── types_windows_386.go
│ │ │ ├── types_windows_amd64.go
│ │ │ └── types_windows_arm64.go
│ │ ├── syscall_musl.go
│ │ ├── termios/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── termios_darwin_amd64.go
│ │ │ ├── termios_darwin_arm64.go
│ │ │ ├── termios_freebsd_386.go
│ │ │ ├── termios_freebsd_amd64.go
│ │ │ ├── termios_freebsd_arm.go
│ │ │ ├── termios_freebsd_arm64.go
│ │ │ ├── termios_illumos_amd64.go
│ │ │ ├── termios_linux_386.go
│ │ │ ├── termios_linux_amd64.go
│ │ │ ├── termios_linux_arm.go
│ │ │ ├── termios_linux_arm64.go
│ │ │ ├── termios_linux_loong64.go
│ │ │ ├── termios_linux_mips64le.go
│ │ │ ├── termios_linux_ppc64le.go
│ │ │ ├── termios_linux_riscv64.go
│ │ │ ├── termios_linux_s390x.go
│ │ │ ├── termios_netbsd_amd64.go
│ │ │ ├── termios_netbsd_arm.go
│ │ │ ├── termios_openbsd_386.go
│ │ │ ├── termios_openbsd_amd64.go
│ │ │ └── termios_openbsd_arm64.go
│ │ ├── time/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── time_darwin_amd64.go
│ │ │ ├── time_darwin_arm64.go
│ │ │ ├── time_freebsd_386.go
│ │ │ ├── time_freebsd_amd64.go
│ │ │ ├── time_freebsd_arm.go
│ │ │ ├── time_freebsd_arm64.go
│ │ │ ├── time_illumos_amd64.go
│ │ │ ├── time_linux_386.go
│ │ │ ├── time_linux_amd64.go
│ │ │ ├── time_linux_arm.go
│ │ │ ├── time_linux_arm64.go
│ │ │ ├── time_linux_loong64.go
│ │ │ ├── time_linux_mips64le.go
│ │ │ ├── time_linux_ppc64le.go
│ │ │ ├── time_linux_riscv64.go
│ │ │ ├── time_linux_s390x.go
│ │ │ ├── time_netbsd_amd64.go
│ │ │ ├── time_netbsd_arm.go
│ │ │ ├── time_openbsd_386.go
│ │ │ ├── time_openbsd_amd64.go
│ │ │ ├── time_openbsd_arm64.go
│ │ │ ├── time_windows_386.go
│ │ │ ├── time_windows_amd64.go
│ │ │ └── time_windows_arm64.go
│ │ ├── tls_linux_amd64.go
│ │ ├── tls_linux_amd64.s
│ │ ├── unistd/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── unistd_darwin_amd64.go
│ │ │ ├── unistd_darwin_arm64.go
│ │ │ ├── unistd_freebsd_386.go
│ │ │ ├── unistd_freebsd_amd64.go
│ │ │ ├── unistd_freebsd_arm.go
│ │ │ ├── unistd_freebsd_arm64.go
│ │ │ ├── unistd_illumos_amd64.go
│ │ │ ├── unistd_linux_386.go
│ │ │ ├── unistd_linux_amd64.go
│ │ │ ├── unistd_linux_arm.go
│ │ │ ├── unistd_linux_arm64.go
│ │ │ ├── unistd_linux_loong64.go
│ │ │ ├── unistd_linux_mips64le.go
│ │ │ ├── unistd_linux_ppc64le.go
│ │ │ ├── unistd_linux_riscv64.go
│ │ │ ├── unistd_linux_s390x.go
│ │ │ ├── unistd_netbsd_amd64.go
│ │ │ ├── unistd_netbsd_arm.go
│ │ │ ├── unistd_openbsd_386.go
│ │ │ ├── unistd_openbsd_amd64.go
│ │ │ ├── unistd_openbsd_arm64.go
│ │ │ ├── unistd_windows_386.go
│ │ │ ├── unistd_windows_amd64.go
│ │ │ └── unistd_windows_arm64.go
│ │ ├── utime/
│ │ │ ├── capi_darwin_amd64.go
│ │ │ ├── capi_darwin_arm64.go
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_illumos_amd64.go
│ │ │ ├── capi_linux_386.go
│ │ │ ├── capi_linux_amd64.go
│ │ │ ├── capi_linux_arm.go
│ │ │ ├── capi_linux_arm64.go
│ │ │ ├── capi_linux_loong64.go
│ │ │ ├── capi_linux_mips64le.go
│ │ │ ├── capi_linux_ppc64le.go
│ │ │ ├── capi_linux_riscv64.go
│ │ │ ├── capi_linux_s390x.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── capi_windows_386.go
│ │ │ ├── capi_windows_amd64.go
│ │ │ ├── capi_windows_arm64.go
│ │ │ ├── utime_darwin_amd64.go
│ │ │ ├── utime_darwin_arm64.go
│ │ │ ├── utime_freebsd_386.go
│ │ │ ├── utime_freebsd_amd64.go
│ │ │ ├── utime_freebsd_arm.go
│ │ │ ├── utime_freebsd_arm64.go
│ │ │ ├── utime_illumos_amd64.go
│ │ │ ├── utime_linux_386.go
│ │ │ ├── utime_linux_amd64.go
│ │ │ ├── utime_linux_arm.go
│ │ │ ├── utime_linux_arm64.go
│ │ │ ├── utime_linux_loong64.go
│ │ │ ├── utime_linux_mips64le.go
│ │ │ ├── utime_linux_ppc64le.go
│ │ │ ├── utime_linux_riscv64.go
│ │ │ ├── utime_linux_s390x.go
│ │ │ ├── utime_netbsd_amd64.go
│ │ │ ├── utime_netbsd_arm.go
│ │ │ ├── utime_openbsd_386.go
│ │ │ ├── utime_openbsd_amd64.go
│ │ │ ├── utime_openbsd_arm64.go
│ │ │ ├── utime_windows_386.go
│ │ │ ├── utime_windows_amd64.go
│ │ │ └── utime_windows_arm64.go
│ │ ├── uuid/
│ │ │ ├── capi_freebsd_386.go
│ │ │ ├── capi_freebsd_amd64.go
│ │ │ ├── capi_freebsd_arm.go
│ │ │ ├── capi_freebsd_arm64.go
│ │ │ ├── capi_netbsd_amd64.go
│ │ │ ├── capi_netbsd_arm.go
│ │ │ ├── capi_openbsd_386.go
│ │ │ ├── capi_openbsd_amd64.go
│ │ │ ├── capi_openbsd_arm64.go
│ │ │ ├── uuid/
│ │ │ │ ├── capi_darwin_amd64.go
│ │ │ │ ├── capi_darwin_arm64.go
│ │ │ │ ├── capi_illumos_amd64.go
│ │ │ │ ├── capi_linux_386.go
│ │ │ │ ├── capi_linux_amd64.go
│ │ │ │ ├── capi_linux_arm.go
│ │ │ │ ├── capi_linux_arm64.go
│ │ │ │ ├── capi_linux_loong64.go
│ │ │ │ ├── capi_linux_mips64le.go
│ │ │ │ ├── capi_linux_ppc64le.go
│ │ │ │ ├── capi_linux_riscv64.go
│ │ │ │ ├── capi_linux_s390x.go
│ │ │ │ ├── uuid_darwin_amd64.go
│ │ │ │ ├── uuid_darwin_arm64.go
│ │ │ │ ├── uuid_illumos_amd64.go
│ │ │ │ ├── uuid_linux_386.go
│ │ │ │ ├── uuid_linux_amd64.go
│ │ │ │ ├── uuid_linux_arm.go
│ │ │ │ ├── uuid_linux_arm64.go
│ │ │ │ ├── uuid_linux_loong64.go
│ │ │ │ ├── uuid_linux_mips64le.go
│ │ │ │ ├── uuid_linux_ppc64le.go
│ │ │ │ ├── uuid_linux_riscv64.go
│ │ │ │ └── uuid_linux_s390x.go
│ │ │ ├── uuid_freebsd_386.go
│ │ │ ├── uuid_freebsd_amd64.go
│ │ │ ├── uuid_freebsd_arm.go
│ │ │ ├── uuid_freebsd_arm64.go
│ │ │ ├── uuid_netbsd_amd64.go
│ │ │ ├── uuid_netbsd_arm.go
│ │ │ ├── uuid_openbsd_386.go
│ │ │ ├── uuid_openbsd_amd64.go
│ │ │ └── uuid_openbsd_arm64.go
│ │ ├── watch.go
│ │ └── wctype/
│ │ ├── capi_darwin_amd64.go
│ │ ├── capi_darwin_arm64.go
│ │ ├── capi_freebsd_386.go
│ │ ├── capi_freebsd_amd64.go
│ │ ├── capi_freebsd_arm.go
│ │ ├── capi_freebsd_arm64.go
│ │ ├── capi_illumos_amd64.go
│ │ ├── capi_linux_386.go
│ │ ├── capi_linux_amd64.go
│ │ ├── capi_linux_arm.go
│ │ ├── capi_linux_arm64.go
│ │ ├── capi_linux_loong64.go
│ │ ├── capi_linux_mips64le.go
│ │ ├── capi_linux_ppc64le.go
│ │ ├── capi_linux_riscv64.go
│ │ ├── capi_linux_s390x.go
│ │ ├── capi_netbsd_amd64.go
│ │ ├── capi_netbsd_arm.go
│ │ ├── capi_openbsd_386.go
│ │ ├── capi_openbsd_amd64.go
│ │ ├── capi_openbsd_arm64.go
│ │ ├── capi_windows_386.go
│ │ ├── capi_windows_amd64.go
│ │ ├── capi_windows_arm64.go
│ │ ├── wctype_darwin_amd64.go
│ │ ├── wctype_darwin_arm64.go
│ │ ├── wctype_freebsd_386.go
│ │ ├── wctype_freebsd_amd64.go
│ │ ├── wctype_freebsd_arm.go
│ │ ├── wctype_freebsd_arm64.go
│ │ ├── wctype_illumos_amd64.go
│ │ ├── wctype_linux_386.go
│ │ ├── wctype_linux_amd64.go
│ │ ├── wctype_linux_arm.go
│ │ ├── wctype_linux_arm64.go
│ │ ├── wctype_linux_loong64.go
│ │ ├── wctype_linux_mips64le.go
│ │ ├── wctype_linux_ppc64le.go
│ │ ├── wctype_linux_riscv64.go
│ │ ├── wctype_linux_s390x.go
│ │ ├── wctype_netbsd_amd64.go
│ │ ├── wctype_netbsd_arm.go
│ │ ├── wctype_openbsd_386.go
│ │ ├── wctype_openbsd_amd64.go
│ │ ├── wctype_openbsd_arm64.go
│ │ ├── wctype_windows_386.go
│ │ ├── wctype_windows_amd64.go
│ │ └── wctype_windows_arm64.go
│ ├── mathutil/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── Makefile
│ │ ├── README
│ │ ├── binarylog.go
│ │ ├── bits.go
│ │ ├── builder.json
│ │ ├── envelope.go
│ │ ├── int.go
│ │ ├── mathutil.go
│ │ ├── nist-sts-2-1-1-report
│ │ ├── permute.go
│ │ ├── poly.go
│ │ ├── primes.go
│ │ ├── rat.go
│ │ ├── rnd.go
│ │ ├── sqr.go
│ │ ├── sqr_std.go
│ │ ├── tables.go
│ │ └── test_deps.go
│ ├── memory/
│ │ ├── AUTHORS
│ │ ├── CONTRIBUTORS
│ │ ├── LICENSE
│ │ ├── LICENSE-GO
│ │ ├── LICENSE-LOGO
│ │ ├── LICENSE-MMAP-GO
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── builder.json
│ │ ├── counters.go
│ │ ├── memory.go
│ │ ├── memory32.go
│ │ ├── memory64.go
│ │ ├── mmap_unix.go
│ │ ├── mmap_windows.go
│ │ ├── nocounters.go
│ │ ├── trace_disabled.go
│ │ └── trace_enabled.go
│ └── sqlite/
│ ├── AUTHORS
│ ├── CHANGELOG.md
│ ├── CONTRIBUTORS
│ ├── GOVERNANCE.md
│ ├── HACKING.md
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── SQLITE-LICENSE
│ ├── backup.go
│ ├── builder.json
│ ├── conn.go
│ ├── convert.go
│ ├── dmesg.go
│ ├── doc.go
│ ├── driver.go
│ ├── error.go
│ ├── fcntl.go
│ ├── issue120.diff
│ ├── lib/
│ │ ├── defs.go
│ │ ├── hooks.go
│ │ ├── hooks_linux_arm64.go
│ │ ├── mutex.go
│ │ ├── sqlite_darwin_amd64.go
│ │ ├── sqlite_darwin_arm64.go
│ │ ├── sqlite_freebsd_386.go
│ │ ├── sqlite_freebsd_amd64.go
│ │ ├── sqlite_freebsd_arm.go
│ │ ├── sqlite_freebsd_arm64.go
│ │ ├── sqlite_linux_386.go
│ │ ├── sqlite_linux_amd64.go
│ │ ├── sqlite_linux_arm.go
│ │ ├── sqlite_linux_arm64.go
│ │ ├── sqlite_linux_loong64.go
│ │ ├── sqlite_linux_ppc64le.go
│ │ ├── sqlite_linux_riscv64.go
│ │ ├── sqlite_linux_s390x.go
│ │ ├── sqlite_netbsd_amd64.go
│ │ ├── sqlite_openbsd_amd64.go
│ │ ├── sqlite_openbsd_arm64.go
│ │ ├── sqlite_windows.go
│ │ └── sqlite_windows_386.go
│ ├── mutex.go
│ ├── nodmesg.go
│ ├── norlimit.go
│ ├── pre_update_hook.go
│ ├── result.go
│ ├── rlimit.go
│ ├── rows.go
│ ├── rulimit.go
│ ├── sqlite.go
│ ├── stmt.go
│ ├── tpch.sh
│ ├── tx.go
│ ├── unconvert.sh
│ ├── vtab/
│ │ ├── doc.go
│ │ └── vtab.go
│ └── vtab.go
├── modules.txt
└── pgregory.net/
└── rapid/
├── .editorconfig
├── .gitattributes
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── TODO.md
├── collections.go
├── combinators.go
├── data.go
├── doc.go
├── engine.go
├── floats.go
├── generator.go
├── integers.go
├── make.go
├── persist.go
├── shrink.go
├── statemachine.go
├── strings.go
├── utils.go
└── vis.go
Copy disabled (too large)
Download .txt
Showing preview only (22,581K chars total). Download the full file to get everything.
SYMBOL INDEX (290824 symbols across 2447 files)
FILE: bv-graph-wasm/src/algorithms/articulation.rs
function articulation_points (line 29) | pub fn articulation_points(graph: &DiGraph) -> Vec<usize> {
function tarjan_dfs (line 71) | fn tarjan_dfs(
function build_undirected_neighbors (line 116) | fn build_undirected_neighbors(graph: &DiGraph) -> Vec<Vec<usize>> {
function bridges (line 136) | pub fn bridges(graph: &DiGraph) -> Vec<(usize, usize)> {
function bridge_dfs (line 170) | fn bridge_dfs(
function test_articulation_empty (line 207) | fn test_articulation_empty() {
function test_articulation_single_node (line 214) | fn test_articulation_single_node() {
function test_articulation_two_nodes (line 222) | fn test_articulation_two_nodes() {
function test_articulation_chain (line 234) | fn test_articulation_chain() {
function test_articulation_triangle (line 250) | fn test_articulation_triangle() {
function test_articulation_star (line 266) | fn test_articulation_star() {
function test_articulation_bowtie (line 285) | fn test_articulation_bowtie() {
function test_articulation_bridge_chain (line 318) | fn test_articulation_bridge_chain() {
function test_bridges_chain (line 337) | fn test_bridges_chain() {
function test_bridges_triangle (line 352) | fn test_bridges_triangle() {
function test_articulation_disconnected (line 367) | fn test_articulation_disconnected() {
FILE: bv-graph-wasm/src/algorithms/betweenness.rs
function betweenness (line 17) | pub fn betweenness(graph: &DiGraph) -> Vec<f64> {
function betweenness_approx (line 49) | pub fn betweenness_approx(graph: &DiGraph, sample_size: usize, seed: Opt...
function single_source_betweenness (line 84) | fn single_source_betweenness(graph: &DiGraph, source: usize, bc: &mut [f...
function sample_nodes (line 135) | fn sample_nodes(n: usize, k: usize, seed: Option<u64>) -> Vec<usize> {
function recommend_sample_size (line 169) | pub fn recommend_sample_size(node_count: usize) -> usize {
function test_betweenness_empty (line 183) | fn test_betweenness_empty() {
function test_betweenness_single_node (line 190) | fn test_betweenness_single_node() {
function test_betweenness_two_nodes (line 199) | fn test_betweenness_two_nodes() {
function test_betweenness_line (line 213) | fn test_betweenness_line() {
function test_betweenness_diamond (line 233) | fn test_betweenness_diamond() {
function test_betweenness_star_inward (line 260) | fn test_betweenness_star_inward() {
function test_betweenness_cycle (line 283) | fn test_betweenness_cycle() {
function test_betweenness_approx_fallback (line 301) | fn test_betweenness_approx_fallback() {
function test_betweenness_approx_deterministic (line 320) | fn test_betweenness_approx_deterministic() {
function test_betweenness_chain (line 339) | fn test_betweenness_chain() {
function test_recommend_sample_size (line 365) | fn test_recommend_sample_size() {
FILE: bv-graph-wasm/src/algorithms/coverage.rs
type CoverageItem (line 14) | pub struct CoverageItem {
type CoverageResult (line 23) | pub struct CoverageResult {
function coverage_set (line 45) | pub fn coverage_set(graph: &DiGraph, limit: usize) -> CoverageResult {
function coverage_set_default (line 128) | pub fn coverage_set_default(graph: &DiGraph) -> CoverageResult {
function coverage_nodes (line 133) | pub fn coverage_nodes(graph: &DiGraph, limit: usize) -> Vec<usize> {
function make_graph (line 145) | fn make_graph(edges: &[(usize, usize)]) -> DiGraph {
function test_empty_graph (line 162) | fn test_empty_graph() {
function test_single_edge (line 172) | fn test_single_edge() {
function test_star_graph (line 184) | fn test_star_graph() {
function test_chain_graph (line 198) | fn test_chain_graph() {
function test_limit_respected (line 211) | fn test_limit_respected() {
function test_coverage_ratio (line 220) | fn test_coverage_ratio() {
function test_bidirectional_edges (line 231) | fn test_bidirectional_edges() {
FILE: bv-graph-wasm/src/algorithms/critical_path.rs
function critical_path_heights (line 19) | pub fn critical_path_heights(graph: &DiGraph) -> Vec<f64> {
function critical_path_nodes (line 48) | pub fn critical_path_nodes(graph: &DiGraph) -> Vec<usize> {
function critical_path_length (line 65) | pub fn critical_path_length(graph: &DiGraph) -> f64 {
function test_empty_graph (line 76) | fn test_empty_graph() {
function test_single_node (line 83) | fn test_single_node() {
function test_linear_chain (line 91) | fn test_linear_chain() {
function test_diamond (line 107) | fn test_diamond() {
function test_parallel_chains (line 131) | fn test_parallel_chains() {
function test_cyclic_graph (line 155) | fn test_cyclic_graph() {
function test_critical_path_nodes (line 171) | fn test_critical_path_nodes() {
function test_multiple_critical_path_nodes (line 186) | fn test_multiple_critical_path_nodes() {
function test_wide_graph (line 206) | fn test_wide_graph() {
FILE: bv-graph-wasm/src/algorithms/cycles.rs
type SCCResult (line 13) | pub struct SCCResult {
function tarjan_scc (line 26) | pub fn tarjan_scc(graph: &DiGraph) -> SCCResult {
function has_cycles (line 110) | pub fn has_cycles(graph: &DiGraph) -> bool {
function enumerate_cycles (line 125) | pub fn enumerate_cycles(graph: &DiGraph, max_cycles: usize) -> Vec<Vec<u...
type CycleEnumerationResult (line 244) | pub struct CycleEnumerationResult {
function enumerate_cycles_with_info (line 254) | pub fn enumerate_cycles_with_info(graph: &DiGraph, max_cycles: usize) ->...
type CycleBreakItem (line 270) | pub struct CycleBreakItem {
type CycleBreakResult (line 287) | pub struct CycleBreakResult {
function cycle_break_suggestions (line 309) | pub fn cycle_break_suggestions(
function quick_cycle_break_edges (line 393) | pub fn quick_cycle_break_edges(graph: &DiGraph, limit: usize) -> Vec<Cyc...
function test_scc_empty (line 438) | fn test_scc_empty() {
function test_scc_single_node (line 446) | fn test_scc_single_node() {
function test_scc_self_loop (line 456) | fn test_scc_self_loop() {
function test_scc_simple_cycle (line 467) | fn test_scc_simple_cycle() {
function test_scc_dag (line 487) | fn test_scc_dag() {
function test_scc_two_cycles (line 503) | fn test_scc_two_cycles() {
function test_enumerate_empty (line 522) | fn test_enumerate_empty() {
function test_enumerate_dag (line 529) | fn test_enumerate_dag() {
function test_enumerate_simple_cycle (line 543) | fn test_enumerate_simple_cycle() {
function test_enumerate_two_node_cycle (line 559) | fn test_enumerate_two_node_cycle() {
function test_enumerate_max_limit (line 573) | fn test_enumerate_max_limit() {
function test_enumerate_diamond_with_back_edge (line 596) | fn test_enumerate_diamond_with_back_edge() {
function test_enumerate_with_info (line 619) | fn test_enumerate_with_info() {
function test_has_cycles (line 640) | fn test_has_cycles() {
function test_complex_graph (line 656) | fn test_complex_graph() {
function test_cycle_break_dag (line 682) | fn test_cycle_break_dag() {
function test_cycle_break_simple (line 698) | fn test_cycle_break_simple() {
function test_cycle_break_triangle (line 717) | fn test_cycle_break_triangle() {
function test_cycle_break_shared_edge (line 738) | fn test_cycle_break_shared_edge() {
function test_cycle_break_includes_ids (line 766) | fn test_cycle_break_includes_ids() {
function test_cycle_break_limit (line 783) | fn test_cycle_break_limit() {
function test_quick_cycle_break (line 799) | fn test_quick_cycle_break() {
function test_quick_cycle_break_dag (line 817) | fn test_quick_cycle_break_dag() {
function test_cycle_break_disconnected_cycles (line 828) | fn test_cycle_break_disconnected_cycles() {
function test_cycle_break_collateral_ordering (line 848) | fn test_cycle_break_collateral_ordering() {
FILE: bv-graph-wasm/src/algorithms/eigenvector.rs
type EigenvectorConfig (line 9) | pub struct EigenvectorConfig {
method default (line 17) | fn default() -> Self {
function eigenvector (line 31) | pub fn eigenvector(graph: &DiGraph, config: &EigenvectorConfig) -> Vec<f...
function eigenvector_default (line 86) | pub fn eigenvector_default(graph: &DiGraph) -> Vec<f64> {
function test_eigenvector_empty (line 95) | fn test_eigenvector_empty() {
function test_eigenvector_single_node (line 102) | fn test_eigenvector_single_node() {
function test_eigenvector_chain (line 112) | fn test_eigenvector_chain() {
function test_eigenvector_cycle (line 134) | fn test_eigenvector_cycle() {
function test_eigenvector_star (line 155) | fn test_eigenvector_star() {
function test_eigenvector_hub_with_cycle (line 175) | fn test_eigenvector_hub_with_cycle() {
function test_eigenvector_diamond (line 200) | fn test_eigenvector_diamond() {
function test_eigenvector_unit_length (line 228) | fn test_eigenvector_unit_length() {
function test_eigenvector_disconnected (line 248) | fn test_eigenvector_disconnected() {
function test_eigenvector_convergence (line 267) | fn test_eigenvector_convergence() {
FILE: bv-graph-wasm/src/algorithms/hits.rs
type HITSConfig (line 14) | pub struct HITSConfig {
method default (line 22) | fn default() -> Self {
type HITSResult (line 32) | pub struct HITSResult {
function hits (line 55) | pub fn hits(graph: &DiGraph, config: &HITSConfig) -> HITSResult {
function hits_default (line 123) | pub fn hits_default(graph: &DiGraph) -> HITSResult {
function normalize_l2 (line 128) | fn normalize_l2(vec: &mut [f64]) {
function test_hits_empty (line 142) | fn test_hits_empty() {
function test_hits_single_node (line 150) | fn test_hits_single_node() {
function test_hits_chain (line 159) | fn test_hits_chain() {
function test_hits_star_hub (line 182) | fn test_hits_star_hub() {
function test_hits_star_authority (line 208) | fn test_hits_star_authority() {
function test_hits_bipartite (line 234) | fn test_hits_bipartite() {
function test_hits_cycle (line 259) | fn test_hits_cycle() {
function test_hits_scores_normalized (line 284) | fn test_hits_scores_normalized() {
function test_hits_convergence (line 315) | fn test_hits_convergence() {
FILE: bv-graph-wasm/src/algorithms/k_paths.rs
type CriticalPath (line 12) | pub struct CriticalPath {
type KPathsResult (line 21) | pub struct KPathsResult {
function k_critical_paths (line 45) | pub fn k_critical_paths(graph: &DiGraph, k: usize) -> KPathsResult {
function k_critical_paths_default (line 121) | pub fn k_critical_paths_default(graph: &DiGraph) -> KPathsResult {
function k_path_nodes (line 126) | pub fn k_path_nodes(graph: &DiGraph, k: usize) -> Vec<Vec<usize>> {
function make_graph (line 138) | fn make_graph(edges: &[(usize, usize)]) -> DiGraph {
function test_empty_graph (line 155) | fn test_empty_graph() {
function test_single_node (line 163) | fn test_single_node() {
function test_single_edge (line 172) | fn test_single_edge() {
function test_chain (line 183) | fn test_chain() {
function test_diamond (line 196) | fn test_diamond() {
function test_multiple_paths (line 208) | fn test_multiple_paths() {
function test_k_limit (line 222) | fn test_k_limit() {
function test_cycle_returns_empty (line 231) | fn test_cycle_returns_empty() {
FILE: bv-graph-wasm/src/algorithms/kcore.rs
function kcore (line 16) | pub fn kcore(graph: &DiGraph) -> Vec<u32> {
function degeneracy (line 90) | pub fn degeneracy(graph: &DiGraph) -> u32 {
function nodes_in_kcore (line 95) | pub fn nodes_in_kcore(graph: &DiGraph, k: u32) -> Vec<usize> {
function test_kcore_empty (line 109) | fn test_kcore_empty() {
function test_kcore_single_node (line 116) | fn test_kcore_single_node() {
function test_kcore_chain (line 124) | fn test_kcore_chain() {
function test_kcore_triangle (line 147) | fn test_kcore_triangle() {
function test_kcore_star (line 166) | fn test_kcore_star() {
function test_kcore_clique_with_pendant (line 187) | fn test_kcore_clique_with_pendant() {
function test_kcore_disconnected (line 225) | fn test_kcore_disconnected() {
function test_degeneracy (line 237) | fn test_degeneracy() {
function test_nodes_in_kcore (line 251) | fn test_nodes_in_kcore() {
function test_kcore_diamond (line 275) | fn test_kcore_diamond() {
FILE: bv-graph-wasm/src/algorithms/pagerank.rs
type PageRankConfig (line 9) | pub struct PageRankConfig {
method default (line 19) | fn default() -> Self {
function pagerank (line 34) | pub fn pagerank(graph: &DiGraph, config: &PageRankConfig) -> Vec<f64> {
function pagerank_default (line 96) | pub fn pagerank_default(graph: &DiGraph) -> Vec<f64> {
function test_pagerank_empty (line 105) | fn test_pagerank_empty() {
function test_pagerank_single_node (line 112) | fn test_pagerank_single_node() {
function test_pagerank_chain (line 122) | fn test_pagerank_chain() {
function test_pagerank_cycle (line 138) | fn test_pagerank_cycle() {
function test_pagerank_star (line 155) | fn test_pagerank_star() {
function test_pagerank_two_chains (line 180) | fn test_pagerank_two_chains() {
function test_pagerank_sum_to_one (line 200) | fn test_pagerank_sum_to_one() {
function test_pagerank_dangling_nodes (line 220) | fn test_pagerank_dangling_nodes() {
function test_pagerank_convergence (line 241) | fn test_pagerank_convergence() {
function test_pagerank_diamond (line 267) | fn test_pagerank_diamond() {
FILE: bv-graph-wasm/src/algorithms/parallel_cut.rs
type ParallelCutItem (line 11) | pub struct ParallelCutItem {
type ParallelCutResult (line 22) | pub struct ParallelCutResult {
function parallel_cut_suggestions (line 43) | pub fn parallel_cut_suggestions(
function parallel_cut_default (line 107) | pub fn parallel_cut_default(graph: &DiGraph, closed_set: &[bool]) -> Par...
function unblock_ranking (line 113) | pub fn unblock_ranking(graph: &DiGraph, closed_set: &[bool], limit: usiz...
function make_graph (line 144) | fn make_graph(edges: &[(usize, usize)]) -> DiGraph {
function test_empty_graph (line 161) | fn test_empty_graph() {
function test_single_node (line 171) | fn test_single_node() {
function test_chain_no_gain (line 183) | fn test_chain_no_gain() {
function test_fork_has_gain (line 195) | fn test_fork_has_gain() {
function test_partially_closed (line 209) | fn test_partially_closed() {
function test_diamond_with_one_closed (line 224) | fn test_diamond_with_one_closed() {
function test_multiple_forks (line 237) | fn test_multiple_forks() {
function test_limit_respected (line 252) | fn test_limit_respected() {
function test_current_actionable_count (line 271) | fn test_current_actionable_count() {
FILE: bv-graph-wasm/src/algorithms/slack.rs
function slack (line 24) | pub fn slack(graph: &DiGraph) -> Vec<f64> {
function zero_slack_nodes (line 80) | pub fn zero_slack_nodes(graph: &DiGraph) -> Vec<usize> {
function total_float (line 90) | pub fn total_float(graph: &DiGraph) -> f64 {
function test_slack_empty (line 99) | fn test_slack_empty() {
function test_slack_single_node (line 106) | fn test_slack_single_node() {
function test_slack_chain (line 115) | fn test_slack_chain() {
function test_slack_parallel_chains (line 132) | fn test_slack_parallel_chains() {
function test_slack_diamond (line 157) | fn test_slack_diamond() {
function test_slack_with_shortcut (line 183) | fn test_slack_with_shortcut() {
function test_slack_branch_with_different_lengths (line 209) | fn test_slack_branch_with_different_lengths() {
function test_slack_cyclic (line 242) | fn test_slack_cyclic() {
function test_zero_slack_nodes (line 258) | fn test_zero_slack_nodes() {
function test_total_float (line 279) | fn test_total_float() {
function test_slack_non_negative (line 296) | fn test_slack_non_negative() {
FILE: bv-graph-wasm/src/algorithms/subgraph.rs
function extract_subgraph (line 23) | pub fn extract_subgraph(graph: &DiGraph, node_indices: &[usize]) -> DiGr...
function extract_subgraph_by_ids (line 60) | pub fn extract_subgraph_by_ids(graph: &DiGraph, ids: &[&str]) -> DiGraph {
function reachable_subgraph_from (line 69) | pub fn reachable_subgraph_from(graph: &DiGraph, source: usize) -> DiGraph {
function reachable_from (line 78) | pub fn reachable_from(graph: &DiGraph, source: usize) -> Vec<usize> {
function reachable_to (line 109) | pub fn reachable_to(graph: &DiGraph, target: usize) -> Vec<usize> {
function dependency_cone (line 137) | pub fn dependency_cone(graph: &DiGraph, node: usize) -> Vec<usize> {
function test_subgraph_empty (line 155) | fn test_subgraph_empty() {
function test_subgraph_single_node (line 163) | fn test_subgraph_single_node() {
function test_subgraph_preserves_edges (line 175) | fn test_subgraph_preserves_edges() {
function test_subgraph_drops_external_edges (line 193) | fn test_subgraph_drops_external_edges() {
function test_subgraph_diamond (line 209) | fn test_subgraph_diamond() {
function test_subgraph_by_ids (line 237) | fn test_subgraph_by_ids() {
function test_reachable_from (line 251) | fn test_reachable_from() {
function test_reachable_to (line 279) | fn test_reachable_to() {
function test_dependency_cone (line 299) | fn test_dependency_cone() {
function test_reachable_subgraph (line 319) | fn test_reachable_subgraph() {
function test_subgraph_runs_algorithms (line 341) | fn test_subgraph_runs_algorithms() {
function test_subgraph_invalid_indices (line 363) | fn test_subgraph_invalid_indices() {
function test_subgraph_duplicate_indices (line 374) | fn test_subgraph_duplicate_indices() {
FILE: bv-graph-wasm/src/algorithms/topk_set.rs
type TopKSetItem (line 13) | pub struct TopKSetItem {
type TopKSetResult (line 24) | pub struct TopKSetResult {
function topk_set (line 50) | pub fn topk_set(graph: &DiGraph, closed_set: &[bool], k: usize) -> TopKS...
function topk_set_default (line 122) | pub fn topk_set_default(graph: &DiGraph, closed_set: &[bool]) -> TopKSet...
function make_graph (line 130) | fn make_graph(edges: &[(usize, usize)]) -> DiGraph {
function test_empty_graph (line 147) | fn test_empty_graph() {
function test_single_node (line 155) | fn test_single_node() {
function test_simple_chain (line 165) | fn test_simple_chain() {
function test_fork_pattern (line 179) | fn test_fork_pattern() {
function test_multiple_hubs (line 191) | fn test_multiple_hubs() {
function test_submodularity (line 207) | fn test_submodularity() {
function test_partially_closed (line 219) | fn test_partially_closed() {
function test_limit_respected (line 232) | fn test_limit_respected() {
function test_deterministic (line 247) | fn test_deterministic() {
function test_monotonic_marginal_gains (line 261) | fn test_monotonic_marginal_gains() {
function test_open_nodes_count (line 278) | fn test_open_nodes_count() {
function test_all_closed (line 288) | fn test_all_closed() {
function test_deep_cascade (line 298) | fn test_deep_cascade() {
FILE: bv-graph-wasm/src/algorithms/topo.rs
type TopoSortResult (line 11) | pub struct TopoSortResult {
function topological_sort (line 29) | pub fn topological_sort(graph: &DiGraph) -> Option<Vec<usize>> {
function is_dag (line 67) | pub fn is_dag(graph: &DiGraph) -> bool {
function topological_sort_result (line 72) | pub fn topological_sort_result(graph: &DiGraph) -> TopoSortResult {
function test_empty_graph (line 87) | fn test_empty_graph() {
function test_single_node (line 94) | fn test_single_node() {
function test_linear_chain (line 102) | fn test_linear_chain() {
function test_diamond (line 116) | fn test_diamond() {
function test_cycle_detection (line 142) | fn test_cycle_detection() {
function test_self_loop (line 157) | fn test_self_loop() {
function test_disconnected (line 168) | fn test_disconnected() {
function test_is_dag (line 193) | fn test_is_dag() {
function test_deterministic (line 209) | fn test_deterministic() {
FILE: bv-graph-wasm/src/graph.rs
type DiGraph (line 10) | pub struct DiGraph {
method new (line 40) | pub fn new() -> DiGraph {
method with_capacity (line 52) | pub fn with_capacity(node_capacity: usize, edge_capacity: usize) -> Di...
method add_node (line 65) | pub fn add_node(&mut self, id: &str) -> usize {
method add_edge (line 79) | pub fn add_edge(&mut self, from: usize, to: usize) {
method node_count (line 97) | pub fn node_count(&self) -> usize {
method edge_count (line 103) | pub fn edge_count(&self) -> usize {
method density (line 108) | pub fn density(&self) -> f64 {
method node_id (line 120) | pub fn node_id(&self, idx: usize) -> Option<String> {
method node_idx (line 126) | pub fn node_idx(&self, id: &str) -> Option<usize> {
method node_ids (line 132) | pub fn node_ids(&self) -> JsValue {
method out_degree (line 138) | pub fn out_degree(&self, node: usize) -> usize {
method in_degree (line 144) | pub fn in_degree(&self, node: usize) -> usize {
method out_degrees (line 150) | pub fn out_degrees(&self) -> JsValue {
method in_degrees (line 157) | pub fn in_degrees(&self) -> JsValue {
method to_json (line 164) | pub fn to_json(&self) -> String {
method from_json (line 174) | pub fn from_json(json: &str) -> Result<DiGraph, JsError> {
method successors (line 189) | pub fn successors(&self, node: usize) -> JsValue {
method predecessors (line 195) | pub fn predecessors(&self, node: usize) -> JsValue {
method topological_sort (line 203) | pub fn topological_sort(&self) -> JsValue {
method is_dag (line 213) | pub fn is_dag(&self) -> bool {
method critical_path_heights (line 221) | pub fn critical_path_heights(&self) -> JsValue {
method critical_path_nodes (line 229) | pub fn critical_path_nodes(&self) -> JsValue {
method critical_path_length (line 237) | pub fn critical_path_length(&self) -> f64 {
method pagerank (line 245) | pub fn pagerank(&self, damping: f64, max_iterations: u32) -> JsValue {
method pagerank_default (line 258) | pub fn pagerank_default(&self) -> JsValue {
method eigenvector (line 267) | pub fn eigenvector(&self, iterations: u32) -> JsValue {
method eigenvector_default (line 279) | pub fn eigenvector_default(&self) -> JsValue {
method betweenness (line 289) | pub fn betweenness(&self) -> JsValue {
method betweenness_approx (line 299) | pub fn betweenness_approx(&self, sample_size: usize) -> JsValue {
method hits (line 308) | pub fn hits(&self, tolerance: f64, max_iterations: u32) -> JsValue {
method hits_default (line 320) | pub fn hits_default(&self) -> JsValue {
method kcore (line 330) | pub fn kcore(&self) -> JsValue {
method degeneracy (line 338) | pub fn degeneracy(&self) -> u32 {
method articulation_points (line 347) | pub fn articulation_points(&self) -> JsValue {
method bridges (line 357) | pub fn bridges(&self) -> JsValue {
method tarjan_scc (line 366) | pub fn tarjan_scc(&self) -> JsValue {
method has_cycles (line 374) | pub fn has_cycles(&self) -> bool {
method enumerate_cycles (line 382) | pub fn enumerate_cycles(&self, max_cycles: usize) -> JsValue {
method cycle_break_suggestions (line 392) | pub fn cycle_break_suggestions(&self, limit: usize, max_cycles_to_enum...
method quick_cycle_break_edges (line 402) | pub fn quick_cycle_break_edges(&self, limit: usize) -> JsValue {
method slack (line 413) | pub fn slack(&self) -> JsValue {
method total_float (line 421) | pub fn total_float(&self) -> f64 {
method coverage_set (line 430) | pub fn coverage_set(&self, limit: usize) -> JsValue {
method coverage_set_default (line 438) | pub fn coverage_set_default(&self) -> JsValue {
method coverage_nodes (line 446) | pub fn coverage_nodes(&self, limit: usize) -> JsValue {
method k_critical_paths (line 455) | pub fn k_critical_paths(&self, k: usize) -> JsValue {
method k_critical_paths_default (line 463) | pub fn k_critical_paths_default(&self) -> JsValue {
method parallel_cut_suggestions (line 473) | pub fn parallel_cut_suggestions(&self, closed_set: &[u8], limit: usize...
method parallel_cut_default (line 483) | pub fn parallel_cut_default(&self, closed_set: &[u8]) -> JsValue {
method unblock_ranking (line 494) | pub fn unblock_ranking(&self, closed_set: &[u8], limit: usize) -> JsVa...
method subgraph (line 504) | pub fn subgraph(&self, indices: &[usize]) -> DiGraph {
method reachable_from (line 511) | pub fn reachable_from(&self, source: usize) -> JsValue {
method reachable_to (line 519) | pub fn reachable_to(&self, target: usize) -> JsValue {
method dependency_cone (line 527) | pub fn dependency_cone(&self, node: usize) -> JsValue {
method blockers (line 540) | pub fn blockers(&self, node: usize) -> JsValue {
method dependents (line 549) | pub fn dependents(&self, node: usize) -> JsValue {
method actionable_nodes (line 558) | pub fn actionable_nodes(&self, closed_set: &[u8]) -> JsValue {
method open_blockers (line 568) | pub fn open_blockers(&self, node: usize, closed_set: &[u8]) -> JsValue {
method open_blocker_count (line 578) | pub fn open_blocker_count(&self, node: usize, closed_set: &[u8]) -> us...
method what_if_close (line 592) | pub fn what_if_close(&self, node: usize, closed_set: &[u8]) -> JsValue {
method what_if_close_batch (line 602) | pub fn what_if_close_batch(&self, nodes: &[usize], closed_set: &[u8]) ...
method top_what_if (line 613) | pub fn top_what_if(&self, closed_set: &[u8], limit: usize) -> JsValue {
method all_what_if (line 624) | pub fn all_what_if(&self, closed_set: &[u8], limit: usize) -> JsValue {
method topk_set (line 640) | pub fn topk_set(&self, closed_set: &[u8], k: usize) -> JsValue {
method topk_set_default (line 650) | pub fn topk_set_default(&self, closed_set: &[u8]) -> JsValue {
method successors_slice (line 661) | pub(crate) fn successors_slice(&self, node: usize) -> &[usize] {
method predecessors_slice (line 666) | pub(crate) fn predecessors_slice(&self, node: usize) -> &[usize] {
method edges (line 671) | pub(crate) fn edges(&self) -> impl Iterator<Item = (usize, usize)> + '_ {
method edges_vec (line 679) | fn edges_vec(&self) -> Vec<(usize, usize)> {
method len (line 684) | pub(crate) fn len(&self) -> usize {
method is_empty (line 690) | pub(crate) fn is_empty(&self) -> bool {
type GraphSnapshot (line 31) | pub struct GraphSnapshot {
method default (line 696) | fn default() -> Self {
function test_new_graph (line 706) | fn test_new_graph() {
function test_add_node_idempotent (line 713) | fn test_add_node_idempotent() {
function test_add_edge_idempotent (line 722) | fn test_add_edge_idempotent() {
function test_degrees (line 732) | fn test_degrees() {
function test_density (line 751) | fn test_density() {
function test_json_roundtrip (line 766) | fn test_json_roundtrip() {
FILE: bv-graph-wasm/src/lib.rs
function init (line 29) | pub fn init() {
function version (line 36) | pub fn version() -> String {
FILE: bv-graph-wasm/src/reachability.rs
function reachable_from (line 11) | pub fn reachable_from(graph: &DiGraph, source: usize) -> Vec<usize> {
function reachable_to (line 39) | pub fn reachable_to(graph: &DiGraph, target: usize) -> Vec<usize> {
function blockers (line 67) | pub fn blockers(graph: &DiGraph, node: usize) -> Vec<usize> {
function dependents (line 73) | pub fn dependents(graph: &DiGraph, node: usize) -> Vec<usize> {
function is_actionable (line 79) | pub fn is_actionable(graph: &DiGraph, node: usize, closed_set: &[bool]) ...
function actionable_nodes (line 88) | pub fn actionable_nodes(graph: &DiGraph, closed_set: &[bool]) -> Vec<usi...
function open_blockers (line 96) | pub fn open_blockers(graph: &DiGraph, node: usize, closed_set: &[bool]) ...
function open_blocker_count (line 106) | pub fn open_blocker_count(graph: &DiGraph, node: usize, closed_set: &[bo...
function test_reachable_from_empty (line 119) | fn test_reachable_from_empty() {
function test_reachable_from_single (line 125) | fn test_reachable_from_single() {
function test_reachable_from_chain (line 133) | fn test_reachable_from_chain() {
function test_reachable_from_diamond (line 158) | fn test_reachable_from_diamond() {
function test_reachable_to_chain (line 184) | fn test_reachable_to_chain() {
function test_reachable_to_diamond (line 209) | fn test_reachable_to_diamond() {
function test_reachable_invalid_node (line 235) | fn test_reachable_invalid_node() {
function test_blockers_and_dependents (line 243) | fn test_blockers_and_dependents() {
function test_is_actionable (line 262) | fn test_is_actionable() {
function test_actionable_nodes (line 288) | fn test_actionable_nodes() {
function test_open_blockers (line 323) | fn test_open_blockers() {
function test_open_blocker_count (line 351) | fn test_open_blocker_count() {
function test_disconnected (line 371) | fn test_disconnected() {
function test_cycle (line 388) | fn test_cycle() {
FILE: bv-graph-wasm/src/whatif.rs
type WhatIfResult (line 13) | pub struct WhatIfResult {
method empty (line 28) | pub fn empty() -> Self {
function what_if_close (line 48) | pub fn what_if_close(graph: &DiGraph, node: usize, closed_set: &[bool]) ...
function count_cascade (line 100) | fn count_cascade(graph: &DiGraph, roots: &[usize], initial_closed: &[boo...
type TopWhatIfEntry (line 152) | pub struct TopWhatIfEntry {
function top_what_if (line 168) | pub fn top_what_if(graph: &DiGraph, closed_set: &[bool], limit: usize) -...
function all_what_if (line 201) | pub fn all_what_if(graph: &DiGraph, closed_set: &[bool], limit: usize) -...
function what_if_close_batch (line 238) | pub fn what_if_close_batch(
function test_what_if_empty (line 298) | fn test_what_if_empty() {
function test_what_if_single_node (line 306) | fn test_what_if_single_node() {
function test_what_if_simple_chain (line 315) | fn test_what_if_simple_chain() {
function test_what_if_diamond (line 336) | fn test_what_if_diamond() {
function test_what_if_partial_close (line 362) | fn test_what_if_partial_close() {
function test_what_if_multi_blocker_not_ready (line 381) | fn test_what_if_multi_blocker_not_ready() {
function test_what_if_already_closed (line 399) | fn test_what_if_already_closed() {
function test_what_if_wide_fanout (line 412) | fn test_what_if_wide_fanout() {
function test_what_if_deep_cascade (line 431) | fn test_what_if_deep_cascade() {
function test_top_what_if (line 449) | fn test_top_what_if() {
function test_top_what_if_limit (line 481) | fn test_top_what_if_limit() {
function test_what_if_batch_simple (line 496) | fn test_what_if_batch_simple() {
function test_what_if_batch_cascade (line 514) | fn test_what_if_batch_cascade() {
function test_all_what_if (line 540) | fn test_all_what_if() {
function test_what_if_cycle_handling (line 557) | fn test_what_if_cycle_handling() {
function test_what_if_disconnected_components (line 579) | fn test_what_if_disconnected_components() {
function test_cascade_order (line 604) | fn test_cascade_order() {
FILE: bv-graph-wasm/tests/golden_test.rs
type TestGraphFile (line 17) | struct TestGraphFile {
type GoldenMetrics (line 27) | struct GoldenMetrics {
function load_test_graph (line 48) | fn load_test_graph(path: &Path) -> (DiGraph, TestGraphFile) {
function load_golden_metrics (line 64) | fn load_golden_metrics(path: &Path) -> GoldenMetrics {
function assert_float_eq (line 70) | fn assert_float_eq(actual: f64, expected: f64, tolerance: f64, name: &st...
function validate_array_against_map (line 80) | fn validate_array_against_map(
constant TESTDATA_DIR (line 103) | const TESTDATA_DIR: &str = "../testdata";
function graph_and_golden_paths (line 105) | fn graph_and_golden_paths(name: &str) -> (std::path::PathBuf, std::path:...
function skip_if_missing (line 111) | fn skip_if_missing(graph_path: &Path, golden_path: &Path) -> bool {
function test_golden_chain_10_basic (line 124) | fn test_golden_chain_10_basic() {
function test_golden_diamond_5_basic (line 136) | fn test_golden_diamond_5_basic() {
function test_golden_star_10_basic (line 149) | fn test_golden_star_10_basic() {
function test_golden_cycle_5_detection (line 162) | fn test_golden_cycle_5_detection() {
function test_golden_complex_20_basic (line 174) | fn test_golden_complex_20_basic() {
function test_golden_chain_10_pagerank (line 190) | fn test_golden_chain_10_pagerank() {
function test_golden_diamond_5_pagerank (line 202) | fn test_golden_diamond_5_pagerank() {
function test_golden_star_10_pagerank (line 214) | fn test_golden_star_10_pagerank() {
function test_golden_complex_20_pagerank (line 226) | fn test_golden_complex_20_pagerank() {
function test_golden_chain_10_betweenness (line 242) | fn test_golden_chain_10_betweenness() {
function test_golden_diamond_5_betweenness (line 254) | fn test_golden_diamond_5_betweenness() {
function test_golden_complex_20_betweenness (line 266) | fn test_golden_complex_20_betweenness() {
function test_golden_chain_10_critical_path (line 282) | fn test_golden_chain_10_critical_path() {
function test_golden_diamond_5_critical_path (line 294) | fn test_golden_diamond_5_critical_path() {
function test_golden_complex_20_critical_path (line 306) | fn test_golden_complex_20_critical_path() {
function test_eigenvector_sum_to_one (line 329) | fn test_eigenvector_sum_to_one() {
function test_eigenvector_non_negative (line 349) | fn test_eigenvector_non_negative() {
function test_golden_chain_10_hits (line 369) | fn test_golden_chain_10_hits() {
function test_golden_star_10_hits (line 382) | fn test_golden_star_10_hits() {
function test_golden_chain_10_kcore (line 399) | fn test_golden_chain_10_kcore() {
function test_golden_chain_10_slack (line 420) | fn test_golden_chain_10_slack() {
function test_golden_diamond_5_slack (line 434) | fn test_golden_diamond_5_slack() {
function test_golden_all_density (line 452) | fn test_golden_all_density() {
function test_golden_cycle_5_pagerank (line 473) | fn test_golden_cycle_5_pagerank() {
function test_golden_degrees (line 489) | fn test_golden_degrees() {
FILE: cmd/bv/burndown_test.go
function TestCalculateBurndownAt_OnTrackWithProgress (line 10) | func TestCalculateBurndownAt_OnTrackWithProgress(t *testing.T) {
function TestCalculateBurndownAt_NoProgressSetsOnTrackFalse (line 64) | func TestCalculateBurndownAt_NoProgressSetsOnTrackFalse(t *testing.T) {
FILE: cmd/bv/main.go
type flagHelpSection (line 52) | type flagHelpSection struct
function isOneOf (line 182) | func isOneOf(name string, values ...string) bool {
function hasAnyPrefix (line 191) | func hasAnyPrefix(name string, prefixes ...string) bool {
type modifierFlagRule (line 200) | type modifierFlagRule struct
type enumFlagRule (line 205) | type enumFlagRule struct
type primaryCommandGroup (line 210) | type primaryCommandGroup struct
function validateModifierFlags (line 214) | func validateModifierFlags(flags *flag.FlagSet, rules []modifierFlagRule...
function validateEnumFlags (line 229) | func validateEnumFlags(flags *flag.FlagSet, rules []enumFlagRule) error {
function validateExclusivePrimaryCommands (line 260) | func validateExclusivePrimaryCommands(flags *flag.FlagSet, groups []prim...
function activePrimaryFlags (line 277) | func activePrimaryFlags(flags *flag.FlagSet, names []string) []string {
function joinAllowedValues (line 287) | func joinAllowedValues(values []string) string {
function hasActiveRequiredFlag (line 291) | func hasActiveRequiredFlag(flags *flag.FlagSet, names ...string) bool {
function isFlagActive (line 300) | func isFlagActive(flags *flag.FlagSet, name string) bool {
function formatRequiredFlags (line 318) | func formatRequiredFlags(names []string) string {
function newRootCommand (line 333) | func newRootCommand(run func() error) *cobra.Command {
function rewriteSingleDashLongFlags (line 358) | func rewriteSingleDashLongFlags(args []string, flags *flag.FlagSet) []st...
function printRootHelp (line 380) | func printRootHelp(cmd *cobra.Command) {
function collectFlagNames (line 402) | func collectFlagNames(flags *flag.FlagSet, seen map[string]bool, match f...
function markFlagNamesSeen (line 413) | func markFlagNamesSeen(seen map[string]bool, names []string) {
function printFlagSection (line 419) | func printFlagSection(out io.Writer, allFlags *flag.FlagSet, title strin...
function main (line 439) | func main() {
function runTUIProgram (line 4464) | func runTUIProgram(m ui.Model) error {
function countEdges (line 4534) | func countEdges(issues []model.Issue) int {
function loadBackgroundModeFromUserConfig (line 4546) | func loadBackgroundModeFromUserConfig() (bool, bool) {
function printDiffSummary (line 4573) | func printDiffSummary(diff *analysis.SnapshotDiff, since string) {
function repeatChar (line 4684) | func repeatChar(c rune, n int) string {
function formatCycle (line 4693) | func formatCycle(cycle []string) string {
function naturalLess (line 4706) | func naturalLess(s1, s2 string) bool {
function applyRecipeFilters (line 4744) | func applyRecipeFilters(issues []model.Issue, r *recipe.Recipe) []model....
function applyRecipeSort (line 4911) | func applyRecipeSort(issues []model.Issue, r *recipe.Recipe) []model.Iss...
function runProfileStartup (line 4958) | func runProfileStartup(issues []model.Issue, loadDuration time.Duration,...
function printProfileReport (line 5024) | func printProfileReport(profile *analysis.StartupProfile, loadDuration, ...
function printMetricLine (line 5077) | func printMetricLine(name string, duration time.Duration, timedOut, comp...
function printCyclesLine (line 5090) | func printCyclesLine(profile *analysis.StartupProfile) {
function formatDuration (line 5107) | func formatDuration(d time.Duration) string {
function getSizeTier (line 5115) | func getSizeTier(nodeCount int) string {
function generateProfileRecommendations (line 5129) | func generateProfileRecommendations(profile *analysis.StartupProfile, lo...
function filterByRepo (line 5185) | func filterByRepo(issues []model.Issue, repoFilter string) []model.Issue {
function buildMetricItems (line 5231) | func buildMetricItems(metrics map[string]float64, limit int) []baseline....
function buildAttentionReason (line 5256) | func buildAttentionReason(score analysis.LabelAttentionScore) string {
function copyViewerAssets (line 5293) | func copyViewerAssets(outputDir, title string) error {
function maybeBuildHybridWasmAssets (line 5370) | func maybeBuildHybridWasmAssets(assetsDir string) error {
function findViewerAssetsDir (line 5398) | func findViewerAssetsDir() string {
function copyFile (line 5426) | func copyFile(src, dst string) error {
function copyFileWithTitleAndCacheBusting (line 5447) | func copyFileWithTitleAndCacheBusting(src, dst, title string) error {
function copyDir (line 5469) | func copyDir(src, dst string) error {
function generateREADME (line 5504) | func generateREADME(bundlePath, title, pagesURL string, issues []model.I...
function truncateTitle (line 5746) | func truncateTitle(title string, maxLen int) string {
function escapeMarkdownTableCell (line 5758) | func escapeMarkdownTableCell(s string) string {
function runPreviewServer (line 5767) | func runPreviewServer(dir string, liveReload bool) error {
function runPagesWizard (line 5775) | func runPagesWizard(beadsPath string) error {
type pagesSource (line 5978) | type pagesSource struct
type pagesSourceCandidate (line 5985) | type pagesSourceCandidate struct
function resolvePagesSource (line 5990) | func resolvePagesSource(config *export.WizardConfig, beadsPath string) (...
function isSuspiciousIssueCount (line 6053) | func isSuspiciousIssueCount(current, expected int) bool {
function findBetterPagesSource (line 6067) | func findBetterPagesSource(config *export.WizardConfig, current pagesSou...
function discoverBeadsDirs (line 6186) | func discoverBeadsDirs(root string, maxDepth int) []string {
function countIssuesInBeadsDir (line 6233) | func countIssuesInBeadsDir(beadsDir string) (int, error) {
type beadsMetadata (line 6272) | type beadsMetadata struct
function metadataPreferredSource (line 6277) | func metadataPreferredSource(beadsDir string) (string, datasource.Source...
function loadIssuesFromBeadsDir (line 6308) | func loadIssuesFromBeadsDir(beadsDir string) ([]model.Issue, error) {
function absInt (line 6332) | func absInt(v int) int {
type BurndownOutput (line 6340) | type BurndownOutput struct
type ScopeChangeEvent (line 6362) | type ScopeChangeEvent struct
type sprintSnapshot (line 6369) | type sprintSnapshot struct
type scopeCommit (line 6375) | type scopeCommit struct
function computeSprintScopeChanges (line 6382) | func computeSprintScopeChanges(repoPath string, sprint *model.Sprint, is...
function parseGitHeaderLine (line 6542) | func parseGitHeaderLine(line string) (sha string, ts time.Time, ok bool) {
function parseSprintJSONLine (line 6557) | func parseSprintJSONLine(line string) (sprintSnapshot, bool) {
function setDifference (line 6568) | func setDifference(a, b []string) []string {
function calculateBurndownAt (line 6589) | func calculateBurndownAt(sprint *model.Sprint, issues []model.Issue, now...
function generateDailyBurndown (line 6688) | func generateDailyBurndown(sprint *model.Sprint, issues []model.Issue, n...
function generateIdealLine (line 6718) | func generateIdealLine(sprint *model.Sprint, totalIssues int) []model.Bu...
function generateJQHelpers (line 6744) | func generateJQHelpers() string {
type TimeTravelHistory (line 6828) | type TimeTravelHistory struct
type TimeTravelCommit (line 6834) | type TimeTravelCommit struct
function generateHistoryForExport (line 6843) | func generateHistoryForExport(issues []model.Issue) (*TimeTravelHistory,...
type RobotEnvelope (line 6973) | type RobotEnvelope struct
type RobotMeta (line 6982) | type RobotMeta struct
function NewRobotEnvelope (line 6990) | func NewRobotEnvelope(dataHash string) RobotEnvelope {
type robotEncoder (line 6999) | type robotEncoder interface
type toonRobotEncoder (line 7003) | type toonRobotEncoder struct
method Encode (line 7007) | func (e *toonRobotEncoder) Encode(v any) error {
function newJSONRobotEncoder (line 7040) | func newJSONRobotEncoder(w io.Writer) *json.Encoder {
function newRobotEncoder (line 7052) | func newRobotEncoder(w io.Writer) robotEncoder {
function resolveRobotOutputFormat (line 7059) | func resolveRobotOutputFormat(cli string) string {
function resolveToonEncodeOptionsFromEnv (line 7073) | func resolveToonEncodeOptionsFromEnv() toon.EncodeOptions {
function estimateTokens (line 7095) | func estimateTokens(s string) int {
function generateRobotDocs (line 7106) | func generateRobotDocs(topic string) map[string]interface{} {
type RobotSchemas (line 7365) | type RobotSchemas struct
function generateRobotSchemas (line 7373) | func generateRobotSchemas() RobotSchemas {
FILE: cmd/bv/main_robot_test.go
function TestRobotPlanAndPriorityIncludeMetadata (line 14) | func TestRobotPlanAndPriorityIncludeMetadata(t *testing.T) {
function buildTestBinary (line 87) | func buildTestBinary(t *testing.T) string {
function TestTOONOutputFormat (line 100) | func TestTOONOutputFormat(t *testing.T) {
function TestTOONRoundTrip (line 140) | func TestTOONRoundTrip(t *testing.T) {
function TestTOONTokenStats (line 195) | func TestTOONTokenStats(t *testing.T) {
function TestTOONSchemaOutput (line 232) | func TestTOONSchemaOutput(t *testing.T) {
function containsKeyValuePattern (line 260) | func containsKeyValuePattern(s string) bool {
FILE: cmd/bv/main_test.go
function runCommandWithTimeout (line 18) | func runCommandWithTimeout(t *testing.T, dir, exe string, args ...string...
function TestFilterByRepo_CaseInsensitiveAndFlexibleSeparators (line 40) | func TestFilterByRepo_CaseInsensitiveAndFlexibleSeparators(t *testing.T) {
function TestRobotFlagsOutputJSON (line 68) | func TestRobotFlagsOutputJSON(t *testing.T) {
function TestCLIFlagCompatibility (line 121) | func TestCLIFlagCompatibility(t *testing.T) {
function TestModifierFlagValidation (line 186) | func TestModifierFlagValidation(t *testing.T) {
function TestApplyRecipeFilters_ActionableAndHasBlockers (line 251) | func TestApplyRecipeFilters_ActionableAndHasBlockers(t *testing.T) {
function TestApplyRecipeFilters_TitleAndPrefix (line 283) | func TestApplyRecipeFilters_TitleAndPrefix(t *testing.T) {
function TestApplyRecipeFilters_TagsAndDates (line 301) | func TestApplyRecipeFilters_TagsAndDates(t *testing.T) {
function TestApplyRecipeFilters_DatesBlockersAndPrefix (line 322) | func TestApplyRecipeFilters_DatesBlockersAndPrefix(t *testing.T) {
function TestApplyRecipeSort_DefaultsAndFields (line 348) | func TestApplyRecipeSort_DefaultsAndFields(t *testing.T) {
function TestFormatCycle (line 403) | func TestFormatCycle(t *testing.T) {
function ptrBool (line 414) | func ptrBool(b bool) *bool { return &b }
function writeTestBeadsFixture (line 416) | func writeTestBeadsFixture(t *testing.T, dir string) {
function repoRoot (line 434) | func repoRoot(t *testing.T) string {
FILE: cmd/bv/profile_test.go
function captureStdout (line 16) | func captureStdout(t *testing.T, f func()) string {
function TestFormatDurationAndSizeTier (line 30) | func TestFormatDurationAndSizeTier(t *testing.T) {
function TestGenerateProfileRecommendations (line 51) | func TestGenerateProfileRecommendations(t *testing.T) {
function TestPrintMetricAndCyclesLines (line 77) | func TestPrintMetricAndCyclesLines(t *testing.T) {
function TestPrintCyclesLineSkipped (line 92) | func TestPrintCyclesLineSkipped(t *testing.T) {
function TestPrintDiffSummaryAndRepeatChar (line 102) | func TestPrintDiffSummaryAndRepeatChar(t *testing.T) {
function TestPrintProfileReport (line 134) | func TestPrintProfileReport(t *testing.T) {
function TestBuildMetricItems (line 162) | func TestBuildMetricItems(t *testing.T) {
function TestRepeatChar (line 175) | func TestRepeatChar(t *testing.T) {
function TestPrintDiffSummary (line 181) | func TestPrintDiffSummary(t *testing.T) {
function TestRunProfileStartupJSON (line 206) | func TestRunProfileStartupJSON(t *testing.T) {
FILE: cmd/bv/robot_registry.go
type RobotCommand (line 29) | type RobotCommand struct
type RobotContext (line 39) | type RobotContext struct
method StdoutOrDefault (line 188) | func (ctx RobotContext) StdoutOrDefault() io.Writer {
method StderrOrDefault (line 195) | func (ctx RobotContext) StderrOrDefault() io.Writer {
method EncoderOrDefault (line 202) | func (ctx RobotContext) EncoderOrDefault() robotEncoder {
method WorkDirOrDefault (line 209) | func (ctx RobotContext) WorkDirOrDefault() (string, error) {
method ProjectDirOrDefault (line 216) | func (ctx RobotContext) ProjectDirOrDefault() (string, error) {
method BaselinePathOrDefault (line 223) | func (ctx RobotContext) BaselinePathOrDefault() (string, error) {
type RobotRegistry (line 59) | type RobotRegistry struct
method Register (line 234) | func (r *RobotRegistry) Register(cmd RobotCommand) {
method AnyActive (line 260) | func (r *RobotRegistry) AnyActive() bool {
method ActiveCommands (line 269) | func (r *RobotRegistry) ActiveCommands() []RobotCommand {
method DispatchFlag (line 279) | func (r *RobotRegistry) DispatchFlag(flagName string, ctx RobotContext...
method Validate (line 2745) | func (r *RobotRegistry) Validate() error {
type robotHandlerExitError (line 65) | type robotHandlerExitError struct
method Error (line 78) | func (e *robotHandlerExitError) Error() string {
method Unwrap (line 88) | func (e *robotHandlerExitError) Unwrap() error {
type robotDispatchResult (line 71) | type robotDispatchResult struct
type phaseOneRobotHandlerConfig (line 95) | type phaseOneRobotHandlerConfig struct
type phaseTwoRobotHandlerConfig (line 106) | type phaseTwoRobotHandlerConfig struct
type phaseThreeRobotHandlerConfig (line 136) | type phaseThreeRobotHandlerConfig struct
function newRobotRegistry (line 184) | func newRobotRegistry() RobotRegistry {
function dispatchRobotFlagResult (line 298) | func dispatchRobotFlagResult(registry *RobotRegistry, flagName string, c...
function dispatchRobotFlagOrExit (line 326) | func dispatchRobotFlagOrExit(registry *RobotRegistry, flagName string, c...
function newReportedRobotHandlerExit (line 343) | func newReportedRobotHandlerExit(exitCode int) error {
function writeRobotHelp (line 351) | func writeRobotHelp(out io.Writer) error {
function registerPhaseOneRobotHandlers (line 424) | func registerPhaseOneRobotHandlers(registry *RobotRegistry, cfg phaseOne...
function registerPhaseTwoRobotHandlers (line 562) | func registerPhaseTwoRobotHandlers(registry *RobotRegistry, cfg phaseTwo...
function registerPhaseThreeRobotHandlers (line 1275) | func registerPhaseThreeRobotHandlers(registry *RobotRegistry, cfg phaseT...
function handleRobotLabelHealth (line 1360) | func handleRobotLabelHealth(ctx RobotContext) error {
function handleRobotLabelFlow (line 1388) | func handleRobotLabelFlow(ctx RobotContext) error {
function handleRobotLabelAttention (line 1414) | func handleRobotLabelAttention(ctx RobotContext, cfg phaseThreeRobotHand...
function handleRobotInsights (line 1483) | func handleRobotInsights(ctx RobotContext, cfg phaseThreeRobotHandlerCon...
function handleRobotTriage (line 1641) | func handleRobotTriage(ctx RobotContext, cfg phaseThreeRobotHandlerConfi...
function handleRobotHistory (line 1792) | func handleRobotHistory(ctx RobotContext, cfg phaseThreeRobotHandlerConf...
function resolveCorrelationBeadsPath (line 1864) | func resolveCorrelationBeadsPath(workDir string) (string, string, error) {
function buildCorrelationBeadInfos (line 1876) | func buildCorrelationBeadInfos(issues []model.Issue) []correlation.BeadI...
function generateCorrelationReport (line 1888) | func generateCorrelationReport(workDir string, issues []model.Issue, opt...
function loadCorrelationFeedbackStore (line 1900) | func loadCorrelationFeedbackStore(workDir string) (*correlation.Feedback...
function parseCorrelationArg (line 1912) | func parseCorrelationArg(arg string) (string, string, error) {
function handleRobotCorrelationStats (line 1920) | func handleRobotCorrelationStats(ctx RobotContext) error {
function handleRobotExplainCorrelation (line 1937) | func handleRobotExplainCorrelation(ctx RobotContext, cfg phaseThreeRobot...
function handleRobotCorrelationFeedback (line 1989) | func handleRobotCorrelationFeedback(ctx RobotContext, cfg phaseThreeRobo...
function handleRobotFileRelations (line 2064) | func handleRobotFileRelations(ctx RobotContext, cfg phaseThreeRobotHandl...
function handleRobotOrphans (line 2129) | func handleRobotOrphans(ctx RobotContext, cfg phaseThreeRobotHandlerConf...
function handleRobotFileBeads (line 2188) | func handleRobotFileBeads(ctx RobotContext, cfg phaseThreeRobotHandlerCo...
function handleRobotImpact (line 2242) | func handleRobotImpact(ctx RobotContext, cfg phaseThreeRobotHandlerConfi...
function handleRobotRelated (line 2294) | func handleRobotRelated(ctx RobotContext, cfg phaseThreeRobotHandlerConf...
function handleRobotBlockerChain (line 2377) | func handleRobotBlockerChain(ctx RobotContext, cfg phaseThreeRobotHandle...
function handleRobotImpactNetwork (line 2406) | func handleRobotImpactNetwork(ctx RobotContext, cfg phaseThreeRobotHandl...
function handleRobotCausality (line 2473) | func handleRobotCausality(ctx RobotContext, cfg phaseThreeRobotHandlerCo...
function handleRobotSprintShow (line 2537) | func handleRobotSprintShow(ctx RobotContext, cfg phaseThreeRobotHandlerC...
function handleRobotCapacity (line 2572) | func handleRobotCapacity(ctx RobotContext, cfg phaseThreeRobotHandlerCon...
function normalizeRobotFlagName (line 2778) | func normalizeRobotFlagName(name string) string {
function normalizeRobotFlagNames (line 2782) | func normalizeRobotFlagNames(names []string) []string {
function formatRobotFlag (line 2797) | func formatRobotFlag(name string) string {
function joinRobotFlags (line 2805) | func joinRobotFlags(names []string) string {
function hasAnyRobotFlag (line 2813) | func hasAnyRobotFlag(active map[string]struct{}, names []string) bool {
function robotFlagActive (line 2822) | func robotFlagActive(flagPtr interface{}) bool {
function robotValueActive (line 2842) | func robotValueActive(value reflect.Value) bool {
FILE: cmd/bv/robot_registry_test.go
function TestRobotRegistryValidate_RejectsModifierAlone (line 10) | func TestRobotRegistryValidate_RejectsModifierAlone(t *testing.T) {
function TestRobotRegistryAnyActive_MatchesOldLogic (line 65) | func TestRobotRegistryAnyActive_MatchesOldLogic(t *testing.T) {
function TestRobotRegistryDispatchFlag_RunsActiveHandler (line 148) | func TestRobotRegistryDispatchFlag_RunsActiveHandler(t *testing.T) {
function TestDispatchRobotFlagResult_ReturnsComposableOutcome (line 190) | func TestDispatchRobotFlagResult_ReturnsComposableOutcome(t *testing.T) {
function TestWriteRobotHelp_ReturnsWriterError (line 283) | func TestWriteRobotHelp_ReturnsWriterError(t *testing.T) {
function TestWriteRobotHelp_ReturnsWriterErrorAfterIntro (line 293) | func TestWriteRobotHelp_ReturnsWriterErrorAfterIntro(t *testing.T) {
function ptrTo (line 311) | func ptrTo[T any](v T) *T {
type failingWriter (line 315) | type failingWriter struct
method Write (line 319) | func (w failingWriter) Write([]byte) (int, error) {
type failAfterNWritesWriter (line 323) | type failAfterNWritesWriter struct
method Write (line 329) | func (w *failAfterNWritesWriter) Write(p []byte) (int, error) {
FILE: cmd/bv/search_output.go
type robotSearchResult (line 13) | type robotSearchResult struct
type robotSearchOutput (line 21) | type robotSearchOutput struct
function writeRobotSearchOutput (line 39) | func writeRobotSearchOutput(w io.Writer, out robotSearchOutput) error {
function applySearchConfigOverrides (line 44) | func applySearchConfigOverrides(cfg search.SearchConfig, modeFlag, prese...
function resolveSearchWeights (line 74) | func resolveSearchWeights(cfg search.SearchConfig) (search.Weights, sear...
function buildHybridScores (line 86) | func buildHybridScores(results []search.SearchResult, scorer search.Hybr...
function isLikelyIssueID (line 108) | func isLikelyIssueID(query string) bool {
function promoteExactSearchResult (line 112) | func promoteExactSearchResult(query string, results []search.SearchResul...
function promoteExactHybridResult (line 131) | func promoteExactHybridResult(query string, results []search.HybridScore...
FILE: internal/datasource/diff.go
type SourceDiff (line 10) | type SourceDiff struct
method HasInconsistencies (line 35) | func (d SourceDiff) HasInconsistencies() bool {
method Summary (line 40) | func (d SourceDiff) Summary() string {
type StatusDifference (line 28) | type StatusDifference struct
type DiffOptions (line 82) | type DiffOptions struct
function DefaultDiffOptions (line 92) | func DefaultDiffOptions() DiffOptions {
function DetectInconsistencies (line 101) | func DetectInconsistencies(issuesA, issuesB []model.Issue, sourceA, sour...
function CompareSources (line 161) | func CompareSources(sourceA, sourceB DataSource, opts DiffOptions) (*Sou...
function loadIssuesFromSource (line 179) | func loadIssuesFromSource(source DataSource) ([]model.Issue, error) {
function CheckAllSourcesConsistent (line 184) | func CheckAllSourcesConsistent(sources []DataSource, opts DiffOptions) (...
type InconsistencyReport (line 213) | type InconsistencyReport struct
function GenerateInconsistencyReport (line 225) | func GenerateInconsistencyReport(sources []DataSource, opts DiffOptions)...
FILE: internal/datasource/jsonl.go
type JSONLReader (line 13) | type JSONLReader struct
method LoadIssues (line 26) | func (r *JSONLReader) LoadIssues() ([]model.Issue, error) {
method LoadIssuesFiltered (line 42) | func (r *JSONLReader) LoadIssuesFiltered(filter func(*model.Issue) boo...
method CountIssues (line 60) | func (r *JSONLReader) CountIssues() (int, error) {
method GetIssueByID (line 69) | func (r *JSONLReader) GetIssueByID(id string) (*model.Issue, error) {
method GetLastModified (line 84) | func (r *JSONLReader) GetLastModified() (time.Time, error) {
method Close (line 107) | func (r *JSONLReader) Close() error {
function NewJSONLReader (line 18) | func NewJSONLReader(source DataSource) (*JSONLReader, error) {
FILE: internal/datasource/load.go
function LoadIssues (line 18) | func LoadIssues(repoPath string) ([]model.Issue, error) {
function LoadIssuesFromDir (line 35) | func LoadIssuesFromDir(beadsDir string) ([]model.Issue, error) {
function loadSmart (line 50) | func loadSmart(beadsDir, repoPath string) ([]model.Issue, error) {
function LoadFromSource (line 74) | func LoadFromSource(source DataSource) ([]model.Issue, error) {
FILE: internal/datasource/reader.go
type IssueReader (line 14) | type IssueReader interface
function NewReader (line 37) | func NewReader(source DataSource) (IssueReader, error) {
FILE: internal/datasource/reader_test.go
type readerFactory (line 16) | type readerFactory struct
function readerFactories (line 22) | func readerFactories() []readerFactory {
function TestReaderContract_LoadIssues (line 61) | func TestReaderContract_LoadIssues(t *testing.T) {
function TestReaderContract_LoadIssuesFiltered (line 85) | func TestReaderContract_LoadIssuesFiltered(t *testing.T) {
function TestReaderContract_LoadIssuesFiltered_Nil (line 102) | func TestReaderContract_LoadIssuesFiltered_Nil(t *testing.T) {
function TestReaderContract_CountIssues (line 117) | func TestReaderContract_CountIssues(t *testing.T) {
function TestReaderContract_GetIssueByID (line 132) | func TestReaderContract_GetIssueByID(t *testing.T) {
function TestReaderContract_GetLastModified (line 169) | func TestReaderContract_GetLastModified(t *testing.T) {
function TestNewReader_UnknownType (line 184) | func TestNewReader_UnknownType(t *testing.T) {
function createContractTestSQLiteDB (line 194) | func createContractTestSQLiteDB(t *testing.T, path string) {
function createContractTestJSONL (line 258) | func createContractTestJSONL(t *testing.T, path string) {
FILE: internal/datasource/select.go
type SelectionOptions (line 14) | type SelectionOptions struct
function DefaultSelectionOptions (line 31) | func DefaultSelectionOptions() SelectionOptions {
type SelectionResult (line 42) | type SelectionResult struct
function SelectBestSource (line 54) | func SelectBestSource(sources []DataSource) (DataSource, error) {
function SelectBestSourceWithOptions (line 59) | func SelectBestSourceWithOptions(sources []DataSource, opts SelectionOpt...
function SelectBestSourceDetailed (line 68) | func SelectBestSourceDetailed(sources []DataSource, opts SelectionOption...
function buildSelectionReason (line 141) | func buildSelectionReason(selected DataSource, candidates []DataSource, ...
function SelectWithFallback (line 190) | func SelectWithFallback(sources []DataSource, loadFunc func(DataSource) ...
FILE: internal/datasource/source.go
type SourceType (line 17) | type SourceType
constant SourceTypeSQLite (line 21) | SourceTypeSQLite SourceType = "sqlite"
constant SourceTypeJSONLWorktree (line 23) | SourceTypeJSONLWorktree SourceType = "jsonl_worktree"
constant SourceTypeJSONLLocal (line 25) | SourceTypeJSONLLocal SourceType = "jsonl_local"
constant PrioritySQLite (line 30) | PrioritySQLite = 100
constant PriorityJSONLWorktree (line 31) | PriorityJSONLWorktree = 80
constant PriorityJSONLLocal (line 32) | PriorityJSONLLocal = 50
type DataSource (line 36) | type DataSource struct
method String (line 56) | func (s DataSource) String() string {
type DiscoveryOptions (line 66) | type DiscoveryOptions struct
function DiscoverSources (line 82) | func DiscoverSources(opts DiscoveryOptions) ([]DataSource, error) {
function resolveBeadsDBPath (line 176) | func resolveBeadsDBPath(dbPath string) string {
function discoverSQLiteSources (line 192) | func discoverSQLiteSources(beadsDir string, opts DiscoveryOptions) ([]Da...
function discoverLocalJSONLSources (line 215) | func discoverLocalJSONLSources(beadsDir string, opts DiscoveryOptions) (...
function discoverWorktreeSources (line 267) | func discoverWorktreeSources(repoPath string, opts DiscoveryOptions) ([]...
FILE: internal/datasource/source_test.go
function TestDiscoverSources_OnlySQLite (line 14) | func TestDiscoverSources_OnlySQLite(t *testing.T) {
function TestDiscoverSources_OnlyJSONL (line 55) | func TestDiscoverSources_OnlyJSONL(t *testing.T) {
function TestDiscoverSources_Multiple (line 95) | func TestDiscoverSources_Multiple(t *testing.T) {
function TestDiscoverSources_Empty (line 144) | func TestDiscoverSources_Empty(t *testing.T) {
function TestValidateSQLite_Valid (line 165) | func TestValidateSQLite_Valid(t *testing.T) {
function TestValidateSQLite_Empty (line 189) | func TestValidateSQLite_Empty(t *testing.T) {
function TestValidateSQLite_Corrupted (line 213) | func TestValidateSQLite_Corrupted(t *testing.T) {
function TestValidateSQLite_WrongSchema (line 238) | func TestValidateSQLite_WrongSchema(t *testing.T) {
function TestValidateJSONL_Valid (line 270) | func TestValidateJSONL_Valid(t *testing.T) {
function TestValidateJSONL_Empty (line 300) | func TestValidateJSONL_Empty(t *testing.T) {
function TestValidateJSONL_PartialCorrupt (line 327) | func TestValidateJSONL_PartialCorrupt(t *testing.T) {
function TestValidateJSONL_HeavyCorrupt (line 363) | func TestValidateJSONL_HeavyCorrupt(t *testing.T) {
function TestValidateJSONL_MissingFields (line 400) | func TestValidateJSONL_MissingFields(t *testing.T) {
function TestSelectBestSource_SingleValid (line 424) | func TestSelectBestSource_SingleValid(t *testing.T) {
function TestSelectBestSource_FresherWins (line 446) | func TestSelectBestSource_FresherWins(t *testing.T) {
function TestSelectBestSource_PriorityTiebreaker (line 476) | func TestSelectBestSource_PriorityTiebreaker(t *testing.T) {
function TestSelectBestSource_AllInvalid (line 506) | func TestSelectBestSource_AllInvalid(t *testing.T) {
function TestSelectBestSource_SkipsInvalid (line 527) | func TestSelectBestSource_SkipsInvalid(t *testing.T) {
function TestFallbackChain_FirstValid (line 557) | func TestFallbackChain_FirstValid(t *testing.T) {
function TestFallbackChain_SecondValid (line 595) | func TestFallbackChain_SecondValid(t *testing.T) {
function TestFallbackChain_AllFail (line 636) | func TestFallbackChain_AllFail(t *testing.T) {
function createTestSQLiteDB (line 665) | func createTestSQLiteDB(t *testing.T, path string) {
function createEmptySQLiteDB (line 698) | func createEmptySQLiteDB(t *testing.T, path string) {
FILE: internal/datasource/sqlite.go
type SQLiteReader (line 16) | type SQLiteReader struct
method Close (line 53) | func (r *SQLiteReader) Close() error {
method hasLabelsColumn (line 62) | func (r *SQLiteReader) hasLabelsColumn() bool {
method hasLabelsTable (line 86) | func (r *SQLiteReader) hasLabelsTable() bool {
method LoadIssues (line 93) | func (r *SQLiteReader) LoadIssues() ([]model.Issue, error) {
method LoadIssuesFiltered (line 98) | func (r *SQLiteReader) LoadIssuesFiltered(filter func(*model.Issue) bo...
method loadIssuesSimple (line 232) | func (r *SQLiteReader) loadIssuesSimple(filter func(*model.Issue) bool...
method loadLabelsFromTable (line 295) | func (r *SQLiteReader) loadLabelsFromTable(issueID string) []string {
method loadDependencies (line 319) | func (r *SQLiteReader) loadDependencies(issueID string) []*model.Depen...
method loadComments (line 344) | func (r *SQLiteReader) loadComments(issueID string) []*model.Comment {
method CountIssues (line 371) | func (r *SQLiteReader) CountIssues() (int, error) {
method GetIssueByID (line 381) | func (r *SQLiteReader) GetIssueByID(id string) (*model.Issue, error) {
method GetLastModified (line 397) | func (r *SQLiteReader) GetLastModified() (time.Time, error) {
function NewSQLiteReader (line 22) | func NewSQLiteReader(source DataSource) (*SQLiteReader, error) {
function parseJSONStringArray (line 422) | func parseJSONStringArray(s string) []string {
FILE: internal/datasource/validate.go
type ValidationOptions (line 17) | type ValidationOptions struct
function DefaultValidationOptions (line 33) | func DefaultValidationOptions() ValidationOptions {
function ValidateSource (line 44) | func ValidateSource(source *DataSource) error {
function ValidateSourceWithOptions (line 49) | func ValidateSourceWithOptions(source *DataSource, opts ValidationOption...
function validateSQLite (line 82) | func validateSQLite(source *DataSource, opts ValidationOptions) error {
function validateJSONL (line 170) | func validateJSONL(source *DataSource, opts ValidationOptions) error {
function IsSourceAccessible (line 289) | func IsSourceAccessible(source *DataSource) bool {
function RefreshSourceInfo (line 295) | func RefreshSourceInfo(source *DataSource) error {
FILE: internal/datasource/watch.go
type SourceWatcher (line 12) | type SourceWatcher struct
method Start (line 86) | func (sw *SourceWatcher) Start() {
method Stop (line 91) | func (sw *SourceWatcher) Stop() {
method run (line 99) | func (sw *SourceWatcher) run() {
method AddSource (line 167) | func (sw *SourceWatcher) AddSource(source DataSource) error {
method RemoveSource (line 191) | func (sw *SourceWatcher) RemoveSource(path string) error {
method Sources (line 216) | func (sw *SourceWatcher) Sources() []DataSource {
type WatcherOptions (line 26) | type WatcherOptions struct
function DefaultWatcherOptions (line 37) | func DefaultWatcherOptions() WatcherOptions {
function NewSourceWatcher (line 46) | func NewSourceWatcher(sources []DataSource, callback func(DataSource), o...
type AutoRefreshManager (line 225) | type AutoRefreshManager struct
method Start (line 270) | func (m *AutoRefreshManager) Start() {
method Stop (line 275) | func (m *AutoRefreshManager) Stop() {
method CurrentSource (line 280) | func (m *AutoRefreshManager) CurrentSource() DataSource {
method handleChange (line 290) | func (m *AutoRefreshManager) handleChange(changed DataSource) {
method ForceRefresh (line 334) | func (m *AutoRefreshManager) ForceRefresh() error {
type AutoRefreshOptions (line 235) | type AutoRefreshOptions struct
function NewAutoRefreshManager (line 245) | func NewAutoRefreshManager(sources []DataSource, opts AutoRefreshOptions...
FILE: pkg/agents/blurb.go
constant BlurbVersion (line 14) | BlurbVersion = 2
constant BlurbStartMarker (line 17) | BlurbStartMarker = "<!-- bv-agent-instructions-v2 -->"
constant BlurbEndMarker (line 20) | BlurbEndMarker = "<!-- end-bv-agent-instructions -->"
constant AgentBlurb (line 24) | AgentBlurb = `<!-- bv-agent-instructions-v2 -->
function ContainsBlurb (line 150) | func ContainsBlurb(content string) bool {
function ContainsLegacyBlurb (line 157) | func ContainsLegacyBlurb(content string) bool {
function ContainsAnyBlurb (line 173) | func ContainsAnyBlurb(content string) bool {
function GetBlurbVersion (line 178) | func GetBlurbVersion(content string) int {
function NeedsUpdate (line 191) | func NeedsUpdate(content string) bool {
function AppendBlurb (line 202) | func AppendBlurb(content string) string {
function RemoveBlurb (line 213) | func RemoveBlurb(content string) string {
function RemoveLegacyBlurb (line 233) | func RemoveLegacyBlurb(content string) string {
function UpdateBlurb (line 268) | func UpdateBlurb(content string) string {
FILE: pkg/agents/blurb_test.go
function TestContainsBlurb (line 8) | func TestContainsBlurb(t *testing.T) {
function TestGetBlurbVersion (line 46) | func TestGetBlurbVersion(t *testing.T) {
function TestAppendBlurb (line 84) | func TestAppendBlurb(t *testing.T) {
function TestRemoveBlurb (line 116) | func TestRemoveBlurb(t *testing.T) {
function TestRemoveBlurbNoBlurb (line 135) | func TestRemoveBlurbNoBlurb(t *testing.T) {
function TestUpdateBlurb (line 145) | func TestUpdateBlurb(t *testing.T) {
function TestNeedsUpdate (line 167) | func TestNeedsUpdate(t *testing.T) {
function TestAgentBlurbContent (line 200) | func TestAgentBlurbContent(t *testing.T) {
function TestSupportedAgentFiles (line 232) | func TestSupportedAgentFiles(t *testing.T) {
constant LegacyBlurbContent (line 254) | LegacyBlurbContent = `### Using bv as an AI sidecar
function TestContainsLegacyBlurb (line 271) | func TestContainsLegacyBlurb(t *testing.T) {
function TestContainsAnyBlurb (line 314) | func TestContainsAnyBlurb(t *testing.T) {
function TestRemoveLegacyBlurb (line 347) | func TestRemoveLegacyBlurb(t *testing.T) {
function TestRemoveLegacyBlurbNoLegacy (line 369) | func TestRemoveLegacyBlurbNoLegacy(t *testing.T) {
function TestRemoveLegacyBlurbNoTrailingBackticks (line 379) | func TestRemoveLegacyBlurbNoTrailingBackticks(t *testing.T) {
function TestUpdateBlurbFromLegacy (line 417) | func TestUpdateBlurbFromLegacy(t *testing.T) {
function TestNeedsUpdateLegacy (line 444) | func TestNeedsUpdateLegacy(t *testing.T) {
function TestContainsLegacyBlurbEdgeCases (line 477) | func TestContainsLegacyBlurbEdgeCases(t *testing.T) {
function TestRemoveLegacyBlurbEdgeCases (line 603) | func TestRemoveLegacyBlurbEdgeCases(t *testing.T) {
function TestGetBlurbVersionEdgeCases (line 693) | func TestGetBlurbVersionEdgeCases(t *testing.T) {
function TestRemoveBlurbEdgeCases (line 762) | func TestRemoveBlurbEdgeCases(t *testing.T) {
function TestContainsAnyBlurbEdgeCases (line 819) | func TestContainsAnyBlurbEdgeCases(t *testing.T) {
FILE: pkg/agents/detect.go
type AgentFileDetection (line 9) | type AgentFileDetection struct
method Found (line 30) | func (d AgentFileDetection) Found() bool {
method NeedsBlurb (line 35) | func (d AgentFileDetection) NeedsBlurb() bool {
method NeedsUpgrade (line 41) | func (d AgentFileDetection) NeedsUpgrade() bool {
function DetectAgentFile (line 51) | func DetectAgentFile(workDir string) AgentFileDetection {
function checkAgentFile (line 81) | func checkAgentFile(filePath, fileType string) AgentFileDetection {
function DetectAgentFileInParents (line 115) | func DetectAgentFileInParents(workDir string, maxLevels int) AgentFileDe...
function AgentFileExists (line 136) | func AgentFileExists(workDir string) bool {
function GetPreferredAgentFilePath (line 148) | func GetPreferredAgentFilePath(workDir string) string {
FILE: pkg/agents/detect_test.go
function TestDetectAgentFile (line 9) | func TestDetectAgentFile(t *testing.T) {
function TestAgentFileDetectionMethods (line 106) | func TestAgentFileDetectionMethods(t *testing.T) {
function TestDetectAgentFileInParents (line 160) | func TestDetectAgentFileInParents(t *testing.T) {
function TestAgentFileExists (line 230) | func TestAgentFileExists(t *testing.T) {
function TestGetPreferredAgentFilePath (line 253) | func TestGetPreferredAgentFilePath(t *testing.T) {
function TestDetectAgentFileWithLegacyBlurb (line 261) | func TestDetectAgentFileWithLegacyBlurb(t *testing.T) {
function TestDetectAgentFileNotFalsePositive (line 299) | func TestDetectAgentFileNotFalsePositive(t *testing.T) {
FILE: pkg/agents/file.go
function AppendBlurbToFile (line 12) | func AppendBlurbToFile(filePath string) error {
function UpdateBlurbInFile (line 32) | func UpdateBlurbInFile(filePath string) error {
function RemoveBlurbFromFile (line 49) | func RemoveBlurbFromFile(filePath string) error {
function CreateAgentFile (line 66) | func CreateAgentFile(filePath string) error {
function VerifyBlurbPresent (line 79) | func VerifyBlurbPresent(filePath string) (bool, error) {
function atomicWrite (line 89) | func atomicWrite(filePath string, content []byte) error {
function EnsureBlurb (line 157) | func EnsureBlurb(workDir string) error {
FILE: pkg/agents/file_test.go
function TestAppendBlurbToFile (line 10) | func TestAppendBlurbToFile(t *testing.T) {
function TestAppendBlurbToEmptyFile (line 43) | func TestAppendBlurbToEmptyFile(t *testing.T) {
function TestUpdateBlurbInFile (line 67) | func TestUpdateBlurbInFile(t *testing.T) {
function TestRemoveBlurbFromFile (line 98) | func TestRemoveBlurbFromFile(t *testing.T) {
function TestCreateAgentFile (line 127) | func TestCreateAgentFile(t *testing.T) {
function TestVerifyBlurbPresent (line 151) | func TestVerifyBlurbPresent(t *testing.T) {
function TestAtomicWritePreservesPermissions (line 193) | func TestAtomicWritePreservesPermissions(t *testing.T) {
function TestAtomicWriteNewFile (line 235) | func TestAtomicWriteNewFile(t *testing.T) {
function TestEnsureBlurb (line 254) | func TestEnsureBlurb(t *testing.T) {
function TestAppendBlurbNonExistentFile (line 319) | func TestAppendBlurbNonExistentFile(t *testing.T) {
function TestAtomicWriteNoPermission (line 329) | func TestAtomicWriteNoPermission(t *testing.T) {
FILE: pkg/agents/integration_test.go
function TestFullFlow_Accept (line 10) | func TestFullFlow_Accept(t *testing.T) {
function TestFullFlow_Decline (line 65) | func TestFullFlow_Decline(t *testing.T) {
function TestFullFlow_NeverAsk (line 97) | func TestFullFlow_NeverAsk(t *testing.T) {
function TestFullFlow_AlreadyHasBlurb (line 132) | func TestFullFlow_AlreadyHasBlurb(t *testing.T) {
function TestFullFlow_NoAgentFile (line 156) | func TestFullFlow_NoAgentFile(t *testing.T) {
function TestFullFlow_ClaudeMDFallback (line 172) | func TestFullFlow_ClaudeMDFallback(t *testing.T) {
function strContains (line 194) | func strContains(s, substr string) bool {
FILE: pkg/agents/prefs.go
type AgentPromptPreference (line 13) | type AgentPromptPreference struct
function getPrefsDir (line 34) | func getPrefsDir() (string, error) {
function projectHash (line 44) | func projectHash(workDir string) (string, error) {
function getPrefsPath (line 54) | func getPrefsPath(workDir string) (string, error) {
function LoadAgentPromptPreference (line 68) | func LoadAgentPromptPreference(workDir string) (*AgentPromptPreference, ...
function SaveAgentPromptPreference (line 90) | func SaveAgentPromptPreference(workDir string, pref AgentPromptPreferenc...
function ShouldPromptForAgentFile (line 125) | func ShouldPromptForAgentFile(workDir string) bool {
function RecordDecline (line 153) | func RecordDecline(workDir string, dontAskAgain bool) error {
function RecordAccept (line 163) | func RecordAccept(workDir string) error {
function ClearPreference (line 173) | func ClearPreference(workDir string) error {
FILE: pkg/agents/prefs_test.go
function TestProjectHash (line 10) | func TestProjectHash(t *testing.T) {
function TestSaveAndLoadPreference (line 39) | func TestSaveAndLoadPreference(t *testing.T) {
function TestShouldPromptForAgentFile (line 84) | func TestShouldPromptForAgentFile(t *testing.T) {
function TestRecordDecline (line 142) | func TestRecordDecline(t *testing.T) {
function TestRecordAccept (line 169) | func TestRecordAccept(t *testing.T) {
function TestClearPreference (line 192) | func TestClearPreference(t *testing.T) {
function TestGetPrefsDir (line 222) | func TestGetPrefsDir(t *testing.T) {
function contains (line 237) | func contains(s, substr string) bool {
function TestPrefsPathConsistency (line 242) | func TestPrefsPathConsistency(t *testing.T) {
function TestPrefsCreateDirectory (line 265) | func TestPrefsCreateDirectory(t *testing.T) {
FILE: pkg/agents/tty_guard.go
function init (line 17) | func init() {
function shouldSuppressTTYQueries (line 29) | func shouldSuppressTTYQueries(args []string, envRobot, envTest bool) bool {
FILE: pkg/agents/tty_guard_test.go
function TestShouldSuppressTTYQueries_EnvRobot (line 5) | func TestShouldSuppressTTYQueries_EnvRobot(t *testing.T) {
function TestShouldSuppressTTYQueries_EnvTest (line 11) | func TestShouldSuppressTTYQueries_EnvTest(t *testing.T) {
function TestShouldSuppressTTYQueries_RobotFlag (line 17) | func TestShouldSuppressTTYQueries_RobotFlag(t *testing.T) {
function TestShouldSuppressTTYQueries_HelpAndVersion (line 26) | func TestShouldSuppressTTYQueries_HelpAndVersion(t *testing.T) {
function TestShouldSuppressTTYQueries_TUIInvocation (line 35) | func TestShouldSuppressTTYQueries_TUIInvocation(t *testing.T) {
FILE: pkg/analysis/advanced_insights.go
type intHeap (line 11) | type intHeap
method Len (line 13) | func (h intHeap) Len() int { return len(h) }
method Less (line 14) | func (h intHeap) Less(i, j int) bool { return h[i] < h[j] }
method Swap (line 15) | func (h intHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
method Push (line 17) | func (h *intHeap) Push(x any) { *h = append(*h, x.(int)) }
method Pop (line 18) | func (h *intHeap) Pop() any {
type AdvancedInsightsConfig (line 28) | type AdvancedInsightsConfig struct
function DefaultAdvancedInsightsConfig (line 45) | func DefaultAdvancedInsightsConfig() AdvancedInsightsConfig {
type AdvancedInsights (line 58) | type AdvancedInsights struct
type FeatureStatus (line 85) | type FeatureStatus struct
type TopKSetResult (line 94) | type TopKSetResult struct
type TopKSetItem (line 103) | type TopKSetItem struct
type CoverageSetResult (line 112) | type CoverageSetResult struct
type CoverageItem (line 123) | type CoverageItem struct
type KPathsResult (line 132) | type KPathsResult struct
type CriticalPath (line 139) | type CriticalPath struct
type ParallelCutResult (line 147) | type ParallelCutResult struct
type ParallelCutItem (line 155) | type ParallelCutItem struct
type ParallelGainResult (line 163) | type ParallelGainResult struct
type ParallelGainItem (line 170) | type ParallelGainItem struct
type CycleBreakResult (line 179) | type CycleBreakResult struct
type CycleBreakItem (line 188) | type CycleBreakItem struct
function DefaultUsageHints (line 198) | func DefaultUsageHints() map[string]string {
method GenerateAdvancedInsights (line 211) | func (a *Analyzer) GenerateAdvancedInsights(config AdvancedInsightsConfi...
method generateCycleBreakSuggestions (line 245) | func (a *Analyzer) generateCycleBreakSuggestions(limit int) *CycleBreakR...
method countDependents (line 336) | func (a *Analyzer) countDependents(issueID string) int {
method generateTopKSet (line 351) | func (a *Analyzer) generateTopKSet(k int) *TopKSetResult {
method computeMarginalUnblocks (line 439) | func (a *Analyzer) computeMarginalUnblocks(issueID string, alreadyComple...
method generateCoverageSet (line 494) | func (a *Analyzer) generateCoverageSet(limit int) *CoverageSetResult {
method generateKPaths (line 606) | func (a *Analyzer) generateKPaths(k int, pathLengthCap int) *KPathsResult {
method generateParallelCut (line 822) | func (a *Analyzer) generateParallelCut(limit int) *ParallelCutResult {
FILE: pkg/analysis/advanced_insights_test.go
function TestDefaultAdvancedInsightsConfig (line 9) | func TestDefaultAdvancedInsightsConfig(t *testing.T) {
function TestDefaultUsageHints (line 32) | func TestDefaultUsageHints(t *testing.T) {
function TestGenerateAdvancedInsightsEmpty (line 43) | func TestGenerateAdvancedInsightsEmpty(t *testing.T) {
function TestGenerateAdvancedInsightsNoCycles (line 79) | func TestGenerateAdvancedInsightsNoCycles(t *testing.T) {
function TestGenerateAdvancedInsightsWithCycles (line 106) | func TestGenerateAdvancedInsightsWithCycles(t *testing.T) {
function TestCycleBreakSuggestionsCapping (line 136) | func TestCycleBreakSuggestionsCapping(t *testing.T) {
function TestCycleBreakDeterministic (line 166) | func TestCycleBreakDeterministic(t *testing.T) {
function TestPendingFeatureStatus (line 198) | func TestPendingFeatureStatus(t *testing.T) {
function TestTopKSetEmpty (line 247) | func TestTopKSetEmpty(t *testing.T) {
function TestTopKSetLinearChain (line 266) | func TestTopKSetLinearChain(t *testing.T) {
function TestTopKSetDeterministic (line 305) | func TestTopKSetDeterministic(t *testing.T) {
function TestTopKSetCapping (line 336) | func TestTopKSetCapping(t *testing.T) {
function TestCoverageSetEmpty (line 363) | func TestCoverageSetEmpty(t *testing.T) {
function TestCoverageSetNoEdges (line 386) | func TestCoverageSetNoEdges(t *testing.T) {
function TestCoverageSetLinearChain (line 409) | func TestCoverageSetLinearChain(t *testing.T) {
function TestCoverageSetHubPattern (line 442) | func TestCoverageSetHubPattern(t *testing.T) {
function TestCoverageSetDeterministic (line 476) | func TestCoverageSetDeterministic(t *testing.T) {
function TestCoverageSetCapping (line 509) | func TestCoverageSetCapping(t *testing.T) {
function TestCoverageSetClosedIssuesIgnored (line 532) | func TestCoverageSetClosedIssuesIgnored(t *testing.T) {
function TestCoverageSetSelectionSequence (line 552) | func TestCoverageSetSelectionSequence(t *testing.T) {
function TestKPathsEmpty (line 574) | func TestKPathsEmpty(t *testing.T) {
function TestKPathsNoEdges (line 590) | func TestKPathsNoEdges(t *testing.T) {
function TestKPathsLinearChain (line 611) | func TestKPathsLinearChain(t *testing.T) {
function TestKPathsMultiplePaths (line 654) | func TestKPathsMultiplePaths(t *testing.T) {
function TestKPathsDeterministic (line 685) | func TestKPathsDeterministic(t *testing.T) {
function TestKPathsCapping (line 728) | func TestKPathsCapping(t *testing.T) {
function TestKPathsClosedIssuesIgnored (line 754) | func TestKPathsClosedIssuesIgnored(t *testing.T) {
function TestKPathsPathLengthCap (line 778) | func TestKPathsPathLengthCap(t *testing.T) {
function TestKPathsRankOrdering (line 810) | func TestKPathsRankOrdering(t *testing.T) {
function TestKPathsDiamondGraph (line 831) | func TestKPathsDiamondGraph(t *testing.T) {
function TestParallelCutEmpty (line 868) | func TestParallelCutEmpty(t *testing.T) {
function TestParallelCutNoEdges (line 884) | func TestParallelCutNoEdges(t *testing.T) {
function TestParallelCutLinearChainNoGain (line 905) | func TestParallelCutLinearChainNoGain(t *testing.T) {
function TestParallelCutForkHasGain (line 925) | func TestParallelCutForkHasGain(t *testing.T) {
function TestParallelCutMultipleForks (line 959) | func TestParallelCutMultipleForks(t *testing.T) {
function TestParallelCutDeterministic (line 998) | func TestParallelCutDeterministic(t *testing.T) {
function TestParallelCutCapping (line 1036) | func TestParallelCutCapping(t *testing.T) {
function TestParallelCutClosedIssuesIgnored (line 1063) | func TestParallelCutClosedIssuesIgnored(t *testing.T) {
function TestParallelCutMaxParallel (line 1083) | func TestParallelCutMaxParallel(t *testing.T) {
function TestParallelCutDiamondNoGain (line 1105) | func TestParallelCutDiamondNoGain(t *testing.T) {
FILE: pkg/analysis/articulation_test.go
function TestFindArticulationPointsHandlesZeroID (line 8) | func TestFindArticulationPointsHandlesZeroID(t *testing.T) {
FILE: pkg/analysis/bench_generators_test.go
function generateSparseGraph (line 15) | func generateSparseGraph(n int) []model.Issue {
function generateDenseGraph (line 41) | func generateDenseGraph(n int) []model.Issue {
function generateChainGraph (line 67) | func generateChainGraph(n int) []model.Issue {
function generateCyclicGraph (line 88) | func generateCyclicGraph(n int) []model.Issue {
function generateManyCyclesGraph (line 109) | func generateManyCyclesGraph(n int) []model.Issue {
function generateCompleteGraph (line 135) | func generateCompleteGraph(n int) []model.Issue {
function generateDisconnectedGraph (line 160) | func generateDisconnectedGraph(n int) []model.Issue {
function generateWideGraph (line 186) | func generateWideGraph(n int) []model.Issue {
function generateDeepGraph (line 211) | func generateDeepGraph(n int) []model.Issue {
FILE: pkg/analysis/bench_pathological_test.go
function BenchmarkCycles_ManyCycles20 (line 22) | func BenchmarkCycles_ManyCycles20(b *testing.B) {
function BenchmarkCycles_ManyCycles30 (line 26) | func BenchmarkCycles_ManyCycles30(b *testing.B) {
function BenchmarkCycles_SingleCycle100 (line 31) | func BenchmarkCycles_SingleCycle100(b *testing.B) {
function benchCycleDetection (line 35) | func benchCycleDetection(b *testing.B, issues []model.Issue) {
function BenchmarkComplete_Betweenness15 (line 59) | func BenchmarkComplete_Betweenness15(b *testing.B) {
function BenchmarkComplete_PageRank20 (line 71) | func BenchmarkComplete_PageRank20(b *testing.B) {
function BenchmarkComplete_HITS15 (line 82) | func BenchmarkComplete_HITS15(b *testing.B) {
function BenchmarkLongChain_Betweenness500 (line 95) | func BenchmarkLongChain_Betweenness500(b *testing.B) {
function BenchmarkLongChain_TopoSort2000 (line 106) | func BenchmarkLongChain_TopoSort2000(b *testing.B) {
function BenchmarkFullAnalysis_ManyCycles20 (line 122) | func BenchmarkFullAnalysis_ManyCycles20(b *testing.B) {
function BenchmarkFullAnalysis_ManyCycles30 (line 133) | func BenchmarkFullAnalysis_ManyCycles30(b *testing.B) {
function BenchmarkFullAnalysis_Complete15 (line 145) | func BenchmarkFullAnalysis_Complete15(b *testing.B) {
function TestTimeoutProtection_Betweenness (line 161) | func TestTimeoutProtection_Betweenness(t *testing.T) {
function TestTimeoutProtection_Cycles (line 181) | func TestTimeoutProtection_Cycles(t *testing.T) {
function TestSCCPrecheck_AcyclicGraphFast (line 201) | func TestSCCPrecheck_AcyclicGraphFast(t *testing.T) {
FILE: pkg/analysis/bench_realdata_test.go
function findProjectBeadsDir (line 30) | func findProjectBeadsDir() (string, error) {
function loadProjectBeads (line 53) | func loadProjectBeads(tb testing.TB) []model.Issue {
function BenchmarkRealData_FullTriage (line 98) | func BenchmarkRealData_FullTriage(b *testing.B) {
function BenchmarkRealData_TriagePhase1Only (line 114) | func BenchmarkRealData_TriagePhase1Only(b *testing.B) {
function BenchmarkRealData_FullAnalysis (line 130) | func BenchmarkRealData_FullAnalysis(b *testing.B) {
function BenchmarkRealData_FastAnalysis (line 144) | func BenchmarkRealData_FastAnalysis(b *testing.B) {
function BenchmarkRealData_GraphBuild (line 161) | func BenchmarkRealData_GraphBuild(b *testing.B) {
function BenchmarkRealData_IssueLoading (line 174) | func BenchmarkRealData_IssueLoading(b *testing.B) {
FILE: pkg/analysis/bench_test.go
function BenchmarkFullAnalysis_Sparse100 (line 18) | func BenchmarkFullAnalysis_Sparse100(b *testing.B) {
function BenchmarkFullAnalysis_Sparse500 (line 22) | func BenchmarkFullAnalysis_Sparse500(b *testing.B) {
function BenchmarkFullAnalysis_Sparse1000 (line 26) | func BenchmarkFullAnalysis_Sparse1000(b *testing.B) {
function BenchmarkFullAnalysis_Dense100 (line 30) | func BenchmarkFullAnalysis_Dense100(b *testing.B) {
function BenchmarkFullAnalysis_Dense500 (line 34) | func BenchmarkFullAnalysis_Dense500(b *testing.B) {
function BenchmarkFullAnalysis_Chain100 (line 38) | func BenchmarkFullAnalysis_Chain100(b *testing.B) {
function BenchmarkFullAnalysis_Chain500 (line 42) | func BenchmarkFullAnalysis_Chain500(b *testing.B) {
function BenchmarkFullAnalysis_Chain1000 (line 46) | func BenchmarkFullAnalysis_Chain1000(b *testing.B) {
function BenchmarkFullAnalysis_Wide500 (line 50) | func BenchmarkFullAnalysis_Wide500(b *testing.B) {
function BenchmarkFullAnalysis_Deep500 (line 54) | func BenchmarkFullAnalysis_Deep500(b *testing.B) {
function BenchmarkFullAnalysis_Disconnected500 (line 58) | func BenchmarkFullAnalysis_Disconnected500(b *testing.B) {
function BenchmarkRobotTriage_Sparse500 (line 66) | func BenchmarkRobotTriage_Sparse500(b *testing.B) {
function benchFullAnalysis (line 78) | func benchFullAnalysis(b *testing.B, issues []model.Issue) {
function BenchmarkPageRank_Sparse100 (line 93) | func BenchmarkPageRank_Sparse100(b *testing.B) {
function BenchmarkPageRank_Sparse500 (line 97) | func BenchmarkPageRank_Sparse500(b *testing.B) {
function BenchmarkPageRank_Sparse1000 (line 101) | func BenchmarkPageRank_Sparse1000(b *testing.B) {
function BenchmarkPageRank_Dense500 (line 105) | func BenchmarkPageRank_Dense500(b *testing.B) {
function BenchmarkPageRank_Chain1000 (line 109) | func BenchmarkPageRank_Chain1000(b *testing.B) {
function benchPageRank (line 113) | func benchPageRank(b *testing.B, issues []model.Issue) {
function BenchmarkBetweenness_Sparse100 (line 124) | func BenchmarkBetweenness_Sparse100(b *testing.B) {
function BenchmarkBetweenness_Sparse500 (line 128) | func BenchmarkBetweenness_Sparse500(b *testing.B) {
function BenchmarkBetweenness_Chain500 (line 132) | func BenchmarkBetweenness_Chain500(b *testing.B) {
function BenchmarkBetweenness_Dense100 (line 136) | func BenchmarkBetweenness_Dense100(b *testing.B) {
function benchBetweenness (line 140) | func benchBetweenness(b *testing.B, issues []model.Issue) {
function BenchmarkHITS_Sparse100 (line 151) | func BenchmarkHITS_Sparse100(b *testing.B) {
function BenchmarkHITS_Sparse500 (line 155) | func BenchmarkHITS_Sparse500(b *testing.B) {
function BenchmarkHITS_Dense100 (line 159) | func BenchmarkHITS_Dense100(b *testing.B) {
function benchHITS (line 163) | func benchHITS(b *testing.B, issues []model.Issue) {
function BenchmarkTopoSort_Sparse500 (line 177) | func BenchmarkTopoSort_Sparse500(b *testing.B) {
function BenchmarkTopoSort_Chain1000 (line 181) | func BenchmarkTopoSort_Chain1000(b *testing.B) {
function BenchmarkTopoSort_Deep1000 (line 185) | func BenchmarkTopoSort_Deep1000(b *testing.B) {
function benchTopoSort (line 189) | func benchTopoSort(b *testing.B, issues []model.Issue) {
function BenchmarkTarjanSCC_Sparse500 (line 200) | func BenchmarkTarjanSCC_Sparse500(b *testing.B) {
function BenchmarkTarjanSCC_Chain1000 (line 204) | func BenchmarkTarjanSCC_Chain1000(b *testing.B) {
function BenchmarkTarjanSCC_Cyclic100 (line 208) | func BenchmarkTarjanSCC_Cyclic100(b *testing.B) {
function benchTarjanSCC (line 212) | func benchTarjanSCC(b *testing.B, issues []model.Issue) {
function BenchmarkNewAnalyzer_Sparse500 (line 226) | func BenchmarkNewAnalyzer_Sparse500(b *testing.B) {
function BenchmarkNewAnalyzer_Sparse1000 (line 236) | func BenchmarkNewAnalyzer_Sparse1000(b *testing.B) {
function buildGraph (line 251) | func buildGraph(issues []model.Issue) *simple.DirectedGraph {
FILE: pkg/analysis/benchmark_test.go
function BenchmarkAnalyzePhase1Only (line 10) | func BenchmarkAnalyzePhase1Only(b *testing.B) {
FILE: pkg/analysis/betweenness_approx.go
type denseIndex (line 14) | type denseIndex struct
function buildDenseIndex (line 19) | func buildDenseIndex(nodes []graph.Node) denseIndex {
type cachedAdjacency (line 34) | type cachedAdjacency struct
function buildCachedAdjacency (line 39) | func buildCachedAdjacency(g graph.Directed, idx denseIndex) cachedAdjace...
type brandesBuffers (line 91) | type brandesBuffers struct
method reset (line 169) | func (b *brandesBuffers) reset(nodeCount int) {
function pooledNodesOf (line 139) | func pooledNodesOf(it graph.Nodes) []graph.Node {
function putPooledNodes (line 148) | func putPooledNodes(nodes []graph.Node) {
type BetweennessMode (line 218) | type BetweennessMode
constant BetweennessExact (line 223) | BetweennessExact BetweennessMode = "exact"
constant BetweennessApproximate (line 228) | BetweennessApproximate BetweennessMode = "approximate"
constant BetweennessSkip (line 231) | BetweennessSkip BetweennessMode = "skip"
type BetweennessResult (line 235) | type BetweennessResult struct
function ApproxBetweenness (line 270) | func ApproxBetweenness(g graph.Directed, sampleSize int, seed int64) Bet...
function sampleIndices (line 364) | func sampleIndices(n, k int, seed int64) []int {
function singleSourceBetweennessDense (line 394) | func singleSourceBetweennessDense(adj cachedAdjacency, sourceIdx int, bu...
function RecommendSampleSize (line 459) | func RecommendSampleSize(nodeCount, edgeCount int) int {
FILE: pkg/analysis/betweenness_approx_test.go
function TestApproxBetweenness_SmallGraph (line 9) | func TestApproxBetweenness_SmallGraph(t *testing.T) {
function TestApproxBetweenness_LargeGraph_Approximate (line 33) | func TestApproxBetweenness_LargeGraph_Approximate(t *testing.T) {
function TestApproxBetweenness_EmptyGraph (line 61) | func TestApproxBetweenness_EmptyGraph(t *testing.T) {
function TestApproxBetweenness_ZeroSampleSize (line 71) | func TestApproxBetweenness_ZeroSampleSize(t *testing.T) {
function TestApproxBetweenness_NegativeSampleSize (line 88) | func TestApproxBetweenness_NegativeSampleSize(t *testing.T) {
function TestRecommendSampleSize (line 104) | func TestRecommendSampleSize(t *testing.T) {
function TestBetweennessMode_ConfigIntegration (line 127) | func TestBetweennessMode_ConfigIntegration(t *testing.T) {
function BenchmarkApproxBetweenness_500nodes_Exact (line 150) | func BenchmarkApproxBetweenness_500nodes_Exact(b *testing.B) {
function BenchmarkApproxBetweenness_500nodes_Sample100 (line 159) | func BenchmarkApproxBetweenness_500nodes_Sample100(b *testing.B) {
function BenchmarkApproxBetweenness_500nodes_Sample50 (line 168) | func BenchmarkApproxBetweenness_500nodes_Sample50(b *testing.B) {
function generateChainGraph (line 178) | func generateChainGraph(n int) []model.Issue {
function generateID (line 195) | func generateID(i int) string {
FILE: pkg/analysis/buffer_pool_test.go
function createTestBuffer (line 10) | func createTestBuffer() *brandesBuffers {
function TestBrandesBuffersInitialization (line 28) | func TestBrandesBuffersInitialization(t *testing.T) {
function TestResetClearsAllValues (line 68) | func TestResetClearsAllValues(t *testing.T) {
function TestResetRetainsPredCapacity (line 118) | func TestResetRetainsPredCapacity(t *testing.T) {
function TestResetTriggersResizeOnOversizedBuffers (line 148) | func TestResetTriggersResizeOnOversizedBuffers(t *testing.T) {
function TestResetHandlesEmptyNodes (line 182) | func TestResetHandlesEmptyNodes(t *testing.T) {
function TestPoolReturnsNonNilBuffer (line 206) | func TestPoolReturnsNonNilBuffer(t *testing.T) {
function TestPoolPreallocation (line 222) | func TestPoolPreallocation(t *testing.T) {
function TestPoolEvictionRecovery (line 256) | func TestPoolEvictionRecovery(t *testing.T) {
function TestResetEquivalentToFreshAllocation (line 287) | func TestResetEquivalentToFreshAllocation(t *testing.T) {
function TestStaleEntriesNotAccessible (line 331) | func TestStaleEntriesNotAccessible(t *testing.T) {
function TestSliceCapacityRetention (line 363) | func TestSliceCapacityRetention(t *testing.T) {
function TestBufferPoolConcurrentAccess (line 404) | func TestBufferPoolConcurrentAccess(t *testing.T) {
function TestBufferPoolLifecycle (line 440) | func TestBufferPoolLifecycle(t *testing.T) {
function TestConcurrentPoolGetPut (line 472) | func TestConcurrentPoolGetPut(t *testing.T) {
FILE: pkg/analysis/cache.go
constant robotAnalysisDiskCacheVersion (line 23) | robotAnalysisDiskCacheVersion = 1
constant robotAnalysisDiskCacheFileName (line 24) | robotAnalysisDiskCacheFileName = "analysis_cache.json"
constant robotAnalysisDiskCacheDirName (line 25) | robotAnalysisDiskCacheDirName = "bv"
constant robotAnalysisDiskCacheMaxEntries (line 26) | robotAnalysisDiskCacheMaxEntries = 10
constant robotAnalysisDiskCacheMaxAge (line 27) | robotAnalysisDiskCacheMaxAge = 24 * time.Hour
constant robotAnalysisDiskCacheMaxEntrySize (line 28) | robotAnalysisDiskCacheMaxEntrySize = 10 << 20
type Cache (line 33) | type Cache struct
method Get (line 63) | func (c *Cache) Get(issues []model.Issue) (*GraphStats, bool) {
method GetByHash (line 71) | func (c *Cache) GetByHash(hash string) (*GraphStats, bool) {
method Set (line 86) | func (c *Cache) Set(issues []model.Issue, stats *GraphStats) {
method SetByHash (line 93) | func (c *Cache) SetByHash(hash string, stats *GraphStats) {
method Invalidate (line 103) | func (c *Cache) Invalidate() {
method SetTTL (line 113) | func (c *Cache) SetTTL(ttl time.Duration) {
method Hash (line 120) | func (c *Cache) Hash() string {
method Stats (line 127) | func (c *Cache) Stats() (hash string, age time.Duration, hasData bool) {
constant DefaultCacheTTL (line 42) | DefaultCacheTTL = 5 * time.Minute
function GetGlobalCache (line 50) | func GetGlobalCache() *Cache {
function NewCache (line 55) | func NewCache(ttl time.Duration) *Cache {
function ComputeDataHash (line 140) | func ComputeDataHash(issues []model.Issue) string {
type IssueFingerprint (line 307) | type IssueFingerprint struct
type IssueDiff (line 314) | type IssueDiff struct
function ComputeIssueFingerprint (line 324) | func ComputeIssueFingerprint(issue model.Issue) IssueFingerprint {
function ComputeIssueDiff (line 333) | func ComputeIssueDiff(oldIssues, newIssues []model.Issue) IssueDiff {
function computeIssueContentHash (line 382) | func computeIssueContentHash(issue model.Issue) string {
function computeIssueDependencyHash (line 443) | func computeIssueDependencyHash(issue model.Issue) string {
function writeStringHash (line 488) | func writeStringHash(w io.Writer, v string) {
function writeStringPtrHash (line 495) | func writeStringPtrHash(w io.Writer, v *string) {
function writeIntHash (line 502) | func writeIntHash(w io.Writer, v int) {
function writeIntPtrHash (line 507) | func writeIntPtrHash(w io.Writer, v *int) {
function writeInt64Hash (line 514) | func writeInt64Hash(w io.Writer, v int64) {
function writeTimeHash (line 519) | func writeTimeHash(w io.Writer, t time.Time) {
function writeTimePtrHash (line 526) | func writeTimePtrHash(w io.Writer, t *time.Time) {
function ComputeConfigHash (line 534) | func ComputeConfigHash(config *AnalysisConfig) string {
type CachedAnalyzer (line 545) | type CachedAnalyzer struct
method SetConfig (line 572) | func (ca *CachedAnalyzer) SetConfig(config *AnalysisConfig) {
method AnalyzeAsync (line 578) | func (ca *CachedAnalyzer) AnalyzeAsync(ctx context.Context) *GraphStats {
method Analyze (line 604) | func (ca *CachedAnalyzer) Analyze() GraphStats {
method DataHash (line 639) | func (ca *CachedAnalyzer) DataHash() string {
method WasCacheHit (line 644) | func (ca *CachedAnalyzer) WasCacheHit() bool {
function NewCachedAnalyzer (line 558) | func NewCachedAnalyzer(issues []model.Issue, cache *Cache) *CachedAnalyz...
type robotAnalysisDiskCacheFile (line 648) | type robotAnalysisDiskCacheFile struct
type robotAnalysisDiskCacheEntry (line 653) | type robotAnalysisDiskCacheEntry struct
type graphStatsCacheBlob (line 662) | type graphStatsCacheBlob struct
method toGraphStats (line 684) | func (b graphStatsCacheBlob) toGraphStats() *GraphStats {
function robotDiskCacheEnabled (line 731) | func robotDiskCacheEnabled() bool {
function beadsDirModTime (line 740) | func beadsDirModTime() time.Time {
function robotAnalysisDiskCachePath (line 790) | func robotAnalysisDiskCachePath(create bool) (string, error) {
function readRobotDiskCacheLocked (line 807) | func readRobotDiskCacheLocked(f *os.File) robotAnalysisDiskCacheFile {
function writeRobotDiskCacheLocked (line 826) | func writeRobotDiskCacheLocked(f *os.File, cf robotAnalysisDiskCacheFile...
function pruneRobotDiskCacheEntries (line 844) | func pruneRobotDiskCacheEntries(now time.Time, entries map[string]robotA...
function evictRobotDiskCacheLRU (line 852) | func evictRobotDiskCacheLRU(entries map[string]robotAnalysisDiskCacheEnt...
function getRobotDiskCachedStats (line 883) | func getRobotDiskCachedStats(fullKey string) (stats *GraphStats, xfetchR...
function putRobotDiskCachedStats (line 941) | func putRobotDiskCachedStats(fullKey, dataHash, configHash string, stats...
FILE: pkg/analysis/cache_extra_test.go
function TestCacheSetTTLAndHash (line 10) | func TestCacheSetTTLAndHash(t *testing.T) {
FILE: pkg/analysis/cache_test.go
function TestComputeDataHash_Empty (line 18) | func TestComputeDataHash_Empty(t *testing.T) {
function TestComputeDataHash_Deterministic (line 30) | func TestComputeDataHash_Deterministic(t *testing.T) {
function TestComputeDataHash_OrderIndependent (line 44) | func TestComputeDataHash_OrderIndependent(t *testing.T) {
function TestComputeDataHash_DifferentData (line 62) | func TestComputeDataHash_DifferentData(t *testing.T) {
function TestComputeDataHash_Dependencies (line 79) | func TestComputeDataHash_Dependencies(t *testing.T) {
function TestCache_GetSet (line 99) | func TestCache_GetSet(t *testing.T) {
function TestCache_HashMismatch (line 126) | func TestCache_HashMismatch(t *testing.T) {
function TestCache_TTLExpiry (line 144) | func TestCache_TTLExpiry(t *testing.T) {
function TestCache_Invalidate (line 170) | func TestCache_Invalidate(t *testing.T) {
function TestCache_Stats (line 196) | func TestCache_Stats(t *testing.T) {
function TestCachedAnalyzer_CacheHit (line 224) | func TestCachedAnalyzer_CacheHit(t *testing.T) {
function TestCachedAnalyzer_CacheMiss_DifferentData (line 259) | func TestCachedAnalyzer_CacheMiss_DifferentData(t *testing.T) {
function TestCachedAnalyzer_DataHash (line 286) | func TestCachedAnalyzer_DataHash(t *testing.T) {
function TestComputeIssueFingerprint_Deterministic (line 298) | func TestComputeIssueFingerprint_Deterministic(t *testing.T) {
function TestComputeIssueDiff (line 338) | func TestComputeIssueDiff(t *testing.T) {
function TestGlobalCache (line 393) | func TestGlobalCache(t *testing.T) {
function TestRobotDiskCache_WritesAndHits (line 422) | func TestRobotDiskCache_WritesAndHits(t *testing.T) {
function TestRobotDiskCache_XFetchRefreshRecomputes (line 482) | func TestRobotDiskCache_XFetchRefreshRecomputes(t *testing.T) {
function TestRobotDiskCache_EvictsToMaxEntries (line 562) | func TestRobotDiskCache_EvictsToMaxEntries(t *testing.T) {
FILE: pkg/analysis/config.go
type AnalysisConfig (line 12) | type AnalysisConfig struct
method AllPhase2Disabled (line 269) | func (c AnalysisConfig) AllPhase2Disabled() bool {
method SkippedMetrics (line 299) | func (c AnalysisConfig) SkippedMetrics() []SkippedMetric {
function DefaultConfig (line 52) | func DefaultConfig() AnalysisConfig {
function ConfigForSize (line 86) | func ConfigForSize(nodeCount, edgeCount int) AnalysisConfig {
function FullAnalysisConfig (line 215) | func FullAnalysisConfig() AnalysisConfig {
function TriageConfig (line 245) | func TriageConfig() AnalysisConfig {
function NoPhase2Config (line 283) | func NoPhase2Config() AnalysisConfig {
type SkippedMetric (line 331) | type SkippedMetric struct
constant EnvSkipPhase2 (line 338) | EnvSkipPhase2 = "BV_SKIP_PHASE2"
constant EnvPhase2TimeoutSeconds (line 340) | EnvPhase2TimeoutSeconds = "BV_PHASE2_TIMEOUT_S"
function ApplyEnvOverrides (line 349) | func ApplyEnvOverrides(cfg AnalysisConfig) AnalysisConfig {
function envPositiveInt (line 387) | func envPositiveInt(name string) (int, bool) {
function envBool (line 399) | func envBool(name string) bool {
FILE: pkg/analysis/config_test.go
function TestConfigForSize_SmallGraph (line 8) | func TestConfigForSize_SmallGraph(t *testing.T) {
function TestConfigForSize_MediumGraph (line 37) | func TestConfigForSize_MediumGraph(t *testing.T) {
function TestConfigForSize_LargeGraph_Sparse (line 60) | func TestConfigForSize_LargeGraph_Sparse(t *testing.T) {
function TestConfigForSize_LargeGraph_Dense (line 77) | func TestConfigForSize_LargeGraph_Dense(t *testing.T) {
function TestConfigForSize_XLGraph (line 96) | func TestConfigForSize_XLGraph(t *testing.T) {
function TestConfigForSize_XLGraph_VeryDense (line 125) | func TestConfigForSize_XLGraph_VeryDense(t *testing.T) {
function TestConfigForSize_XLGraph_VerySparse (line 138) | func TestConfigForSize_XLGraph_VerySparse(t *testing.T) {
function TestSkippedMetrics (line 148) | func TestSkippedMetrics(t *testing.T) {
function TestDefaultConfig (line 179) | func TestDefaultConfig(t *testing.T) {
function TestFullAnalysisConfig (line 203) | func TestFullAnalysisConfig(t *testing.T) {
function TestDefaultConfig_EnvSkipPhase2 (line 218) | func TestDefaultConfig_EnvSkipPhase2(t *testing.T) {
function TestDefaultConfig_EnvPhase2TimeoutOverride (line 234) | func TestDefaultConfig_EnvPhase2TimeoutOverride(t *testing.T) {
function TestDefaultConfig_EnvPhase2TimeoutInvalidIgnored (line 246) | func TestDefaultConfig_EnvPhase2TimeoutInvalidIgnored(t *testing.T) {
FILE: pkg/analysis/cycle_warnings.go
type CycleWarningConfig (line 13) | type CycleWarningConfig struct
function DefaultCycleWarningConfig (line 24) | func DefaultCycleWarningConfig() CycleWarningConfig {
function DetectCycleWarnings (line 32) | func DetectCycleWarnings(issues []model.Issue, config CycleWarningConfig...
function formatCyclePath (line 128) | func formatCyclePath(cycle []string) string {
function WouldCreateCycle (line 136) | func WouldCreateCycle(issues []model.Issue, fromID, toID string) (bool, ...
function CheckDependencyAddition (line 194) | func CheckDependencyAddition(issues []model.Issue, fromID, toID string) ...
type CycleWarningDetector (line 205) | type CycleWarningDetector struct
method Detect (line 217) | func (d *CycleWarningDetector) Detect(issues []model.Issue) []Suggesti...
method ValidateNewDependency (line 222) | func (d *CycleWarningDetector) ValidateNewDependency(issues []model.Is...
function NewCycleWarningDetector (line 210) | func NewCycleWarningDetector(config CycleWarningConfig) *CycleWarningDet...
FILE: pkg/analysis/cycle_warnings_test.go
function TestDefaultCycleWarningConfig (line 11) | func TestDefaultCycleWarningConfig(t *testing.T) {
function TestDetectCycleWarnings_Empty (line 22) | func TestDetectCycleWarnings_Empty(t *testing.T) {
function TestDetectCycleWarnings_NoCycle (line 39) | func TestDetectCycleWarnings_NoCycle(t *testing.T) {
function TestDetectCycleWarnings_SimpleCycle (line 49) | func TestDetectCycleWarnings_SimpleCycle(t *testing.T) {
function TestDetectCycleWarnings_DirectCycle (line 73) | func TestDetectCycleWarnings_DirectCycle(t *testing.T) {
function TestDetectCycleWarnings_MaxCycles (line 116) | func TestDetectCycleWarnings_MaxCycles(t *testing.T) {
function TestDetectCycleWarnings_ConfidenceByLength (line 145) | func TestDetectCycleWarnings_ConfidenceByLength(t *testing.T) {
function TestDetectCycleWarnings_MetadataIncluded (line 169) | func TestDetectCycleWarnings_MetadataIncluded(t *testing.T) {
function TestFormatCyclePath (line 192) | func TestFormatCyclePath(t *testing.T) {
function TestWouldCreateCycle_NoCycle (line 230) | func TestWouldCreateCycle_NoCycle(t *testing.T) {
function TestWouldCreateCycle_CreatesCycle (line 241) | func TestWouldCreateCycle_CreatesCycle(t *testing.T) {
function TestWouldCreateCycle_SelfLoop (line 256) | func TestWouldCreateCycle_SelfLoop(t *testing.T) {
function TestWouldCreateCycle_ExistingCycle (line 273) | func TestWouldCreateCycle_ExistingCycle(t *testing.T) {
function TestCheckDependencyAddition_Valid (line 283) | func TestCheckDependencyAddition_Valid(t *testing.T) {
function TestCheckDependencyAddition_WouldCreateCycle (line 301) | func TestCheckDependencyAddition_WouldCreateCycle(t *testing.T) {
function TestCycleWarningDetector (line 327) | func TestCycleWarningDetector(t *testing.T) {
function TestCycleWarningDetector_ValidateNewDependency (line 343) | func TestCycleWarningDetector_ValidateNewDependency(t *testing.T) {
function TestDetectCycleWarnings_SelfLoopConfig (line 372) | func TestDetectCycleWarnings_SelfLoopConfig(t *testing.T) {
function TestDetectCycleWarnings_Determinism (line 415) | func TestDetectCycleWarnings_Determinism(t *testing.T) {
function BenchmarkDetectCycleWarnings_Small (line 434) | func BenchmarkDetectCycleWarnings_Small(b *testing.B) {
function BenchmarkDetectCycleWarnings_Medium (line 444) | func BenchmarkDetectCycleWarnings_Medium(b *testing.B) {
function BenchmarkWouldCreateCycle_Chain (line 454) | func BenchmarkWouldCreateCycle_Chain(b *testing.B) {
function BenchmarkCheckDependencyAddition (line 463) | func BenchmarkCheckDependencyAddition(b *testing.B) {
FILE: pkg/analysis/dependency_suggest.go
type DependencySuggestionConfig (line 12) | type DependencySuggestionConfig struct
function DefaultDependencySuggestionConfig (line 39) | func DefaultDependencySuggestionConfig() DependencySuggestionConfig {
type DependencyMatch (line 51) | type DependencyMatch struct
function DetectMissingDependencies (line 62) | func DetectMissingDependencies(issues []model.Issue, config DependencySu...
function findSharedKeys (line 258) | func findSharedKeys(m1, m2 map[string]bool) []string {
function sortMatchesByConfidence (line 270) | func sortMatchesByConfidence(matches []DependencyMatch) {
type DependencySuggestionDetector (line 277) | type DependencySuggestionDetector struct
method Detect (line 289) | func (d *DependencySuggestionDetector) Detect(issues []model.Issue) []...
function NewDependencySuggestionDetector (line 282) | func NewDependencySuggestionDetector(config DependencySuggestionConfig) ...
FILE: pkg/analysis/dependency_suggest_test.go
function TestDefaultDependencySuggestionConfig (line 14) | func TestDefaultDependencySuggestionConfig(t *testing.T) {
function TestDependencyMatch_JSON (line 38) | func TestDependencyMatch_JSON(t *testing.T) {
function TestDetectMissingDependencies_Empty (line 69) | func TestDetectMissingDependencies_Empty(t *testing.T) {
function TestDetectMissingDependencies_NoSharedKeywords (line 86) | func TestDetectMissingDependencies_NoSharedKeywords(t *testing.T) {
function TestDetectMissingDependencies_SharedKeywords (line 100) | func TestDetectMissingDependencies_SharedKeywords(t *testing.T) {
function TestDetectMissingDependencies_ExistingDepsIgnored (line 144) | func TestDetectMissingDependencies_ExistingDepsIgnored(t *testing.T) {
function TestDetectMissingDependencies_ClosedIssuesSkipped (line 183) | func TestDetectMissingDependencies_ClosedIssuesSkipped(t *testing.T) {
function TestDetectMissingDependencies_TombstoneSkipped (line 210) | func TestDetectMissingDependencies_TombstoneSkipped(t *testing.T) {
function TestDetectMissingDependencies_LabelOverlap (line 236) | func TestDetectMissingDependencies_LabelOverlap(t *testing.T) {
function TestDetectMissingDependencies_MaxSuggestions (line 271) | func TestDetectMissingDependencies_MaxSuggestions(t *testing.T) {
function TestDetectMissingDependencies_ConfidenceSorted (line 294) | func TestDetectMissingDependencies_ConfidenceSorted(t *testing.T) {
function TestFindSharedKeys (line 339) | func TestFindSharedKeys(t *testing.T) {
function TestSortMatchesByConfidence (line 388) | func TestSortMatchesByConfidence(t *testing.T) {
function TestDependencySuggestionDetector (line 407) | func TestDependencySuggestionDetector(t *testing.T) {
function TestDetectMissingDependencies_IDMentioned (line 429) | func TestDetectMissingDependencies_IDMentioned(t *testing.T) {
function TestDetectMissingDependencies_DeterminismWithTimestamps (line 456) | func TestDetectMissingDependencies_DeterminismWithTimestamps(t *testing....
function BenchmarkDetectMissingDependencies_Small (line 497) | func BenchmarkDetectMissingDependencies_Small(b *testing.B) {
function BenchmarkDetectMissingDependencies_Medium (line 507) | func BenchmarkDetectMissingDependencies_Medium(b *testing.B) {
function BenchmarkDetectMissingDependencies_Large (line 517) | func BenchmarkDetectMissingDependencies_Large(b *testing.B) {
FILE: pkg/analysis/diff.go
type Snapshot (line 12) | type Snapshot struct
method computeCounts (line 55) | func (s *Snapshot) computeCounts() {
function NewSnapshot (line 26) | func NewSnapshot(issues []model.Issue) *Snapshot {
function NewSnapshotAt (line 40) | func NewSnapshotAt(issues []model.Issue, timestamp time.Time, revision s...
type SnapshotDiff (line 75) | type SnapshotDiff struct
method IsEmpty (line 464) | func (d *SnapshotDiff) IsEmpty() bool {
method HasSignificantChanges (line 471) | func (d *SnapshotDiff) HasSignificantChanges() bool {
type ModifiedIssue (line 101) | type ModifiedIssue struct
type FieldChange (line 110) | type FieldChange struct
type MetricDeltas (line 117) | type MetricDeltas struct
type DiffSummary (line 130) | type DiffSummary struct
function CompareSnapshots (line 144) | func CompareSnapshots(from, to *Snapshot) *SnapshotDiff {
function detectChanges (line 245) | func detectChanges(from, to model.Issue) []FieldChange {
function compareCycles (line 344) | func compareCycles(from, to *GraphStats) (newCycles, resolvedCycles [][]...
function sortCycles (line 383) | func sortCycles(cycles [][]string) {
function normalizeCycle (line 390) | func normalizeCycle(cycle []string) string {
function calculateMetricDeltas (line 421) | func calculateMetricDeltas(from, to *Snapshot) MetricDeltas {
function avgMapValue (line 444) | func avgMapValue(m map[string]float64) float64 {
function calculateSummary (line 481) | func calculateSummary(diff *SnapshotDiff) DiffSummary {
function priorityString (line 531) | func priorityString(p int) string {
function dependencySet (line 539) | func dependencySet(deps []*model.Dependency) map[string]bool {
function stringSet (line 552) | func stringSet(strs []string) map[string]bool {
function equalStringSet (line 560) | func equalStringSet(a, b map[string]bool) bool {
function formatDeps (line 572) | func formatDeps(deps map[string]bool) string {
function formatLabels (line 584) | func formatLabels(labels []string) string {
function joinStrings (line 594) | func joinStrings(strs []string, sep string) string {
function sortIssuesByID (line 605) | func sortIssuesByID(issues []model.Issue) {
function sortModifiedByID (line 611) | func sortModifiedByID(modified []ModifiedIssue) {
FILE: pkg/analysis/diff_extended_test.go
function TestDiff_TextFieldChanges (line 12) | func TestDiff_TextFieldChanges(t *testing.T) {
function TestDiff_DependencyChanges (line 65) | func TestDiff_DependencyChanges(t *testing.T) {
function TestDiff_LabelChanges (line 103) | func TestDiff_LabelChanges(t *testing.T) {
function TestDiff_ComplexScenario (line 133) | func TestDiff_ComplexScenario(t *testing.T) {
FILE: pkg/analysis/diff_test.go
function TestNewSnapshot (line 10) | func TestNewSnapshot(t *testing.T) {
function TestNewSnapshotAt (line 32) | func TestNewSnapshotAt(t *testing.T) {
function TestCompareSnapshots_NewIssues (line 48) | func TestCompareSnapshots_NewIssues(t *testing.T) {
function TestCompareSnapshots_RemovedIssues (line 72) | func TestCompareSnapshots_RemovedIssues(t *testing.T) {
function TestCompareSnapshots_ClosedIssues (line 93) | func TestCompareSnapshots_ClosedIssues(t *testing.T) {
function TestCompareSnapshots_TombstoneCountsAsClosed (line 113) | func TestCompareSnapshots_TombstoneCountsAsClosed(t *testing.T) {
function TestCompareSnapshots_ReopenedIssues (line 133) | func TestCompareSnapshots_ReopenedIssues(t *testing.T) {
function TestDependencySetIgnoresNilAndEmpty (line 150) | func TestDependencySetIgnoresNilAndEmpty(t *testing.T) {
function TestCompareSnapshots_ModifiedIssues (line 168) | func TestCompareSnapshots_ModifiedIssues(t *testing.T) {
function TestCompareSnapshots_CycleChanges (line 193) | func TestCompareSnapshots_CycleChanges(t *testing.T) {
function TestDetectChanges (line 217) | func TestDetectChanges(t *testing.T) {
function TestNormalizeCycle (line 254) | func TestNormalizeCycle(t *testing.T) {
function TestMetricDeltas (line 269) | func TestMetricDeltas(t *testing.T) {
function TestDiffSummary_HealthTrend (line 295) | func TestDiffSummary_HealthTrend(t *testing.T) {
function TestSnapshotDiff_IsEmpty (line 341) | func TestSnapshotDiff_IsEmpty(t *testing.T) {
function TestSnapshotDiff_HasSignificantChanges (line 355) | func TestSnapshotDiff_HasSignificantChanges(t *testing.T) {
function TestAvgMapValue (line 370) | func TestAvgMapValue(t *testing.T) {
function TestCompareSnapshots_DependencyTypeChange (line 391) | func TestCompareSnapshots_DependencyTypeChange(t *testing.T) {
FILE: pkg/analysis/duplicates.go
function isClosedLikeDuplicateStatus (line 35) | func isClosedLikeDuplicateStatus(status model.Status) bool {
type DuplicateConfig (line 40) | type DuplicateConfig struct
function DefaultDuplicateConfig (line 59) | func DefaultDuplicateConfig() DuplicateConfig {
type DuplicatePair (line 69) | type DuplicatePair struct
function DetectDuplicates (line 79) | func DetectDuplicates(issues []model.Issue, config DuplicateConfig) []Su...
function intersectKeywords (line 209) | func intersectKeywords(a, b []string) []string {
function extractKeywords (line 225) | func extractKeywords(title, description string) []string {
function sortPairsBySimilarity (line 261) | func sortPairsBySimilarity(pairs []DuplicatePair) {
function truncateStringSlice (line 268) | func truncateStringSlice(s []string, max int) []string {
type DuplicateDetector (line 276) | type DuplicateDetector struct
method Detect (line 290) | func (d *DuplicateDetector) Detect(issues []model.Issue) []Suggestion {
method LastRun (line 297) | func (d *DuplicateDetector) LastRun() time.Time {
function NewDuplicateDetector (line 283) | func NewDuplicateDetector(config DuplicateConfig) *DuplicateDetector {
FILE: pkg/analysis/duplicates_test.go
function TestExtractKeywords_BasicExtraction (line 14) | func TestExtractKeywords_BasicExtraction(t *testing.T) {
function TestExtractKeywords_FiltersShortWords (line 79) | func TestExtractKeywords_FiltersShortWords(t *testing.T) {
function TestExtractKeywords_RemovesDuplicates (line 88) | func TestExtractKeywords_RemovesDuplicates(t *testing.T) {
function TestExtractKeywords_EmptyInput (line 101) | func TestExtractKeywords_EmptyInput(t *testing.T) {
function TestExtractKeywords_StopWordsFiltered (line 108) | func TestExtractKeywords_StopWordsFiltered(t *testing.T) {
function TestDetectDuplicates_IdenticalTitles (line 119) | func TestDetectDuplicates_IdenticalTitles(t *testing.T) {
function TestDetectDuplicates_IdenticalContent (line 141) | func TestDetectDuplicates_IdenticalContent(t *testing.T) {
function TestDetectDuplicates_SimilarTitles (line 169) | func TestDetectDuplicates_SimilarTitles(t *testing.T) {
function TestDetectDuplicates_DifferentCase (line 184) | func TestDetectDuplicates_DifferentCase(t *testing.T) {
function TestDetectDuplicates_ShortGenericTitles (line 202) | func TestDetectDuplicates_ShortGenericTitles(t *testing.T) {
function TestDetectDuplicates_CompletelyDifferent (line 221) | func TestDetectDuplicates_CompletelyDifferent(t *testing.T) {
function TestDetectDuplicates_IgnoreClosedVsOpen (line 236) | func TestDetectDuplicates_IgnoreClosedVsOpen(t *testing.T) {
function TestDetectDuplicates_SkipsTombstone (line 257) | func TestDetectDuplicates_SkipsTombstone(t *testing.T) {
function TestDetectDuplicates_JaccardThreshold (line 275) | func TestDetectDuplicates_JaccardThreshold(t *testing.T) {
function TestDetectDuplicates_MaxSuggestions (line 294) | func TestDetectDuplicates_MaxSuggestions(t *testing.T) {
function TestDetectDuplicates_MinKeywords (line 314) | func TestDetectDuplicates_MinKeywords(t *testing.T) {
function TestDetectDuplicates_SingleIssue (line 334) | func TestDetectDuplicates_SingleIssue(t *testing.T) {
function TestDetectDuplicates_EmptyIssues (line 346) | func TestDetectDuplicates_EmptyIssues(t *testing.T) {
function TestDetectDuplicates_SuggestionStructure (line 354) | func TestDetectDuplicates_SuggestionStructure(t *testing.T) {
function TestDetectDuplicates_SortedBySimilarity (line 392) | func TestDetectDuplicates_SortedBySimilarity(t *testing.T) {
function TestSortPairsBySimilarity (line 416) | func TestSortPairsBySimilarity(t *testing.T) {
function TestSortPairsBySimilarity_Empty (line 433) | func TestSortPairsBySimilarity_Empty(t *testing.T) {
function TestTruncateStringSlice (line 438) | func TestTruncateStringSlice(t *testing.T) {
function TestDuplicateDetector_Detect (line 466) | func TestDuplicateDetector_Detect(t *testing.T) {
function TestDuplicateDetector_LastRun (line 480) | func TestDuplicateDetector_LastRun(t *testing.T) {
function TestDuplicateDetector_CustomConfig (line 501) | func TestDuplicateDetector_CustomConfig(t *testing.T) {
function TestDefaultDuplicateConfig (line 527) | func TestDefaultDuplicateConfig(t *testing.T) {
function TestDuplicatePair_Fields (line 548) | func TestDuplicatePair_Fields(t *testing.T) {
function TestDetectDuplicates_RealisticScenario (line 578) | func TestDetectDuplicates_RealisticScenario(t *testing.T) {
function TestDetectDuplicates_LargeIssueSet (line 613) | func TestDetectDuplicates_LargeIssueSet(t *testing.T) {
FILE: pkg/analysis/e2e_startup_test.go
function skipIfNotPerfTest (line 19) | func skipIfNotPerfTest(t *testing.T) {
function TestE2EStartup_SmallProject (line 37) | func TestE2EStartup_SmallProject(t *testing.T) {
function TestE2EStartup_MediumProject (line 55) | func TestE2EStartup_MediumProject(t *testing.T) {
function TestE2EStartup_LargeProject (line 73) | func TestE2EStartup_LargeProject(t *testing.T) {
function TestE2EStartup_XLProject (line 91) | func TestE2EStartup_XLProject(t *testing.T) {
function TestE2EStartup_WithRealBeadsFile (line 109) | func TestE2EStartup_WithRealBeadsFile(t *testing.T) {
function TestE2EStartup_PathologicalCycles (line 156) | func TestE2EStartup_PathologicalCycles(t *testing.T) {
function TestE2EStartup_PathologicalDense (line 182) | func TestE2EStartup_PathologicalDense(t *testing.T) {
function TestE2EStartup_NoRegression (line 208) | func TestE2EStartup_NoRegression(t *testing.T) {
function generateRealisticIssues (line 279) | func generateRealisticIssues(n, avgDeps int) []model.Issue {
function generateManyCyclesIssues (line 316) | func generateManyCyclesIssues(n int) []model.Issue {
function generateDenseIssues (line 340) | func generateDenseIssues(n, depsPerNode int) []model.Issue {
function TestPhase1Only_MediumProject (line 367) | func TestPhase1Only_MediumProject(t *testing.T) {
function TestPhase1Only_LargeProject (line 397) | func TestPhase1Only_LargeProject(t *testing.T) {
FILE: pkg/analysis/eta.go
type ETAEstimate (line 14) | type ETAEstimate struct
function EstimateETAForIssue (line 31) | func EstimateETAForIssue(issues []model.Issue, stats *GraphStats, issueI...
function estimateComplexityMinutes (line 94) | func estimateComplexityMinutes(issue model.Issue, stats *GraphStats, med...
function estimateVelocityMinutesPerDay (line 151) | func estimateVelocityMinutesPerDay(issues []model.Issue, issue model.Iss...
function velocityMinutesPerDayForLabel (line 185) | func velocityMinutesPerDayForLabel(issues []model.Issue, label string, s...
function hasLabel (line 224) | func hasLabel(labels []string, target string) bool {
function estimateETAConfidence (line 237) | func estimateETAConfidence(issue model.Issue, velocitySamples int) float...
function computeMedianEstimatedMinutes (line 261) | func computeMedianEstimatedMinutes(issues []model.Issue) int {
function durationDays (line 283) | func durationDays(days float64) time.Duration {
function clampFloat (line 290) | func clampFloat(v, lo, hi float64) float64 {
FILE: pkg/analysis/eta_test.go
function TestEstimateETAForIssue_Basic (line 11) | func TestEstimateETAForIssue_Basic(t *testing.T) {
function TestEstimateETAForIssue_NotFound (line 54) | func TestEstimateETAForIssue_NotFound(t *testing.T) {
function TestEstimateETAForIssue_WithExplicitEstimate (line 64) | func TestEstimateETAForIssue_WithExplicitEstimate(t *testing.T) {
function TestEstimateETAForIssue_TypeWeights (line 101) | func TestEstimateETAForIssue_TypeWeights(t *testing.T) {
function TestEstimateETAForIssue_MultipleAgents (line 128) | func TestEstimateETAForIssue_MultipleAgents(t *testing.T) {
function TestEstimateETAForIssue_VelocityFromClosures (line 150) | func TestEstimateETAForIssue_VelocityFromClosures(t *testing.T) {
function TestEstimateETAForIssue_DepthAffectsComplexity (line 190) | func TestEstimateETAForIssue_DepthAffectsComplexity(t *testing.T) {
function TestComputeMedianEstimatedMinutes (line 224) | func TestComputeMedianEstimatedMinutes(t *testing.T) {
function TestClampFloat (line 259) | func TestClampFloat(t *testing.T) {
function TestDurationDays (line 271) | func TestDurationDays(t *testing.T) {
function TestHasLabelETA (line 287) | func TestHasLabelETA(t *testing.T) {
function TestEstimateETAForIssue_AllIssueTypes (line 305) | func TestEstimateETAForIssue_AllIssueTypes(t *testing.T) {
function TestEstimateETAForIssue_ZeroAgents (line 340) | func TestEstimateETAForIssue_ZeroAgents(t *testing.T) {
function TestEstimateETAForIssue_DescriptionLengthImpact (line 362) | func TestEstimateETAForIssue_DescriptionLengthImpact(t *testing.T) {
function TestEstimateETAForIssue_NoLabelsConfidencePenalty (line 394) | func TestEstimateETAForIssue_NoLabelsConfidencePenalty(t *testing.T) {
function TestVelocityMinutesPerDayForLabel_EdgeCases (line 423) | func TestVelocityMinutesPerDayForLabel_EdgeCases(t *testing.T) {
function TestEstimateETAConfidence_AllCases (line 461) | func TestEstimateETAConfidence_AllCases(t *testing.T) {
function TestEstimateETAForIssue_GlobalVelocityFallback (line 518) | func TestEstimateETAForIssue_GlobalVelocityFallback(t *testing.T) {
FILE: pkg/analysis/feedback.go
constant FeedbackFile (line 15) | FeedbackFile = "feedback.json"
type FeedbackEvent (line 18) | type FeedbackEvent struct
type WeightAdjustment (line 26) | type WeightAdjustment struct
type FeedbackData (line 34) | type FeedbackData struct
method Save (line 105) | func (f *FeedbackData) Save(beadsDir string) error {
method RecordFeedback (line 125) | func (f *FeedbackData) RecordFeedback(issueID, action string, score fl...
method updateWeightAdjustments (line 171) | func (f *FeedbackData) updateWeightAdjustments(action string, breakdow...
method GetAdjustedWeights (line 218) | func (f *FeedbackData) GetAdjustedWeights() map[string]float64 {
method getAdjustedWeightsLocked (line 225) | func (f *FeedbackData) getAdjustedWeightsLocked() map[string]float64 {
method GetEffectiveWeights (line 234) | func (f *FeedbackData) GetEffectiveWeights() map[string]float64 {
method getEffectiveWeightsLocked (line 241) | func (f *FeedbackData) getEffectiveWeightsLocked() map[string]float64 {
method Reset (line 279) | func (f *FeedbackData) Reset() {
method Summary (line 290) | func (f *FeedbackData) Summary() string {
method ToJSON (line 320) | func (f *FeedbackData) ToJSON() FeedbackJSON {
type FeedbackStats (line 45) | type FeedbackStats struct
function DefaultFeedbackData (line 53) | func DefaultFeedbackData() *FeedbackData {
function defaultWeightAdjustments (line 65) | func defaultWeightAdjustments() []WeightAdjustment {
function LoadFeedback (line 83) | func LoadFeedback(beadsDir string) (*FeedbackData, error) {
function updateRunningAverage (line 160) | func updateRunningAverage(currentAvg, newValue float64, count int) float...
constant smoothingAlpha (line 169) | smoothingAlpha = 0.2
type FeedbackJSON (line 307) | type FeedbackJSON struct
FILE: pkg/analysis/feedback_test.go
function TestDefaultFeedbackData (line 9) | func TestDefaultFeedbackData(t *testing.T) {
function TestRecordFeedback (line 27) | func TestRecordFeedback(t *testing.T) {
function TestRecordIgnoreFeedback (line 62) | func TestRecordIgnoreFeedback(t *testing.T) {
function TestInvalidAction (line 92) | func TestInvalidAction(t *testing.T) {
function TestSaveAndLoad (line 101) | func TestSaveAndLoad(t *testing.T) {
function TestLoadNonexistent (line 141) | func TestLoadNonexistent(t *testing.T) {
function TestGetEffectiveWeights (line 155) | func TestGetEffectiveWeights(t *testing.T) {
function TestReset (line 172) | func TestReset(t *testing.T) {
function TestSummary (line 198) | func TestSummary(t *testing.T) {
function TestToJSON (line 215) | func TestToJSON(t *testing.T) {
function TestWeightAdjustmentBounds (line 238) | func TestWeightAdjustmentBounds(t *testing.T) {
FILE: pkg/analysis/file_lock_unix.go
function lockFile (line 11) | func lockFile(f *os.File) error {
function unlockFile (line 15) | func unlockFile(f *os.File) error {
FILE: pkg/analysis/file_lock_windows.go
function lockFile (line 11) | func lockFile(f *os.File) error {
function unlockFile (line 17) | func unlockFile(f *os.File) error {
FILE: pkg/analysis/golden_test.go
type TestGraphFile (line 14) | type TestGraphFile struct
type GoldenMetrics (line 21) | type GoldenMetrics struct
function loadTestGraph (line 42) | func loadTestGraph(t *testing.T, path string) []model.Issue {
function TestGenerateGoldenFiles (line 93) | func TestGenerateGoldenFiles(t *testing.T) {
function TestValidateGoldenFiles (line 172) | func TestValidateGoldenFiles(t *testing.T) {
function validateMapFloat64 (line 247) | func validateMapFloat64(t *testing.T, name string, actual, expected map[...
FILE: pkg/analysis/graph.go
type StartupProfile (line 24) | type StartupProfile struct
type GraphStats (line 65) | type GraphStats struct
method IsPhase2Ready (line 147) | func (s *GraphStats) IsPhase2Ready() bool {
method Status (line 154) | func (s *GraphStats) Status() MetricStatus {
method WaitForPhase2 (line 183) | func (s *GraphStats) WaitForPhase2() {
method GetPageRankScore (line 191) | func (s *GraphStats) GetPageRankScore(id string) float64 {
method GetBetweennessScore (line 201) | func (s *GraphStats) GetBetweennessScore(id string) float64 {
method GetEigenvectorScore (line 211) | func (s *GraphStats) GetEigenvectorScore(id string) float64 {
method GetHubScore (line 221) | func (s *GraphStats) GetHubScore(id string) float64 {
method GetAuthorityScore (line 231) | func (s *GraphStats) GetAuthorityScore(id string) float64 {
method GetCriticalPathScore (line 241) | func (s *GraphStats) GetCriticalPathScore(id string) float64 {
method PageRankValue (line 268) | func (s *GraphStats) PageRankValue(id string) (float64, bool) {
method PageRankAll (line 282) | func (s *GraphStats) PageRankAll(fn func(id string, score float64) boo...
method BetweennessValue (line 298) | func (s *GraphStats) BetweennessValue(id string) (float64, bool) {
method BetweennessAll (line 309) | func (s *GraphStats) BetweennessAll(fn func(id string, score float64) ...
method EigenvectorValue (line 324) | func (s *GraphStats) EigenvectorValue(id string) (float64, bool) {
method EigenvectorAll (line 335) | func (s *GraphStats) EigenvectorAll(fn func(id string, score float64) ...
method HubValue (line 350) | func (s *GraphStats) HubValue(id string) (float64, bool) {
method HubsAll (line 361) | func (s *GraphStats) HubsAll(fn func(id string, score float64) bool) {
method AuthorityValue (line 376) | func (s *GraphStats) AuthorityValue(id string) (float64, bool) {
method AuthoritiesAll (line 387) | func (s *GraphStats) AuthoritiesAll(fn func(id string, score float64) ...
method CriticalPathValue (line 402) | func (s *GraphStats) CriticalPathValue(id string) (float64, bool) {
method CriticalPathAll (line 413) | func (s *GraphStats) CriticalPathAll(fn func(id string, score float64)...
method CoreNumberValue (line 428) | func (s *GraphStats) CoreNumberValue(id string) (int, bool) {
method CoreNumberAll (line 439) | func (s *GraphStats) CoreNumberAll(fn func(id string, core int) bool) {
method SlackValue (line 454) | func (s *GraphStats) SlackValue(id string) (float64, bool) {
method SlackAll (line 465) | func (s *GraphStats) SlackAll(fn func(id string, slack float64) bool) {
method IsArticulationPoint (line 480) | func (s *GraphStats) IsArticulationPoint(id string) (bool, bool) {
method PageRankRankValue (line 494) | func (s *GraphStats) PageRankRankValue(id string) (int, bool) {
method BetweennessRankValue (line 505) | func (s *GraphStats) BetweennessRankValue(id string) (int, bool) {
method EigenvectorRankValue (line 516) | func (s *GraphStats) EigenvectorRankValue(id string) (int, bool) {
method HubsRankValue (line 527) | func (s *GraphStats) HubsRankValue(id string) (int, bool) {
method AuthoritiesRankValue (line 538) | func (s *GraphStats) AuthoritiesRankValue(id string) (int, bool) {
method CriticalPathRankValue (line 549) | func (s *GraphStats) CriticalPathRankValue(id string) (int, bool) {
method InDegreeRankValue (line 560) | func (s *GraphStats) InDegreeRankValue(id string) (int, bool) {
method OutDegreeRankValue (line 571) | func (s *GraphStats) OutDegreeRankValue(id string) (int, bool) {
method PageRank (line 594) | func (s *GraphStats) PageRank() map[string]float64 {
method Betweenness (line 609) | func (s *GraphStats) Betweenness() map[string]float64 {
method Eigenvector (line 624) | func (s *GraphStats) Eigenvector() map[string]float64 {
method Hubs (line 639) | func (s *GraphStats) Hubs() map[string]float64 {
method Authorities (line 654) | func (s *GraphStats) Authorities() map[string]float64 {
method CriticalPathScore (line 669) | func (s *GraphStats) CriticalPathScore() map[string]float64 {
method CoreNumber (line 683) | func (s *GraphStats) CoreNumber() map[string]int {
method ArticulationPoints (line 697) | func (s *GraphStats) ArticulationPoints() []string {
method Slack (line 714) | func (s *GraphStats) Slack() map[string]float64 {
method PageRankRank (line 729) | func (s *GraphStats) PageRankRank() map[string]int {
method BetweennessRank (line 742) | func (s *GraphStats) BetweennessRank() map[string]int {
method EigenvectorRank (line 755) | func (s *GraphStats) EigenvectorRank() map[string]int {
method HubsRank (line 768) | func (s *GraphStats) HubsRank() map[string]int {
method AuthoritiesRank (line 781) | func (s *GraphStats) AuthoritiesRank() map[string]int {
method CriticalPathRank (line 794) | func (s *GraphStats) CriticalPathRank() map[string]int {
method InDegreeRank (line 807) | func (s *GraphStats) InDegreeRank() map[string]int {
method OutDegreeRank (line 820) | func (s *GraphStats) OutDegreeRank() map[string]int {
method Cycles (line 835) | func (s *GraphStats) Cycles() [][]string {
type MetricStatus (line 107) | type MetricStatus struct
type statusEntry (line 120) | type statusEntry struct
method MarshalJSON (line 128) | func (s statusEntry) MarshalJSON() ([]byte, error) {
function stateFromTiming (line 161) | func stateFromTiming(enabled bool, timedOut bool) string {
function betweennessReason (line 172) | func betweennessReason(cfg AnalysisConfig, isApprox bool) string {
function NewGraphStatsForTest (line 851) | func NewGraphStatsForTest(
constant incrementalGraphStatsCacheTTL (line 878) | incrementalGraphStatsCacheTTL = 5 * time.Minute
constant incrementalGraphStatsCacheMaxEntries (line 879) | incrementalGraphStatsCacheMaxEntries = 8
type incrementalGraphStatsCacheEntry (line 882) | type incrementalGraphStatsCacheEntry struct
function getIncrementalGraphStatsCache (line 892) | func getIncrementalGraphStatsCache(key string) (*GraphStats, bool) {
function putIncrementalGraphStatsCache (line 911) | func putIncrementalGraphStatsCache(key string, stats *GraphStats) {
function pruneIncrementalGraphStatsCacheLocked (line 927) | func pruneIncrementalGraphStatsCacheLocked(now time.Time) {
type directedGraph (line 956) | type directedGraph interface
type compactDirectedGraph (line 964) | type compactDirectedGraph struct
method addEdge (line 983) | func (g *compactDirectedGraph) addEdge(from, to int64) {
method Node (line 995) | func (g *compactDirectedGraph) Node(id int64) graph.Node {
method Nodes (line 1002) | func (g *compactDirectedGraph) Nodes() graph.Nodes {
method From (line 1009) | func (g *compactDirectedGraph) From(id int64) graph.Nodes {
method To (line 1020) | func (g *compactDirectedGraph) To(id int64) graph.Nodes {
method HasEdgeFromTo (line 1031) | func (g *compactDirectedGraph) HasEdgeFromTo(uid, vid int64) bool {
method HasEdgeBetween (line 1043) | func (g *compactDirectedGraph) HasEdgeBetween(xid, yid int64) bool {
method Edge (line 1047) | func (g *compactDirectedGraph) Edge(uid, vid int64) graph.Edge {
method Edges (line 1057) | func (g *compactDirectedGraph) Edges() graph.Edges {
function newCompactDirectedGraph (line 971) | func newCompactDirectedGraph(nodeCount int) *compactDirectedGraph {
type compactNodes (line 1064) | type compactNodes struct
method Next (line 1069) | func (it *compactNodes) Next() bool {
method Node (line 1077) | func (it *compactNodes) Node() graph.Node {
method Len (line 1084) | func (it *compactNodes) Len() int {
method Reset (line 1088) | func (it *compactNodes) Reset() {
type compactIDNodes (line 1092) | type compactIDNodes struct
method Next (line 1098) | func (it *compactIDNodes) Next() bool {
method Node (line 1106) | func (it *compactIDNodes) Node() graph.Node {
method Len (line 1117) | func (it *compactIDNodes) Len() int {
method Reset (line 1121) | func (it *compactIDNodes) Reset() {
type compactEdges (line 1125) | type compactEdges struct
method Next (line 1131) | func (it *compactEdges) Next() bool {
method Edge (line 1143) | func (it *compactEdges) Edge() graph.Edge {
method Len (line 1158) | func (it *compactEdges) Len() int {
method Reset (line 1162) | func (it *compactEdges) Reset() {
type Analyzer (line 1168) | type Analyzer struct
method SetConfig (line 1180) | func (a *Analyzer) SetConfig(config *AnalysisConfig) {
method graphStructureHash (line 1184) | func (a *Analyzer) graphStructureHash() string {
method AnalyzeAsync (line 1329) | func (a *Analyzer) AnalyzeAsync(ctx context.Context) *GraphStats {
method AnalyzeAsyncWithConfig (line 1343) | func (a *Analyzer) AnalyzeAsyncWithConfig(ctx context.Context, config ...
method Analyze (line 1457) | func (a *Analyzer) Analyze() GraphStats {
method AnalyzeWithConfig (line 1493) | func (a *Analyzer) AnalyzeWithConfig(config AnalysisConfig) GraphStats {
method AnalyzeWithProfile (line 1529) | func (a *Analyzer) AnalyzeWithProfile(config AnalysisConfig) (*GraphSt...
method computePhase1WithProfile (line 1585) | func (a *Analyzer) computePhase1WithProfile(stats *GraphStats, profile...
method computePhase2WithProfile (line 1618) | func (a *Analyzer) computePhase2WithProfile(ctx context.Context, stats...
method computePhase1 (line 1911) | func (a *Analyzer) computePhase1(stats *GraphStats) {
method computePhase2 (line 1954) | func (a *Analyzer) computePhase2(ctx context.Context, stats *GraphStat...
method computeHeights (line 1994) | func (a *Analyzer) computeHeights(sorted []graph.Node) map[string]floa...
method computeCoreAndArticulation (line 2086) | func (a *Analyzer) computeCoreAndArticulation() (map[string]int, map[s...
method computeSlack (line 2104) | func (a *Analyzer) computeSlack(order []string) map[string]float64 {
method GetActionableIssues (line 2343) | func (a *Analyzer) GetActionableIssues() []model.Issue {
method GetIssue (line 2430) | func (a *Analyzer) GetIssue(id string) *model.Issue {
method GetBlockers (line 2438) | func (a *Analyzer) GetBlockers(issueID string) []string {
method GetOpenBlockers (line 2456) | func (a *Analyzer) GetOpenBlockers(issueID string) []string {
method GetBlockerChain (line 2502) | func (a *Analyzer) GetBlockerChain(issueID string) *BlockerChainResult {
method countBlockedBy (line 2611) | func (a *Analyzer) countBlockedBy(issueID string) int {
function NewAnalyzer (line 1244) | func NewAnalyzer(issues []model.Issue) *Analyzer {
type undirectedAdjacency (line 2018) | type undirectedAdjacency struct
method neighborsOf (line 2074) | func (a undirectedAdjacency) neighborsOf(id int64) []int64 {
method degree (line 2081) | func (a undirectedAdjacency) degree(id int64) int {
function newUndirectedAdjacency (line 2023) | func newUndirectedAdjacency(g directedGraph) undirectedAdjacency {
function computeKCore (line 2186) | func computeKCore(adj undirectedAdjacency) map[int64]int {
function findArticulationPoints (line 2278) | func findArticulationPoints(adj undirectedAdjacency) map[int64]bool {
type BlockerChainEntry (line 2476) | type BlockerChainEntry struct
type BlockerChainResult (line 2488) | type BlockerChainResult struct
function computePageRank (line 2631) | func computePageRank(g graph.Directed, damp, tol float64) map[int64]floa...
function computeEigenvector (line 2742) | func computeEigenvector(g graph.Directed) map[int64]float64 {
function computeFloatRanks (line 2838) | func computeFloatRanks(m map[string]float64) map[string]int {
function computeIntRanks (line 2864) | func computeIntRanks(m map[string]int) map[string]int {
FILE: pkg/analysis/graph_accessor_benchmark_test.go
function createLargeGraphStats (line 9) | func createLargeGraphStats(n int) *GraphStats {
function BenchmarkPageRank_MapCopy (line 48) | func BenchmarkPageRank_MapCopy(b *testing.B) {
function BenchmarkPageRank_SingleValue (line 65) | func BenchmarkPageRank_SingleValue(b *testing.B) {
function BenchmarkBetweenness_MapCopy (line 81) | func BenchmarkBetweenness_MapCopy(b *testing.B) {
function BenchmarkBetweenness_SingleValue (line 98) | func BenchmarkBetweenness_SingleValue(b *testing.B) {
function BenchmarkIteration_MapCopy (line 114) | func BenchmarkIteration_MapCopy(b *testing.B) {
function BenchmarkIteration_All (line 134) | func BenchmarkIteration_All(b *testing.B) {
function BenchmarkMultipleAccess_MapCopy (line 155) | func BenchmarkMultipleAccess_MapCopy(b *testing.B) {
function BenchmarkMultipleAccess_SingleValue (line 171) | func BenchmarkMultipleAccess_SingleValue(b *testing.B) {
FILE: pkg/analysis/graph_accessor_test.go
function createTestGraphStatsForAccessors (line 9) | func createTestGraphStatsForAccessors() *GraphStats {
function floatEq (line 26) | func floatEq(a, b float64) bool {
function TestPageRankValue (line 31) | func TestPageRankValue(t *testing.T) {
function TestPageRankAll (line 67) | func TestPageRankAll(t *testing.T) {
function TestPageRank_Isomorphic (line 116) | func TestPageRank_Isomorphic(t *testing.T) {
function TestBetweennessValue (line 150) | func TestBetweennessValue(t *testing.T) {
function TestEigenvectorValue (line 168) | func TestEigenvectorValue(t *testing.T) {
function TestHubValue (line 186) | func TestHubValue(t *testing.T) {
function TestAuthorityValue (line 204) | func TestAuthorityValue(t *testing.T) {
function TestCriticalPathValue (line 222) | func TestCriticalPathValue(t *testing.T) {
function TestRankValueAccessors (line 240) | func TestRankValueAccessors(t *testing.T) {
function TestIteratorEarlyTermination (line 278) | func TestIteratorEarlyTermination(t *testing.T) {
function TestCoreNumberValue (line 307) | func TestCoreNumberValue(t *testing.T) {
function TestSlackValue (line 327) | func TestSlackValue(t *testing.T) {
function TestIsArticulationPoint (line 355) | func TestIsArticulationPoint(t *testing.T) {
FILE: pkg/analysis/graph_cycles.go
function findCyclesSafe (line 12) | func findCyclesSafe(g graph.Directed, limit int) [][]graph.Node {
function findOneCycleInSCC (line 58) | func findOneCycleInSCC(g graph.Directed, scc []graph.Node) []graph.Node {
FILE: pkg/analysis/graph_cycles_test.go
function buildTestGraph (line 12) | func buildTestGraph(nodes int, edges [][2]int) *simple.DirectedGraph {
function TestFindCyclesSafe_Empty (line 28) | func TestFindCyclesSafe_Empty(t *testing.T) {
function TestFindCyclesSafe_NoCycles (line 36) | func TestFindCyclesSafe_NoCycles(t *testing.T) {
function TestFindCyclesSafe_SelfLoop (line 46) | func TestFindCyclesSafe_SelfLoop(t *testing.T) {
function TestFindCyclesSafe_SimpleCycle (line 69) | func TestFindCyclesSafe_SimpleCycle(t *testing.T) {
function TestFindCyclesSafe_DirectCycle (line 91) | func TestFindCyclesSafe_DirectCycle(t *testing.T) {
function TestFindCyclesSafe_MultipleCycles (line 108) | func TestFindCyclesSafe_MultipleCycles(t *testing.T) {
function TestFindCyclesSafe_Limit (line 120) | func TestFindCyclesSafe_Limit(t *testing.T) {
function TestFindCyclesSafe_SortedByLength (line 135) | func TestFindCyclesSafe_SortedByLength(t *testing.T) {
function TestFindCyclesSafe_Determinism (line 158) | func TestFindCyclesSafe_Determinism(t *testing.T) {
function TestFindOneCycleInSCC_Empty (line 191) | func TestFindOneCycleInSCC_Empty(t *testing.T) {
function TestFindOneCycleInSCC_SingleNode (line 199) | func TestFindOneCycleInSCC_SingleNode(t *testing.T) {
function TestFindOneCycleInSCC_TriangleSCC (line 209) | func TestFindOneCycleInSCC_TriangleSCC(t *testing.T) {
function TestFindOneCycleInSCC_LargeSCC (line 226) | func TestFindOneCycleInSCC_LargeSCC(t *testing.T) {
function toGraphNodes (line 248) | func toGraphNodes(nodes []simple.Node) []graph.Node {
function TestFindCyclesSafe_WithIssues (line 257) | func TestFindCyclesSafe_WithIssues(t *testing.T) {
function TestFindCyclesSafe_StarTopology (line 271) | func TestFindCyclesSafe_StarTopology(t *testing.T) {
function TestFindCyclesSafe_DiamondTopology (line 284) | func TestFindCyclesSafe_DiamondTopology(t *testing.T) {
function BenchmarkFindCyclesSafe_Small (line 297) | func BenchmarkFindCyclesSafe_Small(b *testing.B) {
function BenchmarkFindCyclesSafe_Medium (line 306) | func BenchmarkFindCyclesSafe_Medium(b *testing.B) {
function BenchmarkFindCyclesSafe_Large (line 320) | func BenchmarkFindCyclesSafe_Large(b *testing.B) {
function BenchmarkFindOneCycleInSCC (line 338) | func BenchmarkFindOneCycleInSCC(b *testing.B) {
FILE: pkg/analysis/graph_extra_test.go
function TestAnalyzerProfileAndGetters (line 12) | func TestAnalyzerProfileAndGetters(t *testing.T) {
function TestAnalyzerAnalyzeWithConfigCachesPhase2 (line 39) | func TestAnalyzerAnalyzeWithConfigCachesPhase2(t *testing.T) {
function TestAnalyzerAnalyzeAsync_ReusesStatsWhenGraphUnchanged (line 60) | func TestAnalyzerAnalyzeAsync_ReusesStatsWhenGraphUnchanged(t *testing.T) {
function TestAnalyzerAnalyzeAsync_DoesNotReuseStatsWhenGraphChanges (line 100) | func TestAnalyzerAnalyzeAsync_DoesNotReuseStatsWhenGraphChanges(t *testi...
FILE: pkg/analysis/graph_test.go
function getIDs (line 14) | func getIDs(issues []model.Issue) []string {
function contains (line 24) | func contains(slice []string, val string) bool {
function TestGetActionableIssuesEmpty (line 33) | func TestGetActionableIssuesEmpty(t *testing.T) {
function TestAnalyzeEmptyIssues (line 44) | func TestAnalyzeEmptyIssues(t *testing.T) {
function TestGetActionableIssuesAllClosed (line 62) | func TestGetActionableIssuesAllClosed(t *testing.T) {
function TestGetActionableIssuesSingleNoDeps (line 76) | func TestGetActionableIssuesSingleNoDeps(t *testing.T) {
function TestGetActionableIssuesChainAllOpen (line 92) | func TestGetActionableIssuesChainAllOpen(t *testing.T) {
function TestGetActionableIssuesChainLeafClosed (line 114) | func TestGetActionableIssuesChainLeafClosed(t *testing.T) {
function TestGetActionableIssuesChainTwoClosed (line 137) | func TestGetActionableIssuesChainTwoClosed(t *testing.T) {
function TestGetActionableIssuesParallelTracks (line 159) | func TestGetActionableIssuesParallelTracks(t *testing.T) {
function TestGetActionableIssuesMissingBlocker (line 186) | func TestGetActionableIssuesMissingBlocker(t *testing.T) {
function TestAnalyzeIgnoresNonBlockingDependencies (line 204) | func TestAnalyzeIgnoresNonBlockingDependencies(t *testing.T) {
function TestGetActionableIssuesRelatedDoesntBlock (line 234) | func TestGetActionableIssuesRelatedDoesntBlock(t *testing.T) {
function TestGetActionableIssuesParentChildDoesntBlock (line 253) | func TestGetActionableIssuesParentChildDoesntBlock(t *testing.T) {
function TestGetActionableIssuesCycle (line 272) | func TestGetActionableIssuesCycle(t *testing.T) {
function TestGetActionableIssuesCycleWithOneClosed (line 295) | func TestGetActionableIssuesCycleWithOneClosed(t *testing.T) {
function TestGetActionableIssuesMultipleBlockers (line 319) | func TestGetActionableIssuesMultipleBlockers(t *testing.T) {
function TestGetActionableIssuesMultipleBlockersAllClosed (line 340) | func TestGetActionableIssuesMultipleBlockersAllClosed(t *testing.T) {
function TestGetActionableIssuesInProgressStatus (line 360) | func TestGetActionableIssuesInProgressStatus(t *testing.T) {
function TestGetActionableIssuesBlockedStatus (line 374) | func TestGetActionableIssuesBlockedStatus(t *testing.T) {
function TestGetActionableIssuesParentBlockedTransitive (line 389) | func TestGetActionableIssuesParentBlockedTransitive(t *testing.T) {
function TestGetActionableIssuesParentBlockedTransitiveDeep (line 413) | func TestGetActionableIssuesParentBlockedTransitiveDeep(t *testing.T) {
function TestGetActionableIssuesParentNotBlockedChildActionable (line 440) | func TestGetActionableIssuesParentNotBlockedChildActionable(t *testing.T) {
function TestGetActionableIssuesParentClosedChildActionable (line 460) | func TestGetActionableIssuesParentClosedChildActionable(t *testing.T) {
function TestGetActionableIssuesParentBlockedResolvedChildUnblocked (line 479) | func TestGetActionableIssuesParentBlockedResolvedChildUnblocked(t *testi...
function TestGetActionableIssuesMultipleChildrenParentBlocked (line 504) | func TestGetActionableIssuesMultipleChildrenParentBlocked(t *testing.T) {
function TestGetBlockers (line 533) | func TestGetBlockers(t *testing.T) {
function TestGetOpenBlockers (line 553) | func TestGetOpenBlockers(t *testing.T) {
function TestAnalyzeCompletesWithinTimeout (line 576) | func TestAnalyzeCompletesWithinTimeout(t *testing.T) {
function TestAnalyzeNoEdgesGraph (line 613) | func TestAnalyzeNoEdgesGraph(t *testing.T) {
function TestAnalyzeSparseDisconnectedGraph (line 637) | func TestAnalyzeSparseDisconnectedGraph(t *testing.T) {
function TestImpactScore (line 677) | func TestImpactScore(t *testing.T) {
function TestGetBlockerChain (line 724) | func TestGetBlockerChain(t *testing.T) {
FILE: pkg/analysis/insights.go
type InsightItem (line 9) | type InsightItem struct
type Insights (line 15) | type Insights struct
type VelocitySnapshot (line 34) | type VelocitySnapshot struct
method GenerateInsights (line 44) | func (s *GraphStats) GenerateInsights(limit int) Insights {
function findOrphans (line 102) | func findOrphans(outDegree map[string]int) []string {
function getTopItems (line 116) | func getTopItems(m map[string]float64, limit int) []InsightItem {
function getTopItemsInt (line 140) | func getTopItemsInt(m map[string]int, limit int) []InsightItem {
function limitStrings (line 162) | func limitStrings(s []string, limit int) []string {
FILE: pkg/analysis/insights_signals_test.go
function TestInsightsIncludesCoreAndArticulation (line 15) | func TestInsightsIncludesCoreAndArticulation(t *testing.T) {
function TestKCoreLinearChain (line 48) | func TestKCoreLinearChain(t *testing.T) {
function TestKCoreTriangle (line 70) | func TestKCoreTriangle(t *testing.T) {
function TestKCoreDisconnectedNodes (line 90) | func TestKCoreDisconnectedNodes(t *testing.T) {
function TestArticulationLinearChain (line 111) | func TestArticulationLinearChain(t *testing.T) {
function TestArticulationTriangle (line 138) | func TestArticulationTriangle(t *testing.T) {
function TestSlackLinearChain (line 156) | func TestSlackLinearChain(t *testing.T) {
function TestSlackParallelPaths (line 179) | func TestSlackParallelPaths(t *testing.T) {
function TestSlackDiamondWithLongPath (line 208) | func TestSlackDiamondWithLongPath(t *testing.T) {
function TestGraphSignalsEmptyGraph (line 242) | func TestGraphSignalsEmptyGraph(t *testing.T) {
function TestGraphSignalsSingleNode (line 258) | func TestGraphSignalsSingleNode(t *testing.T) {
FILE: pkg/analysis/insights_test.go
function TestGenerateInsights_EmptyStats (line 13) | func TestGenerateInsights_EmptyStats(t *testing.T) {
function TestGenerateInsights_WithData (line 47) | func TestGenerateInsights_WithData(t *testing.T) {
function TestGenerateInsights_ZeroLimit (line 136) | func TestGenerateInsights_ZeroLimit(t *testing.T) {
function TestGenerateInsights_NegativeLimit (line 158) | func TestGenerateInsights_NegativeLimit(t *testing.T) {
function TestGenerateInsights_LimitExceedsItems (line 177) | func TestGenerateInsights_LimitExceedsItems(t *testing.T) {
function TestGetTopItems_Empty (line 200) | func TestGetTopItems_Empty(t *testing.T) {
function TestGetTopItems_SingleItem (line 207) | func TestGetTopItems_SingleItem(t *testing.T) {
function TestGetTopItems_SortOrder (line 219) | func TestGetTopItems_SortOrder(t *testing.T) {
function TestGetTopItems_LimitApplied (line 243) | func TestGetTopItems_LimitApplied(t *testing.T) {
function TestGetTopItems_EqualValues (line 263) | func TestGetTopItems_EqualValues(t *testing.T) {
function TestGetTopItems_ZeroValues (line 283) | func TestGetTopItems_ZeroValues(t *testing.T) {
function TestGenerateInsights_FromRealAnalysis (line 311) | func TestGenerateInsights_FromRealAnalysis(t *testing.T) {
function TestGenerateInsights_WithCycles (line 355) | func TestGenerateInsights_WithCycles(t *testing.T) {
function TestInsightItem_Fields (line 394) | func TestInsightItem_Fields(t *testing.T) {
function TestInsights_EmptyFields (line 412) | func TestInsights_EmptyFields(t *testing.T) {
FILE: pkg/analysis/invariance_test.go
function TestUnblocksInvariance_Basic (line 26) | func TestUnblocksInvariance_Basic(t *testing.T) {
function TestUnblocksInvariance_MixedStatuses (line 56) | func TestUnblocksInvariance_MixedStatuses(t *testing.T) {
function TestUnblocksInvariance_BlockingVsNonBlocking (line 86) | func TestUnblocksInvariance_BlockingVsNonBlocking(t *testing.T) {
function TestUnblocksInvariance_MissingDependencyIDs (line 113) | func TestUnblocksInvariance_MissingDependencyIDs(t *testing.T) {
function TestUnblocksInvariance_DuplicateDependencies (line 150) | func TestUnblocksInvariance_DuplicateDependencies(t *testing.T) {
function TestUnblocksInvariance_PartialUnblock (line 172) | func TestUnblocksInvariance_PartialUnblock(t *testing.T) {
function TestUnblocksInvariance_PartialUnblockWithClosedBlocker (line 199) | func TestUnblocksInvariance_PartialUnblockWithClosedBlocker(t *testing.T) {
function TestUnblocksInvariance_Chain (line 221) | func TestUnblocksInvariance_Chain(t *testing.T) {
function TestUnblocksInvariance_Diamond (line 259) | func TestUnblocksInvariance_Diamond(t *testing.T) {
function TestUnblocksInvariance_DiamondWithOneMidClosed (line 296) | func TestUnblocksInvariance_DiamondWithOneMidClosed(t *testing.T) {
function TestUnblocksInvariance_Cycle (line 321) | func TestUnblocksInvariance_Cycle(t *testing.T) {
function TestUnblocksInvariance_Empty (line 365) | func TestUnblocksInvariance_Empty(t *testing.T) {
function TestUnblocksInvariance_NonexistentID (line 374) | func TestUnblocksInvariance_NonexistentID(t *testing.T) {
function TestUnblocksInvariance_Determinism (line 386) | func TestUnblocksInvariance_Determinism(t *testing.T) {
function TestUnblocksInvariance_LegacyEmptyDepType (line 414) | func TestUnblocksInvariance_LegacyEmptyDepType(t *testing.T) {
function TestVelocityInvariance_FixedNow (line 440) | func TestVelocityInvariance_FixedNow(t *testing.T) {
function TestVelocityInvariance_EstimatedFallback (line 498) | func TestVelocityInvariance_EstimatedFallback(t *testing.T) {
function TestVelocityInvariance_WeekBucketing (line 525) | func TestVelocityInvariance_WeekBucketing(t *testing.T) {
function TestVelocityInvariance_AvgDaysToClose (line 565) | func TestVelocityInvariance_AvgDaysToClose(t *testing.T) {
function TestVelocityInvariance_Empty (line 593) | func TestVelocityInvariance_Empty(t *testing.T) {
function TestVelocityInvariance_OnlyOpenIssues (line 609) | func TestVelocityInvariance_OnlyOpenIssues(t *testing.T) {
function TestVelocityInvariance_Determinism (line 628) | func TestVelocityInvariance_Determinism(t *testing.T) {
function TestTriageSanity_GoldenRecommendationOrder (line 661) | func TestTriageSanity_GoldenRecommendationOrder(t *testing.T) {
function stringSlicesEqual (line 731) | func stringSlicesEqual(a, b []string) bool {
FILE: pkg/analysis/label_health.go
type LabelHealth (line 22) | type LabelHealth struct
type VelocityMetrics (line 38) | type VelocityMetrics struct
type HistoricalVelocity (line 48) | type HistoricalVelocity struct
method GetVelocityTrend (line 2267) | func (hv *HistoricalVelocity) GetVelocityTrend() string {
method GetWeeklyAverage (line 2306) | func (hv *HistoricalVelocity) GetWeeklyAverage() float64 {
type WeeklySnapshot (line 63) | type WeeklySnapshot struct
type FreshnessMetrics (line 73) | type FreshnessMetrics struct
type FlowMetrics (line 83) | type FlowMetrics struct
type CriticalityMetrics (line 94) | type CriticalityMetrics struct
type LabelDependency (line 104) | type LabelDependency struct
type BlockingPair (line 113) | type BlockingPair struct
type CrossLabelFlow (line 121) | type CrossLabelFlow struct
type BlockageCascadeResult (line 136) | type BlockageCascadeResult struct
method FormatCascadeTree (line 1302) | func (c *BlockageCascadeResult) FormatCascadeTree() string {
type CascadeLevel (line 146) | type CascadeLevel struct
type LabelCascadeEntry (line 153) | type LabelCascadeEntry struct
type UnblockRecommendation (line 160) | type UnblockRecommendation struct
type BlockageCascadeAnalysis (line 170) | type BlockageCascadeAnalysis struct
method GetCascadeForLabel (line 1284) | func (r *BlockageCascadeAnalysis) GetCascadeForLabel(label string) *Bl...
method GetMostImpactfulCascade (line 1294) | func (r *BlockageCascadeAnalysis) GetMostImpactfulCascade() *BlockageC...
type LabelPath (line 179) | type LabelPath struct
type LabelSummary (line 187) | type LabelSummary struct
type LabelAnalysisResult (line 198) | type LabelAnalysisResult struct
function ComputeCrossLabelFlow (line 212) | func ComputeCrossLabelFlow(issues []model.Issue, cfg LabelHealthConfig) ...
function ComputeVelocityMetrics (line 338) | func ComputeVelocityMetrics(issues []model.Issue, now time.Time) Velocit...
function ComputeFreshnessMetrics (line 417) | func ComputeFreshnessMetrics(issues []model.Issue, now time.Time, staleD...
function ComputeLabelHealthForLabel (line 467) | func ComputeLabelHealthForLabel(label string, issues []model.Issue, cfg ...
function ComputeAllLabelHealth (line 628) | func ComputeAllLabelHealth(issues []model.Issue, cfg LabelHealthConfig, ...
function clampScore (line 688) | func clampScore(v int) int {
constant HealthLevelHealthy (line 704) | HealthLevelHealthy = "healthy"
constant HealthLevelWarning (line 705) | HealthLevelWarning = "warning"
constant HealthLevelCritical (line 706) | HealthLevelCritical = "critical"
constant DefaultStaleThresholdDays (line 711) | DefaultStaleThresholdDays = 14
constant HealthyThreshold (line 712) | HealthyThreshold = 70
constant WarningThreshold (line 713) | WarningThreshold = 40
constant VelocityWeight (line 714) | VelocityWeight = 0.25
constant FreshnessWeight (line 715) | FreshnessWeight = 0.25
constant FlowWeight (line 716) | FlowWeight = 0.25
constant CriticalityWeight (line 717) | CriticalityWeight = 0.25
type LabelHealthConfig (line 725) | type LabelHealthConfig struct
function DefaultLabelHealthConfig (line 736) | func DefaultLabelHealthConfig() LabelHealthConfig {
function HealthLevelFromScore (line 753) | func HealthLevelFromScore(score int) string {
function NeedsAttention (line 764) | func NeedsAttention(health LabelHealth) bool {
function ComputeCompositeHealth (line 769) | func ComputeCompositeHealth(velocity, freshness, flow, criticality int, ...
function NewLabelHealth (line 780) | func NewLabelHealth(label string) LabelHealth {
type LabelStats (line 808) | type LabelStats struct
type LabelExtractionResult (line 821) | type LabelExtractionResult struct
function ExtractLabels (line 832) | func ExtractLabels(issues []model.Issue) LabelExtractionResult {
function sortLabelsByCount (line 913) | func sortLabelsByCount(stats map[string]*LabelStats) []string {
function GetLabelIssues (line 939) | func GetLabelIssues(issues []model.Issue, label string) []model.Issue {
function GetLabelsForIssue (line 953) | func GetLabelsForIssue(issues []model.Issue, issueID string) []string {
function GetCommonLabels (line 963) | func GetCommonLabels(labelSets ...[]string) []string {
function GetLabelCooccurrence (line 992) | func GetLabelCooccurrence(issues []model.Issue) map[string]map[string]int {
function ComputeBlockedByLabel (line 1026) | func ComputeBlockedByLabel(issues []model.Issue, analyzer *Analyzer) map...
function ComputeBlockageCascade (line 1050) | func ComputeBlockageCascade(issues []model.Issue, flow CrossLabelFlow, c...
function computeSingleCascade (line 1140) | func computeSingleCascade(sourceLabel string, blockedIssues []model.Issu...
type LabelSubgraph (line 1328) | type LabelSubgraph struct
method GetSubgraphRoots (line 1479) | func (sg *LabelSubgraph) GetSubgraphRoots() []string {
method GetSubgraphLeaves (line 1491) | func (sg *LabelSubgraph) GetSubgraphLeaves() []string {
method GetCoreIssueSet (line 1503) | func (sg *LabelSubgraph) GetCoreIssueSet() map[string]bool {
method IsEmpty (line 1512) | func (sg *LabelSubgraph) IsEmpty() bool {
function ComputeLabelSubgraph (line 1350) | func ComputeLabelSubgraph(issues []model.Issue, label string) LabelSubgr...
function HasLabel (line 1469) | func HasLabel(issue model.Issue, label string) bool {
type LabelPageRankResult (line 1522) | type LabelPageRankResult struct
method GetTopCoreIssues (line 1684) | func (r *LabelPageRankResult) GetTopCoreIssues(n int) []RankedIssue {
method GetNormalizedScore (line 1698) | func (r *LabelPageRankResult) GetNormalizedScore(id string) float64 {
type RankedIssue (line 1535) | type RankedIssue struct
function ComputeLabelPageRank (line 1551) | func ComputeLabelPageRank(sg LabelSubgraph) LabelPageRankResult {
function ComputeLabelPageRankFromIssues (line 1678) | func ComputeLabelPageRankFromIssues(issues []model.Issue, label string) ...
type LabelCriticalPathResult (line 1708) | type LabelCriticalPathResult struct
method GetCriticalPathIssues (line 1854) | func (r *LabelCriticalPathResult) GetCriticalPathIssues(sg LabelSubgra...
method IsCriticalPathMember (line 1865) | func (r *LabelCriticalPathResult) IsCriticalPathMember(id string) bool {
function ComputeLabelCriticalPath (line 1725) | func ComputeLabelCriticalPath(sg LabelSubgraph) LabelCriticalPathResult {
function ComputeLabelCriticalPathFromIssues (line 1848) | func ComputeLabelCriticalPathFromIssues(issues []model.Issue, label stri...
type LabelAttentionScore (line 1880) | type LabelAttentionScore struct
type LabelAttentionResult (line 1899) | type LabelAttentionResult struct
method GetTopAttentionLabels (line 2084) | func (r *LabelAttentionResult) GetTopAttentionLabels(n int) []LabelAtt...
method GetLabelAttention (line 2092) | func (r *LabelAttentionResult) GetLabelAttention(label string) *LabelA...
function ComputeLabelAttentionScores (line 1918) | func ComputeLabelAttentionScores(issues []model.Issue, cfg LabelHealthCo...
function computeLabelAttention (line 2009) | func computeLabelAttention(label string, issues []model.Issue, issueMap ...
function ComputeHistoricalVelocity (line 2108) | func ComputeHistoricalVelocity(issues []model.Issue, label string, numWe...
function ComputeAllHistoricalVelocity (line 2254) | func ComputeAllHistoricalVelocity(issues []model.Issue, numWeeks int, no...
FILE: pkg/analysis/label_health_test.go
function TestHealthLevelFromScore (line 12) | func TestHealthLevelFromScore(t *testing.T) {
function TestComputeCompositeHealth (line 33) | func TestComputeCompositeHealth(t *testing.T) {
function TestDefaultLabelHealthConfig (line 63) | func TestDefaultLabelHealthConfig(t *testing.T) {
function TestNewLabelHealth (line 82) | func TestNewLabelHealth(t *testing.T) {
function TestNeedsAttention (line 106) | func TestNeedsAttention(t *testing.T) {
function TestLabelHealthTypes (line 124) | func TestLabelHealthTypes(t *testing.T) {
function TestCrossLabelFlowTypes (line 178) | func TestCrossLabelFlowTypes(t *testing.T) {
function TestComputeCrossLabelFlow (line 214) | func TestComputeCrossLabelFlow(t *testing.T) {
function TestLabelPath (line 268) | func TestLabelPath(t *testing.T) {
function TestLabelAnalysisResult (line 285) | func TestLabelAnalysisResult(t *testing.T) {
function TestExtractLabelsEmpty (line 312) | func TestExtractLabelsEmpty(t *testing.T) {
function TestExtractLabelsBasic (line 326) | func TestExtractLabelsBasic(t *testing.T) {
function TestExtractLabels_TombstoneCounts (line 385) | func TestExtractLabels_TombstoneCounts(t *testing.T) {
function TestExtractLabelsDuplicateLabelsOnIssue (line 404) | func TestExtractLabelsDuplicateLabelsOnIssue(t *testing.T) {
function TestExtractLabelsEmptyLabelString (line 423) | func TestExtractLabelsEmptyLabelString(t *testing.T) {
function TestGetLabelIssues (line 439) | func TestGetLabelIssues(t *testing.T) {
function TestGetLabelsForIssue (line 462) | func TestGetLabelsForIssue(t *testing.T) {
function TestGetCommonLabels (line 479) | func TestGetCommonLabels(t *testing.T) {
function TestGetLabelCooccurrence (line 503) | func TestGetLabelCooccurrence(t *testing.T) {
function TestSortLabelsByCount (line 532) | func TestSortLabelsByCount(t *testing.T) {
function TestComputeVelocityMetricsEmpty (line 555) | func TestComputeVelocityMetricsEmpty(t *testing.T) {
function TestComputeVelocityMetricsWithClosures (line 576) | func TestComputeVelocityMetricsWithClosures(t *testing.T) {
function TestComputeVelocityMetricsTrendImproving (line 607) | func TestComputeVelocityMetricsTrendImproving(t *testing.T) {
function TestComputeVelocityMetricsTrendDeclining (line 645) | func TestComputeVelocityMetricsTrendDeclining(t *testing.T) {
function TestComputeVelocityMetricsAvgDaysToClose (line 681) | func TestComputeVelocityMetricsAvgDaysToClose(t *testing.T) {
function TestComputeVelocityMetrics_IgnoresNonClosedWithClosedAt (line 702) | func TestComputeVelocityMetrics_IgnoresNonClosedWithClosedAt(t *testing....
function TestComputeHistoricalVelocity_IgnoresNonClosedWithClosedAt (line 728) | func TestComputeHistoricalVelocity_IgnoresNonClosedWithClosedAt(t *testi...
function TestComputeFreshnessMetricsEmpty (line 753) | func TestComputeFreshnessMetricsEmpty(t *testing.T) {
function TestComputeFreshnessMetricsWithUpdates (line 768) | func TestComputeFreshnessMetricsWithUpdates(t *testing.T) {
function TestComputeFreshnessMetricsOldestOpen (line 798) | func TestComputeFreshnessMetricsOldestOpen(t *testing.T) {
function TestComputeFreshnessMetricsDefaultThreshold (line 818) | func TestComputeFreshnessMetricsDefaultThreshold(t *testing.T) {
function TestComputeFreshnessMetricsScoreCapping (line 833) | func TestComputeFreshnessMetricsScoreCapping(t *testing.T) {
function TestComputeLabelSubgraphEmpty (line 866) | func TestComputeLabelSubgraphEmpty(t *testing.T) {
function TestComputeLabelSubgraphSingleLabel (line 881) | func TestComputeLabelSubgraphSingleLabel(t *testing.T) {
function TestComputeLabelSubgraphWithDependencies (line 901) | func TestComputeLabelSubgraphWithDependencies(t *testing.T) {
function TestComputeLabelSubgraphRootsAndLeaves (line 963) | func TestComputeLabelSubgraphRootsAndLeaves(t *testing.T) {
function TestComputeLabelSubgraphAdjacency (line 998) | func TestComputeLabelSubgraphAdjacency(t *testing.T) {
function TestComputeLabelSubgraphCoreIssueSet (line 1036) | func TestComputeLabelSubgraphCoreIssueSet(t *testing.T) {
function TestComputeLabelSubgraphNonBlockingDeps (line 1057) | func TestComputeLabelSubgraphNonBlockingDeps(t *testing.T) {
function TestHasLabel (line 1078) | func TestHasLabel(t *testing.T) {
function TestComputeLabelPageRankEmpty (line 1102) | func TestComputeLabelPageRankEmpty(t *testing.T) {
function TestComputeLabelPageRankSingleNode (line 1118) | func TestComputeLabelPageRankSingleNode(t *testing.T) {
function TestComputeLabelPageRankChain (line 1140) | func TestComputeLabelPageRankChain(t *testing.T) {
function TestComputeLabelPageRankNormalized (line 1182) | func TestComputeLabelPageRankNormalized(t *testing.T) {
function TestComputeLabelPageRankCoreVsDep (line 1224) | func TestComputeLabelPageRankCoreVsDep(t *testing.T) {
function TestComputeLabelPageRankGetTopCoreIssues (line 1269) | func TestComputeLabelPageRankGetTopCoreIssues(t *testing.T) {
function TestComputeLabelCriticalPathEmpty (line 1316) | func TestComputeLabelCriticalPathEmpty(t *testing.T) {
function TestComputeLabelCriticalPathSingleNode (line 1332) | func TestComputeLabelCriticalPathSingleNode(t *testing.T) {
function TestComputeLabelCriticalPathChain (line 1350) | func TestComputeLabelCriticalPathChain(t *testing.T) {
function TestComputeLabelCriticalPathDiamond (line 1402) | func TestComputeLabelCriticalPathDiamond(t *testing.T) {
function TestComputeLabelCriticalPathWithExternalDeps (line 1456) | func TestComputeLabelCriticalPathWithExternalDeps(t *testing.T) {
function TestComputeLabelCriticalPathCycle (line 1492) | func TestComputeLabelCriticalPathCycle(t *testing.T) {
function TestComputeLabelCriticalPathIsMember (line 1526) | func TestComputeLabelCriticalPathIsMember(t *testing.T) {
function TestComputeLabelCriticalPathTitles (line 1558) | func TestComputeLabelCriticalPathTitles(t *testing.T) {
function TestComputeLabelCriticalPathMultipleRoots (line 1585) | func TestComputeLabelCriticalPathMultipleRoots(t *testing.T) {
function TestComputeLabelAttentionScoresEmpty (line 1633) | func TestComputeLabelAttentionScoresEmpty(t *testing.T) {
function TestComputeLabelAttentionScoresSingleLabel (line 1647) | func TestComputeLabelAttentionScoresSingleLabel(t *testing.T) {
function TestComputeLabelAttentionScoresRanking (line 1672) | func TestComputeLabelAttentionScoresRanking(t *testing.T) {
function TestComputeLabelAttentionScoresBlockImpact (line 1711) | func TestComputeLabelAttentionScoresBlockImpact(t *testing.T) {
function TestComputeLabelAttentionScoresVelocity (line 1756) | func TestComputeLabelAttentionScoresVelocity(t *testing.T) {
function TestComputeLabelAttentionScoresNormalized (line 1787) | func TestComputeLabelAttentionScoresNormalized(t *testing.T) {
function TestComputeLabelAttentionScoresGetTop (line 1807) | func TestComputeLabelAttentionScoresGetTop(t *testing.T) {
function TestComputeLabelSubgraphCircularDeps (line 1841) | func TestComputeLabelSubgraphCircularDeps(t *testing.T) {
function TestComputeLabelPageRankCircularDeps (line 1890) | func TestComputeLabelPageRankCircularDeps(t *testing.T) {
function TestComputeLabelAttentionScoresCircularDeps (line 1930) | func TestComputeLabelAttentionScoresCircularDeps(t *testing.T) {
function TestComputeAllLabelHealthIntegration (line 1971) | func TestComputeAllLabelHealthIntegration(t *testing.T) {
function TestComputeCrossLabelFlowCircularDeps (line 2034) | func TestComputeCrossLabelFlowCircularDeps(t *testing.T) {
function TestLabelSubgraphNoLabels (line 2078) | func TestLabelSubgraphNoLabels(t *testing.T) {
function TestLabelPageRankNoLabels (line 2095) | func TestLabelPageRankNoLabels(t *testing.T) {
function TestAttentionScoresSingleLabel (line 2110) | func TestAttentionScoresSingleLabel(t *testing.T) {
function TestComputeHistoricalVelocity_BasicCounting (line 2137) | func TestComputeHistoricalVelocity_BasicCounting(t *testing.T) {
function TestComputeHistoricalVelocity_PeakAndTrough (line 2189) | func TestComputeHistoricalVelocity_PeakAndTrough(t *testing.T) {
function TestComputeHistoricalVelocity_MovingAverages (line 2236) | func TestComputeHistoricalVelocity_MovingAverages(t *testing.T) {
function TestComputeHistoricalVelocity_EmptyLabel (line 2271) | func TestComputeHistoricalVelocity_EmptyLabel(t *testing.T) {
function TestHistoricalVelocity_GetVelocityTrend (line 2294) | func TestHistoricalVelocity_GetVelocityTrend(t *testing.T) {
function TestHistoricalVelocity_GetWeeklyAverage (line 2354) | func TestHistoricalVelocity_GetWeeklyAverage(t *testing.T) {
function TestComputeAllHistoricalVelocity (line 2372) | func TestComputeAllHistoricalVelocity(t *testing.T) {
function TestComputeBlockageCascadeEmpty (line 2413) | func TestComputeBlockageCascadeEmpty(t *testing.T) {
function TestComputeBlockageCascadeNoCascade (line 2430) | func TestComputeBlockageCascadeNoCascade(t *testing.T) {
function TestComputeBlockageCascadeSimple (line 2451) | func TestComputeBlockageCascadeSimple(t *testing.T) {
function TestComputeBlockageCascadeTransitive (line 2485) | func TestComputeBlockageCascadeTransitive(t *testing.T) {
function TestBlockageCascadeResult_FormatCascadeTree (line 2524) | func TestBlockageCascadeResult_FormatCascadeTree(t *testing.T) {
function TestBlockageCascadeAnalysis_GetCascadeForLabel (line 2551) | func TestBlockageCascadeAnalysis_GetCascadeForLabel(t *testing.T) {
function TestBlockageCascadeAnalysis_GetMostImpactfulCascade (line 2575) | func TestBlockageCascadeAnalysis_GetMostImpactfulCascade(t *testing.T) {
FILE: pkg/analysis/label_suggest.go
type LabelSuggestionConfig (line 12) | type LabelSuggestionConfig struct
function DefaultLabelSuggestionConfig (line 35) | func DefaultLabelSuggestionConfig() LabelSuggestionConfig {
type LabelMatch (line 96) | type LabelMatch struct
function SuggestLabels (line 105) | func SuggestLabels(issues []model.Issue, config LabelSuggestionConfig) [...
function learnLabelMappings (line 253) | func learnLabelMappings(issues []model.Issue) map[string]map[string]int {
function uniqueStrings (line 276) | func uniqueStrings(s []string) []string {
function sortLabelMatchesByConfidence (line 290) | func sortLabelMatchesByConfidence(matches []LabelMatch) {
type LabelSuggestionDetector (line 297) | type LabelSuggestionDetector struct
method Detect (line 309) | func (d *LabelSuggestionDetector) Detect(issues []model.Issue) []Sugge...
function NewLabelSuggestionDetector (line 302) | func NewLabelSuggestionDetector(config LabelSuggestionConfig) *LabelSugg...
FILE: pkg/analysis/label_suggest_test.go
function TestDefaultLabelSuggestionConfig (line 15) | func TestDefaultLabelSuggestionConfig(t *testing.T) {
function TestBuiltinLabelMappings_Coverage (line 39) | func TestBuiltinLabelMappings_Coverage(t *testing.T) {
function TestBuiltinLabelMappings_NoEmptyLabels (line 76) | func TestBuiltinLabelMappings_NoEmptyLabels(t *testing.T) {
function TestSuggestLabels_EmptyIssues (line 93) | func TestSuggestLabels_EmptyIssues(t *testing.T) {
function TestSuggestLabels_SkipsClosedIssues (line 107) | func TestSuggestLabels_SkipsClosedIssues(t *testing.T) {
function TestSuggestLabels_BuiltinMappings (line 126) | func TestSuggestLabels_BuiltinMappings(t *testing.T) {
function TestSuggestLabels_NoSuggestExistingLabels (line 158) | func TestSuggestLabels_NoSuggestExistingLabels(t *testing.T) {
function TestSuggestLabels_OnlyExistingLabels (line 181) | func TestSuggestLabels_OnlyExistingLabels(t *testing.T) {
function TestSuggestLabels_LearnedMappings (line 209) | func TestSuggestLabels_LearnedMappings(t *testing.T) {
function TestSuggestLabels_DisabledLearnFromExisting (line 246) | func TestSuggestLabels_DisabledLearnFromExisting(t *testing.T) {
function TestSuggestLabels_MinConfidenceThreshold (line 271) | func TestSuggestLabels_MinConfidenceThreshold(t *testing.T) {
function TestSuggestLabels_MaxSuggestionsPerIssue (line 290) | func TestSuggestLabels_MaxSuggestionsPerIssue(t *testing.T) {
function TestSuggestLabels_PrefersHighestScore (line 321) | func TestSuggestLabels_PrefersHighestScore(t *testing.T) {
function TestSuggestLabels_MaxTotalSuggestions (line 356) | func TestSuggestLabels_MaxTotalSuggestions(t *testing.T) {
function TestSuggestLabels_ConfidenceCapped (line 382) | func TestSuggestLabels_ConfidenceCapped(t *testing.T) {
function TestSuggestLabels_SuggestionFormat (line 417) | func TestSuggestLabels_SuggestionFormat(t *testing.T) {
function TestLearnLabelMappings_BasicLearning (line 470) | func TestLearnLabelMappings_BasicLearning(t *testing.T) {
function TestLearnLabelMappings_SkipsUnlabeled (line 489) | func TestLearnLabelMappings_SkipsUnlabeled(t *testing.T) {
function TestLearnLabelMappings_CaseInsensitive (line 506) | func TestLearnLabelMappings_CaseInsensitive(t *testing.T) {
function TestLearnLabelMappings_Empty (line 522) | func TestLearnLabelMappings_Empty(t *testing.T) {
function TestUniqueStrings_Basic (line 538) | func TestUniqueStrings_Basic(t *testing.T) {
function TestUniqueStrings_PreservesOrder (line 587) | func TestUniqueStrings_PreservesOrder(t *testing.T) {
function TestSortLabelMatchesByConfidence_Basic (line 606) | func TestSortLabelMatchesByConfidence_Basic(t *testing.T) {
function TestSortLabelMatchesByConfidence_EqualValues (line 626) | func TestSortLabelMatchesByConfidence_EqualValues(t *testing.T) {
function TestSortLabelMatchesByConfidence_Empty (line 641) | func TestSortLabelMatchesByConfidence_Empty(t *testing.T) {
function TestSortLabelMatchesByConfidence_Single (line 649) | func TestSortLabelMatchesByConfidence_Single(t *testing.T) {
function TestNewLabelSuggestionDetector (line 662) | func TestNewLabelSuggestionDetector(t *testing.T) {
function TestLabelSuggestionDetector_Detect (line 681) | func TestLabelSuggestionDetector_Detect(t *testing.T) {
function TestLabelSuggestionDetector_DetectEmpty (line 702) | func TestLabelSuggestionDetector_DetectEmpty(t *testing.T) {
function TestSuggestLabels_RealisticScenario (line 715) | func TestSuggestLabels_RealisticScenario(t *testing.T) {
function TestSuggestLabels_NoFalsePositives (line 763) | func TestSuggestLabels_NoFalsePositives(t *testing.T) {
function TestSuggestLabels_MultipleKeywordMatches (line 787) | func TestSuggestLabels_MultipleKeywordMatches(t *testing.T) {
function TestSuggestLabels_VeryLongLabels (line 824) | func TestSuggestLabels_VeryLongLabels(t *testing.T) {
function TestSuggestLabels_SpecialCharactersInLabels (line 842) | func TestSuggestLabels_SpecialCharactersInLabels(t *testing.T) {
function TestSuggestLabels_OnlyClosedIssues (line 859) | func TestSuggestLabels_OnlyClosedIssues(t *testing.T) {
function TestSuggestLabels_AllLabeled (line 874) | func TestSuggestLabels_AllLabeled(t *testing.T) {
function findIssue (line 900) | func findIssue(issues []model.Issue, id string) *model.Issue {
function containsLabel (line 909) | func containsLabel(labels []string, label string) bool {
function TestLabelMatch_Fields (line 922) | func TestLabelMatch_Fields(t *testing.T) {
function BenchmarkSuggestLabels_SmallSet (line 952) | func BenchmarkSuggestLabels_SmallSet(b *testing.B) {
function BenchmarkSuggestLabels_LargeSet (line 973) | func BenchmarkSuggestLabels_LargeSet(b *testing.B) {
function BenchmarkLearnLabelMappings (line 998) | func BenchmarkLearnLabelMappings(b *testing.B) {
function BenchmarkSortLabelMatchesByConfidence (line 1014) | func BenchmarkSortLabelMatchesByConfidence(b *testing.B) {
FILE: pkg/analysis/perf_invariants_test.go
function referenceUnblocksMap (line 22) | func referenceUnblocksMap(issues []model.Issue) map[string][]string {
function TestBuildUnblocksMap_MatchesReference (line 104) | func TestBuildUnblocksMap_MatchesReference(t *testing.T) {
function TestComputeProjectVelocity_BucketsAndEstimated (line 160) | func TestComputeProjectVelocity_BucketsAndEstimated(t *testing.T) {
FILE: pkg/analysis/plan.go
type PlanItem (line 10) | type PlanItem struct
type ExecutionTrack (line 19) | type ExecutionTrack struct
type ExecutionPlan (line 26) | type ExecutionPlan struct
type PlanSummary (line 34) | type PlanSummary struct
method GetExecutionPlan (line 42) | func (a *Analyzer) GetExecutionPlan() ExecutionPlan {
method computeUnblocks (line 84) | func (a *Analyzer) computeUnblocks(issueID string) []string {
method ComputeUnblocks (line 143) | func (a *Analyzer) ComputeUnblocks(issueID string) []string {
method findConnectedComponents (line 148) | func (a *Analyzer) findConnectedComponents() map[string][]string {
method buildTracks (line 213) | func (a *Analyzer) buildTracks(components map[string][]string, actionabl...
method computePlanSummary (line 279) | func (a *Analyzer) computePlanSummary(actionable []model.Issue, unblocks...
function generateTrackID (line 318) | func generateTrackID(n int) string {
function GenerateTrackIDForTest (line 337) | func GenerateTrackIDForTest(n int) string {
FILE: pkg/analysis/plan_extended_test.go
function TestPlan_DiamondDependency (line 13) | func TestPlan_DiamondDependency(t *testing.T) {
function TestPlan_DisconnectedComponents (line 48) | func TestPlan_DisconnectedComponents(t *testing.T) {
function TestPlan_WithClosedBlockers (line 78) | func TestPlan_WithClosedBlockers(t *testing.T) {
function TestPlan_ComplexPriorities (line 107) | func TestPlan_ComplexPriorities(t *testing.T) {
FILE: pkg/analysis/plan_test.go
function TestGetExecutionPlanEmpty (line 10) | func TestGetExecutionPlanEmpty(t *testing.T) {
function TestGetExecutionPlanSingleIssue (line 22) | func TestGetExecutionPlanSingleIssue(t *testing.T) {
function TestGetExecutionPlanChain (line 47) | func TestGetExecutionPlanChain(t *testing.T) {
function TestGetExecutionPlanParallelTracks (line 86) | func TestGetExecutionPlanParallelTracks(t *testing.T) {
function TestGetExecutionPlanPriorityOrdering (line 116) | func TestGetExecutionPlanPriorityOrdering(t *testing.T) {
function TestGetExecutionPlanUnblocksCalculation (line 159) | func TestGetExecutionPlanUnblocksCalculation(t *testing.T) {
function TestGenerateTrackID_Unbounded (line 197) | func TestGenerateTrackID_Unbounded(t *testing.T) {
function TestGetExecutionPlanPartialUnblock (line 216) | func TestGetExecutionPlanPartialUnblock(t *testing.T) {
function TestGetExecutionPlanConnectedGraph (line 251) | func TestGetExecutionPlanConnectedGraph(t *testing.T) {
function TestGetExecutionPlanAllClosed (line 283) | func TestGetExecutionPlanAllClosed(t *testing.T) {
function TestGetExecutionPlanCycle (line 303) | func TestGetExecutionPlanCycle(t *testing.T) {
function TestGetExecutionPlanTrackHasTrackID (line 329) | func TestGetExecutionPlanTrackHasTrackID(t *testing.T) {
function TestGetExecutionPlanItemHasDetails (line 346) | func TestGetExecutionPlanItemHasDetails(t *testing.T) {
function TestGetExecutionPlanMissingBlocker (line 373) | func TestGetExecutionPlanMissingBlocker(t *testing.T) {
function TestGetExecutionPlanRelatedTypeDoesNotBlock (line 394) | func TestGetExecutionPlanRelatedTypeDoesNotBlock(t *testing.T) {
function TestGetExecutionPlanSelfReferential (line 415) | func TestGetExecutionPlanSelfReferential(t *testing.T) {
function TestGetExecutionPlanMixedDepTypes (line 422) | func TestGetExecutionPlanMixedDepTypes(t *testing.T) {
function TestGetExecutionPlanBlockerClosed (line 446) | func TestGetExecutionPlanBlockerClosed(t *testing.T) {
function TestGetExecutionPlanLegacyDependencyGrouping (line 466) | func TestGetExecutionPlanLegacyDependencyGrouping(t *testing.T) {
FILE: pkg/analysis/priority.go
type ImpactScore (line 14) | type ImpactScore struct
type ScoreBreakdown (line 24) | type ScoreBreakdown struct
constant WeightPageRank (line 55) | WeightPageRank = 0.22
constant WeightBetweenness (line 56) | WeightBetweenness = 0.20
constant WeightBlockerRatio (line 57) | WeightBlockerRatio = 0.13
constant WeightStaleness (line 58) | WeightStaleness = 0.05
constant WeightPriorityBoost (line 59) | WeightPriorityBoost = 0.10
constant WeightTimeToImpact (line 60) | WeightTimeToImpact = 0.10
constant WeightUrgency (line 61) | WeightUrgency = 0.10
constant WeightRisk (line 62) | WeightRisk = 0.10
constant DefaultEstimatedMinutes (line 69) | DefaultEstimatedMinutes = 60
constant MaxCriticalPathDepth (line 72) | MaxCriticalPathDepth = 10.0
constant UrgencyDecayDays (line 75) | UrgencyDecayDays = 7.0
method ComputeImpactScores (line 78) | func (a *Analyzer) ComputeImpactScores() []ImpactScore {
method ComputeImpactScoresAt (line 83) | func (a *Analyzer) ComputeImpactScoresAt(now time.Time) []ImpactScore {
method ComputeImpactScoresFromStats (line 89) | func (a *Analyzer) ComputeImpactScoresFromStats(stats *GraphStats, now t...
method ComputeImpactScore (line 218) | func (a *Analyzer) ComputeImpactScore(issueID string) *ImpactScore {
method TopImpactScores (line 229) | func (a *Analyzer) TopImpactScores(n int) []ImpactScore {
function computeStaleness (line 239) | func computeStaleness(updatedAt time.Time, now time.Time) float64 {
function computePriorityBoost (line 261) | func computePriorityBoost(priority int) float64 {
function normalize (line 277) | func normalize(v, max float64) float64 {
function normalizeInt (line 285) | func normalizeInt(v, max int) float64 {
function findMax (line 293) | func findMax(m map[string]float64) float64 {
method computeMedianEstimatedMinutes (line 304) | func (a *Analyzer) computeMedianEstimatedMinutes() int {
function computeTimeToImpact (line 327) | func computeTimeToImpact(criticalPathDepth float64, estimatedMinutes *in...
function computeUrgency (line 373) | func computeUrgency(issue *model.Issue, now time.Time) (float64, string) {
type WhatIfDelta (line 449) | type WhatIfDelta struct
type PriorityRecommendation (line 470) | type PriorityRecommendation struct
type RecommendationThresholds (line 483) | type RecommendationThresholds struct
function DefaultThresholds (line 492) | func DefaultThresholds() RecommendationThresholds {
method GenerateRecommendations (line 503) | func (a *Analyzer) GenerateRecommendations() []PriorityRecommendation {
method GenerateRecommendationsWithThresholds (line 508) | func (a *Analyzer) GenerateRecommendationsWithThresholds(thresholds Reco...
function generateRecommendation (line 571) | func generateRecommendation(score ImpactScore, unblocksCount int, core i...
function scoreToPriority (line 708) | func scoreToPriority(score float64) int {
function priorityToScore (line 724) | func priorityToScore(priority int) float64 {
function calculateConfidence (line 740) | func calculateConfidence(signals int, strength float64, scoreDelta float...
function abs (line 769) | func abs(x float64) float64 {
constant MaxUnblockedIDsShown (line 777) | MaxUnblockedIDsShown = 10
method computeWhatIfDelta (line 780) | func (a *Analyzer) computeWhatIfDelta(issueID string) *WhatIfDelta {
method countTransitiveUnblocks (line 841) | func (a *Analyzer) countTransitiveUnblocks(issueID string) int {
function estimateDaysSaved (line 906) | func estimateDaysSaved(unblockedIDs []string, issueMap map[string]model....
function generateWhatIfExplanation (line 936) | func generateWhatIfExplanation(direct, transitive, blockedReduction int,...
FILE: pkg/analysis/priority_test.go
function TestComputeImpactScoresEmpty (line 11) | func TestComputeImpactScoresEmpty(t *testing.T) {
function TestComputeImpactScoresSkipsClosed (line 20) | func TestComputeImpactScoresSkipsClosed(t *testing.T) {
function TestComputeImpactScoresPriorityBoost (line 37) | func TestComputeImpactScoresPriorityBoost(t *testing.T) {
function TestComputeImpactScoresStaleness (line 74) | func TestComputeImpactScoresStaleness(t *testing.T) {
function TestComputeImpactScoresBlockerRatio (line 113) | func TestComputeImpactScoresBlockerRatio(t *testing.T) {
function TestComputeImpactScoresPageRank (line 145) | func TestComputeImpactScoresPageRank(t *testing.T) {
function TestComputeImpactScoresSortedDescending (line 172) | func TestComputeImpactScoresSortedDescending(t *testing.T) {
function TestComputeImpactScoreSingle (line 196) | func TestComputeImpactScoreSingle(t *testing.T) {
function TestTopImpactScores (line 218) | func TestTopImpactScores(t *testing.T) {
function TestScoreBreakdownWeights (line 241) | func TestScoreBreakdownWeights(t *testing.T) {
function TestComputeImpactScoreDetails (line 257) | func TestComputeImpactScoreDetails(t *testing.T) {
function TestGenerateRecommendationsEmpty (line 281) | func TestGenerateRecommendationsEmpty(t *testing.T) {
function TestGenerateRecommendationsHighImpactLowPriority (line 290) | func TestGenerateRecommendationsHighImpactLowPriority(t *testing.T) {
function TestGenerateRecommendationsConfidence (line 336) | func TestGenerateRecommendationsConfidence(t *testing.T) {
function TestGenerateRecommendationsWithCustomThresholds (line 369) | func TestGenerateRecommendationsWithCustomThresholds(t *testing.T) {
function TestDefaultThresholds (line 408) | func TestDefaultThresholds(t *testing.T) {
function TestRecommendationDirection (line 425) | func TestRecommendationDirection(t *testing.T) {
function TestComputeImpactScoresTimeToImpact (line 453) | func TestComputeImpactScoresTimeToImpact(t *testing.T) {
function TestComputeImpactScoresUrgency (line 488) | func TestComputeImpactScoresUrgency(t *testing.T) {
function TestUrgencyLabelsRecognized (line 529) | func TestUrgencyLabelsRecognized(t *testing.T) {
function TestMedianEstimatedMinutes (line 551) | func TestMedianEstimatedMinutes(t *testing.T) {
function TestWhatIfDeltaDirectUnblocks (line 578) | func TestWhatIfDeltaDirectUnblocks(t *testing.T) {
function TestWhatIfDeltaNoDownstream (line 624) | func TestWhatIfDeltaNoDownstream(t *testing.T) {
function TestWhatIfDeltaEstimatedDays (line 645) | func TestWhatIfDeltaEstimatedDays(t *testing.T) {
function TestReasoningCapAtThree (line 678) | func TestReasoningCapAtThree(t *testing.T) {
function TestRecommendationsSortDeterministic (line 714) | func TestRecommendationsSortDeterministic(t *testing.T) {
function TestWhatIfExplanationText (line 740) | func TestWhatIfExplanationText(t *testing.T) {
function TestParallelizationGain (line 766) | func TestParallelizationGain(t *testing.T) {
function TestParallelizationGainNegative (line 812) | func TestParallelizationGainNegative(t *testing.T) {
function TestParallelizationGainZero (line 845) | func TestParallelizationGainZero(t *testing.T) {
FILE: pkg/analysis/real_data_test.go
function loadRealIssues (line 16) | func loadRealIssues(t *testing.T, filename string) []model.Issue {
function TestRealData_Cass (line 51) | func TestRealData_Cass(t *testing.T) {
function TestRealData_Srps (line 102) | func TestRealData_Srps(t *testing.T) {
function TestRealData_ProjectBeads (line 132) | func TestRealData_ProjectBeads(t *testing.T) {
function TestRealData_Combined (line 198) | func TestRealData_Combined(t *testing.T) {
FILE: pkg/analysis/risk.go
type RiskSignals (line 11) | type RiskSignals struct
type RiskWeights (line 35) | type RiskWeights struct
function DefaultRiskWeights (line 43) | func DefaultRiskWeights() RiskWeights {
function ComputeRiskSignals (line 53) | func ComputeRiskSignals(
function ComputeRiskSignalsWithWeights (line 63) | func ComputeRiskSignalsWithWeights(
function computeFanVariance (line 102) | func computeFanVariance(issue *model.Issue, stats *GraphStats) float64 {
function computeActivityChurn (line 141) | func computeActivityChurn(issue *model.Issue, now time.Time) float64 {
function computeCrossRepoRisk (line 184) | func computeCrossRepoRisk(issue *model.Issue, issues map[string]model.Is...
function computeStatusRisk (line 216) | func computeStatusRisk(issue *model.Issue, now time.Time) float64 {
function generateRiskExplanation (line 268) | func generateRiskExplanation(signals RiskSignals) string {
function joinRiskFactors (line 296) | func joinRiskFactors(factors []string) string {
function computeMean (line 315) | func computeMean(values []float64) float64 {
function computeStdDev (line 327) | func computeStdDev(values []float64, mean float64) float64 {
function ComputeAllRiskSignals (line 341) | func ComputeAllRiskSignals(
FILE: pkg/analysis/risk_test.go
function TestComputeRiskSignals_EmptyIssue (line 10) | func TestComputeRiskSignals_EmptyIssue(t *testing.T) {
function TestComputeRiskSignals_FanVariance (line 37) | func TestComputeRiskSignals_FanVariance(t *testing.T) {
function TestComputeRiskSignals_StatusRisk (line 80) | func TestComputeRiskSignals_StatusRisk(t *testing.T) {
function TestComputeAllRiskSignals_SkipsTombstone (line 155) | func TestComputeAllRiskSignals_SkipsTombstone(t *testing.T) {
function TestComputeRiskSignals_ActivityChurn (line 177) | func TestComputeRiskSignals_ActivityChurn(t *testing.T) {
function TestComputeRiskSignals_CrossRepoRisk (line 223) | func TestComputeRiskSignals_CrossRepoRisk(t *testing.T) {
function TestComputeRiskSignals_CompositeRisk (line 262) | func TestComputeRiskSignals_CompositeRisk(t *testing.T) {
function TestRiskExplanation (line 310) | func TestRiskExplanation(t *testing.T) {
function stringContains (line 356) | func stringContains(s, substr string) bool {
function TestDefaultRiskWeights (line 365) | func TestDefaultRiskWeights(t *testing.T) {
function TestImpactScore_IncludesRisk (line 380) | func TestImpactScore_IncludesRisk(t *testing.T) {
FILE: pkg/analysis/sample_integration_test.go
function loadSampleIssues (line 14) | func loadSampleIssues(t *testing.T) []model.Issue {
function TestExecutionPlan_OnSampleFixture (line 24) | func TestExecutionPlan_OnSampleFixture(t *testing.T) {
function TestSnapshotDiff_OnSampleFixture (line 54) | func TestSnapshotDiff_OnSampleFixture(t *testing.T) {
function TestGraphMetrics_OnSampleFixture (line 91) | func TestGraphMetrics_OnSampleFixture(t *testing.T) {
function TestActionableTracksContainRealIDs (line 110) | func TestActionableTracksContainRealIDs(t *testing.T) {
FILE: pkg/analysis/status_fullstats_test.go
function TestMetricStatusAndFullStatsLimits (line 15) | func TestMetricStatusAndFullStatsLimits(t *testing.T) {
function TestStatusEntryMarshalJSONMilliseconds (line 68) | func TestStatusEntryMarshalJSONMilliseconds(t *testing.T) {
FILE: pkg/analysis/suggest_all.go
type SuggestAllConfig (line 11) | type SuggestAllConfig struct
function DefaultSuggestAllConfig (line 50) | func DefaultSuggestAllConfig() SuggestAllConfig {
function GenerateAllSuggestions (line 66) | func GenerateAllSuggestions(issues []model.Issue, config SuggestAllConfi...
type RobotSuggestOutput (line 125) | type RobotSuggestOutput struct
type SuggestFilter (line 134) | type SuggestFilter struct
function GenerateRobotSuggestOutput (line 141) | func GenerateRobotSuggestOutput(issues []model.Issue, config SuggestAllC...
FILE: pkg/analysis/suggest_all_test.go
function TestDefaultSuggestAllConfig (line 16) | func TestDefaultSuggestAllConfig(t *testing.T) {
function TestGenerateAllSuggestions_EmptyIssues (line 62) | func TestGenerateAllSuggestions_EmptyIssues(t *testing.T) {
function TestGenerateAllSuggestions_SingleIssue (line 76) | func TestGenerateAllSuggestions_SingleIssue(t *testing.T) {
function TestGenerateAllSuggestions_OnlyDuplicates (line 96) | func TestGenerateAllSuggestions_OnlyDuplicates(t *testing.T) {
function TestGenerateAllSuggestions_OnlyLabels (line 120) | func TestGenerateAllSuggestions_OnlyLabels(t *testing.T) {
function TestGenerateAllSuggestions_OnlyCycles (line 143) | func TestGenerateAllSuggestions_OnlyCycles(t *testing.T) {
function TestGenerateAllSuggestions_AllDisabled (line 178) | func TestGenerateAllSuggestions_AllDisabled(t *testing.T) {
function TestGenerateAllSuggestions_MinConfidenceFilter (line 201) | func TestGenerateAllSuggestions_MinConfidenceFilter(t *testing.T) {
function TestGenerateAllSuggestions_TypeFilter (line 236) | func TestGenerateAllSuggestions_TypeFilter(t *testing.T) {
function TestGenerateAllSuggestions_BeadFilter (line 258) | func TestGenerateAllSuggestions_BeadFilter(t *testing.T) {
function TestGenerateAllSuggestions_SortedByConfidence (line 284) | func TestGenerateAllSuggestions_SortedByConfidence(t *testing.T) {
function TestGenerateAllSuggestions_MaxSuggestionsLimit (line 312) | func TestGenerateAllSuggestions_MaxSuggestionsLimit(t *testing.T) {
function TestGenerateAllSuggestions_MaxSuggestionsZero (line 337) | func TestGenerateAllSuggestions_MaxSuggestionsZero(t *testing.T) {
function TestGenerateAllSuggestions_NoDuplicateSuggestions (line 360) | func TestGenerateAllSuggestions_NoDuplicateSuggestions(t *testing.T) {
function TestGenerateAllSuggestions_MixedSuggestionTypes (line 386) | func TestGenerateAllSuggestions_MixedSuggestionTypes(t *testing.T) {
function TestGenerateAllSuggestions_DataHashPreserved (line 440) | func TestGenerateAllSuggestions_DataHashPreserved(t *testing.T) {
function TestGenerateRobotSuggestOutput_Structure (line 459) | func TestGenerateRobotSuggestOutput_Structure(t *testing.T) {
function TestGenerateRobotSuggestOutput_UsageHints (line 501) | func TestGenerateRobotSuggestOutput_UsageHints(t *testing.T) {
function TestSuggestAllConfig_FilterTypeValues (line 533) | func TestSuggestAllConfig_FilterTypeValues(t *testing.T) {
function TestGenerateAllSuggestions_AllClosedIssues (line 569) | func TestGenerateAllSuggestions_AllClosedIssues(t *testing.T) {
function TestGenerateAllSuggestions_VeryLargeIssueSet (line 583) | func TestGenerateAllSuggestions_VeryLargeIssueSet(t *testing.T) {
function TestGenerateAllSuggestions_UnicodeContent (line 616) | func TestGenerateAllSuggestions_UnicodeContent(t *testing.T) {
function TestGenerateAllSuggestions_EmptyTitles (line 630) | func TestGenerateAllSuggestions_EmptyTitles(t *testing.T) {
function TestGenerateAllSuggestions_Deterministic (line 648) | func TestGenerateAllSuggestions_Deterministic(t *testing.T) {
function BenchmarkGen
Copy disabled (too large)
Download .json
Condensed preview — 4000 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (112,477K chars).
[
{
"path": ".beads/.gitignore",
"chars": 1034,
"preview": "# SQLite databases\n*.db\n*.db?*\n*.db-journal\n*.db-wal\n*.db-shm\n\n# Daemon runtime files\ndaemon.lock\ndaemon.log\ndaemon.pid\n"
},
{
"path": ".beads/README.md",
"chars": 2240,
"preview": "# Beads - AI-Native Issue Tracking\n\nWelcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-n"
},
{
"path": ".beads/correlation_feedback.jsonl",
"chars": 220,
"preview": "{\"commit_sha\":\"8855d76f67556c672c924cdf32543ff4592aa2b1\",\"bead_id\":\"bv-35qc\",\"feedback_at\":\"2025-12-18T01:49:21.78059Z\","
},
{
"path": ".beads/feedback.json",
"chars": 1409,
"preview": "{\n \"version\": \"1.0\",\n \"created_at\": \"2025-12-16T16:48:54.588218-05:00\",\n \"updated_at\": \"2025-12-16T16:49:06.367846-05"
},
{
"path": ".beads/issues.jsonl",
"chars": 1926928,
"preview": "{\"id\":\"bd-14zq\",\"title\":\"Treat blocked status as non-actionable\",\"status\":\"closed\",\"priority\":2,\"issue_type\":\"bug\",\"crea"
},
{
"path": ".beads/metadata.json",
"chars": 62,
"preview": "{\n \"database\": \"beads.db\",\n \"jsonl_export\": \"issues.jsonl\"\n}"
},
{
"path": ".beads/sync_base.jsonl",
"chars": 1794415,
"preview": "{\"id\":\"bv-03h1\",\"title\":\"Worker Health Monitoring and Watchdog Recovery\",\"description\":\"## PURPOSE\\nDetect when the Back"
},
{
"path": ".beads/tree-state.json",
"chars": 36,
"preview": "{\n \"version\": 1,\n \"expanded\": {}\n}"
},
{
"path": ".gitattributes",
"chars": 69,
"preview": "\n# Use bd merge for beads JSONL files\n.beads/beads.jsonl merge=beads\n"
},
{
"path": ".github/workflows/acfs-checksums-dispatch.yml",
"chars": 927,
"preview": "name: Notify ACFS checksum monitor\n\non:\n push:\n branches: [main, master]\n paths:\n - 'install.sh'\n - 'sc"
},
{
"path": ".github/workflows/ci.yml",
"chars": 4009,
"preview": "name: CI\n\non:\n push:\n branches: [ \"main\" ]\n pull_request:\n branches: [ \"main\" ]\n\njobs:\n test:\n runs-on: ubun"
},
{
"path": ".github/workflows/flake-update.yml",
"chars": 2372,
"preview": "name: Flake Update\n\non:\n schedule:\n # Weekly on Sunday at 00:00 UTC\n - cron: \"0 0 * * 0\"\n workflow_dispatch:\n\npe"
},
{
"path": ".github/workflows/fuzz.yml",
"chars": 5879,
"preview": "name: Nightly Fuzz Testing\n\non:\n schedule:\n # Run at 3 AM UTC every night\n - cron: '0 3 * * *'\n workflow_dispatc"
},
{
"path": ".github/workflows/notify-acfs.yml",
"chars": 1525,
"preview": "# .github/workflows/notify-acfs.yml\n#\n# Notifies ACFS when installer scripts change, triggering checksum updates.\n# Use "
},
{
"path": ".github/workflows/release-notes.yml",
"chars": 2338,
"preview": "name: Auto Release Notes\n\non:\n release:\n types: [created, edited]\n\njobs:\n notes:\n runs-on: ubuntu-latest\n per"
},
{
"path": ".github/workflows/release.yml",
"chars": 751,
"preview": "name: Release\n\non:\n push:\n tags:\n - 'v*'\n\npermissions:\n contents: write\n\njobs:\n goreleaser:\n runs-on: ubun"
},
{
"path": ".gitignore",
"chars": 916,
"preview": "beads_reference/\n/bv\n/main\n*.test\ncmd/bv/bv\n.DS_Store\n\n# Build artifacts\ndist/\na.out\ncoverage.out\ncover*.out\n*.cov\ncover"
},
{
"path": ".goreleaser.yaml",
"chars": 1731,
"preview": "project_name: bv\nbuilds:\n - main: ./cmd/bv\n binary: bv\n ldflags:\n - -s -w\n - -X github.com/Dicklesworth"
},
{
"path": ".ubsignore",
"chars": 131,
"preview": "beads_reference/\n\n# Nested beads state (not code)\npkg/ui/.beads/\n\n# Large benchmark test data (not code)\ntests/testdata/"
},
{
"path": "AGENTS.md",
"chars": 35499,
"preview": "# AGENTS.md — beads_viewer\n\n> Guidelines for AI coding agents working in this Go codebase.\n\n---\n\n## RULE 0 - THE FUNDAME"
},
{
"path": "AGENT_FRIENDLINESS_REPORT.md",
"chars": 6160,
"preview": "# Agent-Friendliness Report: beads_viewer (bv)\r\n\r\n**Bead ID**: bd-c5g (re-underwriting)\r\n**Date**: 2026-01-25\r\n**Agent**"
},
{
"path": "CHANGELOG.md",
"chars": 45157,
"preview": "# Changelog\n\nAll notable changes to **Beads Viewer (`bv`)** are documented here. Versions are listed newest-first. Each "
},
{
"path": "CLEANED_UP_PROMPTS_USED_TO_CREATE_PROJECT.md",
"chars": 67126,
"preview": "The idea of this app is to make an amazingly slick and polished TUI app for viewing and browsing/exploring beads, a proj"
},
{
"path": "GOLANG_BEST_PRACTICES.md",
"chars": 2783,
"preview": "# Golang Best Practices\n\nThis guide outlines the best practices for Go development within this project, modeled after hi"
},
{
"path": "LICENSE",
"chars": 3939,
"preview": "MIT License (with OpenAI/Anthropic Rider)\n\nCopyright (c) 2026 Jeffrey Emanuel\n\nPermission is hereby granted, free of cha"
},
{
"path": "Makefile",
"chars": 320,
"preview": "# bv Makefile\n#\n# Build with SQLite FTS5 (full-text search) support enabled\n\n.PHONY: build install clean test\n\n# Enable "
},
{
"path": "OPPORTUNITY_MATRIX.md",
"chars": 7635,
"preview": "# Performance Opportunity Matrix\n\n**Task:** bd-29b3 - Profile + opportunity matrix (identify top hotspots)\n**Date:** 202"
},
{
"path": "PERFORMANCE_ANALYSIS_ROUND_2.md",
"chars": 17549,
"preview": "# Performance Analysis Round 2: Deep Inefficiency Audit\n\n## Executive Summary\n\nFollowing the successful Round 1 optimiza"
},
{
"path": "PERF_OPTIMIZATION_ROUND_1_RESULTS.md",
"chars": 5171,
"preview": "# Performance Optimization Round 1: Results\n\n## Summary\n\nImplemented buffer pooling for Brandes' algorithm in `pkg/analy"
},
{
"path": "PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__GPT.md",
"chars": 26677,
"preview": "# PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__GPT.md\n\nThis doc is the “round 1” performance plan for `bv`, focused on **nee"
},
{
"path": "PLAN_FOR_ADVANCED_OPTIMIZATIONS_ROUND_1__OPUS.md",
"chars": 21747,
"preview": "# Performance Optimization Plan: Round 1\n\n## Executive Summary\n\nThis document captures a rigorous performance analysis o"
},
{
"path": "README.md",
"chars": 173872,
"preview": "# Beads Viewer (bv)\n\n\nbuild:\n\twasm-pack bui"
},
{
"path": "bv-graph-wasm/README.md",
"chars": 3718,
"preview": "# bv-graph-wasm\n\nHigh-performance graph algorithms for the bv static viewer, compiled to WebAssembly.\n\n## Prerequisites\n"
},
{
"path": "bv-graph-wasm/src/advanced/mod.rs",
"chars": 265,
"preview": "//! Advanced graph operations.\n//!\n//! Higher-level algorithms built on core graph primitives.\n\n// Advanced modules will"
},
{
"path": "bv-graph-wasm/src/algorithms/articulation.rs",
"chars": 10883,
"preview": "//! Articulation points (cut vertices) algorithm.\n//!\n//! Finds nodes whose removal disconnects the graph.\n//! Uses Tarj"
},
{
"path": "bv-graph-wasm/src/algorithms/betweenness.rs",
"chars": 11460,
"preview": "//! Betweenness centrality algorithm.\n//!\n//! Measures how often a node lies on shortest paths between other nodes.\n//! "
},
{
"path": "bv-graph-wasm/src/algorithms/coverage.rs",
"chars": 7227,
"preview": "//! Coverage Set (Vertex Cover) algorithm.\n//!\n//! Finds a minimal set of nodes that \"covers\" all edges - useful for und"
},
{
"path": "bv-graph-wasm/src/algorithms/critical_path.rs",
"chars": 6083,
"preview": "//! Critical Path Heights computation.\n//!\n//! Computes the longest dependency chain from roots to each node.\n//! Nodes "
},
{
"path": "bv-graph-wasm/src/algorithms/cycles.rs",
"chars": 26096,
"preview": "//! Cycle Detection algorithms.\n//!\n//! Provides:\n//! - Tarjan's SCC algorithm for fast cycle presence check\n//! - Johns"
},
{
"path": "bv-graph-wasm/src/algorithms/eigenvector.rs",
"chars": 9153,
"preview": "//! Eigenvector Centrality algorithm implementation.\n//!\n//! Measures node importance based on connections to other impo"
},
{
"path": "bv-graph-wasm/src/algorithms/hits.rs",
"chars": 10163,
"preview": "//! HITS (Hyperlink-Induced Topic Search) algorithm.\n//!\n//! Computes hub and authority scores for nodes.\n//! - Hubs: no"
},
{
"path": "bv-graph-wasm/src/algorithms/k_paths.rs",
"chars": 6806,
"preview": "//! K-Shortest Critical Paths algorithm.\n//!\n//! Finds multiple critical paths through the dependency graph.\n//! Uses to"
},
{
"path": "bv-graph-wasm/src/algorithms/kcore.rs",
"chars": 9135,
"preview": "//! K-Core Decomposition algorithm implementation.\n//!\n//! K-core decomposition finds the maximal subgraph where every n"
},
{
"path": "bv-graph-wasm/src/algorithms/mod.rs",
"chars": 386,
"preview": "//! Graph algorithm implementations.\n//!\n//! This module contains ports of the Go graph algorithms to Rust WASM.\n\npub mo"
},
{
"path": "bv-graph-wasm/src/algorithms/pagerank.rs",
"chars": 8925,
"preview": "//! PageRank algorithm implementation.\n//!\n//! Computes centrality scores based on incoming link structure.\n//! High Pag"
},
{
"path": "bv-graph-wasm/src/algorithms/parallel_cut.rs",
"chars": 9205,
"preview": "//! Parallel Cut analysis algorithm.\n//!\n//! Identifies nodes whose completion would increase opportunities for\n//! para"
},
{
"path": "bv-graph-wasm/src/algorithms/slack.rs",
"chars": 9499,
"preview": "//! Slack computation for critical path analysis.\n//!\n//! Slack measures how much a task can be delayed without affectin"
},
{
"path": "bv-graph-wasm/src/algorithms/subgraph.rs",
"chars": 11445,
"preview": "//! Subgraph extraction and operations.\n//!\n//! Creates new graphs containing only specified nodes and their interconnec"
},
{
"path": "bv-graph-wasm/src/algorithms/topk_set.rs",
"chars": 9893,
"preview": "//! TopK Set algorithm: Greedy submodular selection for maximum unlock.\n//!\n//! Finds the k issues that, when completed,"
},
{
"path": "bv-graph-wasm/src/algorithms/topo.rs",
"chars": 6401,
"preview": "//! Topological Sort using Kahn's algorithm.\n//!\n//! Orders nodes such that for every edge u→v, u comes before v.\n//! Es"
},
{
"path": "bv-graph-wasm/src/graph.rs",
"chars": 30795,
"preview": "//! Core directed graph structure with adjacency lists.\n\nuse serde::{Deserialize, Serialize};\nuse std::collections::Hash"
},
{
"path": "bv-graph-wasm/src/lib.rs",
"chars": 1273,
"preview": "//! High-performance graph algorithms for bv static viewer.\n//!\n//! This crate provides WASM-compiled graph algorithms t"
},
{
"path": "bv-graph-wasm/src/reachability.rs",
"chars": 12146,
"preview": "//! Reachability queries (from/to).\n//!\n//! Find all nodes reachable from or that can reach a given node.\n//! Essential "
},
{
"path": "bv-graph-wasm/src/subgraph.rs",
"chars": 155,
"preview": "//! Subgraph extraction and operations.\n//!\n//! Create subgraphs from node sets for focused analysis.\n\n// Subgraph imple"
},
{
"path": "bv-graph-wasm/src/whatif.rs",
"chars": 19337,
"preview": "//! What-If simulation for issue unblock cascade analysis.\n//!\n//! What-If analysis answers \"If I close issue X, what ha"
},
{
"path": "bv-graph-wasm/tests/golden_test.rs",
"chars": 18787,
"preview": "//! Golden file validation tests for cross-validation with Go implementation.\n//!\n//! These tests load graph definitions"
},
{
"path": "cmd/bv/burndown_test.go",
"chars": 2910,
"preview": "package main\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestCalculateB"
},
{
"path": "cmd/bv/main.go",
"chars": 251618,
"preview": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"html\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/signal"
},
{
"path": "cmd/bv/main_robot_test.go",
"chars": 8625,
"preview": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n)\n\n// TestRobotPlanAndPr"
},
{
"path": "cmd/bv/main_test.go",
"chars": 13551,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\t\"ti"
},
{
"path": "cmd/bv/profile_test.go",
"chars": 6772,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/bea"
},
{
"path": "cmd/bv/robot_registry.go",
"chars": 90555,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"githu"
},
{
"path": "cmd/bv/robot_registry_test.go",
"chars": 9379,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestRobotRegistryValidate_RejectsModifierAlone(t"
},
{
"path": "cmd/bv/search_output.go",
"chars": 4197,
"preview": "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/search"
},
{
"path": "codecov.yml",
"chars": 548,
"preview": "coverage:\n precision: 2\n round: down\n range: \"60...100\"\n\n status:\n project:\n default:\n target: 85%\n "
},
{
"path": "coverage_report.txt",
"chars": 62811,
"preview": "github.com/Dicklesworthstone/beads_viewer/pkg/ui/actionable.go:24:\t\tNewActionableModel\t\t100.0%\ngithub.com/Dicklesworthst"
},
{
"path": "docs/accessor_pattern.md",
"chars": 5850,
"preview": "# Single-Value Accessor Pattern for GraphStats\n\n**Task Reference:** bv-4jfr\n**Status:** Implemented\n\n## Overview\n\nThis d"
},
{
"path": "docs/bead-history-feature-plan.md",
"chars": 55422,
"preview": "# Bead History & Code Correlation Feature Plan\n\n> **Purpose**: This document contains the comprehensive implementation p"
},
{
"path": "docs/complementary-features-analysis.md",
"chars": 13026,
"preview": "# Complementary Features Analysis\n\n## Current State: 9 Open Epics\n\n| Epic | Priority | Theme | Key Capability |\n|------|"
},
{
"path": "docs/labels-view-feature-plan.md",
"chars": 19658,
"preview": "# Labels View Feature Plan\n\n## Overview\n\nLabels in bv are not just filters—they're **subgraph selectors** that unlock po"
},
{
"path": "docs/performance.md",
"chars": 8823,
"preview": "# Performance Tuning Guide\n\nThis guide explains `bv`'s performance characteristics, how to diagnose slow startup, and av"
},
{
"path": "docs/semantic-search-embedding.md",
"chars": 3208,
"preview": "# Semantic Search — Embedding Approach (bv-9gf.1)\n\nThis document records the embedding-generation decision for `bv-9gf` "
},
{
"path": "docs/testing.md",
"chars": 9679,
"preview": "# Testing Guide for bv Contributors\n\nThis guide explains how to write and run tests for the bv codebase. All contributio"
},
{
"path": "flake.nix",
"chars": 2314,
"preview": "{\n description = \"bv - Terminal UI for the Beads issue tracker\";\n\n inputs = {\n # Use nixpkgs unstable for Go 1.25+ "
},
{
"path": "go.mod",
"chars": 3286,
"preview": "module github.com/Dicklesworthstone/beads_viewer\n\n// Keep this in sync with CI (see .github/workflows/ci.yml) and the mi"
},
{
"path": "go.sum",
"chars": 21571,
"preview": "codeberg.org/go-fonts/liberation v0.5.0/go.mod h1:zS/2e1354/mJ4pGzIIaEtm/59VFCFnYC7YV6YdGl5GU=\ncodeberg.org/go-latex/lat"
},
{
"path": "install.ps1",
"chars": 5133,
"preview": "#Requires -Version 5.1\n<#\n.SYNOPSIS\n Install script for beads_viewer (bv) on Windows.\n.DESCRIPTION\n Builds and ins"
},
{
"path": "install.sh",
"chars": 16577,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nREPO_OWNER=\"Dicklesworthstone\"\nREPO_NAME=\"beads_viewer\"\nBIN_NAME=\"bv\"\n\nTMP_DIRS=("
},
{
"path": "internal/datasource/diff.go",
"chars": 6985,
"preview": "package datasource\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// SourceDiff represents "
},
{
"path": "internal/datasource/jsonl.go",
"chars": 2709,
"preview": "package datasource\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/loader\"\n\t\"github.com/"
},
{
"path": "internal/datasource/load.go",
"chars": 2394,
"preview": "package datasource\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/loader\"\n\t\"github.com/Dicklesworthst"
},
{
"path": "internal/datasource/reader.go",
"chars": 1474,
"preview": "package datasource\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// IssueReader is"
},
{
"path": "internal/datasource/reader_test.go",
"chars": 6550,
"preview": "package datasource\n\nimport (\n\t\"database/sql\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t_ \"modernc.org/sqlite\"\n\n\t\"githu"
},
{
"path": "internal/datasource/select.go",
"chars": 6891,
"preview": "package datasource\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n)\n\n// ErrNoValidSources is returned when no valid sources "
},
{
"path": "internal/datasource/source.go",
"chars": 9556,
"preview": "// Package datasource provides intelligent multi-source data detection and selection\n// for beads_viewer. It discovers, "
},
{
"path": "internal/datasource/source_test.go",
"chars": 17076,
"preview": "package datasource\n\nimport (\n\t\"database/sql\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t_ \"modernc.org/sqlite\"\n)\n\n// Te"
},
{
"path": "internal/datasource/sqlite.go",
"chars": 12190,
"preview": "package datasource\n\nimport (\n\t\"database/sql\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n\n\t_ \"modernc.org/sqlite\"\n\n\t\"gith"
},
{
"path": "internal/datasource/validate.go",
"chars": 7673,
"preview": "package datasource\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"database/sql\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\tjson \"github.com/goccy/go"
},
{
"path": "internal/datasource/watch.go",
"chars": 8374,
"preview": "package datasource\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/fsnotify/fsnotify\"\n)\n\n// SourceWatcher monitors data s"
},
{
"path": "pkg/agents/blurb.go",
"chars": 10423,
"preview": "// Package agents provides AGENTS.md integration for AI coding agents.\n// It handles detection, content injection, and p"
},
{
"path": "pkg/agents/blurb_test.go",
"chars": 22904,
"preview": "package agents\n\nimport (\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestContainsBlurb(t *testing.T) {\n\ttests := []struct {\n\t\tname "
},
{
"path": "pkg/agents/detect.go",
"chars": 4419,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n)\n\n// AgentFileDetection contains the result of detecting an agent confi"
},
{
"path": "pkg/agents/detect_test.go",
"chars": 9095,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestDetectAgentFile(t *testing.T) {\n\t// Create a temp"
},
{
"path": "pkg/agents/file.go",
"chars": 4560,
"preview": "package agents\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\n// AppendBlurbToFile appends the agent blurb to the"
},
{
"path": "pkg/agents/file_test.go",
"chars": 8416,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestAppendBlurbToFile(t *testing.T) {\n\ttmp"
},
{
"path": "pkg/agents/integration_test.go",
"chars": 5384,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\n// TestFullFlow_Accept tests the complete flow when user a"
},
{
"path": "pkg/agents/prefs.go",
"chars": 4761,
"preview": "package agents\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"time\"\n)\n\n// AgentPro"
},
{
"path": "pkg/agents/prefs_test.go",
"chars": 6428,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestProjectHash(t *testing.T) {\n\t// Same path"
},
{
"path": "pkg/agents/tty_guard.go",
"chars": 1087,
"preview": "package agents\n\nimport (\n\t\"os\"\n\t\"strings\"\n)\n\n// init runs before Bubble Tea acquires the terminal (and before any TUI st"
},
{
"path": "pkg/agents/tty_guard_test.go",
"chars": 1542,
"preview": "package agents\n\nimport \"testing\"\n\nfunc TestShouldSuppressTTYQueries_EnvRobot(t *testing.T) {\n\tif !shouldSuppressTTYQueri"
},
{
"path": "pkg/analysis/advanced_insights.go",
"chars": 29049,
"preview": "package analysis\n\nimport (\n\t\"container/heap\"\n\t\"context\"\n\t\"sort\"\n)\n\n// intHeap implements heap.Interface for a min-heap o"
},
{
"path": "pkg/analysis/advanced_insights_test.go",
"chars": 42221,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestDefaultAdvance"
},
{
"path": "pkg/analysis/articulation_test.go",
"chars": 556,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n)\n\n// Ensures articulation detection works with node ID 0 (no-parent sentinel safe"
},
{
"path": "pkg/analysis/bench_generators_test.go",
"chars": 6141,
"preview": "package analysis_test\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// Graph "
},
{
"path": "pkg/analysis/bench_pathological_test.go",
"chars": 5721,
"preview": "package analysis_test\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analysis\"\n\t\"github.c"
},
{
"path": "pkg/analysis/bench_realdata_test.go",
"chars": 5372,
"preview": "package analysis_test\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/Dickl"
},
{
"path": "pkg/analysis/bench_test.go",
"chars": 6855,
"preview": "package analysis_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analysis\"\n\t\"github.com/Dickl"
},
{
"path": "pkg/analysis/benchmark_test.go",
"chars": 500,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/testutil\"\n)\n\nfunc Benchmar"
},
{
"path": "pkg/analysis/betweenness_approx.go",
"chars": 13322,
"preview": "package analysis\n\nimport (\n\t\"math/rand\"\n\t\"runtime\"\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"gonum.org/v1/gonum/graph\"\n\t\"gonum.org/v1/g"
},
{
"path": "pkg/analysis/betweenness_approx_test.go",
"chars": 5687,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestApproxBetweenn"
},
{
"path": "pkg/analysis/buffer_pool_test.go",
"chars": 14471,
"preview": "package analysis\n\nimport (\n\t\"runtime\"\n\t\"sync\"\n\t\"testing\"\n)\n\n// createTestBuffer creates a brandesBuffers with test data\n"
},
{
"path": "pkg/analysis/cache.go",
"chars": 29135,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"pa"
},
{
"path": "pkg/analysis/cache_extra_test.go",
"chars": 544,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestCacheS"
},
{
"path": "pkg/analysis/cache_test.go",
"chars": 16189,
"preview": "package analysis_test\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"strings\"\n\t\"testin"
},
{
"path": "pkg/analysis/config.go",
"chars": 11422,
"preview": "package analysis\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// AnalysisConfig controls which metrics to compute an"
},
{
"path": "pkg/analysis/config_test.go",
"chars": 7995,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestConfigForSize_SmallGraph(t *testing.T) {\n\t// Small graphs shou"
},
{
"path": "pkg/analysis/cycle_warnings.go",
"chars": 5875,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n"
},
{
"path": "pkg/analysis/cycle_warnings_test.go",
"chars": 12632,
"preview": "package analysis\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n\t\"github.com/Di"
},
{
"path": "pkg/analysis/dependency_suggest.go",
"chars": 7978,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// Depen"
},
{
"path": "pkg/analysis/dependency_suggest_test.go",
"chars": 14241,
"preview": "package analysis\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_v"
},
{
"path": "pkg/analysis/diff.go",
"chars": 16377,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// Snapshot"
},
{
"path": "pkg/analysis/diff_extended_test.go",
"chars": 5187,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// TestDiff_Tex"
},
{
"path": "pkg/analysis/diff_test.go",
"chars": 11771,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestNewSna"
},
{
"path": "pkg/analysis/duplicates.go",
"chars": 8583,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/"
},
{
"path": "pkg/analysis/duplicates_test.go",
"chars": 19890,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// ============"
},
{
"path": "pkg/analysis/e2e_startup_test.go",
"chars": 12477,
"preview": "package analysis_test\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.c"
},
{
"path": "pkg/analysis/eta.go",
"chars": 8619,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n"
},
{
"path": "pkg/analysis/eta_test.go",
"chars": 15589,
"preview": "package analysis\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc"
},
{
"path": "pkg/analysis/feedback.go",
"chars": 10358,
"preview": "// Package analysis contains feedback loop implementation for recommendation tuning (bv-90)\npackage analysis\n\nimport (\n\t"
},
{
"path": "pkg/analysis/feedback_test.go",
"chars": 6405,
"preview": "package analysis\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n)\n\nfunc TestDefaultFeedbackData(t *testing.T) {\n\tf := Defau"
},
{
"path": "pkg/analysis/file_lock_unix.go",
"chars": 250,
"preview": "//go:build !windows\n\npackage analysis\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc lockFile(f *os.File) error {\n\tre"
},
{
"path": "pkg/analysis/file_lock_windows.go",
"chars": 415,
"preview": "//go:build windows\n\npackage analysis\n\nimport (\n\t\"os\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nfunc lockFile(f *os.File) error {\n\t"
},
{
"path": "pkg/analysis/golden_test.go",
"chars": 8631,
"preview": "package analysis\n\nimport (\n\t\"encoding/json\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/be"
},
{
"path": "pkg/analysis/graph.go",
"chars": 76703,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"sync\"\n\t"
},
{
"path": "pkg/analysis/graph_accessor_benchmark_test.go",
"chars": 4632,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n)\n\n// createLargeGraphStats creates a GraphStats with n entries for benchma"
},
{
"path": "pkg/analysis/graph_accessor_test.go",
"chars": 9727,
"preview": "package analysis\n\nimport (\n\t\"math\"\n\t\"testing\"\n)\n\n// createTestGraphStatsForAccessors creates a GraphStats with known tes"
},
{
"path": "pkg/analysis/graph_cycles.go",
"chars": 3609,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\n\t\"gonum.org/v1/gonum/graph\"\n\t\"gonum.org/v1/gonum/graph/topo\"\n)\n\n// findCyclesSafe fi"
},
{
"path": "pkg/analysis/graph_cycles_test.go",
"chars": 8701,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/testutil\"\n\tgraph \"gonum.org/v1/go"
},
{
"path": "pkg/analysis/graph_extra_test.go",
"chars": 3927,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// C"
},
{
"path": "pkg/analysis/graph_test.go",
"chars": 26744,
"preview": "package analysis_test\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analy"
},
{
"path": "pkg/analysis/insights.go",
"chars": 4411,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"time\"\n)\n\n// InsightItem represents a single item in an insight list with its metric"
},
{
"path": "pkg/analysis/insights_signals_test.go",
"chars": 10073,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// Graph: squar"
},
{
"path": "pkg/analysis/insights_test.go",
"chars": 13410,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// ===================="
},
{
"path": "pkg/analysis/invariance_test.go",
"chars": 26664,
"preview": "// Package analysis invariance tests for bv-runn.2\n//\n// These tests guarantee that planned performance optimizations pr"
},
{
"path": "pkg/analysis/label_health.go",
"chars": 73417,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/mo"
},
{
"path": "pkg/analysis/label_health_test.go",
"chars": 77229,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n"
},
{
"path": "pkg/analysis/label_suggest.go",
"chars": 8559,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// Label"
},
{
"path": "pkg/analysis/label_suggest_test.go",
"chars": 32258,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// ="
},
{
"path": "pkg/analysis/perf_invariants_test.go",
"chars": 8904,
"preview": "package analysis\n\nimport (\n\t\"reflect\"\n\t\"sort\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\""
},
{
"path": "pkg/analysis/plan.go",
"chars": 9450,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// PlanItem represents a s"
},
{
"path": "pkg/analysis/plan_extended_test.go",
"chars": 4872,
"preview": "package analysis_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analysis\"\n\t\"github.com/Dickl"
},
{
"path": "pkg/analysis/plan_test.go",
"chars": 16863,
"preview": "package analysis_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analysis\"\n\t\"github.com/Dickl"
},
{
"path": "pkg/analysis/priority.go",
"chars": 29012,
"preview": "package analysis\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/mo"
},
{
"path": "pkg/analysis/priority_test.go",
"chars": 29495,
"preview": "package analysis_test\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/analysis\"\n\t\"github.c"
},
{
"path": "pkg/analysis/real_data_test.go",
"chars": 7385,
"preview": "package analysis_test\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/Dickl"
},
{
"path": "pkg/analysis/risk.go",
"chars": 9386,
"preview": "package analysis\n\nimport (\n\t\"math\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// RiskSignals con"
},
{
"path": "pkg/analysis/risk_test.go",
"chars": 12350,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestComput"
},
{
"path": "pkg/analysis/sample_integration_test.go",
"chars": 3829,
"preview": "package analysis\n\nimport (\n\t\"path/filepath\"\n\t\"slices\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/loader"
},
{
"path": "pkg/analysis/status_fullstats_test.go",
"chars": 2327,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"os\"\n\t\"sort\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/"
},
{
"path": "pkg/analysis/suggest_all.go",
"chars": 5300,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// SuggestAllConfi"
},
{
"path": "pkg/analysis/suggest_all_test.go",
"chars": 24005,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\""
},
{
"path": "pkg/analysis/suggestions.go",
"chars": 6765,
"preview": "package analysis\n\nimport (\n\t\"time\"\n)\n\n// SuggestionType categorizes the kind of suggestion\ntype SuggestionType string\n\nc"
},
{
"path": "pkg/analysis/suggestions_test.go",
"chars": 17497,
"preview": "package analysis\n\nimport (\n\t\"encoding/json\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestSuggestionType_Constants(t *testing.T) {\n\t// "
},
{
"path": "pkg/analysis/testdata/startup_baseline.json",
"chars": 59,
"preview": "{\n \"large_500\": 249,\n \"medium_150\": 27,\n \"small_30\": 2\n}"
},
{
"path": "pkg/analysis/triage.go",
"chars": 55104,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/co"
},
{
"path": "pkg/analysis/triage_context.go",
"chars": 8922,
"preview": "package analysis\n\nimport (\n\t\"sync\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\n// TriageContext provides "
},
{
"path": "pkg/analysis/triage_context_test.go",
"chars": 16011,
"preview": "package analysis\n\nimport (\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestNewTri"
},
{
"path": "pkg/analysis/triage_test.go",
"chars": 45635,
"preview": "package analysis\n\nimport (\n\t\"context\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc"
},
{
"path": "pkg/analysis/whatif.go",
"chars": 9106,
"preview": "package analysis\n\nimport (\n\t\"sort\"\n\t\"time\"\n)\n\n// PriorityExplanation provides detailed reasoning for a priority recommen"
},
{
"path": "pkg/analysis/whatif_test.go",
"chars": 8384,
"preview": "package analysis\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n)\n\nfunc TestGenera"
},
{
"path": "pkg/baseline/baseline.go",
"chars": 6306,
"preview": "// Package baseline provides storage and management for metrics snapshots.\n// Baselines are used by the drift detection "
},
{
"path": "pkg/baseline/baseline_test.go",
"chars": 5155,
"preview": "package baseline\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestBaselineSaveLoad(t *testing."
},
{
"path": "pkg/beadscli/beadscli.go",
"chars": 1432,
"preview": "// Package beadscli manages process-local state for the active Beads CLI tool.\n// bv emits shell commands referencing ei"
},
{
"path": "pkg/cass/cache.go",
"chars": 5894,
"preview": "package cass\n\nimport (\n\t\"container/list\"\n\t\"sync\"\n\t\"time\"\n)\n\n// DefaultResultCacheSize is the default maximum number of c"
},
{
"path": "pkg/cass/cache_test.go",
"chars": 9686,
"preview": "package cass\n\nimport (\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestNewCache(t *testing.T) {\n\tc := NewCache()\n\n\tif c.maxSize !"
},
{
"path": "pkg/cass/correlation.go",
"chars": 18328,
"preview": "package cass\n\nimport (\n\t\"context\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode\"\n\n\t\"github.com/Dicklesworthsto"
},
{
"path": "pkg/cass/correlation_test.go",
"chars": 17473,
"preview": "package cass\n\nimport (\n\t\"context\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/Dicklesworthstone/beads_viewer/pkg/model\"\n"
},
{
"path": "pkg/cass/detector.go",
"chars": 5587,
"preview": "// Package cass provides detection and health checking for the cass search tool.\n// Cass is an external binary for seman"
},
{
"path": "pkg/cass/detector_test.go",
"chars": 10897,
"preview": "package cass\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestStatus_String(t *testi"
},
{
"path": "pkg/cass/doc.go",
"chars": 1660,
"preview": "// Package cass provides integration with the cass semantic code search tool.\n//\n// Cass (https://github.com/cass-lang/c"
},
{
"path": "pkg/cass/safety_test.go",
"chars": 27053,
"preview": "// Package cass provides safety tests for the cass integration.\n// These tests verify the critical safety guarantee: cas"
},
{
"path": "pkg/cass/search.go",
"chars": 7692,
"preview": "package cass\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"io\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// DefaultSearchTimeo"
},
{
"path": "pkg/cass/search_test.go",
"chars": 15088,
"preview": "package cass\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc "
},
{
"path": "pkg/correlation/beads_files.go",
"chars": 1051,
"preview": "package correlation\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n)\n\nvar defaultBeadsFiles = []string{\n\t\".beads/issues.jsonl\",\n\t\".bea"
},
{
"path": "pkg/correlation/cache.go",
"chars": 14432,
"preview": "// Package correlation provides caching for history reports to avoid expensive git operations.\npackage correlation\n\nimpo"
},
{
"path": "pkg/correlation/cache_test.go",
"chars": 25793,
"preview": "package correlation\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"tes"
},
{
"path": "pkg/correlation/causality.go",
"chars": 14556,
"preview": "// Package correlation provides temporal causality analysis for beads.\npackage correlation\n\nimport (\n\t\"sort\"\n\t\"time\"\n)\n\n"
},
{
"path": "pkg/correlation/causality_test.go",
"chars": 15126,
"preview": "package correlation\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\n// Helper to create test timestamps\nfunc testTime(offsetHours int) t"
},
{
"path": "pkg/correlation/cocommit.go",
"chars": 10327,
"preview": "// Package correlation provides extraction of co-committed files for bead correlation.\npackage correlation\n\nimport (\n\t\"b"
},
{
"path": "pkg/correlation/cocommit_test.go",
"chars": 11065,
"preview": "package correlation\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestIsCodeFile(t *testing.T) {\n\ttests := []struct {\n"
},
{
"path": "pkg/correlation/correlator.go",
"chars": 8680,
"preview": "// Package correlation provides the Correlator for building complete bead history reports.\npackage correlation\n\nimport ("
},
{
"path": "pkg/correlation/correlator_test.go",
"chars": 10141,
"preview": "package correlation\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestBuildHistories_Empty(t *testing.T) {\n\tc := NewCorrelator(\"/"
}
]
// ... and 3800 more files (download for full content)
About this extraction
This page contains the full source code of the Dicklesworthstone/beads_viewer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 4000 files (348.9 MB), approximately 26.4M tokens, and a symbol index with 290824 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.