fix: clarify codex submit queue summary disclosure
This commit is contained in:
@@ -16,6 +16,14 @@ function asArray(value: unknown): unknown[] {
|
||||
return value as unknown[];
|
||||
}
|
||||
|
||||
function assertNoItemsArrayWhenUnavailable(value: JsonRecord, label: string): void {
|
||||
assertCondition(value.idsUnavailable === true, `${label} should mark non-enumerated ids unavailable`, value);
|
||||
assertCondition(!Object.prototype.hasOwnProperty.call(value, "items"), `${label} must not emit items=[] when count is nonzero but ids are unavailable`, value);
|
||||
assertCondition(value.itemsOmitted === true, `${label} should explicitly mark items omitted`, value);
|
||||
assertCondition(String(value.itemsMeaning || "") === "not-enumerated-in-default-submit-output", `${label} should explain empty-list semantics`, value);
|
||||
assertCondition(String(value.rawCommand || "").includes("microservice proxy code-queue /api/tasks/overview"), `${label} should provide raw drill-down`, value);
|
||||
}
|
||||
|
||||
function task(id: string, status: string, queueId = "commander-efficiency"): JsonRecord {
|
||||
return {
|
||||
id,
|
||||
@@ -62,6 +70,8 @@ export function runCodeQueueSubmitSummaryContract(): JsonRecord {
|
||||
const submitted = asRecord(data.submitted);
|
||||
const submittedTasks = asArray(submitted.tasks);
|
||||
const submittedTask = asRecord(submittedTasks[0]);
|
||||
const taskStates = asArray(submitted.taskStates);
|
||||
const submittedState = asRecord(taskStates[0]);
|
||||
const queue = asRecord(data.queue);
|
||||
const queuedTaskIds = asRecord(queue.queuedTaskIds);
|
||||
const activeTaskIds = asRecord(queue.activeTaskIds);
|
||||
@@ -70,9 +80,13 @@ export function runCodeQueueSubmitSummaryContract(): JsonRecord {
|
||||
const countContext = asRecord(queue.countContext);
|
||||
const listPreviewPolicy = asRecord(queue.listPreviewPolicy);
|
||||
const omittedCounts = asRecord(listPreviewPolicy.omittedCounts);
|
||||
const stateDisclosure = asRecord(queue.stateDisclosure);
|
||||
const activity = asRecord(queue.activity);
|
||||
const responseJson = JSON.stringify(response);
|
||||
|
||||
assertCondition(submittedTask.id === submittedId && submittedTask.status === "queued", "submit response should keep the newly queued task", submittedTask);
|
||||
assertCondition(submittedState.id === submittedId && submittedState.status === "queued" && submittedState.state === "queued", "submitted task state should be explicit and authoritative", submittedState);
|
||||
assertCondition(String(submitted.stateSource || "").includes("response.tasks"), "submitted state source should point at response.tasks", submitted);
|
||||
assertCondition(asArray(submittedTaskIds.items).includes(submittedId), "submittedTaskIds should expose the just-submitted id", submittedTaskIds);
|
||||
assertCondition(asArray(queuedTaskIds.items).includes(submittedId), "queuedTaskIds preview should force-include the just-submitted queued task", queuedTaskIds);
|
||||
assertCondition(queuedTaskIds.count === 5 && queuedTaskIds.returned === 1 && queuedTaskIds.omitted === 4, "queuedTaskIds should preserve aggregate queued count without dumping all ids", queuedTaskIds);
|
||||
@@ -84,18 +98,85 @@ export function runCodeQueueSubmitSummaryContract(): JsonRecord {
|
||||
assertCondition(String(activeTaskIds.source || "").includes("databaseActiveTaskIds"), "activeTaskIds should fall back to database active ids when upstream activeTaskIds is empty", activeTaskIds);
|
||||
assertCondition(databaseActiveTaskIds.count === 18 && databaseActiveTaskIds.returned === 15, "databaseActiveTaskIds preview should preserve count context", databaseActiveTaskIds);
|
||||
assertCondition(countContext.running === 18 && countContext.active === 18 && countContext.databaseActive === 18, "countContext should expose accurate active counts", countContext);
|
||||
assertCondition(activity.effectiveActiveTaskCount === 18, "submit queue activity should expose commander effective active count", activity);
|
||||
|
||||
assertCondition(listPreviewPolicy.bounded === true && listPreviewPolicy.countsAreAuthoritative === true, "list preview policy should document bounded low-noise output", listPreviewPolicy);
|
||||
assertCondition(listPreviewPolicy.truncated === true && omittedCounts.activeTaskIds === 3 && omittedCounts.queuedTaskIds === 4, "list preview policy should disclose omitted counts", listPreviewPolicy);
|
||||
assertCondition(String(listPreviewPolicy.emptyItemsSemantics || "").includes("idsUnavailable=true"), "list preview policy should document nonzero-count unavailable ids", listPreviewPolicy);
|
||||
assertCondition(String(stateDisclosure.submittedStatusSource || "").includes("response.tasks"), "stateDisclosure should name submitted status source", stateDisclosure);
|
||||
assertCondition(String(listPreviewPolicy.note || "").includes("Low-noise mutation output omits"), "list preview policy should include a clear truncation note", listPreviewPolicy);
|
||||
assertCondition(submitted.promptOmitted === true && !responseJson.includes("Focused submit summary contract"), "submit confirmation should not leak prompt text", response);
|
||||
assertCondition(responseJson.length < 12_000, "submit confirmation should remain low-noise", { chars: responseJson.length });
|
||||
|
||||
const activeIdsOmitted = compactSubmitSuccessResponseForTest({
|
||||
tasks: [task("codex_submitted_queued_while_running", "queued", "live-fast-lane")],
|
||||
queue: {
|
||||
counts: { running: 9, queued: 1 },
|
||||
activeTaskIds: { items: [], count: 9, returned: 0, truncated: true },
|
||||
queuedTaskIds: { items: [], count: 1, returned: 0, truncated: true },
|
||||
databaseActiveTaskCount: 9,
|
||||
executionDiagnostics: {
|
||||
state: "split-brain",
|
||||
splitBrain: true,
|
||||
splitBrainLive: true,
|
||||
effectiveLiveness: "live",
|
||||
recommendedAction: "continue-supervision",
|
||||
databaseActiveTaskCount: 9,
|
||||
schedulerActiveRunSlotCount: 0,
|
||||
schedulerActiveTaskIds: [],
|
||||
activeHeartbeatCount: 9,
|
||||
heartbeatFreshTaskIds: [],
|
||||
},
|
||||
},
|
||||
}, { ok: true, status: 200 }, { mode: "local-atomic-directory-submit-serialization", acquiredAfterMs: 1, heldMs: 2, throttleMs: 2000 });
|
||||
const omittedQueue = asRecord(asRecord(activeIdsOmitted).queue);
|
||||
const omittedActive = asRecord(omittedQueue.activeTaskIds);
|
||||
const forcedQueued = asRecord(omittedQueue.queuedTaskIds);
|
||||
const omittedPolicy = asRecord(omittedQueue.listPreviewPolicy);
|
||||
const unavailable = asRecord(omittedPolicy.unavailableIdLists);
|
||||
assertCondition(omittedActive.count === 9 && omittedActive.returned === 0, "running-count nonzero should be preserved even with omitted active ids", omittedActive);
|
||||
assertNoItemsArrayWhenUnavailable(omittedActive, "activeTaskIds");
|
||||
assertCondition(asArray(forcedQueued.items).includes("codex_submitted_queued_while_running"), "new queued submitted task should be force-included even if upstream queued ids were omitted", forcedQueued);
|
||||
assertCondition(unavailable.activeTaskIds === true && unavailable.queuedTaskIds === false, "listPreviewPolicy should summarize unavailable active id list", unavailable);
|
||||
|
||||
const liveSplitBrain = asRecord(omittedQueue.executionDiagnostics);
|
||||
const liveStateDisclosure = asRecord(omittedQueue.stateDisclosure);
|
||||
const liveActivity = asRecord(omittedQueue.activity);
|
||||
assertCondition(liveSplitBrain.splitBrainLive === true && liveSplitBrain.effectiveLiveness === "live", "split-brain-live heartbeat context should stay explicit", liveSplitBrain);
|
||||
assertCondition(liveActivity.splitBrainDisposition === "live-count-as-active", "split-brain-live should be counted as active in activity", liveActivity);
|
||||
assertCondition(String(liveStateDisclosure.splitBrainDisposition || "").includes("continue supervision"), "stateDisclosure should explain split-brain-live disposition", liveStateDisclosure);
|
||||
assertCondition(String(liveStateDisclosure.idsUnavailableMeaning || "").includes("not that there are no tasks"), "stateDisclosure should prevent empty-list misread", liveStateDisclosure);
|
||||
|
||||
const queuedIdsOmitted = compactSubmitSuccessResponseForTest({
|
||||
tasks: [task("codex_submitted_already_running", "running", "live-fast-lane")],
|
||||
queue: {
|
||||
counts: { running: 1, queued: 3 },
|
||||
activeTaskIds: { items: [], count: 1, returned: 0, truncated: true },
|
||||
queuedTaskIds: { items: [], count: 3, returned: 0, truncated: true },
|
||||
executionDiagnostics: {
|
||||
state: "healthy",
|
||||
databaseActiveTaskCount: 1,
|
||||
databaseActiveTaskIds: ["codex_submitted_already_running"],
|
||||
activeHeartbeatCount: 1,
|
||||
heartbeatFreshTaskIds: ["codex_submitted_already_running"],
|
||||
},
|
||||
},
|
||||
}, { ok: true, status: 200 }, { mode: "local-atomic-directory-submit-serialization", acquiredAfterMs: 1, heldMs: 2, throttleMs: 2000 });
|
||||
const queuedOmittedQueue = asRecord(asRecord(queuedIdsOmitted).queue);
|
||||
const queuedOmitted = asRecord(queuedOmittedQueue.queuedTaskIds);
|
||||
const queuedOmittedPolicy = asRecord(queuedOmittedQueue.listPreviewPolicy);
|
||||
const queuedUnavailable = asRecord(queuedOmittedPolicy.unavailableIdLists);
|
||||
assertCondition(queuedOmitted.count === 3 && queuedOmitted.returned === 0, "queued-count nonzero should be preserved even with omitted queued ids", queuedOmitted);
|
||||
assertNoItemsArrayWhenUnavailable(queuedOmitted, "queuedTaskIds");
|
||||
assertCondition(queuedUnavailable.queuedTaskIds === true, "listPreviewPolicy should summarize unavailable queued id list", queuedUnavailable);
|
||||
|
||||
return {
|
||||
ok: true,
|
||||
checks: [
|
||||
"newly queued submitted task is included in queuedTaskIds preview",
|
||||
"running count context falls back to database active ids",
|
||||
"nonzero count with omitted id lists uses idsUnavailable instead of items=[]",
|
||||
"split-brain-live submit summary says continue supervision and count as active",
|
||||
"bounded id previews disclose omitted counts",
|
||||
"submit confirmation omits prompt text and remains low-noise",
|
||||
],
|
||||
|
||||
+142
-39
@@ -34,6 +34,7 @@ const diagnosticsIdPreviewLimit = 3;
|
||||
const diagnosticsReasonPreviewLimit = 2;
|
||||
const mutationQueueIdPreviewLimit = 15;
|
||||
const steerPromptPreviewChars = 320;
|
||||
const rawCodeQueueOverviewCommand = "bun scripts/cli.ts microservice proxy code-queue /api/tasks/overview?limit=30 --raw --full";
|
||||
const sandboxLikeExecutionModes = new Set(["full-access", "danger-full-access", "workspace-write", "read-only"]);
|
||||
const detailAttemptReturnedLimit = 3;
|
||||
const detailInitialPromptPreviewChars = 1200;
|
||||
@@ -4208,15 +4209,32 @@ function compactIdPreview(knownIds: string[], totalCount: number, limit: number,
|
||||
const count = Math.max(0, totalCount, all.length);
|
||||
const items = all.slice(0, limit);
|
||||
const omitted = Math.max(0, count - items.length);
|
||||
return {
|
||||
items,
|
||||
const idsUnavailable = count > 0 && items.length === 0;
|
||||
const result: Record<string, unknown> = {
|
||||
count,
|
||||
returned: items.length,
|
||||
omitted,
|
||||
truncated: omitted > 0 || all.length > items.length,
|
||||
source,
|
||||
countsAreAuthoritative: true,
|
||||
idsUnavailable,
|
||||
itemsMeaning: idsUnavailable
|
||||
? "not-enumerated-in-default-submit-output"
|
||||
: count === 0
|
||||
? "authoritative-empty"
|
||||
: omitted > 0 || all.length > items.length
|
||||
? "bounded-preview"
|
||||
: "complete-known-list",
|
||||
rawCommand: rawCodeQueueOverviewCommand,
|
||||
...(note === null ? {} : { note }),
|
||||
};
|
||||
if (idsUnavailable) {
|
||||
result.itemsOmitted = true;
|
||||
result.note = note ?? "Count is nonzero, but the default submit response did not enumerate ids for this list; use rawCommand for drill-down.";
|
||||
} else {
|
||||
result.items = items;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function idPreviewInputItems(value: unknown): string[] {
|
||||
@@ -4249,6 +4267,35 @@ function taskIdsForStatuses(tasks: Record<string, unknown>[], statuses: Set<stri
|
||||
});
|
||||
}
|
||||
|
||||
function submittedTaskState(task: Record<string, unknown>): Record<string, unknown> {
|
||||
const id = asString(task.id);
|
||||
const status = asString(task.status) || "unknown";
|
||||
const queueId = asString(task.queueId) || null;
|
||||
const state = status === "queued" || status === "retry_wait"
|
||||
? "queued"
|
||||
: status === "running" || status === "judging"
|
||||
? "running"
|
||||
: isTerminalTaskStatus(status)
|
||||
? "terminal"
|
||||
: "unknown";
|
||||
return {
|
||||
id: id || null,
|
||||
queueId,
|
||||
status,
|
||||
state,
|
||||
source: "response.tasks[].status",
|
||||
};
|
||||
}
|
||||
|
||||
function submittedTaskStatusCounts(tasks: Record<string, unknown>[]): Record<string, number> {
|
||||
const counts: Record<string, number> = {};
|
||||
for (const task of tasks) {
|
||||
const status = asString(task.status) || "unknown";
|
||||
counts[status] = (counts[status] ?? 0) + 1;
|
||||
}
|
||||
return counts;
|
||||
}
|
||||
|
||||
function previewSource(parts: string[], fallback: string): string {
|
||||
const unique = orderedUniqueStringList(parts.filter((part) => part.length > 0));
|
||||
return unique.length > 0 ? unique.join("+") : fallback;
|
||||
@@ -4269,17 +4316,25 @@ function compactSubmitQueueConfirmation(value: unknown, options: CompactSubmitQu
|
||||
const queuedKnownIds = orderedUniqueStringList([...submittedQueuedTaskIds, ...upstreamQueuedTaskIds]);
|
||||
const queuedStatusCount = countForStatus(counts, "queued") + countForStatus(counts, "retry_wait");
|
||||
const queuedCount = Math.max(queuedKnownIds.length, idPreviewInputCount(record.queuedTaskIds), queuedStatusCount);
|
||||
const queuedPreview = compactIdPreview(
|
||||
queuedKnownIds,
|
||||
queuedCount,
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
submittedQueuedTaskIds.length > 0 ? "submittedTaskIds" : "",
|
||||
upstreamQueuedTaskIds.length > 0 ? "upstreamQueuedTaskIds" : "",
|
||||
queuedKnownIds.length === 0 && queuedCount > 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
queuedCount > queuedKnownIds.length ? "Upstream did not enumerate every queued id in this low-noise mutation response; count remains authoritative." : null,
|
||||
);
|
||||
const queuedPreview: Record<string, unknown> = {
|
||||
...compactIdPreview(
|
||||
queuedKnownIds,
|
||||
queuedCount,
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
submittedQueuedTaskIds.length > 0 ? "submittedTaskIds" : "",
|
||||
upstreamQueuedTaskIds.length > 0 ? "upstreamQueuedTaskIds" : "",
|
||||
queuedKnownIds.length === 0 && queuedCount > 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
queuedCount > queuedKnownIds.length ? "Upstream did not enumerate every queued id in this low-noise mutation response; count remains authoritative." : null,
|
||||
),
|
||||
sourceCounts: {
|
||||
queued: countForStatus(counts, "queued"),
|
||||
retryWait: countForStatus(counts, "retry_wait"),
|
||||
upstreamQueuedTaskIds: idPreviewInputCount(record.queuedTaskIds),
|
||||
submittedQueuedTaskIds: submittedQueuedTaskIds.length,
|
||||
},
|
||||
};
|
||||
|
||||
const upstreamActiveTaskIds = idPreviewInputItems(record.activeTaskIds);
|
||||
const databaseActiveTaskIds = idPreviewInputItems(record.databaseActiveTaskIds);
|
||||
@@ -4305,30 +4360,49 @@ function compactSubmitQueueConfirmation(value: unknown, options: CompactSubmitQu
|
||||
databaseActiveTaskCount,
|
||||
statusActiveCount,
|
||||
]);
|
||||
const activePreview = compactIdPreview(
|
||||
activeKnownIds,
|
||||
activeCount,
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
submittedActiveTaskIds.length > 0 ? "submittedTaskIds" : "",
|
||||
upstreamActiveTaskIds.length > 0 ? "upstreamActiveTaskIds" : "",
|
||||
databaseActiveTaskIds.length > 0 ? "databaseActiveTaskIds" : "",
|
||||
diagnosticsDatabaseActiveTaskIds.length > 0 ? "executionDiagnostics.databaseActiveTaskIds" : "",
|
||||
diagnosticsHeartbeatTaskIds.length > 0 ? "executionDiagnostics.heartbeatFreshTaskIds" : "",
|
||||
activeKnownIds.length === 0 && activeCount > 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
activeCount > activeKnownIds.length ? "Upstream only exposed aggregate active counts for part of the running set; count remains authoritative." : null,
|
||||
);
|
||||
const databaseActivePreview = compactIdPreview(
|
||||
orderedUniqueStringList([...databaseActiveTaskIds, ...diagnosticsDatabaseActiveTaskIds]),
|
||||
maxFiniteNumber([databaseActiveTaskCount, idPreviewInputCount(record.databaseActiveTaskIds), idPreviewInputCount(diagnosticsRecord.databaseActiveTaskIds)]),
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
databaseActiveTaskIds.length > 0 ? "databaseActiveTaskIds" : "",
|
||||
diagnosticsDatabaseActiveTaskIds.length > 0 ? "executionDiagnostics.databaseActiveTaskIds" : "",
|
||||
databaseActiveTaskCount > 0 && databaseActiveTaskIds.length === 0 && diagnosticsDatabaseActiveTaskIds.length === 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
);
|
||||
const activePreview: Record<string, unknown> = {
|
||||
...compactIdPreview(
|
||||
activeKnownIds,
|
||||
activeCount,
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
submittedActiveTaskIds.length > 0 ? "submittedTaskIds" : "",
|
||||
upstreamActiveTaskIds.length > 0 ? "upstreamActiveTaskIds" : "",
|
||||
databaseActiveTaskIds.length > 0 ? "databaseActiveTaskIds" : "",
|
||||
diagnosticsDatabaseActiveTaskIds.length > 0 ? "executionDiagnostics.databaseActiveTaskIds" : "",
|
||||
diagnosticsHeartbeatTaskIds.length > 0 ? "executionDiagnostics.heartbeatFreshTaskIds" : "",
|
||||
activeKnownIds.length === 0 && activeCount > 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
activeCount > activeKnownIds.length ? "Upstream only exposed aggregate active counts for part of the running set; count remains authoritative." : null,
|
||||
),
|
||||
sourceCounts: {
|
||||
running: countForStatus(counts, "running"),
|
||||
judging: countForStatus(counts, "judging"),
|
||||
upstreamActiveTaskIds: idPreviewInputCount(record.activeTaskIds),
|
||||
databaseActiveTaskCount,
|
||||
diagnosticsDatabaseActiveTaskIds: idPreviewInputCount(diagnosticsRecord.databaseActiveTaskIds),
|
||||
diagnosticsHeartbeatFreshTaskIds: idPreviewInputCount(diagnosticsRecord.heartbeatFreshTaskIds),
|
||||
submittedActiveTaskIds: submittedActiveTaskIds.length,
|
||||
},
|
||||
};
|
||||
const databaseActivePreview: Record<string, unknown> = {
|
||||
...compactIdPreview(
|
||||
orderedUniqueStringList([...databaseActiveTaskIds, ...diagnosticsDatabaseActiveTaskIds]),
|
||||
maxFiniteNumber([databaseActiveTaskCount, idPreviewInputCount(record.databaseActiveTaskIds), idPreviewInputCount(diagnosticsRecord.databaseActiveTaskIds)]),
|
||||
idPreviewLimit,
|
||||
previewSource([
|
||||
databaseActiveTaskIds.length > 0 ? "databaseActiveTaskIds" : "",
|
||||
diagnosticsDatabaseActiveTaskIds.length > 0 ? "executionDiagnostics.databaseActiveTaskIds" : "",
|
||||
databaseActiveTaskCount > 0 && databaseActiveTaskIds.length === 0 && diagnosticsDatabaseActiveTaskIds.length === 0 ? "aggregateCountsOnly" : "",
|
||||
], "none"),
|
||||
),
|
||||
sourceCounts: {
|
||||
queueDatabaseActiveTaskCount: asNumber(record.databaseActiveTaskCount, Number.NaN),
|
||||
diagnosticsDatabaseActiveTaskCount: asNumber(diagnosticsRecord.databaseActiveTaskCount, Number.NaN),
|
||||
queueDatabaseActiveTaskIds: idPreviewInputCount(record.databaseActiveTaskIds),
|
||||
diagnosticsDatabaseActiveTaskIds: idPreviewInputCount(diagnosticsRecord.databaseActiveTaskIds),
|
||||
},
|
||||
};
|
||||
const submittedPreview = compactIdPreview(submittedTaskIds, submittedTaskIds.length, idPreviewLimit, "response.tasks");
|
||||
const omittedCounts = {
|
||||
activeTaskIds: asNumber(activePreview.omitted, 0),
|
||||
@@ -4341,6 +4415,15 @@ function compactSubmitQueueConfirmation(value: unknown, options: CompactSubmitQu
|
||||
|| databaseActivePreview.truncated === true
|
||||
|| queuedPreview.truncated === true
|
||||
|| submittedPreview.truncated === true;
|
||||
const diagnostics = compactQueueExecutionDiagnostics(record.executionDiagnostics);
|
||||
const activity = compactCodeQueueActivity(record, diagnostics);
|
||||
const commanderConcurrency = asRecord(activity.commanderConcurrency) ?? {};
|
||||
const unavailableIdLists = {
|
||||
activeTaskIds: activePreview.idsUnavailable === true,
|
||||
databaseActiveTaskIds: databaseActivePreview.idsUnavailable === true,
|
||||
queuedTaskIds: queuedPreview.idsUnavailable === true,
|
||||
submittedTaskIds: submittedPreview.idsUnavailable === true,
|
||||
};
|
||||
return {
|
||||
total: record.total ?? null,
|
||||
queueCount: record.queueCount ?? null,
|
||||
@@ -4350,7 +4433,9 @@ function compactSubmitQueueConfirmation(value: unknown, options: CompactSubmitQu
|
||||
databaseActiveTaskCount,
|
||||
databaseActiveTaskIds: databaseActivePreview,
|
||||
queuedTaskIds: queuedPreview,
|
||||
executionDiagnostics: compactQueueExecutionDiagnostics(record.executionDiagnostics),
|
||||
activity,
|
||||
commanderConcurrency,
|
||||
executionDiagnostics: diagnostics,
|
||||
runnerPermissions: compactRunnerPermissions(record.runnerPermissions),
|
||||
...(submittedTasks.length === 0 ? {} : { submittedTaskIds: submittedPreview }),
|
||||
countContext: {
|
||||
@@ -4368,10 +4453,22 @@ function compactSubmitQueueConfirmation(value: unknown, options: CompactSubmitQu
|
||||
countsAreAuthoritative: true,
|
||||
truncated: listsTruncated,
|
||||
omittedCounts,
|
||||
unavailableIdLists,
|
||||
emptyItemsSemantics: "items=[] is only emitted for an authoritative empty list or a nonempty bounded preview result; if count is nonzero and ids were not enumerated, the preview omits items and sets idsUnavailable=true.",
|
||||
note: listsTruncated
|
||||
? "Low-noise mutation output omits additional task ids from one or more previews; use the raw command for full upstream queue detail."
|
||||
: "Low-noise mutation output includes all known task ids returned for these previews.",
|
||||
rawCommand: "bun scripts/cli.ts microservice proxy code-queue /api/tasks/overview?limit=30 --raw --full",
|
||||
rawCommand: rawCodeQueueOverviewCommand,
|
||||
},
|
||||
stateDisclosure: {
|
||||
submittedStatusSource: "response.tasks[].status",
|
||||
queueCountsSource: "response.queue.counts",
|
||||
activeCountField: "queue.countContext.active",
|
||||
commanderActiveRunnerCountField: "queue.activity.effectiveActiveTaskCount",
|
||||
splitBrainLive: diagnostics?.splitBrainLive ?? false,
|
||||
splitBrainDisposition: diagnostics?.splitBrainLive === true ? "live-counts-remain-active; continue supervision unless commanderConcurrency.interventionRequired=true" : "not-split-brain-live",
|
||||
idsUnavailableMeaning: "A nonzero count with idsUnavailable=true means ids were omitted or unavailable in the bounded submit summary, not that there are no tasks.",
|
||||
rawCommand: rawCodeQueueOverviewCommand,
|
||||
},
|
||||
byQueue: Array.isArray(record.byQueue) ? record.byQueue : undefined,
|
||||
};
|
||||
@@ -4392,6 +4489,8 @@ function compactSubmitSuccessResponse(body: Record<string, unknown>, upstream: R
|
||||
const submittedTasks = rawTasks.map((task) => asRecord(task)).filter((task): task is Record<string, unknown> => task !== null);
|
||||
const allTasks = rawTasks.map(compactSubmitTaskConfirmation);
|
||||
const tasks = allTasks.slice(0, defaultTasksLimit);
|
||||
const allTaskStates = submittedTasks.map(submittedTaskState);
|
||||
const taskStates = allTaskStates.slice(0, defaultTasksLimit);
|
||||
const allTaskIds = allTasks.map((task) => asString(task.id)).filter(Boolean);
|
||||
const taskIds = allTaskIds.slice(0, defaultTasksLimit);
|
||||
const queueIds = Array.from(new Set(tasks.map((task) => asString(task.queueId)).filter(Boolean))).sort();
|
||||
@@ -4413,6 +4512,10 @@ function compactSubmitSuccessResponse(body: Record<string, unknown>, upstream: R
|
||||
taskIdsCount: allTaskIds.length,
|
||||
taskIdsTruncated: allTaskIds.length > taskIds.length,
|
||||
queueIds,
|
||||
statusCounts: submittedTaskStatusCounts(submittedTasks),
|
||||
taskStates,
|
||||
taskStatesTruncated: allTaskStates.length > taskStates.length,
|
||||
stateSource: "response.tasks[].status is authoritative for the submitted task state at submit-confirmation time.",
|
||||
tasks,
|
||||
tasksTruncated: allTasks.length > tasks.length,
|
||||
promptOmitted: true,
|
||||
|
||||
@@ -281,6 +281,12 @@ function codexHelp(): unknown {
|
||||
boundary: "--execution-mode selects Code Queue runtime placement, not Codex sandbox permissions.",
|
||||
permissionVisibility: "Submit dry-runs show requested/effective mode; real submit responses include service runnerPermissions.sandbox and approvalPolicy.",
|
||||
},
|
||||
submitSummary: {
|
||||
default: "Real codex submit is a compact write confirmation: accepted status, submitted task ids, submitted status/source, queue ids, promptOmitted=true, queue counts, activity and drill-down commands.",
|
||||
listSemantics: "Task id previews are bounded objects; if a count is nonzero but ids are omitted or unavailable, the field sets idsUnavailable=true and does not print items=[] as if the list were empty.",
|
||||
splitBrainLive: "When split-brain-live heartbeat evidence is present, submit summaries keep the live disposition visible and continue to count heartbeat/database active tasks as active.",
|
||||
rawDrillDown: "Use queue.listPreviewPolicy.rawCommand or bun scripts/cli.ts microservice proxy code-queue /api/tasks/overview?limit=30 --raw --full for raw queue detail.",
|
||||
},
|
||||
readOutput: {
|
||||
default: "codex read marks a terminal task read and returns terminal metadata, final response, last error/judge, counts, and drill-down commands.",
|
||||
disclosure: "Full prompt, tool logs, and feedback prompts are not printed by codex read; use codex task/detail/trace/output for progressive disclosure.",
|
||||
|
||||
Reference in New Issue
Block a user