Repository navigation
chore(herdr): sync detection manifests to v0.9.3 - #327
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
bot/herdr-sync
branch
from
September 30, 2026 14:10
aa5129c to
626949a
Compare
Vendored from herdr master by go run ./internal/tools/herdrsync.
github-actions
Bot
force-pushed
the
bot/herdr-sync
branch
from
September 30, 2026 14:18
626949a to
38fff84
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
go build ./...,go test ./...and golangci-lint passed on this tree in the run that produced it. A pull request opened withGITHUB_TOKENdoes not triggerpull_requestworkflows, so Go CI posts no separate check here.The commit statuses on this pull request report Go checks and both differential modes. Wait for both to pass before merging.
Herdr detection sync report
Generated 2026-09-30T14:15:06Z by
go run ./internal/tools/herdrsync.master331775c3e51e8cca4d122468180738101bd9e6b0v0.9.3W/"e73307bc29c98eec95cac5cf610317c7"Version changes
claudeclinecodexgrokkirolettapiFile changes
7 file(s) changed, 15 unchanged.
upstream/claude.toml(2026.09.11.1, 6726 bytes, 16 rules)upstream/cline.toml(2026.09.11.1, 1527 bytes, 6 rules)upstream/codex.toml(2026.09.23.1, 3309 bytes, 8 rules)upstream/grok.toml(2026.09.18.2, 5401 bytes, 15 rules)upstream/kiro.toml(2026.09.19.1, 2861 bytes, 8 rules)upstream/letta.toml(2026.08.24.1, 2328 bytes, 10 rules)upstream/pi.toml(2026.09.14.1, 456 bytes, 2 rules)Published versus bundled
Each row is the copy a Herdr client would load, and why.
agyampclaudeclinecodexcopilotcursordevindroidgeminigrokhermeskilokimikirolettamakimuseopencodepiqodercliqwenRegex compatibility
3 pattern(s) that Rust's
regexcrate accepts cannot compile under Go's RE2. The vendored files keep them verbatim; an overlay carries the rewrite. Seedocs/reference/herdr-detection-parity.md.upstream/antigravity.tomlrulespinner_workingline_regex:^\s*[\u2800-\u28FF]+\s+\p{Alphabetic}+\w*ing\b\p{Alphabetic}upstream/cursor.tomlrulespinner_workingline_regex:^\s*(⬡|⬢|[\u2800-\u28FF]+)\s+\p{Alphabetic}+\w*ing\b\p{Alphabetic}upstream/qodercli.tomlrulespinner_workingline_regex:^\s*[\u2800-\u28FF]\s+.*\p{Alphabetic}\p{Alphabetic}Alias table
24 agents in Herdr's
lookup_agent; generic runtimes:bash,bun,cmd,fish,node,powershell,pwsh,sh,tmux,zsh(plus python, or python[....] where every dot-separated segment after the prefix is a non-empty run of ASCII digits (is_python_runtime)).Every Herdr alias for a family Sidecar already claims appears literally in
internal/agentactivity/activity.go.Authority gaps
Herdr's published authority is a target. Sidecar tiers are earned by traces and are never copied.
Below target marks an agent Herdr gives lifecycle authority to through hooks and Sidecar has not proved
fullfor. That is the same ruleTestHerdrAuthorityGapsprints, so this table andgo test ./internal/agentlifecycle/name the same set.agyampclaudeclinecodexcopilotcursordevindroidgeminigrokhermeskilokimikirolettamakimastracodemuseompopencodepiqodercliqwenIntegration assets
Vendored verbatim from
src/integration/assetsintointernal/agentintegration/upstream/, pinned byupstream.lock.jsonthere. They are reference material: Sidecar installs its own assets and these exist so a re-port is a diff.agyantigravity_cliantigravityfrom version 3claudeclaudeclaudefrom version 9codexcodexcodexfrom version 8copilotcopilotcopilotfrom version 3cursorcursorcursorfrom version 1devindevindevinfrom version 2droiddroiddroidfrom version 3grokgrokgrokfrom version 1hermeshermeshermesfrom version 5kilokilokilofrom version 4kimikimikimifrom version 7lettalettamastracodemastracodemastracodefrom version 2ompompompfrom version 9opencodeopencodeopencodefrom version 10pipipifrom version 8qodercliqodercliqoderclifrom version 3qwenqwenqwenfrom version 1Bumps for providers Sidecar has not ported
lettanow ships an integration at version 1.Upstream changes since each Sidecar port
ported-fromis recorded ininternal/agentintegration/portedfrom.go, not in an asset header: two of the three Sidecar assets are Go values with no header to carry it. A comparison is made on bytes rather than on the version number, so a file upstream edited without bumping still shows here.opencode— ported from herdropencodeversion 10Compared against
4a3b04f5; upstream is now at version 13.upstream/opencode/herdr-agent-state.js(diff):upstream/opencode/herdr-agent-state.test.ts(diff):upstream/opencode/herdr-tui-session.js(diff):upstream/opencode/herdr-tui-session.test.ts(diff):upstream/opencode/tui.js(current upstream file):codex— ported from herdrcodexversion 8Compared against
4a3b04f5; upstream is now at version 9.upstream/codex/herdr-agent-state.ps1(diff):upstream/codex/herdr-agent-state.sh(diff):claude— ported from herdrclaudeversion 9Compared against
4a3b04f5; upstream is now at version 10.upstream/claude/herdr-agent-state.ps1(diff):upstream/claude/herdr-agent-state.sh(diff):pi— ported from herdrpiversion 8Compared against
d08e4468; upstream is now at version 9.upstream/pi/herdr-agent-state.ts(diff):kilo— ported from herdrkiloversion 4Compared against
d08e4468; upstream is now at version 4.No upstream change: all 1 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
kimi— ported from herdrkimiversion 7Compared against
d08e4468; upstream is now at version 7.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
omp— ported from herdrompversion 9Compared against
d08e4468; upstream is now at version 10.upstream/omp/herdr-agent-state.ts(diff):antigravity— ported from herdragyversion 3Compared against
d08e4468; upstream is now at version 3.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
copilot— ported from herdrcopilotversion 3Compared against
d08e4468; upstream is now at version 3.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
cursor— ported from herdrcursorversion 1Compared against
d08e4468; upstream is now at version 1.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
grok— ported from herdrgrokversion 1Compared against
d08e4468; upstream is now at version 2.upstream/grok/herdr-agent-state.ps1(diff) is not shown: this section is capped at 600 lines to keep the report inside GitHub's pull request body limit. Re-rungo run ./internal/tools/herdrsynclocally to read it.upstream/grok/herdr-agent-state.sh(diff) is not shown: this section is capped at 600 lines to keep the report inside GitHub's pull request body limit. Re-rungo run ./internal/tools/herdrsynclocally to read it.devin— ported from herdrdevinversion 2Compared against
d08e4468; upstream is now at version 2.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
droid— ported from herdrdroidversion 3Compared against
d08e4468; upstream is now at version 3.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
qodercli— ported from herdrqodercliversion 3Compared against
d08e4468; upstream is now at version 3.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
qwen— ported from herdrqwenversion 1Compared against
d08e4468; upstream is now at version 1.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
mastracode— ported from herdrmastracodeversion 2Compared against
d08e4468; upstream is now at version 2.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
hermes— ported from herdrhermesversion 5Compared against
d08e4468; upstream is now at version 5.No upstream change: all 2 compared file(s) are byte-identical to the copy this port was written against. Nothing to re-port.
Fixture verdict flips
Every fixture in
internal/agentactivity/testdatawith ascreen:block, classified against the manifests this sync replaced and against the ones it wrote. A verdict is the state, the matched rule id, and the fallback reason: the same triplescripts/herdr-diff.shcompares. The Sidecar overlays are applied to both sides, because a sync never touches them and applying them to one side would report every overlay rule as a flip. Sidecar's process gate is not applied: it reads the pane's process name and never the manifest, so its answer is the same on both sides and it cannot create or hide a flip.8 of 61 fixture(s) changed verdict. Each row is a screen Sidecar now reads differently. Read the manifest diff above for the rule that moved, and decide per row whether the new verdict is the better one.
codexbackground_terminal.txtosc_title_idlescreen_working_fallbackcodexcompleted.txtosc_title_idlesidecar.composer_idlecodexinterrupted.txtosc_title_idlesidecar.composer_idlecodexstartup_idle.txtosc_title_idlesidecar.composer_idlecodextool_running_composer.txtosc_title_idlescreen_working_fallbackgrokbackground_subagent.txtosc_title_idlebackground_status_workinggrokworking.txtsidecar.working_footerspinner_status_workingkirolive_working_footer.txtkiro_working_markerlive_working_footerOverlay rules
Each rule is removed on its own from the manifests this sync wrote, and the corpus is reclassified. A rule that changes no verdict has stopped earning its place, which is the signal that upstream has adopted the same idea and the rule can go. Redundancy is judged on the state and the fallback reason alone, never on the rule id: a
sidecar.id can never equal the upstream id that would win without it, so folding the id in would make the check unreachable.A rule carrying an upstream id is not in that bucket and is never a deletion candidate. It replaces upstream's rule rather than adding one, so removing it leaves a rule that is dead (the
\p{Alphabetic}rewrites RE2 cannot compile) or differently flagged (the copies that only addvisible_blocker), which is a regression rather than a cleanup. Those rows are judged on the matched rule id and the visible flags as well, and say when no fixture covers them at all.antigravityspinner_workingantigravitysidecar.trust_prompt_blockedblocked.txtantigravitysidecar.permission_prompt_blockedpermission_prompt.txtantigravitysidecar.status_footer_workingworking.txtclaudesidecar.overlay_retainoverlay.txtclaudesidecar.allow_prompt_blockerallow_prompt.txtclaudesidecar.background_agents_waitingsidecar.background_agents_footer_workingclaudesidecar.background_agents_footer_workingbackground_agents_footer.txtclaudelegacy_no_prompt_blockerlegacy_permission_wait.txtcodexsidecar.composer_idlecompleted.txt,interrupted.txt,startup_idle.txtcodexsidecar.approval_blockerapproval_prompt.txtcodexweak_blockerweak_blocker.txtcursorspinner_workingworking_spinner.txtcursorsidecar.decision_blockedblocked_decision.txtcursorsidecar.finished_background_tasks_idlefalse_positive_finished_background.txtcursorsidecar.background_suffix_workingworking_background.txtgroksidecar.overlay_retainoverlay.txtgroksidecar.working_footerharness-exempt: no fixture holds the screen it is for, and its case is a Go testgroksidecar.idle_footerstale_working_scrollback.txtmusesidecar.thinking_workingthinking.txtqoderclispinner_workingspinner_working.txt1 overlay rule(s) changed no fixture verdict. Delete the rule, or record why it stays and add the fixture that proves it. Deleting one is a separate change with a fixture attached, so this report flags it rather than making it.
Opened by
.github/workflows/herdr-sync.ymlfromgo run ./internal/tools/herdrsync. Re-running the workflow force-updates this branch and edits this description in place.