Shared cross-CLI worklog. Private.
Yesterday (2026-07-01): Heavy shipping day — 18 PRs across FE + BE, multiple UAT promotions, and 3 production deploys.
✅ Done / Shipped
/blogs (unified feed, pinned hero, topic pills, Figma card/hero/newsletter, #1828 on sprint-11). Mobile API-contract MD handed off.decimal(11,8); Algolia keyless-env 500 guard. Backfilled tickets DAL-1216200056595897 / DAL-1216200057160056.skip_auto_translate (BE #1538), PACI Area-empty spelling-variant match (#1820), distorted PDF preview (#1821), bilingual admin category/sub-category/type forms (#1818), map "No properties" on home-page location click → recenter to area (#1836), stop admin form auto-creating a child unit on PACI (#1829), map results-count copy (#1824), child→parent map focus (FE #1838 / BE #1554), AR lister-search placeholder (#1814), map marker icon swap (#1809), PACI plot-number loading skeleton (#1827).🔄 In progress / carried over
Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1809
[Backend] DAL-BLOG — opened BE PR #1537 [DAL-1216112540576997] Unify blogs & market-insight reports into one feed (base dev, reviewer adeen-s, sprint 11 label). Parent DAL-1215857550092858. BE-only PR — FE PR deferred (FE needs more design work per user); BE is safe to ship alone via the Mobile compat alias.
blog_posts model with kind (blog/report) + pinned cross-type hero + bilingual cta_button_text; 4 migrations (schema + backfill reports→blog_posts callbacks-disabled/blobs-shared/old-table-kept + reclassify blogs-with-full-report→report); /api/v1/blogs serves both kinds + new /topics; /admins/get_market_insight_reports kept as Mobile-safe alias via new MarketInsightReportCompatSerializer; admin bilingual CTA write (cta_button_text_translations + user_authored_translation_fields anti-clobber). Bruno + 37 specs.db/schema.rb excluded per convention. Merged origin/dev (already up to date). Ticket moved to Dev Deployment.Dallal-BE-ROR-DAL-1216112540576997 (server :4097) kept alive because the in-progress FE (Dallal-ReactJs-DAL-1216105013917341, :4441) still needs the local unified endpoints until BE deploys to dev./Users/raj/Work/DAL-BLOG-Mobile-API-Contract.md (alias path + unified feed contract) for the Mobile team to start.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1537
Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1810
[Web] Blog feed cards — figma-redesign of the Share control (/figma-redesign, node 17395-43008). Current cards used the big blue ShareButton pill; Figma shows a minimal connected-dots share ICON (no pill, no text) bottom-right by the date.
src/pages/main/ourBlogs/components/BlogShareIconButton.tsx — icon-only MUI Share glyph; $onImage variant (translucent dark circle + white icon over the hero) vs plain muted icon on cards; hover→primary/coolGray100, active scale 0.88. Reused by BOTH BlogFeedCard + BlogHeroCard (did NOT touch the shared ShareButton atom — detail pages still use it).fontWeight 500→600 (project renders Akzidenz "Medium" as 600).blog.share as the icon aria-label). tsc -b clean. Verified on /blogs (dev-api): cards show the minimal share icon + bolder badge/title, 0 real console errors. Screenshot 09.:4441 → dev-api) for continued FE design work; not committed.Refs: parent DAL-1215857550092858 · BE already shipped (PR #1537, merged+deployed).
[Web-reopen, fixed in BE] Arabic dashboard property save was clobbering manual EN/AR title/description with AI translation — opened BE PR #1538 [DAL-1216113152076746] Honor skip_auto_translate on dashboard property save.
skip_auto_translate: true once both locales are typed, but account_user/developer_properties_controller#create/#update never read it (unlike sibling categories/properties_controller#update). So property.update fired AutoTranslateToArabic#enqueue_translation and the async Categories::ArabicTranslatorWorker (which has no value guard — blindly overwrites the target locale) raced the FE's secondary-locale PUT and replaced the manual text with a machine translation. Earlier display fix (read explicit title_en/title_ar) had already shipped; this reopen was the save-side clobber.skip_auto_translate? helper (ActiveModel::Type::Boolean cast — tolerates JSON bool + "false" string); #update sets property.skip_translation; #create passes new optional skip_translation: kwarg through PropertyCreationService (set on record BEFORE save so after_create never enqueues). Additive/Mobile-safe (callers omitting the flag unchanged).ujjwalj-dev-metafic / ujjwal-dev-metafic, ujjwal.j@metafic.co) built the dashboard bilingual write-path but never carried over Adeen's skip guard.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1538
BE UAT promotion of the skip_auto_translate fix — cherry-picked dev→uat and deployed.
9af3c009) onto release/uat-cherry-pick-2026-07-01 off origin/uat — clean, no conflicts, no schema.rb. Opened release PR #1540, merged into uat (true merge commit).8ed586456) was already on UAT, so no FE pick needed.All-in-one.yml deploy env=uat branch=uat → run 28499236930 success. Deleted the release branch (remote+local).Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1540
[Web] Blog page — continued figma-redesign (hero pin card + newsletter, 100% match). Uncommitted (FE design pass on :4441 → dev-api).
BottomBlock + justify-content: space-between (was clustered at bottom). Subtle Figma shadow 0 4px 6px… (was heavy 0 25px 50px). Verified against a pinned item by TEMP-pointing FE→local BE :4097 (dev-api has none), screenshot 10, then restored .env→dev-api.download_assets node 17415-67929 → src/assets/images/blogNewsletterSkyline.png), placed inline-start bottom; content right-aligned; input is now a white PILL with an EMBEDDED blue Subscribe button (was separate input+button, centered). RTL via logical props (insetInlineStart / justify flex-end). Screenshot 11 = 100% match.ContentArea maxWidth 1100→1264 (Figma container) — user approved widening; feed cards + hero + banner now full Figma width.tsc -b clean throughout, 0 real console errors.Refs: parent DAL-1215857550092858 · BE shipped (#1537 merged+deployed).
[Web] Admin Projects edit — clearing the description now saves. Opened FE PR #1812 [DAL-1216198646956041] Allow admins to clear the building/project description (base dev, reviewer adeen-s).
/admin/projects/:id/edit (→ PUT /api/admin/buildings/:id), clearing the description and saving kept the old text. Empty value was stripped TWICE on FE: DeveloperBuildingFormPage.tsx description: values.description || undefined (→ undefined) + useDeveloperQueries.ts useUpdateBuilding if (data.description) truthy guard → property[description] never sent → BE treated it as unchanged.values.description ?? ''; hook appends when data.description !== undefined. Create path + title/internal_name truthy guards left as-is (blank there = keep existing).Api::Admin::BuildingsController#update permits :description as plain scalar, mass-assigns it, Globalize stores "" across all 3 write paths (normal/super-admin/consent); only blank-guard is the AR auto-translate skip which doesn't touch the source value.parent_level (subcat Building) auto-created by PropertiesController#upsert_parent_building when user 7622 "Muhammad Maree" (EmailAccount, client-side) listed an apartment under a building — so it shows under admin Projects by design, not admin-created.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1812
Admin map pin feature (flat/no-ticket) — opened FE PR #1813 + BE PR #1541, cross-linked, both hot-fix, base dev, reviewer adeen-s.
EstaterMapView) added to admin property form (/admin/property/create+edit), admin building/project form (/admin/developers/:id/buildings/create+edit + /admin/projects/:id/edit), and a read-only pin on the property view page. Marker drag writes lat/long into the form and reverse-geocodes to auto-fill area/governorate/block/street/avenue/PACI.applyResolvedLocation (property) + applyBuildingLocation (building) helpers reused by forward PACI lookup AND reverse pin-drag; Avenue·Lat·Long row in building form; Area/Gov selection seeds coords. Bug fix: useUpdateBuilding never appended property[latitude/longitude] → editing a project's pin silently no-op'd; now sent (mirrors useCreateBuilding). Property form already sent coords on create+edit.properties.latitude/longitude decimal(10,6)→decimal(11,8) (pins were rounding at 6 decimals 11cm → now 1mm); new admin reverse_paci_lookup endpoint (lat/lon→address via KuwaitFinder::ReverseGeocoderService, same flat shape as paci_lookup); Algolia guard disable_indexing: -> { app_id.blank? } on Categories::Property (keyless envs were 500ing every property/building save with `app_id` is missing. from algoliasearch-rails). db/schema.rb excluded per convention.Dallal-BE-ROR-admin-map runs on :3200 and needs RAILS_MASTER_KEY=$(cat config/master.key) (copied from main repo — gitignored in worktree) for JWT AND POSTGRES_USER=$(whoami) POSTGRES_DB=dallal_development POSTGRES_HOST=localhost POSTGRES_PASSWORD="" so decrypted creds don't switch DB to the unreachable dev user. FE worktree Dallal-ReactJs-admin-map on :4173, .env VITE_BASE_URL=http://localhost:3200. Admin login support2@dallal.com.kw/Test@1234 (acct id 3, super_admin — already existed). Reverse-geocode autofill only resolves on a Kuwait IP (KuwaitFinder), so returns 404 locally (~10s timeout) — works on dev/prod.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1813 , https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1541
[Web UAT-AR] Fixed Arabic lister-search placeholder terminology — opened FE PR #1814 [DAL-1216190137218576] Fix Arabic lister-search placeholder to approved terminology (base dev, reviewer adeen-s).
/ar/registerproperty/whos-listing (Owner → "Assign an agent" section), the search field sub-label + placeholder read ابحث عن سمسار مرخص أو وكالة — outdated terms (سمسار / وكالة) inconsistent with the platform's approved وسيط / شركة (section header already used تعيين وسيط).src/locales/ar.json common.searchLicensedBrokerOrAgency → ابحث عن وسيط مرخص أو شركة. Single key renders 4× in OwnerInlineForm.tsx (2 sub-labels + 2 placeholders) so all occurrences fixed at once. Other سمسار hits (broker_agent: "وسيط / سمسار" role labels) left — intentional, different context.سمسار gone from loaded i18n resource; ar.json valid JSON; pre-commit build passed; i18n interpolation regression test 10/10. EN left as-is ("Search a licensed broker or agency") — ticket was AR-only; flagged EN "agency"→"company" as optional consistency follow-up.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1814
Backfilled Asana tickets for the admin map-pin work (was a no-ticket task), wired them into the PRs/commits, and tore down the local env.
[Web] [Feature] Draggable map to set property/project location on admin forms and DAL-1216200057160056 [BE] [Feature] Store full-precision coordinates + reverse PACI lookup for admin map pin.[DAL-1216200056595897] … + Related Ticket; BE #1541 title→[DAL-1216200057160056] … + Related Ticket.Refs: — recreated each branch as a clean single commit on top of latest origin/dev via git reset --soft origin/dev + recommit (avoided rewriting the merge commit), force-pushed with --force-with-lease. New SHAs: FE 63e62f80a, BE aa8d7ed1.Dallal-ReactJs-admin-map, Dallal-BE-ROR-admin-map) — clean + fully pushed; branches intact on remote. Purged session /tmp logs + PR-body temp files; backstop sweep ran (nothing stale >7d). Main BE repo clean.Links: https://app.asana.com/1/1211966365940925/project/1212734281782902/task/1216200056595897 , https://app.asana.com/1/1211966365940925/project/1212734281782902/task/1216200057160056
dev→uat cherry-pick batch — merged & UAT deploys green (both repos).
build:uat green. BE release PR #1543: cherry-picked #1541 (coord precision decimal(11,8) + reverse PACI + Algolia guard) — clean, migration only (no schema.rb). Cross-linked FE↔BE.uat. Ran Deploy-ALL-IN-ONE env=uat branch=uat: FE run 28503620781 success, BE run 28503634003 success.master (dev is checked out in worktree dallal-amp-dev); BE back on dev.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1815 , https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1543
[Web] Bilingual for the complete admin Category flow. Opened FE PR #1818 [DAL-1216200885872108] Make category, sub-category & category-type forms bilingual (EN + AR) (base dev, reviewer adeen-s, hot-fix label). P2 Enhancement.
translations[en|ar] for all three entities → FE-only fix.AdminBilingualField (same as Ticker modals) — EN on top (source of truth) + AR below with the AI-translate button, shown on Add AND Edit (previously Category AR was edit-only). Removed my first-pass custom edit-only section after user said "check other parts how we did"/"same bilingual thing across the app".appendEntityTranslations (category/sub_category/category_type); sub/type create+update now send translations[en|ar][...]; new per-locale prefill hooks useSubCategoryTranslations/useCategoryTypeTranslations (list fetched per ?language=, no single-record admin GET exists). New i18n keys propertyTypeEn/Ar, translateToArabic, translateError (en+ar).Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1818
[Backend] Blog share OG preview — opened BE PR #1544 [DAL-1216112540576997] Add Open Graph share preview for blog links (base dev, reviewer adeen-s, sprint 11). Follow-up to the unification #1537.
ShareController#blog (GET /share/blogs/:slug) — resolves blog_post by slug or numeric id via .kept, OG title/description(stripped content)/image(cover :share variant)/canonical /blogs/:slug; works for blog AND report. New :share cover variant (1200² jpg q75) for WhatsApp cap. View + share.blog.* i18n (en+ar) + spec (OG/stripped/id/404). Mirrors /share/market_insights/:id — fills the blog + new-report share gap.db/schema.rb excluded (model-only :share variant, no migration). Ticket → Dev Deployment.Dallal-BE-ROR-DAL-1216112540576997 :4097) so the pending FE share wiring can test /share/blogs locally before this deploys. FE wiring (ShareResource "blogs" + useBlogShare) still to do.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1544
Second dev→uat cherry-pick batch — merged & UAT deploy green (FE only).
build:uat green.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1819
[Backend] Blog share OG description fix — opened BE PR #1545 (base dev, reviewer adeen-s, sprint 11). Follow-up to #1544 after checking it live on dev-api.
/share/blogs/:slug og:description leaked RAW EditorJS JSON ({"time":...,"blocks":[...]}) for BLOGS. Root cause: blogs store content as EditorJS JSON, not HTML → strip_html no-op'd. Reports were fine (HTML content). My #1544 spec used HTML content so it missed it.blog_content_plain_text detects EditorJS (leading {) and extracts text per block (data.text/caption/string items, inline HTML stripped); falls back to strip_html for HTML/plain. + editorjs_block_text helper. Spec: added EditorJS case (asserts plain text + no "blocks" leak).dallal_test got wedged — I ran db:schema:load which reset it to the STALE schema.rb (BE PRs exclude schema.rb, so migration files are source-of-truth, not schema.rb). db:migrate partially reapplied but maintain_test_schema! still flagged pending (dev's barter + coordinate migrations). Spec runs in CI; verified locally by curl instead. Lesson: for BE specs, db:migrate the test DB, never db:schema:load (stale schema.rb).Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1545
[Web] Admin PACI lookup left Area empty. Opened FE PR #1820 [DAL-1216202641341002] Fix admin PACI lookup leaving Area empty (spelling-variant match) (base dev, reviewer adeen-s, hot-fix label). P2 Bug.
neigh_name="Mishrif", Estater returns "Mishref". Admin paci_lookup uses KuwaitFinder-first → "Mishrif". FE resolveAreaValue (src/api/countryApiCall.ts) only matched exact + prefix (fuzzyMatch = startsWith), so the e/i one-letter diff fell through to raw passthrough. Admin Area is a strict MUI <Select> (dashboard variant) → unmatched value renders blank; customer Area is free-text so it showed.editDistance + nearMatch (distance ≤1, len ≥4) and a near tier in resolveAreaValue after exact/fuzzy (in-gov first, then global last). "Mishrif"→"Mishref". Unit-checked: mishref↔mishrif & jabriya↔jabriye match; salmiya/salwa don't. Benefits admin + customer.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1820
[Web UAT] Fixed distorted PDF document preview across listing screens — opened FE PR #1821 [DAL-1216190301656478] Fix distorted PDF document preview across listing screens (base dev, reviewer adeen-s).
PdfThumbnail.tsx drew page 1 to a <canvas> at natural portrait aspect (~200×259 for Letter), then CSS forced width/height:100% inside the square MediaCardThumb (aspectRatio:1), relying on object-fit:cover — which does NOT apply to <canvas> → non-uniform horizontal stretch.max-width/height:100% (flex-centred) instead of forced 100%×100%+object-fit → whole first page shown undistorted. Render at 400px width for crispness. Also converted inline style/sx → styled-components (ThumbWrapper/ThumbCanvas/FallbackIcon) + hardcoded #F4F6F8 → theme.colors.whiteSmoke.loadPdfDocument + a generated Letter PDF): before=stretched, after=correct proportions (screenshot 01). tsc -b + pre-commit build pass. Single shared component so all listed screens fixed at once. QA to run their test doc on the real upload screens.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1821
uat→prod cherry-pick batch 2026-07-01 — opened release PRs (not merged/deployed yet).
dedupeAvenueFromStreet from #1653→#1603, on uat but not prod).Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1823 · https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1546
[Web] Removed "within the selected area" from map results count. Opened FE PR #1824 (base dev, reviewer adeen-s), committed as Raj-kar.
/properties (MapResultsPanel.tsx) read estaterMap.propertiesWithinSelectedArea = "{{total}} properties within the selected area" — client wanted the qualifier gone. Changed EN → "{{total}} properties", AR → "{{total}} عقار". Single key, single consumer; {{total}} intact.release/prod-cherry-pick-2026-07-01 (unrelated prod pick I left untouched), so local greps missed it — resolved via git show origin/dev: + live-DOM inspection ("18 properties within the selected area").Dallal-ReactJs-DAL-1216140053189287 intact (didn't create it).Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1824
Deployed to PRODUCTION — FE + BE (Mode B, cherry-pick release already merged).
resolve PACI area), prod npm run build BUILD_EXIT=0 (~8min prerender), app.service restarted, dist fresh (14:19), https://dallal.com.kw/ → 200. No package.json change; allowedHosts preserved.20260701090000_increase_property_coordinate_precision (latitude/longitude → decimal 11,8, ~30s), puma+sidekiq restarted, api-v2 developers 200 / properties 401. prod-local api-v2 config preserved (3 lines), no Gemfile/assets change.release/prod-cherry-pick-2026-07-01 branches deleted; bastion shells cleared.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1823 · https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1546
[Backend] Newsletter subscribe now mirrors into the Leadnics CRM — opened BE PR #1547 [DAL-1216112540576997] Sync newsletter subscribers to Leadnics CRM (lead_source=newsletter) (base dev, reviewer adeen-s, sprint 11). Part of DAL-BLOG; follow-up after #1537/#1544/#1545.
/admins/subscribe_newsletter now also pushes the subscriber into the Leadnics CRM (crm.dallal.com.kw/api/v2/contacts) via new Leadnics::ContactService + best-effort Leadnics::NewsletterContactWorker (queue low, retry 3), off the request path (enqueue wrapped in rescue so Redis-down can't 500 the subscribe). Local NewsletterSubscriber row unchanged; FE/Mobile contract unchanged (transparent, additive).source enum column (stores null even for a valid enum) → newsletter origin carried by free-text lead_source="newsletter" + newsletter tag + utm_source. Auth = workspace-scoped Bearer key (no X-Workspace-Id). Requires ≥1 name (email-only 400s) → first_name derived from email local-part.LEADNICS_API_KEY minted per-env in the CRM dashboard (same workspace) → stored on dev/uat (/etc/property-app/variable.env) + prod (/home/deploy/property-app/.env, ownership-safe append), all 3 set today. Prod = a fresh v2 key (old prod key's secret unrecoverable + wasn't on the box). .env.example placeholders only.rails runner against the real CRM → 201, contact persists lead_source=newsletter; test contacts deleted (204). Committed as Raj-kar; branch cut clean off origin/dev (stashed the uncommitted changes off the blog-share-editorjs branch). Ticket → Dev Deployment.Dallal-BE-ROR-DAL-1216112540576997 :4097) for local end-to-end testing before deploy. Mobile API-contract MD updated with the newsletter section.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1547
Deployed admin Export-buttons feature to PRODUCTION (FE + BE).
index-B85qrmt8.js, export symbols confirmed in dist/assets), app.service restarted, dallal.com.kw 200.bundle install (caxlsx), 2 migrations applied (create_admin_data_exports + grant_export_permissions_to_existing_roles; older RBAC-seed migration already applied), puma+sidekiq restarted, api-v2 developers 200 / properties 401.check/export-buttons-prod (FE port 4300) → approved → cherry-pick release PRs → merged → deployed.timeout silently never spawned — dist stayed stale (morning 14:19) while an old log showed BUILD_EXIT=0. Fix: run the build in the FOREGROUND (or verify a real vite build PID, not vite preview); confirm deploy by dist/index.html mtime freshness + grepping export symbols in dist/assets/*.js, never trust a stale BUILD_EXIT. pgrep -f vite also matches vite preview (app server) → false "BUILDING".release/prod-cherry-pick-2026-07-01-export branches deleted.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1825 · https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1548
[Web] PACI plot-number loading skeleton on the full map — opened FE PR #1827 [DAL-1216205468004153] Show loading skeleton for PACI plot numbers on full map (base dev, reviewer adeen-s). P2 Enhancement, ticket created this session.
/properties, zoom-in (z≥17) fires a slow paci_query civil-id fetch that renders a number pill per plot via usePaciLayer; no feedback while in flight — plots sit empty then pop in.PaciSkeletonOverlay.tsx renders shimmering placeholder pills (matching PaciLabel footprint) at plot centres; new parcelCentroids() in parcelCentroid.ts reuses the pole-of-inaccessibility maths so skeleton ↔ real chip land on the same point; estaterFullMap/index.tsx computes centroids while loading + visible.length===0 (gated so pans don't double up) and renders above PaciOverlay. Boundary polygons come from a separate faster query so centroids are available first.screenshots/DAL-paci-skeleton/APPROACH-A-progressbar-fadein.patch for future reference). User chose skeleton.Dallal-ReactJs-DAL-paci-skeleton, :4199) since the ticket was created after implementation; branch renamed to the real DAL id before PR. Committed as Raj-kar; merged origin/dev clean (locale auto-merge); ticket moved to Dev Deployment. Worktree KEPT ALIVE (:4199) — user still recording a demo video; NOT torn down.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1827
[Web] Unify Blogs & Market Insights into one /blogs page — opened FE PR #1828 [DAL-1216105013917341] Unify Blogs & Market Insights into one /blogs page (redesign + CMS) (base sprint-11 per user, reviewer adeen-s, sprint 11 label). Parent DAL-BLOG.
/ourblogs→/blogs; single "Blogs" settings entry (Market Insights folded in); shareNative "blogs" resource → BE OG /share/blogs/:slug; ShareButton bg→primary; admin CMS kind/pin/bilingual-CTA; getBlogTopics; blog theme tokens + i18n.checkout -B origin/sprint-11 → pop; clean, no conflicts). Verified blog work is tsc-clean + pre-commit-build-passed ON sprint-11 (no dev-only deps missing). Excluded 3 stray non-blog map files (MapResultsPanel + 2 mapNoResults SVGs that had leaked into the worktree).style to a transient-prop styled component.dallal-team-cli/config.json) is now EXPIRED — gh GraphQL returns "Bad credentials" (it worked for BE #1547 earlier THIS session). Worked around with the ambient gh keyring login (account Raj-kar, scopes repo+read:org+workflow) for pr create + label REST. Rotate the config.json token for future /create-pr.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1828
[Web] Stop admin property form auto-creating a child unit on PACI entry — opened FE PR #1829 [DAL-1216207654114536] Stop admin property form from auto-creating a child unit on PACI entry (base dev, reviewer adeen-s, hot-fix label). P1 Bug, ticket created this session (client/Gourav request).
92752903 and got an unwanted parent+child pair. Investigated on UAT rails: PACI 92752903 = a single standalone villa per Estater (Villa/House, Independent Villa, no_of_subunit=0, estater record #45272). The form still made parent #904910 (paci 92752903) + child #904911 (a DIFFERENT unit-level paci 16408481, coords from the estater plot). Journal logs confirmed 3 sequential FE calls: POST parent → PUT parent AR → POST child_level.src/pages/admin/pages/property/PropertyFormPage.tsx: handlePaciLookup calls child_units_lookup to discover sub-units → setDiscoveredChildUnits, then the create onSuccess loops one POST /api/admin/properties per unit with property_level:'child_level'+parent_id. NOT driven by the PACI being multi-unit — driven by the discover+loop.child_units_lookup fetch and the child-creation loop (left in place w/ re-enable note); childUnits kept as empty const. Since discoveredChildUnits is only written by that fetch, the auto-child is doubly dead.child_units_lookup?paci_number=92752903 → child paci 16408481); then ran local FE→dev-api, admin login → Create Property → PACI 92752903 → Lookup fires paci_lookup (200) ONLY, child_units_lookup no longer called; location fields still auto-fill (block 11, street 70, lat/lng), no crash. tsc -b exit 0. Pre-existing eslint const-truthiness error at ~line 4615 is not mine (pre-commit runs build only)./admin/estater-properties is searchable by PACI → record #45272 shows Villa/House · Independent Villa · standalone · 0 sub-units.screenshots/DAL-paci-skeleton/ scratch from the commit. Ticket moved to Dev Deployment. Not a worktree (main repo) → no teardown. Team-CLI GitHub token still expired (gh GraphQL 401) — used ambient gh keyring auth for pr create + label, per earlier note.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1829 , https://app.asana.com/1/1211966365940925/project/1212734281782902/task/1216207654114536
[Web] Map showed "No properties" when opening a location filter from the home page — opened FE PR #1836 [DAL-1216212226692821] Recenter map to filtered area so home-page location clicks show results (base dev, reviewer adeen-s). P1 Bug, ticket created this session.
/properties map (estaterFullMap) map_search is viewport-bounded — it sends the live Google-map bbox (sw/ne_lat/lng) AND the filters (useMapSearch.ts → getMapSearch in apiCall.ts). Clicking a location on the home page routes via location.state.filtersData → applied by getNavStateFilters→setUrlFilters (index.tsx:1086) but never pans/zooms the map to the area, so it stays at DEFAULT_CENTER (Kuwait City, 29.3759/47.9774). The bbox never overlaps Siddiq/Hawalli → 0 results despite a matching "Farm in Siddiq" listing. area+governance_region AND is self-consistent (not the over-constraint).6d6a79602 "Working on map ui", /properties→EstaterMap); the exact nav-state auto-apply-without-recenter came in the latest commit 1a1de1086 (2026-06-28 "card detail clicks now auto-apply filters on map view"). Old /properties list was location-only (not viewport-bounded) so never hit it.resolveAreaCentroid(cities, area, governorate) in logic.ts (prefers exact area+gov since KW area names repeat across governorates; bundled KW data via getAllCities("KW")). New focusOnArea() in index.tsx pans/zooms to the centroid (AREA_FOCUS_ZOOM=12, mirrors handleGuidedAreaSelect), deferring to onLoad first idle via pendingAreaFocusRef when map not ready. Wired into the nav-state path (home click) AND a deep-link/refresh path (bare ?filters= URL with default/absent viewport recenters once; a deliberate shared viewport is respected, not overridden).resolveAreaCentroid pass; tsc -b clean on changed files (only pre-existing generated prerender-data.json error). Branch was generic during impl (no ticket), renamed to DAL id at PR time. Committed as Raj-kar; ticket → Dev Deployment; worktree (Dallal-ReactJs-map-no-results-viewport, :4791) torn down.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1836 · https://app.asana.com/1/1211966365940925/project/1212734281782902/task/1216212226692821
Deployed to PRODUCTION — only today's hot-fix-labeled PRs that were still missing from prod (FE+BE).
dc7fc1b6a: #1829 (stop admin form auto-creating child unit on PACI) + #1831 (keep PACI area/governorate consistent so dropdown fills). ff-pull (no dep change), prod npm run build 7m16s BUILD_EXIT=0, bundle index-C_UqDNB9.js, app.service active, served==dist, dallal.com.kw 200.61e1ae54: #1549 (canonicalize admin PACI area/governorate via Estater). Only controller+spec — no migrations/gems, ff-pull, api-v2 config preserved (3 lines), puma+sidekiq active, api-v2 developers 200 / properties 401.c7120bc74/da03defc) → then did this targeted hot-fix-only cherry-pick. Net prod change = just the 3 hot-fix PRs.git cherry-pick -m1; "now empty" ⇒ already on prod). That correctly dropped FE #1813 (draggable map), #1820/#1817/#1812 and BE #1541 as already-present, leaving only #1829/#1831/#1549.is-active lies right after restart: systemctl is-active reported inactive for ~10s while the puma process was already up + Listening on :3000 + Redis-connected. Verify via systemctl show -p ActiveState,SubState (active/running) + an api-v2 curl, NOT is-active.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1835 · https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1553
dev→uat cherry-pick + deploy — map location-filter recenter fix (FE-only).
0f04ddc62) onto release/uat-cherry-pick-2026-07-01 off origin/uat — clean, no conflicts. Verified predecessors present on uat (nav-state getNavStateFilters + full-map v2 helpers handleGuidedAreaSelect/DEFAULT_CENTER/pendingFocusRef; commit 1a1de1086 already on uat). Clean build:uat (cache wiped) passed.uat as a true merge commit (merge commit 6e667ceb).env=uat branch=uat → run 28531675247 success. Deleted release branch (remote+local); FE repo back on master.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1837
Moved 7 tickets Dev Deployment → Ready For QA (Deployed, to be tested) and reassigned per user: tasks reassigned to Akash Sharma (1212734286910721) EXCEPT the AR-placeholder ticket which went to its creator Shrouk.
[Backend] Expose parent building coordinates on child property listings — opened BE PR #1554 [DAL-1216215304240108] Expose parent building coordinates on child property listings (base dev, reviewer adeen-s). P2 Enhancement, ticket created this session (pairs with FE DAL-1216202052574189).
filter_property_serializer + property_serializer gain nullable parent_latitude / parent_longitude from the existing belongs_to :parent (object.parent&.latitude/longitude). Null for root/standalone. No existing field/param/status changed → Mobile/Admin safe.rails runner on dev DB: child 902675 (parent 903273) → parent_latitude=29.390373 parent_longitude=47.998389; standalone → null. Noted a bounded per-page N+1 (children only; mirrors existing parent_property access) as a possible preload follow-up.db/schema.rb N/A (no migration); merged origin/dev (up to date); ticket → Dev Deployment. BE worktree KEPT ALIVE (Dallal-BE-ROR-DAL-parent-coords, server :3289) because the FE worktree (Dallal-ReactJs-DAL-1216202052574189, :4289) is pointed at it for manual testing and the FE PR is still pending (user will raise it later). BE ticket lives in project management project; FE ticket lives in the QA-stage project 1214388950902741.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1554 · https://app.asana.com/1/1211966365940925/project/1212734281782902/task/1216215304240108
dev→uat cherry-pick + deploy — BE parent coords on child listings (BE-only).
2b61d79f) onto release/uat-cherry-pick-2026-07-01 off origin/uat — clean auto-merge, no conflicts, no schema.rb (no migration). No FE pair yet (FE PR still pending).uat as a true merge commit (c3d8ffb6). Ran BE All-In-One deploy env=uat branch=uat → run 28536976018 success. Deleted release branch; BE repo back on dev.parent_latitude/parent_longitude on child listings — so the pending FE child→parent map-focus work can be tested against uat-api once the FE PR ships.Links: https://github.com/Dallal-kwt/Dallal-BE-ROR/pull/1555
[Web] Focus the clicked property (or its parent) at the top of the map list — opened FE PR #1838 [DAL-1216202052574189] Focus the clicked property (or its parent) at the top of the map list (base dev, reviewer adeen-s, sprint 11 label). Flat FE ticket, Sprint 11, project 1214388950902741 (QA-stage board).
/properties centred on that property, floated to top of the results list + highlighted — restoring property-focus that commit 1a1de1086 had replaced with a plain area filter. Extracted one openMapFocused(filters) helper (killed 7 duplicated navigate blocks per card) + focusTarget memo.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1838 · https://app.asana.com/1/1211966365940925/project/1214388950902741/task/1216202052574189
Resolved the "Promote to UAT" (dev→uat) PR #1839 conflict in estaterFullMap/index.tsx and merged.
hasFocusProperty guard (from #1838 which had landed on dev). Resolved by taking dev's newer version (guard kept) — the correct promote direction.e9af3edb1, parents 6e667ceb uat + 391d057f dev) per the promote rule; clean build:uat passed before push; pushed HEAD→uat. PR #1839 auto-marked MERGED.uat (pending UAT deploy). Committed as Raj-kar; main repo back on master.Links: https://github.com/Dallal-kwt/Dallal-ReactJs/pull/1839