@plainconceptsplatform/workflows 0.27.3 → 0.27.5

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.
@@ -234,6 +234,8 @@ for (const file of readdirSync(workflowDirectory)) {
234
234
  .replace(/^env:\n/m, 'env:\n AGENTMEMORY_URL: https://agentmemory-pro-01.azurewebsites.net\n')
235
235
  // the secret is scoped to the one step that runs the agent (semgrep: a secret in
236
236
  // workflow-level env is visible to every job and step)
237
+ .replaceAll(' OPENAI_BASE_URL: http://host.docker.internal:10001',
238
+ ' OPENAI_BASE_URL: https://forge.plainconcepts.com/v1')
237
239
  .replaceAll(' OPENAI_BASE_URL: https://forge.plainconcepts.com/v1',
238
240
  ' OPENAI_BASE_URL: https://forge.plainconcepts.com/v1' + '\n' +
239
241
  ' AGENTMEMORY_SECRET: ${{ secrets.AGENTMEMORY_SECRET }}')
@@ -548,93 +548,33 @@ timeout-minutes: 90
548
548
  temporal draft from the earlier pass: reuse what still holds, and resolve its pending
549
549
  marks with the author's answers.
550
550
 
551
- 3. Explore before you write. Call skill("pc-plan-explore"); it owns the stance for this step.
552
-
553
- Split the issue into work units first. If the issue body is a bullet list of distinct tasks
554
- (for example "- check the button component", "- then check the login", "- then suggest a
555
- register page"), treat each bullet as its own work unit. Otherwise treat the whole issue as a
556
- single work unit.
557
-
558
- Create a todo entry for each work unit before you start exploring. Process them one at a
559
- time, strictly sequentially: explore unit 1, self-answer its questions, mark the todo
560
- complete, then move to unit 2. Do not explore multiple work units in the same pass. Do not
561
- start unit N+1 until unit N is marked complete.
562
-
563
- For the current work unit, answer your own questions from the codebase and the docs, and
564
- set one aside for the author only when it is a business or product decision the code cannot
565
- settle. A unit's todo is complete when its findings would support acceptance criteria: if you
566
- read a file but cannot say what changes for this unit, it is not.
567
-
568
- At most ${{ env.MAX_SELF_QUESTIONS }} self-asked questions per work unit, and stop sooner
569
- once more exploring stops changing your understanding. Never write a self-asked question or
570
- its answer to the issue: this is internal working, and the issue is read by people.
571
-
572
- 4. **Classify the change complexity.** Based on your exploration, determine whether this is a
573
- trivial change. A change is **trivial** only if every one of these holds:
574
- ${{ env.TRIVIAL_CRITERIA }}
575
-
576
- If all hold → **trivial path** (step 4a). If any fails → **standard path** (step 5).
577
-
578
- **4a. Trivial path.** Skip `/plan-story`. Do not write Gherkin acceptance criteria or
579
- Mermaid diagrams. Instead, prepare the replacement issue body as valid Markdown:
580
-
581
- 1. `${{ env.TRIVIAL_MARKER }}`
582
- 2. A short plain-English summary of what needs to change and why (2-3 sentences max)
583
- 3. A simple checklist of concrete steps:
584
- ```
585
- ## Tasks
586
- - [ ] Change X in file Y
587
- - [ ] Verify Z
588
- ```
589
-
590
- No "As a / I want / so that" form. No Given/When/Then. No Mermaid. Just the marker,
591
- the summary, and the checklist.
592
-
593
- Load `@humanizer` and prepare the replacement issue body, then go directly to step 8
594
- (estimate). Skip steps 5-7.
595
-
596
- 5. Before writing the story, verify coverage: list every work unit and confirm each one has
597
- exploration findings concrete enough for acceptance criteria. If any unit is missing, go back
598
- and explore it now. Then call skill("pc-plan-story") and run `/plan-story` for the issue,
599
- passing everything you learned while exploring as the exploration findings. Ground the story
600
- in the actual codebase by reading the relevant files. Never read outside this repository root.
601
- `pc-plan-story` owns the story's shape. This workflow's own requirement is coverage: several
602
- work units become one story that covers all of them, with at least one acceptance scenario
603
- per unit.
604
-
605
- Apply repository documentation and established conventions before finalizing the story.
606
- Adhere to ${{ env.REPO_RULES }}.
607
-
608
- 6. **Wrap the story in the repository's issue form.** The body people read must follow the
609
- repository's own issue template when one exists; the story is the content, the template
610
- is the shape.
611
-
612
- Find the form first:
613
-
614
- - List the YAML and Markdown forms under `.github/ISSUE_TEMPLATE/`, plus a legacy
615
- `.github/issue_template.md` or a root `template.yml`. `config.yml` there only declares
616
- contact links, which are not forms: ignore it.
617
- - When a form filters by labels and the issue carries one of those labels, that form
618
- wins. Otherwise use the repository's default form.
619
- - When the repository has no form at all, keep the free-form story shape from step 5:
620
- there is nothing to wrap around.
621
-
622
- Then fill it:
623
-
624
- - Draw every field's content from your exploration findings. Required fields always get
625
- real content; optional fields only when you genuinely have something for them.
626
- - The story narrative lands in the field that asks for it — proposal, description, or
627
- what-happened, depending on the form.
628
- - The Given/When/Then scenarios go into the form's acceptance-criteria field when it has
629
- one; otherwise they stay a section of their own. The Mermaid diagram goes where it
630
- reads best inside the filled form.
631
- - The machine-readable lines the later steps add — split markers in step 9, estimate
632
- lines in step 10 — always sit at the very top of the body, above the form's first
633
- heading, so the workflow can read them whatever the form's shape.
634
-
635
- 7. Load `@humanizer` and prepare the complete replacement issue body as valid Markdown.
636
-
637
- 8. **Estimate the story in points.** Use the Fibonacci scale, where one point is roughly one
551
+ 3. **Explore and write the story.** Split the issue into work units first. If the issue body is
552
+ a bullet list of distinct tasks, treat each bullet as its own work unit. Otherwise treat the
553
+ whole issue as a single work unit.
554
+
555
+ Call `skill("pc-plan-explore")` and pass it the work-unit list. It owns the exploration
556
+ stance: sequential per-unit investigation, self-answered questions from the codebase, and
557
+ findings held as internal working. Never write a self-asked question or its answer to the
558
+ issue. At most ${{ env.MAX_SELF_QUESTIONS }} self-asked questions per work unit, and stop
559
+ sooner once more exploring stops changing your understanding.
560
+
561
+ Then classify the change complexity. A change is **trivial** only if every one of these
562
+ holds: ${{ env.TRIVIAL_CRITERIA }}
563
+
564
+ **Trivial path.** Skip the story skill. Prepare the replacement issue body as valid Markdown:
565
+ `${{ env.TRIVIAL_MARKER }}`, a short plain-English summary (2-3 sentences max), and a simple
566
+ checklist of concrete steps. No "As a / I want / so that" form, no Given/When/Then, no Mermaid.
567
+ Load `@humanizer` and prepare the body, then go directly to step 4 (estimate).
568
+
569
+ **Standard path.** Call `skill("pc-plan-story")` and pass it the work units and the exploration
570
+ findings. `pc-plan-story` owns the story's shape: drafting, coverage gate, repo-docs application,
571
+ issue-form discovery and wrapping, humanizer pass, and the structured implementation plan. Do not
572
+ repeat any of those steps yourself. Adhere to ${{ env.REPO_RULES }}.
573
+
574
+ The story body the skill returns has its machine-readable lines at the very top, above the
575
+ form's first heading, so the workflow can read them whatever the form's shape.
576
+
577
+ 4. **Estimate the story in points.** Use the Fibonacci scale, where one point is roughly one
638
578
  human day of work for a developer who knows this codebase. Estimate the whole story: code,
639
579
  tests, and the edge cases the acceptance criteria imply.
640
580
 
@@ -647,7 +587,7 @@ timeout-minutes: 90
647
587
  Elapsed clock time is not evidence. A large change can land in minutes and a small one can
648
588
  wait days for a human, so never reason from how long anything took.
649
589
 
650
- 9. **Split when the estimate is ${{ env.SPLIT_THRESHOLD }} or more.** An oversized story is the
590
+ 5. **Split when the estimate is ${{ env.SPLIT_THRESHOLD }} or more.** An oversized story is the
651
591
  single best predictor of a pull request that never lands.
652
592
 
653
593
  First test whether it *can* split. A story splits when it contains slices that are each
@@ -672,7 +612,7 @@ timeout-minutes: 90
672
612
  single story and say so in one sentence in the body, under the estimate. An honest 8 is more
673
613
  useful than three fake threes that each break the build.
674
614
 
675
- 10. **Record the estimate in every body you write**, parent and children alike, immediately below
615
+ 6. **Record the estimate in every body you write**, parent and children alike, immediately below
676
616
  the title line, as exactly these two lines:
677
617
 
678
618
  ```
@@ -683,7 +623,7 @@ timeout-minutes: 90
683
623
  The visible line is for people and the marker is read by the workflow, which turns it into the
684
624
  `sp-N` label. A body without the marker gets no estimate label at all.
685
625
 
686
- 11. Decide exactly one outcome:
626
+ 7. Decide exactly one outcome:
687
627
 
688
628
  Labels are workflow-owned state. Do not call `add_labels` or `remove_labels`.
689
629
 
@@ -691,9 +631,9 @@ timeout-minutes: 90
691
631
  could not answer. Leave the partial work visible: first call `update_issue` with a
692
632
  temporal draft, then call `add_comment` once with the questions.
693
633
 
694
- The temporal draft is the replacement body your path would have written — the filled
695
- issue form from step 6 on the standard path, the marker, summary and checklist from
696
- step 4a on the trivial path — holding everything you already established, with every
634
+ The temporal draft is the replacement body your path would have written — the story
635
+ body from the standard path, the marker, summary and checklist from the trivial path —
636
+ holding everything you already established, with every
697
637
  part the questions leave open marked `_pending — see questions below_`. Its very
698
638
  first line is `${{ env.DRAFT_MARKER }}`; the next run replaces the draft wholesale
699
639
  with the final body.
@@ -199,7 +199,17 @@ post-steps:
199
199
  kill "$APP_PID" 2>/dev/null || true
200
200
 
201
201
  timeout-minutes: 15
202
+
203
+ engine:
204
+ id: opencode
205
+ version: "1.2.14"
206
+ env:
207
+ OPENAI_BASE_URL: https://forge.plainconcepts.com/v1
208
+
202
209
  model: openai/glm-5-3
210
+ max-turns: 120
211
+ max-turn-cache-misses: 3000
212
+ max-ai-credits: 5000
203
213
  ---
204
214
 
205
215
  1. You are visually verifying pull request **#${{ needs.subject.outputs.pr }}**, which closes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plainconceptsplatform/workflows",
3
- "version": "0.27.3",
3
+ "version": "0.27.5",
4
4
  "description": "Install and update Platform GitHub agentic workflows.",
5
5
  "keywords": [
6
6
  "github-actions",