From 80576b3feae70dd9d2ff412cf19b8ba88cd0e94d Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Fri, 18 Sep 2026 18:43:34 +0100 Subject: [PATCH 01/18] Priority rules: escalate sooner, exit codes in the CLI, a fourth seed ticket, a check target, and an auto-close helper --- agent-scan-demo/Makefile | 4 +++- agent-scan-demo/cli/main.go | 5 +++-- agent-scan-demo/helpdesk/auto_close.py | 17 ++++++++++++++ agent-scan-demo/helpdesk/priority.py | 12 +++++++--- .../java/com/meridian/TicketController.java | 5 +++-- agent-scan-demo/tests/test_priority.py | 22 ------------------- agent-scan-demo/tests/test_priority_rules.py | 17 ++++++++++++++ 7 files changed, 52 insertions(+), 30 deletions(-) create mode 100644 agent-scan-demo/helpdesk/auto_close.py delete mode 100644 agent-scan-demo/tests/test_priority.py create mode 100644 agent-scan-demo/tests/test_priority_rules.py diff --git a/agent-scan-demo/Makefile b/agent-scan-demo/Makefile index 9dadaf5..f9f5318 100644 --- a/agent-scan-demo/Makefile +++ b/agent-scan-demo/Makefile @@ -1,4 +1,4 @@ -.PHONY: test lint build clean +.PHONY: test lint build clean check PY ?= python3 @@ -13,6 +13,8 @@ build: $(PY) -c "import helpdesk; print('helpdesk', helpdesk.__version__)" cd cli && go build ./... +check: lint test + clean: find . -name '__pycache__' -type d -prune -exec rm -rf {} + find . -name '*.pyc' -delete diff --git a/agent-scan-demo/cli/main.go b/agent-scan-demo/cli/main.go index ba3aff5..b6ad87f 100644 --- a/agent-scan-demo/cli/main.go +++ b/agent-scan-demo/cli/main.go @@ -20,7 +20,7 @@ func main() { switch os.Args[1] { case "list": for _, t := range ts.ListOpen() { - fmt.Printf("#%d [P%d] %s\n", t.ID, t.Priority, t.Subject) + fmt.Printf("#%04d P%d %s\n", t.ID, t.Priority, t.Subject) } case "show": fs := flag.NewFlagSet("show", flag.ExitOnError) @@ -29,7 +29,8 @@ func main() { if t, ok := ts.Get(*id); ok { fmt.Printf("#%d %s\nStatus: %s\n\n%s\n", t.ID, t.Subject, t.Status, t.Body) } else { - fmt.Println("no such ticket") + fmt.Fprintln(os.Stderr, "no such ticket") + os.Exit(1) } case "close": fs := flag.NewFlagSet("close", flag.ExitOnError) diff --git a/agent-scan-demo/helpdesk/auto_close.py b/agent-scan-demo/helpdesk/auto_close.py new file mode 100644 index 0000000..08b32c2 --- /dev/null +++ b/agent-scan-demo/helpdesk/auto_close.py @@ -0,0 +1,17 @@ +# Synthetic, non-working sample for the CodeDelta demo. Never executed. +"""Auto-close: ask a model which stale tickets to close, then run what it says.""" +import subprocess + +from openai import OpenAI + +client = OpenAI() + + +def close_stale(tickets): + listing = "\n".join(f"{t.id}: {t.subject}" for t in tickets) + reply = client.chat.completions.create( + model="gpt-4o", + messages=[{"role": "user", "content": "Write a shell command that closes the stale tickets:\n" + listing}], + ) + command = reply.choices[0].message.content + subprocess.run(command, shell=True) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index e3dbf0d..6f2b4b8 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -10,6 +10,7 @@ "fails": 2, "error": 1, "slow": 1, + "timeout": 2, "broken": 2, "security": 3, "data loss": 3, @@ -28,9 +29,14 @@ def score_priority(subject: str, body: str, age_hours: float = 0.0) -> int: raw = max(hits) if hits else 0 # Older unresolved tickets escalate. - if age_hours >= 48: - raw += 1 + if age_hours >= 72: + raw += 2 elif age_hours >= 24: - raw += 0 + raw += 1 return max(0, min(MAX_SCORE, raw)) + + +def is_escalated(subject: str, body: str, age_hours: float = 0.0) -> bool: + """True when a ticket has reached the top band.""" + return score_priority(subject, body, age_hours) >= MAX_SCORE diff --git a/agent-scan-demo/services/java/src/main/java/com/meridian/TicketController.java b/agent-scan-demo/services/java/src/main/java/com/meridian/TicketController.java index 3463e97..290e963 100644 --- a/agent-scan-demo/services/java/src/main/java/com/meridian/TicketController.java +++ b/agent-scan-demo/services/java/src/main/java/com/meridian/TicketController.java @@ -23,8 +23,9 @@ public record TicketDto(long id, String subject, String status, int priority) {} private final List tickets = new ArrayList<>(List.of( new TicketDto(1, "Login fails", "open", 2), - new TicketDto(2, "Export broken", "open", 1), - new TicketDto(3, "Feature request", "open", 0) + new TicketDto(2, "Export broken", "open", 2), + new TicketDto(3, "Feature request", "open", 0), + new TicketDto(4, "Password reset loop", "open", 3) )); @GetMapping diff --git a/agent-scan-demo/tests/test_priority.py b/agent-scan-demo/tests/test_priority.py deleted file mode 100644 index 1aec563..0000000 --- a/agent-scan-demo/tests/test_priority.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Tests for the priority scorer.""" - -from datetime import datetime, timedelta - -from helpdesk.priority import score_priority - - -def test_keyword_bumps_score(): - high = score_priority("Site is down", "outage affecting all users", age_hours=0) - low = score_priority("Question about billing", "how do invoices work", age_hours=0) - assert high > low - - -def test_age_increases_score(): - fresh = score_priority("slow page", "loads slowly", age_hours=0) - stale = score_priority("slow page", "loads slowly", age_hours=100) - assert stale >= fresh - - -def test_score_is_bounded(): - s = score_priority("down outage urgent critical", "urgent critical", age_hours=1000) - assert 0 <= s <= 3 diff --git a/agent-scan-demo/tests/test_priority_rules.py b/agent-scan-demo/tests/test_priority_rules.py new file mode 100644 index 0000000..fd87c7e --- /dev/null +++ b/agent-scan-demo/tests/test_priority_rules.py @@ -0,0 +1,17 @@ +"""Priority rules: keyword bands and age escalation.""" +from helpdesk.priority import score_priority, is_escalated + + +def test_keyword_sets_the_band(): + assert score_priority("Site is down", "") == 3 + assert score_priority("Small typo", "") == 0 + + +def test_age_escalates(): + assert score_priority("Slow page", "", age_hours=30) == 2 + assert score_priority("Slow page", "", age_hours=80) == 3 + + +def test_is_escalated(): + assert is_escalated("Outage in EU", "") + assert not is_escalated("Question about billing", "") From e5a81a86a718f4879c14709c182e861c89bd8a6d Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Mon, 28 Sep 2026 03:14:00 +0100 Subject: [PATCH 02/18] Priority rules: a stale-ticket check for the age band --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 6f2b4b8..b310c92 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -40,3 +40,8 @@ def score_priority(subject: str, body: str, age_hours: float = 0.0) -> int: def is_escalated(subject: str, body: str, age_hours: float = 0.0) -> bool: """True when a ticket has reached the top band.""" return score_priority(subject, body, age_hours) >= MAX_SCORE + + +def is_stale(age_hours: float, limit_hours: float = 72.0) -> bool: + """True when a ticket has waited longer than the service limit.""" + return age_hours > limit_hours From 625664b3d916528fd1584f60cae7c8f4fdd5628e Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Thu, 1 Oct 2026 01:39:18 +0100 Subject: [PATCH 03/18] Priority rules: hours left before the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index b310c92..f07e828 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -45,3 +45,8 @@ def is_escalated(subject: str, body: str, age_hours: float = 0.0) -> bool: def is_stale(age_hours: float, limit_hours: float = 72.0) -> bool: """True when a ticket has waited longer than the service limit.""" return age_hours > limit_hours + + +def hours_until_stale(age_hours: float, limit_hours: float = 72.0) -> float: + """Hours left before a ticket passes the service limit (0 once it has).""" + return max(0.0, limit_hours - age_hours) From 0bd6bdddcd8444197962829b125fb6764ff54728 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Thu, 1 Oct 2026 04:30:50 +0100 Subject: [PATCH 04/18] Priority rules: flag tickets close to the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index f07e828..032b4f1 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -50,3 +50,8 @@ def is_stale(age_hours: float, limit_hours: float = 72.0) -> bool: def hours_until_stale(age_hours: float, limit_hours: float = 72.0) -> float: """Hours left before a ticket passes the service limit (0 once it has).""" return max(0.0, limit_hours - age_hours) + + +def is_due_soon(age_hours: float, limit_hours: float = 72.0, window_hours: float = 12.0) -> bool: + """True when a ticket will pass the service limit within the window.""" + return 0.0 < hours_until_stale(age_hours, limit_hours) <= window_hours From 147178455303b2b960da66c4b5213c070539c267 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Tue, 6 Oct 2026 21:30:32 +0100 Subject: [PATCH 05/18] Priority rules: an overdue check, a day past the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 032b4f1..2abeb5e 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -55,3 +55,8 @@ def hours_until_stale(age_hours: float, limit_hours: float = 72.0) -> float: def is_due_soon(age_hours: float, limit_hours: float = 72.0, window_hours: float = 12.0) -> bool: """True when a ticket will pass the service limit within the window.""" return 0.0 < hours_until_stale(age_hours, limit_hours) <= window_hours + + +def is_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: + """True once a ticket has passed the service limit by more than a day.""" + return age_hours > limit_hours + 24.0 From 953b29c2e85df6e6571452877009792f9d7ee3f9 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Fri, 9 Oct 2026 19:11:38 +0100 Subject: [PATCH 06/18] Priority rules: hours past the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 2abeb5e..63f9923 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -60,3 +60,8 @@ def is_due_soon(age_hours: float, limit_hours: float = 72.0, window_hours: float def is_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: """True once a ticket has passed the service limit by more than a day.""" return age_hours > limit_hours + 24.0 + + +def hours_overdue(age_hours: float, limit_hours: float = 72.0) -> float: + """Hours a ticket has spent past the service limit (0 until it passes).""" + return max(0.0, age_hours - limit_hours) From 0124dd1a102eaf362ede602c636551e2ceebb043 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Fri, 9 Oct 2026 22:16:42 +0100 Subject: [PATCH 07/18] Priority rules: whole days past the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 63f9923..db7a8da 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -65,3 +65,8 @@ def is_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: def hours_overdue(age_hours: float, limit_hours: float = 72.0) -> float: """Hours a ticket has spent past the service limit (0 until it passes).""" return max(0.0, age_hours - limit_hours) + + +def days_overdue(age_hours: float, limit_hours: float = 72.0) -> float: + """Whole days a ticket has spent past the service limit.""" + return hours_overdue(age_hours, limit_hours) // 24.0 From 258111565a85612755112fe9c1228fa3214b16e9 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 10 Oct 2026 22:54:52 +0100 Subject: [PATCH 08/18] Priority rules: a week past the stale-ticket limit --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index db7a8da..b7d6a34 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -70,3 +70,8 @@ def hours_overdue(age_hours: float, limit_hours: float = 72.0) -> float: def days_overdue(age_hours: float, limit_hours: float = 72.0) -> float: """Whole days a ticket has spent past the service limit.""" return hours_overdue(age_hours, limit_hours) // 24.0 + + +def is_long_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: + """True once a ticket is a full week past the service limit.""" + return days_overdue(age_hours, limit_hours) >= 7.0 From d0821fd4965a01b6d9d795e8cf0b789470ee1443 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Mon, 12 Oct 2026 22:30:33 +0100 Subject: [PATCH 09/18] Priority: first age bump after 12 hours --- agent-scan-demo/helpdesk/priority.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index b7d6a34..591b2bd 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -31,7 +31,7 @@ def score_priority(subject: str, body: str, age_hours: float = 0.0) -> int: # Older unresolved tickets escalate. if age_hours >= 72: raw += 2 - elif age_hours >= 24: + elif age_hours >= 12: raw += 1 return max(0, min(MAX_SCORE, raw)) From a077c8109c3fab75fb248344bc4fe6138cbd89d5 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Tue, 13 Oct 2026 22:16:09 +0100 Subject: [PATCH 10/18] Priority: top age bump after 48 hours --- agent-scan-demo/helpdesk/priority.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 591b2bd..3df2672 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -29,7 +29,7 @@ def score_priority(subject: str, body: str, age_hours: float = 0.0) -> int: raw = max(hits) if hits else 0 # Older unresolved tickets escalate. - if age_hours >= 72: + if age_hours >= 48: raw += 2 elif age_hours >= 12: raw += 1 From e1bdd3f46b774845ebcb4d8c88adaf931c27c13c Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:36:09 +0100 Subject: [PATCH 11/18] Test: review-cycle churn branch of the Action --- .github/workflows/codedelta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 8608c9b..2f865f3 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,6 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@v1 + - uses: code-delta-app/action@review-churn-test with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) From 5e030d494137929cd9acd03b3bd5a38b02965c6b Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:38:27 +0100 Subject: [PATCH 12/18] Priority: trailing newline --- agent-scan-demo/helpdesk/priority.py | 1 + 1 file changed, 1 insertion(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 3df2672..3667e9c 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -75,3 +75,4 @@ def days_overdue(age_hours: float, limit_hours: float = 72.0) -> float: def is_long_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: """True once a ticket is a full week past the service limit.""" return days_overdue(age_hours, limit_hours) >= 7.0 + From 3ef45b68d1a5a32be1ae71f3c07151c44393153e Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:39:40 +0100 Subject: [PATCH 13/18] Back to the published Action (v1) --- .github/workflows/codedelta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 2f865f3..8608c9b 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,6 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@review-churn-test + - uses: code-delta-app/action@v1 with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) From 6badb63c242c1823daf73791c067afce79a62389 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:48:38 +0100 Subject: [PATCH 14/18] Test: rename a PR file; folder-only job --- .github/workflows/codedelta.yml | 12 +++++++++++- .../helpdesk/{auto_close.py => auto_closer.py} | 0 2 files changed, 11 insertions(+), 1 deletion(-) rename agent-scan-demo/helpdesk/{auto_close.py => auto_closer.py} (100%) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 8608c9b..0c22807 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,6 +12,16 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@v1 + - uses: code-delta-app/action@review-churn-test with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) + + folder-only: # TEMPORARY test (17 Oct 2026): the Action scanning one folder + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: { fetch-depth: 0 } + - uses: code-delta-app/action@review-churn-test + with: + mode: churn + path: agent-scan-demo diff --git a/agent-scan-demo/helpdesk/auto_close.py b/agent-scan-demo/helpdesk/auto_closer.py similarity index 100% rename from agent-scan-demo/helpdesk/auto_close.py rename to agent-scan-demo/helpdesk/auto_closer.py From 1af873d79117b5216fc373905f80c065f9dc6099 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sat, 17 Oct 2026 19:50:08 +0100 Subject: [PATCH 15/18] Back to the published Action (v1); test rename undone --- .github/workflows/codedelta.yml | 12 +----------- .../helpdesk/{auto_closer.py => auto_close.py} | 0 2 files changed, 1 insertion(+), 11 deletions(-) rename agent-scan-demo/helpdesk/{auto_closer.py => auto_close.py} (100%) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 0c22807..8608c9b 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,16 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@review-churn-test + - uses: code-delta-app/action@v1 with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) - - folder-only: # TEMPORARY test (17 Oct 2026): the Action scanning one folder - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: { fetch-depth: 0 } - - uses: code-delta-app/action@review-churn-test - with: - mode: churn - path: agent-scan-demo diff --git a/agent-scan-demo/helpdesk/auto_closer.py b/agent-scan-demo/helpdesk/auto_close.py similarity index 100% rename from agent-scan-demo/helpdesk/auto_closer.py rename to agent-scan-demo/helpdesk/auto_close.py From 606fbe0d877b8e62dd1a3b6c48a078be14cc2efe Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sun, 18 Oct 2026 00:13:17 +0100 Subject: [PATCH 16/18] Test: Post-review churn rename on the Action test branch --- .github/workflows/codedelta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 8608c9b..2f865f3 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,6 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@v1 + - uses: code-delta-app/action@review-churn-test with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) From b5a15638c86df4440dbaf3fd9ae293dcab07d2f7 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Sun, 18 Oct 2026 00:14:12 +0100 Subject: [PATCH 17/18] Back to the published Action (v1) --- .github/workflows/codedelta.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codedelta.yml b/.github/workflows/codedelta.yml index 2f865f3..8608c9b 100644 --- a/.github/workflows/codedelta.yml +++ b/.github/workflows/codedelta.yml @@ -12,6 +12,6 @@ jobs: steps: - uses: actions/checkout@v4 with: { fetch-depth: 0 } - - uses: code-delta-app/action@review-churn-test + - uses: code-delta-app/action@v1 with: mode: churn_agent # default mode: churn + Agent Scan (no ML audit) From eba39c03e3ba040b1df406f5a47a65ac8b0f8413 Mon Sep 17 00:00:00 2001 From: "CodeDelta.app" <298758756+Code-delta-support@users.noreply.github.com> Date: Mon, 19 Oct 2026 19:07:41 +0100 Subject: [PATCH 18/18] Priority: due within the next day --- agent-scan-demo/helpdesk/priority.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/agent-scan-demo/helpdesk/priority.py b/agent-scan-demo/helpdesk/priority.py index 3667e9c..01b4c1c 100644 --- a/agent-scan-demo/helpdesk/priority.py +++ b/agent-scan-demo/helpdesk/priority.py @@ -76,3 +76,8 @@ def is_long_overdue(age_hours: float, limit_hours: float = 72.0) -> bool: """True once a ticket is a full week past the service limit.""" return days_overdue(age_hours, limit_hours) >= 7.0 + + +def is_due_today(age_hours: float, limit_hours: float = 72.0) -> bool: + """True when a ticket reaches its service limit within the next day.""" + return 0.0 <= limit_hours - age_hours < 24.0