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

kobotoolbox / kpi / 29816039201
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: dev-2427-persist-last-id-in-root-uuid-lrm
DEFAULT BRANCH: master
Ran 21 Jul 2026 08:57AM UTC
Jobs 10
Files 895
Run time 2min
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

21 Jul 2026 08:53AM UTC coverage: 81.826%. Remained the same
29816039201

push

github

web-flow
fix(xlsForm): keep leading "=" in labels as text instead of a formula DEV-1235 (#7282)

### đŸ“Ŗ Summary

Question and choice labels that start with an equals sign (e.g. `=foo`)
now display and export correctly instead of turning into `0` or a
spreadsheet error.

### 📖 Description

If a label began with `=`, it was mistaken for a spreadsheet formula.
The deployed form showed `0` in place of the label in Enketo, and
exporting the form to XLSForm produced an error (`Err:520`) where the
label should be. Labels (and other cells) starting with `=` are now kept
as plain text everywhere.

### 💭 Notes

- Root cause: `Asset.to_xlsx_io()` builds the workbook with
`xlsxwriter`, whose generic `write()` routes any `=`-prefixed string to
`write_formula()`. The deploy path feeds the same in-memory xlsx to
pyxform, so one bug corrupted **both** the XLSForm export and the
deployed XForm (pyxform reads the formula's cached `0`).
- Fix: pass `{'strings_to_formulas': False}` to the
`xlsxwriter.Workbook`. XLSForm cells are never Excel formulas, so this
is safe; it's workbook-scoped, so it also covers `+`/`-`/`@` prefixes
and the survey, choices and settings sheets.
- Added regression test
`test_to_xlsx_io_preserves_leading_equals_in_label`.

### 👀 Preview steps

1. â„šī¸ have an account and a project
2. add a text question with the label `=foo`, then deploy the form
3. 🔴 [on main] open the form in Enketo → the label shows `0`; export the
form to XLSForm → the cell shows `Err:520`
4. đŸŸĸ [on PR] open the form in Enketo → the label shows `=foo`; export
the form to XLSForm → the cell shows `=foo`

9466 of 12772 branches covered (74.12%)

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

30665 of 37476 relevant lines covered (81.83%)

5.52 hits per line

Jobs
ID Job ID Ran Files Coverage
1 29816039201.1 21 Jul 2026 08:57AM UTC 891
49.42
2 29816039201.2 21 Jul 2026 08:58AM UTC 891
44.29
3 29816039201.3 21 Jul 2026 08:58AM UTC 891
52.84
4 29816039201.4 21 Jul 2026 08:59AM UTC 893
45.65
5 29816039201.5 21 Jul 2026 08:59AM UTC 893
50.74
6 29816039201.6 21 Jul 2026 09:01AM UTC 891
59.06
7 29816039201.7 21 Jul 2026 09:01AM UTC 893
67.09
8 29816039201.8 21 Jul 2026 09:02AM UTC 895
69.38
9 29816039201.9 21 Jul 2026 09:02AM UTC 893
60.21
10 29816039201.10 21 Jul 2026 09:03AM UTC 893
54.09
Source Files on build 29816039201
  • Tree
  • List 895
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • e966f278 on github
  • Prev Build on main (#29759056455)
  • Next Build on main (#29819093005)
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