Releases: kobotoolbox/kpi
2.026.12i
What's changed
Bug Fixes (2)
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12h..2.026.12i
2.026.12h
What's changed
Features (1)
- userreports: allow configurable page size for userreport API (#7049)
Set the max page size for
/api/v2/user-reportsin Constance.
Bug Fixes (1)
- map: blank map for questions in group fix (#7041)
Fixed the Project → Data → Map so geopoint answers inside groups are now
shown correctly instead of incorrectly showing "No geopoint responses
have been received".
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12g..2.026.12h
2.026.12g
What's changed
Bug Fixes (4)
-
SingleProcessingHeader: remove uuid prefix for currentSubmissionUid (#7033)
Fixes an issue with incorrectly formatted uids that broke functionality
in the audio processing view. -
regionSelector: require region selection for transcriptions (#7031)
Region selection is now required when creating an automatic transcript,
so the first available region is now selected automatically. Fields were
restyled for better experience. -
subsequences: migrate qpath to xpath in SubmissionSupplements (#7046)
Ensure old NLP data and QA question responses get exported.
Fixes a bug wherein older transcripts, translations, and qa question
responses were not showing up in exports or the data table. -
transcription: submission data not updating on navigation (#7030)
Fixes an issue with using arrow navigation to switch to other
submissions in audio processing view would not fully update submission
data, causing possible data loss. Also, adds confirmation message when
there is unsaved data in the view and a user tries to navigate to
another question or submission.
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12e..2.026.12g
2.026.12e
What's changed
Bug Fixes (1)
- formBuilder: null language on multilingual XLSForm save (#7020)
Opening the Form Builder fails with a "language needs to be configured"
error after saving a multilingual form (one with labels in multiple
languages and adefault_languagesetting).When a multilingual XLSForm (with labels in two or more languages and a
default_languageset) is uploaded and then edited in the Form Builder,
saving the form once corrupts the language configuration. On the next
attempt to open the Form Builder, an error appears indicating a language
needs to be configured. Visiting "Manage Languages" shows an unknown
blank language has been created, and the form becomes uneditable.
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12d..2.026.12e
2.026.12d
What's changed
Bug Fixes (5)
-
connectProjects: deleted imported project issue (#6974)
Fixes a problem with Connect Projects UI when an imported project was
removed before the import-link was deleted. The problem was causing an
infinite loading spinner (or crash). -
constance: read Google Constance vars from env (#7001)
This PR reads Google Constance variables from the env except
ASR_MT_GOOGLE_CREDENTIALS. -
nlp: update v1 speech recognition model to 'latest_long' (#7000)
Improved automatic transcription quality by specifying the correct
speech recognition model (v1 STT).Audio transcriptions now use Google's
latest_longmodel instead of the
unspecified default, which produced lower quality results. -
processing: processing question selector (#6977)
Fixes a bug where the processing view question selector did not actually
enable navigation between questions. -
subsequences: stamp empty supplements and unblock exports (#6980)
Exports were permanently blocked for some projects due to incomplete NLP
supplement records that the migration command could not fix.
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12c..2.026.12d
2.026.12c
What's Changed
Full Changelog: 2.026.12b...2.026.12c
2.026.12b
What's changed
Features (35)
-
assetNavigator: migrate to TypeScript and remove searches (#6653)
-
auditLog: add audit actions and types to support admin interface logging (#6810)
Extend the
AuditTypeandAuditActionmodels to lay the groundwork
for logging configuration and management actions performed by superusers
in the Django admin panel.Changes made by users with the highest level of access to the admin
panel are currently not logged, making it difficult to track major
application configuration and user management updates. This PR
introduces the foundational constants required to support logging these
superadmin actions.This PR adds
ADMIN_CREATE,ADMIN_UPDATE,ADMIN_DELETE, and
UPDATE_CONSTANCEto theAuditActiontext choices and adds
ADMIN_INTERFACEto theAuditTypetext choices. -
auditLog: migrate
AuditLog'sobject_idtoCharField(#6821)This PR converts
AuditLog.object_idfromBigIntegerto
CharField(255)to support string-based UIDs.- Updated
AuditLog.object_idtoCharFieldinmodels.py - Implemented a custom migration that alters the column type directly.
- Added logic to handle the
SKIP_HEAVY_MIGRATIONSflag: - If
True, the migration prints the SQL required for a background
index build. - If
False, the migration builds the index normally. - Verified on production that no existing indexes on
object_idrequire
dropping.
- Updated
-
automatedQA: add
Generate with AIbutton (#6715)This PR adds the "Generate with AI" button under the analysis questions.
-
automatedQA: integrate AI answer generation api (#6735)
This PR implements the flow for activating the AI response generation
feature and calling the actual generation endpoint -
automaticQA: parse and display AI generated results (#6753)
-
autoqa: add llm requests to project usage breakdown table (#6714)
Adds llm ("Automatic analysis") requests to the project usage breakdown
table and removes total submissions column. -
autoqa: adjust frontend limit handling for autoqa (#6731)
Adjusts frontend logic to ensure automatic analysis request limits are
calculated properly. -
autoqa: confirm modal for editing qa questions (#6806)
Adds a modal warning users that editing a QA question will impact all
answers across submissions. -
button: define outline variant as tertiary (#6809)
-
constance: support explicit
CONSTANCE_*env var overrides for NLP settings (#6933)This PR allows the Google NLP (ASR/MT) settings to be configured
directly via environment variables, eliminating the need for manual
setup in the Django admin panel during deployments.The following four settings have been explicitly updated in
base.pyto
support this pattern:CONSTANCE_ASR_MT_GOOGLE_PROJECT_IDCONSTANCE_ASR_MT_GOOGLE_STORAGE_BUCKET_PREFIXCONSTANCE_ASR_MT_GOOGLE_TRANSLATION_LOCATIONCONSTANCE_ASR_MT_GOOGLE_CREDENTIALS
-
formHistory: create and use infinite scroll component (#6784)
Change Project → Form → Form History component to operate on new
endpoint and use infinte scroll. We also include undeployed version in
the list, so users now can clone them too. -
massEmail: add filter for users accessing deprecated v1 endpoints (#6914)
This PR adds a new mass email filter to identify users who are still
accessing deprecated v1 API endpoints.As part of the v1 deprecation effort, we introduced
V1UserTrackerand
V1AccessLoggingMiddlewareto record users who access deprecated
endpoints. This PR exposes that data through the existing mass email
system so that admins can notify these users to migrate to v2 endpoints. -
metadata: add
ExtraProjectMetadataFieldmodel (#6789)🗒️ Checklist
- run linter locally
- update developer docs (API, README, inline, etc.), if any
- for user-facing doc changes create a Zulip thread at
#Support Docs Updates, if any - draft PR with a title
<type>(<scope>)<!>: <title> - assign yourself, tag PR: at least
Front endand/orBack end
orworkflow - fill in the template below and delete template comments
- review thyself: read the diff and repro the preview as written
- open PR & confirm that CI passes & request reviewers, if needed
- delete this section before merging
Add the
ExtraProjectMetadataFieldmodel to support customizable
project metadata on private servers. -
mfa: enable MFA unconditionally for all users (#6939)
This PR removes the
MfaAvailableToUserwhitelist model and all
subscription-based restrictions tied to Multi-Factor Authentication. MFA
is now universally available to all KoboToolbox users, governed only by
the globalMFA_ENABLEDconfiguration.Historically, MFA was gated behind paid subscriptions or a specific
per-user whitelist (MfaAvailableToUser). As part of our push to make
security features available to everyone, this PR completely removes
those restrictions.This PR:
- Deletes the
MfaAvailableToUsermodel and its corresponding Django
Admin interface. - Removes the subscription-check logic from
MfaAdapter.is_mfa_enabled(). - Simplifies
permissions.pyto allow MFA access based solely on the
globalconfig.MFA_ENABLEDsetting. - Cleans up
environment.pyand related API endpoints that previously
exposed the whitelist status to the frontend. - Refactors unit tests in
test_login.py,test_mfa_login.py, and
test_api_environment.pyto remove whitelist/subscription matrices and
verify universal access.
- Deletes the
-
pagination: make pagination class consistent and use the same parameters (#6542)
This PR introduces the DefaultPagination class, which serves as the base
pagination class for all paginators in the KPI and KoBo apps. Other
pagination classes now inherit from it.
startbecomes the primary pagination parameter, whileoffsetremains
supported as an alias for backward compatibility.It also adds support for the
pageandpage_sizequery parameters,
which are internally converted into limit and offset values. -
qual: enable LLMs to answer QA questions (#6707)
This PR allows users to use an LLM to answer QA questions via the API.
Users can use the API to request LLM responses to QA questions, using
OpenAI as the primary LLM and defaulting to Claude if the request to
OpenAI fails. LLM requests can be limited by subscription tier. -
qual: add new addon category for automatic qa (#6701)
Adds a new row to the list of addons on the addon page to display addons
for automatic QA. -
qual: allow un/verification of QA responses (#6690)
Allow users to verify or unverify QA responses, whether manual or
automatic.All responses, manual or automatic, are considered unverified until they
are explicitly verified. This status can be updated via the API, and the
date of verification will be recorded, or removed if it was un-verified. -
qual: add OpenAPI schemas for automatic qual (#6717)
Include automatic QA in endpoint documentation.
-
qual: add verification to schemas (#6724)
Update API documentation for advanced features to include verification
for QA answers. -
qual: clear answer button (#6774)
Adds frontend handling for AI-generated responses, as well as "clear" button for removing those responses. Ensures we can delete automat...
2.026.07h
What's changed
Bug Fixes (1)
- subsequences: allow accepting nlp actions even if limit exceeded (#6927)
Ensure users can save/delete automatic NLP results even if they are over
their usage limits.
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.07g..2.026.07h
2.026.07g
What's changed
Performance (1)
- beat: throttle Beat schedule reloads to fix dispatch starvation (#6926)
Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.07f..2.026.07g
2.026.07f
What's changed
Bug Fixes (1)
- massEmails: do not disable emails before they are sent (#6915)
Fixes a bug that was disabling one-time email sends before they could be
sent.When users created one-off emails after the daily send lists had been
generated, they were automatically getting turned off (havingLiveset
to False) before they could actually be sent.
Full Changelog: 2.026.07e...2.026.07f