fix(acp): keep artifact scan hints non-blocking
This commit is contained in:
parent
0a50621664
commit
188ca4ba4a
@ -132,6 +132,49 @@ func TestNormalizeOpenClawTaskGetUnknownArtifactEvidenceKeepsActiveRecordRunning
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExpectedArtifactDirectoriesDoNotBlockTerminalTaskState(t *testing.T) {
|
||||||
|
params := map[string]any{"expectedArtifactDirs": []any{"reports/", "artifacts/"}}
|
||||||
|
payload := map[string]any{
|
||||||
|
"success": true,
|
||||||
|
"status": string(TaskStateCompleted),
|
||||||
|
"artifactScope": "tasks/session/run",
|
||||||
|
"artifactDirectory": "/remote/openclaw/workspace/tasks/session/run",
|
||||||
|
"expectedArtifactDirs": []any{
|
||||||
|
"reports/",
|
||||||
|
"artifacts/",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if openClawTaskGetRequiresArtifactExport(params, payload) {
|
||||||
|
t.Fatal("expectedArtifactDirs must remain non-blocking scan hints")
|
||||||
|
}
|
||||||
|
got := normalizeOpenClawTaskGetResult(params, payload, "openclaw", nil)
|
||||||
|
if status := shared.StringArg(got, "status", ""); status != string(TaskStateCompleted) {
|
||||||
|
t.Fatalf("expected terminal status to remain completed, got %#v", got)
|
||||||
|
}
|
||||||
|
if parseBool(got["pending"]) {
|
||||||
|
t.Fatalf("expected terminal payload not to become pending, got %#v", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRequiredArtifactExtensionsStillBlockUntilVerified(t *testing.T) {
|
||||||
|
params := map[string]any{"requiredArtifactExtensions": []any{"md"}}
|
||||||
|
payload := map[string]any{
|
||||||
|
"success": true,
|
||||||
|
"status": string(TaskStateCompleted),
|
||||||
|
"artifactScope": "tasks/session/run",
|
||||||
|
"artifactDirectory": "/remote/openclaw/workspace/tasks/session/run",
|
||||||
|
}
|
||||||
|
|
||||||
|
if !openClawTaskGetRequiresArtifactExport(params, payload) {
|
||||||
|
t.Fatal("requiredArtifactExtensions must remain a blocking delivery contract")
|
||||||
|
}
|
||||||
|
got := normalizeOpenClawTaskGetResult(params, payload, "openclaw", nil)
|
||||||
|
if status := shared.StringArg(got, "status", ""); status != string(TaskStateRunning) {
|
||||||
|
t.Fatalf("expected missing required artifact to remain syncing, got %#v", got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNormalizeOpenClawTaskGetUnknownArtifactEvidenceFailsAfterDeadlineWithoutRequiredArtifacts(t *testing.T) {
|
func TestNormalizeOpenClawTaskGetUnknownArtifactEvidenceFailsAfterDeadlineWithoutRequiredArtifacts(t *testing.T) {
|
||||||
payload := map[string]any{
|
payload := map[string]any{
|
||||||
"success": false,
|
"success": false,
|
||||||
|
|||||||
@ -471,9 +471,11 @@ func openClawTaskGetRequiresArtifactExport(params map[string]any, payload map[st
|
|||||||
if parseBool(params["requiresExportBeforeFinalResponse"]) || parseBool(payload["requiresExportBeforeFinalResponse"]) {
|
if parseBool(params["requiresExportBeforeFinalResponse"]) || parseBool(payload["requiresExportBeforeFinalResponse"]) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return len(shared.ListArg(params, "expectedArtifactDirs")) > 0 ||
|
// expectedArtifactDirs are discovery hints for the plugin's workspace-root
|
||||||
len(shared.ListArg(payload, "expectedArtifactDirs")) > 0 ||
|
// scan. They do not prove that the caller requires a file before the run can
|
||||||
len(shared.ListArg(params, "requiredArtifactExtensions")) > 0 ||
|
// reach a terminal state. Treating them as a blocking contract turns a
|
||||||
|
// failed/no-output agent run into an endless "syncing-artifacts" loop.
|
||||||
|
return len(shared.ListArg(params, "requiredArtifactExtensions")) > 0 ||
|
||||||
len(shared.ListArg(payload, "requiredArtifactExtensions")) > 0
|
len(shared.ListArg(payload, "requiredArtifactExtensions")) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user