Repository navigation
fix(telemetry): a step end names its skill either way - #767
Merged
Merged
Conversation
Both closers compared the two names with `===`. skill-detection.cjs has two capture routes: Claude Code and Copilot write `aidd-dev:01-plan`, Cursor and Codex write the bare directory name `01-plan`. The end is captured by neither - it is read out of the text a skill echoes, and a skill always names itself in full. So on Cursor and Codex a step opened as `01-plan` met an end named `aidd-dev:01-plan`, matched nothing, and ran on as if the skill had never said it was done. One predicate now answers it for the step axis and the flow axis: equal outright, or equal once a `plugin:` prefix comes off, and only when one side carries no plugin at all. Two qualified names that disagree stay two skills. The cost is stated where the function lives: an unqualified `01-plan` closes whichever `01-plan` is open, whatever plugin it came from. The host threw the plugin away before this code saw the line. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp
blafourcade
force-pushed
the
fix/a-step-end-names-its-skill-either-way
branch
from
September 4, 2026 22:06
18e31bb to
00184b0
Compare
Merged
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.
What
Both closers compared the two names with
===.skill-detection.cjshas two capture routes and they disagree:skillNameFromArgumentaidd-dev:01-planskillNameFromSkillFileRead01-planThe end is captured by neither — it is read out of the text a skill echoes, and a skill always names itself in full, because that is what it knows itself as. So on Cursor and Codex a step opened as
01-planmet an end namedaidd-dev:01-plan, matched nothing, and ran on as if the skill had never said it was done.aidd-dev:01-planhas carried this sincestep_endshipped; #763 and #764 both had to declare it as a standing limit. This removes it.Change
One predicate,
namesTheSameSkill, for the step axis and the flow axis: equal outright, or equal once aplugin:prefix comes off — and only when one side carries no plugin at all. Two qualified names that disagree stay two skills, soaidd-dev:01-planandaidd-pm:01-planare never folded together.The cost is stated where the function lives: an unqualified
01-plancloses whichever01-planis open, whatever plugin it came from. The host threw the plugin away before this code saw the line, and no reader can put it back — the same limitORCHESTRATING_SKILLSalready names.Guards
===again — 4 failuresNot proven by the sink
This machine's journals were written by Claude Code, which spells the name in full on both sides, so the corpus cannot separate the two rules. The guards are the proof; the hosts this fixes are Cursor and Codex.
What this does not change
by_stepkeys its rows on the spelling thestep_startwrote, and--step <name>matches that same stored value exactly. Both are unchanged: this PR moves only where an interval ends, never how the row it produces is named. Two openers of one skill spelled differently in the same period therefore still read as two rows - the standing limit already stated onORCHESTRATING_SKILLS, not one this introduces. Verified: no other site incli/src/domainorcli/src/applicationcompares two skill names, so the two closers are the only comparisons and both now go throughnamesTheSameSkill.Gates: 3434 tests / 308 files,
tsc,biome ci, knip, jscpd, bundle within budget, 369 repository script tests, 0 broken links, cli layering clean.🤖 Generated with Claude Code
https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp