fluncle 0.228.0 → 0.230.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/fluncle.mjs +27 -12
- package/package.json +1 -1
package/bin/fluncle.mjs
CHANGED
|
@@ -612,7 +612,7 @@ function parseVersion(version) {
|
|
|
612
612
|
var currentVersion;
|
|
613
613
|
var init_version = __esm(() => {
|
|
614
614
|
init_output();
|
|
615
|
-
currentVersion = "0.
|
|
615
|
+
currentVersion = "0.230.0".trim() ? "0.230.0".trim() : "0.1.0";
|
|
616
616
|
});
|
|
617
617
|
|
|
618
618
|
// src/update-notifier.ts
|
|
@@ -2362,7 +2362,10 @@ var init_about = __esm(() => {
|
|
|
2362
2362
|
heading: "The mothership",
|
|
2363
2363
|
links: [
|
|
2364
2364
|
{ label: "Web: the archive", url: "https://www.fluncle.com" },
|
|
2365
|
-
{
|
|
2365
|
+
{
|
|
2366
|
+
label: "Newsletter",
|
|
2367
|
+
url: "Fresh bangers, every Friday, from Fluncle. Board it at www.fluncle.com"
|
|
2368
|
+
},
|
|
2366
2369
|
{ label: "RSS: the feed", url: "https://www.fluncle.com/rss.xml" }
|
|
2367
2370
|
]
|
|
2368
2371
|
},
|
|
@@ -2454,7 +2457,7 @@ function parseVersion2(version) {
|
|
|
2454
2457
|
var currentVersion2, latestReleaseUrl = "https://api.github.com/repos/mauricekleine/fluncle/releases/latest";
|
|
2455
2458
|
var init_version2 = __esm(() => {
|
|
2456
2459
|
init_output();
|
|
2457
|
-
currentVersion2 = "0.
|
|
2460
|
+
currentVersion2 = "0.230.0".trim() ? "0.230.0".trim() : "0.1.0";
|
|
2458
2461
|
});
|
|
2459
2462
|
|
|
2460
2463
|
// ../../packages/registry/src/index.ts
|
|
@@ -4006,19 +4009,19 @@ var init_src = __esm(() => {
|
|
|
4006
4009
|
weights: { status: "hidden" }
|
|
4007
4010
|
},
|
|
4008
4011
|
{
|
|
4009
|
-
command: "fluncle admin projections advance --target <public_aggregates|artist_qualification> --action repair --limit 500 --max-steps 4",
|
|
4012
|
+
command: "fluncle admin projections get --json; fluncle admin projections advance --target <track_due_work|crawl_due_work> --action repair --limit 500 --max-steps 20 --no-terminal-status --json; fluncle admin projections advance --target <public_aggregates|artist_qualification> --action repair --limit 500 --max-steps 4 --no-terminal-status --json",
|
|
4010
4013
|
exposedContent: [
|
|
4011
|
-
"keep
|
|
4014
|
+
"keep all four runtime projection families converged after their cutovers with one-read, serial, bounded repair (--no-agent)"
|
|
4012
4015
|
],
|
|
4013
4016
|
kind: "cron",
|
|
4014
4017
|
name: "cron.projection-maintenance",
|
|
4015
|
-
operatorNotes: "every 5m with per-firing jitter, run by a rave-02 host systemd timer (docs/agents/hermes/projection-maintenance-timer/). Reads bounded projection status
|
|
4018
|
+
operatorNotes: "every 5m with per-firing jitter, run by a rave-02 host systemd timer (docs/agents/hermes/projection-maintenance-timer/). Reads bounded projection status exactly once; the track, crawl, and public cutovers gate their own families independently. Open indebted families run strictly serially: track and crawl get at most twenty pages of 500, then public aggregates and artist qualification get at most four pages of 500. Repair responses omit terminal status so those four commands cannot repeat the global status suite. Public aggregate repair also advances the bounded anchor cursor after marker debt drains. The agent may repair only these four fixed targets; rebuild, audit, and every cutover mutation remain operator-only. Zero LLM tokens; no new secret.",
|
|
4016
4019
|
probeConfig: {
|
|
4017
4020
|
cadenceMs: 5 * MINUTE_MS,
|
|
4018
4021
|
cronName: "fluncle-projection-maintenance",
|
|
4019
4022
|
kind: "cron"
|
|
4020
4023
|
},
|
|
4021
|
-
statusDescription: "keeps
|
|
4024
|
+
statusDescription: "keeps runtime projections caught up",
|
|
4022
4025
|
title: "Projection upkeep",
|
|
4023
4026
|
weights: { status: "hidden" }
|
|
4024
4027
|
},
|
|
@@ -15076,7 +15079,7 @@ var init_admin_telemetry2 = __esm(() => {
|
|
|
15076
15079
|
errors: number2().int().nullable(),
|
|
15077
15080
|
exitCode: number2().int(),
|
|
15078
15081
|
expectedIntervalMs: number2().int().nullable(),
|
|
15079
|
-
gateState: _enum(["active", "disabled", "dry-run", "forced", "locked", "paused"]).nullable(),
|
|
15082
|
+
gateState: _enum(["active", "admission-skipped", "disabled", "dry-run", "forced", "locked", "paused"]).nullable(),
|
|
15080
15083
|
id: string2(),
|
|
15081
15084
|
missingFields: array(string2()),
|
|
15082
15085
|
occurredAt: string2(),
|
|
@@ -16627,8 +16630,11 @@ async function getProjectionStatusCommand() {
|
|
|
16627
16630
|
return adminApiGet("/api/v1/admin/projections/status");
|
|
16628
16631
|
}
|
|
16629
16632
|
async function advanceProjectionCommand(input) {
|
|
16630
|
-
const { maxSteps = 1, target, ...body } = input;
|
|
16631
|
-
|
|
16633
|
+
const { includeTerminalStatus = true, maxSteps = 1, target, ...body } = input;
|
|
16634
|
+
if (!includeTerminalStatus && input.action !== "repair") {
|
|
16635
|
+
throw new Error("terminal status may be omitted only for repair automation");
|
|
16636
|
+
}
|
|
16637
|
+
const stepBody = maxSteps > 1 || !includeTerminalStatus ? { ...body, includeStatus: false } : body;
|
|
16632
16638
|
let response = await adminApiPost(`/api/v1/admin/projections/${target}/advance`, stepBody);
|
|
16633
16639
|
let steps = 1;
|
|
16634
16640
|
let processed = response.processed;
|
|
@@ -16639,6 +16645,10 @@ async function advanceProjectionCommand(input) {
|
|
|
16639
16645
|
processed += response.processed;
|
|
16640
16646
|
scheduled += response.scheduled;
|
|
16641
16647
|
}
|
|
16648
|
+
if (!includeTerminalStatus) {
|
|
16649
|
+
const { status: _status, ...withoutStatus } = response;
|
|
16650
|
+
return { ...withoutStatus, processed, scheduled, steps };
|
|
16651
|
+
}
|
|
16642
16652
|
const status = response.status ?? (await getProjectionStatusCommand()).status;
|
|
16643
16653
|
return { ...response, processed, scheduled, status, steps };
|
|
16644
16654
|
}
|
|
@@ -22228,10 +22238,15 @@ JSON field reference:
|
|
|
22228
22238
|
console.log(projections.projectionStatusLines(result.status).join(`
|
|
22229
22239
|
`));
|
|
22230
22240
|
});
|
|
22231
|
-
adminProjections.command("advance").description("Run bounded, resumable rebuild, repair, or audit steps").requiredOption("--target <target>", "track_due_work, crawl_due_work, public_aggregates, or artist_qualification").requiredOption("--action <action>", "rebuild, repair, or audit").option("--limit <limit>", "Maximum rows or repairs in this request (1-500)", "100").option("--max-steps <steps>", "Maximum sequential advance calls (1-100)").option("--json", "Print the aggregate result and
|
|
22241
|
+
adminProjections.command("advance").description("Run bounded, resumable rebuild, repair, or audit steps").requiredOption("--target <target>", "track_due_work, crawl_due_work, public_aggregates, or artist_qualification").requiredOption("--action <action>", "rebuild, repair, or audit").option("--limit <limit>", "Maximum rows or repairs in this request (1-500)", "100").option("--max-steps <steps>", "Maximum sequential advance calls (1-100)").option("--no-terminal-status", "Omit the terminal readiness snapshot (JSON repair automation only)").option("--json", "Print the aggregate result and default readiness as JSON", false).action(async (options) => {
|
|
22232
22242
|
const projections = await Promise.resolve().then(() => (init_admin_projections2(), exports_admin_projections));
|
|
22243
|
+
const action = projections.parseProjectionAction(options.action);
|
|
22244
|
+
if (!options.terminalStatus && (!options.json || action !== "repair")) {
|
|
22245
|
+
throw new Error("--no-terminal-status requires --action repair and --json");
|
|
22246
|
+
}
|
|
22233
22247
|
const result = await projections.advanceProjectionCommand({
|
|
22234
|
-
action
|
|
22248
|
+
action,
|
|
22249
|
+
includeTerminalStatus: options.terminalStatus,
|
|
22235
22250
|
limit: projections.parseProjectionLimit(options.limit),
|
|
22236
22251
|
maxSteps: options.maxSteps === undefined ? undefined : projections.parseProjectionMaxSteps(options.maxSteps),
|
|
22237
22252
|
target: projections.parseProjectionTarget(options.target)
|
package/package.json
CHANGED