Skip to content

fix: address review follow-ups for sources, git transport and Trae commands - #3468

Merged
dyoshikawa merged 5 commits into
mainfrom
resolve-issue-3461-scrap-followups
Oct 15, 2026
Merged

dyoshikawa merged 5 commits into
mainfrom
resolve-issue-3461-scrap-followups

Conversation

@dyoshikawa

Copy link
Copy Markdown
Owner

Summary

Follow-ups from the #3456, #3457, #3459 and #3460 reviews tracked in #3461. Each item is either fixed here or shown to need no change.

  1. Frozen install with an empty selection (fix(sources): show the empty-selection hint under --frozen #3456): documented in docs/guide/declarative-sources.md. An empty skills/rules list fails only the source that declares it, in --frozen mode too. The other sources are still installed into .curated/, and then install exits with an error that counts the failed sources. This is how non-frozen installs already behave, so the behavior is kept and documented instead of adding an up-front abort.
  2. Duplicated predicate (fix(sources): show the empty-selection hint under --frozen #3456): hasEmptySelection and assertNonEmptySelections now share getEmptySelections.
  3. Watchlist wrap (fix(sources): show the empty-selection hint under --frozen #3456): the OpenHands entry is rewrapped to about 80 columns.
  4. Devin import of name-less frontmatter files (fix: address follow-ups from the GitLab Duo, Pi, CodeBuddy and Devin reviews #3457): no change needed. The Devin subagents docs define the flat layout as agents/<name>.md, where "the file name (without .md) becomes the profile's identifier" and name defaults to the file or directory name. description has no default and nothing is documented as required. So Devin itself loads .devin/agents/README.md as a profile named README, and importing it the same way matches what Devin does. Skipping it would hide a profile that Devin actually loads.
  5. Trae command name collisions (feat(trae): add commands and ignore support #3459): TraeCommand.validateRulesyncCommands now warns when two commands targeted at Trae end up with the same name: the file stem, or trae.name if that is set. The Trae commands docs call name "the unique identifier for the command".
  6. Nesting deeper than three levels (feat(trae): add commands and ignore support #3459): the same hook warns about project commands nested deeper than the three directory levels Trae reads. Trae's docs mark level 4 as "unreadable". Global commands are not checked because the docs give the limit only for project commands. To support this, the validateRulesyncCommands hook now also receives global. The Trae note in docs/reference/file-formats.md mentions both warnings.
  7. Case-sensitive .git skip (fix(sources): refuse skill paths resolving into .git and address review follow-ups #3460): the git transport walk now skips .git without regard to case, matching the start-directory check. The test now covers .git, .GIT and .Git.

Closes #3461

Test plan

  • pnpm cicheck
  • New TraeCommand.validateRulesyncCommands tests: duplicate stems, a trae.name override, non-Trae targets ignored, the depth limit, and global mode left unchecked
  • Parametrized .git skip test

🤖 Generated with Claude Code

https://claude.ai/code/session_012y9fNo2AAJdGocxvsHtDhv

dyoshikawa and others added 5 commits October 15, 2026 23:36
…mmands

- Document that an empty `skills`/`rules` list fails only its own source,
  in `--frozen` mode too, while the other sources are still installed.
- Share one empty-selection predicate between the frozen lockfile check
  and the per-source empty-list error.
- Skip `.git` case-insensitively in the git transport walk, matching the
  start-directory check.
- Warn when Trae commands derive the same `name` (Trae documents it as a
  unique identifier) and when project commands are nested deeper than the
  three levels Trae reads.
- Rewrap the OpenHands watchlist entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012y9fNo2AAJdGocxvsHtDhv
- Derive the Trae `name` through one helper in both generation and the
  duplicate-name warning; a non-string `trae.name` still fails validation.
- Test that CommandsProcessor passes the scope to the Trae checks, so
  global commands get no nesting warning.
- Note why the git transport walk skips `.git` case-insensitively.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012y9fNo2AAJdGocxvsHtDhv
…rap-followups

# Conflicts:
#	src/generated/docs-content.ts
@dyoshikawa
dyoshikawa merged commit 5732931 into main Oct 15, 2026
9 checks passed
@dyoshikawa
dyoshikawa deleted the resolve-issue-3461-scrap-followups branch October 15, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Follow-ups from #3456, #3457, #3459 and #3460 reviews

1 participant