Skip to content

FE-1533: Add a petrinaut-shipping skill to the repo skills - #9392

Merged
kube merged 6 commits into
claude/fe-1532-petrinaut-launch-jsonfrom
claude/fe-1533-petrinaut-shipping-skill
Sep 3, 2026
Merged

FE-1533: Add a petrinaut-shipping skill to the repo skills#9392
kube merged 6 commits into
claude/fe-1532-petrinaut-launch-jsonfrom
claude/fe-1533-petrinaut-shipping-skill

Conversation

@kube

@kube kube commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

Important

Agent tooling, nothing user-facing.

Summary

Before this PR, the procedure for shipping a Petrinaut change existed only as one contributor's personal skill, so no other session benefited from it. Skills committed to the repository are offered to every agent by the activation hook.

Adds a petrinaut-shipping skill carrying that procedure. Standing conventions stay in the package AGENTS.md files and the skill points at them rather than restating them.

Links

Changes

  • Skill carries the shipping procedure

    Gate commands per package, the changeset step, documentation-sync pointers, pre-PR diff hygiene, and the draft to ready CI loop.

  • Registered for the activation hook

    .claude/skills/petrinaut-shipping symlink, plus a regenerated skill-rules.json.

Review fixes

  • Keywords narrowed to petrinaut

    changeset reached prompts about anything in the monorepo, and the hook matches on Levenshtein distance, so changes reached it too.

  • Dropped the files trigger block

    Activation hook reads prompt triggers and never file triggers, so those globs did nothing.

  • Wait loop reads check state from JSON

    gh pr checks exits non-zero in three different situations: checks pending, checks failed, and no checks scheduled yet.
    Gating the loop on that status ended the wait before CI started, and once corrected for that, never ended it after a check failed.

Known issues

  • Trigger metadata is a local extension

    Agent Skills specification defines metadata as a map of string values, so the nested triggers object does not conform.
    Repository validator requires it, so removing it reaches every skill and the generator rather than this one file.

Test coverage

  • yarn agents:skill-management validate:

    Frontmatter and directory names for every skill, run in CI as lint:skill.

  • @local/claude-hooks unit suite:

    Activation snapshots against the regenerated rules.

  • Manual activation probes:

    Petrinaut prompts suggest the skill. Prompts about changesets elsewhere in the monorepo no longer do.

  • Wait loop exercised against a stubbed gh:

    Covers no checks yet, checks pending, all checks passing, and a failed run with nothing pending.

How to test

  • yarn agents:skill-management validate
  • Expect validation to pass
  • echo '{"session_id":"t","transcript_path":"/dev/null","cwd":".","permission_mode":"default","prompt":"fix a petrinaut lint failure"}' | yarn workspace @local/claude-hooks run:skill
  • Expect petrinaut-shipping among the recommended skills
  • Repeat with a prompt about a changeset in another package
  • Expect petrinaut-shipping absent

@kube kube self-assigned this Aug 27, 2026
@kube
kube requested a review from lunelson August 27, 2026 22:35
@vercel

vercel Bot commented Aug 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hash Ready Ready Preview Sep 3, 2026 7:11pm UTC
hashdotdesign-tokens Ready Ready Preview Sep 3, 2026 7:11pm UTC
petrinaut Ready Ready Preview Sep 3, 2026 7:11pm UTC
petrinaut-docs Ready Ready Preview Sep 3, 2026 7:11pm UTC

Request Review

@cursor

cursor Bot commented Aug 27, 2026

Copy link
Copy Markdown

PR Summary

Low Risk
Agent-only documentation and skill registration; no runtime product, auth, or data-path changes.

Overview
Commits the Petrinaut shipping procedure as a shared agent skill so sessions get the same gates, changeset/docs steps, pre-PR hygiene, and draft→ready CI workflow instead of relying on a personal skill. The skill defers standing rules to the package AGENTS.md files and documents turbo/yarn commands, arch-docs builds, and a gh pr checks wait loop keyed off JSON bucket state.

Wiring: new .agents/skills/petrinaut-shipping/SKILL.md, symlink under .claude/skills/, and a petrinaut-shipping entry in skill-rules.json with suggest enforcement and prompt triggers narrowed to petrinaut (avoids false positives from changeset / fuzzy changes).

