Force-add gitignored infrastructure in init commit
When a host repo gitignores paths under `.claude/`, `ana init commit` silently drops infrastructure files from the commit. Skills, agents, settings.json, and hooks vanish from git — and therefore from worktrees where Build and Verify actually run. The pipeline degrades or breaks entirely without warning.
verdict PASSscore 21 / 21findings 5 (1 risk · 2 debt · 2 obs)duration 1h 12mrejection cycles 0shipped May 29, 2026surface cli
Pipeline timeline
Intent to proven code in 1h 12m across Think, Plan, Build, and Verify.
Think40m
Plan9m
Build6m
Verify5m
Assertion ledger
21 claims, each independently verified. Showing 8 — show all →
| ID | Says | Matcher | |
|---|---|---|---|
| A001 | Infrastructure files hidden by gitignore are detected during init commit | verified | ok |
| A002 | All infrastructure files in a gitignored directory are found, not just a hardcoded list | verified | ok |
| A003 | Root-level infrastructure files like CLAUDE.md are detected when gitignored | verified | ok |
| A004 | Force-added files are included in the git commit | verified | ok |
| A005 | Both normal and force-added files appear in the same commit | verified | ok |
| A006 | Console output names the force-added files | verified | ok |
| A007 | Console output explains force-add is for worktree compatibility | verified | ok |
| A008 | The respect-gitignore flag prevents force-adding gitignored files | verified | ok |
Findings 5 total
debtpackages/cli/src/commands/init/commit.ts→ acknowledge
discoverGitignoredFiles calls resolveMonorepoAgentsMd independently — duplicated scan.json read
riskpackages/cli/src/commands/init/commit.ts→ monitor
No guard for symlinks under .claude/ — readdirSync with recursive follows symlinks into arbitrary directories
debtpackages/cli/tests/commands/init/commit.test.ts→ acknowledge
A020 test is indirect — exercises exit-code-1 path but the file created is dirty, not a clean non-ignored candidate
obspackages/cli/src/commands/init/commit.ts→ closed
lstatSync called per-file during candidate enumeration — O(n) syscalls on large .claude/ trees
obs→ closed
Proof chain finding init-commit-C2 (no integration test for pull conflict abort path) still present — unrelated to this build
Integrity seal
scopesha256:266c8f4ffc237...
contractsha256:8552ccfc9f715...
plansha256:e2a01309e972f...
specsha256:85a31e5fc7a39...
build-reportsha256:d81dbddecf3d1...
build-datasha256:94a716e798b84...
verify-reportsha256:984217d71bc00...
verify-datasha256:da60ff34e4e04...
audit cmd$ ana proof audit gitignore-force-add → all hashes match