- Name: Felipe Carvajal Brown
- Company: Felipe Carvajal Brown Software (formerly Instituto Igualdad — never use the old name)
- Academic: Magíster en Simulaciones Numéricas, Universidad Politécnica de Madrid (UPM)
- ORCID: 0000-0002-8300-7587
- Email: fcarvajalbrown@gmail.com
- Location: Santiago, Chile
| Context | Affiliation to use |
|---|---|
| Project footers, Cargo.toml authors, branding | Felipe Carvajal Brown Software |
| Security reports (PDF), responsible disclosure | Magíster en Simulaciones Numéricas, UPM |
| Academic papers | UPM + ORCID 0000-0002-8300-7587 |
| Never use | Instituto Igualdad, UC Chile, or any other institution |
- Present files one at a time — wait for feedback before the next file.
- Fixes and improvements: diffs/snippets only — never full files unless explicitly asked.
- Never volunteer a full file when a targeted change is sufficient.
- No comments of any kind — no
//,//!,///,/* */in Rust; no#or docstrings in Python. Zero. - Bug fixes: always at the root cause — never patch test parameters or create workarounds to produce passing results.
- Never write code just to make it compile — code must reflect real behavior.
- Tools that ship to real institutions: correctness is non-negotiable.
- IDE: VS Code
- Terminal: PowerShell (Windows) — never use
&&separator, always separate commands. - Shell for Linux tools: WSL (Kali)
- Primary languages: Rust, Python, TypeScript
- Always create and activate a venv before installing any dependencies — multiple conflicting Python installs on Windows via PyManager (system + user). Never skip this step.
- Use
pip install <pkg> --break-system-packagesin the Claude container only. - PowerShell:
Remove-Item,Invoke-WebRequest(not rm/curl).
- Single
cdylibcrate — a Polars expression plugin. No workspace, no binary crates. src/lib.rsregisters the expressions (mask_pii,contains_pii,mask_pii_fpe); one file per PII family undersrc/patterns/<region>/<family>.rs, wired up in themod.rsaggregators.- Re-run
maturin develop --releaseafter any Rust change before running tests. - Actual stack: detection via
regex+once_cell; FPE crypto viaaes+cipher(FF3-1/FF1) withsha2+hmac; Python bridge viapyo3+pyo3-polars+polars-core. Nothiserror/serde/rayonin use today.
- "Add to AGENTS.md" means write to the file locally and STOP. Do NOT commit or push unless explicitly asked.
- This is a scratchpad for deferred work, not an action item to execute immediately.
- Brief and factually correct — no over-explaining simple things.
- No bullet points for conversational answers — prose only.
- No emojis unless Felipe uses them first.
- When asked for a recommendation, give one — don't hedge with 5 options.
- If something needs research before answering, search the web first — don't guess.
- Ubuntu + Python 3.12 is excluded from CI because the compiled Rust extension fails to load (
dlopenerror) onubuntu-latestwith Python 3.12. The same tests pass on Windows and on Ubuntu 3.10/3.11. - Coverage is uploaded from the Ubuntu 3.11 job. See
.github/workflows/ci.yml.
- Fix Rust extension
dlopenfailure onubuntu-latest+ Python 3.12. Suspected causes:maturin developeditable-install path mismatch, or missing.soin the source tree when Polars tries to load the plugin. - Add Rust coverage (e.g.
cargo tarpaulin) and merge with Python report on Codecov for an accurate combined number. - Bump
actions/checkout(v5) andactions/setup-python(v6) to their Node.js 24 majors inci.yml,pages.yml,benchmark_presidio.yml(done 2026-06-11).publish.ymlstays on checkout@v4 / setup-python@v5 per its do-not-modify rule, but is covered byFORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'(also set inci.yml). Node.js 20 is removed from runners on September 16th 2026; before then, drop the FORCE env once every action runs on a Node 24 major. See: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/