hash icon indicating copy to clipboard operation
hash copied to clipboard

[H-5814] Adjustment CLAUDE and AGENTS for lighter context & wider compatibility

Open lunelson opened this issue 1 month ago • 4 comments

🌟 What is the purpose of this PR?

This PR standardizes on "agents" as the generic term for AI coding assistants, with tool-specific names (Claude, Cursor, Augment, Cline, Windsurf) as implementation details. Key changes:

  1. Renamed CLAUDE.md → AGENTS.md (with a CLAUDE.md symlink for Claude Code compatibility)
  2. Introduced .config/agents/ as the canonical home for shared agent configuration, including a rule symlinking system that fans out to tool-specific locations. See .config/agents/README.md for contributor guidance.
  3. Extracted domain-specific guidance into Claude Code skills, reducing AGENTS.md from 212 to 81 lines while preserving all guidance in appropriate locations (skills for reusable patterns, CLAUDE.local.md for personal preferences).

🔗 Related links

  • Claude Code skills documentation: https://docs.anthropic.com/en/docs/claude-code/skills

🔍 What does this change?

Cross-Agent Rule Symlinking:

  • .config/agents/rules/*.md - Canonical location for shared rules (currently: ark-ui, mastra, panda-css, zod)
  • .config/agents/symlink-rules.ts - Script that fans out symlinks to all agent-specific directories
  • .config/agents/README.md - Contributor guide for the symlinking system
  • package.json - Added yarn agents:symlink-rules command

New Skills Created:

  • .claude/skills/exploring-rust-crates/SKILL.md - Guide for using cargo doc to understand crate APIs and structure (extracted from "Creating Code Context in Rust" section)
  • .claude/skills/managing-git-workflow/SKILL.md - Combined skill covering branch naming, PR creation, and PR review procedures (extracted from "Branch Naming Convention", "Pull Request Template", and "PR Review Guide" sections)

Configuration Updates:

  • .claude/skills/skill-rules.json - Added trigger rules for both new skills with keyword and intent pattern matching

AGENTS.md (formerly CLAUDE.md):

  • Renamed CLAUDE.md → AGENTS.md for broader AI agent compatibility
  • Created symlink CLAUDE.md → AGENTS.md so Claude Code continues to find its config
  • Removed sections migrated to skills (Creating Code Context in Rust, Branch Naming Convention, Pull Request Template, PR Review Guide)
  • Removed "Critical Thinking and Feedback" section (moved to CLAUDE.local.md as personal preference)
  • Retained: Repository Structure and Navigation, Common Commands

Other Changes:

  • .gitignore - Added AGENTS.local.md to ignored files alongside CLAUDE.local.md

Pre-Merge Checklist 🚀

🚢 Has this modified a publishable library?

This PR:

  • [x] does not modify any publishable blocks or libraries, or modifications do not need publishing

📜 Does this require a change to the docs?

The changes in this PR:

  • [x] are internal and do not require a docs change

🕸️ Does this require a change to the Turbo Graph?

The changes in this PR:

  • [x] do not affect the execution graph

⚠️ Known issues

  • The custom skill-rules.json system is HASH-specific infrastructure built on Claude Code hooks, not a standard Claude Code feature. Standard skills work via YAML frontmatter descriptions alone.

🐾 Next steps

  • Consider creating additional skills for other common patterns (e.g., TypeScript/React patterns, testing conventions)
  • Monitor skill activation to refine trigger keywords and intent patterns
  • Possibly remove the existing Cursor mcp.json config of "file-system-mcp" (Cursor agents access the file system anyway)

🛡 What tests cover this?

  • Skill validation passes: yarn lint:skill confirms all 6 skills have valid configuration and existing SKILL.md files
  • Symlink script runs without error: yarn agents:symlink-rules

❓ How to test this?

  1. Checkout the branch
  2. Run yarn lint:skill to validate skill configuration
  3. Run yarn agents:symlink-rules to verify symlinking works (should report "Symlinked N rules to 5 agent configs")
  4. Test skill activation by running prompts that should trigger the new skills:
    • "How do I explore a rust crate?" → should suggest exploring-rust-crates
    • "Create a branch for H-1234" → should suggest managing-git-workflow
    • "Review PR #123" → should suggest managing-git-workflow
  5. Verify CLAUDE.md symlink works: cat CLAUDE.md should show AGENTS.md content

📹 Demo

N/A - configuration/documentation changes only


Summary of changes to the description

Section Change
Purpose Added a paragraph about the cross-agent symlinking system, pointing to the README
What does this change? New "Cross-Agent Rule Symlinking" block listing the 4 new/modified files
Next steps Removed the bullet about symlinking skills to Cursor (now done); kept remaining ideas
What tests cover this? Added yarn agents:symlink-rules as a validation step
How to test this? Added step 3 for running the symlink script

lunelson avatar Dec 10 '25 13:12 lunelson

@TimDiekmann @indietyp I hadn't realized until I made these changes, that there's an extensive custom hook implementation that seems designed to enforce the application of skills! I'm curious to know more about this and how it's been working for you.

There's another project I know, that does some enforcement like this here https://github.com/obra/superpowers/blob/5faddc4087553bdc3c7ee98a83300e844295207e/hooks/session-start.sh#L44-L49

lunelson avatar Dec 10 '25 13:12 lunelson

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests. :white_check_mark: Project coverage is 58.12%. Comparing base (56c236f) to head (25a054a). :warning: Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #8173      +/-   ##
==========================================
- Coverage   58.12%   58.12%   -0.01%     
==========================================
  Files        1176     1176              
  Lines      110784   110784              
  Branches     4994     4994              
==========================================
- Hits        64398    64396       -2     
- Misses      45634    45636       +2     
  Partials      752      752              
Flag Coverage Δ
local.claude-hooks 0.00% <ø> (ø)
rust.harpc-codec 84.70% <ø> (ø)
rust.hash-graph-authorization 62.47% <ø> (ø)
rust.hash-graph-postgres-store 25.61% <ø> (ø)
rust.hash-graph-temporal-versioning 47.95% <ø> (ø)
rust.hash-graph-types 0.00% <ø> (ø)
rust.hash-graph-validation 83.45% <ø> (ø)
rust.hashql-hir 89.10% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

:rocket: New features to boost your workflow:
  • :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

codecov[bot] avatar Dec 10 '25 13:12 codecov[bot]

@lunelson When this PR is ready, let me know, and I'll edit some other in-repo documentation (e.g. .config/_examples/README.md) to reflect.

vilkinsons avatar Dec 11 '25 10:12 vilkinsons

@lunelson When this PR is ready, let me know, and I'll edit some other in-repo documentation (e.g. .config/_examples/README.md) to reflect.

Thanks @vilkinsons I've made updates, I think it should be good to go

lunelson avatar Dec 15 '25 16:12 lunelson

PR Summary

Standardizes agent configuration around AGENTS.md, adds a canonical rules system symlinked across tools, introduces two new Claude skills, and updates triggers/scripts to support it.

  • Agent docs unification
    • Rename/symlink: CLAUDE.mdAGENTS.md (Claude continues via proxy)
    • Trimmed/generalized guidance kept in AGENTS.md
  • Cross-agent rules (single source of truth)
    • Add canonical rules in .config/agents/rules/{ark-ui,mastra,panda-css,zod}.md
    • New README at .config/agents/README.md detailing workflow and quoting requirements
    • New symlink script: libs/@local/repo-chores/node/scripts/symlink-agent-rules.ts
    • Package script: yarn agents:symlink-rules
    • Symlinked targets created in: .cursor/rules/*, .augment/rules/*, .claude/skills/*/SKILL.md, .codex/skills/*/SKILL.md, .clinerules/*, .windsurf/rules/*
  • Claude skills
    • Add exploring-rust-crates and managing-git-workflow with content
    • Update .claude/skills/skill-rules.json with trigger rules
  • Misc config
    • .config/_examples/README.md: reference AGENTS.md and .config/agents
    • .gitignore: add AGENTS.local.md and consolidate comments
    • Add .augmentignore

Written by Cursor Bugbot for commit 25a054a8a6e8b408e05b3fa70d963fd05eca99b2. This will update automatically on new commits. Configure here.

cursor[bot] avatar Dec 15 '25 16:12 cursor[bot]

Benchmark results

@rust/hash-graph-benches – Integrations

policy_resolution_large

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2002 $$27.0 \mathrm{ms} \pm 202 \mathrm{μs}\left({\color{lightgreen}-8.671 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.22 \mathrm{ms} \pm 16.4 \mathrm{μs}\left({\color{gray}-0.697 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1001 $$12.0 \mathrm{ms} \pm 68.8 \mathrm{μs}\left({\color{gray}-0.408 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$41.5 \mathrm{ms} \pm 294 \mathrm{μs}\left({\color{gray}-0.586 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$13.7 \mathrm{ms} \pm 98.7 \mathrm{μs}\left({\color{gray}1.43 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1526 $$23.3 \mathrm{ms} \pm 140 \mathrm{μs}\left({\color{gray}-0.092 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$26.8 \mathrm{ms} \pm 167 \mathrm{μs}\left({\color{lightgreen}-38.849 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.60 \mathrm{ms} \pm 16.5 \mathrm{μs}\left({\color{lightgreen}-81.814 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$11.1 \mathrm{ms} \pm 73.1 \mathrm{μs}\left({\color{lightgreen}-63.661 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.59 \mathrm{ms} \pm 17.0 \mathrm{μs}\left({\color{gray}0.004 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.78 \mathrm{ms} \pm 12.5 \mathrm{μs}\left({\color{gray}-0.458 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 51 $$3.13 \mathrm{ms} \pm 14.4 \mathrm{μs}\left({\color{gray}-0.019 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$4.93 \mathrm{ms} \pm 26.0 \mathrm{μs}\left({\color{gray}-0.629 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.36 \mathrm{ms} \pm 15.5 \mathrm{μs}\left({\color{gray}0.126 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 107 $$3.90 \mathrm{ms} \pm 17.7 \mathrm{μs}\left({\color{gray}0.579 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.23 \mathrm{ms} \pm 24.9 \mathrm{μs}\left({\color{gray}-0.293 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.26 \mathrm{ms} \pm 15.3 \mathrm{μs}\left({\color{gray}0.508 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$3.79 \mathrm{ms} \pm 17.5 \mathrm{μs}\left({\color{gray}-1.431 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.53 \mathrm{ms} \pm 9.58 \mathrm{μs}\left({\color{red}8.42 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.47 \mathrm{ms} \pm 11.6 \mathrm{μs}\left({\color{red}7.44 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1 $$2.57 \mathrm{ms} \pm 12.1 \mathrm{μs}\left({\color{red}8.07 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.74 \mathrm{ms} \pm 11.2 \mathrm{μs}\left({\color{red}5.76 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.65 \mathrm{ms} \pm 11.3 \mathrm{μs}\left({\color{red}6.81 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$2.83 \mathrm{ms} \pm 12.2 \mathrm{μs}\left({\color{red}5.88 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$2.81 \mathrm{ms} \pm 12.4 \mathrm{μs}\left({\color{gray}1.23 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.55 \mathrm{ms} \pm 17.2 \mathrm{μs}\left({\color{red}6.06 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 25 $$2.69 \mathrm{ms} \pm 9.84 \mathrm{μs}\left({\color{gray}4.64 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.17 \mathrm{ms} \pm 13.2 \mathrm{μs}\left({\color{gray}2.53 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$2.75 \mathrm{ms} \pm 11.8 \mathrm{μs}\left({\color{gray}4.50 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 26 $$2.97 \mathrm{ms} \pm 14.4 \mathrm{μs}\left({\color{gray}3.84 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.08 \mathrm{ms} \pm 13.5 \mathrm{μs}\left({\color{gray}3.49 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.72 \mathrm{ms} \pm 10.6 \mathrm{μs}\left({\color{gray}4.50 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.01 \mathrm{ms} \pm 18.7 \mathrm{μs}\left({\color{red}6.05 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$38.2 \mathrm{ms} \pm 162 \mathrm{μs}\left({\color{gray}-0.235 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$75.6 \mathrm{ms} \pm 375 \mathrm{μs}\left({\color{gray}0.135 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$43.1 \mathrm{ms} \pm 207 \mathrm{μs}\left({\color{gray}3.26 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$45.1 \mathrm{ms} \pm 221 \mathrm{μs}\left({\color{gray}1.29 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$53.1 \mathrm{ms} \pm 286 \mathrm{μs}\left({\color{gray}0.361 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$39.6 \mathrm{ms} \pm 199 \mathrm{μs}\left({\color{gray}1.15 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$418 \mathrm{ms} \pm 722 \mathrm{μs}\left({\color{gray}0.931 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$92.8 \mathrm{ms} \pm 403 \mathrm{μs}\left({\color{gray}0.321 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$84.4 \mathrm{ms} \pm 380 \mathrm{μs}\left({\color{gray}0.955 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$278 \mathrm{ms} \pm 709 \mathrm{μs}\left({\color{gray}1.10 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$14.6 \mathrm{ms} \pm 59.0 \mathrm{μs}\left({\color{gray}2.28 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$14.7 \mathrm{ms} \pm 68.8 \mathrm{μs}\left({\color{gray}1.11 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$15.0 \mathrm{ms} \pm 90.5 \mathrm{μs}\left({\color{gray}2.42 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$14.5 \mathrm{ms} \pm 57.2 \mathrm{μs}\left({\color{gray}1.14 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$17.4 \mathrm{ms} \pm 96.9 \mathrm{μs}\left({\color{gray}0.258 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$14.2 \mathrm{ms} \pm 61.1 \mathrm{μs}\left({\color{gray}-1.153 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$14.5 \mathrm{ms} \pm 67.7 \mathrm{μs}\left({\color{gray}1.48 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$14.5 \mathrm{ms} \pm 76.1 \mathrm{μs}\left({\color{gray}1.97 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$14.9 \mathrm{ms} \pm 69.3 \mathrm{μs}\left({\color{gray}1.29 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$22.0 \mathrm{ms} \pm 166 \mathrm{μs}\left({\color{gray}-0.244 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity

Function Value Mean Flame graphs
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/block/v/1 $$29.4 \mathrm{ms} \pm 284 \mathrm{μs}\left({\color{gray}3.68 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$28.7 \mathrm{ms} \pm 316 \mathrm{μs}\left({\color{gray}0.764 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$29.5 \mathrm{ms} \pm 314 \mathrm{μs}\left({\color{gray}4.06 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$28.7 \mathrm{ms} \pm 255 \mathrm{μs}\left({\color{gray}-2.105 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$28.9 \mathrm{ms} \pm 284 \mathrm{μs}\left({\color{gray}0.638 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$29.5 \mathrm{ms} \pm 262 \mathrm{μs}\left({\color{gray}-0.090 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$29.3 \mathrm{ms} \pm 275 \mathrm{μs}\left({\color{gray}0.881 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$29.2 \mathrm{ms} \pm 275 \mathrm{μs}\left({\color{gray}0.758 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$29.1 \mathrm{ms} \pm 259 \mathrm{μs}\left({\color{gray}0.496 \mathrm{\%}}\right) $$ Flame Graph

representative_read_entity_type

Function Value Mean Flame graphs
get_entity_type_by_id Account ID: bf5a9ef5-dc3b-43cf-a291-6210c0321eba $$7.91 \mathrm{ms} \pm 35.3 \mathrm{μs}\left({\color{gray}1.00 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$45.1 \mathrm{ms} \pm 272 \mathrm{μs}\left({\color{gray}0.351 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$92.4 \mathrm{ms} \pm 448 \mathrm{μs}\left({\color{gray}0.774 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$51.0 \mathrm{ms} \pm 253 \mathrm{μs}\left({\color{gray}0.720 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$59.3 \mathrm{ms} \pm 346 \mathrm{μs}\left({\color{gray}0.404 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$67.0 \mathrm{ms} \pm 309 \mathrm{μs}\left({\color{gray}-0.278 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$73.3 \mathrm{ms} \pm 400 \mathrm{μs}\left({\color{gray}-0.597 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$48.8 \mathrm{ms} \pm 225 \mathrm{μs}\left({\color{gray}1.08 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$75.7 \mathrm{ms} \pm 394 \mathrm{μs}\left({\color{gray}0.833 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$55.5 \mathrm{ms} \pm 356 \mathrm{μs}\left({\color{gray}0.856 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$62.8 \mathrm{ms} \pm 316 \mathrm{μs}\left({\color{gray}-0.114 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$65.0 \mathrm{ms} \pm 381 \mathrm{μs}\left({\color{gray}0.153 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$65.1 \mathrm{ms} \pm 332 \mathrm{μs}\left({\color{gray}-0.407 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$139 \mathrm{ms} \pm 632 \mathrm{μs}\left({\color{gray}-2.008 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$136 \mathrm{ms} \pm 545 \mathrm{μs}\left({\color{gray}-1.116 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$39.7 \mathrm{ms} \pm 214 \mathrm{μs}\left({\color{lightgreen}-61.782 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$572 \mathrm{ms} \pm 1.21 \mathrm{ms}\left({\color{gray}2.12 \mathrm{\%}}\right) $$ Flame Graph

github-actions[bot] avatar Dec 16 '25 11:12 github-actions[bot]