Swasti · mForm V2→V3
Days to deadline
Build 1.0.0+22 is with the Dhwani testers — it lands every client ruling from the 1 July confirmations: simplified scheme eligibility (State + Age + Income), Document follow-up now auto-closes on two consecutive not-checked visits like Scheme, early follow-ups need an explicit override with a reason, and the Drafts screen got its full search/filter overhaul. One data gap needs a client decision: the V2 scheme master has no Telangana content at all.
Full BRD-compliance audits run form-by-form (Health → Scheme → Document), each fixed and shipped to the Dhwani Firebase group on staging. Health Screening reconciled to the clinical BRD (BP-2 overrides BP-1, age<13 BP rule, re-screening §10 gating, server-side conditional-mandatory). Scheme: follow-up mandatory fields fixed (the 'didn't check status' path no longer fails on sync), Approved-awaiting cadence corrected to 15 days, Trans members now match schemes (Trans→Other), VS25 attachment gate added. Document (24 June): Form-2 sequential 3-step gate + re-application-after-closure fixed; Form-3 Follow-up rebuilt to the BRD §11 7-code status taxonomy with BOTH twice-rules (Twice-Delay + Twice-Approved-No), the conditional fields (rejection reason, attachment gate, final attachment) and server-side validation. Offline→sync verified on-device for both follow-ups + the document application. Six-language translations seeded for all new strings (AI drafts — native-speaker review pending before UAT/prod). Known follow-up: a Scheme Application saved as Draft without 'interested to apply' is now guarded (fix queued for the next drop).

Form status

One row per form. 6 done · 0 in flight · 0 rebuild planned · 0 pending.

Member Profiling
V2 form 1000
Done
Rebuilt against the PM video. Single-scroll layout with consent gate at top, auto-populating donor/partner, Get-button for facilitator, household-member-count field, and post-submit routing on Civic ID.
Done
  • Doctype + server validation
  • Offline-first save → outbox → REST push
  • DOB picker + auto-calc Age
  • Phone (10-digit), validation engine
  • Single-scroll layout in V2 viewSequence order
  • Consent gate at top with popup (red → green states)
  • Donor and Partner auto-populate on Grampanchayat select
  • Individual Facilitator Get button (pulls logged-in user)
  • Household members count field added
  • Conditional disability fields and other-ID slots properly gated
  • Post-submit routing: Civic ID Yes → Scheme, No → Document Application
  • Save now blocks required fields inside the collapsed Additional Details section (29 May)
  • Required-field rules now driven by Frappe meta — PMs can change reqd / mandatory_depends_on without an app rebuild (29 May)
  • Older app data self-heals on bootstrap — phones carrying state from before the SDK upgrade earlier this month now save members again without needing to clear the app (31 May)
Next
  • Tester-verified end-to-end. No open items.
Scheme Application
V2 form 1002
Done
Rebuilt against the PM video. Single-scroll layout with top read-only display, collapsible Beneficiary / Scheme / Document Verification sections, offline-eligible scheme picker, About-this-scheme auto-fill card with documents-coverage hint, and Filled/Submitted/Verified progress chips. Offline-first save through outbox.
Done
  • Doctype scaffolded
  • ADD screen on shared form primitives (SwastiSelectField etc.)
  • Offline applicable-schemes filter (7 dimensions: state/gender/caste/marital/occupation/age/income)
  • 16-state V2 master refresh (was 7 states) — covers Haryana, Bihar, Maharashtra, Delhi, Gujarat, Nagaland, Meghalaya, Mizoram, Tripura, Kerala in addition to the original 7
  • V2 PM-spec rebuild: X / 3.1 Scheme Application / SAVE DRAFT header; single long scroll; 3 transparent-collapsible sections with top dividers
  • About-this-scheme card: description, clickable scheme link (url_launcher), beneficiary's documents, required documents, Civic ID — with green/ochre missing-docs coverage hint
  • Followup-in (15/30/60 Days) → derived Follow Up Due date
  • Three-stage Filled / Submitted / Verified chips replace the single workflow_status pill
  • Offline-first save: docs__scheme_application + outbox INSERT, never direct API
  • Geography fields dropped from doctype (denormalized — inherit through member link); individual_facilitator retargeted Link User
  • Eligible Schemes picker fix — was showing No matches for everyone post-SDK-upgrade; query now uses the v2 child-table schema (31 May)
  • Applied scheme cards on member detail are tappable — opens scheme detail with the Add Follow-up CTA (31 May)
Next
  • Tester-verified end-to-end. No open items.
Scheme Followup
V2 form 1003
Done
Built against the PM video. Multi-visit follow-ups against a saved Scheme Application; status auto-derives from Application Status + Benefit Received; marking a visit Delayed pushes the due date 30 days. Visit history cards on the scheme detail screen, each tappable for the full breakdown.
Done
  • Doctype scaffolded as child-style follow-up of Scheme Application
  • ADD screen on shared form primitives
  • Derived status from the PM truth table (Application Status × Benefit Received)
  • Auto-reschedule due date +30 days on Delayed
  • Evidence image upload (only when benefit received)
  • Offline-first save against an unsynced parent (outbox resolves the link at push)
  • Expandable visit-history cards on the detail screen
Next
  • Tester-verified end-to-end. No open items.
Document Application
V2 form 1004
Done
Rebuilt to mirror the Scheme Application shape — single long scroll, Document Verification with Filled / Submitted / Verified stages, acknowledgement number, and a follow-up due date. The 'Select document to apply' picker is the PM-curated 17-item list (12 civic IDs + 5 apply-only docs).
Done
  • Doctype scaffolded
  • Stage-1 ADD screen using shared form primitives
  • 17-item applyable-document picker (is_applyable_document flag on Document Master)
  • Filled / Submitted / Verified stage chips + conditional submission date
  • Offline-first save through outbox
  • Pick Document picker fix — was failing with an ORDER BY database error; now lists the curated set as intended (31 May)
  • Applied document cards on member detail are tappable — opens document detail with the Add Follow-up CTA (31 May)
Next
  • Tester-verified end-to-end. No open items.
Document Application Followup
V2 form 1005
Done
Multi-visit follow-up flow mirroring Scheme Follow-up. Status derives from application progress; offline-first save against an unsynced parent.
Done
  • Doctype scaffolded + controller
  • ADD screen on shared primitives
  • Derived status + visit history cards
  • Offline-first save (parent-link resolution at push time)
Next
  • Tester-verified end-to-end. No open items.
Health Screening
V2 form 1010+1011
Done
Greenfield rewrite from the PM walkthrough (note 12). Split into three doctypes — screening, follow-up, re-screening. Single long-scroll form with live status pills for BMI, Haemoglobin, Blood Pressure and Blood Sugar that derive as the surveyor types, plus interpretation text. Three follow-up visits (each a different question set) and a re-screening flow.
Done
  • Three doctypes: Health Screening V3 / Followup / Rescreening
  • Twin threshold modules (Python + Dart) for BMI / Hb / BP / RBS — identical bands, parity-tested
  • Single-scroll ADD screen: Demographics, BMI, Hb, BP (1+2 readings, final = max severity), Blood Sugar, Healthy Days, Illness & Referral
  • Live status pills + interpretation text derive on input
  • Decimal weight / height / Hb input (per V2)
  • Disabled inherited from the Member profile (not re-asked)
  • Full V2 question text for Healthy Days + Illness sections
  • Three visit-specific follow-up forms + re-screening labs
  • Classification pills + expandable visit-history cards on the detail screen
  • Offline-first save and follow-ups against an unsynced parent
  • PM Excel tracker drained: Batches A–E (range hints, imported read-only fields, live BMI/BP, Visit 2 hoisting, Expressed Illness multi-select, numbering) — 3 June
  • SWF-132 home count fix + SWF-133 FU stale-status fix — 4 June
Next
  • Confirm with PM whether re-screening should lock until after Visit 3
  • Wire WHO Z-score reference values for child BMI bands (5–18 yr)
Livelihood
Greenfield (no V2 source)
Greenfield. Backend (5 DocTypes, status module, manifest patch _017) and Flutter UI (application + 2 follow-up types + detail screen with 6 collapsible sections, stage chips, due-date hint) built and on-device verified. PM (Shweta) resolved all open questions 2026-05-27. Save + full offline sync working after the app-side child-table v2 schema migration shipped.
Done
  • PM Miro design captured
  • PM (Shweta) resolved all 9 open questions (A–I) — 2026-05-27
  • Frappe backend committed (mform_swasti 46f84f2): 5 DocTypes + status module + _017 manifest patch
  • Flutter UI committed (swasti_flutter ce05c12): application + goat-purchase FU + repayment FU, detail screen, listing card with stage chips and due-date hint
  • Child-table sync (#186) resolved app-side: child-table v2 schema migration + matcher rewrite to parent_uuid
  • On-device verified end-to-end: save → outbox → push → server confirm
  • SWF-126/127/128 — workflow close on loan-fully-repaid + Defaulted-month skip-logic + option rename (4 June)
  • SWF-139/140 — Goat-then-Repayment sequence gate + Defaulted is non-terminal (5 June)
Next
  • 3 latent reqd:1 traps on Repayment FU JSON (amount_received, goat_insurance, repayment_date) — next sprint
  • SWF-106 — blocked on backend mobile_created_at schema (Task #138)

Recent milestones

Newest first. Each milestone is a self-contained deliverable.

July 2026
03
Jul
Build +27 — Livelihood repayment follow-up fixes milestone
Cleaning up the monthly repayment flow from the latest tester pass. 'Is loan fully repaid?' is now a system-decided, locked field — it reads No while any balance remains and Yes once the loan clears, and the worker can no longer set it by hand, so it can't contradict the running balance (SWF-484). The repayment date now saves the moment it's picked, with no dependence on the status field — a fix that landed in the shared date component, so every date field in the app benefits (SWF-484). In the application detail, each monthly repayment keeps its own '1st / 2nd / … Month Payment' chip instead of only the latest card showing one, with the month number tied to the payment's real position in the sequence (SWF-486). The progress chips now read 'Repaid X/11' rather than 'Repaying', and the Closed chip lights up once the loan is fully repaid (SWF-489). Mandatory red asterisks were also added to Q2.5/2.6/2.9 on the Livelihood Application (SWF-477). Verified on-device, including a review-caught ordering bug in the per-card chips that was fixed before release.
Open →
03
Jul
Build +26 — Livelihood Application polish milestone
A follow-up drop tidying the Livelihood flow from the latest tester pass. When a member already rears more than five goats, the form now shows a single clear rejection banner carrying the actual count, instead of that plus a duplicate warning (SWF-473). Every Livelihood card shows 'Applied on <date>' as a fixed line, and closed applications show their closure reason — including 'FPO enrolment under process', which previously fell back to just the date (SWF-474/475); the form also gained a read-only Date of Application row, matching how Scheme and Document surface it. In the application detail, the FPO service and goat-training answers now display their real values instead of dashes (the goat-training values live in a linked table and weren't being read back), the 'Complete Goat Purchase first' helper is now clearly legible, and every due date shows the year with the button reading 'Goat Purchase FU due <date>' (SWF-476). Verified on-device; a data-read defect in the goat-training display was caught and fixed during that verification.
Open →
03
Jul
Build +25 — Livelihood form gating, draft resume, and the sync outage closed out milestone
The Livelihood Application now walks the surveyor through its eligibility questions stage by stage (SWF-464): only the SHG question shows on open, the SHG details unlock on Yes, the FPCL fallback question appears only when it applies, and the rest of the form opens once shareholding is confirmed — with mandatory markers and validation matched to what's actually visible. Tapping a Draft on a member's Scheme or Livelihood tab now reopens the form to continue filling, instead of the read-only summary (SWF-469). The Drafts screen gained a Member filter tab, and member drafts now show their last-edited date (SWF-466). Fields no longer hide behind the Save/Submit bar on tall follow-up forms (SWF-463). Separately, the afternoon's sync outage (SWF-465 — 403s on upload and silently empty downloads, caused by geography-scoping hooks that reached staging ahead of their user provisioning) was root-caused, gated behind a per-site flag, and verified restored end-to-end with the tester account. One open question for the client: the ticket asks the FPCL park window to be 30 days, but the earlier client ruling (SWF-230) set 10 — awaiting a decision.
Open →
02
Jul
Build +24 — Document closure matches Scheme; mandatory markers audited app-wide milestone
Third drop of the day. The Document flow's closed state now mirrors the Scheme baseline (SWF-416/426): the loud 'Workflow Closed!!' banner is gone, closed applications show the same quiet 'Workflow closed' state as Scheme, every follow-up card carries the document name as a subtitle, and the Twice-Approved-No closure label is properly title-cased ('Application Approved & Documents Not Received' — old rows still close via a legacy synonym). All seven follow-up statuses were audited for banner/button/subtitle/case consistency. SWF-372's app-wide audit checked every mandatory question across all 11 forms against its red-asterisk marker: two display gaps fixed (Health 9.2 referral place, Health follow-up 2.6), and a real trap closed — Livelihood 2.1/2.2/2.13–2.15 showed asterisks but only the server enforced them, so offline submits failed at sync time; the form now blocks locally like everywhere else. One dev-found issue logged for the next cycle: the follow-up form's sticky footer can overlap fields on tall Visit-2 forms (SWF-463). With this drop every tester-logged engineering item in the tracker is Done — the four remaining Health items have been awaiting tester re-test since build +12.
Open →
02
Jul
Build +23 — every ticket logged against +21 is now closed milestone
A same-day second drop clears the eight tickets filed on 1 July against the Scheme, Document and Health forms. The Scheme Application's acknowledgement section (ack number, submission date, evidence, follow-up cadence) now appears only when all three verification steps are ticked, in the right order, and the form refuses submission until the submission date and cadence are filled — enforced on the device and on the server. The submission-date value is captured reliably and flows into the follow-up's read-only details. The Scheme Follow-up's Visit Details card is trimmed to just the visit number. Both application forms mark the verification checkboxes as mandatory (red asterisk) and show the member's existing documents as green chips. The Health Screening member card is restructured to match Scheme — geography on top, a collapsible Beneficiary Details section below — with donor and partner shown by name. And every date shown from a record now renders as DD/MM/YYYY instead of raw 2026-07-01-style values. Verified end-to-end on the emulator, including a synced record carrying the new fields. With this drop, all 33 + 8 tickets from the 1-July feedback wave are marked Done in the tracker.
Open →
02
Jul
Build +22 — the 1-July client rulings, all six shipped milestone
Every open question from the feedback batch came back answered and is now live on staging for the Dhwani testers. Scheme eligibility is simplified to State + Age + Annual Income only — caste, gender, marital status and occupation no longer block a scheme application (SWF-394). The Document follow-up now closes the workflow after two consecutive 'didn't check with the department' visits, exactly like the Scheme follow-up (SWF-414). Filling a Livelihood follow-up before its due date now takes an explicit override with a typed reason, which is stored with the record (SWF-375). When the repayments fully cover the loan, 'Is loan fully repaid?' stays on screen — pre-answered Yes and locked — instead of disappearing (SWF-376). A member's Livelihood applications are numbered 1/2/3 in their own history rather than showing system codes (SWF-379). And the Drafts screen got its full overhaul: richer cards (family details, geography, exact form name), search across name/father/spouse/phone/village, module tabs, and an advanced filter sheet with geography cascade, date range and sorting (SWF-366). Submitted Document Applications also gained a read-only detail view matching Scheme and Health. Verified end-to-end on the emulator before release.
Open →
01
Jul
Document flow audited to BRD v2.0 + two rapid feedback batches (builds +18 → +21) milestone
The Document Application form was audited line-by-line against BRD v2.0 and brought into conformance: the sequential Filled → Submitted → Verified gate, verification hidden when the member isn't interested (with a proper 'Not Interested' closed state), the supporting-documents list rebuilt as a read-only display auto-filled from the Document Master (the editable field was removed per SWF-367), submission-date gating, acknowledgement/status details on the application cards, and follow-up cards showing due dates with a Delayed banner. Member Profiling gained drafts and the 'no civic IDs → start a Document Application' prompt. A cross-cutting batch followed: home tiles filtered per program, Save Draft available in every form's bottom bar, drafts showing dates and member names (never raw codes), livelihood follow-up date gates with visible due dates, and corrected repayment status options. A sync fix also unblocked document applications that were failing to push. Roughly 25 KB tickets were addressed across the four builds.
Open →
June 2026
25
Jun
Tester-feedback fixes: Health form cleanup + clearer required-field validation feature
Acting on the latest Dhwani tester feedback (SWF-280/283/284/285): the Health Screening form is tidied — Weight and Height are now separate questions (no longer one merged line), Blood Pressure shows clear Systolic/Diastolic labels, the duplicate Marital Status / Disability questions are removed (they already appear in the member card), and the member card now leads with the member's location. Bigger picture: when a worker taps Submit with required fields still empty, instead of a small 'Missing: …' note they now get a clear count of what's left plus each empty field highlighted in red with exactly what to enter — applied across every form. Shipped to the Dhwani testers on staging.
25
Jun
Drafts extended to Scheme + Document forms; Home Drafts count live feature
The save-as-draft capability shipped for Health now covers Scheme Application and Document Application + Document Follow-up too — a surveyor can save any of these partially and resume later, and the draft stays on the device until Submit (no half-records on the server). Scheme's existing draft was also moved to this device-local model, which fixes a latent sync conflict it shared with Health. The Home dashboard 'Drafts' tile now shows a live count of the surveyor's saved drafts across every form (previously always 0). Shipped to the Dhwani tester group on staging.
25
Jun
Health Screening drafts (BRD §5.1) — save partial, resume later feature
Surveyors can now Save a Draft of a Health Screening, Follow-up or Re-screening — fill part of a form and come back to finish it later, instead of being forced to complete it in one sitting. Drafts stay on the device until the surveyor Submits (they are not pushed to the server as half-records), which keeps the server clean and avoids sync conflicts; a draft shows as 'Draft' on the member's Health tab and reopens exactly where it was left. Shipped to the Dhwani tester group on staging. (Backend adds a workflow_status field that skips mandatory checks while a record is a Draft; the surveyor role gained edit-own permission so a draft can be completed and submitted.)
23
Jun
Staging build — 31 KB issues across Health, Scheme & Livelihood + full Health workflow milestone
A large feedback-triage build went to the Dhwani tester group on staging. Health Screening was reconciled to the clinical BRD (BMI/Hb/BP/RBS logic + British-spelling interpretations, one screening per member, binary combined status, mandatory-field validation, 'None of the above' multi-selects) and the entire follow-up chain was completed — Follow-up 1 (referral visit, reasons as multi-selects, per-marker doctor's readings), Follow-up 2 (medication adherence + side-effects), Follow-up 3 (diet/exercise compliance) and Re-screening final status — using the §13/§14 workflow status codes. Scheme Application got label fixes + document-verification gating; Scheme Follow-up gained the prefilled header / scheme-detail / last-updated-status sections, a Delayed due-date, a rejection-reason multi-select and a richer follow-up list. Livelihood: 'willing to join FPCL' now closes the form (No immediately; Yes → 'FPO enrollment under process' with a 10-day enrollment window) and goat insurance is carried read-only into every monthly follow-up. Plus an evidence-image preview after upload, the Member 'Show all fields' view, and translations seeded for all six languages (AI drafts, native review pending). 31 KB tickets addressed — Health verified on-device, Scheme / Livelihood / Member now with the testers.
Open →
17
Jun
Multi-language (i18n) live on UAT for client testing feature
The app now renders in six regional languages — Telugu, Kannada, Tamil, Malayalam, Marathi, Hindi — switchable in Settings → Language (applies immediately). Backed by ~8.3k translation rows seeded into Frappe on UAT (migrate patches _023/_024) with the language records enabled; verified end-to-end on the UAT build against live UAT, then distributed to the client + internal Firebase groups.
05
Jun
Livelihood — fpo_service_availed gated client-side + Repayment FU cascade-clear fix
PM (Sarthak) hit a sync failure: Livelihood Application pushed with availed_fpo_services=Yes but fpo_service_availed='', server's _validate_conditional_mandatory rejected on push, the dependent Goat Purchase FU then blocked upstream. Two fixes: (1) SWF-181 — client _submit now mirrors the server gate so the row can't reach outbox without 2.7a filled; (2) SWF-180 — same shape on Repayment FU: cascade-clear loan_fully_repaid + avg_net_income when repayment_status flips to Defaulted, and deriveRepaymentStatus ignores cached loanFullyRepaid value when off the Regular/Irregular branch. Both shipped together.
Open →
05
Jun
Bottom-sheet picker no longer jumps form back to previous field fix
Tester report: typing in a numeric/text field then tapping the next Select / MultiSelect, picking an option, watching the form scroll back to the previous field — keyboard reappearing on the still-focused TextField was triggering an auto-scroll. SWF-176: drop focus before opening the sheet (FocusManager.instance.primaryFocus?.unfocus() in both SwastiSelectField and SwastiMultiSelectField). Keyboard dismisses, sheet appears, pick commits, form stays put.
Open →
05
Jun
Livelihood — cascade-clear hidden child answers on parent change feature
Tester (Ritesh) flagged that flipping a parent answer on the Livelihood Application from Yes to No hid the dependent questions but their cached values still drove the derived workflow_status and got saved on submission. SWF-172: cascade-clear walks the visibility hierarchy on every parent-field change and resets every hidden child controller; _derivedWorkflowStatus rewritten to walk SHG → FPCL/willing → goat → revolving top-down so terminal-No parent answers always win.
Open →
05
Jun
Member form — dropdowns rebuilt as bottom sheets + consent / geography numbering feature
All Select, MultiSelect and Link-backed pickers now open as a Swasti-styled bottom sheet (was an anchored DropdownButtonFormField clipping behind the nav bar on bottom-of-form fields). Search bar inside the sheet only shows for >5 options. Long selected labels wrap in the closed field. Consent Form is now Q1 in the numbering. The 5 geography fields render as a contiguous 2/3/4/5/6 block matching the cascade widget. SWF-159 + SWF-163.
Open →
05
Jun
Livelihood Application + Repayment FU polish feature
SWF-162: Livelihood Application now auto-fills Gender / Marital Status / Disabled from the Member profile in the Beneficiary Details section. Repayment FU header trimmed to Name / Age / Phone (Gender / DOB / Marital / Disabled imports dropped — parent application screen already carries the full set). Amount Received on Repayment FU enforces a 1–10,000 ₹ range.
Open →
05
Jun
Member form fixes + opportunistic auto-sync + unsynced indicator feature
SWF-148: disability cert chain is now mandatory server-side when Q36=Yes (field shows the red mandatory dot when visible). SWF-150: looping Other IDs section hidden on both app + Desk pending a PM concept note. SWF-151: duplicate Member (same Name + Father/Spouse + DOB + Phone) hard-blocked at Save with a clear error. SWF-157: records auto-sync to the server in the background after every save (offline-first still primary). SWF-158: small ochre cloud-off icon on listing cards for rows that haven't yet reached the server; clears on its own after auto-sync.
Open →
05
Jun
Livelihood Repayment FU — sequence gate + Defaulted non-terminal feature
Two tester bugs closed end-to-end in one day. The Repayment FU CTA is now locked until a Goat Purchase FU has been filed (SWF-139). 'Defaulted, payment delayed' no longer closes the workflow — it derives 'Nth Month Payment Delayed' and the workflow closes only when loan_fully_repaid = Yes or visit 10 is filed without repayment (SWF-140). Frappe hotfix made loan_fully_repaid conditionally required to match the skip-logic.
Open →
04
Jun
Home count + Follow-up stale-status + quick-add removal feature
Home 'Health Screenings' tile was stuck at 0 — was counting the dead V2 doctype name instead of V3 (SWF-132). Health Follow-up rows were stuck on 'Pending sync' after syncing — current_status is now pre-computed in Dart on save instead of waiting for a server round-trip (SWF-133). Quick-add FAB removed from home (SWF-134). Long-standing sync issue SWF-38 closed.
Open →
04
Jun
Livelihood Repayment workflow + skip-logic + option rename feature
Loan-fully-repaid = Yes now closes the parent application (SWF-126). Avg Net Income and Loan Repaid hide for 'Defaulted, payment delayed' months and reorder (SWF-127). Option renamed 'Defaulted, No payment made' → 'Defaulted, payment delayed' with a data-migration patch (SWF-128).
Open →
03
Jun
Health Screening — PM Excel tracker fully drained (Batches A–E) milestone
Five batches closed seven HS tickets — numeric range hints in section headers, member-imported fields rendered read-only, live BMI / BP previews, follow-up census header + Visit 2 side-effects hoist, Expressed Illness multi-select, section numbering on follow-up + re-screening, orphan Others fields dropped. SWF-108 / 118 / 119 / 120 / 122 / 123 / 124.
Open →
02
Jun
Engineering code review closed end-to-end — eight of nine items addressed on staging milestone
The Flutter app code review from the Android team (delivered 1 June) is now fully worked through. Eight of nine review items landed as code on the staging branch as a single merge commit — the sync bootstrap now drives the SDK's pull pipeline directly (surveyors only re-fetch what's changed on subsequent logins, not every doctype from scratch), doctype-name string literals across the app are centralised into one constants file (typo-safety and easier find-usages), the member-add screen lost about 280 lines of widget code into a dedicated pickers file, and screen/provider raw SQL calls that the SDK's resolver can express now go through it. Three smaller items closed as design-intent header comments (the static layout schema and the link-resolver wrapper are intentional choices, now documented as such). The ninth item — a concern that the app bypasses the SDK's form-builder — re-investigation showed the abstraction was tried earlier (May), shipped, and intentionally removed as premature; all five form screens already share the same form-context shell and design-system primitives. Two upstream pull requests are queued on the SDK repository (#68 wires a developer-build hook for the connectivity probe; #69 promotes the depends-on expression evaluator to the public API surface). The next tester build picks all of this up.
Open →
01
Jun
Feedback submissions are now editable from the KB feature
The KB feedback list now has an Edit option on every card. Anyone with the KB login can correct a submission's title, description, form/screen, severity and submitter name, change its status (Open / In Progress / Done / Won't Fix), and add or remove screenshots — without opening the Frappe desk. Saves go straight to the engineering Frappe.
Open →
May 2026
31
May
Flutter app handed to Android team for code review milestone
The staging branch (with the four tester-facing fixes and the architectural changes from the audit cleanup) is out with the Android team for a code-quality review pass alongside the live build. About a dozen commits over the original Build 3.3 baseline. No deadline pressure — landing dependent on review feedback.
31
May
Build 3.4 released — four tester-facing bugs from this week fixed milestone
A fresh staging build with the bug fixes the team raised through the week. Four issues are gone: (1) the Apply Scheme picker was showing "No schemes match" for every member because the local query was looking at an old column name — schemes now show correctly and the 7-dimension eligibility filter is back; (2) Apply Document's Pick Document was failing with a database error — picker now loads the curated set; (3) tapping an applied Scheme or Document card on the member detail screen did nothing — both are now clickable and open the detail screen so a follow-up can be added; (4) Member save would sometimes succeed locally with required fields empty inside the collapsed Additional Details section and then fail on the server — save now blocks until every required field is filled and tells the surveyor what's missing. Sync also auto-retries when the network drops mid-push, and older app data self-heals on the next sync (no need to clear the app).
29
May
Frappe-controlled required fields land on the app feature
Up to now, which fields were required in each form was baked into the app at build time — flipping a field's required flag on the Frappe side required a new release before surveyors saw it. From this build, the app reads the live field configuration on each sync. PMs can now mark a field required (or conditionally required, e.g. "Type of Disability is required only when Disabled = Yes") on Frappe and surveyors see it on their next sync, no app rebuild needed. Covers all eleven Member / Scheme / Document / Health / Livelihood forms.
29
May
Member save bug fixed — fields inside Additional Details now blocked properly feature
A surveyor could press Save on a member with required fields left empty inside the collapsed "Additional Details" section — the save succeeded locally but the server rejected on push with a mandatory-fields error. The collapsible was hiding its fields from the form's validation. Fixed: Save now blocks until every required field is filled and tells the surveyor what's missing, regardless of which section the empty field is in.
29
May
New staging build with the fixes — testers can sign in directly milestone
A fresh staging build is out on Firebase. Two long-latent setup issues were also corrected: the test surveyor login (Lakshmi Devi) is now pre-filled on the sign-in screen for staging builds, and the app now reaches the correct staging server (the prior URL had been an unreachable placeholder since 20 May, so any attempt to sync against staging on prior tester builds would have silently failed). PMs who install this build can sign in and pull masters immediately.
29
May
Engineer-facing code review cleanup — sync hardening + dead code purge infra
Background work that doesn't change what surveyors see but tightens what's under the hood. Sync now auto-retries when the network drops mid-push (TimeoutException, dropped sockets, connection refused — previously these left rows stuck as Failed until manual re-sync). Five hundred lines of dead and dormant code removed (an old outbox drainer replaced by the SDK months ago; two unused form widgets; a duplicate Material button in the Member form). Test suite grew from 425 to 456 passing tests, including new smoke tests for the six previously-untested Add/Followup screens (Livelihood + Health) and full pinning of the new meta-driven validation logic.
28
May
Livelihood backend + Flutter UI built and on-device verified milestone
Frappe backend (5 DocTypes — Application, Goat Purchase Follow-up, Repayment Follow-up + option masters — plus status module and _017 manifest patch) committed and verified on local bench. Flutter UI mirrors the Scheme Application pattern: application form, two follow-up types, and a detail screen with 6 collapsible sections, stage chips, and a due-date hint anchored on fund_receipt_date + 30 days. All 9 PM open questions (A–I) answered by Shweta 2026-05-27. On-device verified on emulator-5554 (dev build): home count, listing card, detail header, Beneficiary resolves to member. The child-table sync gap that initially blocked save + push (#186) was resolved app-side via a hand-built docs__&lt;child&gt; v2 schema migration plus a matcher rewrite to parent_uuid.
Open →
27
May
First tester build released (Firebase App Distribution) milestone
The first staging build went out to the Dhwani tester group via Firebase, covering the full surveyor journey — Member, Scheme Application + Follow-up, Document Application + Follow-up, and Health Screening + Follow-ups + Re-screening. Release notes spell out exactly what to test. A first-day dropdown issue on the two newest forms was traced to a missing database column that had aborted the server migration before the mobile manifest was updated; once the migration completed cleanly, every form's options populate after a sync.
27
May
Health Screening rebuilt greenfield to the PM walkthrough feature
The largest piece of this release. Health Screening is now a single long-scroll form with live status pills for BMI, Haemoglobin, Blood Pressure and Blood Sugar that derive as the surveyor types, each with plain-language interpretation text. It splits into three records — the screening, up to three follow-up visits (each visit asks its own questions: Visit 1 is the government-hospital visit and doctor's readings; Visits 2 and 3 cover medication adherence and diet/exercise), and a re-screening flow. Weight, height and Haemoglobin accept decimals; the disability answer is inherited from the member's profile rather than re-asked; the Healthy Days and Illness sections use the full V2 question wording. Visit history shows as tappable cards that expand to every captured field.
27
May
Scheme & Document follow-ups, with offline-first against unsynced parents feature
Scheme Application and Document Application both gained multi-visit follow-ups. Status auto-derives from the application's progress, and marking a visit Delayed pushes the next due date out 30 days. A surveyor can now record a follow-up against a parent application that hasn't synced yet — the outbox resolves the link to the real server record at push time, so nothing blocks on connectivity. Document Application's apply-list is the PM-curated 17-document set.
27
May
Login persists across app restarts feature
Surveyors are no longer asked to log in again every time the app is cold-started — the session is restored automatically. Two field-reported issues were also fixed: dropdowns rendering with a black background on some phones, and the back button on the sync screen logging the user out.
21
May
Scheme Application rebuilt to V2 PM spec end-to-end feature
Apply Scheme now matches the PM video walkthrough exactly. One long scroll, three collapsible sections (Beneficiary Details, Scheme Application, Document Verification), top read-only display block, and an About-this-scheme card that auto-fills description, clickable link, the member's existing documents, the scheme's required documents, and Civic ID status. The card highlights any documents the scheme requires that the member doesn't have. The single status pill is replaced with three progression chips — Filled, Submitted, Verified. Donor/surveyor inheritance bugs and the geography mandatory-field error are fixed.
21
May
Manual sync button on Home (Tap to sync) feature
Every form save is now strictly offline-first: writes are persisted to local SQLite + queued in an outbox, the surveyor sees success immediately. The new Home sync pill drains the outbox to the server on demand, surfacing per-record success/failure. No save ever blocks on network — a phone with no signal continues to work for the full surveyor session.
21
May
16-state scheme master refresh (was 7 states) data
PM-supplied refreshed Scheme Master CSV imported — 186 schemes now cover Andhra Pradesh, Bihar, Delhi, Gujarat, Haryana, Karnataka, Kerala, Madhya Pradesh, Maharashtra, Meghalaya, Mizoram, Nagaland, Rajasthan, Tamil Nadu, Tripura, and Uttar Pradesh. Haryana alone now lists 112 eligible schemes (was 0). The seeder is now header-based so future PM refreshes don't need code changes.
20
May
Offline scheme eligibility wired end-to-end on device feature
Scheme Master and its 6 child eligibility tables (state, gender, caste, marital, occupation, required documents) now materialise on the surveyor's phone during sync — 185 schemes, 709 state rows, 6,260 occupation rows, 477 required documents. The Scheme Application screen filters the picker to only show schemes the member is eligible for, computed locally from the synced tables (no network round-trip).
20
May
Document Master unified + Civic Document Type retired; deployment KB published docs
Single canonical Document Master with 183 Title-Case rows now used by Member Profiling, Scheme Application and Document Application. Civic Document Type doctype dropped — Member.b_prof_doc rewired to the new Member Document Item child Linking into Document Master. Scheme Master child tables wired for multi-value eligibility (709 state child rows, 477 required-document child rows across 185 schemes). New KB note 14 captures the two GitHub repos, the staging→uat→main branch policy, the four env applicationIds, build scripts, and release path (Firebase for staging, Play Store via DevOps for uat/prod).
Open →
20
May
Scheme eligibility logic locked + donor master imported docs
Donor master from V2 prod imported into Frappe — 2,105 donor records tagged to GP, 17 partners. Scheme master CSV (186 schemes, one-hot encoded across state/gender/caste/marital/occupation + age and income regexes) analysed. Matching algorithm, document canonicalisation strategy (Member-form Title Case), schema gap analysis, and 5-step implementation plan locked as note 13. Two PM confirmations pending.
Open →
20
May
Health Screening walkthrough captured + spec written docs
PM Fahim's ~18-min V2 walkthrough (Video 2.mp4) fully analysed. Canonical spec written as note 12 — covers full initial screening → 3 follow-ups → rescreen lifecycle, all BMI/Hb/BP/RBS thresholds from HS_Logics sheet, eligibility bands by age and gender, and follow-up status labels. 8 doctype gaps and 10 PM open items documented.
Open →
19
May
Member form polished after first device walkthrough feature
All radios converted to dropdowns. Address is now a proper textarea. Conditional fields (e.g. 'Please specify if Other') now correctly hide unless their parent is selected. File-upload placeholders and the 'store more IDs' block removed since they're not in the PM video. Dropdown field labels float above the selected value so the question stays visible after picking an option. Caste tap bug fixed.
Open →
19
May
Member form rebuilt against PM video milestone
Replaced the previous 7-page wizard with a single continuous scroll matching V2's exact display order. Consent now opens at the top with a popup (red outline until agreed, green check after). Donor and Partner names auto-fill when Grampanchayat is picked. Individual Facilitator has a Get button that fills in the surveyor's name. Number of household members field added. After Save, the Civic ID answer routes to either Document Application (if 'No') or Scheme Application (if 'Yes'). 97 tests passing across the rebuild.
Open →
19
May
PM video analysis published docs
Fahim's V2 walkthrough recorded and indexed. See note 11 — Member form authoritative flow. PM video declared source of truth for fields, order, and logic going forward.
Open →
19
May
Form audit pipeline hardened infra
Validation regeneration now enforces numeric bounds for age-style fields and pulls bounds from the V2 source automatically (no more silent breakages on re-run).
19
May
Conditional disability fields wired on both ends feature
"Type of disability" only shows when "Disabled?" = Yes. "Specify other" only shows when type = Other. Server and mobile both enforce the rule.
19
May
Date format standardised to DD/MM/YYYY feature
Picker header, text-input mode, and field display all use DD/MM/YYYY across the app. Age auto-calculates from DOB.
19
May
Member save → sync proven end-to-end milestone
Surveyor can record a Member offline (no network), the entry queues in the local outbox, and pushes to the server on next sync. Two test members successfully created on the backend.
18
May
Consent drift sealed feature
Consent moved to its proper place as a form-level gate (not per-field condition). Server validation enforces it before save. Mobile mirrors the rule.
18
May
Server-side validation rules ported to mobile infra
351 validation tests green. Mobile form now catches the same errors the server would, so surveyors don't lose work to sync-time rejections.
16
May
Offline-first pull-sync wired infra
After login, the app pulls all referenced data (members, schemes, documents) into local cache so the surveyor has read-access offline.
15
May
Phase 6 — Scheme Application ADD screen feature
Built on the shared form primitives. Acts as the template pattern for other forms.
06
May
Livelihood workflow design captured docs
PM (Fahimuddin) shared Miro board. SHG/FPCL qualification → goat-purchase check → 9 monthly repayments → final closure. See note 10.
Open →

Coming up

Sequenced work; the top item is what's queued next.

1 Native-speaker review of the new translations
The Health / Scheme / Livelihood strings added this release were AI-drafted across all six languages and seeded; they need a native-speaker pass before this build promotes to UAT/prod.
ETA: Before UAT/prod promotion.
2 Dhwani tester verification of the 23-June build
Health is engineer-verified on-device; Scheme Application, Scheme Follow-up and Livelihood are newly built and need tester exercise on staging before we mark those KB tickets Done.
ETA: This week.
3 SWF-230 — confirm the FPCL 10-day window with the spec owner
Built per the client ticket (10-day window + 'FPO enrollment under process' status), diverging from spec v1.1's 30-day rule; spec bumped to v1.2. Worth a final spec-owner sign-off.
ETA: On confirmation.
4 2 latent `reqd: 1` traps on Repayment FU
amount_received, repayment_date — Desk-vs-server pattern (goat_insurance is now resolved, made read-only/imported). Latent until a skip-logic case drops one.
ETA: Next sprint.
5 Telangana scheme content is missing at the source
The V2 scheme master export contains no Telangana rows at all (16 states are seeded on staging; Telangana isn't one of them), so Telangana members see no eligible schemes. This isn't a filter bug — the client needs to supply Telangana scheme content, or confirm the state is out of scope.
ETA: Client decision.
6 Drafts search — phonetic matching
The new Drafts search matches on normalised spelling (name/father/spouse/phone/village). The ticket also asked for fuzzy/phonetic matching for regional spelling variations — parked for a later cycle.
ETA: Later cycle.

Last updated 2026-07-02