# DataBridge 0.4.0 repository review (2026-10-22)

## Public history evidence

The user reported initial rejection for fewer than ten GitHub commits after 2026-09-01. Before this review the public main branch was `49c8ab5758716ceb7896c9bb396ff5086a6d1094`, with13 commits returned by the GitHub API in that date range and successful CI. Therefore the current public history had already reached the reported numeric minimum. This alone does not identify why a later review still failed, establish that a newer competition form record was received, or establish overall eligibility. No later organizer notice was supplied in this review.

Reproduce live public evidence (read only, paginated):

```sh
python -B scripts/submission-evidence.py
```

It records default branch, frozen head, cutoff, all returned commit URLs and author/committer dates. Additional work in this review is committed at real current dates. No empty commits, date rewriting, branch-history replacement or artificial ten-commit sequence is used.

## Actual code corrections

- String sort/range filters now use lexical Unicode scalar order. The previous native String comparator could put shorter values ahead of lexically earlier strings (`b` versus `aa`). Mixed-type comparison retains deterministic canonical-text fallback and is not SQL numeric coercion.
- Validate pipeline options before reading any row: top-level and column/filter/join/group keys, boolean inner flag, nonempty field names and unique dedup/export/group fields. Invalid configuration fails on empty input too, rather than becoming an unexplained success or a per-row rejection.
- Integer scaling cannot emit a fractional result from an integer column. Such a record is rejected and included in row reconciliation and rejection-quality statistics. Min/max/enum checks remain before scaling; this ordering is explicit, not silently redefined.
- Public join_rows validates nonempty key names. Null/missing right keys reject the join; null/missing left keys are unmatched (retained by a left join, discarded by an inner join). Earlier README phrasing that all missing/null join keys were rejected was too broad.

## Validation

34 core tests, including14 new regression declarations;32 JSON fixtures run through the real CLI. Existing independent CSV round trip (80 records),20 randomized stage-accounting pipelines and20 composite-filter truth sets remain. A new Python oracle runs40 pipelines /1000 input rows for lexical sorting and integer scaling, checking Python independently computed results and row conservation. Fixed seed20261022. Public CI runs js, wasm, wasm-gc, native and Linux integration. Test counts are not summed across targets.

## Current scope

In-memory CSV/JSONL/rows processing, mapping/validation, filtering, deduplication, unique-right-key join, grouping, profiling, explicit-column CSV output and reconciliation audits. No streaming engine, database writes or distributed scheduling. Finite Double arithmetic; no exact decimal accounting. CSV structural errors reject the whole batch; JSONL parse and per-row transformation errors can be isolated. The quality gate is a result and does not abort the host automatically. Strict unknown-option rejection is a compatibility change in0.4.0. Existing public-interface deprecation warnings remain; passing tests do not mean a warning-free build.

Shared JSON-value/CLI scaffolding is disclosed in THIRD_PARTY.md and is not counted as independent domain novelty. This review does not assert absence of overlapping table/ETL packages, organizer acceptance, or production deployment. Publication and a competition form update are separate actions; no competition receipt is created by this repository release.
