Replace the identity profile country-code text field with a searchable country selector that shows country names and stores two-letter country codes.
Approach
Use the existing country_picker Flutter library for its local country dataset, localized names and searchable picker. Preserve IdentityProfile and the provider/service/mapper contracts. Support English and Russian, keyboard activation, cancellation, saved values and busy state.
Acceptance criteria
Country of residence opens a searchable country list.
Selecting a country displays its localized name and updates the profile with its two-letter code only.
Cancel, retry/reselection, prefilled values, EN/RU, narrow layout, large text and keyboard use remain usable.
No free-code input, code instructions or character counter remain.
Existing KYC journey measurement remains intact; no form values enter telemetry.
Focused widget coverage, format, analyzer and make test-frontend pass.
Notes
Primary module: kyc. Frontend-only change. country_picker provides bundled data and needs no network service or new application provider/controller. Existing journey outcomes are reused. Base: main. Delivery includes a reviewed commit and pull request; merge is not authorized.
Delivery: PR #65, branch kyc-64. CountryService/CountryLocalizations from country_picker 2.0.28 provide bundled data and EN/RU names; Material controls add no-results recovery and accessible keyboard/touch selection. Existing profile/service/transport and KYC telemetry contracts are preserved. Format (five Dart files), frontend/app analyzer, make test-frontend (222 tests), release web build with Wasm dry run, and browser Poland search/selection passed. Native screen-reader/device keyboard QA and existing backend review-metric gaps remain documented release checks in docs/ux/kyc.md. PR is ready for review; merge is not authorized.
### Goal
Replace the identity profile country-code text field with a searchable country selector that shows country names and stores two-letter country codes.
### Approach
Use the existing country_picker Flutter library for its local country dataset, localized names and searchable picker. Preserve IdentityProfile and the provider/service/mapper contracts. Support English and Russian, keyboard activation, cancellation, saved values and busy state.
### Acceptance criteria
- [x] Country of residence opens a searchable country list.
- [x] Selecting a country displays its localized name and updates the profile with its two-letter code only.
- [x] Cancel, retry/reselection, prefilled values, EN/RU, narrow layout, large text and keyboard use remain usable.
- [x] No free-code input, code instructions or character counter remain.
- [x] Existing KYC journey measurement remains intact; no form values enter telemetry.
- [x] Focused widget coverage, format, analyzer and make test-frontend pass.
### Notes
Primary module: kyc. Frontend-only change. country_picker provides bundled data and needs no network service or new application provider/controller. Existing journey outcomes are reused. Base: main. Delivery includes a reviewed commit and pull request; merge is not authorized.
Delivery: [PR #65](https://git.sendico.io/tech/sxchnge/pulls/65), branch `kyc-64`. CountryService/CountryLocalizations from country_picker 2.0.28 provide bundled data and EN/RU names; Material controls add no-results recovery and accessible keyboard/touch selection. Existing profile/service/transport and KYC telemetry contracts are preserved. Format (five Dart files), frontend/app analyzer, make test-frontend (222 tests), release web build with Wasm dry run, and browser Poland search/selection passed. Native screen-reader/device keyboard QA and existing backend review-metric gaps remain documented release checks in docs/ux/kyc.md. PR is ready for review; merge is not authorized.
tech
added the frontend label 2026-10-23 09:35:21 +00:00
tech
self-assigned this 2026-10-23 09:35:21 +00:00
tech
added this to the SXCHNGE project 2026-10-23 09:35:21 +00:00
Local deployment authorized by the user. PR #65 merged into main as 464bd2d565. Building the merged revision from an isolated clean checkout; current kyc-67 work is preserved. Fresh stable image resolution passed from the primary checkout after the containerized resolver could not resolve the isolated worktree's .git pointer (fatal: not a git repository). Only the frontend is being rebuilt/recreated; live services remain healthy during the build. Final deployment verification will be recorded after rollout.
Local deployment authorized by the user. PR #65 merged into main as 464bd2d56511749de3dffab7211f3b919968216c. Building the merged revision from an isolated clean checkout; current kyc-67 work is preserved. Fresh stable image resolution passed from the primary checkout after the containerized resolver could not resolve the isolated worktree's .git pointer (fatal: not a git repository). Only the frontend is being rebuilt/recreated; live services remain healthy during the build. Final deployment verification will be recorded after rollout.
Local deployment completed from merged main revision 464bd2d565 (PR #65). Fresh stable version/digest resolution passed; the isolated merged-source frontend build with --pull passed; only frontend was recreated with --no-deps and reached healthy state. Deployed image: sha256:75b5686be63d5b0b35758f0f8ba290cd9034af8cca4b1915750ccda544587b96.
Verification passed: https://localhost:5126/ returns 200 with the existing trusted Caddy CA; proxied /api/v1/health reports ok; the HTTPS-served main.dart.js hash matches /srv/main.dart.js in the deployed container and contains the country-search and empty-state strings. make test-dev passed all tooling, Vault/Mongo/NATS isolation/transaction checks, authenticated Sendico currency/ledger checks and all seven service health checks. No email or payment was sent. Existing kyc-67 work remains untouched. Non-secret local deployment revision/image pins are recorded under .local/dev/deployments/kyc-64/.
Local deployment completed from merged main revision 464bd2d56511749de3dffab7211f3b919968216c (PR #65). Fresh stable version/digest resolution passed; the isolated merged-source frontend build with --pull passed; only frontend was recreated with --no-deps and reached healthy state. Deployed image: sha256:75b5686be63d5b0b35758f0f8ba290cd9034af8cca4b1915750ccda544587b96.
Verification passed: https://localhost:5126/ returns 200 with the existing trusted Caddy CA; proxied /api/v1/health reports ok; the HTTPS-served main.dart.js hash matches /srv/main.dart.js in the deployed container and contains the country-search and empty-state strings. make test-dev passed all tooling, Vault/Mongo/NATS isolation/transaction checks, authenticated Sendico currency/ledger checks and all seven service health checks. No email or payment was sent. Existing kyc-67 work remains untouched. Non-secret local deployment revision/image pins are recorded under .local/dev/deployments/kyc-64/.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Goal
Replace the identity profile country-code text field with a searchable country selector that shows country names and stores two-letter country codes.
Approach
Use the existing country_picker Flutter library for its local country dataset, localized names and searchable picker. Preserve IdentityProfile and the provider/service/mapper contracts. Support English and Russian, keyboard activation, cancellation, saved values and busy state.
Acceptance criteria
Notes
Primary module: kyc. Frontend-only change. country_picker provides bundled data and needs no network service or new application provider/controller. Existing journey outcomes are reused. Base: main. Delivery includes a reviewed commit and pull request; merge is not authorized.
Delivery: PR #65, branch
kyc-64. CountryService/CountryLocalizations from country_picker 2.0.28 provide bundled data and EN/RU names; Material controls add no-results recovery and accessible keyboard/touch selection. Existing profile/service/transport and KYC telemetry contracts are preserved. Format (five Dart files), frontend/app analyzer, make test-frontend (222 tests), release web build with Wasm dry run, and browser Poland search/selection passed. Native screen-reader/device keyboard QA and existing backend review-metric gaps remain documented release checks in docs/ux/kyc.md. PR is ready for review; merge is not authorized.Local deployment authorized by the user. PR #65 merged into main as
464bd2d565. Building the merged revision from an isolated clean checkout; current kyc-67 work is preserved. Fresh stable image resolution passed from the primary checkout after the containerized resolver could not resolve the isolated worktree's .git pointer (fatal: not a git repository). Only the frontend is being rebuilt/recreated; live services remain healthy during the build. Final deployment verification will be recorded after rollout.Local deployment completed from merged main revision
464bd2d565(PR #65). Fresh stable version/digest resolution passed; the isolated merged-source frontend build with --pull passed; only frontend was recreated with --no-deps and reached healthy state. Deployed image: sha256:75b5686be63d5b0b35758f0f8ba290cd9034af8cca4b1915750ccda544587b96.Verification passed: https://localhost:5126/ returns 200 with the existing trusted Caddy CA; proxied /api/v1/health reports ok; the HTTPS-served main.dart.js hash matches /srv/main.dart.js in the deployed container and contains the country-search and empty-state strings. make test-dev passed all tooling, Vault/Mongo/NATS isolation/transaction checks, authenticated Sendico currency/ledger checks and all seven service health checks. No email or payment was sent. Existing kyc-67 work remains untouched. Non-secret local deployment revision/image pins are recorded under .local/dev/deployments/kyc-64/.