@plainconceptsplatform/workflows 1.13.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/loops/actions/add-issue-labels/action.yml +50 -50
- package/loops/actions/agent-output.cjs +17 -17
- package/loops/actions/apply-agent-bundle/action.yml +24 -24
- package/loops/actions/apply-agent-comments/action.yml +42 -42
- package/loops/actions/apply-agent-labels/action.yml +55 -55
- package/loops/actions/cleanup-artifacts/action.yml +91 -91
- package/loops/actions/close-agent-issues/action.yml +43 -43
- package/loops/actions/create-issue-comment/action.yml +29 -29
- package/loops/actions/download-agent-output/action.yml +53 -53
- package/loops/actions/link-pr-to-issue/action.yml +40 -40
- package/loops/actions/list-open-issues/action.yml +33 -33
- package/loops/actions/load-issue-context/action.yml +45 -45
- package/loops/actions/merge-agent-pr/action.yml +49 -49
- package/loops/actions/merge-dependabot/action.yml +10 -2
- package/loops/actions/merge-dependabot/merge-dependabot.mjs +47 -17
- package/loops/actions/remove-issue-labels/action.yml +37 -37
- package/loops/actions/update-agent-issues/action.yml +58 -58
- package/loops/actions/validate-review-output/action.yml +35 -35
- package/loops/actions/validate-triage-output/action.yml +36 -36
- package/loops/actions/verify-composite-actions/action.yml +9 -9
- package/loops/actions/verify-refine-output/action.yml +9 -9
- package/loops/actions/verify-route-matrix/action.yml +9 -9
- package/loops/actions/verify-route-matrix/verify-route-matrix.sh +7 -2
- package/loops/templates/agentics/agentics-maintenance.yml +121 -121
- package/loops/templates/dependabot-merge/.github/workflows/dependabot-merge.yml +3 -1
- package/loops/templates/issues/bug_report.yml +109 -109
- package/loops/templates/issues/feature_request.yml +75 -75
- package/loops/workflows/agent-implement.md +13 -12
- package/loops/workflows/shared/opencode-ci.md +17 -5
- package/loops/workflows/shared/platform-defaults.md +53 -53
- package/loops/workflows/work-router.yml +4 -0
- package/package.json +2 -2
|
@@ -6,12 +6,12 @@ env:
|
|
|
6
6
|
# so it names its model here. `model:` below only satisfies the compiler. A repository may
|
|
7
7
|
# change it to any model its opencode.ci.json declares.
|
|
8
8
|
AGENT_LEAD_MODEL: "forge/glm-5-2"
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
AGENT_TIER_MODEL: "
|
|
13
|
-
#
|
|
14
|
-
AGENT_FAST_MODEL: "
|
|
9
|
+
# Let harness.json drive the tiers: plan=glm-5-3, build/fast=glm-5-2. A repository
|
|
10
|
+
# whose CI account is not granted a tier model can still pin every tier to one
|
|
11
|
+
# model by setting AGENT_TIER_MODEL.
|
|
12
|
+
AGENT_TIER_MODEL: ""
|
|
13
|
+
# Empty: harness.json already names glm-5-2 for fast.
|
|
14
|
+
AGENT_FAST_MODEL: ""
|
|
15
15
|
VERIFY_COMMANDS: ""
|
|
16
16
|
REPO_RULES: "Implement only the selected issue. Follow repository documentation and existing conventions. Do not weaken tests, lower coverage thresholds, or bypass checks."
|
|
17
17
|
# Split out of REPO_RULES because one field asked to carry architecture, testing, coverage and
|
|
@@ -770,13 +770,14 @@ timeout-minutes: 180
|
|
|
770
770
|
|
|
771
771
|
1. `pc-plan-goal`, then Phase 0 as it describes.
|
|
772
772
|
|
|
773
|
-
**Propose and archive run in the `planner` agent, not in this session.** Spawn it with the
|
|
774
|
-
task tool (`subagent_type: planner`) and a prompt that names the skill to load
|
|
773
|
+
**Propose and archive run in the `planner-sub` agent, not in this session.** Spawn it with the
|
|
774
|
+
task tool (`subagent_type: planner-sub`) and a prompt that names the skill to load
|
|
775
775
|
(`pc-plan-propose` or `pc-plan-archive`), the issue context path above, the branch, and that it
|
|
776
|
-
runs in autonomous mode with no one to ask. `planner` runs on the repository's plan model,
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
776
|
+
runs in autonomous mode with no one to ask. `planner-sub` runs on the repository's plan model,
|
|
777
|
+
which these two steps decide the whole change on. Wait for it in the same turn, then continue
|
|
778
|
+
with the next phase yourself. If `planner-sub` is not in the task tool's enum, call
|
|
779
|
+
`report_incomplete` naming it; do not load `pc-plan-propose` here. Only when the harness is
|
|
780
|
+
older than 3.4.0 and has neither `planner` nor `planner-sub` may you load the skill here.
|
|
780
781
|
|
|
781
782
|
2. `pc-plan-propose`, even when the issue is refined. It is what turns the issue into
|
|
782
783
|
`openspec/changes/<id>/tasks.md` with every task annotated
|
|
@@ -208,11 +208,10 @@ pre-agent-steps:
|
|
|
208
208
|
# Two of the three run here. pc-system-reminders gates shell and edits on skills a CI
|
|
209
209
|
# worker's prompt does not load, and has never run in CI; it stays off until it does.
|
|
210
210
|
#
|
|
211
|
-
# The tier models come from AGENT_TIER_MODEL when a worker sets it. The
|
|
212
|
-
#
|
|
213
|
-
#
|
|
214
|
-
#
|
|
215
|
-
# plugin reads first, until a run on the newly priced models has passed.
|
|
211
|
+
# The tier models come from AGENT_TIER_MODEL when a worker sets it. The implement worker
|
|
212
|
+
# leaves it empty so harness.json drives: plan=glm-5-3, build/fast=glm-5-2. A repository
|
|
213
|
+
# whose CI account is not granted a tier model can still pin every tier to one model
|
|
214
|
+
# through the gitignored per-user override the plugin reads first.
|
|
216
215
|
run: |
|
|
217
216
|
set -euo pipefail
|
|
218
217
|
if [ ! -f .opencode/package.json ]; then
|
|
@@ -246,6 +245,19 @@ pre-agent-steps:
|
|
|
246
245
|
echo "Harness plugins: $(ls .opencode/plugins | tr '\n' ' ')"
|
|
247
246
|
echo "Tier models: $(jq -c '.models' .opencode/harness.user.json 2>/dev/null || jq -c '.models' .opencode/harness.json)"
|
|
248
247
|
|
|
248
|
+
- name: Sync harness agents and print model routing
|
|
249
|
+
# The plugin writes these at startup, but OpenCode builds the task enum from what
|
|
250
|
+
# exists when it starts. Generating them here makes planner-sub and the tier
|
|
251
|
+
# variants visible from the first turn; the doctor is the audit line.
|
|
252
|
+
run: |
|
|
253
|
+
set -euo pipefail
|
|
254
|
+
if [ -f .opencode/scripts/sync-agents.mjs ] && [ -f .opencode/plugins/pc-subagent-tiers-core.js ]; then
|
|
255
|
+
node .opencode/scripts/sync-agents.mjs --strict
|
|
256
|
+
fi
|
|
257
|
+
if [ -f .opencode/scripts/harness-doctor.mjs ]; then
|
|
258
|
+
node .opencode/scripts/harness-doctor.mjs --strict
|
|
259
|
+
fi
|
|
260
|
+
|
|
249
261
|
- name: Merge the CI-only OpenCode provider into opencode.jsonc
|
|
250
262
|
env:
|
|
251
263
|
GH_TOKEN: ${{ github.token }}
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
---
|
|
2
|
-
# Managed by @plainconceptsplatform/workflows. Source: loops/workflows/shared/platform-defaults.md. Update with `workflows update --force`; consumer edits may be overwritten.
|
|
3
|
-
description: Shared network and safe-output defaults for catalog agent workflows, plus the verification rules every worker that builds or pushes has to follow. The body below is runtime-imported into each worker's prompt ahead of its own steps.
|
|
4
|
-
|
|
5
|
-
network:
|
|
6
|
-
allowed:
|
|
7
|
-
- defaults
|
|
8
|
-
- forge.plainconcepts.com
|
|
9
|
-
# opencode fetches its model registry from models.opencode.ai at startup; without
|
|
10
|
-
# this host on the allowlist the fetch blocks bootstrap and the run stalls after
|
|
11
|
-
# "init" until the runner kills it. The apex "opencode.ai" is not enough.
|
|
12
|
-
- models.opencode.ai
|
|
13
|
-
- node
|
|
14
|
-
- github
|
|
15
|
-
- dotnet
|
|
16
|
-
- fonts
|
|
17
|
-
- login.microsoftonline.com
|
|
18
|
-
# centralised AgentMemory (App Service); the MCP shim needs it through the egress proxy
|
|
19
|
-
- agentmemory-pro-01.azurewebsites.net
|
|
20
|
-
|
|
21
|
-
safe-outputs:
|
|
22
|
-
threat-detection: false
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
## These runs are not interactive
|
|
26
|
-
|
|
27
|
-
- Nothing resumes you. A turn that ends with text and no tool call ends the whole run, and the work
|
|
28
|
-
is discarded, whatever the text promised. "I'll read the context files first." as a last message
|
|
29
|
-
is a finished run: the Pliny-Bot merge gate did exactly that on #801, ended in twenty-three
|
|
30
|
-
seconds with exit code 0 and no outcome, and was retried twice before the pull request was handed
|
|
31
|
-
to a person for nothing.
|
|
32
|
-
- So every message you write carries a tool call until the last one, which is the safe-output call
|
|
33
|
-
the task names. Say what you are about to do and do it in the same message. Never announce a step
|
|
34
|
-
and stop, never wait for a command, a reviewer or a "next turn".
|
|
35
|
-
- A command the bash tool reports as moved to the background is still running: poll its output file
|
|
36
|
-
with tool calls (`sleep 40; tail -n 15 <file>`) until it shows an exit status, then go on.
|
|
37
|
-
|
|
38
|
-
## Verification, for every worker that builds or pushes
|
|
39
|
-
|
|
40
|
-
- Scope every check to the files you changed. This is the runner, not a preference: a
|
|
41
|
-
whole-repository lint, build or test run exhausts its memory and gets killed mid-run, which
|
|
42
|
-
fails the job with no useful output. Pass the changed paths to the linter (`pnpm exec biome
|
|
43
|
-
check <files>`), build only the projects containing them, and run only the test project that
|
|
44
|
-
covers them. Escalate to the full suite only after the scoped run passes and only when the
|
|
45
|
-
change crosses a project boundary.
|
|
46
|
-
- Run nothing at all for a change that touches only documentation. A cold Release build on a
|
|
47
|
-
shared runner is minutes the run does not get back.
|
|
48
|
-
- Never make a check pass by weakening it: not a deleted test, not a lowered threshold, not a
|
|
49
|
-
skipped step. Fix the cause and run it again.
|
|
50
|
-
- Once the checks pass, run the project's lint fix command over the files you changed
|
|
51
|
-
(`pnpm lint:fix`, `pnpm exec biome check --write <changed-files>`, or its equivalent), or
|
|
52
|
-
correct what lint reports where no fix command exists. A branch that arrives with lint errors
|
|
53
|
-
gets sent back for them.
|
|
1
|
+
---
|
|
2
|
+
# Managed by @plainconceptsplatform/workflows. Source: loops/workflows/shared/platform-defaults.md. Update with `workflows update --force`; consumer edits may be overwritten.
|
|
3
|
+
description: Shared network and safe-output defaults for catalog agent workflows, plus the verification rules every worker that builds or pushes has to follow. The body below is runtime-imported into each worker's prompt ahead of its own steps.
|
|
4
|
+
|
|
5
|
+
network:
|
|
6
|
+
allowed:
|
|
7
|
+
- defaults
|
|
8
|
+
- forge.plainconcepts.com
|
|
9
|
+
# opencode fetches its model registry from models.opencode.ai at startup; without
|
|
10
|
+
# this host on the allowlist the fetch blocks bootstrap and the run stalls after
|
|
11
|
+
# "init" until the runner kills it. The apex "opencode.ai" is not enough.
|
|
12
|
+
- models.opencode.ai
|
|
13
|
+
- node
|
|
14
|
+
- github
|
|
15
|
+
- dotnet
|
|
16
|
+
- fonts
|
|
17
|
+
- login.microsoftonline.com
|
|
18
|
+
# centralised AgentMemory (App Service); the MCP shim needs it through the egress proxy
|
|
19
|
+
- agentmemory-pro-01.azurewebsites.net
|
|
20
|
+
|
|
21
|
+
safe-outputs:
|
|
22
|
+
threat-detection: false
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## These runs are not interactive
|
|
26
|
+
|
|
27
|
+
- Nothing resumes you. A turn that ends with text and no tool call ends the whole run, and the work
|
|
28
|
+
is discarded, whatever the text promised. "I'll read the context files first." as a last message
|
|
29
|
+
is a finished run: the Pliny-Bot merge gate did exactly that on #801, ended in twenty-three
|
|
30
|
+
seconds with exit code 0 and no outcome, and was retried twice before the pull request was handed
|
|
31
|
+
to a person for nothing.
|
|
32
|
+
- So every message you write carries a tool call until the last one, which is the safe-output call
|
|
33
|
+
the task names. Say what you are about to do and do it in the same message. Never announce a step
|
|
34
|
+
and stop, never wait for a command, a reviewer or a "next turn".
|
|
35
|
+
- A command the bash tool reports as moved to the background is still running: poll its output file
|
|
36
|
+
with tool calls (`sleep 40; tail -n 15 <file>`) until it shows an exit status, then go on.
|
|
37
|
+
|
|
38
|
+
## Verification, for every worker that builds or pushes
|
|
39
|
+
|
|
40
|
+
- Scope every check to the files you changed. This is the runner, not a preference: a
|
|
41
|
+
whole-repository lint, build or test run exhausts its memory and gets killed mid-run, which
|
|
42
|
+
fails the job with no useful output. Pass the changed paths to the linter (`pnpm exec biome
|
|
43
|
+
check <files>`), build only the projects containing them, and run only the test project that
|
|
44
|
+
covers them. Escalate to the full suite only after the scoped run passes and only when the
|
|
45
|
+
change crosses a project boundary.
|
|
46
|
+
- Run nothing at all for a change that touches only documentation. A cold Release build on a
|
|
47
|
+
shared runner is minutes the run does not get back.
|
|
48
|
+
- Never make a check pass by weakening it: not a deleted test, not a lowered threshold, not a
|
|
49
|
+
skipped step. Fix the cause and run it again.
|
|
50
|
+
- Once the checks pass, run the project's lint fix command over the files you changed
|
|
51
|
+
(`pnpm lint:fix`, `pnpm exec biome check --write <changed-files>`, or its equivalent), or
|
|
52
|
+
correct what lint reports where no fix command exists. A branch that arrives with lint errors
|
|
53
|
+
gets sent back for them.
|
|
@@ -1835,6 +1835,9 @@ jobs:
|
|
|
1835
1835
|
pull-requests: read
|
|
1836
1836
|
# actions: write cancels workflow runs stuck pending in the fleet queue.
|
|
1837
1837
|
actions: write
|
|
1838
|
+
# The Dependabot merge reads check runs and statuses with this token, not the App's.
|
|
1839
|
+
checks: read
|
|
1840
|
+
statuses: read
|
|
1838
1841
|
env:
|
|
1839
1842
|
BOT_APP_ID: ${{ secrets.BOT_APP_ID }}
|
|
1840
1843
|
BOT_PRIVATE_KEY: ${{ secrets.BOT_PRIVATE_KEY }}
|
|
@@ -1867,6 +1870,7 @@ jobs:
|
|
|
1867
1870
|
uses: ./.github/actions/merge-dependabot
|
|
1868
1871
|
with:
|
|
1869
1872
|
token: ${{ steps.app-token.outputs.token }}
|
|
1873
|
+
read-token: ${{ github.token }}
|
|
1870
1874
|
scope: ${{ vars.DEPENDABOT_MERGE || env.DEPENDABOT_MERGE }}
|
|
1871
1875
|
merge-without-checks: ${{ env.DEPENDABOT_MERGE_WITHOUT_CHECKS }}
|
|
1872
1876
|
skip-labels: do-not-merge blocked human-review ${{ env.MERGE_TRAIN_HOLD_LABEL }}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plainconceptsplatform/workflows",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"description": "Install and update Platform GitHub agentic workflows.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"github-actions",
|
|
@@ -41,6 +41,6 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/node": "^22.0.0",
|
|
43
43
|
"typescript": "^5.8.0",
|
|
44
|
-
"vitest": "^
|
|
44
|
+
"vitest": "^4.1.11"
|
|
45
45
|
}
|
|
46
46
|
}
|