feat: harden generic preset, add LLM retry, and finish tooling/docs

- PatternDef.validate + Luhn-gated credit-card detection; de-overlap the
  generic phone/date/IP patterns; presets.swiss unchanged (production behavior)
- strip g/y flags from nameHint so .test() is stateless (latent footgun)
- openAICompatibleProvider: bounded retry on transient failures (network /
  timeout / 429 / 5xx), configurable via retries + retryDelayMs
- eslint + prettier + vitest coverage (97%); CI runs lint/format/coverage
- docs: README badges + new-option docs, SECURITY.md, issue/PR templates

26 tests passing; build emits ESM+CJS+types.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mobiletic
2026-06-24 17:03:20 +01:00
parent f09b917f1a
commit 81b6b03239
21 changed files with 2039 additions and 27 deletions

35
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,35 @@
---
name: Bug report
about: Report incorrect behavior (false positive/negative, crash, leak)
title: ''
labels: bug
assignees: ''
---
**⚠️ Security/PII-leak issues:** please do NOT file them here — email security@mobiletic.com (see SECURITY.md).
## Describe the bug
A clear description of what's wrong.
## To reproduce
A minimal code sample or failing test:
```ts
// import { Anonymizer, presets } from '@mobiletic/anonymizer';
```
## Expected behavior
What you expected to happen.
## Environment
- `@mobiletic/anonymizer` version:
- Node.js version:
- Using an LLM provider? (which endpoint/model, or regex-only):
## Additional context
Anything else (input text shape, custom patterns, …). Redact any real PII before posting.

View File

@@ -0,0 +1,23 @@
---
name: Feature request
about: Suggest a pattern preset, provider, or capability
title: ''
labels: enhancement
assignees: ''
---
## What problem does this solve?
The use case or gap you're hitting (e.g. "no preset for German tax IDs", "want an Anthropic provider").
## Proposed solution
What you'd like to see. For a new preset, list the identifier(s) and an example value (synthetic, no real PII).
## Alternatives considered
Anything you've tried or other approaches.
## Additional context
Links, references, or examples.