This week I worked mostly on CVSS scoring engine Implemented it end to end.
Drafted the integration flow between the PHI Tier Classifier, the CVSS Scoring Engine, and the reporting module, including security trend analysis and downloadable security artifacts.
Next week, I will focus on:
Integrating the CVSS Scoring Engine with the PHI Tier Classifier.
Developing and integrating the report generation and security trends module.
Running and validating the MU workflow test suites.
Investigated and resolved R8 release build and runtime reflection crashes on physical Android/Pixel devices caused by the DHIS2 d2 SDK’s use of Java reflection.
Disabled R8 code minification (minifyEnabled false) and resource shrinking in the release build configuration, matching the official DHIS2 skeleton application standard. Pushed as a separate bugfix PR (fix/release-build-minify-stability).
Successfully compiled a stable, clean release APK (148.3MB).
Started Phase 2 (offline-first architecture) ahead of schedule: designed and implemented the local SQLite database schema using sqflite with two tables — sync_queue (for pending operations, retry counts, backoff status) and conflict_log (for server-wins conflict preservation).
Wrote 9 unit tests for all database helper methods (enqueue, status transitions, retry threshold, conflict logging) using mocktail. All 75 tests pass.
Pushed PR 11 (feat/sqflite-database-setup) to upstream for review.
Add ConnectivityMonitor for auto-retry when network is restored.
Wire the queue manager to PlatformSyncService via SyncOrchestrator.
Write unit tests for queue operations and retry logic.
Have you had any blockers or issues that are impeding your project?
MR 142 (telemetry, e2e tests, event sync wiring) received code review feedback from the mentor. One merge-blocking issue: EventMapperTest.kt tests assert on local literals instead of invoking EventMapper directly, making them vacuous. Additional follow-ups flagged: e2e test assertions using isNotNull on non-nullable fields (always passes), Kotlin unit tests not running in CI, and documentation referencing iOS files not yet in the repo. Addressing these before merge.
Finalized and implemented the drag-and-drop reorder feature for the Web Component-based Form Designer.
Successfully pushed the feat/drag-drop-reorder branch to origin.
Initiated the Merge Request (MR) process to merge the feature branch into librehealth/toolkit/lh-toolkit-webcomponents:master.
Verified the status of local repositories and confirmed the integrity of the commit history.
What do I plan to do next week?
Handle any code review feedback from mentors on the feat/drag-drop-reorder Merge Request.
Field property editing — clicking a field in the canvas should let you edit its label and linkId in the properties panel instead of just showing "Select a field to edit.
Have I had any blockers or issues?
I’m blocked on a Git/line-ending issue while implementing SortableJS drag-drop in packages/lh-form-designer/lh-form-designer.js. But somehow with the help of mentor too i solve that issue and open the MR!
Set up the SQLite database table to safely store offline network requests.
Built the SyncQueueManager to handle saving and retrying failed syncs automatically with exponential backoff delays.
Added a ConnectivityMonitor so the queue automatically flushes as soon as the phone reconnects to the internet.
Created a SyncOrchestrator to act as a clean bridge between the UI and all this database logic.
Wrote unit tests for the queue manager and ran integration tests on a physical device to prove the SQLite-to-Docker flow works perfectly.
What do I plan to do next week?
Connect the dummy “Add Baby” and “Edit Baby” UI screens to the SyncOrchestrator.
Add the offline warning banner and the sync status badges to the UI.
Test the entire offline-to-online flow manually on the app.
Have you had any blockers or issues that are impeding your project?
I am holding off on merging this week’s backend PR into master. The UI isn’t wired up yet, so I want to wait until next week’s UI work is complete so I can manually verify the entire flow end-to-end before pushing it to production.
This week I completed the editable label and linkId work in lh-form-designer on the feat/editable-label-and-linkid branch.
The properties panels now supports updating the selected field’s label and linkId, and existing form state updates correctly.
I also verified component will be work in polymer serve and committed change locally.
I have not opened an MR yet, I plan to do that after my current MR !155 will be closed and do a bit more cleanup on these branch.
What I plan to do next week?
Next I want to continue with the remaining form-designer polish work, especially the next feature such as Preview Mode and final import/export cleanup.
Moved MR !155 (drag-and-drop reordering) to an org branch since fork branches don’t trigger org CI runners, so it’s now MR !156 with pipeline passing, waiting on sunbiz’s review.
Also opened a draft MR (!157) pulling the properties panel out of lh-form-designer.js into its own component, following up on the midterm feedback about the file getting too large.
Still draft since I want to rebase it once !156 merges before marking it ready.
What do I plan to do next week?
Once !156 merges, rebase !157 onto master and get it out of draft. Then start the same kind of split for the field palette and for canvas.
Built file-based export/import for the form designer — export now downloads the questionnaire as a real .json file (Blob + object URL + anchor download) instead of just showing JSON on screen
And import now accepts a file upload via FileReader, alongside the existing paste-into-textarea option for backward compatibility.
Haven’t opened the MR yet since this depends on where the export/import UI function will lie, once !158 (canvas/properties-panel split) merges, planning to move this code into form-canvas.js at that point.
What do I plan to do next week?
Once !158 merges: rebase this branch onto the new master, move the export/import logic into form-canvas.js following the same event-based pattern used for properties-panel, run tests, then open the MR.
Implemented Preview Mode for lh-form-designer, a toggle that switches from the design canvas to a live rendered form, with recursive rendering of FHIR item types (string, date, boolean, choice, integer/decimal) as functional form controls.
Built live enableWhen evaluation supporting =, !=, exists, >, and < operators across all relevant FHIR answer variants , including correct date-string comparison using Date.parse() to avoid NaN bugs from naive numeric coercion.
Added 2 unit tests covering preview mode rendering and conditional field visibility. Also followed up on MR !156 and !158, both still pending review.
What do I plan to do next week?
Open MRs for both file-export-import and preview-mode branches
Rebase both onto master once !158 merges, relocating relevant render logic into form-canvas.js/properties-panel.js
Any blockers?
Open MRs, not blocking current work since Preview Mode and export/import are built independently against master