Files
orca/.gitignore
T
Brennan Benson 49cfbf014c fix(skills): stop OS sidecars marking an untouched skill as modified (#11471)
* fix(skills): stop OS sidecars marking an untouched skill as modified

Package identity compared a live user directory against a tree read from a
clean checkout, so anything the OS deposited counted as drift. One Finder
visit writes .DS_Store, which sorts before SKILL.md and misaligns the
index-aligned snapshot comparison — the copy became 'unrecognized', was
reported as "may be modified... Remove it", and left out of the update.
Running the update could not clear it either: the updater compares its lock
to the source and never reads disk, so it correctly reports "up to date"
and writes nothing.

Ignore OS-authored names on both sides of the comparison. The generator
half is not hypothetical: a stray sidecar in a working tree made the
committed artifacts read as stale, failing lint for that developer.

Scoped to OS-authored names only. Tolerating unexpected files in general
would let an injected payload ride along beside a clean SKILL.md; these are
safe because an official SKILL.md never references them, so no agent can be
routed into one. Mode bits are deliberately untouched — that would weaken
identity for real scripts.

* fix(skills): keep guarding a directory or link wearing an OS metadata name

The name-only skip dropped any entry matching an OS metadata name, so a
directory named .DS_Store or ._scripts took its whole subtree out of
identity and a symlink wearing one stopped tripping the link guard — a
skill hiding either read as pristine. The OS writes these as plain files
only, so the entry type decides, still ahead of the case-fold map.

Also compares both walkers over the same fixture: an asymmetric skip is
worse than none, since one side would bake in content the other can
never observe.

* chore: ignore the OS metadata names skill identity already skips

Both skill-identity walkers ignore these names, but .gitignore covered only
.DS_Store and Thumbs.db — so a stray ._SKILL.md showed as untracked and
`git add -A` could commit it. That is the one way the two walkers can
disagree: the disk walker skips such a file while the git-tree producer
(collectGitPackageFiles, used by the unreferenced --rebuild-from-tags path)
does not, so a committed sidecar would make released history and observation
describe different content.

Ignoring them keeps that asymmetry unreachable rather than adding a second
skip to the released-history path, which is load-bearing and provably never
sees one today: no committed sidecar exists on any ref.

Nothing tracked matches the new patterns.

* chore: correct the skill-identity ignore comment

The previous wording claimed these names cannot be committed, which
overstates what .gitignore provides: `git add -f` and `git apply --index`
both bypass it, so a cherry-pick, rebase or fork branch already carrying a
sidecar is unaffected. That clause was load-bearing — it was the stated
reason for leaving the released-history producer unhardened — so it should
not read as a structural guarantee.

Also fixes the producer count (three, not two: two disk walkers plus the
git-tree producer, which does not skip) and says plain file, since the skip
is isFile()-gated so a directory or link wearing the name is still walked.
2026-07-30 13:20:47 -07:00

136 lines
2.8 KiB
Plaintext

# Build artifacts
tsconfig.*.tsbuildinfo
# TypeScript emit artifacts next to sources (tsc produced these accidentally;
# real source lives in .ts/.tsx). Hand-authored declaration files are
# re-included below.
src/**/*.js
src/**/*.d.ts
/electron.vite.config.js
/electron.vite.config.d.ts
!src/main/types/hosted-git-info.d.ts
!src/preload/api-types.d.ts
!src/preload/index.d.ts
!src/renderer/src/env.d.ts
!src/renderer/src/mermaid.d.ts
!src/types/build-constants.d.ts
# Dependencies
node_modules/
# Build output
dist/
dist-electron/
out/
/build/
release/
native/**/.build/
# pnpm
.pnpm-store/
package-lock.json
# Environment
.env
.env.local
.env.*.local
# IDE
.vscode/
.idea/
.serena/
*.swp
*.swo
*~
# OS
# Keep these in step with isOsMetadataSkillEntryName (skill-package-identity.ts): both disk
# walkers skip a plain file with one of these names, the git-tree producer does not, and
# ignoring them here is what keeps `git add -A` from committing a stray one.
*.stackdump
.DS_Store
._*
Thumbs.db
ehthumbs.db
desktop.ini
# Lint/cache
.oxlintcache
# Logs
*.log
*.log.*
npm-debug.log*
pnpm-debug.log*
# Coverage
coverage/
# Prod release scan output (accidental adds)
prod-release-scan-*.md
# Benchmark run output
/tools/benchmarks/results/*.json
/.bench-fixtures/
# Temp
tmp/
.tmp/
design-docs/
.context/
.atl/
# Machine-local agent hook endpoint files may contain auth tokens.
/agent-hooks/
# Local-only design/planning docs (not checked in), including most of docs/reference/.
# Durable docs that should be tracked must live in one of the allow-listed
# locations below (assets, readme, STYLEGUIDE, mobile terminal shortcut bar,
# and the tracked reference docs linked from AGENTS.md / README.md).
docs/**
!docs/
!docs/assets/
!docs/assets/**
!docs/readme/
!docs/readme/**
!docs/STYLEGUIDE.md
!docs/mobile-terminal-shortcut-bar.md
!docs/reference/
!docs/reference/git-compatibility.md
!docs/reference/headless-linux-server.md
!docs/reference/linux-glibc-compatibility.md
# Stably CLI (only docs/ are tracked)
.stably/*
!.stably/docs/
.playwright-cli
.validate-ui-screenshots/
validation-screenshots/
.stably-browser
# Local scratch notes and PR evidence screenshots (not part of the product).
/notes/
/pr-evidence/
# Playwright
test-results/
playwright-report/
# Agent skill installations (machine-local, populated by agent tooling)
/.claude/skills/
/.agents/skills/
/skills-lock.json
# Agent hook runtime endpoints (machine-local secrets)
/agent-hooks/
validation-screenshots/
# Localization bootstrap cache (regenerated by bootstrap:*-catalog)
src/renderer/src/i18n/locales/.zh-catalog-cache.json
src/renderer/src/i18n/locales/.ko-catalog-cache.json
src/renderer/src/i18n/locales/.ja-catalog-cache.json
src/renderer/src/i18n/locales/.es-catalog-cache.json
# Bench result JSONs are working artifacts
tools/benchmarks/results/terminal-pipeline-*.json