Author SHA1 Message Date
ilia e6387b87c2 ci: allowlist known historical/fixture gitleaks findings
CI / skip-ci-check (pull_request) Successful in 12s
CI / docker-ci (pull_request) Successful in 12s
CI / secret-scan (pull_request) Successful in 14s
2026-07-13 15:55:39 -04:00
ilia 12e021dca0 ci: fix gitleaks no-op ruleset (add useDefault = true)
CI / skip-ci-check (pull_request) Successful in 10s
CI / docker-ci (pull_request) Successful in 12s
CI / secret-scan (pull_request) Failing after 13s
2026-07-12 18:15:24 -05:00
ilia 972f0c8278 ci: add local pre-commit gitleaks hook
CI / skip-ci-check (pull_request) Successful in 13s
CI / docker-ci (pull_request) Successful in 13s
CI / secret-scan (pull_request) Successful in 12s
2026-07-12 16:21:25 -05:00
ilia 23416a8273 ci: add local pre-commit gitleaks hook 2026-07-12 16:21:25 -05:00
4 changed files with 14 additions and 6 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ During a pipeline run, if a new posting matches an existing row by URL, source i
Open jobs that match a prior skip or apply are **hidden** from Discovered, Ready, and All tabs so the queue stays fresh. Skipped and applied rows themselves remain visible in their statuses.
Use **Filters → Employer keywords → Hide roles you already skipped** to toggle this behavior (off by default). When enabled, JobOps compares **company + job title** only:
Use **Filters → Employer keywords → Hide roles you already skipped** to toggle this behavior (on by default). When enabled, JobOps compares **company + job title** only:
- Same company after normalization (legal suffixes stripped; short names like `CGI` match longer forms like `CGI IT UK Limited`).
- Same title after normalization (including simple plural variants such as `Engineer` vs `Engineers`).
@@ -1,5 +1,6 @@
import { useSettings } from "@client/hooks/useSettings";
import { buildDuplicateDismissHints } from "@client/lib/job-dedup";
import { inferCountryKeyFromSearchGeography } from "@shared/search-cities";
import type React from "react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
@@ -167,6 +168,12 @@ export const OrchestratorPage: React.FC = () => {
[settings],
);
const searchGeographyCountryKey = useMemo(
() =>
inferCountryKeyFromSearchGeography(settings?.searchCities?.value ?? null),
[settings?.searchCities?.value],
);
const duplicateDismissHints = useMemo(
() => (hidePriorSkips ? buildDuplicateDismissHints(jobs) : undefined),
[hidePriorSkips, jobs],
@@ -181,7 +188,7 @@ export const OrchestratorPage: React.FC = () => {
settingsBlockedEmployerKeywords: applySettingsCompanySkipList
? settingsSkipEmployerKeywords
: [],
searchGeographyCountryKey: null,
searchGeographyCountryKey,
duplicateDismissHints,
}),
[
@@ -191,6 +198,7 @@ export const OrchestratorPage: React.FC = () => {
employerExcludeFilter,
applySettingsCompanySkipList,
settingsSkipEmployerKeywords,
searchGeographyCountryKey,
duplicateDismissHints,
],
);
@@ -257,7 +257,7 @@ export const OrchestratorFilters: React.FC<OrchestratorFiltersProps> = ({
employerIncludeFilter.length > 0 || employerExcludeFilter.length > 0,
) +
Number(!applySettingsCompanySkipList) +
Number(hidePriorSkips) +
Number(!hidePriorSkips) +
Number(sponsorFilter !== "all") +
Number(sponsorshipSignalsFilter.length > 0) +
Number(hideSponsorBlockers) +
@@ -436,7 +436,7 @@ export const useOrchestratorFilters = () => {
);
const hidePriorSkips = useMemo(
() => searchParams.get("hidePriorSkips") === "1",
() => searchParams.get("hidePriorSkips") !== "0",
[searchParams],
);
@@ -458,8 +458,8 @@ export const useOrchestratorFilters = () => {
(value: boolean) => {
setSearchParams(
(prev) => {
if (value) prev.set("hidePriorSkips", "1");
else prev.delete("hidePriorSkips");
if (value) prev.delete("hidePriorSkips");
else prev.set("hidePriorSkips", "0");
return prev;
},
{ replace: true },