Fix demo-bot cron + cadence math

`*/90 * * * *` is invalid cron (minute field is 0–59) and degrades
to hourly, producing half the intended bot cadence. Switch to
`0,30 * * * *` (every 30 min) and lower the Bernoulli gate from
0.12 to 0.09 so we still hit ~2–3 walks/day during the 07–21
Berlin window.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ullrich Schäfer 2026-04-19 11:25:06 +02:00
parent 0ac4d9674d
commit df6074b0b5
No known key found for this signature in database
GPG key ID: A32FF691A0F752D9
2 changed files with 10 additions and 5 deletions

View file

@ -13,17 +13,17 @@ import {
import { logger } from "../lib/logger.server.ts";
/**
* Generate job. Fires every 90 minutes via pg-boss cron. Handler steps:
* Generate job. Fires every 30 minutes via pg-boss cron. Handler steps:
*
* 1. Bail if `DEMO_BOT_ENABLED` is not "true".
* 2. On first run (no synthetic rows yet) produce a small backfill so the
* demo user's profile has content immediately.
* 3. Otherwise apply the decide-to-walk gate (local hour + p=0.12) and
* 3. Otherwise apply the decide-to-walk gate (local hour + p=0.09) and
* daily cap; on pass, insert one route+activity via `generateOneWalk`.
*/
export const demoBotGenerateJob: JobDefinition = {
name: "demo-bot:generate",
cron: "*/90 * * * *",
cron: "0,30 * * * *",
retryLimit: 1,
expireInSeconds: 120,
async handler() {

View file

@ -640,13 +640,18 @@ export function berlinHour(now: Date): number {
}
/**
* The decide-to-walk gate: only within 0721 local, Bernoulli p=0.12.
* The decide-to-walk gate: only within 0721 local, Bernoulli p=0.09.
* Factored out so tests can replace `Math.random` / `now`.
*
* Cadence math: the job ticks every 30 min, so the 14-hour daytime
* window (07:0021:00 Berlin) covers 28 ticks/day. With p=0.09 the
* expected walks/day 28 * 0.09 2.52, which lands in the target
* 23 walks/day band.
*/
export function shouldWalkNow(now: Date, rand: () => number = Math.random): boolean {
const hour = berlinHour(now);
if (hour < 7 || hour >= 21) return false;
return rand() < 0.12;
return rand() < 0.09;
}
export const DEMO_DAILY_CAP = 40;