@plainconceptsplatform/workflows 1.13.1 → 1.14.1

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.
Files changed (33) hide show
  1. package/loops/actions/add-issue-labels/action.yml +50 -50
  2. package/loops/actions/agent-output.cjs +17 -17
  3. package/loops/actions/apply-agent-bundle/action.yml +24 -24
  4. package/loops/actions/apply-agent-comments/action.yml +42 -42
  5. package/loops/actions/apply-agent-labels/action.yml +55 -55
  6. package/loops/actions/cleanup-artifacts/action.yml +91 -91
  7. package/loops/actions/close-agent-issues/action.yml +43 -43
  8. package/loops/actions/create-issue-comment/action.yml +29 -29
  9. package/loops/actions/download-agent-output/action.yml +53 -53
  10. package/loops/actions/link-pr-to-issue/action.yml +40 -40
  11. package/loops/actions/list-open-issues/action.yml +33 -33
  12. package/loops/actions/load-issue-context/action.yml +45 -45
  13. package/loops/actions/merge-agent-pr/action.yml +49 -49
  14. package/loops/actions/remove-issue-labels/action.yml +37 -37
  15. package/loops/actions/update-agent-issues/action.yml +58 -58
  16. package/loops/actions/validate-refine-output/validate-refine-output.sh +15 -3
  17. package/loops/actions/validate-review-output/action.yml +35 -35
  18. package/loops/actions/validate-review-output/validate-review-output.sh +4 -1
  19. package/loops/actions/validate-triage-output/action.yml +36 -36
  20. package/loops/actions/validate-triage-output/validate-triage-output.sh +5 -2
  21. package/loops/actions/verify-composite-actions/action.yml +9 -9
  22. package/loops/actions/verify-refine-output/action.yml +9 -9
  23. package/loops/actions/verify-refine-output/verify-refine-output.sh +10 -0
  24. package/loops/actions/verify-route-matrix/action.yml +9 -9
  25. package/loops/actions/verify-route-matrix/verify-route-matrix.sh +2 -2
  26. package/loops/templates/agentics/agentics-maintenance.yml +121 -121
  27. package/loops/templates/issues/bug_report.yml +109 -109
  28. package/loops/templates/issues/feature_request.yml +75 -75
  29. package/loops/workflows/agent-implement.md +13 -12
  30. package/loops/workflows/agent-refine.md +14 -1
  31. package/loops/workflows/shared/opencode-ci.md +17 -5
  32. package/loops/workflows/shared/platform-defaults.md +53 -53
  33. package/package.json +1 -1
@@ -738,7 +738,20 @@ jobs:
738
738
  output_tokens=$(jq -r '.output_tokens // empty' usage-read/agent_usage.json 2>/dev/null || echo "")
739
739
  fi
740
740
  if [ -n "$output_tokens" ] && [ "$output_tokens" -gt 20000 ]; then
741
- echo "truncated=This attempt consumed ${output_tokens} output tokens and still produced no outcome. That is what provider output truncation looks like, not an outage: the model hit the single-response cap mid-generation and every call it was writing was lost. If this repeats, split the issue or tighten its body." >> "$GITHUB_OUTPUT"
741
+ # A run that burned tokens and produced items the validator refused is not
742
+ # truncation: the agent finished, and the validator did not recognise the
743
+ # outcome shape (Bots #1336, run 42214146974: 50926 output tokens, 2 items,
744
+ # draft marker stripped by process_safe_outputs, questions line paraphrased).
745
+ # Only call it truncation when the agent spent tokens and produced nothing.
746
+ item_count=0
747
+ if [ -f usage-read/agent_output.json ]; then
748
+ item_count=$(jq '.items | length' usage-read/agent_output.json 2>/dev/null || echo 0)
749
+ fi
750
+ if [ "$item_count" -gt 0 ]; then
751
+ echo "truncated=This attempt consumed ${output_tokens} output tokens and produced ${item_count} item(s), but the validator could not recognise the outcome. The agent finished its work: check the run artifacts (agent_output.json, safeoutputs.jsonl) against the validator's expected shape before retrying." >> "$GITHUB_OUTPUT"
752
+ else
753
+ echo "truncated=This attempt consumed ${output_tokens} output tokens and still produced no outcome. That is what provider output truncation looks like, not an outage: the model hit the single-response cap mid-generation and every call it was writing was lost. If this repeats, split the issue or tighten its body." >> "$GITHUB_OUTPUT"
754
+ fi
742
755
  else
743
756
  echo "truncated=" >> "$GITHUB_OUTPUT"
744
757
  fi
@@ -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 AWF proxy refuses
212
- # a model it has no AI credits price for; harness.json names carina-60b and quasar-438b,
213
- # which had none until the `models.providers` prices at the top of this file (Atlas #2016).
214
- # CI still pins every tier to one model, through the gitignored per-user override the
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plainconceptsplatform/workflows",
3
- "version": "1.13.1",
3
+ "version": "1.14.1",
4
4
  "description": "Install and update Platform GitHub agentic workflows.",
5
5
  "keywords": [
6
6
  "github-actions",