{"repo": "attestplane/attestplane", "files": {".github/workflows/implement-planned-task.yml": {"5d0dbb3cea7c909d6315b7903b52410aa88e3e43": {"t": 1785747051.38385, "n": 2645, "h": "8d3897d82fce4b5c", "c": "name: implement-planned-task\n\n# autodev-train: Thin trigger.\n# Fires when any issue is opened/reopened, starts an AutodevPipeline\n# Temporal workflow on the local Mac runner. The Temporal worker daemon\n# handles all stages: implement → review → merge, with SQLite checkpointing\n# and built-in retry/断点恢复 at each stage.\n\non:\n issues:\n types: [opened, reopened]\n workflow_dispatch:\n inputs:\n issue_number:\n description: \"Issue number to implement\"\n required: true\n type: string\n\npermissions:\n contents: read\n issues: write\n\nconcurrency:\n group: autodev-trigger-${{ github.event.inputs.issue_number || github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n trigger:\n name: Trigger Temporal pipeline for issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 1\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh label create \"autodev-pr\" --color \"5319e7\" --force\n gh label create \"review-passed\" --color \"0e8a16\" --force\n\n - name: Start AutodevPipeline workflow\n env:\n GH_TOKEN: ${{ github.token }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n CODEX_HOME: /Users/macworkers/codex-home\n TEMPORAL_ADDRESS: \"localhost:7233\"\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n ISSUE_TITLE=$(gh issue view \"$ISSUE_NUMBER\" --json title -q .title)\n ISSUE_BODY=$(gh issue view \"$ISSUE_NUMBER\" --json body -q .body)\n\n bash scripts/autodev/temporal/trigger.sh \\\n \"$ISSUE_NUMBER\" \"$ISSUE_TITLE\" \"$ISSUE_BODY\"\n\n - name: Post pipeline-started comment\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n N=\"${ISSUE_NUMBER}\"\n printf '%s\\n\\n%s\\n%s\\n' \\\n \"**autodev-train**: Temporal pipeline started for this issue.\" \\\n \"Stages: implement → review → merge (with automatic retry and checkpoint recovery).\" \\\n \"Track progress: \\`temporal workflow show --workflow-id autodev-issue-${N} --address localhost:7233\\`\" \\\n | gh issue comment \"$N\" --body-file -\n"}, "8987e265d4d93fda9ab235211deff6550c60dc7f": {"t": 1785770117.2498221, "n": 2645, "h": "8d3897d82fce4b5c", "c": "name: implement-planned-task\n\n# autodev-train: Thin trigger.\n# Fires when any issue is opened/reopened, starts an AutodevPipeline\n# Temporal workflow on the local Mac runner. The Temporal worker daemon\n# handles all stages: implement → review → merge, with SQLite checkpointing\n# and built-in retry/断点恢复 at each stage.\n\non:\n issues:\n types: [opened, reopened]\n workflow_dispatch:\n inputs:\n issue_number:\n description: \"Issue number to implement\"\n required: true\n type: string\n\npermissions:\n contents: read\n issues: write\n\nconcurrency:\n group: autodev-trigger-${{ github.event.inputs.issue_number || github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n trigger:\n name: Trigger Temporal pipeline for issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 1\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh label create \"autodev-pr\" --color \"5319e7\" --force\n gh label create \"review-passed\" --color \"0e8a16\" --force\n\n - name: Start AutodevPipeline workflow\n env:\n GH_TOKEN: ${{ github.token }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n CODEX_HOME: /Users/macworkers/codex-home\n TEMPORAL_ADDRESS: \"localhost:7233\"\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n ISSUE_TITLE=$(gh issue view \"$ISSUE_NUMBER\" --json title -q .title)\n ISSUE_BODY=$(gh issue view \"$ISSUE_NUMBER\" --json body -q .body)\n\n bash scripts/autodev/temporal/trigger.sh \\\n \"$ISSUE_NUMBER\" \"$ISSUE_TITLE\" \"$ISSUE_BODY\"\n\n - name: Post pipeline-started comment\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n N=\"${ISSUE_NUMBER}\"\n printf '%s\\n\\n%s\\n%s\\n' \\\n \"**autodev-train**: Temporal pipeline started for this issue.\" \\\n \"Stages: implement → review → merge (with automatic retry and checkpoint recovery).\" \\\n \"Track progress: \\`temporal workflow show --workflow-id autodev-issue-${N} --address localhost:7233\\`\" \\\n | gh issue comment \"$N\" --body-file -\n"}, "6f6ad9568d69c0a1f9a0913de1db1278331d70fe": {"t": 1785770118.9111502, "n": 2644, "h": "1318a6a448f720a5", "c": "name: implement-planned-task\n\n# autodev-train: Thin trigger.\n# Fires when any issue is opened/reopened, starts an AutodevPipeline\n# Temporal workflow on the local Mac runner. The Temporal worker daemon\n# handles all stages: implement → review → merge, with SQLite checkpointing\n# and built-in retry/断点恢复 at each stage.\n\non:\n issues:\n types: [opened, reopened]\n workflow_dispatch:\n inputs:\n issue_number:\n description: \"Issue number to implement\"\n required: true\n type: string\n\npermissions:\n contents: read\n issues: write\n\nconcurrency:\n group: autodev-trigger-${{ github.event.inputs.issue_number || github.event.issue.number }}\n cancel-in-progress: true\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n trigger:\n name: Trigger Temporal pipeline for issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 1\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh label create \"autodev-pr\" --color \"5319e7\" --force\n gh label create \"review-passed\" --color \"0e8a16\" --force\n\n - name: Start AutodevPipeline workflow\n env:\n GH_TOKEN: ${{ github.token }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n CODEX_HOME: /Users/macworkers/codex-home\n TEMPORAL_ADDRESS: \"localhost:7233\"\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n ISSUE_TITLE=$(gh issue view \"$ISSUE_NUMBER\" --json title -q .title)\n ISSUE_BODY=$(gh issue view \"$ISSUE_NUMBER\" --json body -q .body)\n\n bash scripts/autodev/temporal/trigger.sh \\\n \"$ISSUE_NUMBER\" \"$ISSUE_TITLE\" \"$ISSUE_BODY\"\n\n - name: Post pipeline-started comment\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n N=\"${ISSUE_NUMBER}\"\n printf '%s\\n\\n%s\\n%s\\n' \\\n \"**autodev-train**: Temporal pipeline started for this issue.\" \\\n \"Stages: implement → review → merge (with automatic retry and checkpoint recovery).\" \\\n \"Track progress: \\`temporal workflow show --workflow-id autodev-issue-${N} --address localhost:7233\\`\" \\\n | gh issue comment \"$N\" --body-file -\n"}, "ff2a70a3b97717ba116bca829329ba87b2469f79": {"t": 1785770120.3829467, "n": 2608, "h": "164f1faebe05463c", "c": "name: implement-planned-task\n\n# autodev-train: Thin trigger.\n# Fires when any issue is opened/reopened, starts an AutodevPipeline\n# Temporal workflow on the local Mac runner. The Temporal worker daemon\n# handles all stages: implement → review → merge, with SQLite checkpointing\n# and built-in retry/断点恢复 at each stage.\n\non:\n issues:\n types: [opened, reopened]\n workflow_dispatch:\n inputs:\n issue_number:\n description: \"Issue number to implement\"\n required: true\n type: string\n\npermissions:\n contents: read\n issues: write\n\nconcurrency:\n group: autodev-trigger-${{ github.event.issue.number }}\n cancel-in-progress: true\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n trigger:\n name: Trigger Temporal pipeline for issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 1\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh label create \"autodev-pr\" --color \"5319e7\" --force\n gh label create \"review-passed\" --color \"0e8a16\" --force\n\n - name: Start AutodevPipeline workflow\n env:\n GH_TOKEN: ${{ github.token }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n CODEX_HOME: /Users/macworkers/codex-home\n TEMPORAL_ADDRESS: \"localhost:7233\"\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n ISSUE_TITLE=$(gh issue view \"$ISSUE_NUMBER\" --json title -q .title)\n ISSUE_BODY=$(gh issue view \"$ISSUE_NUMBER\" --json body -q .body)\n\n bash scripts/autodev/temporal/trigger.sh \\\n \"$ISSUE_NUMBER\" \"$ISSUE_TITLE\" \"$ISSUE_BODY\"\n\n - name: Post pipeline-started comment\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ github.event.inputs.issue_number || github.event.issue.number }}\n run: |\n set -euo pipefail\n N=\"${ISSUE_NUMBER}\"\n printf '%s\\n\\n%s\\n%s\\n' \\\n \"**autodev-train**: Temporal pipeline started for this issue.\" \\\n \"Stages: implement → review → merge (with automatic retry and checkpoint recovery).\" \\\n \"Track progress: \\`temporal workflow show --workflow-id autodev-issue-${N} --address localhost:7233\\`\" \\\n | gh issue comment \"$N\" --body-file -\n"}, "ba3511326b7ed30891ea9336c95663d3dcb189fd": {"t": 1785770121.8354223, "n": 2391, "h": "b68553a778ce5600", "c": "name: implement-planned-task\n\n# autodev-train: Thin trigger.\n# Fires when any issue is opened/reopened, starts an AutodevPipeline\n# Temporal workflow on the local Mac runner. The Temporal worker daemon\n# handles all stages: implement → review → merge, with SQLite checkpointing\n# and built-in retry/断点恢复 at each stage.\n\non:\n issues:\n types: [opened, reopened]\n\npermissions:\n contents: read\n issues: write\n\nconcurrency:\n group: autodev-trigger-${{ github.event.issue.number }}\n cancel-in-progress: true\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n trigger:\n name: Trigger Temporal pipeline for issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 1\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh label create \"autodev-pr\" --color \"5319e7\" --force\n gh label create \"review-passed\" --color \"0e8a16\" --force\n\n - name: Start AutodevPipeline workflow\n env:\n GH_TOKEN: ${{ github.token }}\n DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n CODEX_HOME: /Users/macworkers/codex-home\n TEMPORAL_ADDRESS: \"localhost:7233\"\n ISSUE_NUMBER: ${{ github.event.issue.number }}\n run: |\n set -euo pipefail\n ISSUE_TITLE=$(gh issue view \"$ISSUE_NUMBER\" --json title -q .title)\n ISSUE_BODY=$(gh issue view \"$ISSUE_NUMBER\" --json body -q .body)\n\n bash scripts/autodev/temporal/trigger.sh \\\n \"$ISSUE_NUMBER\" \"$ISSUE_TITLE\" \"$ISSUE_BODY\"\n\n - name: Post pipeline-started comment\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ github.event.issue.number }}\n run: |\n set -euo pipefail\n N=\"${ISSUE_NUMBER}\"\n printf '%s\\n\\n%s\\n%s\\n' \\\n \"**autodev-train**: Temporal pipeline started for this issue.\" \\\n \"Stages: implement → review → merge (with automatic retry and checkpoint recovery).\" \\\n \"Track progress: \\`temporal workflow show --workflow-id autodev-issue-${N} --address localhost:7233\\`\" \\\n | gh issue comment \"$N\" --body-file -\n"}, "66c05f89c571171122118d545afe0c00b705d3cb": {"t": 1785770123.4246728, "n": 7111, "h": "4bdc333069967f5c", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement any new issue using Codex CLI.\n# Triggers when an issue is opened or reopened in this repository.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [opened, reopened]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n implement:\n name: Implement issue #${{ github.event.issue.number }}\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"5. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"6. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"To retry: close and reopen this issue (triggers the pipeline again).\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n"}, "fb8c4ed77188865f7224bd1954799258aad08e80": {"t": 1785770125.017474, "n": 7242, "h": "835762bff3416f9f", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"5. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"6. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "3c1f11bb6f1256fcbc66a5f5db53ebfa771762b5": {"t": 1785770126.515816, "n": 7304, "h": "1b94fe8652049ab3", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n https_proxy: \"http://127.0.0.1:7897\"\n http_proxy: \"http://127.0.0.1:7897\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得修改 scripts/release/ 目录下的任何文件\"\n printf '%s\\n' \"5. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"6. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"7. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "ef630ad898a9a21d09601ff745a5a9f3eac7a588": {"t": 1785770128.8183975, "n": 7227, "h": "7c0e11b7fc542c02", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得修改 scripts/release/ 目录下的任何文件\"\n printf '%s\\n' \"5. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"6. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"7. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "2135e6c61af539f2cc05d593c4479e6fb46bcdd7": {"t": 1785770130.1490798, "n": 7243, "h": "2860d9d8477a04e7", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得修改 scripts/release/ 目录下的任何文件\"\n printf '%s\\n' \"5. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"6. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"7. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write --model o4-mini \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "63afbda963df41785219c95253a273cb8c5da678": {"t": 1785770131.6445088, "n": 7364, "h": "49377845443a5e9c", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n OPENAI_BASE_URL: https://api.deepseek.com/v1\n OPENAI_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得修改 scripts/release/ 目录下的任何文件\"\n printf '%s\\n' \"5. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"6. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"7. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex exec --sandbox workspace-write --model deepseek-v4-pro \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "2bb2b67f53f8f4f560ba86c2d3a3745135dce507": {"t": 1785770133.6629875, "n": 7359, "h": "4592d629b7c40443", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_TITLE_RAW: ${{ github.event.issue.title }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${ISSUE_TITLE_RAW}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n {\n echo \"number=${N}\"\n echo \"branch=${BRANCH}\"\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n OPENAI_BASE_URL: https://api.deepseek.com/v1\n OPENAI_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BODY: ${{ steps.issue.outputs.body }}\n run: |\n set -euo pipefail\n {\n printf '%s\\n\\n' \"按照 AGENTS.md 和项目规范实现以下任务。\"\n printf '任务标题:%s\\n\\n' \"${ISSUE_TITLE}\"\n printf '任务描述:\\n%s\\n\\n' \"${ISSUE_BODY}\"\n printf '%s\\n' \"实施要求(严格遵守):\"\n printf '%s\\n' \"1. 严格按照 AGENTS.md 中的规范和约束执行\"\n printf '%s\\n' \"2. 新建文件必须在文件头部添加 REUSE 合规头:\"\n printf '%s\\n' \" - SPDX-License-Identifier: Apache-2.0\"\n printf '%s\\n' \" - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\"\n printf '%s\\n' \"3. 不得修改 .github/workflows/ 目录下的任何文件\"\n printf '%s\\n' \"4. 不得修改 scripts/release/ 目录下的任何文件\"\n printf '%s\\n' \"5. 不得执行 git push、git tag、git merge、npm publish、twine upload\"\n printf '%s\\n' \"6. 不得修改 CHANGELOG.md(由发布流水线管理)\"\n printf '%s\\n' \"7. 只修改实现任务所需的最小文件集\"\n } > /tmp/autodev_prompt.txt\n codex --approval-mode full-auto --model deepseek-v4-pro \"$(cat /tmp/autodev_prompt.txt)\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n env:\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n%s\\n' \\\n \"feat: implement planned-task #${ISSUE_NUMBER}\" \\\n \"Automated implementation of planned-task issue.\" \\\n \"Issue: #${ISSUE_NUMBER}\" \\\n \"Title: ${ISSUE_TITLE}\" \\\n > /tmp/commit_msg.txt\n git commit --signoff --file /tmp/commit_msg.txt\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n ISSUE_TITLE: ${{ steps.issue.outputs.title }}\n ISSUE_BRANCH: ${{ steps.issue.outputs.branch }}\n run: |\n set -euo pipefail\n printf '%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n\\n%s\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"## Summary\" \\\n \"Automated implementation generated by **autodev-train** pipeline.\" \\\n \"**Task:** ${ISSUE_TITLE}\" \\\n \"Closes #${ISSUE_NUMBER}\" \\\n \"---\" \\\n \"### Pipeline state\" \\\n \"- [x] Stage 1 -- Implementation (this PR)\" \\\n \"- [ ] Stage 2 -- AI review (triggers automatically)\" \\\n \"- [ ] Stage 3 -- CI gates\" \\\n \"- [ ] Stage 4 -- Auto-merge\" \\\n \"*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n > /tmp/pr_body.txt\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${ISSUE_NUMBER}\" \\\n --body-file /tmp/pr_body.txt \\\n --label \"autodev-pr\" \\\n --head \"${ISSUE_BRANCH}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n printf '%s\\n\\n%s\\n' \\\n \"autodev-train: Implementation PR opened -> ${PR_URL}\" \\\n \"Pipeline will auto-merge after AI review approval and all CI checks pass.\" \\\n > /tmp/issue_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/issue_comment.txt\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n ISSUE_NUMBER: ${{ steps.issue.outputs.number }}\n run: |\n printf '%s\\n\\n%s\\n%s\\n%s\\n%s\\n\\n%s\\n' \\\n \"autodev-train: Codex CLI produced no file changes for this task.\" \\\n \"Possible causes:\" \\\n \"- The task description lacks sufficient implementation detail\" \\\n \"- The task requires information not available in AGENTS.md or the codebase\" \\\n \"- The task is already implemented\" \\\n \"Please refine the issue description and re-add the planned-task label to retry.\" \\\n > /tmp/no_changes_comment.txt\n gh issue comment \"${ISSUE_NUMBER}\" --body-file /tmp/no_changes_comment.txt\n gh issue edit \"${ISSUE_NUMBER}\" --remove-label \"planned-task\"\n"}, "1a3fd3f7bd02b88dc293397b9778c2d782dea86d": {"t": 1785770135.2569118, "n": 6096, "h": "6cff9ac595d74199", "c": "name: implement-planned-task\n\n# autodev-train Stage 1: Implement a planned-task issue using Codex CLI.\n# Triggers when 'planned-task' label is added to any issue.\n# Creates a branch, runs Codex, commits with DCO sign-off, opens PR.\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: write\n issues: write\n pull-requests: write\n\nconcurrency:\n group: autodev-implement-${{ github.event.issue.number }}\n cancel-in-progress: false\n\nenv:\n FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: \"true\"\n AUTODEV_BOT_NAME: \"autodev-bot\"\n AUTODEV_BOT_EMAIL: \"258170091+merchloubna70-dot@users.noreply.github.com\"\n\njobs:\n implement:\n name: Implement planned-task #${{ github.event.issue.number }}\n if: github.event.label.name == 'planned-task'\n runs-on: [self-hosted, macOS, ARM64, opus-plan]\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6\n with:\n fetch-depth: 0\n token: ${{ secrets.GITHUB_TOKEN }}\n\n - name: Ensure autodev labels exist\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n gh label create \"autodev-pr\" \\\n --description \"PR generated by autodev-train pipeline\" \\\n --color \"5319e7\" --force\n gh label create \"review-passed\" \\\n --description \"AI review approved by autodev-review\" \\\n --color \"0e8a16\" --force\n\n - name: Read issue details\n id: issue\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n N=\"${{ github.event.issue.number }}\"\n TITLE=\"${{ github.event.issue.title }}\"\n BRANCH=\"autodev/issue-${N}\"\n BODY=$(gh issue view \"$N\" --json body -q .body)\n echo \"number=${N}\" >> \"$GITHUB_OUTPUT\"\n echo \"branch=${BRANCH}\" >> \"$GITHUB_OUTPUT\"\n # Multi-line output\n {\n printf 'title<<__EOF_TITLE__\\n'\n printf '%s\\n' \"$TITLE\"\n printf '__EOF_TITLE__\\n'\n } >> \"$GITHUB_OUTPUT\"\n {\n printf 'body<<__EOF_BODY__\\n'\n printf '%s\\n' \"$BODY\"\n printf '__EOF_BODY__\\n'\n } >> \"$GITHUB_OUTPUT\"\n\n - name: Configure git identity\n run: |\n git config user.name \"$AUTODEV_BOT_NAME\"\n git config user.email \"$AUTODEV_BOT_EMAIL\"\n\n - name: Create implementation branch\n run: |\n set -euo pipefail\n BRANCH=\"${{ steps.issue.outputs.branch }}\"\n # Reset if branch already exists locally\n git checkout -B \"$BRANCH\"\n\n - name: Run Codex CLI to implement task\n env:\n OPENAI_BASE_URL: https://api.deepseek.com/v1\n OPENAI_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}\n run: |\n set -euo pipefail\n PROMPT=\"按照 AGENTS.md 和项目规范实现以下任务。\n\n任务标题:${{ steps.issue.outputs.title }}\n\n任务描述:\n${{ steps.issue.outputs.body }}\n\n实施要求(严格遵守):\n1. 严格按照 AGENTS.md 中的规范和约束执行\n2. 新建文件必须在文件头部添加 REUSE 合规头:\n - SPDX-License-Identifier: Apache-2.0\n - SPDX-FileCopyrightText: 当前年份 Attestplane Contributors\n3. 不得修改 .github/workflows/ 目录下的任何文件\n4. 不得修改 scripts/release/ 目录下的任何文件\n5. 不得执行 git push、git tag、git merge、npm publish、twine upload\n6. 不得修改 CHANGELOG.md(由发布流水线管理)\n7. 只修改实现任务所需的最小文件集\"\n\n codex --approval-mode full-auto --model deepseek-v4-pro \"$PROMPT\"\n\n - name: Check for real changes\n id: changes\n run: |\n git add -A\n if git diff --staged --quiet; then\n echo \"has_changes=false\" >> \"$GITHUB_OUTPUT\"\n else\n echo \"has_changes=true\" >> \"$GITHUB_OUTPUT\"\n fi\n\n - name: Commit with DCO sign-off\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n set -euo pipefail\n git commit \\\n --signoff \\\n -m \"feat: implement planned-task #${{ steps.issue.outputs.number }}\n\nAutomated implementation of planned-task issue.\n\nIssue: #${{ steps.issue.outputs.number }}\nTitle: ${{ steps.issue.outputs.title }}\n\nSigned-off-by: ${{ env.AUTODEV_BOT_NAME }} <${{ env.AUTODEV_BOT_EMAIL }}>\"\n\n - name: Push branch\n if: steps.changes.outputs.has_changes == 'true'\n run: |\n git push origin \"${{ steps.issue.outputs.branch }}\" --force-with-lease\n\n - name: Create pull request\n if: steps.changes.outputs.has_changes == 'true'\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n set -euo pipefail\n PR_URL=$(gh pr create \\\n --title \"autodev: implement planned-task #${{ steps.issue.outputs.number }}\" \\\n --body \"## Summary\n\nAutomated implementation generated by **autodev-train** pipeline.\n\n**Task:** ${{ steps.issue.outputs.title }}\n\nCloses #${{ steps.issue.outputs.number }}\n\n---\n\n### Pipeline state\n- [x] Stage 1 — Implementation (this PR)\n- [ ] Stage 2 — AI review (triggers automatically)\n- [ ] Stage 3 — CI gates\n- [ ] Stage 4 — Auto-merge\n\n*Do not merge manually. autodev-train will merge after review + CI pass.*\" \\\n --label \"autodev-pr\" \\\n --head \"${{ steps.issue.outputs.branch }}\" \\\n --base main)\n echo \"PR created: $PR_URL\"\n gh issue comment \"${{ steps.issue.outputs.number }}\" \\\n --body \"🤖 autodev-train: Implementation PR opened → $PR_URL\n\nPipeline will auto-merge after AI review approval and all CI checks pass.\"\n\n - name: Post failure comment (no changes produced)\n if: steps.changes.outputs.has_changes == 'false'\n env:\n GH_TOKEN: ${{ github.token }}\n run: |\n gh issue comment \"${{ steps.issue.outputs.number }}\" \\\n --body \"⚠️ autodev-train: Codex CLI produced no file changes for this task.\n\nPossible causes:\n- The task description lacks sufficient implementation detail\n- The task requires information not available in AGENTS.md or the codebase\n- The task is already implemented\n\nPlease refine the issue description and re-add the \\`planned-task\\` label to retry.\"\n gh issue edit \"${{ steps.issue.outputs.number }}\" \\\n --remove-label \"planned-task\"\n"}}}}