v0.5.02026-06-23

Features

  • **b101-01:** llm cost reduction — caching, batching, rerank gate, JD normalization ([7c39dc0](https://github.com/42piratas/hiresling-app/commit/7c39dc0070e30dd9def60374ea30734d5aecd4d5))
  • **b101-01:** llm cost reduction (T1–T11) ([14e04d9](https://github.com/42piratas/hiresling-app/commit/14e04d9747541836dac4e71d8bbc546855061d13))
  • **b101-03:** synthetic full-run audit harness + M1 live-usage tap ([12b5d9a](https://github.com/42piratas/hiresling-app/commit/12b5d9a2defaee53ff043ab9dd8cea35340a0f22))
  • **b101-03:** synthetic full-run audit harness + M1 live-usage tap ([f5c48a9](https://github.com/42piratas/hiresling-app/commit/f5c48a957332781588e2f2246b8086e7f943d524))
  • **b101-04:** Apollo industry name→tag-ID mapping (T1b precision) ([41ed4c5](https://github.com/42piratas/hiresling-app/commit/41ed4c5456eb895063155080b9d6845a5b273143))
  • **b101-04:** deterministic resume-link guarantee + per-source company attribution ([9e71bbf](https://github.com/42piratas/hiresling-app/commit/9e71bbf09d36ecdb473969f3a6fe9b7ddc57435a))
  • **b101-04:** discovery wiring proof + paid-contact precision + per-source attribution + pre-flight gate ([4ea3be0](https://github.com/42piratas/hiresling-app/commit/4ea3be049a90920ef499d2fbf1259483848acc5f))
  • **b101-04:** map industry names to apollo tag-IDs (precise organization_industry_tag_ids) ([570b1cb](https://github.com/42piratas/hiresling-app/commit/570b1cb17b754501462a930206da56b8e6804da3))
  • **b101-04:** pre-flight source-validation harness (PASS/DEAD/EXHAUSTED/UNPROVISIONED) ([5e778a6](https://github.com/42piratas/hiresling-app/commit/5e778a6193f16b13fa9d49ff96a2a1a7f0e4ab99))
  • **b101-06:** authoritative per-source cost map + completeness gate (T1) ([0f27878](https://github.com/42piratas/hiresling-app/commit/0f278783a7fcc75d92289f45c811fb13bc23a7cb))
  • **b101-06:** daily source-value report (cost × yield × outcome per API) ([f8b59fa](https://github.com/42piratas/hiresling-app/commit/f8b59faace00a7a4f9f1f36086d92bfa6215c6fb))
  • **b101-06:** digest daily-total header, non-API grouping, 09:00 UTC ([f82f4b0](https://github.com/42piratas/hiresling-app/commit/f82f4b05614056432a97ae290f2f70c6a2d75f42))
  • **b101-06:** source-value rollup RPC + daily Slack digest (T2/T3) ([fb374b4](https://github.com/42piratas/hiresling-app/commit/fb374b42f9f9477ddc92f4921426d798a0a3cd6c))
  • **b101-06:** stamp specific data-source API on user_companies.source (T0) ([052b833](https://github.com/42piratas/hiresling-app/commit/052b833c817a397a5ae44aed27abd721d62aa1cd))
  • **b101-07:** phase A — import-maximal, cost-aware acquisition model ([f0cc195](https://github.com/42piratas/hiresling-app/commit/f0cc1953a261da6b1c26447010efd77202202825))
  • **b101-07:** phase A — import-maximal, cost-aware acquisition model ([54ded90](https://github.com/42piratas/hiresling-app/commit/54ded90517840b84c916232f66be659f3a13fa55))
  • **b101-07:** phase B — delivery + buffering on existing tables ([537ca0a](https://github.com/42piratas/hiresling-app/commit/537ca0ac1ce18a1890dcfb1496701f8548d8ac6a))
  • **b101-07:** phase B — delivery + buffering on existing tables ([f79a69d](https://github.com/42piratas/hiresling-app/commit/f79a69dc00db5da05c821497e01d618f67bd7784))
  • **b101-07:** phase C — two-lane queue + serialization + budget governor ([f16215d](https://github.com/42piratas/hiresling-app/commit/f16215da9e20a968fea4feac1fa96d369e460b70))
  • **b101-07:** phase C — two-lane queue, per-user serialization, budget governor ([803ca57](https://github.com/42piratas/hiresling-app/commit/803ca57fd98e091de4e88ec064cddef6165fd89b))
  • **b101-08:** Phase A — pipeline_events cost/attribution ledger (T1–T6) ([29ab46f](https://github.com/42piratas/hiresling-app/commit/29ab46fef270d336e92072963555986811bc851b))
  • **b101-08:** phase a ledger foundation — pipeline_events table + emit module ([9b4a0d8](https://github.com/42piratas/hiresling-app/commit/9b4a0d849fb0294def71a23bd250444b9366e869))
  • **b101-08:** phase b reproducible cost-report generator (t7/t8) ([f5a5834](https://github.com/42piratas/hiresling-app/commit/f5a583486d643808f2fd20c5f4d7abe16032be5f))
  • **b101-08:** phase b reproducible cost-report generator (T7/T8) ([622a4dd](https://github.com/42piratas/hiresling-app/commit/622a4ddada201a56e4b8c738a662928e913904aa))
  • **b101-08:** phase c sim fixes (T9–T12) ([6ff3f9c](https://github.com/42piratas/hiresling-app/commit/6ff3f9c4de031e98394cab6e4a47b7da4286ad77))
  • **b101-08:** phase c sim fixes (T9–T12) ([4dbd35c](https://github.com/42piratas/hiresling-app/commit/4dbd35c4196b5ee15242a2afcd8a1031292f7aa7))
  • **b101-08:** phase d — parallel n-persona sim + behavior assertions + campaign report ([1a9ced0](https://github.com/42piratas/hiresling-app/commit/1a9ced001930e416158585a92164eafaae190d03))
  • **b101-08:** t4 payg billable units + t6 daily rollup/retention cron + tests ([89fd5b8](https://github.com/42piratas/hiresling-app/commit/89fd5b875d63195c1f032d4124b09ba815280335))
  • **b101-08:** wire ai-leg + data-leg pipeline_events emits (t2/t3) ([d20827b](https://github.com/42piratas/hiresling-app/commit/d20827bc20f2aed0cc4b3d26de04135c8f3f5ff4))
  • **b101-09:** deterministic pipeline_events ledger reader for SIM reports ([94798fe](https://github.com/42piratas/hiresling-app/commit/94798feeba4d07285deb838aa8be34280ca58545))
  • **b101-10:** add staging-only test-enqueue endpoint for prod queue path ([fe6dbc6](https://github.com/42piratas/hiresling-app/commit/fe6dbc6bc5e16a70cfd64d0b3f95584b4e0b3d8f))
  • **b101-10:** contact finders run cost-first, order read from the registry ([3ade62d](https://github.com/42piratas/hiresling-app/commit/3ade62d88575c88f08fd5ae093cf4a82d1939864))
  • **b101-10:** drive SIM through the real deployed queue (prod-mirror harness) ([e4977a0](https://github.com/42piratas/hiresling-app/commit/e4977a09dfa1d26ac3bc1e4268e5f9565fe97cb3))
  • **b101-10:** order discovery cascade cost-first (+ cascade check tolerance/exclusions) ([3684414](https://github.com/42piratas/hiresling-app/commit/3684414b68f227a9c6143eda8630c2286a21e3fe))
  • **b101-10:** order discovery cascade cost-first + cascade check tolerance/exclusions ([8441c28](https://github.com/42piratas/hiresling-app/commit/8441c28120b3b250737bb5cf0e8ce9fb4a4d2cae))
  • **b101-10:** prod-mirror SIM harness — drive the real deployed queue ([dd5b85a](https://github.com/42piratas/hiresling-app/commit/dd5b85a109ecd4e27704776a9dfe8803e53443df))
  • **b101-10:** propagate SIM prod-mirror to the deployed worker ([da8d8c5](https://github.com/42piratas/hiresling-app/commit/da8d8c53217e994aad5a5afa11ce2ab862938d48))
  • **b101-10:** propagate SIM prod-mirror to the deployed worker ([2e0e4c4](https://github.com/42piratas/hiresling-app/commit/2e0e4c488534d49cb3950c40d991a8dccf29fb59))
  • **b101-10:** raise internal credit caps to unreachable (defer to provider 429) ([ffc0ab7](https://github.com/42piratas/hiresling-app/commit/ffc0ab7afa4f099c91c0acba24fc4c1e049cdbe2))
  • **b101-10:** SIM fidelity — ledger spend + staging queue trigger ([ea9795b](https://github.com/42piratas/hiresling-app/commit/ea9795b2074731beeb4ed14c8af262c6e7ae5b96))
  • **b101-10:** single per-call cost registry — kill cost bands ([f1f5416](https://github.com/42piratas/hiresling-app/commit/f1f5416a8eaeab24bb26b684339224b6874ae7ff))
  • **b101-10:** single per-call cost registry — real subscription costs, kill cost bands ([d6984c7](https://github.com/42piratas/hiresling-app/commit/d6984c7998e90c791aaaba1ed2580b29793d6460))
  • **B101-11:** discovery funnel + cascade tolerance + AI-cost badge ([25f82a2](https://github.com/42piratas/hiresling-app/commit/25f82a2104579403fa5f31d747a0d788954e0602))
  • **B101-11:** discovery funnel Returned→Unique→Net-new + cascade tolerance + AI-cost badge ([9d36c6d](https://github.com/42piratas/hiresling-app/commit/9d36c6d50d4f43c7675ecbba3218ef0df2e3fba2))
  • **b101-11:** systemic feed ordering (cost→ROI) + provider-only spend control ([3511b64](https://github.com/42piratas/hiresling-app/commit/3511b646eec24cc95abfb939e91e05bed2e3f7af))
  • **b101-11:** systemic feed ordering (cost→ROI) + provider-only spend control ([69264d9](https://github.com/42piratas/hiresling-app/commit/69264d901670b3d93945f8ec7f797822e9d8bc22))
  • **b101-13:** ledger-report correctness + parametrized generator + SIM-harness assertion fixes ([07bb739](https://github.com/42piratas/hiresling-app/commit/07bb739ff72b27e69bf5ee247f5fb6c796fd299c))
  • **b101-13:** ledger-report correctness + parametrized generator + SIM-harness assertion fixes ([2dc54e8](https://github.com/42piratas/hiresling-app/commit/2dc54e8e8ca653c1e41ea077b41dfc1cfa297fd0))
  • **b101-14:** breadth-first draft distribution (favor unique companies) ([2ea96db](https://github.com/42piratas/hiresling-app/commit/2ea96dbea33f95e9b1fc369753b6f174bc18a35e))
  • **b101-14:** breadth-first draft distribution (favor unique companies) ([688c161](https://github.com/42piratas/hiresling-app/commit/688c161efba55da505503cba5b7d881791c0e68d))
  • **b101-15:** one-off staging→prod warehouse promote script (dry-run validated) ([53d52ee](https://github.com/42piratas/hiresling-app/commit/53d52ee7bf77064514a21bb565ad317c8c36bd9b))
  • **b101-15:** one-off staging→prod warehouse promote script (dry-run validated) ([26b279a](https://github.com/42piratas/hiresling-app/commit/26b279af5c002bfe443e99d0b316f6a7a5f1c7a7))
  • **b102-01:** author italian it.json + wire message data (T5–T6)
  • **b102-01:** italian (it) i18n scaffolding — dark-launched (T1–T4)
  • **b102-01:** italian legal pages — PrivacyIT + TermsIT (dark-launched)
  • **b102-01:** legal-page IT cross-links + PT/ES governing-language clause
  • **b103-01:** contact-leg funnel correctness — persisted net-new + dedup + delivered layer ([1ff24e6](https://github.com/42piratas/hiresling-app/commit/1ff24e653c01f2c1c92d924c4475db0577a76fa5))
  • **b103-01:** contact-leg funnel correctness — persisted net-new + dedup + delivered layer ([7707167](https://github.com/42piratas/hiresling-app/commit/77071672d47d07085032149b04341bf1b76ad983))
  • **b103-03:** onboarding report — live-DB user/time mode + 42labs DS styling ([f34e161](https://github.com/42piratas/hiresling-app/commit/f34e161cb528f84f24ae92d69b11f03866702cf8))
  • **b103-03:** onboarding-cost SIM harness + prod-alias mirror ([2a5ba70](https://github.com/42piratas/hiresling-app/commit/2a5ba7089d316240ae9b7ba1e8a88d39cb9fabd4))
  • **b103-03:** onboarding-cost SIM harness + prod-alias mirror ([26b093f](https://github.com/42piratas/hiresling-app/commit/26b093f10d9150abc90c5115a4563aae1c88b11b))
  • **b104-01:** close T3/T4/T5 — wire outreach-90day prune + PP §7 fix + storage-only verify ([1812e21](https://github.com/42piratas/hiresling-app/commit/1812e21d9b9550768142bc0685b1bb82ec85deeb))
  • **b104-01:** contact-pii retention ttl + hunter/tomba persist cap ([8504f94](https://github.com/42piratas/hiresling-app/commit/8504f9497e42a577b5ee74933c897c2347fccdc5))
  • **b104-01:** contact-pii retention ttl + hunter/tomba persist cap ([2041849](https://github.com/42piratas/hiresling-app/commit/204184923622f46f95b85acf056f8e01c4f09014))
  • b104-06 content, i18n & doc drift + max cap 350→300
  • b105-04 discovery & scoring yield core — obs, d2+d1, d3, d4, d7 ([2089b67](https://github.com/42piratas/hiresling-app/commit/2089b67352c5cf452de639aa04703bc1b7cdd63b))
  • b105-04 discovery & scoring yield core (OBS, D2+D1, D3, D4, D7, FLOOR) ([a3a98b7](https://github.com/42piratas/hiresling-app/commit/a3a98b7f86d043166fea0d1cfd163a0a386b006d))
  • b105-04 floor — cross-day catch-up delivery target ([6da07a3](https://github.com/42piratas/hiresling-app/commit/6da07a31b5715792c54d4310044553434edfe6fa))
  • b105-05 outreach periphery — email completeness, apollo hygiene, contact bank-all ([65b5eae](https://github.com/42piratas/hiresling-app/commit/65b5eaea9df39d39c72b5eca7e015db06e1df9fb))
  • b105-05 outreach periphery — email completeness, apollo hygiene, contact bank-all ([36d832e](https://github.com/42piratas/hiresling-app/commit/36d832e5ae7872ce396627cd0743305e21c57f22))
  • **b105-06:** remove wrongful discovery rejections + first-class broadening ([a82e634](https://github.com/42piratas/hiresling-app/commit/a82e6341f205856b00dc9095402dcebf78ec8e56))
  • **b105-06:** remove wrongful discovery rejections + first-class broadening ([132b732](https://github.com/42piratas/hiresling-app/commit/132b732181a6b5a76df57b365353c868733903fb))
  • **b105-07:** buffer-floor guarantee — chain banks 2-day buffer past floor
  • **b105-07:** continuation spine, delivery ordering+freshness, language gate (t1-t7, t8/d10) ([1e355c1](https://github.com/42piratas/hiresling-app/commit/1e355c1fc7be8996188f9bf607afef8ed8d994bf))
  • **b105-07:** continuation/paced-promotion + floor-guarantee delivery (joint B105-06 gate) ([6605f07](https://github.com/42piratas/hiresling-app/commit/6605f07a0fe57a1becfb9dce0f8e27378dbc2a11))
  • **b105-07:** d11 — out-of-spectrum opening kept as cold company (t8) ([05ffebc](https://github.com/42piratas/hiresling-app/commit/05ffebcf5036815f2a64817bc7eee299689ffcee))
  • **b105-07:** geo political-ladder foundation — admin1 backfill, borders, ladder geo tail (t8) ([42af7d9](https://github.com/42piratas/hiresling-app/commit/42af7d983f4790fa93345dc3fd85992474aee7a0))
  • **b105-07:** paced run-until-met ladder — rung-escalation + geo widening (t4/t8) ([6ae2abe](https://github.com/42piratas/hiresling-app/commit/6ae2abeb3cccb8821633bf0a763081106823bd61))
  • **b105-07:** t9 — re-enrich company only on stale enrichment (d13) ([29af6a9](https://github.com/42piratas/hiresling-app/commit/29af6a9f75fd08307d8b83d83dbe1aa095ded702))
  • **b105-09:** govern contact-finder spend by billing model ([f4e66ff](https://github.com/42piratas/hiresling-app/commit/f4e66ff4970a95bafcaa1579ffeeab503522d2bd))
  • **b105-09:** govern contact-finder spend by billing model ([fdac083](https://github.com/42piratas/hiresling-app/commit/fdac083dc8cbc1be642d9449e77ad9ca55a399ae))
  • **b105-10:** cost-validation sim harness + p1 executive-chef persona ([80c93ab](https://github.com/42piratas/hiresling-app/commit/80c93ab186f8af2631bc19f877be864c896aa819))
  • **b105-10:** cross-persona pricing matrix html report (--matrix) ([029e28c](https://github.com/42piratas/hiresling-app/commit/029e28c076dadeb3f925d7dfb3a43bba079e47b7))
  • **b105-10:** full 12-persona matrix + ipv4 preflight probe + supply-exhaustion early-stop ([12b5624](https://github.com/42piratas/hiresling-app/commit/12b56241bb3dbb635a2e6dc02cb81e619088ba52))
  • **b105-11:** structured draft-feedback rule store ([8b6e74f](https://github.com/42piratas/hiresling-app/commit/8b6e74fb180e9834095f380728794696be775ce3))
  • **b105-11:** structured draft-feedback rule store ([1a939ba](https://github.com/42piratas/hiresling-app/commit/1a939ba02d01edeb5ec78838189dd0cf67dfbdf7))
  • **b106-01:** resume scoring, improvement & keyword-tailoring ([4a1961f](https://github.com/42piratas/hiresling-app/commit/4a1961fc30ee9a73be11f8ff8bb02fece6f6a878))
  • **b106-01:** resume scoring, improvement & keyword-tailoring ([22a238a](https://github.com/42piratas/hiresling-app/commit/22a238acdbd5d9d5e09045bfd77c929eac5c8f57))
  • **b106-02:** rescale fit-score display to 5.0-10 gauge ([abbce28](https://github.com/42piratas/hiresling-app/commit/abbce281e2cb7b0bc8b5a6a677d63d6463a1deb6))
  • **b106-02:** rescale fit-score display to 5.0-10 gauge ([e10b044](https://github.com/42piratas/hiresling-app/commit/e10b0449e61d71262c189f61d24a5c3b2de86be2))
  • b107-01 provider-value data gathering ([fe077ee](https://github.com/42piratas/hiresling-app/commit/fe077ee4bbaab3a07c6f5dce41ee3adc03122bcb))
  • b107-01 provider-value data gathering ([ff158c3](https://github.com/42piratas/hiresling-app/commit/ff158c333b6929f900ee24b383fbff5520803bca))
  • **b107-02:** provider-value report mechanisms (slack v2 + email + cli) ([b688046](https://github.com/42piratas/hiresling-app/commit/b6880469897a15dba027f97b4fb3103c34860d5c))
  • **b107-02:** provider-value report mechanisms (slack v2 + email + cli) ([ca5dcc3](https://github.com/42piratas/hiresling-app/commit/ca5dcc34a8a518bf6856efd13087c955d1e60cdc))
  • **b108-01:** rfb brazilian company firmographics layer ([9ec3958](https://github.com/42piratas/hiresling-app/commit/9ec39587ff7257df6695fbd9f9b2c2027670265b))
  • **b108-01:** rfb brazilian company firmographics layer ([07c98e9](https://github.com/42piratas/hiresling-app/commit/07c98e998e31529ceafe96ad06fbe9a7d403493a))
  • **b99-07:** paid sources default-OFF opt-in + jsearch keep-tune + staging alert wiring
  • **b99-99-01:** beta access provisioning — comp_beta_5d tier + public /beta overlay ([09ea9cd](https://github.com/42piratas/hiresling-app/commit/09ea9cd41ece2cc21f142176e2b7fcaca07032c5))
  • **b99-99-01:** beta access provisioning — comp_beta_5d tier + public /beta overlay ([1d4e40a](https://github.com/42piratas/hiresling-app/commit/1d4e40a851f9bafa3830c82eefe55de7b7726bef))
  • **b99-99-02:** beta feedback gate starts day 2 (day 1 free) ([07d6d23](https://github.com/42piratas/hiresling-app/commit/07d6d23d0a1e1e364cd15bdc05e1e8e9607f7cbc))
  • **b99-99-02:** beta feedback gate starts day 2 (day 1 free) ([aba5232](https://github.com/42piratas/hiresling-app/commit/aba5232174f77f83e051eabc02605b4768d168ab))
  • **b99-99-02:** in-tool daily beta feedback gate ([3baddc4](https://github.com/42piratas/hiresling-app/commit/3baddc459d38e4554b601a4ccd246a26b6d6f0f5))
  • **b99-99-02:** in-tool daily beta feedback gate ([3be1f98](https://github.com/42piratas/hiresling-app/commit/3be1f982d9e33d2a4d8030aaba23fb6f9dd53b1a))
  • **b99-adhoc-apollo-prod-gaps:** apollo contact rewrite, source kill-switches, adzuna depth ([f2af555](https://github.com/42piratas/hiresling-app/commit/f2af5555b64c8c2aadc799afb143aadeb2fdb38a))
  • **b99-adhoc-apollo-prod-gaps:** apollo contact rewrite, source kill-switches, adzuna depth ([5a51741](https://github.com/42piratas/hiresling-app/commit/5a51741b879bf9e42cf994b0ca2090f4cb079daf))
  • **b99-adhoc-brand-casing:** recase product wordmark to Hiresling.ai ([acbd0ab](https://github.com/42piratas/hiresling-app/commit/acbd0ab2e0e5bdfeea0470402b070158dc717467))
  • **b99-adhoc-brand-casing:** recase product wordmark to Hiresling.ai ([5ab8e95](https://github.com/42piratas/hiresling-app/commit/5ab8e956137a48195b0aba323a17c15ca90ea8ee))
  • **b99-adhoc-comp-allowlist:** comp grant on signup via email allowlist + Unlimited daily cap ([be91e65](https://github.com/42piratas/hiresling-app/commit/be91e65c0089b7939c3e8e3adc53c5f6ec86cbb8))
  • **b99-adhoc-comp-allowlist:** comp grant on signup via email allowlist + Unlimited daily cap ([7249c66](https://github.com/42piratas/hiresling-app/commit/7249c665568281fc2b83d6fa634d75673fc98960))
  • **b99-discovery-guarantee:** multi-source free-first discovery + always-deliver batch guarantee
  • **b99-renewal-banner:** opt-in renewal default + 5-day countdown banner ([cbde336](https://github.com/42piratas/hiresling-app/commit/cbde336ad2813c17c8944e12fec6334b0820018e))
  • **b99-renewal-banner:** opt-in renewal default + 5-day countdown banner ([31ff747](https://github.com/42piratas/hiresling-app/commit/31ff74727819956b104d1ebc28369eb0bcb892cb))
  • **b99-source-ops:** commercial-safe source lineup + free-plan quota alerts
  • **beta:** streamline /beta intake — single atomic RPC, exact cap, device fence, SSR counter ([a92bfb2](https://github.com/42piratas/hiresling-app/commit/a92bfb2c7def416fe7c8c2385aaa8d96aed03667))
  • **beta:** streamline /beta intake — single atomic RPC, exact cap, device fence, SSR'd counter ([5d2ffea](https://github.com/42piratas/hiresling-app/commit/5d2ffeaccdecb16b2bca06c99a1c43705f35e86d))
  • **caps:** lower Pro/Max monthly caps to 200/350 + grandfather mechanism ([c91be68](https://github.com/42piratas/hiresling-app/commit/c91be680051dec6f16d033bf43148cb2d36ed911))
  • **caps:** per-tier LiteLLM monthly AI budget — $12/$17/$27 (B99-99-98 T4) ([01e1adf](https://github.com/42piratas/hiresling-app/commit/01e1adf72939e97ea28f43797c70dfe829686a50))
  • **caps:** per-tier LiteLLM monthly AI budget $12/$17/$27 (B99-99-98 T4) ([1a4830f](https://github.com/42piratas/hiresling-app/commit/1a4830ff4082dbb2c1ab8bc79891652ea610897e))
  • **changelog:** restyle /changelog in onboarding card style ([c400082](https://github.com/42piratas/hiresling-app/commit/c4000820b3f543f3000ef59219fcc384021c08bf))
  • **changelog:** restyle /changelog in onboarding card style ([194eccd](https://github.com/42piratas/hiresling-app/commit/194eccd262280637218b612433b65cec706ad297))
  • **cron:** daily LiteLLM per-user budget reconciliation (B99-99-98 followup) ([3d4b205](https://github.com/42piratas/hiresling-app/commit/3d4b205564957d6e11d1ae2acaab989203be9417))
  • **cron:** daily LiteLLM per-user budget reconciliation (B99-99-98 followup) ([104ea7f](https://github.com/42piratas/hiresling-app/commit/104ea7fd141387732e1ca97dbe69636c372d0534))
  • **dashboard:** link company name to its site on drafts & sent items
  • **data-sources:** uniform cap enforcement + per-source cap toggle (B101-05-02) ([fa9d97b](https://github.com/42piratas/hiresling-app/commit/fa9d97bc686cccc55b8a19aa6616043ca57149e5))
  • **data-sources:** uniform cap enforcement + per-source cap toggle (B101-05-02) ([4e35a61](https://github.com/42piratas/hiresling-app/commit/4e35a619686d3e4172e4586cbf730561b5ec8e8a))
  • **i18n:** skill PT/ES translations + search aliases + Settings i18n + hero sentence_10 ([3bb227a](https://github.com/42piratas/hiresling-app/commit/3bb227a6c344ad6168772432b09ef20a774abb64))
  • **i18n:** skill PT/ES translations + search aliases + Settings i18n + hero sentence_10 ([c68545b](https://github.com/42piratas/hiresling-app/commit/c68545bcd4c9fa44f79680db303e9b3c54e2cb81))
  • **onboarding:** prefill email-signature with Google account name ([30418e0](https://github.com/42piratas/hiresling-app/commit/30418e0d47500bf5bc2c144b069b78d44d0bc45b))
  • **onboarding:** UI session — subheaders, score modal, referral card, landing counters
  • parameterized comp trial tiers (comp_pro_7d) via COMP_TIER_CONFIG ([8eac875](https://github.com/42piratas/hiresling-app/commit/8eac8757ddc825972ba0d41e31455289adab5eff))
  • parameterized comp trial tiers (comp_pro_7d) via COMP_TIER_CONFIG ([126e93c](https://github.com/42piratas/hiresling-app/commit/126e93c809157e60607ddabbcfdc9a2344fae815))
  • **scripts:** add set-admin + set-beta-tester operator provisioning CLIs ([a0bbac3](https://github.com/42piratas/hiresling-app/commit/a0bbac32d115616c3e354ca4badc570050d76158))
  • **scripts:** operator provisioning CLIs (set-admin + set-beta-tester) ([35499f8](https://github.com/42piratas/hiresling-app/commit/35499f8768d4971353beff06b7c8d8fc0dd9bc05))
  • **security:** b104-03 security hardening (A2-F2) ([e7cd114](https://github.com/42piratas/hiresling-app/commit/e7cd11423b72a176f65d94c9d38ed5c6709119da))
  • **security:** b104-03 security hardening (A2-F2) ([16ea8bc](https://github.com/42piratas/hiresling-app/commit/16ea8bc9e5b44cb784f53e47321cca3a7b9741b0))
  • **settings:** rewrite Settings panel — referrals, compensation, email, targeting ([1587aac](https://github.com/42piratas/hiresling-app/commit/1587aac0a288a8c2544d3c4cf6c5e7221cf94280))
  • **settings:** rewrite Settings panel — referrals, compensation, email, targeting ([5d275a5](https://github.com/42piratas/hiresling-app/commit/5d275a52249a6c1653d5a17bffad297a5237283b))
  • **source-caps:** enforce real paid monthly quotas

Bug Fixes

  • **adhoc:** stop daily prune from wiping the b91-08 fixture template user ([3660130](https://github.com/42piratas/hiresling-app/commit/366013020cc940a4c413449b0c456d6f9d9264bb))
  • **adhoc:** stop daily prune from wiping the b91-08 fixture template user ([cb4bf90](https://github.com/42piratas/hiresling-app/commit/cb4bf9047fda5cb4dde4e2c201f1bba48411abaa))
  • **adhoc:** wipe-user prod guard accepts the custom auth domain ([3090ae9](https://github.com/42piratas/hiresling-app/commit/3090ae9552e4761333e8171eea1e3d0dde873674))
  • **adhoc:** wipe-user prod guard accepts the custom auth domain ([a34856b](https://github.com/42piratas/hiresling-app/commit/a34856b174d08aaffece4386a488f07e222f9d5c))
  • **b101-01:** parallelize fit-canary candidate scoring ([c01bc47](https://github.com/42piratas/hiresling-app/commit/c01bc473b4c3f730b3d27797ffc8db69c988b4c8))
  • **b101-01:** parallelize fit-canary candidate scoring ([1dc79ac](https://github.com/42piratas/hiresling-app/commit/1dc79ac11b95f7fe84a3750cea1ab6e211fed223))
  • **b101-04:** free-source health — careerjet retry + direct-HTTP pre-flight liveness ([bceeae2](https://github.com/42piratas/hiresling-app/commit/bceeae28bea52201b5132e8eb7889d1d84ab51ec))
  • **b101-04:** free-source health — careerjet retry + direct-HTTP pre-flight liveness (T7) ([dfc57c5](https://github.com/42piratas/hiresling-app/commit/dfc57c52a2bd2b9a09251e1977befe356fe12226))
  • **b101-04:** pre-flight theirstack probe reads authoritative credit-balance ([6b11e6a](https://github.com/42piratas/hiresling-app/commit/6b11e6adc47b087bd114c33e5381a0f7b93f11ae))
  • **b101-05:** default --out resolves to the real sibling hiresling-meta (4 ups, not 3)
  • **b101-08:** make pipeline_events breadcrumbs throw-proof ([ab18608](https://github.com/42piratas/hiresling-app/commit/ab18608fd1ec3e240195b6839a9d725a251a313e))
  • **b101-09:** correct jsearch employment enum + tomba preflight gate ([0da596a](https://github.com/42piratas/hiresling-app/commit/0da596a97363116f33ed829e19f2e6226424efa1))
  • **b101-09:** correct jsearch employment enum + tomba preflight gate ([19b7f98](https://github.com/42piratas/hiresling-app/commit/19b7f98b3c3d078490bb7cde3a07001861bf9fab))
  • **b101-09:** correct the 3 SIM behavior assertions (cascade/contact/buffering) ([1866b66](https://github.com/42piratas/hiresling-app/commit/1866b6697f9911fd63e6bb2280938993c3d649e1))
  • **b101-09:** correct the 3 SIM behavior assertions (cascade/contact/buffering) ([1b3d64c](https://github.com/42piratas/hiresling-app/commit/1b3d64ca355c9234691cbd3583e23818a7e17805))
  • **b101-09:** split SIM run-id off batchRunId so user_outreach inserts stop 22P02-ing ([e31ebc4](https://github.com/42piratas/hiresling-app/commit/e31ebc40053f1e1a2ee85a596f962db88afb5ab3))
  • **b101-09:** split SIM run-id off batchRunId so user_outreach inserts stop 22P02-ing ([da4e6d9](https://github.com/42piratas/hiresling-app/commit/da4e6d91ee6601d1efe03f8ac7997544ba4d153d))
  • **b101-10:** best_first_delivery assertion checks draft order, not send order ([b69d880](https://github.com/42piratas/hiresling-app/commit/b69d88051eb9c32a3546ccb3bba8ef71452d8bdd))
  • **b101-10:** best_first_delivery assertion checks draft order, not send order ([69dca62](https://github.com/42piratas/hiresling-app/commit/69dca62d9ee722042090113fcde4ebd6f95d5759))
  • **b101-10:** day-1 queued batch uses first-run order (drafts on day 1) ([c5d1844](https://github.com/42piratas/hiresling-app/commit/c5d18441582f8786973264147016d63fec1d9e19))
  • **b101-10:** day-1 queued batch uses first-run order so it drafts ([2a7843f](https://github.com/42piratas/hiresling-app/commit/2a7843f3270ef125819c53fd7c69fa4b74999e6f))
  • **b101-10:** drop redundant server-only from source-costs so the SIM harness loads ([f2bedee](https://github.com/42piratas/hiresling-app/commit/f2bedee948b641101928c2086a042586144b6faa))
  • **b101-10:** preserve outer SIM context through processBatchForUser ([6e5c979](https://github.com/42piratas/hiresling-app/commit/6e5c979c89a896fbb5fc22946a276bd787a25d67))
  • **b101-10:** preserve outer SIM context through processBatchForUser ([bb8ccee](https://github.com/42piratas/hiresling-app/commit/bb8ccee7b55027722f89fd7054ad66c64a7a21e1))
  • **b101-10:** raise batch worker maxDuration for cold real first-batch ([18bdf5b](https://github.com/42piratas/hiresling-app/commit/18bdf5b3523ec160cafce6824b2c4e53e8f64866))
  • **b101-10:** raise batch worker maxDuration for cold real first-batch ([f8358bb](https://github.com/42piratas/hiresling-app/commit/f8358bb190452200dfdffaa6f1012c5971cfdc98))
  • **b101-10:** read sim spend from pipeline_events ledger, not /spend/logs ([5a52acb](https://github.com/42piratas/hiresling-app/commit/5a52acb2a5795490c3daf52d1de3f368b2869986))
  • **b101-10:** SIM enablement — harness import + raise internal caps to defer to provider 429 ([370c76f](https://github.com/42piratas/hiresling-app/commit/370c76f515503112a4e10aaf1ede20a79826fc37))
  • **b101-10:** source-value digest reads the single per-call cost registry ([d33eecb](https://github.com/42piratas/hiresling-app/commit/d33eecb4cec8bee5d7e886312feabf7ef027628f))
  • **B101-11:** company-leg yield = net-new inserts, not opening rows ([5b9503f](https://github.com/42piratas/hiresling-app/commit/5b9503fa9611b62ba04b5544ae4a44ce8c28c573))
  • **b101-11:** contact finder cost-order — rank dual-purpose apollo by per-call cost ([498cdb0](https://github.com/42piratas/hiresling-app/commit/498cdb0b898403f8b9c50158fd27d95e77e00efd))
  • **B101-11:** emit company-leg yield from net-new inserts, not opening rows ([64ae8e7](https://github.com/42piratas/hiresling-app/commit/64ae8e7d9c6ccb54a733a0c468fafacaad4ce309))
  • **b101-11:** rank contact finders by real per-call cost (dual-purpose apollo) ([eb3b760](https://github.com/42piratas/hiresling-app/commit/eb3b760d3e52296cb83e428e4252c92f070aab0c))
  • **B101-11:** zero rows_new on google_places self-emitted cost row ([be3f5d2](https://github.com/42piratas/hiresling-app/commit/be3f5d2c7d45667bc3668078d99e1df8d205fb63))
  • **B101-11:** zero rows_new on google_places self-emitted cost row ([0fdee04](https://github.com/42piratas/hiresling-app/commit/0fdee048f8b9ef8753730e4fe7f1b743182ad8d5))
  • **b101-13:** clean multi-run report titles (N personas) ([0eb5627](https://github.com/42piratas/hiresling-app/commit/0eb5627df9b5490d60bcb7a6653a88b426735590))
  • **b101-13:** clean multi-run report titles (N personas) ([e204692](https://github.com/42piratas/hiresling-app/commit/e204692bbf480bae6039a22ebf79dd83b3f2796f))
  • **B101-13:** tag scrape contacts-report total as AI cost ([8539a70](https://github.com/42piratas/hiresling-app/commit/8539a70f705b3d4fd55c2006802980b274193da2))
  • **B101-13:** tag scrape contacts-report total as AI cost ([3281eeb](https://github.com/42piratas/hiresling-app/commit/3281eeba18fa5ddc58c8dee8e8f2d3b51e193fc3))
  • **b102-02:** use ASCII apostrophe in IT close-button aria-label
  • **b103-01:** isolate contact-emit test from real dns/https i/o
  • **b103-01:** per-source funnel monotonicity + generic_inbox rows_distinct + HTML delivered line ([43f4965](https://github.com/42piratas/hiresling-app/commit/43f4965538c401bae0d9eec7c35dc31acb816bf9))
  • **b103-01:** per-source funnel monotonicity + generic_inbox rows_distinct + HTML delivered line ([7b6005a](https://github.com/42piratas/hiresling-app/commit/7b6005a971388f2cc0c0810a7cb1c5e0c390ea8a))
  • **b103-03:** exclude orphaned routes from cost model + correct stale caps/docs ([e4b6495](https://github.com/42piratas/hiresling-app/commit/e4b64952c30fd1b16953a4a05710b808ed08a142))
  • **b103-03:** onboarding-cost SIM run fixes + measured workflow.md numbers ([105eb29](https://github.com/42piratas/hiresling-app/commit/105eb2977ccfbd59cd23157f73c1890e24e77ae6))
  • **b103-03:** onboarding-cost SIM run fixes + measured workflow.md numbers ([0a08c41](https://github.com/42piratas/hiresling-app/commit/0a08c41b32ba34b6fec1c9e3ddcbbea05b914adb))
  • **b104-01:** rename ttl migration off the b104-02 version collision ([69717d3](https://github.com/42piratas/hiresling-app/commit/69717d3ac53334c2389975137668cbaeb2e4c20c))
  • **b104-01:** wire contact-ttl-prune e2e into staging suite + hook timeouts ([3e51052](https://github.com/42piratas/hiresling-app/commit/3e51052ffb76eeef63d688babe14ca6111f8516d))
  • **b104-01:** wire contact-ttl-prune e2e into staging suite + hook timeouts ([5665c5e](https://github.com/42piratas/hiresling-app/commit/5665c5e1776c3fc6d977782f50dcae2161718eea))
  • b104-02 staging validation (places-rpc version + dup-draft e2e)
  • b104-04 drop pipeline e2e cases for the removed /api/chat route ([7ea5205](https://github.com/42piratas/hiresling-app/commit/7ea520525f62632c6cdda2287952cc41826d8ae7))
  • b104-04 drop pipeline e2e cases for the removed /api/chat route ([226ea31](https://github.com/42piratas/hiresling-app/commit/226ea317ffc92b0d219b1482e3e6813cb073c575))
  • **b104-05:** drop pre-seed cleanupE2EData in places-purge beforeAll
  • **b105-01:** retire drafts change_list + atomic prospect→draft flip + skip trail ([806866a](https://github.com/42piratas/hiresling-app/commit/806866a4a7520a0592f7336727ffccc4c7da854a))
  • **b105-01:** retire drafts change_list + atomic prospect→draft flip + skip trail ([fd35b38](https://github.com/42piratas/hiresling-app/commit/fd35b388244b4b05924f3ca183b36bb27c44a0ee))
  • **b105-02:** make stale-subject sweep cli runnable ([c5fca3f](https://github.com/42piratas/hiresling-app/commit/c5fca3f82ffeeacb60cae5eee0b8c54c22d97607))
  • **b105-02:** make stale-subject sweep CLI runnable (react-server condition) ([43a50cd](https://github.com/42piratas/hiresling-app/commit/43a50cd53e7bbfee2e5f76c4f653029181cf7ffa))
  • **b105-02:** outreach subject-line language (PT/ES/IT bodies must not get EN subjects) ([3634aa5](https://github.com/42piratas/hiresling-app/commit/3634aa5d8c565d48c1dea92833976e2e76240ed1))
  • **b105-02:** pin outreach subject to user language + stale-subject sweep ([2724d53](https://github.com/42piratas/hiresling-app/commit/2724d5312e6448ace35c4d964614bd0e2d658016))
  • **b105-04:** faithful joint-sim contact_guarantee + best_first assertions ([7887e6a](https://github.com/42piratas/hiresling-app/commit/7887e6a3b1c4c07f3c89866f8290b6102d2cf4f2))
  • **b105-04:** keep batch terminal write within worker budget + round-aware best-first sim ([f169421](https://github.com/42piratas/hiresling-app/commit/f1694210b707dca249c43fe4a2705ee85b6e5a01))
  • **b105-04:** keep batch terminal write within worker budget + round-aware best-first sim ([493a0e8](https://github.com/42piratas/hiresling-app/commit/493a0e8120c65619d69cb7508369a58ae0d43de3))
  • **b105-04:** make joint-sim contact_guarantee + best_first assertions faithful ([cba82c1](https://github.com/42piratas/hiresling-app/commit/cba82c1e81dfa822aeb9a970ee34f04eda68ab8d))
  • **b105-06:** bank-not-fill — one natural discovery pass per tick ([0501189](https://github.com/42piratas/hiresling-app/commit/0501189d1df08ce9c0152560b5061f9d616d52e2))
  • **b105-06:** bank-not-fill — one natural discovery pass per tick ([eb82090](https://github.com/42piratas/hiresling-app/commit/eb82090324e8147b40fda92793cec0e6ba0ff0e3))
  • **b105-06:** gate discovery import on monthly cap only, pace enrichment ([34da824](https://github.com/42piratas/hiresling-app/commit/34da824e5ef85f7cd46fda7f39947454bc4ab6d4))
  • **b105-06:** gate discovery import on monthly cap only, pace enrichment ([b610d78](https://github.com/42piratas/hiresling-app/commit/b610d78879ec5d6575fd3961297077125ab4d1b2))
  • **b105-06:** per-tick fetch bound + sim monthly-counter preservation
  • **b105-07:** bound the heavy pass by the soft-budget deadline ([5cdd607](https://github.com/42piratas/hiresling-app/commit/5cdd60704f27bcd504f74b648f5c2e9fa5ab6d3a))
  • **b105-07:** bound the heavy pass by the soft-budget deadline ([c1227ae](https://github.com/42piratas/hiresling-app/commit/c1227aecdd2e39681de1f9501e37929b5e8a7494))
  • **b105-07:** chain-aware terminal batch status
  • **b105-07:** continue the chain while a deliverable backlog remains ([eb8057a](https://github.com/42piratas/hiresling-app/commit/eb8057a0c9bbbe286d40f0d26a1515376826fe48))
  • **b105-07:** continue the chain while a deliverable backlog remains ([52fcdee](https://github.com/42piratas/hiresling-app/commit/52fcdee35e9dccac545a1553171aa4599f27108f))
  • **b105-07:** deliver the floor on continuation links
  • **b105-07:** lane-split buffer build — chain stops at bank-built, refill lane resolves
  • **b105-07:** negative cache + paid-call ceiling + marginal stop + completion gate
  • **b105-07:** reserve re-fire headroom in the soft-budget start-gate ([f53f953](https://github.com/42piratas/hiresling-app/commit/f53f9539eaebcb04f78e7a78c66a69d689dbf49d))
  • **b105-07:** reserve re-fire headroom in the soft-budget start-gate ([5242146](https://github.com/42piratas/hiresling-app/commit/52421460039a04e373ed0ef630411dadcadec54b))
  • **b105-07:** spend-ceiling breaker counts AI-leg spend only ([31538d7](https://github.com/42piratas/hiresling-app/commit/31538d7bda66a2f0505ad8ffb216c2f58a678cfa))
  • **b105-07:** spend-ceiling breaker counts AI-leg spend only ([b84781b](https://github.com/42piratas/hiresling-app/commit/b84781b5810e94471de18aa284a31dc6ecbde1e1))
  • **b105-07:** T3 paid-Apollo cost regression — buffer amortization + paid-person dedup
  • **b105-07:** use colon-free qstash continuation dedup id
  • **b105-08:** onboarding ux hardening + comp model reshape + flow-integrity fixes ([cb8f99d](https://github.com/42piratas/hiresling-app/commit/cb8f99d5bd4de40610f0e13c5a848dcb0686439c))
  • **b105-08:** onboarding UX hardening + comp model reshape + flow-integrity fixes ([bb62c21](https://github.com/42piratas/hiresling-app/commit/bb62c2157363a63322e43c36acb4338adf81a32b))
  • **b105-10:** cost-report ledger pagination + run-id scoping (+ sim matrix/serp-skip) ([d9dfa91](https://github.com/42piratas/hiresling-app/commit/d9dfa91fdbf521fd9fdbb63b5402d10bda50e8de))
  • **b105-10:** declare undici devdep for ipv4 preflight probe ([389e9f7](https://github.com/42piratas/hiresling-app/commit/389e9f71ba7426461767b4848baa6b09d12326eb))
  • **b105-10:** decouple discovery import budget from delivery cap ([7375827](https://github.com/42piratas/hiresling-app/commit/737582711b6e5cc2a03c49c45515340b5fc3c808))
  • **b105-10:** decouple discovery import budget from delivery cap + cost-validation SIM harness ([dab197a](https://github.com/42piratas/hiresling-app/commit/dab197a0090c2f6e7199bbd1aa2bb826147d8e97))
  • **b105-10:** drive sim month by monthly deliverable cap, not fixed days ([c717f3b](https://github.com/42piratas/hiresling-app/commit/c717f3b77b58e1a59e00b0c09dd19c115f508a8a))
  • **b105-10:** paginate ledger fetch + run-id scoping for cost report ([e171a77](https://github.com/42piratas/hiresling-app/commit/e171a77f01a27b45f3a009200941528cb0877859))
  • **b105-11:** calibrate dedup/conflict thresholds to live voyage embeddings ([c5992f8](https://github.com/42piratas/hiresling-app/commit/c5992f8f258bcb16ea1e02e3c2cf1ec2a3245ce6))
  • **b105-11:** calibrate dedup/conflict thresholds to live voyage embeddings ([06e4d5a](https://github.com/42piratas/hiresling-app/commit/06e4d5a39e22c215db25989e902c17cd034f4e79))
  • **b106-01:** re-version resume-scores migration off 20260616120000 collision ([9d78892](https://github.com/42piratas/hiresling-app/commit/9d788922de8adec4ee9760bb5bfe5d3e86ae1564))
  • **b106-02:** rescale chat-bot KB fit copy to 1-10 + drift guard ([de12d6d](https://github.com/42piratas/hiresling-app/commit/de12d6d5e51673b505b3f80727339d3bab68c97d))
  • **b106-02:** rescale chat-bot KB fit copy to 1-10 + drift guard ([534475e](https://github.com/42piratas/hiresling-app/commit/534475e246b1e2db9d94de34b0888dcfd2adb08d))
  • **b106-02:** rescale residual 0-100 fit copy to 1-10 ([f44f107](https://github.com/42piratas/hiresling-app/commit/f44f107dabc52e41c590fd6eeec5867ef08d43ed))
  • **b106-02:** rescale residual 0-100 fit copy to 1-10 (faq, tour, privacy, support kb) ([bba3976](https://github.com/42piratas/hiresling-app/commit/bba3976f5de34bda7c9cfed019037cc18a6561a4))
  • **b107-02:** derive provider-value window cost from recorded ledger spend ([faec0e5](https://github.com/42piratas/hiresling-app/commit/faec0e5a9a3489967edd78c4f266764495b75518))
  • **b107-02:** derive provider-value window cost from recorded ledger spend ([aa7d0b2](https://github.com/42piratas/hiresling-app/commit/aa7d0b29fa482154d3a72b2537f7df3a4d96e57e))
  • **b108-01:** atomic single-statement swap + post-swap live-count assertion ([e393db1](https://github.com/42piratas/hiresling-app/commit/e393db125f7930028a4cab976359b777e4f1d32c))
  • **b108-01:** connect to DB late (no idle conn across the ~1h download) ([ffbc629](https://github.com/42piratas/hiresling-app/commit/ffbc62961cd30732ef2fb206993ebbe578fd1a7a))
  • **b108-01:** decode ISO-8859-1 → UTF-8 via iconv (DuckDB latin-1 reader fails) ([3fb058e](https://github.com/42piratas/hiresling-app/commit/3fb058ee8979e04374b00621b3ac2ecb38328707))
  • **b108-01:** download completeness + scratch cleanup + monthly cron ([4ec5ae3](https://github.com/42piratas/hiresling-app/commit/4ec5ae3e16919789213f2f2bdeb3f23e6787add1))
  • **b108-01:** lift the 2-min statement_timeout for the bulk load ([11e0efa](https://github.com/42piratas/hiresling-app/commit/11e0efa18fea13b56802a146466c112c267ec3ae))
  • **b108-01:** minimal worker image (own package.json, not full app tree) ([6b35ba0](https://github.com/42piratas/hiresling-app/commit/6b35ba019e279c675a6f4a252df800cf5b34ecc2))
  • **b108-01:** point rfb etl at the nextcloud share (live source moved) ([3ae265e](https://github.com/42piratas/hiresling-app/commit/3ae265ed56749a8ba53012f8317686680131f68f))
  • **b108-01:** point rfb etl at the nextcloud share (live source moved) ([ced0b81](https://github.com/42piratas/hiresling-app/commit/ced0b810afc6327e7af95d538c9df0baf0dcd196))
  • **b108-01:** re-assert rfb registry table ownership to rfb_etl ([16e9973](https://github.com/42piratas/hiresling-app/commit/16e9973452d981c279f272d02b6d37c80e765074))
  • **b108-01:** re-assert rfb registry table ownership to rfb_etl ([3ca9e93](https://github.com/42piratas/hiresling-app/commit/3ca9e93b002534e3c182e586b85cb84d1ca6c2a0))
  • **b108-01:** revoke firmographics lookup rpc from anon (data-critic f1) ([fbaa5c2](https://github.com/42piratas/hiresling-app/commit/fbaa5c2fd0048e9931aa34a7ccb7ee555008944c))
  • **b108-01:** revoke firmographics lookup rpc from anon (data-critic F1) ([66d03bc](https://github.com/42piratas/hiresling-app/commit/66d03bc077c4960baa766f62e035c295e49f215f))
  • **b108-01:** stream-count transform output (avoid Node 512MB string cap) ([29eca35](https://github.com/42piratas/hiresling-app/commit/29eca35bd416391acf827b417f3e3a274da271b6))
  • **b108-01:** type stream chunk (tsc) ([0eefe26](https://github.com/42piratas/hiresling-app/commit/0eefe26fda5353e782dcacf4d7b50ec44e7e5d60))
  • **b99-06:** add wss: to prod CSP connect-src for Supabase Realtime ([223cca7](https://github.com/42piratas/hiresling-app/commit/223cca71b5fb28a82feb090bf983adb08d69995f))
  • **b99-06:** add wss: to prod CSP connect-src for Supabase Realtime ([d4b9d47](https://github.com/42piratas/hiresling-app/commit/d4b9d4700c768aa8b9177e5d082a7a9ab519a583))
  • **b99-06:** drop dropped-column write + always-render drafts footer ([2add114](https://github.com/42piratas/hiresling-app/commit/2add114ef583bb63acd576501c3751d969071cb4))
  • **b99-06:** drop dropped-column write + always-render drafts footer ([709ddda](https://github.com/42piratas/hiresling-app/commit/709ddda157e96220f250fecf62a9c5eb53732e71))
  • **b99-06:** report purgedUsageRows from hourly-batch cron response ([ae5eacd](https://github.com/42piratas/hiresling-app/commit/ae5eacdd47900b74be24189901e46f9ae4ffe785))
  • **b99-06:** report purgedUsageRows from hourly-batch cron response ([8759e4e](https://github.com/42piratas/hiresling-app/commit/8759e4e41ff9a96b1e318cd35b3a2cd7b75e5279))
  • **b99-06:** update 2 stale test assertions for the prospecting + footer fixes ([1e39f24](https://github.com/42piratas/hiresling-app/commit/1e39f241e450a56a31fe9ee8d6725ffd03c2d5e1))
  • **b99-99-03:** buffer readiness probe at depth-1 (contact-cost claw-back pt 2)
  • **b99-discovery:** careerjet api is http-only, not https
  • **b99-renewal-banner:** calendar-day countdown (staging-walk off-by-one) ([a01dcd7](https://github.com/42piratas/hiresling-app/commit/a01dcd7638daad1f400601cf1d08b70942249b9a))
  • **b99-renewal-banner:** count renewal countdown by calendar day, not elapsed ms ([411665a](https://github.com/42piratas/hiresling-app/commit/411665a930de9058a885e0d2c452219519a87b1c))
  • **b99-review-fixes:** consolidated R9 code/data/security fixes
  • **b99-review-fixes:** sync pnpm-lock.yaml after anthropic-sdk drop
  • **beta:** add point-of-collection privacy notice on /beta intake
  • **changelog:** move theme-light to layout per theme-scope invariant ([9053063](https://github.com/42piratas/hiresling-app/commit/9053063b0d5c3b9667b40dd8171ee7f0e9c90a45))
  • **chat-kb:** drop email export path, sync settings/fit-score/pipeline copy ([0a85713](https://github.com/42piratas/hiresling-app/commit/0a85713ead15f691900a80e464febbde9abd356e))
  • **chat-kb:** drop email export path, sync settings/fit-score/pipeline copy ([7685246](https://github.com/42piratas/hiresling-app/commit/76852462577257e8af93ff2f9a010226c782ef8b))
  • **comp:** extend users_tier_check to allow comp_pro_7d ([4d90f9e](https://github.com/42piratas/hiresling-app/commit/4d90f9ed1a72ede06c12055c99ab724526c70148))
  • **comp:** extend users_tier_check to allow comp_pro_7d ([02fdd5f](https://github.com/42piratas/hiresling-app/commit/02fdd5f6d35f30d7fa0897c42e148d9c85bb4541))
  • **cost-ledger:** units-driven cost + persisted yield + report fidelity ([ec4c61c](https://github.com/42piratas/hiresling-app/commit/ec4c61c4e87a0d7df10d5982d831f7093ad32428))
  • **cost-ledger:** units-driven cost + persisted yield + report fidelity ([df1283c](https://github.com/42piratas/hiresling-app/commit/df1283c6020f747684cc4ca9fee7bf02e9b131d2))
  • **dashboard:** drop empty-drafts subtext, keep 'No drafts pending' (B99-99-98) ([e6571c5](https://github.com/42piratas/hiresling-app/commit/e6571c55c82e389d74cabb2be76771b658be7330))
  • **dashboard:** drop empty-drafts subtext, keep core 'No drafts pending' (B99-99-98) ([428b971](https://github.com/42piratas/hiresling-app/commit/428b971ef3075f38a1376c695c6a29dcddb92f04))
  • **e2e:** seed GoTrue token columns on fixture-template auth row
  • **hero:** add APIs sentence, fix PT/ES overflow, drop discovery badges
  • **hotfix:** add user_resumes.change_list missing on prod ([4e0bbc9](https://github.com/42piratas/hiresling-app/commit/4e0bbc9bb57daf17cea75eac69e0883fc8634968))
  • **hotfix:** add user_resumes.change_list missing on prod (Drafts tab empty) ([fc18748](https://github.com/42piratas/hiresling-app/commit/fc18748126e0fe6579345e7b69a6fc0aea97374d))
  • **hotfix:** stop comp grants flagging cancelAtPeriodEnd (premature Polar 'ending' email) ([8b1a51e](https://github.com/42piratas/hiresling-app/commit/8b1a51e0bfeba66b08a3b7c4d5fcda1ea122ddcd))
  • **hotfix:** stop comp grants flagging cancelAtPeriodEnd (premature Polar 'ending' email) ([5d596bf](https://github.com/42piratas/hiresling-app/commit/5d596bfd164a2bd3d9b3ca31322f05035a8190d1))
  • **i18n-smoke:** map locale pt -> pt-br for users.language CHECK ([5540c58](https://github.com/42piratas/hiresling-app/commit/5540c5839963b779ac014695bfbcf35d3e2e2b0b))
  • **i18n-smoke:** map locale pt -> pt-br for users.language CHECK ([c1be1c3](https://github.com/42piratas/hiresling-app/commit/c1be1c3858fc11a4b70a5e4d8b7766138ad88c03))
  • **i18n-smoke:** scope EN-leak check to multi-word phrases ([fb7881c](https://github.com/42piratas/hiresling-app/commit/fb7881ceb9c788667cc6f66ba455ce7614d08506))
  • **i18n-smoke:** scope EN-leak check to multi-word phrases ([8f11a37](https://github.com/42piratas/hiresling-app/commit/8f11a3786b073822054f67691d50f008764f4168))
  • **outreach:** widen body_language to 'it', reserve PS budget, guard resume link (B101-04) ([010e252](https://github.com/42piratas/hiresling-app/commit/010e25251255e9765045067210c592414bd1fd0c))
  • **outreach:** widen body_language to 'it', reserve PS budget, guard resume link (B101-04) ([fae2d5e](https://github.com/42piratas/hiresling-app/commit/fae2d5e3e8fcbea05bc1863355f6909ef82708bc))
  • pipeline correctness + spend guards (b104-02)
  • **reconcile:** back-merge main hotfixes into staging (unblock prod promotion [#973](https://github.com/42piratas/hiresling-app/issues/973)) ([3253d28](https://github.com/42piratas/hiresling-app/commit/3253d2856e15cf5ae15ce25fe4bc23b96c0636cd))
  • **reconcile:** back-merge main hotfixes into staging for prod promotion ([4d58737](https://github.com/42piratas/hiresling-app/commit/4d587375ec6a3796d610efb1bf371db95c6291ba))
  • **release:** staff recipients + graph-clean release-email module ([424dd34](https://github.com/42piratas/hiresling-app/commit/424dd34bece845e57bbff3e74dc8a34b517182a1))
  • **release:** staff recipients + graph-clean release-email module ([a59c2a2](https://github.com/42piratas/hiresling-app/commit/a59c2a26a0204836c8c2221de08a53700a9c2352))
  • **release:** strip component prefix from release tag for email version ([d7467c3](https://github.com/42piratas/hiresling-app/commit/d7467c3a1343395f5eb857648993756232c5eb28))
  • **release:** strip component prefix from release tag for email version ([bd9ca1b](https://github.com/42piratas/hiresling-app/commit/bd9ca1bfe518ce93c9865c0a5b338c38cd189cb1))
  • **release:** wrap send-release-email TLA in async main (B99-99-98 T2) ([8c07abd](https://github.com/42piratas/hiresling-app/commit/8c07abdf1c632f9848cd37212aebcb1c6428bc88))
  • **release:** wrap send-release-email TLA in async main (B99-99-98 T2) ([39e0267](https://github.com/42piratas/hiresling-app/commit/39e02678a0a55147d76b37379f435c225de146f7))
  • **scripts:** set-beta-tester --reset clears pipeline only, not onboarding ([5d51c57](https://github.com/42piratas/hiresling-app/commit/5d51c572fdb6a875b25e3a2cd7d5b3275067a44e))
  • **security:** b104-03 critic-followup — ssrf ip-pinning + comp-grant orphan revoke ([53e2c3d](https://github.com/42piratas/hiresling-app/commit/53e2c3d0927a1ad3f33b5fd6b6f20336b89e5cfe))
  • **security:** b104-03 critic-followup — ssrf ip-pinning + comp-grant orphan revoke ([339a7c8](https://github.com/42piratas/hiresling-app/commit/339a7c8a683237c91ca827fc162bd79eefd496a9))
  • **sources:** repair Apollo company-search payload + Snov async domain-email flow (B101-04 bug 2) ([02f38bb](https://github.com/42piratas/hiresling-app/commit/02f38bb50f4b2d5b75cf5b4427d5869a47680439))
  • **typst:** ship linux binary to all batch render routes ([e1cf5e9](https://github.com/42piratas/hiresling-app/commit/e1cf5e96b35b2ac531823b94e4d920eef0dcc48f))
  • **typst:** ship linux binary to all batch render routes ([aab5ca5](https://github.com/42piratas/hiresling-app/commit/aab5ca58ec7e1b6d2cf5162f98dcd3995a9051d5))
v0.4.12026-06-11

Bug Fixes

  • **b101-05:** default --out resolves to the real sibling hiresling-meta (4 ups, not 3)
  • **release:** staff recipients + graph-clean release-email module ([ba15574](https://github.com/42piratas/hiresling-app/commit/ba15574c43161c9b91e25409c74cb193ad35145c))
  • **release:** staff recipients + graph-clean release-email module ([fdaf95f](https://github.com/42piratas/hiresling-app/commit/fdaf95f9d83841f38a156c368da2f067c1675cdf))
v0.4.02026-06-11

Features

  • **beta:** streamline /beta intake — single atomic RPC, exact cap, device fence, SSR counter ([1c33a9e](https://github.com/42piratas/hiresling-app/commit/1c33a9eaea419ebf2f0f9b84bb38678a9f8962b9))
  • **cron:** daily LiteLLM per-user budget reconciliation (B99-99-98 followup) ([f8dc6cb](https://github.com/42piratas/hiresling-app/commit/f8dc6cb9e7ef53013d3f2cebf5632c9442c84c93))
  • **cron:** daily LiteLLM per-user budget reconciliation (B99-99-98 followup) ([02f499b](https://github.com/42piratas/hiresling-app/commit/02f499ba0f77bec0b36b919be1e2430cc8e67b60))

Bug Fixes

  • **release:** wrap send-release-email TLA in async main (B99-99-98 T2) ([795972c](https://github.com/42piratas/hiresling-app/commit/795972ccc3fdfe0f71dede0e99356c22d21995e2))
  • **release:** wrap send-release-email TLA in async main (B99-99-98 T2) ([e987b4f](https://github.com/42piratas/hiresling-app/commit/e987b4fc83d2c0a6e2bc26ba66f1fa7bec1e7fbe))
v0.3.02026-06-10

Features

  • **adhoc-tour-restyle:** match onboarding DS for tour + fold referrals into settings
  • **ai:** b91-05 idempotency keys — in-flight double-spend guard
  • **b101-01:** llm cost reduction — caching, batching, rerank gate, JD normalization ([3980848](https://github.com/42piratas/hiresling-app/commit/3980848b8ef65fd9d7280e0a38a7bd25296f3fbc))
  • **b101-01:** llm cost reduction (T1–T11) ([1f80fa1](https://github.com/42piratas/hiresling-app/commit/1f80fa11e944c26ce6c5edbd52ec90347ff73165))
  • **b101-03:** synthetic full-run audit harness + M1 live-usage tap ([445a022](https://github.com/42piratas/hiresling-app/commit/445a022bd134a7f64e59d9dbee0cc771eb57e80c))
  • **b101-03:** synthetic full-run audit harness + M1 live-usage tap ([01e7552](https://github.com/42piratas/hiresling-app/commit/01e75524f6126ff2a522064228b92536c68ef41b))
  • **b101-04:** Apollo industry name→tag-ID mapping (T1b precision) ([92ac058](https://github.com/42piratas/hiresling-app/commit/92ac05834bb22b9e3dc0b6b8df11338d40acaaac))
  • **b101-04:** deterministic resume-link guarantee + per-source company attribution ([3974680](https://github.com/42piratas/hiresling-app/commit/39746809ebe9bcc177c702fb196c007a409700ce))
  • **b101-04:** discovery wiring proof + paid-contact precision + per-source attribution + pre-flight gate ([188b3a6](https://github.com/42piratas/hiresling-app/commit/188b3a66b6ebfcb15ab91049172488f3fcfba385))
  • **b101-04:** map industry names to apollo tag-IDs (precise organization_industry_tag_ids) ([272e18f](https://github.com/42piratas/hiresling-app/commit/272e18f0319894e63c85dd9983b0bd26a58ea079))
  • **b101-04:** pre-flight source-validation harness (PASS/DEAD/EXHAUSTED/UNPROVISIONED) ([88e5120](https://github.com/42piratas/hiresling-app/commit/88e5120f34088f18c1e70f9f149c1d9d78bf3897))
  • **b101-06:** authoritative per-source cost map + completeness gate (T1) ([e48b964](https://github.com/42piratas/hiresling-app/commit/e48b964e0428f04f09d893e3c76bc0a1932a3508))
  • **b101-06:** daily source-value report (cost × yield × outcome per API) ([c668403](https://github.com/42piratas/hiresling-app/commit/c6684034cc2634d1433ee282f2facc21e7f8233b))
  • **b101-06:** digest daily-total header, non-API grouping, 09:00 UTC ([9a033a7](https://github.com/42piratas/hiresling-app/commit/9a033a7a814e8fc04f9ab7cdc53b98dc70b3f4b5))
  • **b101-06:** source-value rollup RPC + daily Slack digest (T2/T3) ([0f50424](https://github.com/42piratas/hiresling-app/commit/0f50424da167b73c4449fb67199f790e3beca8ee))
  • **b101-06:** stamp specific data-source API on user_companies.source (T0) ([e73e44f](https://github.com/42piratas/hiresling-app/commit/e73e44f50f42482f9db335e30bb2d77bb3d250e0))
  • **b101-07:** phase A — import-maximal, cost-aware acquisition model ([175166c](https://github.com/42piratas/hiresling-app/commit/175166c965632c2af48cf592b1c4eda16cf65192))
  • **b101-07:** phase A — import-maximal, cost-aware acquisition model ([bbf6f5d](https://github.com/42piratas/hiresling-app/commit/bbf6f5d0ec36fedd39d4ada15f592b600357103d))
  • **b101-07:** phase B — delivery + buffering on existing tables ([01040f8](https://github.com/42piratas/hiresling-app/commit/01040f820d79a396de43fe26272561c5cf773770))
  • **b101-07:** phase B — delivery + buffering on existing tables ([e11c9eb](https://github.com/42piratas/hiresling-app/commit/e11c9ebad05fd7f080c45e4770631ca6a944b183))
  • **b101-07:** phase C — two-lane queue + serialization + budget governor ([c22267c](https://github.com/42piratas/hiresling-app/commit/c22267cdc31c9749bd46735980c0473a111e38e6))
  • **b101-07:** phase C — two-lane queue, per-user serialization, budget governor ([0ba297e](https://github.com/42piratas/hiresling-app/commit/0ba297e8dbfa02ac00fabef2dc20fc227460b415))
  • **b101-08:** Phase A — pipeline_events cost/attribution ledger (T1–T6) ([aa6fc6d](https://github.com/42piratas/hiresling-app/commit/aa6fc6dbe5cc0ac74b023472a28b60cdbf0c57f9))
  • **b101-08:** phase a ledger foundation — pipeline_events table + emit module ([2368119](https://github.com/42piratas/hiresling-app/commit/23681195fe906e82cb8cdd85edaae16302384732))
  • **b101-08:** phase b reproducible cost-report generator (t7/t8) ([f54d418](https://github.com/42piratas/hiresling-app/commit/f54d418c4a42b488fdbbe204ef0ada33bc388196))
  • **b101-08:** phase b reproducible cost-report generator (T7/T8) ([353574e](https://github.com/42piratas/hiresling-app/commit/353574e9d2aea74e721eab4b7cc3e8340a5eb532))
  • **b101-08:** phase c sim fixes (T9–T12) ([41ade6c](https://github.com/42piratas/hiresling-app/commit/41ade6c67621e8b828f3f03f7bc2ed3248aea9aa))
  • **b101-08:** phase c sim fixes (T9–T12) ([8c906fb](https://github.com/42piratas/hiresling-app/commit/8c906fbd7d14265a5833c0ebf1cfff9422d999f4))
  • **b101-08:** phase d — parallel n-persona sim + behavior assertions + campaign report ([cdcc253](https://github.com/42piratas/hiresling-app/commit/cdcc2534914c08967154984b0bc2e3f078a0bb42))
  • **b101-08:** t4 payg billable units + t6 daily rollup/retention cron + tests ([f5b8802](https://github.com/42piratas/hiresling-app/commit/f5b8802d00c96021b3a994da1c804067ab5d5239))
  • **b101-08:** wire ai-leg + data-leg pipeline_events emits (t2/t3) ([a6c3bbe](https://github.com/42piratas/hiresling-app/commit/a6c3bbea1b8038b93c7aa111d28c1b82e68cc3dc))
  • **b101-09:** deterministic pipeline_events ledger reader for SIM reports ([018df58](https://github.com/42piratas/hiresling-app/commit/018df585e6834ef3f43cc1f3395ac4c2a869c10e))
  • **b101-10:** add staging-only test-enqueue endpoint for prod queue path ([c725c3c](https://github.com/42piratas/hiresling-app/commit/c725c3cf07999cc0c6649564aa9f737342a1801a))
  • **b101-10:** contact finders run cost-first, order read from the registry ([ebbd2b2](https://github.com/42piratas/hiresling-app/commit/ebbd2b2f05d6765d94b6735601eb898f66c8fa7c))
  • **b101-10:** drive SIM through the real deployed queue (prod-mirror harness) ([067a0c3](https://github.com/42piratas/hiresling-app/commit/067a0c303251ec71218c8e00ef2f2a356547cbf2))
  • **b101-10:** order discovery cascade cost-first (+ cascade check tolerance/exclusions) ([f7e4bbe](https://github.com/42piratas/hiresling-app/commit/f7e4bbee29cd320e1abc9e6f8d1f1bac078392dd))
  • **b101-10:** order discovery cascade cost-first + cascade check tolerance/exclusions ([4af918d](https://github.com/42piratas/hiresling-app/commit/4af918d8a2e6cab1c21a31e113894bbffedf8e35))
  • **b101-10:** prod-mirror SIM harness — drive the real deployed queue ([8ebf2ff](https://github.com/42piratas/hiresling-app/commit/8ebf2ffaf805bec2b384caa17ad7f7975394f2dd))
  • **b101-10:** propagate SIM prod-mirror to the deployed worker ([91b7898](https://github.com/42piratas/hiresling-app/commit/91b78986bf90e6a8e541bcff2fca705f90f505c1))
  • **b101-10:** propagate SIM prod-mirror to the deployed worker ([0589ef1](https://github.com/42piratas/hiresling-app/commit/0589ef15a8206b1bfceb177339d77cab34737b8f))
  • **b101-10:** raise internal credit caps to unreachable (defer to provider 429) ([2b408ed](https://github.com/42piratas/hiresling-app/commit/2b408ed9302036dd3456c4996d3619bcd84fc522))
  • **b101-10:** SIM fidelity — ledger spend + staging queue trigger ([0b29cb4](https://github.com/42piratas/hiresling-app/commit/0b29cb4052c7fdeab103a3828df238ee0b5b8e79))
  • **b101-10:** single per-call cost registry — kill cost bands ([9714d2b](https://github.com/42piratas/hiresling-app/commit/9714d2b5943e5cb74fe0081c88a6463c308014f1))
  • **b101-10:** single per-call cost registry — real subscription costs, kill cost bands ([b7cb448](https://github.com/42piratas/hiresling-app/commit/b7cb448853c0e81680d9df7dd4eeb5a55e7f3bd6))
  • **B101-11:** discovery funnel + cascade tolerance + AI-cost badge ([6e0475a](https://github.com/42piratas/hiresling-app/commit/6e0475a43f36053fed9d435c1baa8ad93017bc04))
  • **B101-11:** discovery funnel Returned→Unique→Net-new + cascade tolerance + AI-cost badge ([ab4d4b0](https://github.com/42piratas/hiresling-app/commit/ab4d4b0d182e18594a436560744ead23e31efb19))
  • **b101-11:** systemic feed ordering (cost→ROI) + provider-only spend control ([cdaf731](https://github.com/42piratas/hiresling-app/commit/cdaf731981378ad73b46da0c2189a5fcf2c29582))
  • **b101-11:** systemic feed ordering (cost→ROI) + provider-only spend control ([03fdfec](https://github.com/42piratas/hiresling-app/commit/03fdfecfe6c883dba1c6c0ba58c6e12eba40c518))
  • **b101-13:** ledger-report correctness + parametrized generator + SIM-harness assertion fixes ([ca9eab5](https://github.com/42piratas/hiresling-app/commit/ca9eab5e0d0b2f12b429521ba13a53dc0e97f534))
  • **b101-13:** ledger-report correctness + parametrized generator + SIM-harness assertion fixes ([bd02d53](https://github.com/42piratas/hiresling-app/commit/bd02d538a1f7564049c759be2d0b98ac11f0d5ea))
  • **b101-14:** breadth-first draft distribution (favor unique companies) ([8c2cd95](https://github.com/42piratas/hiresling-app/commit/8c2cd9509e3a347a3cfcb09a61e702b90347a7e8))
  • **b101-14:** breadth-first draft distribution (favor unique companies) ([34ee89d](https://github.com/42piratas/hiresling-app/commit/34ee89d620451e68f2ef5c51fcdfb12dda6d4dde))
  • **b101-15:** one-off staging→prod warehouse promote script (dry-run validated) ([b944620](https://github.com/42piratas/hiresling-app/commit/b94462049ebb001ce3ddb28f0a984eb0373edd4b))
  • **b101-15:** one-off staging→prod warehouse promote script (dry-run validated) ([93de9b6](https://github.com/42piratas/hiresling-app/commit/93de9b66a389e61ac4f64d7def7b752541436f31))
  • **b102-01:** author italian it.json + wire message data (T5–T6)
  • **b102-01:** italian (it) i18n scaffolding — dark-launched (T1–T4)
  • **b102-01:** italian legal pages — PrivacyIT + TermsIT (dark-launched)
  • **b102-01:** legal-page IT cross-links + PT/ES governing-language clause
  • **b103-01:** contact-leg funnel correctness — persisted net-new + dedup + delivered layer ([94bf56d](https://github.com/42piratas/hiresling-app/commit/94bf56d25c4c48dd41054a79f3e96f937ce01a77))
  • **b103-01:** contact-leg funnel correctness — persisted net-new + dedup + delivered layer ([f5a8783](https://github.com/42piratas/hiresling-app/commit/f5a8783418a302eaaf8b97e03536215b3653a368))
  • **b91-02-t1:** close the settings i18n + lift skipped suite
  • **b91-02:** t2/t3/t4 + server-side outreach consent + ui polish
  • **b91-03:** data lifecycle prune + per-type counters + audit log + Polar idempotency
  • **b91-06:** tier-aware action caps + per-draft revision cap + monthly ai budget ([89f41e4](https://github.com/42piratas/hiresling-app/commit/89f41e4ac57d9612aa154124c711dbd4d49fc1ff))
  • **b91-06:** tier-aware action caps, per-draft revision cap, monthly ai budget ([dc7957e](https://github.com/42piratas/hiresling-app/commit/dc7957e5c888e2fbd4b0bf467f84b3d11b5e9b28))
  • **b91-07:** pipe why_next calibration signal into draft prompt
  • **b91-08:** staging fixture pool expansion — 50 cos + recycling + fair rotation + E2E
  • **b92-01:** faq + public-kb drift proofing + email length caps
  • **b92-02:** chat streams + send-failure alarms to Slack, drop 3 admin panels
  • **b92-03:** gmail send-failure schema guardrails + aggregate alarm + atomic compensation ([13175e9](https://github.com/42piratas/hiresling-app/commit/13175e92fb33ce465b3d35106fece3ba68945961))
  • **b92-04:** polar-driven pricing single source of truth ([f342015](https://github.com/42piratas/hiresling-app/commit/f34201598cf048df213dad6ea27a2dc3e883de3a))
  • **b92-04:** polar-driven pricing single source of truth ([48190db](https://github.com/42piratas/hiresling-app/commit/48190db7dffc95ce9458fe8c0adee72100f9ebce))
  • **b92-05:** litellm daily spend digest to Slack
  • **b92-06:** matomo daily product digest + align litellm to 09:00 UTC
  • **b92-07:** support-chat KB drift proofing + comprehensive coverage refresh
  • **b92-adhoc-alpha1-coverage:** t1 gmail referral + t2 picker coverage + t3 badge
  • **b92-adhoc-design-polish:** full design-polish pass (15 tasks)
  • **b92-adhoc-litellm-alias-namespace:** t2 phase 2 — app cutover to hiresling/<purpose> aliases
  • **b92-adhoc-resend:** daily resend digest cron + per-day counter
  • **b92-adhoc-target-roles:** hard-filter target_roles at every pipeline path
  • **b92-adhoc-token-naming-standardize:** dual-naming layer + partial scope sweep ([b1f18c4](https://github.com/42piratas/hiresling-app/commit/b1f18c4eddd7b56c4f18aa7527ded36487317354))
  • **b92-adhoc-token-naming-standardize:** dual-naming layer + partial scope sweep ([3472225](https://github.com/42piratas/hiresling-app/commit/3472225f2276413c7eac8ed3667f4cc9df0a0aea))
  • **b93-03:** atomic approve_send_outreach rpc + send-time email_sent cap ([28c289f](https://github.com/42piratas/hiresling-app/commit/28c289f3cc2e91f2cbefb654231209820ec5aade))
  • **b93-03:** atomic approve_send_outreach rpc + send-time email_sent cap ([03aef34](https://github.com/42piratas/hiresling-app/commit/03aef346538bebf3df85131aefb8013140c356d8))
  • **b93-04:** restore landing SSG + locale-prefix /ref + /how + FAB i18n + ICU plural ([2be04d6](https://github.com/42piratas/hiresling-app/commit/2be04d660f6ee597895f5f6f955a731cd0becff6))
  • **b93-04:** restore landing SSG + locale-prefix /ref + /how + FAB i18n + ICU plural ([b21d57f](https://github.com/42piratas/hiresling-app/commit/b21d57f551793017628b6751dddfbc7c67bfe1b7))
  • **b93-05:** i18n leaks sweep + email body_language stamp ([c58f10b](https://github.com/42piratas/hiresling-app/commit/c58f10bbea237342a2cf893a2961cb0f8c4df328))
  • **b93-05:** i18n leaks sweep + email body_language stamp ([a5918f6](https://github.com/42piratas/hiresling-app/commit/a5918f66c5bf22e09b1a41190a5b578b867edee8))
  • **b93-adhoc-fixture-role-family-coverage:** expand fixture pool to 25 role families
  • **b93:** onboarding polish + dashboard launch modal + tour DS alignment
  • **b97-01:** per-user user_contacts + contact_hashes cost-dedup (T1-T6.5)
  • **b98-01:** litellm ops — daily digest, cache wiring, fit-score haiku swap, attribution cleanup ([f5da8bf](https://github.com/42piratas/hiresling-app/commit/f5da8bfc9abec8712d7aeef056780e13b57bd00e))
  • **b98-01:** litellm ops — daily digest, cache wiring, fit-score haiku swap, attribution cleanup ([e834347](https://github.com/42piratas/hiresling-app/commit/e8343472b4364e8dccf8cdfe9c805ac39ac1c3ff))
  • **b98-02:** t11 + t12 + t13 — digest lane split + EMBEDDINGS_GLOBAL_KILL + docs ([b1c8f32](https://github.com/42piratas/hiresling-app/commit/b1c8f32e26a9c7b20c6202f407611dca61df27c1))
  • **b98-02:** t11 + t12 + t13 — digest lane split + kill switch + docs ([b65f23f](https://github.com/42piratas/hiresling-app/commit/b65f23f9bac388d7e43f2ee1ad8f94379613914c))
  • **b98-02:** t2 + t3 + t4 — voyage gateway aliases, embeddings utility, pgvector schema ([de36776](https://github.com/42piratas/hiresling-app/commit/de367762ac011e3b341b6fe9e58521c53dae93f8))
  • **b98-02:** t2 + t3 + t4 + t4.5 — voyage gateway aliases, embeddings utility, pgvector, prospect-bifurcation collapse ([8fe98a6](https://github.com/42piratas/hiresling-app/commit/8fe98a6859758cf712b0d8dc04a2c50aa8514315))
  • **b98-02:** t4.5 collapse runprospecting/runstagingprospecting bifurcation ([d603d34](https://github.com/42piratas/hiresling-app/commit/d603d34bd11f4bce05f8110522705607915c2e60))
  • **b98-02:** voyage embeddings adoption — ship T5+T6+T7+T8+T9+T14 ([0ff10a1](https://github.com/42piratas/hiresling-app/commit/0ff10a12a5ff7859c42216ea06db7d2d1753dadd))
  • **b98-02:** voyage embeddings adoption — ship T5+T6+T7+T8+T9+T14 ([240d688](https://github.com/42piratas/hiresling-app/commit/240d688677abb6d4ec4b93e2b78515506b50f55a))
  • **b98-03:** per-day outreach_drafted cap on draft generation
  • **b98-04:** dashboard tour V1 — 13-step walkthrough + anchor refactor ([2d6cf5a](https://github.com/42piratas/hiresling-app/commit/2d6cf5aff728d21dca74c407b12775b831f69858))
  • **b98-04:** dashboard tour V1 — 13-step walkthrough + anchor refactor ([ccec89f](https://github.com/42piratas/hiresling-app/commit/ccec89f9f55a27d38441e71409235b7aa2cd22d1))
  • **b99-07:** paid sources default-OFF opt-in + jsearch keep-tune + staging alert wiring
  • **b99-99-01:** beta access provisioning — comp_beta_5d tier + public /beta overlay ([be5606f](https://github.com/42piratas/hiresling-app/commit/be5606f4c5d92769184db4704d3236ab6769c3d9))
  • **b99-99-01:** beta access provisioning — comp_beta_5d tier + public /beta overlay ([bf9c694](https://github.com/42piratas/hiresling-app/commit/bf9c694f918c251fbcec2dc12ee4d1facb4a8007))
  • **b99-99-02:** beta feedback gate starts day 2 (day 1 free) ([9003d89](https://github.com/42piratas/hiresling-app/commit/9003d898cf8f2d06205acdeb93e291a655e63ffe))
  • **b99-99-02:** beta feedback gate starts day 2 (day 1 free) ([5c55be2](https://github.com/42piratas/hiresling-app/commit/5c55be279988a158db2595ef17b7ce523ce2a840))
  • **b99-99-02:** in-tool daily beta feedback gate ([c7f7c81](https://github.com/42piratas/hiresling-app/commit/c7f7c81e6d3ee555bf533a6876d146b9b2209d1c))
  • **b99-99-02:** in-tool daily beta feedback gate ([dbdccd5](https://github.com/42piratas/hiresling-app/commit/dbdccd563d54e5fdcf8d52a44209c2ef080318eb))
  • **b99-adhoc-apollo-prod-gaps:** apollo contact rewrite, source kill-switches, adzuna depth ([f31c401](https://github.com/42piratas/hiresling-app/commit/f31c401c5e7cc459ca063c414e93a7a7cb13c384))
  • **b99-adhoc-apollo-prod-gaps:** apollo contact rewrite, source kill-switches, adzuna depth ([7c58759](https://github.com/42piratas/hiresling-app/commit/7c58759c9afb3c31b11d4ab01768cbc1ad8f3324))
  • **b99-adhoc-brand-casing:** recase product wordmark to Hiresling.ai ([baffad3](https://github.com/42piratas/hiresling-app/commit/baffad3751d8ee48ebecde07bfc6269fc511c1ab))
  • **b99-adhoc-brand-casing:** recase product wordmark to Hiresling.ai ([141afca](https://github.com/42piratas/hiresling-app/commit/141afcab8a5c20d4791e1e279c283d5e91312e83))
  • **b99-adhoc-comp-allowlist:** comp grant on signup via email allowlist + Unlimited daily cap ([4d26853](https://github.com/42piratas/hiresling-app/commit/4d26853d7579158d49915995a283c209c8508466))
  • **b99-adhoc-comp-allowlist:** comp grant on signup via email allowlist + Unlimited daily cap ([cc02c54](https://github.com/42piratas/hiresling-app/commit/cc02c545107a0b09811f533b69293475dc433755))
  • **b99-discovery-guarantee:** multi-source free-first discovery + always-deliver batch guarantee
  • **b99-renewal-banner:** opt-in renewal default + 5-day countdown banner ([d543397](https://github.com/42piratas/hiresling-app/commit/d54339718311fb23dbc2b4d46c1cbdc31bd41224))
  • **b99-renewal-banner:** opt-in renewal default + 5-day countdown banner ([2a71d4c](https://github.com/42piratas/hiresling-app/commit/2a71d4cd25060093ad20b2046304d158d04d402e))
  • **b99-source-ops:** commercial-safe source lineup + free-plan quota alerts
  • **caps:** lower Pro/Max monthly caps to 200/350 + grandfather mechanism ([368d74c](https://github.com/42piratas/hiresling-app/commit/368d74ccd05e11ad51ea0d601efa61ebedaf768c))
  • **caps:** per-tier LiteLLM monthly AI budget — $12/$17/$27 (B99-99-98 T4) ([16828aa](https://github.com/42piratas/hiresling-app/commit/16828aa3585f5ce85332ef833f7d7e853b3726ae))
  • **caps:** per-tier LiteLLM monthly AI budget $12/$17/$27 (B99-99-98 T4) ([c23df43](https://github.com/42piratas/hiresling-app/commit/c23df434c8948a057d0f4a85f9c0f1a3a647554c))
  • **changelog:** restyle /changelog in onboarding card style ([f91cf05](https://github.com/42piratas/hiresling-app/commit/f91cf058b7ca1c0a2cf1bb283433e8c1a77722c1))
  • **changelog:** restyle /changelog in onboarding card style ([ab8e055](https://github.com/42piratas/hiresling-app/commit/ab8e0555d8a0d3a22c96d2ec9d220f8f9f48b22b))
  • **data-sources:** uniform cap enforcement + per-source cap toggle (B101-05-02) ([65faac7](https://github.com/42piratas/hiresling-app/commit/65faac71c2567fa005b4873eba2be157e98d4d13))
  • **data-sources:** uniform cap enforcement + per-source cap toggle (B101-05-02) ([e4cb733](https://github.com/42piratas/hiresling-app/commit/e4cb733f7b7a95bedda02b4c69bd3583389a7cd4))
  • **i18n:** skill PT/ES translations + search aliases + Settings i18n + hero sentence_10 ([9150928](https://github.com/42piratas/hiresling-app/commit/9150928a604113b771e4d39cf2287dc4ba968923))
  • **i18n:** skill PT/ES translations + search aliases + Settings i18n + hero sentence_10 ([7bb588d](https://github.com/42piratas/hiresling-app/commit/7bb588d3e425e388a5c67a4c213adfc2444ca1df))
  • **legal:** b91-04 phase a — privacy + fit-scoring legal sweep ([#637](https://github.com/42piratas/hiresling-app/issues/637) follow-up)
  • **legal:** b91-04 phase b — terms §6 r1b controller/processor rewrite
  • **matomo:** track staging into idSite=8 + digest renders prod + staging
  • **onboarding:** prefill email-signature with Google account name ([20c5ac7](https://github.com/42piratas/hiresling-app/commit/20c5ac7bde9911c95ac6abe29d8fea6348e64adf))
  • parameterized comp trial tiers (comp_pro_7d) via COMP_TIER_CONFIG ([3696008](https://github.com/42piratas/hiresling-app/commit/36960080ff1acb71070488b96ac36cf2e9820a6a))
  • parameterized comp trial tiers (comp_pro_7d) via COMP_TIER_CONFIG ([232a4da](https://github.com/42piratas/hiresling-app/commit/232a4da8835a6d24eebe25c54c518e6e8404def1))
  • **scripts:** add set-admin + set-beta-tester operator provisioning CLIs ([1700f18](https://github.com/42piratas/hiresling-app/commit/1700f18a151003c7bde870f34e9108efefe49ef7))
  • **scripts:** operator provisioning CLIs (set-admin + set-beta-tester) ([23a74c3](https://github.com/42piratas/hiresling-app/commit/23a74c3ff9e8a49c005f3fb343f9605ae4b936de))
  • **settings:** rewrite Settings panel — referrals, compensation, email, targeting ([5b444ad](https://github.com/42piratas/hiresling-app/commit/5b444ad33f33c844f0a6a4514125c6abfb545001))
  • **settings:** rewrite Settings panel — referrals, compensation, email, targeting ([18da7ee](https://github.com/42piratas/hiresling-app/commit/18da7ee76ca671252fed121d16716adbda47a2e7))
  • **source-caps:** enforce real paid monthly quotas
  • **support:** env-gated CC on Plain email fallback

Bug Fixes

  • add `components/NonceBootstrap.tsx` server component that reads `x-nonce` from headers and renders a server-side `<script nonce={...}>` element. canonical next.js trigger to wire the nonce into `renderToReadableStream`, which stamps the same nonce on every inline framework script next emits for the route. mount in 5 protected layouts (dashboard / admin / onboarding / consent / relanguage). public routes untouched — locale layout stays static (b93-04 t1 ssg posture preserved). matomo + fp inline-hash list stays in protected posture (those scripts render without the nonce attribute by b93-04 t1 design; sha-256 match is correct for them). ([1e78ee6](https://github.com/42piratas/hiresling-app/commit/1e78ee64c70415710913203b55b44219d2add562))
  • add `components/NonceBootstrap.tsx` server component that reads `x-nonce` from headers and renders a server-side `<script nonce={...}>` element. canonical next.js trigger to wire the nonce into `renderToReadableStream`, which stamps the same nonce on every inline framework script next emits for the route. mount in 5 protected layouts (dashboard / admin / onboarding / consent / relanguage). public routes untouched — locale layout stays static (b93-04 t1 ssg posture preserved). matomo + fp inline-hash list stays in protected posture (those scripts render without the nonce attribute by b93-04 t1 design; sha-256 match is correct for them). ([14f4e96](https://github.com/42piratas/hiresling-app/commit/14f4e96960bdba4b8337af93bdc3f134ae3f7ea3))
  • **adhoc-chat-escalated-styling:** drop muted-foreground recolor on escalated messages
  • **adhoc-chat-slack-waituntil:** wrap Slack fire-and-forget in after()
  • **adhoc-fit-modal:** full-breakdown modal canon + cursor + email language
  • adhoc-pt-quality-sweep — apply 39 i18n findings + tone-tiered opt-out
  • **adhoc-support-chat-refund:** bucket billing/refund as escalation
  • **adhoc:** close every browser-console finding from 260520 staging audit
  • **adhoc:** wipe-user prod guard accepts the custom auth domain ([d546063](https://github.com/42piratas/hiresling-app/commit/d546063edfd3048b35ff3d6f866fa0f358b9e502))
  • **adhoc:** wipe-user prod guard accepts the custom auth domain ([3063b18](https://github.com/42piratas/hiresling-app/commit/3063b1844e2126e731913e91b415bd65f62e24fd))
  • **ai-call-worker:** nest cache_control inside content-block
  • **b101-01:** parallelize fit-canary candidate scoring ([9a4a3eb](https://github.com/42piratas/hiresling-app/commit/9a4a3ebc7eb451f1b83fbbaf21c8a11ce715232e))
  • **b101-01:** parallelize fit-canary candidate scoring ([561d7a3](https://github.com/42piratas/hiresling-app/commit/561d7a3190751b45df64082ecb452953632aa041))
  • **b101-04:** free-source health — careerjet retry + direct-HTTP pre-flight liveness ([de481cb](https://github.com/42piratas/hiresling-app/commit/de481cb63340611dc0ad5e72c59e471c31b37721))
  • **b101-04:** free-source health — careerjet retry + direct-HTTP pre-flight liveness (T7) ([de595cc](https://github.com/42piratas/hiresling-app/commit/de595ccb393e69d0397735c99a2cc67dc126fad7))
  • **b101-04:** pre-flight theirstack probe reads authoritative credit-balance ([a79953b](https://github.com/42piratas/hiresling-app/commit/a79953bde547b287ae755e8434c2dfb1474bffbd))
  • **b101-08:** make pipeline_events breadcrumbs throw-proof ([373764c](https://github.com/42piratas/hiresling-app/commit/373764c4b68a7a8ac7b999bef344081f49def0f7))
  • **b101-09:** correct jsearch employment enum + tomba preflight gate ([d8a9252](https://github.com/42piratas/hiresling-app/commit/d8a9252fee30ad55ecb23dab521b61de5e7f816b))
  • **b101-09:** correct jsearch employment enum + tomba preflight gate ([2bd29d5](https://github.com/42piratas/hiresling-app/commit/2bd29d551bccf0df792d68aaf8e27a0ff64a02a0))
  • **b101-09:** correct the 3 SIM behavior assertions (cascade/contact/buffering) ([7b8ef91](https://github.com/42piratas/hiresling-app/commit/7b8ef91e85ad36cc45c56b283dd6556e4665ce6d))
  • **b101-09:** correct the 3 SIM behavior assertions (cascade/contact/buffering) ([ae429ea](https://github.com/42piratas/hiresling-app/commit/ae429ea400ba47c6cd4503974d21480b2bf6e987))
  • **b101-09:** split SIM run-id off batchRunId so user_outreach inserts stop 22P02-ing ([c4c4810](https://github.com/42piratas/hiresling-app/commit/c4c48105e1a7372f0c0889a59398e6a145641bfb))
  • **b101-09:** split SIM run-id off batchRunId so user_outreach inserts stop 22P02-ing ([4b1e16f](https://github.com/42piratas/hiresling-app/commit/4b1e16f3f32a2c95ab4148f8ec8b5d53a0bb31a5))
  • **b101-10:** best_first_delivery assertion checks draft order, not send order ([d5f4ddc](https://github.com/42piratas/hiresling-app/commit/d5f4ddc581a4be7516df9ba7a6f28dbe452450da))
  • **b101-10:** best_first_delivery assertion checks draft order, not send order ([b83035b](https://github.com/42piratas/hiresling-app/commit/b83035b1f1d6643e92910e6c2ff26c4ec01d0a99))
  • **b101-10:** day-1 queued batch uses first-run order (drafts on day 1) ([5cb40ef](https://github.com/42piratas/hiresling-app/commit/5cb40efb87ce1ca42856c09db601e27b5e19f377))
  • **b101-10:** day-1 queued batch uses first-run order so it drafts ([ac256cb](https://github.com/42piratas/hiresling-app/commit/ac256cbcaf6119c91cf69dc7fd1c39ff42d25815))
  • **b101-10:** drop redundant server-only from source-costs so the SIM harness loads ([193d925](https://github.com/42piratas/hiresling-app/commit/193d92565b73ce3f86c0b9f909dba19a29d58502))
  • **b101-10:** preserve outer SIM context through processBatchForUser ([a8d80f4](https://github.com/42piratas/hiresling-app/commit/a8d80f41db10356b2842878b96677a8702b2ef07))
  • **b101-10:** preserve outer SIM context through processBatchForUser ([4c8935d](https://github.com/42piratas/hiresling-app/commit/4c8935d6a91d1ed8b81961343e8ee64646744f60))
  • **b101-10:** raise batch worker maxDuration for cold real first-batch ([629f1b3](https://github.com/42piratas/hiresling-app/commit/629f1b3928b650a01c9970d13fe8dc93a3ee8610))
  • **b101-10:** raise batch worker maxDuration for cold real first-batch ([ac1efed](https://github.com/42piratas/hiresling-app/commit/ac1efed969a6d41a27fea52517790ecef96a1db7))
  • **b101-10:** read sim spend from pipeline_events ledger, not /spend/logs ([1d74933](https://github.com/42piratas/hiresling-app/commit/1d749330f51d1e32c861f002a33bec2f7855b44b))
  • **b101-10:** SIM enablement — harness import + raise internal caps to defer to provider 429 ([5ea03f1](https://github.com/42piratas/hiresling-app/commit/5ea03f102e89db6111e8910468f01ce3dc0c4307))
  • **b101-10:** source-value digest reads the single per-call cost registry ([d095323](https://github.com/42piratas/hiresling-app/commit/d095323cc9a83075ea4405c5f560a9d1e6c593a7))
  • **B101-11:** company-leg yield = net-new inserts, not opening rows ([e438578](https://github.com/42piratas/hiresling-app/commit/e438578173090f5de66a8a384cb5925c7f8b7bb5))
  • **b101-11:** contact finder cost-order — rank dual-purpose apollo by per-call cost ([0f955b6](https://github.com/42piratas/hiresling-app/commit/0f955b6d05bf9a3d273a5dfcffec75d2f6081035))
  • **B101-11:** emit company-leg yield from net-new inserts, not opening rows ([8930c14](https://github.com/42piratas/hiresling-app/commit/8930c1486369421c431c4d6bee28f392187a86ce))
  • **b101-11:** rank contact finders by real per-call cost (dual-purpose apollo) ([49b02e9](https://github.com/42piratas/hiresling-app/commit/49b02e914a0623bfa6befe4f167611ee9046f3eb))
  • **B101-11:** zero rows_new on google_places self-emitted cost row ([c1aca38](https://github.com/42piratas/hiresling-app/commit/c1aca38e3275d67bbf15742ef697d7e4cf2669a2))
  • **B101-11:** zero rows_new on google_places self-emitted cost row ([0845026](https://github.com/42piratas/hiresling-app/commit/08450265715662c2386e3a220e230f88152abe3a))
  • **B101-13:** tag scrape contacts-report total as AI cost ([45aaf50](https://github.com/42piratas/hiresling-app/commit/45aaf5083b4b4969bf15b5376e03a279fb58060b))
  • **B101-13:** tag scrape contacts-report total as AI cost ([504a51c](https://github.com/42piratas/hiresling-app/commit/504a51ca8a57ebed5d9b32ff0341333733ea5e88))
  • **b102-02:** use ASCII apostrophe in IT close-button aria-label
  • **b103-01:** per-source funnel monotonicity + generic_inbox rows_distinct + HTML delivered line ([a85f3bb](https://github.com/42piratas/hiresling-app/commit/a85f3bb8f858df4cb611622a6d4b656dedf49cad))
  • **b103-01:** per-source funnel monotonicity + generic_inbox rows_distinct + HTML delivered line ([8ca30f6](https://github.com/42piratas/hiresling-app/commit/8ca30f629b2c034d8f870af3ef835c6a6df77310))
  • **b91-02-t1:** i18n the two strings the EN walk missed
  • **b91-03:** prune RPC keeps pending drafts in dormant threads
  • **b91-06:** drop orphan placeholder migrations ([b69fe94](https://github.com/42piratas/hiresling-app/commit/b69fe942bf045a1b0c5c5b171833e19d697bd19a))
  • **b91-06:** orphan migration placeholders unblock staging-db-sync ([2712921](https://github.com/42piratas/hiresling-app/commit/2712921e910c526ea9de5355c28fddea8f4cc75f))
  • **b91-06:** t11 max_budget sentinel + migration timestamp collision ([786b32e](https://github.com/42piratas/hiresling-app/commit/786b32ed70ff3fe0b1909e57533da9d0cfc1c0ef))
  • **b91-08:** emit one surface per company in runStagingProspecting
  • **b92-adhoc-csp-pure-nonce:** nonce-thread next bootstrap on protected routes
  • **b92-adhoc-e2e-findings:** 11 backend / a11y / seo fixes from 2026-05-23 e2e batch
  • **b92-adhoc-language-overwrite-fix:** single-writer language column
  • **b93-adhoc-language-picked-at-loop:** remove dashboard gate, stamp at signup, backfill nulls
  • **b93-adhoc-security-review-r8:** full r8 remediation + r7 carryover
  • **b93-adhoc-security-review-r8:** r8-h5 same-class sweep + migration doc fix ([01c599f](https://github.com/42piratas/hiresling-app/commit/01c599fa2d5c5b5c9a6fa7377a4b801913660f53))
  • **b93-adhoc-security-review-r8:** r8-h5 same-class sweep + migration doc fix ([81833ea](https://github.com/42piratas/hiresling-app/commit/81833eac6097373ab494f1491449a1d5a9aa1e79))
  • **b97-01 soak:** lazy-copy legacy contacts → user_contacts + repoint AC2
  • **b98-01:** slack mrkdwn whitespace, full-digest link, recordconsent silent error ([412b83c](https://github.com/42piratas/hiresling-app/commit/412b83c046e9bf65032fcef9f406d9821905c2ae))
  • **b98-02:** clear 3 lint errors blocking ci ([8bf1ad5](https://github.com/42piratas/hiresling-app/commit/8bf1ad5feb1c6e1af6df358af1b6010f45f01a09))
  • **b98-02:** t4.5-2 enrichCompany — coerce null stage + use correct freshness column ([baa3603](https://github.com/42piratas/hiresling-app/commit/baa3603399a85df5c6f32ddb8158b60af3f8f695))
  • **b99-06:** add wss: to prod CSP connect-src for Supabase Realtime ([95647d3](https://github.com/42piratas/hiresling-app/commit/95647d3370d43ffdc59aebdd1257ae52c9dc99a2))
  • **b99-06:** add wss: to prod CSP connect-src for Supabase Realtime ([23a2d0e](https://github.com/42piratas/hiresling-app/commit/23a2d0e34a1daf36d8cd684c89494ea5d6fdfc04))
  • **b99-06:** drop dropped-column write + always-render drafts footer ([48ace30](https://github.com/42piratas/hiresling-app/commit/48ace302b334b0e7bd08018c567de54661508d3e))
  • **b99-06:** drop dropped-column write + always-render drafts footer ([d75b009](https://github.com/42piratas/hiresling-app/commit/d75b009f1b0fd9210c75157809caf86e28198971))
  • **b99-06:** report purgedUsageRows from hourly-batch cron response ([5bcdd9d](https://github.com/42piratas/hiresling-app/commit/5bcdd9d21259c8686670181c812bf194ee617366))
  • **b99-06:** report purgedUsageRows from hourly-batch cron response ([94eaf2e](https://github.com/42piratas/hiresling-app/commit/94eaf2ed7fd410c16329e785724bde1f82848f2d))
  • **b99-06:** update 2 stale test assertions for the prospecting + footer fixes ([582fce2](https://github.com/42piratas/hiresling-app/commit/582fce24359c2d08d251cd91b7e073fbec98b502))
  • **b99-99-03:** buffer readiness probe at depth-1 (contact-cost claw-back pt 2)
  • **b99-discovery:** careerjet api is http-only, not https
  • **b99-renewal-banner:** calendar-day countdown (staging-walk off-by-one) ([36ca8a4](https://github.com/42piratas/hiresling-app/commit/36ca8a4389b4986c99a55a21af35fcf2e9786285))
  • **b99-renewal-banner:** count renewal countdown by calendar day, not elapsed ms ([ee5a597](https://github.com/42piratas/hiresling-app/commit/ee5a597faced3b7d70893b0e74f3661f4371de4f))
  • **b99-review-fixes:** consolidated R9 code/data/security fixes
  • **b99-review-fixes:** sync pnpm-lock.yaml after anthropic-sdk drop
  • **beta:** add point-of-collection privacy notice on /beta intake
  • **changelog:** move theme-light to layout per theme-scope invariant ([1eee32b](https://github.com/42piratas/hiresling-app/commit/1eee32b28a82ba624e22e81e163680b56e82b2fb))
  • **chat-kb:** drop email export path, sync settings/fit-score/pipeline copy ([f0ea1e4](https://github.com/42piratas/hiresling-app/commit/f0ea1e4e95595343191a867b991574becabe53ab))
  • **chat-kb:** drop email export path, sync settings/fit-score/pipeline copy ([f99f78c](https://github.com/42piratas/hiresling-app/commit/f99f78ca0521b1941e0da555ce25d893130b3226))
  • **ci:** wire staging E2E secrets + auto-apply fixture seed via staging-db
  • **comp:** extend users_tier_check to allow comp_pro_7d ([f5b419f](https://github.com/42piratas/hiresling-app/commit/f5b419f1491437a0eb331e0651cbbb1e76e4d330))
  • **comp:** extend users_tier_check to allow comp_pro_7d ([ccb8530](https://github.com/42piratas/hiresling-app/commit/ccb8530d7ad5b4d3b3c26d0bca3cc9dbc21b4f70))
  • **cost-ledger:** units-driven cost + persisted yield + report fidelity ([9f73f79](https://github.com/42piratas/hiresling-app/commit/9f73f792ca3927b3a6dbde15c2fc4ae818550dd1))
  • **cost-ledger:** units-driven cost + persisted yield + report fidelity ([0092214](https://github.com/42piratas/hiresling-app/commit/0092214294d42b9a84516b0e5ded853e0d999154))
  • **dashboard:** adhoc — drafts/activity tabs froze on parent prop reload
  • **dashboard:** drop empty-drafts subtext, keep 'No drafts pending' (B99-99-98) ([1b638c5](https://github.com/42piratas/hiresling-app/commit/1b638c51a575da8a30e6ccb10b2e69a2cb011716))
  • **dashboard:** drop empty-drafts subtext, keep core 'No drafts pending' (B99-99-98) ([365f417](https://github.com/42piratas/hiresling-app/commit/365f417a4da1fab8926e8579927f226b223cae53))
  • **e2e:** align fixture pool count + tolerate 502 on ai routes ([f4cddc4](https://github.com/42piratas/hiresling-app/commit/f4cddc4d3fee941b4ea40897a33c3296ccf81b01))
  • **e2e:** bump t1+t2 timeouts to absorb real pipeline latency
  • **e2e:** excellence path — SSR cookies for vitest + Playwright, fix landing CTA selector
  • **e2e:** mint real user JWT via verifyOtp + add required users.name in AC9 T6
  • **e2e:** per-test timeouts for AI routes + accept 502 from Polar SDK + always-run Playwright
  • **e2e:** poll DB for [T] outreach instead of DOM in B91-08 walk
  • **e2e:** record signup consent + handle orphan auth users in session mint
  • **e2e:** repair stale user shape on every mint + bump batch-completion timeout
  • **e2e:** seed GoTrue token columns on fixture-template auth row
  • **e2e:** set Playwright cookies non-httpOnly so browser Supabase client can read them
  • **e2e:** skip 5 broken Playwright tests with TODO pointing at magic-link flow mismatch
  • **e2e:** skip 7 broken authenticated API tests with TODO pointing at cookie/Bearer mismatch
  • **e2e:** swap fixture-pool spec batch trigger to end-user first-batch route
  • **e2e:** swap t1 batch trigger to end-user first-batch route
  • **email:** adhoc bundle — header mojibake, sample salutation, batch copy, signature spacing
  • **hero:** add APIs sentence, fix PT/ES overflow, drop discovery badges
  • **i18n-smoke:** map locale pt -&gt; pt-br for users.language CHECK ([66e372a](https://github.com/42piratas/hiresling-app/commit/66e372a1f4180641274afbcac95fda87da1caf47))
  • **i18n-smoke:** map locale pt -&gt; pt-br for users.language CHECK ([f20e549](https://github.com/42piratas/hiresling-app/commit/f20e5495f03c1dd7e734cc07af7cc1175bba23df))
  • **i18n-smoke:** scope EN-leak check to multi-word phrases ([329e6d5](https://github.com/42piratas/hiresling-app/commit/329e6d54b0e903770139cdf555fe37ac563ea0c8))
  • **i18n-smoke:** scope EN-leak check to multi-word phrases ([36a2345](https://github.com/42piratas/hiresling-app/commit/36a2345eb716b94f5a43a98d4da0cc68e72682b9))
  • **landing:** adhoc — explainer poster to true first frame
  • **landing:** adhoc — explainer video poster
  • **litellm-digest:** parse real /spend/logs shape (team_id UUID + string spend)
  • **outreach:** widen body_language to 'it', reserve PS budget, guard resume link (B101-04) ([fda87b7](https://github.com/42piratas/hiresling-app/commit/fda87b7cd73f9daeb7bcfb8d7dde1ef1cb2406a8))
  • **outreach:** widen body_language to 'it', reserve PS budget, guard resume link (B101-04) ([3af8e7a](https://github.com/42piratas/hiresling-app/commit/3af8e7a8ae18523baa96a8798cd94f62338c10dd))
  • **plain:** tighten ticket-title prompt so LLM emits a label, not a bot reply
  • **plain:** title-gen via callAI direct + drop meta-ticket cascade
  • **promote:** resolve staging↔main conflicts for [#675](https://github.com/42piratas/hiresling-app/issues/675) promotion ([76a0857](https://github.com/42piratas/hiresling-app/commit/76a0857722bcfe79e5c8ee63d11dc5a89c98971f))
  • **scripts:** set-beta-tester --reset clears pipeline only, not onboarding ([a9bdf25](https://github.com/42piratas/hiresling-app/commit/a9bdf2522311ba0e964660ff8c18f75703306724))
  • **sources:** repair Apollo company-search payload + Snov async domain-email flow (B101-04 bug 2) ([177b36f](https://github.com/42piratas/hiresling-app/commit/177b36fa793801976dc2b8dc314ffebfefb6878b))
  • **typst:** ship linux binary to all batch render routes ([8e35e2f](https://github.com/42piratas/hiresling-app/commit/8e35e2fab63fd601c3c59a95402849a4d048d063))
  • **typst:** ship linux binary to all batch render routes ([52a2fbe](https://github.com/42piratas/hiresling-app/commit/52a2fbe49a4a023b8a0726c139046ad3b0712fec))
  • **usage:** adhoc — checkLimit off-by-one undershoots tier cap by 1
v0.2.02026-04-14

Features

  • SurveyJS onboarding questionnaire replacing Fillout (steps 1–10, EN/PT/ES inline translations)
  • Dashboard onboarding tour (Shepherd.js, 8 steps, completion flag, admin reset)
  • Onboarding tour admin reset button and per-user API endpoint
  • Release notes system — /changelog page, release-please automation, Resend release emails

Bug Fixes

  • Canny feedback widget replaced with Discord Forum Channel escalation path