Repository navigation
library: desktop.ini and Thumbs.db are no more an edit of a skill tha… - #1072
Open
TryWorld2026 wants to merge 1 commit into
Open
TryWorld2026 wants to merge 1 commit into
TryWorld2026 wants to merge 1 commit into
Conversation
…n .DS_Store is A skill given to an agent as a copy (yetone#896) sits in a folder the user opens in a file manager: Explorer writes desktop.ini and Thumbs.db into it, and Finder .DS_Store. Four walkers of a skill's files each had its own list of what isn't the skill — hashDir left all three in, treeOf and readSkill left .DS_Store out but not desktop.ini or Thumbs.db, and copyDir wrote whatever the source folder held. So a copy with Explorer's files in it read as edited: the library took them into its own folder, every agent was given a copy again, the page said the copy differed from the library's, and a bundle carried them to another computer with the skill. SkipInSkill, in skill_edits.go where the list already was, now holds all of them — the mark, .git, .DS_Store, desktop.ini and Thumbs.db, compared without regard to case — and hashDir, treeOf, readSkill and copyDir all walk by it, so a hash, a tree, a copy and a bundle agree on what a skill is. Verified on Windows, where Explorer's names are the ones written. Without the change TestSkillCopyIgnoresExplorerMetadata fails with "the file manager's files made the copy look edited: [claude]"; its assertions run past that one find the library's own folder and codex's copy holding desktop.ini, Thumbs.db and THUMBS.DB, and the library's skill kept with the backups for the edit. TestCarryLeavesExplorerMetadataOut fails with "the bundle carries .DS_Store" and the two Explorer names. Both pass with it. go test -tags nogui ./internal/library, go vet -tags nogui ./... and the windows, darwin and linux builds pass.
TryWorld2026
force-pushed
the
fix/skill-walkers-skip-os-metadata
branch
from
October 7, 2026 01:00
a1d0428 to
1cfee8f
Compare
This branch has not been deployed
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.
library: desktop.ini and Thumbs.db are no more an edit of a skill than .DS_Store is
What is wrong
A skill given to an agent as a copy (#896) sits in a folder the user opens in a
file manager: Explorer writes
desktop.iniandThumbs.dbinto it, Finder.DS_Store. Four walkers of a skill's files each had its own list of whatisn't the skill:
hashDirleft all three in — so the file manager's own bytes changed the skill's hash;treeOfandreadSkillleft.DS_Storeout but notdesktop.iniorThumbs.db;copyDirwrote whatever the source folder held.So a copy with Explorer's files in it read as edited: the library took them
into its own folder, every agent was given a copy again, the page said the copy
differed from the library's, and a bundle carried them to another computer with
the skill.
While fixing it:
hashDirandreadSkillanswered.gitwithreturn nilrather than
filepath.SkipDir, which kept walking into it —.git's contentswere being hashed as part of the skill.
What changed
SkipInSkill, inskill_edits.gowhere the list already was, now holds all ofthem — magpie's own mark,
.git,.DS_Store,desktop.iniandThumbs.db,compared without regard to case — and
hashDir,treeOf,readSkillandcopyDirall walk by it, so a hash, a tree, a copy and a bundle agree on what askill is. The two
.gitwalkers now answerfilepath.SkipDir.Semantic change (Library)
part of the skill, so Explorer's or Finder's own files made a copy read as
edited and were carried into the library and into bundles.
files in it reads as current and the files are left where they are.
docs/subsystems/library.md(updatedin this PR — the copy's hash contract is where this belongs);
implementation
SkipInSkillininternal/library/skill_edits.go, and its fourcallers in
skillcheck.go,skills.go,carry.go.Verification
Verified on Windows, where Explorer's names are the ones written.
TestSkillCopyIgnoresExplorerMetadatafails withthe file manager's files made the copy look edited: [claude]; its assertionsrun past that one find the library's own folder and codex's copy holding
desktop.ini,Thumbs.dbandTHUMBS.DB, and the library's skill kept withthe backups for the edit.
TestCarryLeavesExplorerMetadataOutfails withthe bundle carries .DS_Storeand the two Explorer names.
go test -tags nogui ./internal/library,go vet -tags nogui ./...and the windows, darwin and linux builds pass.Not in this PR
#916 is a different bug with a different root cause and is untouched here.