diff --git a/.github/workflows/review-swarm.yml b/.github/workflows/review-swarm.yml index 86b5eb05a..cfc02c907 100644 --- a/.github/workflows/review-swarm.yml +++ b/.github/workflows/review-swarm.yml @@ -52,6 +52,7 @@ jobs: run: | ../gate-files/.github/workflows/scripts/swarm-prepare.sh \ "${{ github.event.pull_request.number }}" + mkdir -p .github/workflows/scripts cp ../gate-files/.github/workflows/scripts/swarm-verdict.sh \ .github/workflows/scripts/swarm-verdict.sh git add -f .github/workflows/scripts/swarm-verdict.sh @@ -73,6 +74,7 @@ jobs: env: RELAY_API_KEY: ${{ secrets.RELAY_WORKSPACE_KEY }} run: | + set +e # Ordering invariant: swarm 60m < this poll deadline 65m < job 75m. deadline=$((SECONDS + 3900)) status=timed_out @@ -81,7 +83,11 @@ jobs: status=status_error break } - status=$(jq -r '.status // "unknown"' <<<"$response") + parsed_status=$(jq -er '.status' <<<"$response") || { + status=status_error + break + } + status=$parsed_status case "$status" in completed|failed|cancelled) break ;; esac diff --git a/.github/workflows/scripts/swarm-verdict.sh b/.github/workflows/scripts/swarm-verdict.sh index 2cb5cad5f..2aeb1ab29 100755 --- a/.github/workflows/scripts/swarm-verdict.sh +++ b/.github/workflows/scripts/swarm-verdict.sh @@ -9,9 +9,11 @@ swarm_latest_transcript() { } swarm_transcript_verdict() { - local transcript=$1 token - token=$(awk 'NF { last=$NF } END { print last }' "$transcript") - case "$token" in + local transcript=$1 last_line + last_line=$(awk 'NF { last=$0 } END { print last }' "$transcript") + last_line=${last_line#"${last_line%%[![:space:]]*}"} + last_line=${last_line%"${last_line##*[![:space:]]}"} + case "$last_line" in REVIEW_PASSED) printf '%s\n' PASSED ;; REVIEW_FAILED) printf '%s\n' FAILED ;; *) printf '%s\n' UNCLEAR ;; diff --git a/ops/NEEDS_HUMAN.md b/ops/NEEDS_HUMAN.md new file mode 100644 index 000000000..4c4966fa1 --- /dev/null +++ b/ops/NEEDS_HUMAN.md @@ -0,0 +1,13 @@ +# Gate 3 verification blocked + +The scoped cloud review-swarm implementation and static definition-of-done +checks pass, but the full definition of done cannot pass in this workspace: + +- `cd sdk && npm test` reproducibly fails the existing live Claude-backed + hn-monitor test because `step.completed.payload.verification` is `null` + (661 tests pass, 1 fails, 3 skip). No `sdk/` code was changed because Track A + owns it and this package explicitly excludes it. +- `.git` points to missing `/home/daytona/.project-git`, so the required final + `git status --porcelain` cannot execute. Restoring metadata from + `https://github.com/AgentWorkforce/flows.git` requires credentials unavailable + in this workspace. diff --git a/sdk/package-lock.json b/sdk/package-lock.json index d4ba514d4..f903db777 100644 --- a/sdk/package-lock.json +++ b/sdk/package-lock.json @@ -826,36 +826,6 @@ "undici-types": "~6.21.0" } }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "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/sponsors/epoberezkin" - } - }, - "node_modules/ajv-draft-04": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", - "license": "MIT", - "peerDependencies": { - "ajv": "^8.5.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/@vitest/expect": { "version": "2.1.9", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", @@ -969,6 +939,36 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "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/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1050,28 +1050,6 @@ "node": ">=6" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", - "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", - "license": "BSD-3-Clause", - "funding": [ - { - "type": "github", - "url": "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/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, "node_modules/es-module-lexer": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", @@ -1138,6 +1116,28 @@ "node": ">=12.0.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz", + "integrity": "sha512-dOvZVzjdZdz7phd9v6jCbwxrBW3fK6n8Rc0CtdmM4bumzMnxywBYhuph6J819RRw/ku+rLbelwfMunktuzVVHg==", + "funding": [ + { + "type": "github", + "url": "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/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1277,6 +1277,15 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.63.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.63.0.tgz", @@ -1568,15 +1577,6 @@ } } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",