| Age | Commit message (Expand) | Author | Files | Lines |
| 10 days | feat(library): multi-locale phone validator + postal/semver/slug/hostname/por... | natsuoto | 11 | -9/+244 |
| 11 days | chore: enforce fully strict static typing across library, tests, and tooling ... | natsuoto | 46 | -548/+481 |
| 11 days | feat(release): changes/ fragment system + generator, .public-surface snapshot... | natsuoto | 8 | -0/+351 |
| 11 days | test(serialize): cover the composite-value branch of _require_schema_version ... | natsuoto | 1 | -0/+6 |
| 12 days | chore: codebase-wide rule audit — eliminate Any/object where non-protocol, ... | natsuoto | 21 | -219/+219 |
| 12 days | feat(integrations): edify[pydantic], edify[fastapi], edify[django] with defer... | natsuoto | 3 | -0/+202 |
| 12 days | feat(library): ipv4/ipv6/email_rfc_5322/iso_date/zip_code validators + real-w... | natsuoto | 85 | -2/+370 |
| 12 days | chore(bench): tests/bench scaffolding + case suite + cold/warm ratio gate + a... | natsuoto | 5 | -0/+187 |
| 12 days | test(property): Hypothesis harness + property tests for builder emission, rou... | natsuoto | 5 | -0/+291 |
| 12 days | chore(coverage): exclude_also + global --cov=edify addopts + anti-vacuous and... | natsuoto | 2 | -0/+94 |
| 12 days | fix(ci): skip re.DEBUG doc block on PyPy — hits the same upstream disassemb... | natsuoto | 1 | -0/+11 |
| 12 days | feat(compile): AST-walker ReDoS detection for the (x+)+ shape emits ReDoSWarn... | natsuoto | 2 | -0/+85 |
| 12 days | feat(errors): structured open-frame stack with per-frame call sites; Dangling... | natsuoto | 2 | -3/+89 |
| 12 days | test(discipline): orphan detection for library/fixture/doc snapshot roots | natsuoto | 1 | -0/+131 |
| 12 days | test: snapshot deeply-nested alternation, combined lookaround, named-backref,... | natsuoto | 10 | -3/+135 |
| 12 days | test: snapshot every executable doc code-block; pin the docs against silent r... | natsuoto | 65 | -0/+131 |
| 12 days | test: snapshot suite for every public library validator (223 patterns) | natsuoto | 224 | -0/+253 |
| 12 days | feat!(compile): normalize char-class escaping to minimal correct form; add eq... | natsuoto | 2 | -4/+119 |
| 12 days | test: pin char-class insertion-order and to_regex_string() == to_regex().patt... | natsuoto | 2 | -0/+55 |
| 12 days | feat(testing): difflib-based snapshot helper with EDIFY_UPDATE_SNAPSHOTS=1 re... | natsuoto | 1 | -0/+90 |
| 12 days | feat(builder): RegexBuilder.from_regex reverse parser for the common construc... | natsuoto | 1 | -0/+113 |
| 12 days | feat(result): Match wrapper exposes named captures as attributes (m.username,... | natsuoto | 1 | -0/+117 |
| 12 days | feat(builder): first-class .assert_matches and .assert_rejects helpers for pa... | natsuoto | 1 | -0/+71 |
| 12 days | feat(pattern): Pattern.__call__ delegates to .test so validators double as ca... | natsuoto | 3 | -2/+32 |
| 12 days | perf(builder): lazy source_line and cached co_positions/abspath cut chain-ste... | natsuoto | 2 | -6/+29 |
| 12 days | feat!(builder): close the match-verb surface at test/match/search/findall/sub... | natsuoto | 3 | -33/+51 |
| 12 days | feat(builder): per-instance lazy compile cache shared across to_regex and the... | natsuoto | 1 | -0/+63 |
| 12 days | feat(engine): pass-through timeout= kwarg on every match method under engine=... | natsuoto | 1 | -0/+109 |
| 12 days | feat(engine): unlock variable-width lookbehind under engine=regex; annotate t... | natsuoto | 1 | -0/+59 |
| 12 days | feat(engine): route to_regex(engine=re|regex) through a backend layer; regex ... | natsuoto | 2 | -4/+83 |
| 12 days | refactor(typing): make edify pass mypy --strict and pyright --strict end to end | natsuoto | 1 | -9/+0 |
| 12 days | test(discipline): every type-checker suppression carries a code and inline re... | natsuoto | 1 | -0/+35 |
| 12 days | feat(builder): typed engine=Literal kwarg on to_regex with EngineNotWiredError | natsuoto | 1 | -0/+19 |
| 12 days | refactor(serialize): precise JSONValue types replace Any; hoist imports; drop... | natsuoto | 1 | -0/+11 |
| 12 days | feat(pattern): canonical dict/JSON serialization on Pattern (to_dict, from_di... | natsuoto | 2 | -0/+294 |
| 12 days | feat(atoms): expand from 13 to 83 general-purpose composable fragments | natsuoto | 70 | -0/+1820 |
| 12 days | rename(atoms): single-word filenames (octet/port/label/uuid/hexcolor/nibble/i... | natsuoto | 9 | -36/+36 |
| 13 days | feat(atoms): public edify.atoms with 13 composable Pattern fragments | natsuoto | 13 | -0/+338 |
| 2026-07-11 | refactor: eliminate suppression comments and internal-import tests, delete no... | natsuoto | 14 | -305/+27 |
| 2026-07-11 | refactor(library): rewrite geo/postal to inline patterns; delete RegexBackedP... | natsuoto | 2 | -0/+17 |
| 2026-07-11 | chore: ruff format + lint fixes (en-dash → hyphen, line-length, script.py n... | natsuoto | 4 | -0/+11 |
| 2026-07-11 | feat(library): reorganize into 22 category folders + flat 200-name re-export ... | natsuoto | 11 | -271/+31 |
| 2026-07-10 | test: license.test.py asserts installed edify carries MIT license expression ... | natsuoto | 1 | -0/+16 |
| 2026-07-10 | chore: apply ruff format and drop unused import in new context tests | natsuoto | 1 | -7/+2 |
| 2026-07-10 | test: cover diagnose fallback branches and caller-context position fallbacks | natsuoto | 2 | -0/+217 |
| 2026-07-10 | chore: apply ruff lint and format fixes | natsuoto | 7 | -103/+45 |
| 2026-07-10 | test(builder): extend Hypothesis property test to cover groups, captures, sub... | natsuoto | 1 | -29/+182 |
| 2026-07-10 | feat(result): Regex wrapper with AST, delegation, and introspection API (#133... | natsuoto | 6 | -0/+2323 |
| 2026-07-10 | feat(builder): lazy Regex compile cache and __eq__/__hash__ diagnose unfinish... | natsuoto | 2 | -0/+156 |
| 2026-07-10 | feat(errors): annotated error messages with caller-context pointers | natsuoto | 3 | -39/+249 |