Tests: hook unit tests assert the skill activates for Petrinaut work and stays off for unrelated changeset prompts.

Reviewed by Cursor Bugbot for commit 4195c11. Bugbot is set up for automated code reviews on this repo. Configure here.

Comment thread .agents/skills/petrinaut-shipping/SKILL.md Outdated

@lunelson lunelson left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool. The one thing that's odd here to me, although I know it's a pre-existing convention in this repo, is this non-standard frontmatter on the SKILL.md:

metadata:
  triggers:
    type: domain
    enforcement: suggest
    ...

The Agent Skills spec defines metadata as a string-to-string map, so a nested triggers object is non-conforming. A few concerns:

  • It creates two routing systems: the description-based model routing and HASH’s keyword/regex hook.
  • Several fields are still decorative anyway: the Claude hook reads prompt triggers and priority, but not fileTriggers, enforcement, blockMessage, or skipConditions.
  • The broad keywords are already causing trouble: Cursor correctly noted that changeset fuzzy-matches unrelated prompts.
  • Putting Claude-specific machinery in canonical .agents/skills somewhat undermines the supposed cross-agent portability.
  • The generated JSON makes the same configuration appear in three places: description, trigger metadata, and generated rules.

Personally I would remove metadata.triggers and rely on a precise description. If Claude-only activation is genuinely required, we should maybe work out a way to keep that configuration in a Claude-specific sidecar; or else find a way to encode it as a namespaced string-valued metadata field so the skill remains spec-compliant.

@kube

kube commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

Sadly I cannot remove metadata.triggers, as it's required by our custom tooling. We need to check with Bilal and Tim for this.

For the record, yarn agents:skill-management validate (which CI runs as lint:skill) rejects a skill without it: metadata: Invalid input: expected object, received undefined. Frontmatter.metadata is required in libs/@local/repo-chores/node/scripts/skill-management/schemas.ts, and FrontmatterTriggers is a strictObject, so dropping the block is a schema change across all 14 skills rather than something this PR can do.

Your other points hold and I have acted on what is in scope here: the keywords are down to petrinaut (the changeset one was fuzzy-matching unrelated prompts, as Bugbot spotted), and the files: block is gone since the hook never reads fileTriggers.

@kube
kube force-pushed the claude/fe-1533-petrinaut-shipping-skill branch from 9990f1a to c31749f Compare September 3, 2026 18:26
Copilot AI balanced review requested due to automatic review settings September 3, 2026 18:26
@kube
kube requested a review from CiaranMn September 3, 2026 18:27

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Multiple moderate issues leave required build/test coverage and CI-loop reliability incomplete.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds a repository skill documenting and activating the Petrinaut shipping workflow.

Changes:

  • Documents verification, changeset, documentation, and CI procedures.
  • Registers Petrinaut-specific activation rules.
File summaries
File Review
.claude/skills/skill-rules.json Registers the generated activation rules.
.agents/skills/petrinaut-shipping/SKILL.md Requires corrected build/test gates, automated activation tests, bounded CI polling with surfaced errors, and untracked-file inspection.
Review details

Suppressed comments (1)

.agents/skills/petrinaut-shipping/SKILL.md:47

  • git diff does not report untracked files, so this check cannot detect an accidental untracked directory or generated output—the exact cases it claims to exclude. Inspect git status --short as well as the base diff before opening the PR.
- Read `git diff --stat` against the base: no accidental directories, no unstaged leftovers, no generated output, no `mise.lock` churn.
  • Files reviewed: 3/3 changed files
  • Comments generated: 4
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .agents/skills/petrinaut-shipping/SKILL.md
Comment thread .agents/skills/petrinaut-shipping/SKILL.md Outdated
Comment thread .agents/skills/petrinaut-shipping/SKILL.md Outdated
Comment thread .agents/skills/petrinaut-shipping/SKILL.md Outdated
@codspeed-hq

codspeed-hq Bot commented Sep 3, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 98 untouched benchmarks


