$ reference
TOML-Filter
~/.boost/filters/ oder .boost/filters/ ab — ohne Neukompilierung. Wo Filter geladen werden
Boost merged Filter aus mehreren Orten und wendet jeden Filter an, der durch Befehl oder Ausgabe ausgewählt wird. Dateien in einem Ordner laden in deterministischer Reihenfolge.
- Eingebaute Filter mit Boost (
make,terraform,shellcheck, …) ~/.boost/filters/*.toml(globaler Ordner, ein Filter pro Datei).boost/filters/*.tomlim Projekt (Ordner, ein Filter pro Datei)
Quellen werden zusammengeführt, nicht überschrieben. Ein Projektfilter ersetzt keinen Builtin gleichen Namens — beide laden (Name + Quelle), und jeder Treffer von match_command oder match_output_select wird in Ladereihenfolge angewendet (builtin → global → project). Zum Ersetzen: boost filters disable und eigenen Filter liefern.
Ordnerlayout (ein Filter pro Datei)
Eigene Filter leben in Ein-Filter-Dateien: jede enthält einen [filters.<name>]-Block und [[tests.<name>]]-Beispiele.
~/.boost/filters/
git-status.toml # [filters.git-status] + [[tests.git-status]]
my-deploy.toml # [filters.my-deploy] + [[tests.my-deploy]]
Filter in ~/.boost/filters/ werden vom nächsten boost-Prozess ohne Rebuild geladen.
Selektoren & häufige Felder
Jeder Filter braucht mindestens einen Selektor. Diese Felder erscheinen in fast jedem Beispiel; das vollständige Glossar steht unten.
| Feld | Zweck |
|---|---|
| match_command | Select by command line (capture path) |
| match_output_select | Select by piped output signature (hook path); use (?m) for line anchors |
| strip_ansi | Remove terminal color codes first |
| strip_lines_matching | Drop lines matching any pattern |
| keep_lines_matching | Keep only matching lines |
| on_empty | Message when filtering removes everything |
Regex-Variante
Alle Muster nutzen Go's regexp-Paket (RE2-Syntax), nicht PCRE. Keine Backreferences oder Lookbehind. Mehrzeilige ^/$ brauchen (?m). Siehe regexp/syntax.
Beispiel: eigenes Deploy-Skript
Ihr Team führt ./scripts/deploy.sh über Boost aus. Der Hook sendet nur Ausgabe, daher ist match_output_select zusätzlich zu match_command nötig.
.boost/filters/deploy.toml
schema_version = 1
[filters.deploy]
description = "Keep failures from deploy.sh"
version = "1"
match_command = '(?:^|[;&|]\s*)(?:bash\s+)?(?:\S*/)?deploy\.sh\b'
# The hook pipes output to boost, so select by a distinctive output signature.
# (?m) makes ^ and $ match each line, not only the full output boundaries.
match_output_select = [
'(?m)^Starting deployment$\n^Environment: ',
]
strip_ansi = true
keep_lines_matching = [
'^Starting deployment$',
'^Environment: ',
'^\[(WARN|ERROR)\]',
'^ERROR DETAILS:$',
'failed readiness probe',
'^File:$',
'^deploy/check_health\.go:\d+$',
'^Reason:$',
'^connection refused',
'^Rollback started\.\.\.$',
'^Deployment FAILED$',
]
[[tests.deploy]]
name = "keeps failures, drops info chatter"
input = """
Starting deployment
Environment: staging
[INFO] Waiting for rollout
[WARN] High memory usage detected
[ERROR] Deployment validation failed
ERROR DETAILS:
service payment-service failed readiness probe
File:
deploy/check_health.go:142
Reason:
connection refused to database
Rollback started...
Deployment FAILED
Environment: staging
"""
expected = """
Starting deployment
Environment: staging
[WARN] High memory usage detected
[ERROR] Deployment validation failed
ERROR DETAILS:
service payment-service failed readiness probe
File:
deploy/check_health.go:142
Reason:
connection refused to database
Rollback started...
Deployment FAILED
Environment: staging
"""
Starting deployment Environment: staging [INFO] Waiting for rollout [WARN] High memory usage detected [ERROR] Deployment validation failed ERROR DETAILS: service payment-service failed readiness probe File: deploy/check_health.go:142 Reason: connection refused to database Rollback started... Deployment FAILED Environment: staging
Starting deployment Environment: staging [WARN] High memory usage detected [ERROR] Deployment validation failed ERROR DETAILS: service payment-service failed readiness probe File: deploy/check_health.go:142 Reason: connection refused to database Rollback started... Deployment FAILED Environment: staging
$ ./scripts/deploy.sh staging # the installed Boost hook pipes output automatically
Inline-Tests
Jeder [[tests.<name>]]-Block ist ein Regression-Fixture: name, input und expected. Optionales expect_match_output prüft die Selektion über match_output_select.
So führen Sie sie aus
Es gibt noch kein boost filters test. Prüfen Sie eigene Filter, indem Sie Beispielausgabe durch boost pipen. Eingebaute Fixtures laufen mit go test:
# Spot-check a custom filter: pipe sample output through boost
printf '%s\n' 'Starting deployment' 'Environment: staging' '[INFO] noise' | boost
# Built-in [[tests.*]] fixtures run in the Boost repo / CI:
go test ./internal/tomlfilter/ -run TestInlineTestDefs
Beispiel: make-Lärm entfernen
Builtin-Filter nutzen dasselbe Schema. Dies spiegelt den mitgelieferten make-Filter: Verzeichnis-Ein-/Ausgangszeilen und Leerzeilen entfernen.
schema_version = 1
[filters.make]
match_command = "^make\\b"
match_output_select = [
"^make\\[\\d+\\]:",
"^gcc ",
]
strip_lines_matching = [
"^make\\[\\d+\\]:",
"^\\s*$",
"^Nothing to be done",
]
on_empty = "make: ok"
make[1]: Entering directory '/home/user/app' gcc -O2 -c src/main.c gcc -O2 -o app src/main.o make[1]: Leaving directory '/home/user/app'
gcc -O2 -c src/main.c gcc -O2 -o app src/main.o
Beispiel: Kurzschluss bei sauberem Lint
Nutzen Sie match_output für eine Einzeilen-Zusammenfassung, wenn das Tool still erfolgreich war.
schema_version = 1
[filters.eslint-quiet]
match_command = "^eslint\\b"
match_output_select = [
"problems",
]
match_output = [
{ pattern = "0 problems", message = "eslint: ok" },
]
Filter deaktivieren
Bevorzugen Sie die CLI:
boost filters show # inventory with enabled/disabled status
boost filters show --enabled # enabled filters only
boost filters disable git-status # bare name or toml:builtin:git-status
boost filters enable git-status
Oder bearbeiten Sie ~/.boost/config.toml direkt — Namen unter [filters] disabled listen. Nach retrieve_disable_threshold Retrieve-Ereignissen (Standard 3) hängt boost retrieve Rollback-Namen an. 0 schaltet Auto-Disable aus.
[filters]
disabled = ["git-status", "make"]
retrieve_disable_threshold = 3
Filterfelder
| Feld | Typ | Zweck |
|---|---|---|
| schema_version | int | File-level schema marker (recommended 1; reserved for future validation) |
| description | string | Human-readable note (not used at filter runtime) |
| version | string | Capability version for retrieve / telemetry (e.g. "1") |
| match_command | string | Command-path selector: regex against the full command line |
| match_output_select | string[] | Pipe-path selector: regexes against the complete piped output; use (?m) for line anchors |
| strip_ansi | bool | Remove terminal color codes first (before other stages) |
| replace | array | Line-level regex replacements: { pattern, replacement } |
| match_output | array | If output matches pattern, return message instead (optional unless) |
| strip_lines_matching | string[] | Drop lines matching any pattern |
| keep_lines_matching | string[] | Keep only matching lines |
| dedupe_lines_matching | string[] | Keep the first exact copy of each matching line; drop later identical copies |
| collapse_lines_matching | array | Replace matching lines with one summary: { pattern, template } — {count} = number of matches |
| head_lines / tail_lines | int | Keep first or last N lines |
| on_empty | string | Message when filtering removes everything |
Setzen Sie schema_version = 1 an den Dateianfang. Stufen: strip ANSI → replace → match_output → strip/keep → dedupe → collapse → head/tail → on_empty. Vollständige Referenz in docs/TOML_FILTERS.md.