Parking repricer — Phase B rollout
claude-sonnet-4-6
xhp-job-server
claude/8d2b59f6
active
Today
S
Ship the sales-signal rollout for the parking repricer. Start with the guardrail so a bad signal can't reprice below floor, then wire the canary at 10%.
On it. The rollout config already has a guardrails block — I'll extend it rather than bolt on a new path, so the kill-switch and the floor check share one evaluation.
✳Thought for 12s⌄
The floor check belongs after fee computation, not before — otherwise the guardrail compares pre-fee numbers and can trip early. Canary weight lives in the rollout table; 10% is a row update, no deploy needed.
$
done
Bash
npm run typecheck — clean, 0 errors
⌕
done
Grep
rolloutGuard — 14 matches across 6 files
≡
done
Read
backend/src/rollout.ts
◌
running
Edit
rollout.ts — adding sales-signal guardrail
Guardrail is in. The canary gate now evaluates:
if (signal.adjustedPrice < quote.floor + FEES) {
// never reprice below floor — hold and flag
hold(quote, 'floor-guard');
} else {
applySignal(signal, { weight: canary.weight });
}
Typecheck is clean. Next: the 10% canary row, then a dry-run against last week's sales to show what would have repriced.
S
Good. Use this rollout plan for the canary stages.
rollout-plan.md4.2 KB
Reading the plan — staging the canary as 10% → 25% → 100% with a 30-minute bake between steps
Reading rollout-plan.md…