Skip to content
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
a0b2dbc
adding bulk trial extension dash
bturcotte520 Mar 27, 2026
525a250
fix: resolve merge conflict, keep both kiloclaw audit actions
bturcotte520 Mar 27, 2026
b558d1a
feat(admin): implement bulk KiloClaw trial extend/resurrect
evanjacobson Mar 30, 2026
ccdc975
fix(admin): remove dead kiloclaw_trial_grants infra, add TOCTOU guards
evanjacobson Mar 30, 2026
f7a41d8
fix(admin): restore journal.json from main, fix ineligible count and …
evanjacobson Mar 30, 2026
e8b1a36
fix(admin): reset selectedColumn on new file load, guard GREATEST aga…
evanjacobson Mar 30, 2026
914091b
style: apply oxfmt formatting
evanjacobson Mar 30, 2026
98e5c2b
fix(admin): make audit log and email log writes best-effort after sub…
evanjacobson Mar 30, 2026
408e9ec
refactor(admin): move bulk extend trial into KiloClaw subtab, add pas…
evanjacobson Mar 31, 2026
bfb228c
Changes made:
evanjacobson Mar 31, 2026
6018852
fix(admin): use parameterized interval, query for matchUsers, filter …
evanjacobson Mar 31, 2026
452c436
fix(admin): scope subscription ops to most recent row, clear payment_…
evanjacobson Mar 31, 2026
5832062
fix(admin): use selectDistinctOn for latest-sub query, revert conserv…
evanjacobson Mar 31, 2026
f5c61e5
fix(admin): use desc() for created_at ordering in selectDistinctOn
evanjacobson Mar 31, 2026
83df80c
feat(admin): add CSV upload to paste mode, export ineligible, include…
evanjacobson Mar 31, 2026
0e326a6
style: remove unused types, apply oxfmt formatting
evanjacobson Mar 31, 2026
013806e
refactor(admin): unify paste/CSV input into single layout with tab-sw…
evanjacobson Mar 31, 2026
e79b13c
feat(admin): cap trial extensions at 1 year from now, add tests for 5…
evanjacobson Mar 31, 2026
dbe70e1
fix(admin): revert zod max to 365, test ceiling via existing trial re…
evanjacobson Mar 31, 2026
1edf3cc
feat(admin): include stripe_subscription_id in ineligible export, rea…
evanjacobson Mar 31, 2026
851b8f7
feat(admin): add trial_ends_at to match table, instance_id to success…
evanjacobson Mar 31, 2026
305ddca
refactor(admin): split matched users into eligible/ineligible/unmatch…
evanjacobson Mar 31, 2026
8e2be49
style(admin): remove redundant Reason column from ineligible table
evanjacobson Mar 31, 2026
4c989e8
fix(admin): tab switch respects active input mode without clearing ot…
evanjacobson Mar 31, 2026
f1cfff7
Delete PLAN.md
evanjacobson Mar 31, 2026
c957cc9
fix(admin): treat trial-at-limit users as ineligible at match time, r…
evanjacobson Mar 31, 2026
fa1671a
fix: remove duplicate audit action literal, add user_id+instance_id t…
evanjacobson Mar 31, 2026
9b25839
fix(admin): invalidate matchUsers cache after extendTrials so at_limi…
evanjacobson Mar 31, 2026
34bed50
fix(admin): restore LEAST ceiling clamp in extendTrials, remove orpha…
evanjacobson Mar 31, 2026
e1162d0
test(admin): add ceiling test for 200-day remaining + 365-day extension
evanjacobson Mar 31, 2026
0c7701a
Remove trialDays from the output schema/path
evanjacobson Mar 31, 2026
95bdff6
Undo random agent change
evanjacobson Mar 31, 2026
9943cbd
refactor(admin): clean up KiloclawExtendTrial and fix at_limit boundary
evanjacobson Mar 31, 2026
80531ae
style: apply oxfmt formatting
evanjacobson Mar 31, 2026
ef026a9
fix(admin): address review findings on bulk extend trial
evanjacobson Mar 31, 2026
a5f5b81
fix(admin): address review findings on bulk extend trial
evanjacobson Mar 31, 2026
c3f177d
style: apply formatter to review fix changes
evanjacobson Mar 31, 2026
fd0e884
fix(admin): harden test boundary checks against leap years and ms drift
evanjacobson Mar 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/db/src/schema-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,7 @@ export const KiloClawAdminAuditAction = z.enum([
'kiloclaw.config.restore',
'kiloclaw.doctor.run',
'kiloclaw.machine.destroy_fly',
'kiloclaw.subscription.bulk_trial_grant',
]);

export type KiloClawAdminAuditAction = z.infer<typeof KiloClawAdminAuditAction>;
Expand Down
611 changes: 332 additions & 279 deletions src/app/admin/bulk-credits/page.tsx

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/app/admin/components/AppSidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ const financialItems: MenuItem[] = [
icon: () => <DollarSign />,
},
{
title: () => 'Bulk Credits',
title: () => 'Bulk Credits & Trials',
url: '/admin/bulk-credits',
icon: () => <Upload />,
},
Expand Down
Loading
Loading