• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

datatug / datatug-core / 34659082656
91%

Build:
DEFAULT BRANCH: main
Ran 11 Sep 2026 11:43PM UTC
Jobs 1
Files 128
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

11 Sep 2026 11:13PM UTC coverage: 91.389% (-0.8%) from 92.178%
34659082656

push

github

trakhimenok
fix(filestore): refuse invisible characters in query ids and folder names (review S3)

validateQuerySegmentReason refused control and bidirectional-text
characters but accepted the rest of the default-ignorable code points:
U+200B-U+200D, U+2060-U+206F, U+FEFF, U+00AD, U+034F, the variation
selectors and the language tags all passed. Two ids differing only by one
look identical in a listing, a diff or a review, so a shared library can
hold visually indistinguishable queries; and on HFS+ they are not two ids
at all but one file, so a write addressed through the invisible spelling
silently resolves to the pair already there.

unsafeNameRuneReason now refuses them (isIgnorableRune, the predicate the
name key already shares), after the control and bidi cases so those keep
their more specific messages. Refusing beats stripping: either spelling is
a name someone can read back, and neither is the one they typed.

Reads keep the lenient containment rules (validateQueryReadSegmentReason),
so a record that already carries one - written before this rule, or by
another tool - stays readable through LoadQuery and LoadQueries. No file in
this repository carries such a character, so nothing existing is affected.

The rule, its predicate and its message match datatug-cli's
querywrite.SegmentReason on datatug-phase2-capture-endpoint, so the two
validators accept the same names. That lane is stricter in two further ways
this commit does not adopt, since they are outside this review's scope and
would change which existing records are writable: it also refuses
unassigned, private-use and line-separator code points, and names shaped
like an NTFS 8.3 short name.

Measured before this change: 13 invisible id and folder spellings were
accepted, and PutQuery wrote one.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

1 of 1 new or added line in 1 file covered. (100.0%)

66 existing lines in 7 files now uncovered.

6071 of 6643 relevant lines covered (91.39%)

0.92 hits per line

Coverage Regressions

Lines Coverage ∆ File
19
72.84
0.0% pkg/storage/filestore/store_project_saver.go
17
85.34
0.39% pkg/storage/filestore/project_items_store.go
10
79.59
11.3% pkg/storage/filestore/store_queries_saver.go
9
88.31
-9.56% pkg/storage/filestore/queries_tree.go
6
95.74
10.5% pkg/storage/filestore/store_queries.go
4
87.88
3.26% pkg/storage/errors.go
1
99.06
0.14% pkg/datatug/query.go
Jobs
ID Job ID Ran Files Coverage
1 34659082656.1 11 Sep 2026 11:43PM UTC 128
91.39
GitHub Action Run
Source Files on build 34659082656
  • Tree
  • List 128
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • c6b538b0 on github
  • Prev Build on main (#34454481015)
  • Next Build on main (#34682030935)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc