<?xml version='1.0' encoding='utf-8'?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://praritsidana.com/</loc><lastmod>2026-11-11T06:05:21.919417+00:00</lastmod></url><url><loc>https://praritsidana.com/blog</loc><lastmod>2026-11-11T16:36:38.622764+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/document-integration-readiness-without-implying-live-execution</loc><lastmod>2026-11-11T16:36:38.622764+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/distinguish-a-technical-case-study-from-a-product-outcome-claim</loc><lastmod>2026-11-11T16:36:38.467383+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/handle-a-websocket-disconnect-in-a-django-channels-consumer</loc><lastmod>2026-11-11T16:36:38.316630+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/separate-pending-forecast-horizons-from-evaluated-results</loc><lastmod>2026-11-11T16:36:38.179957+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/evaluate-a-forecast-with-time-ordered-splits</loc><lastmod>2026-11-11T16:36:38.014518+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/cancel-a-media-processing-job-and-clean-up-partial-output</loc><lastmod>2026-11-11T16:36:37.876238+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/align-video-captions-with-a-transcript-timebase</loc><lastmod>2026-11-11T16:36:37.712674+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/explain-what-electron-safestorage-protects-on-windows</loc><lastmod>2026-11-11T16:36:37.550954+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/pass-a-local-file-safely-across-an-electron-boundary</loc><lastmod>2026-11-11T16:36:37.387433+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/choose-an-encoder-fallback-when-hardware-encoding-fails</loc><lastmod>2026-11-11T16:36:37.232743+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/preserve-aspect-ratio-when-exporting-a-vertical-clip</loc><lastmod>2026-11-11T16:36:37.068157+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-video-segments-within-a-declared-duration-policy</loc><lastmod>2026-11-11T16:36:36.912492+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/inspect-a-video-file-with-ffprobe-before-processing-it</loc><lastmod>2026-11-11T16:36:36.771499+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/check-public-asset-paths-after-deploying-under-a-subpath</loc><lastmod>2026-11-11T16:36:36.636327+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/practice-a-release-rollback-with-an-explicit-schema-boundary</loc><lastmod>2026-11-11T16:36:36.486380+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/trace-a-request-across-api-and-worker-boundaries</loc><lastmod>2026-11-11T16:36:36.339622+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/return-a-real-404-for-a-missing-application-route</loc><lastmod>2026-11-11T16:36:36.187499+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-deleted-urls-out-of-an-xml-sitemap</loc><lastmod>2026-11-11T16:36:36.042445+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/serve-meaningful-html-before-react-loads</loc><lastmod>2026-11-11T16:36:35.874865+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/schedule-a-maintenance-command-with-a-systemd-timer</loc><lastmod>2026-11-11T16:36:35.710841+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/distinguish-liveness-from-readiness-in-an-application-health-check</loc><lastmod>2026-11-11T16:36:35.541848+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/verify-a-postgresql-backup-by-restoring-it</loc><lastmod>2026-11-11T16:36:35.356320+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/run-django-s-deployment-checks-before-a-release</loc><lastmod>2026-11-11T16:36:35.194128+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/set-proxy-timeouts-for-a-streamed-api-response</loc><lastmod>2026-11-11T16:36:35.035613+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-deployment-secrets-out-of-a-docker-image</loc><lastmod>2026-11-11T16:36:34.881133+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/wait-for-database-readiness-in-docker-compose</loc><lastmod>2026-11-11T16:36:34.730912+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-a-manual-fallback-when-an-ai-service-is-unavailable</loc><lastmod>2026-11-11T16:36:34.588142+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/store-the-evidence-behind-an-ai-recommendation</loc><lastmod>2026-11-11T16:36:34.434518+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/evaluate-a-classifier-when-classes-are-imbalanced</loc><lastmod>2026-11-11T16:36:34.234169+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/load-an-inference-resource-through-fastapi-lifespan</loc><lastmod>2026-11-11T16:36:34.067305+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/stream-an-ai-response-while-keeping-a-final-authoritative-state</loc><lastmod>2026-11-11T16:36:33.905321+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/cache-ai-responses-using-all-inputs-that-affect-the-result</loc><lastmod>2026-11-11T16:36:33.746031+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/version-prompts-with-their-evaluation-fixtures</loc><lastmod>2026-11-11T16:36:33.594978+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/redact-sensitive-fields-before-sending-context-to-a-model</loc><lastmod>2026-11-11T16:36:33.384717+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/set-a-bounded-budget-for-an-ai-workflow</loc><lastmod>2026-11-11T16:36:32.996299+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/separate-model-failures-from-application-failures-in-an-ai-endpoint</loc><lastmod>2026-11-11T16:36:32.860114+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/limit-an-ai-tool-to-an-explicit-argument-schema</loc><lastmod>2026-11-11T16:36:32.720112+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/put-human-approval-before-an-ai-triggered-action</loc><lastmod>2026-11-11T16:36:32.577813+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/validate-ai-generated-json-at-an-application-boundary</loc><lastmod>2026-11-11T16:36:32.416029+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/remove-deleted-documents-from-every-rag-storage-layer</loc><lastmod>2026-11-11T16:36:32.266471+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/audit-pdf-text-extraction-before-indexing-documents</loc><lastmod>2026-11-11T16:36:32.126737+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/reindex-documents-when-an-embedding-model-changes</loc><lastmod>2026-11-11T16:36:31.962290+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/treat-retrieved-instructions-as-untrusted-rag-content</loc><lastmod>2026-11-11T16:36:31.800956+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/test-a-rag-system-against-a-fixed-question-set</loc><lastmod>2026-11-11T16:36:31.628239+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/handle-an-unanswerable-rag-question-explicitly</loc><lastmod>2026-11-11T16:36:31.470336+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/show-source-citations-that-point-to-the-retrieved-passage</loc><lastmod>2026-11-11T16:36:31.249589+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-tenant-filters-inside-the-retrieval-query</loc><lastmod>2026-11-11T16:36:31.066303+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-a-reranking-stage-to-a-small-retrieval-pipeline</loc><lastmod>2026-11-11T16:36:30.691991+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/build-a-lexical-search-baseline-before-semantic-retrieval</loc><lastmod>2026-11-11T16:36:30.557870+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-document-ids-stable-across-rag-reindexing</loc><lastmod>2026-11-11T16:36:30.412195+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/compare-chunk-overlap-with-a-small-retrieval-fixture</loc><lastmod>2026-11-11T16:36:30.220103+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/choose-document-boundaries-before-chunking-a-rag-corpus</loc><lastmod>2026-11-11T16:36:30.055387+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/debounce-a-search-input-without-delaying-its-visible-value</loc><lastmod>2026-11-11T16:36:29.901744+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/recover-a-websocket-driven-react-inbox-after-reconnect</loc><lastmod>2026-11-11T16:36:29.722375+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/release-object-urls-after-a-react-upload-preview</loc><lastmod>2026-11-11T16:36:29.560970+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/split-a-rarely-used-react-route-with-lazy-and-suspense</loc><lastmod>2026-11-11T16:36:29.402038+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/manage-focus-when-a-react-modal-opens-and-closes</loc><lastmod>2026-11-11T16:36:29.236321+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/show-field-errors-accessibly-in-a-react-form</loc><lastmod>2026-11-11T16:36:29.048254+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/roll-back-an-optimistic-react-update-when-a-save-fails</loc><lastmod>2026-11-11T16:36:28.919238+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/invalidate-the-right-tanstack-query-entries-after-a-mutation</loc><lastmod>2026-11-11T16:36:28.775525+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/define-a-typescript-union-for-asynchronous-ui-states</loc><lastmod>2026-11-11T16:36:28.621592+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-stable-keys-when-a-react-list-can-reorder</loc><lastmod>2026-11-11T16:36:28.500152+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/reset-a-react-editor-when-its-record-changes</loc><lastmod>2026-11-11T16:36:28.350073+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/cancel-stale-search-requests-in-a-react-component</loc><lastmod>2026-11-11T16:36:28.177034+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/remove-derived-react-state-from-a-filtered-list</loc><lastmod>2026-11-11T16:36:28.027875+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/reconcile-scheduled-work-from-durable-application-state</loc><lastmod>2026-11-11T16:36:27.854367+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/apply-backpressure-before-a-queue-grows-without-bounds</loc><lastmod>2026-11-11T16:36:27.676680+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/use-a-circuit-breaker-around-a-failing-dependency</loc><lastmod>2026-11-11T16:36:27.520480+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/record-ambiguous-outcomes-after-a-provider-timeout</loc><lastmod>2026-11-11T16:36:27.364054+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/protect-an-oauth-callback-from-mismatched-state</loc><lastmod>2026-11-11T16:36:27.225335+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/deduplicate-webhook-deliveries-by-provider-event-id</loc><lastmod>2026-11-11T16:36:27.093332+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/verify-a-webhook-before-trusting-its-event-body</loc><lastmod>2026-11-11T16:36:26.968775+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/expose-task-progress-without-treating-it-as-completion</loc><lastmod>2026-11-11T16:36:26.828402+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/route-slow-media-tasks-away-from-short-api-tasks</loc><lastmod>2026-11-11T16:36:26.705196+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/prevent-overlapping-runs-of-a-periodic-queue-job</loc><lastmod>2026-11-11T16:36:26.571108+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/schedule-celery-beat-jobs-in-a-declared-timezone</loc><lastmod>2026-11-11T16:36:26.398874+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/separate-retryable-failures-from-permanent-celery-errors</loc><lastmod>2026-11-11T16:36:26.121858+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/design-a-celery-task-that-can-run-twice-safely</loc><lastmod>2026-11-11T16:36:25.959787+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/keep-django-serializer-validation-errors-useful-to-a-form</loc><lastmod>2026-11-11T16:36:25.781676+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/use-select-for-update-for-a-contested-state-transition</loc><lastmod>2026-11-11T16:36:25.633907+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/scope-a-django-cache-key-to-the-user-and-input</loc><lastmod>2026-11-11T16:36:25.372268+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-a-nullable-field-through-a-staged-django-migration</loc><lastmod>2026-11-11T16:36:25.229962+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/test-a-django-endpoint-s-public-and-private-responses</loc><lastmod>2026-11-11T16:36:25.089285+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/validate-file-uploads-at-the-django-boundary</loc><lastmod>2026-11-11T16:36:24.951769+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/explain-csrf-protection-in-a-cookie-authenticated-api</loc><lastmod>2026-11-11T16:36:24.781687+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/validate-patch-requests-without-erasing-omitted-values</loc><lastmod>2026-11-11T16:36:24.629766+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/choose-cursor-pagination-for-a-changing-activity-feed</loc><lastmod>2026-11-11T16:36:24.476935+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-object-permissions-to-a-django-rest-framework-endpoint</loc><lastmod>2026-11-11T16:36:24.316208+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/run-follow-up-work-only-after-a-django-transaction-commits</loc><lastmod>2026-11-11T16:36:24.189990+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/use-database-constraints-for-rules-a-serializer-cannot-enforce-alone</loc><lastmod>2026-11-11T16:36:24.041741+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/find-an-n-1-query-in-a-django-list-endpoint</loc><lastmod>2026-11-11T16:36:23.839520+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/return-useful-exit-codes-from-a-python-command</loc><lastmod>2026-11-11T15:57:32.513939+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/make-a-scheduled-python-job-resume-from-a-checkpoint</loc><lastmod>2026-11-11T15:57:32.070862+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/test-a-file-processing-script-with-temporary-directories</loc><lastmod>2026-11-11T15:57:31.670037+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/detect-duplicate-local-files-using-hashes-and-an-explicit-policy</loc><lastmod>2026-11-11T15:57:31.260431+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/capture-a-subprocess-timeout-and-its-useful-error-output</loc><lastmod>2026-11-11T15:57:30.818993+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-request-context-to-python-logs-without-exposing-payloads</loc><lastmod>2026-11-11T15:57:30.309707+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/stream-a-large-text-transformation-without-reading-the-whole-file</loc><lastmod>2026-11-11T15:57:29.883793+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/clean-up-child-tasks-when-an-asyncio-operation-fails</loc><lastmod>2026-11-11T15:57:29.459558+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/bound-concurrent-requests-with-asyncio-in-python</loc><lastmod>2026-11-11T15:57:29.002459+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/handle-daylight-saving-changes-in-a-python-scheduler</loc><lastmod>2026-11-11T15:57:28.528236+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/add-a-dry-run-mode-to-a-python-cleanup-command</loc><lastmod>2026-11-11T15:57:28.071660+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/validate-a-csv-import-before-changing-application-data</loc><lastmod>2026-11-11T15:57:27.621388+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/write-a-python-export-atomically-when-a-job-can-stop-halfway</loc><lastmod>2026-11-11T15:57:27.201637+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/getting-started-python-automation</loc><lastmod>2026-11-10T18:43:37.514529+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/art-of-sales-digital-age</loc><lastmod>2026-01-08T11:49:09.483134+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/building-scalable-react-apps</loc><lastmod>2026-11-10T18:43:53.290755+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/developer-to-sales-head-journey</loc><lastmod>2026-01-08T11:49:09.483134+00:00</lastmod></url><url><loc>https://praritsidana.com/blog/top-vscode-extensions-productivity</loc><lastmod>2026-01-08T11:49:09.483134+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/postzyo</loc><lastmod>2026-11-10T18:43:36.625097+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/jsll-prediction-platform</loc><lastmod>2026-11-10T18:43:36.782377+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/nirogidhara-ai-command-center</loc><lastmod>2026-11-10T18:43:36.956147+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/whatsapp-smart-connect</loc><lastmod>2026-11-10T18:43:37.130286+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/shortforge</loc><lastmod>2026-11-10T18:43:37.261915+00:00</lastmod></url><url><loc>https://praritsidana.com/projects/riims-website</loc><lastmod>2026-11-11T06:05:21.919417+00:00</lastmod></url></urlset>