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.

Think
40m
Plan
9m
Build
6m
Verify
5m

Assertion ledger

21 claims, each independently verified. Showing 8 — show all →

IDSaysMatcher
A001Infrastructure files hidden by gitignore are detected during init commitverifiedok
A002All infrastructure files in a gitignored directory are found, not just a hardcoded listverifiedok
A003Root-level infrastructure files like CLAUDE.md are detected when gitignoredverifiedok
A004Force-added files are included in the git commitverifiedok
A005Both normal and force-added files appear in the same commitverifiedok
A006Console output names the force-added filesverifiedok
A007Console output explains force-add is for worktree compatibilityverifiedok
A008The respect-gitignore flag prevents force-adding gitignored filesverifiedok

Findings 5 total

debtpackages/cli/src/commands/init/commit.tsacknowledge
discoverGitignoredFiles calls resolveMonorepoAgentsMd independently — duplicated scan.json read
riskpackages/cli/src/commands/init/commit.tsmonitor
No guard for symlinks under .claude/ — readdirSync with recursive follows symlinks into arbitrary directories
debtpackages/cli/tests/commands/init/commit.test.tsacknowledge
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.tsclosed
lstatSync called per-file during candidate enumeration — O(n) syscalls on large .claude/ trees
obsclosed
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