# === OS ===
.DS_Store
Thumbs.db
desktop.ini
*~
bot-father/
tmp_botfather/

# === Java ===
*.class
*.war
*.ear
hs_err_pid*
.mtj.tmp/

# === Maven ===
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
/.mvn/wrapper/maven-wrapper.jar

# === Gradle ===
.gradle/

# === IDEs ===

# IntelliJ / JetBrains
.idea/
*.iml
*.iws
/out/
.idea_modules/
atlassian-ide-plugin.xml
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Eclipse
.classpath
.project
.settings/
.factorypath

# VS Code
.vscode/
.history/

# === Project-specific ===
.env
docker/data/
/tmp/

# Grafana runtime state. The monitoring stack uses a named Docker volume and
# provisions from docs/monitoring/, so anything written here is local scratch —
# grafana.db (a 1.4 MB SQLite file) used to be committed from the bind-mount era.
/grafana-data/

# Kubernetes — user-specific values and Helm packaging output
helm/eddi/charts/
*.tgz
my-values.yaml
*-values-override.yaml

# Build & test outputs
build-clean-compile.txt
build-full.txt
build-package-clean.txt
build-package-output.txt
build-test-output.txt
build-xlint-output.txt
build-xlint.txt
build-warnings.txt
orphan-test.txt
test-output.txt

# AI session files (keep locally, don't push)
.gemini/
.claude/

# Event/marketing material — kept locally, not part of the product
waic-2026/

# (eddi-audit-deadletter.jsonl was listed here, and the entry was load-bearing:
# the audit ledger's unit-test factory passed a RELATIVE dead-letter path, which
# resolves against the process CWD — the repository root — so `mvn test` dropped
# a JSONL file into the source tree that `mvn clean` did not remove and git had
# to be taught to hide. That factory now writes under java.io.tmpdir, so nothing
# produces THAT name any more. See AuditLedgerService#defaultTestDeadLetterPath,
# pinned by AuditLedgerServiceTest#testDeadLetterPathIsOutsideTheSourceTree.
#
# Not a blanket guarantee about dead-letter files in general:
# AuditLedgerServiceBranchTest still constructs the service directly with a
# relative "deadletter.jsonl" — a different name, never covered by this entry.
# Those cases exercise the NATS and serialization branches and never reach the
# file write, so nothing lands. If you add a case that DOES drop a batch to
# disk, give it an absolute path instead of re-adding an ignore rule here.
#
# And NOT a claim that nothing else writes into the checkout. `/tmp/` further up
# is still load-bearing and is kept deliberately: RestExportService and
# RestImportService build their staging roots from System.getProperty("user.dir")
# — `tmp/export` and `tmp/import`, i.e. the repository root under Maven and in
# dev mode — which is the same CWD-relative mechanism described above, one class
# of file further out. Fixing that half means giving export/import a configurable
# staging directory (the image already has /deployments/tmp; the Dockerfile
# creates it), which changes runtime behaviour of the backup API and does not
# belong in a build-gate change. Deferred on purpose — `/tmp/` is not an
# oversight, and removing it will need that work first.)

# Auto-generated license files (rebuilt during Maven build)
licenses/third-party/
licenses/licenses.xml
licenses/THIRD-PARTY.txt

# Jazzer working corpus, written next to the repo root while a @FuzzTest runs in
# fuzzing mode (JAZZER_FUZZ=1). Thousands of small files, regenerated every run.
# The inputs worth keeping are checked in under src/test/resources/**/*Inputs/.
.cifuzz-corpus/

# Python bytecode from scripts/ (e.g. rotate-changelog.py)
__pycache__/
*.py[cod]
