Ferralk / Architecture
Architecture Decision Records
Decisions from the end-to-end design review of 2026-08-18 (see RFC for the full architecture).
Scroll sideways for more columns.
| ADR | Decision |
|---|---|
| 0001 | Independent port under the ferralk name (MIT, no drop-in claim) |
| 0002 | Hybrid port strategy — mechanical matcher port, fresh walker |
| 0003 | Two published crates (ferralk-glob, ferralk), no C ABI |
| 0004 | MSRV = current stable minus two releases |
| 0005 | Byte-based matching everywhere, WTF-8 on Windows |
| 0006 | Git-normative ignore semantics (git check-ignore oracle) |
| 0007 | JSONL differential corpus, oracle as dev-time tool |
| 0008 | SIMD via memchr primitives (Ferroni playbook) |
| 0009 | Own work-stealing scheduler (no WalkParallel, no rayon) |
| 0010 | Portable-only 1.0; native backends macOS → Linux; Windows tier 2 |
| 0011 | POSIX-conservative walker defaults |
| 0012 | Ferroni repository blueprint for tooling (reference point amended to the family baseline; standards onboarding removed 2026-09-25) |
| 0013 | Dedicated glob matcher — no glob-to-regex translation |
| 0014 | Own gitignore rule matching over ferralk-glob (engine half of 0006) |
| 0015 | POSIX escape processing inside bracket classes |
| 0016 | Shell grammar for star runs before extglobs |
| 0017 | Caller-owned list API conventions |
| 0018 | Dual MIT or Apache-2.0 license (supersedes the license clause of 0001) |
| 0019 | Caret requirements in the published crates, exact pins everywhere else |
| 0020 | ** is recursive only as a whole path component (deliberate divergence from zlob) |
Convention: Nygard-style ADRs, numbered sequentially, never rewritten once accepted — superseding decisions get a new ADR that links back.