-
Notifications
You must be signed in to change notification settings - Fork 0
decisions
Every accepted or superseded decision behind this codebase, one row per file. The status and
date columns are copied from each file's own **Status:** … · **Date:** … line — correct the
ADR to correct this table, not the other way around. The relationships column is a reading: what
a **Status:** line does not say but an ADR's body does, either in its own words or in an
> **update:** block naming what a later change made stale. An ADR's body is never rewritten to
agree with a later one — see 0022 §10 for the convention
a later decision uses instead.
| # | Title | Status | Date | Relationships |
|---|---|---|---|---|
0001 |
Target frameworks: net10.0 and netstandard2.0
|
accepted | 2026-08-01 (revised 2026-08-04) | — |
0002 |
Unicode comparison unit | accepted | 2026-08-01 | — |
0003 |
Code provenance and license | accepted | 2026-08-01 | — |
0004 |
Levenshtein: bit-parallel (Myers) optimization | accepted | 2026-08-01 (revised 2026-08-05) | backlog partially cleared by issue #208 (not an ADR — see the two > **#208 update:** blocks) |
0005 |
Accepted divergence from jellyfish on combining marks (Hamming, Jaro) | accepted | 2026-08-01 | — |
0006 |
Ratcliff-Obershelp: difflib's autojunk heuristic | accepted | 2026-08-01 | — |
0007 |
Metaphone: validation scope (real words) | accepted | 2026-08-01 | — |
0008 |
Italian enza/enze: follow nltk, not the published description |
accepted | 2026-08-05 | — |
0009 |
The sample restores from a local feed, not nuget.org | accepted | 2026-08-05 | amended by 0012
|
0010 |
Stop-word lists come from Snowball, not from the nltk corpus |
accepted | 2026-08-05 | — |
0011 |
Persisted artifacts are versioned JSON, written with System.Text.Json
|
accepted | 2026-08-05 | — |
0012 |
Each package versions and releases on its own | accepted | 2026-08-05 | amends 0009
|
0013 |
What SentencePieceTokenizer promises, and where it knowingly differs |
accepted, superseded in part by 0014
|
2026-08-06 | §1 (the oracle covers the vocabulary, not the stock pipeline) superseded by 0014; §2 (the unknown-piece penalty floor) stands |
0014 |
Interpret the precompiled_charsmap, do not reimplement the rules |
accepted | 2026-08-06 | supersedes 0013 §1 |
0015 |
The Sonar rules run in the build, not only after the push | accepted | 2026-08-06 | amended by 0019
|
0016 |
Classification metrics ship as DataNet.Metrics, not inside DataNet.Text
|
accepted | 2026-08-06 | — |
0017 |
What BpeTokenizer promises, and where it knowingly differs |
accepted | 2026-08-09 | — |
0018 |
Multiclass ROC-AUC parallelism is opt-in, and the caller names the worker count | accepted | 2026-08-10 | — |
0019 |
The .NET code-quality analysers run in the build too, and samples/ is analysed at all |
accepted | 2026-08-10 | amends 0015
|
0020 |
normalize= is a projection, and ZeroDivision keeps a default per metric |
accepted | 2026-08-10 | — |
0021 |
Eleven regression metrics first, and multioutput as a method rather than an enum |
accepted | 2026-08-10 | — |
0022 |
How an added token matches, and what it costs the round trip | accepted | 2026-08-10 | §10 partially revised by issues #119 and #120 (not ADRs — see the > **#119 and #120 update:** block) |
0023 |
Byte-level Decode substitutes U+FFFD instead of throwing |
accepted | 2026-08-14 | — |
0024 |
The weighted median averages two order statistics within scikit-learn's epsilon, not exactly at half | accepted | 2026-08-14 | — |
0025 |
Quickselect, with an introselect fallback and a branchless partition, replaces a full sort for the unweighted median | accepted | 2026-08-14 | — |
0026 |
R² and ExplainedVariance split their undefined cases differently | accepted | 2026-08-14 | — |
0027 |
R²'s and ExplainedVariance's unweighted accumulation vectorizes only for a single output | accepted | 2026-08-14 | — |
0028 |
Log1P is Kahan's identity, not Math.Log(1 + x)
|
accepted | 2026-08-14 | — |
0029 |
BalancedAccuracy's adjusted is left to IEEE 754 at the one-class edge |
accepted | 2026-08-14 | — |
0030 |
CohenKappa keeps scikit-learn's expected-matrix orientation, and weighting only orders |
accepted | 2026-08-14 | — |
0031 |
NoSampleCorrect mirrors NumPy's float64 upcast, not requested-label accuracy |
accepted | 2026-08-14 | — |
0032 |
FScore substitutes tp/predicted/support algebraically, not via precision and recall |
accepted | 2026-08-14 | — |
0033 |
CompensatedSum is Neumaier's variant, and its SIMD lanes are not bit-identical to it |
accepted | 2026-08-14 | — |
0034 |
Distributional proof is admissible, and dropout is still refused |
accepted | 2026-08-14 | — |
0035 |
A null pre-split drives Apply as Removed with invert, not Isolated |
accepted | 2026-08-15 | — |
0036 |
A member may ship without an oracle, if the documentation says so | accepted | 2026-08-16 | — |
0037 |
The guards run before the commit, through core.hooksPath and no framework |
accepted | 2026-08-18 | extends 0015's reasoning to the Python guards |
0038 |
The gate confronts an exception tag with the page that documents it | accepted | 2026-08-18 | — |
0039 |
MutualInformation returns 0.0 on an empty input; scikit-learn raises |
accepted | 2026-08-18 | — |
0040 |
A curve is a sealed class per curve, not a record and not out-parameters; drop_intermediate's asymmetric defaults are reproduced |
accepted | 2026-08-18 | — |
0041 |
One sample file per public class, named after it | accepted | 2026-08-19 | — |
0042 |
Phonetic encoders refuse a null word |
accepted | 2026-08-20 | — |
0043 |
The equality table is sized to the pattern, not to Latin-1 | accepted | 2026-08-20 | amends 0004
|
0044 |
Compression belongs to the caller, not to the artifact format | accepted | 2026-08-20 | leaves 0011 untouched: the artifact on disk does not change |
0045 |
A Console call carries its reason on the line, not in an exemption list |
accepted | 2026-08-21 | adds a seventh guard to 0037's hook, under the rule it set |
0046 |
check_adr_immutable.py runs in CI only, not the pre-commit hook |
accepted | 2026-08-20 | — |
0047 |
One bit-parallel gate per kernel, not one per alphabet | accepted | 2026-08-21 | amends 0043
|
0048 |
The bit-parallel gate depends on the kernel and the alphabet | accepted | 2026-08-21 | amends 0047
|
0049 |
Two gates per kernel, the second tested where the width is already known | accepted | 2026-08-21 | amends 0048
|
0050 |
The SentencePiece-BPE lineage stays a BPE model, and metaspace becomes one transform | accepted | 2026-08-21 | amends 0017 §3, whose byte_fallback refusal and "no path here" for Llama-2 and Mistral v0.1 both fall |
All fifty carry accepted. None has been rejected or withdrawn — a status this table
would otherwise need a second word for. 0004 read a progress sentence
(single-word and blocked shipped) where a status belongs; that sentence is now the opening line
of its own ## Done section, and its status reads accepted like the other thirty-two.
Two pairs supersede or amend each other in the body only, not in the status line:
-
0009is amended by0012: 0012 replaced the repository-wide$(Version)0009 bound the sample to with one property per package, in a> **Amended by 0012.**block inside 0009's own## Decisionsection. -
0015is amended by0019: 0019 measured false the reason 0015 gave for keepingsamples/off the analyser, in two> **Amended by 0019 (2026-08-10).**blocks inside 0015 itself, and 0019's own text says so directly — "this ADR amends 0015 accordingly."
0013's partial supersession by 0014 is the one relationship already on a status line; its
body adds the detail that only §1 (the oracle's normalizer scope) is superseded — §2 (the
unknown-piece penalty floor) stands, unaffected by 0014.
- 0001-target-framework
- 0002-unicode-comparison-unit
- 0003-provenance-and-licensing
- 0004-levenshtein-myers-backlog
- 0005-hamming-jellyfish-divergence
- 0006-ratcliff-autojunk
- 0007-metaphone-scope
- 0008-italian-enza-nltk-divergence
- 0009-sample-consumes-a-local-feed
- 0010-stop-word-list-provenance
- 0011-persistence-format
- 0012-per-package-versioning
- 0013-sentencepiece-parity-scope
- 0014-precompiled-normalizer
- 0015-sonar-rules-in-the-build
- 0016-metrics-package-placement
- 0017-bpe-parity-scope
- 0018-multiclass-roc-auc-parallelism-is-opt-in
- 0019-the-net-analysers-run-in-the-build-too
- 0020-normalize-is-a-projection-not-a-parameter
- 0021-multioutput-is-a-method-not-an-enum
- 0022-added-token-matching-flags
- 0023-byte-level-decode-substitutes
- 0024-weighted-median-averages-within-scikit-learns-epsilon
- 0025-quickselect-replaces-a-full-sort-for-the-median
- 0026-r2-and-explainedvariance-split-their-undefined-cases-differently
- 0027-r2-and-explainedvariance-vectorize-only-a-single-output
- 0028-log1p-is-kahans-identity-not-math-log-1-plus-x
- 0029-balanced-accuracy-adjusted-is-left-to-ieee-754-at-the-edge
- 0030-cohen-kappa-keeps-scikit-learns-expected-matrix-orientation
- 0031-nosamplecorrect-mirrors-numpys-float64-upcast
- 0032-fbeta-substitutes-tp-predicted-and-support-algebraically
- 0033-compensated-sum-is-neumaiers-variant
- 0034-dropout-is-refused-for-want-of-a-user
- 0035-a-null-pre-split-is-removed-with-invert-not-isolated
- 0036-a-member-may-ship-without-an-oracle-if-it-says-so
- 0037-the-guards-run-before-the-commit
- 0038-the-gate-confronts-an-exception-tag-with-the-page-that-documents-it
- 0039-mutual-information-returns-zero-on-an-empty-input
- 0040-a-curve-is-a-sealed-class-per-curve
- 0041-one-sample-file-per-public-class
- 0042-phonetic-encoders-refuse-a-null-word
- 0043-the-equality-table-is-sized-to-the-pattern
- 0044-compression-belongs-to-the-caller
- 0045-a-console-call-carries-its-reason-on-the-line
- 0046-check-adr-immutable-runs-in-ci-only
- 0047-one-gate-per-kernel-not-one-per-alphabet
- 0048-the-gate-depends-on-the-kernel-and-the-alphabet
- 0049-two-gates-per-kernel-tested-where-the-width-is-known
- 0050-the-sentencepiece-bpe-lineage-stays-a-bpe-model
- benchmark_latest
- decisions
- equivalence
- matplotlib
- migration
- nightly_run
- numpy
- pandas
- performance
- pytorch
- seaborn
- sklearn
- statsmodels