Track HiveGrid Cloud planning reference

This commit is contained in:
david committed 2026-06-26 20:48:01 +02:00
1 parent b3d5ea6764
commit e341c5938a
5784 files changed
+1104929 -3

No files matched your search

@@ -0,0 +1,60 @@
/**
* `feature-flags enable` / `feature-flags disable` — flip a flag's
* boolean `enabled` and write an audit row, then publish a one-shot
* invalidation on the `feature-flags:invalidate` pub/sub channel so
* every long-lived web replica drops its L1 eval cache for this flag
* immediately rather than serving stale evaluations until the per-key
* TTL expires (#39 cross-process publisher).
*/
import { defineCommand } from "citty";
import consola from "consola";
import { broadcastFlagInvalidation } from "./invalidate.js";
async function toggleFlag(name: string, target: boolean): Promise<void> {
const { getDbClient } = await import("@toolctrl/db/client.server");
const prisma = getDbClient();
const existing = await prisma.featureFlag.findFirst({ where: { name } });
if (!existing) {
consola.error(`Flag "${name}" not found.`);
process.exitCode = 1;
return;
}
if (existing.enabled === target) {
consola.info(`Flag "${name}" is already ${target ? "enabled" : "disabled"}; no-op.`);
return;
}
await prisma.$transaction([
prisma.featureFlag.update({ where: { id: existing.id }, data: { enabled: target } }),
prisma.featureFlagAudit.create({
data: {
flagId: existing.id,
actorUserId: null,
action: "toggle",
oldValue: { enabled: existing.enabled },
newValue: { enabled: target },
},
}),
]);
await broadcastFlagInvalidation(name);
consola.success(`Flag "${name}" → ${target ? "enabled" : "disabled"}.`);
}
export const featureFlagsEnableCommand = defineCommand({
meta: { name: "enable", description: "Enable a feature flag by name." },
args: {
name: { type: "positional", required: true, description: "Flag name." },
},
async run({ args }) {
await toggleFlag(String(args.name), true);
},
});
export const featureFlagsDisableCommand = defineCommand({
meta: { name: "disable", description: "Disable a feature flag by name." },
args: {
name: { type: "positional", required: true, description: "Flag name." },
},
async run({ args }) {
await toggleFlag(String(args.name), false);
},
});