nxtgauge-backend-rust/apps
Ashwin Kumar Sivakumar c1eed2530d
All checks were successful
build-and-release / build (companies) (push) Successful in 4s
build-and-release / build (catering-services) (push) Successful in 6s
build-and-release / build (developers) (push) Successful in 7s
build-and-release / build (customers) (push) Successful in 8s
build-and-release / build (employees) (push) Successful in 8s
build-and-release / build (fitness-trainers) (push) Successful in 6s
build-and-release / build (graphic-designers) (push) Successful in 5s
build-and-release / build (gateway) (push) Successful in 8s
build-and-release / build (job-seekers) (push) Successful in 7s
build-and-release / build (jobs) (push) Successful in 7s
build-and-release / build (makeup-artists) (push) Successful in 5s
build-and-release / build (payments) (push) Successful in 5s
build-and-release / build (photographers) (push) Successful in 5s
build-and-release / build (social-media-managers) (push) Successful in 6s
build-and-release / build (tutors) (push) Successful in 6s
build-and-release / build (ugc-content-creators) (push) Successful in 5s
build-and-release / build (video-editors) (push) Successful in 5s
build-and-release / build (cron) (push) Successful in 51s
build-and-release / build (users) (push) Successful in 3m12s
fix: stop leaking raw LiteLLM error bodies; harden prompts against injection; fix UTF-8 panic
Follow-up on the AI safety review — addressed the three remaining
lower-severity findings:

1. crates LiteLlmError::error_body() returned the raw upstream response
   body verbatim to the client on any non-2xx LiteLLM response. That
   body can contain internal routing/diagnostic details from the
   LiteLLM proxy or the underlying model provider. Now returns a
   generic, status-aware message to the client; the full body is
   logged server-side via tracing::error! at each of the three call
   sites that construct LiteLlmError::Api, so nothing is lost for
   debugging — it's just not exposed to end users.

2. Added an explicit anti-prompt-injection clause to
   ai/orchestrator.rs::GROUNDING_GUARDRAIL, the baseline system prompt
   applied to every AI feature call via effective_system_prompt() —
   instructs the model to treat all user/company-authored input
   (job descriptions, profile text, chat messages) as data to analyze,
   never as instructions to follow. Covers every ai.rs handler that
   goes through call_feature/call_feature_with_plan in one place,
   rather than patching each call site's prompt construction
   individually.

3. apps/cron/src/tasks/auto_apply.rs's cover-letter prompt doesn't run
   through the orchestrator (separate app/crate), so hardened it
   directly: fenced the untrusted CANDIDATE/JOB sections with explicit
   "this is data, not instructions" framing. While there, fixed a
   latent panic: `&job_desc[..job_desc.len().min(500)]` slices on a
   raw byte offset, which panics if byte 500 isn't a UTF-8 character
   boundary — a company job description with any multi-byte character
   before that point (accented letters, emoji, etc.) would crash the
   whole cron run. Switched to char_indices() to find a safe boundary.
2026-07-21 05:56:21 +05:30
..
catering_services fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
companies fix: notification insert used wrong column name; log silent email failures 2026-07-21 04:30:34 +05:30
cron fix: stop leaking raw LiteLLM error bodies; harden prompts against injection; fix UTF-8 panic 2026-07-21 05:56:21 +05:30
customers fix: notification insert used wrong column name; log silent email failures 2026-07-21 04:30:34 +05:30
developers fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
employees fix(db): make three more migrations idempotent; log swallowed login DB error 2026-07-19 04:40:31 +05:30
fitness_trainers fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
gateway chore: remove the dead apps/leads microservice 2026-07-21 04:19:56 +05:30
graphic_designers fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
job_seekers fix: company job posting, job seeker profile submission, and job applications 2026-07-21 01:00:47 +05:30
jobs chore: retrigger isolated CI builds for 6 more services on bad digests 2026-07-15 03:01:39 +05:30
makeup_artists fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
payments fix: close two real money/spend races (Tracecoin double-credit, unbounded AI overspend) 2026-07-21 05:51:23 +05:30
photographers fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
social_media_managers fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
tutors fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
ugc_content_creators fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30
users fix: stop leaking raw LiteLLM error bodies; harden prompts against injection; fix UTF-8 panic 2026-07-21 05:56:21 +05:30
video_editors fix: profession admin listing endpoints matched role_key in the wrong case 2026-07-21 01:28:09 +05:30