From 633616bad2af348e4a4780c26e33ade45fdf3881 Mon Sep 17 00:00:00 2001 From: Julian Noble Date: Mon, 6 Jul 2026 01:12:21 +1000 Subject: [PATCH] dual-VCS contract: record nested-.gitignore and case-sensitivity asymmetries Two git/fossil divergence classes discovered during the tracked-set verification: nested .gitignore files (e.g. in the project-layout templates) are honoured by git as nested ignores of the outer repo but invisible to fossil, leaving template content untracked in git yet managed by fossil; and git ignore matching is case-insensitive on Windows (core.ignorecase) while fossil globs are case-sensitive (a todo.txt pattern hits vendored TODO.txt in git only). Both recorded in the coexistence contract with the prescribed treatment. Assisted-by: harness=claude; primary-model=claude-fable-5; api-location=anthropic.com --- .fossil-settings/AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.fossil-settings/AGENTS.md b/.fossil-settings/AGENTS.md index 9863a15f..020e004b 100644 --- a/.fossil-settings/AGENTS.md +++ b/.fossil-settings/AGENTS.md @@ -23,6 +23,8 @@ Versioned fossil settings (one setting value or glob list per file) for this dua - **No negation exists in fossil globs.** Git's `/bin/*` + `!exception` pattern becomes: ignore `bin/*` wholesale and explicitly `fossil add` the tracked exceptions (ignore-glob never affects already-managed files, so they stay tracked). The exception set is whatever git tracks under an ignored tree - at the time of writing: `bin/AGENTS.md`, `bin/*.cmd`, `bin/*.kit`, `bin/*.tcl`, `bin/*.sh`, `bin/*.bash`, plus force-tracked one-offs (`bin/libssp-0.dll`, `src/vfs/punk9magicsplat.vfs/lib/nmake/x86_64-w64-mingw32-nmakehlp.exe`). Derive the current set with the verification comparison below rather than trusting this list. - A bare directory name prunes that whole tree; `*` crosses `/`; git patterns intended to match at any depth need an additional `*/` variant; `#` comment lines are honoured. - Do not add the fossil-generated names (`manifest`, `manifest.uuid`, `manifest.tags`) to `ignore-glob` - fossil handles them itself. +- **Nested `.gitignore` files are git-only**: ignore files inside subtrees (e.g. the project-layout templates under `src/project_layouts/`) are honoured by git as nested ignores of the outer repo but invisible to fossil - template content they match is untracked in git yet managed by fossil. Treat such divergence as a signal to review the git side (usually `git add -f` of the affected template files). +- **Case sensitivity differs**: git ignore matching is case-insensitive on Windows (`core.ignorecase`), fossil glob matching is case-sensitive - e.g. a `todo.txt` pattern hits vendored `TODO.txt` in git but not fossil. ### Safe sync procedure (when asked to "sync the ignores")