Comparing claude/fe-1533-petrinaut-shipping-skill (4195c11) with main (a4ed916)1

Open in CodSpeed

Footnotes

  1. No successful run was found on claude/fe-1532-petrinaut-launch-json (77cc453) during the generation of this report, so main (a4ed916) was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

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 $$26.5 \mathrm{ms} \pm 194 \mathrm{μs}\left({\color{lightgreen}-6.234 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.44 \mathrm{ms} \pm 26.9 \mathrm{μs}\left({\color{gray}-4.226 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 1002 $$12.2 \mathrm{ms} \pm 120 \mathrm{μs}\left({\color{lightgreen}-12.073 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 3314 $$42.4 \mathrm{ms} \pm 427 \mathrm{μs}\left({\color{lightgreen}-6.083 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$14.5 \mathrm{ms} \pm 167 \mathrm{μs}\left({\color{lightgreen}-8.653 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 1527 $$23.8 \mathrm{ms} \pm 232 \mathrm{μs}\left({\color{lightgreen}-6.282 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 2078 $$28.2 \mathrm{ms} \pm 290 \mathrm{μs}\left({\color{gray}-4.523 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.75 \mathrm{ms} \pm 30.5 \mathrm{μs}\left({\color{gray}-4.454 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 1033 $$13.1 \mathrm{ms} \pm 130 \mathrm{μs}\left({\color{lightgreen}-11.730 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_medium

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 102 $$3.84 \mathrm{ms} \pm 27.5 \mathrm{μs}\left({\color{gray}-4.729 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$3.03 \mathrm{ms} \pm 20.0 \mathrm{μs}\left({\color{gray}-2.152 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 52 $$3.42 \mathrm{ms} \pm 20.7 \mathrm{μs}\left({\color{gray}-1.443 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 269 $$5.15 \mathrm{ms} \pm 31.7 \mathrm{μs}\left({\color{gray}-4.672 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.53 \mathrm{ms} \pm 27.2 \mathrm{μs}\left({\color{gray}-0.850 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 108 $$4.19 \mathrm{ms} \pm 39.1 \mathrm{μs}\left({\color{gray}0.953 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 133 $$4.57 \mathrm{ms} \pm 44.5 \mathrm{μs}\left({\color{gray}0.585 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$3.51 \mathrm{ms} \pm 23.9 \mathrm{μs}\left({\color{gray}-4.263 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 63 $$4.18 \mathrm{ms} \pm 36.1 \mathrm{μs}\left({\color{gray}-0.275 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_none

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 2 $$2.71 \mathrm{ms} \pm 20.3 \mathrm{μs}\left({\color{gray}4.35 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.51 \mathrm{ms} \pm 16.3 \mathrm{μs}\left({\color{gray}-0.561 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 2 $$2.69 \mathrm{ms} \pm 21.9 \mathrm{μs}\left({\color{gray}3.36 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 8 $$2.97 \mathrm{ms} \pm 20.3 \mathrm{μs}\left({\color{gray}2.18 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.74 \mathrm{ms} \pm 15.5 \mathrm{μs}\left({\color{gray}2.71 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 3 $$3.01 \mathrm{ms} \pm 27.2 \mathrm{μs}\left({\color{red}5.53 \mathrm{\%}}\right) $$ Flame Graph

policy_resolution_small

Function Value Mean Flame graphs
resolve_policies_for_actor user: empty, selectivity: high, policies: 52 $$3.07 \mathrm{ms} \pm 18.5 \mathrm{μs}\left({\color{gray}-1.718 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: low, policies: 1 $$2.77 \mathrm{ms} \pm 20.7 \mathrm{μs}\left({\color{gray}-0.217 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: empty, selectivity: medium, policies: 26 $$3.04 \mathrm{ms} \pm 26.3 \mathrm{μs}\left({\color{gray}-1.641 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: high, policies: 94 $$3.46 \mathrm{ms} \pm 25.2 \mathrm{μs}\left({\color{gray}-0.365 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: low, policies: 1 $$3.03 \mathrm{ms} \pm 20.9 \mathrm{μs}\left({\color{gray}1.38 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: seeded, selectivity: medium, policies: 27 $$3.31 \mathrm{ms} \pm 22.9 \mathrm{μs}\left({\color{gray}-0.328 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: high, policies: 66 $$3.38 \mathrm{ms} \pm 19.2 \mathrm{μs}\left({\color{gray}-0.630 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: low, policies: 1 $$2.95 \mathrm{ms} \pm 20.0 \mathrm{μs}\left({\color{gray}-1.848 \mathrm{\%}}\right) $$ Flame Graph
resolve_policies_for_actor user: system, selectivity: medium, policies: 29 $$3.33 \mathrm{ms} \pm 16.8 \mathrm{μs}\left({\color{gray}-1.757 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_complete

Function Value Mean Flame graphs
entity_by_id;one_depth 1 entities $$41.8 \mathrm{ms} \pm 242 \mathrm{μs}\left({\color{gray}-1.941 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 10 entities $$32.4 \mathrm{ms} \pm 232 \mathrm{μs}\left({\color{lightgreen}-5.397 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 25 entities $$35.9 \mathrm{ms} \pm 265 \mathrm{μs}\left({\color{lightgreen}-8.837 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 5 entities $$44.5 \mathrm{ms} \pm 1.36 \mathrm{ms}\left({\color{red}36.8 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;one_depth 50 entities $$41.0 \mathrm{ms} \pm 297 \mathrm{μs}\left({\color{lightgreen}-7.032 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 1 entities $$49.2 \mathrm{ms} \pm 313 \mathrm{μs}\left({\color{lightgreen}-5.726 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 10 entities $$40.0 \mathrm{ms} \pm 284 \mathrm{μs}\left({\color{gray}-1.692 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 25 entities $$91.9 \mathrm{ms} \pm 638 \mathrm{μs}\left({\color{gray}-2.280 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 5 entities $$33.4 \mathrm{ms} \pm 248 \mathrm{μs}\left({\color{gray}-0.290 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;two_depth 50 entities $$277 \mathrm{ms} \pm 1.10 \mathrm{ms}\left({\color{gray}-0.379 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 1 entities $$10.5 \mathrm{ms} \pm 94.9 \mathrm{μs}\left({\color{gray}-1.706 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 10 entities $$10.5 \mathrm{ms} \pm 60.1 \mathrm{μs}\left({\color{gray}-2.876 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 25 entities $$10.6 \mathrm{ms} \pm 72.9 \mathrm{μs}\left({\color{gray}0.278 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 5 entities $$10.4 \mathrm{ms} \pm 64.2 \mathrm{μs}\left({\color{gray}0.381 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id;zero_depth 50 entities $$10.7 \mathrm{ms} \pm 85.4 \mathrm{μs}\left({\color{gray}0.958 \mathrm{\%}}\right) $$ Flame Graph

read_scaling_linkless

Function Value Mean Flame graphs
entity_by_id 1 entities $$10.6 \mathrm{ms} \pm 68.2 \mathrm{μs}\left({\color{gray}0.347 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10 entities $$10.7 \mathrm{ms} \pm 69.2 \mathrm{μs}\left({\color{gray}0.502 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 100 entities $$10.6 \mathrm{ms} \pm 69.7 \mathrm{μs}\left({\color{gray}-0.599 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 1000 entities $$10.6 \mathrm{ms} \pm 64.4 \mathrm{μs}\left({\color{gray}-1.759 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id 10000 entities $$10.9 \mathrm{ms} \pm 74.5 \mathrm{μs}\left({\color{gray}0.364 \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 $$10.8 \mathrm{ms} \pm 76.8 \mathrm{μs}\left({\color{gray}-3.957 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/book/v/1 $$10.7 \mathrm{ms} \pm 57.3 \mathrm{μs}\left({\color{gray}-3.199 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/building/v/1 $$10.9 \mathrm{ms} \pm 79.4 \mathrm{μs}\left({\color{gray}-1.727 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/organization/v/1 $$10.8 \mathrm{ms} \pm 63.0 \mathrm{μs}\left({\color{gray}-2.863 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/page/v/2 $$10.9 \mathrm{ms} \pm 70.1 \mathrm{μs}\left({\color{gray}-1.403 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/person/v/1 $$10.8 \mathrm{ms} \pm 69.7 \mathrm{μs}\left({\color{gray}-2.712 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/playlist/v/1 $$10.8 \mathrm{ms} \pm 68.5 \mathrm{μs}\left({\color{gray}-4.336 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/song/v/1 $$10.9 \mathrm{ms} \pm 73.7 \mathrm{μs}\left({\color{gray}-1.209 \mathrm{\%}}\right) $$ Flame Graph
entity_by_id entity type ID: https://blockprotocol.org/@alice/types/entity-type/uk-address/v/1 $$11.0 \mathrm{ms} \pm 85.8 \mathrm{μs}\left({\color{gray}-2.638 \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 $$8.24 \mathrm{ms} \pm 45.3 \mathrm{μs}\left({\color{gray}-2.041 \mathrm{\%}}\right) $$ Flame Graph

representative_read_multiple_entities

Function Value Mean Flame graphs
entity_by_property traversal_paths=0 0 $$55.9 \mathrm{ms} \pm 451 \mathrm{μs}\left({\color{gray}-3.724 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=255 1,resolve_depths=inherit:1;values:255;properties:255;links:127;link_dests:126;type:true $$111 \mathrm{ms} \pm 678 \mathrm{μs}\left({\color{gray}-1.317 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:0;link_dests:0;type:false $$63.0 \mathrm{ms} \pm 541 \mathrm{μs}\left({\color{gray}-4.294 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:0;links:1;link_dests:0;type:true $$74.1 \mathrm{ms} \pm 589 \mathrm{μs}\left({\color{gray}-3.065 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:0;properties:2;links:1;link_dests:0;type:true $$83.1 \mathrm{ms} \pm 535 \mathrm{μs}\left({\color{gray}-2.258 \mathrm{\%}}\right) $$
entity_by_property traversal_paths=2 1,resolve_depths=inherit:0;values:2;properties:2;links:1;link_dests:0;type:true $$88.4 \mathrm{ms} \pm 642 \mathrm{μs}\left({\color{gray}-1.659 \mathrm{\%}}\right) $$
link_by_source_by_property traversal_paths=0 0 $$43.6 \mathrm{ms} \pm 255 \mathrm{μs}\left({\color{gray}-1.569 \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 $$71.8 \mathrm{ms} \pm 450 \mathrm{μs}\left({\color{gray}-2.477 \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 $$49.6 \mathrm{ms} \pm 414 \mathrm{μs}\left({\color{gray}-2.069 \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 $$58.4 \mathrm{ms} \pm 385 \mathrm{μs}\left({\color{gray}-3.612 \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 $$61.2 \mathrm{ms} \pm 466 \mathrm{μs}\left({\color{gray}-2.765 \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 $$60.0 \mathrm{ms} \pm 319 \mathrm{μs}\left({\color{lightgreen}-5.421 \mathrm{\%}}\right) $$

scenarios

Function Value Mean Flame graphs
full_test query-limited $$122 \mathrm{ms} \pm 845 \mathrm{μs}\left({\color{gray}0.134 \mathrm{\%}}\right) $$ Flame Graph
full_test query-unlimited $$133 \mathrm{ms} \pm 826 \mathrm{μs}\left({\color{gray}-0.547 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-limited $$19.3 \mathrm{ms} \pm 164 \mathrm{μs}\left({\color{lightgreen}-12.885 \mathrm{\%}}\right) $$ Flame Graph
linked_queries query-unlimited $$539 \mathrm{ms} \pm 1.88 \mathrm{ms}\left({\color{gray}2.93 \mathrm{\%}}\right) $$ Flame Graph

@kube
kube added this pull request to the merge queue Sep 3, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue because a pull request earlier in the stack was removed Sep 3, 2026
@kube
kube added this pull request to the merge queue Sep 3, 2026
Merged via the queue into main with commit 8279977 Sep 3, 2026
219 checks passed
@kube
kube deleted the claude/fe-1533-petrinaut-shipping-skill branch September 3, 2026 22:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/infra Relates to version control, CI, CD or IaC (area)

Development

Successfully merging this pull request may close these issues.

5 participants