Skip to content

Releases: kobotoolbox/kpi

2.026.12i

14 May 14:45
8173f32

Choose a tag to compare

What's changed

Bug Fixes (2)
  • migrations: reset failed 0024 migration (#7056)
  • subsequences: use correct method for getting xpath (#7051)

    Fixes a bug in the previous migration that was causing it to exit with
    an error.


Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.026.12h..2.026.12i

2.026.12h

14 May 10:00
c9d758f

Choose a tag to compare

What's changed

Features (1)
  • userreports: allow configurable page size for userreport API (#7049)

    Set the max page size for /api/v2/user-reports in 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

14 May 10:00
0ac32a7

Choose a tag to compare

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

07 May 17:17
ccd7e1b

Choose a tag to compare

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 a default_language setting).

    When a multilingual XLSForm (with labels in two or more languages and a
    default_language set) 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

05 May 10:47
ad6d7f3

Choose a tag to compare

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_long model 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

04 May 08:04
1afc3c5

Choose a tag to compare

What's Changed

  • fix(subsequences): fix 500 error from half-migrated assets DEV-2030 by @rgraber in #6972

Full Changelog: 2.026.12b...2.026.12c

2.026.12b

27 Apr 15:24
9e3b035

Choose a tag to compare

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 AuditType and AuditAction models 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_CONSTANCE to the AuditAction text choices and adds
    ADMIN_INTERFACE to the AuditType text choices.

  • auditLog: migrate AuditLog's object_id to CharField (#6821)

    This PR converts AuditLog.object_id from BigInteger to
    CharField(255) to support string-based UIDs.

    • Updated AuditLog.object_id to CharField in models.py
    • Implemented a custom migration that alters the column type directly.
    • Added logic to handle the SKIP_HEAVY_MIGRATIONS flag:
    • 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_id require
      dropping.
  • automatedQA: add Generate with AI button (#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.py to
    support this pattern:

    • CONSTANCE_ASR_MT_GOOGLE_PROJECT_ID
    • CONSTANCE_ASR_MT_GOOGLE_STORAGE_BUCKET_PREFIX
    • CONSTANCE_ASR_MT_GOOGLE_TRANSLATION_LOCATION
    • CONSTANCE_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 V1UserTracker and
    V1AccessLoggingMiddleware to 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 ExtraProjectMetadataField model (#6789)

    🗒️ Checklist

    1. run linter locally
    2. update developer docs (API, README, inline, etc.), if any
    3. for user-facing doc changes create a Zulip thread at #Support Docs Updates, if any
    4. draft PR with a title <type>(<scope>)<!>: <title>
    5. assign yourself, tag PR: at least Front end and/or Back end
      or workflow
    6. fill in the template below and delete template comments
    7. review thyself: read the diff and repro the preview as written
    8. open PR & confirm that CI passes & request reviewers, if needed
    9. delete this section before merging

    Add the ExtraProjectMetadataField model to support customizable
    project metadata on private servers.

  • mfa: enable MFA unconditionally for all users (#6939)

    This PR removes the MfaAvailableToUser whitelist model and all
    subscription-based restrictions tied to Multi-Factor Authentication. MFA
    is now universally available to all KoboToolbox users, governed only by
    the global MFA_ENABLED configuration.

    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 MfaAvailableToUser model and its corresponding Django
      Admin interface.
    • Removes the subscription-check logic from
      MfaAdapter.is_mfa_enabled().
    • Simplifies permissions.py to allow MFA access based solely on the
      global config.MFA_ENABLED setting.
    • Cleans up environment.py and 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.py to remove whitelist/subscription matrices and
      verify universal access.
  • 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.
    start becomes the primary pagination parameter, while offset remains
    supported as an alias for backward compatibility.

    It also adds support for the page and page_size query 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...

Read more

2.026.07h

13 Apr 15:26
948f998

Choose a tag to compare

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

09 Apr 08:53
0ce5f9d

Choose a tag to compare

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

07 Apr 16:40
492f127

Choose a tag to compare

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 (having Live set
    to False) before they could actually be sent.


Full Changelog: 2.026.07e...2.026.07f