From c3a0754af2e77fbf48c3145fb1e59b294e3db570 Mon Sep 17 00:00:00 2001 From: Mike Clay Date: Mon, 17 Aug 2026 14:43:25 +0100 Subject: [PATCH 1/2] Ask for the issue platform before anything reads it Five step positions where a decision arrives after the work it was meant to steer, or work happens before the decision that steers it. The issue platform is read at 14 of the first activity's 52 steps and decided at one. That gate now sits directly after the missing-issue gate that sets the creation flag it reads, ahead of the first step gated on the platform, so the verification steps and the issue creation both see the choice. The create-issue technique reads the gate's answer instead of asking for one itself. The Jira project gate requires that an issue is being created, which its own message already says it is for. A run holding an existing Jira issue is no longer stopped to choose a project it never uses. The commit-signing check runs before the repository index rather than after it. Signing is a hard precondition whose failure message says to configure signing and re-run, so a repository without it now fails before paying for a full index. The build-artifact gates apply to rust-substrate projects, the ones that have .scale and node metadata to regenerate, and a step between them derives the regeneration commands from the project's build manifest. Every other project is no longer asked a question whose answer is always none-needed, and the hand-off gate presents commands rather than an empty block. In workflow-design intake, the structural inventory is persisted after the design-intent gate that can reclassify the operation, so the artifact records the classification the run proceeds under. --- work-package/REVIEW-MODE.md | 2 +- .../activities/01-start-work-package.yaml | 70 ++++++++++--------- .../activities/13-submit-for-review.yaml | 13 +++- work-package/techniques/create-issue.md | 4 +- .../activities/01-intake-and-context.yaml | 20 +++--- 5 files changed, 63 insertions(+), 46 deletions(-) diff --git a/work-package/REVIEW-MODE.md b/work-package/REVIEW-MODE.md index b4a54374c..2d9c34d3f 100644 --- a/work-package/REVIEW-MODE.md +++ b/work-package/REVIEW-MODE.md @@ -54,7 +54,7 @@ The create path and the review path each carry their own findings gate, because The same boundary gates the `review-fix-cycle` loop out of review mode. `code_findings_actionable` and `test_findings_actionable` say a finding reached the severity that warrants action; on the review path the action is raising it to the author, and no component file is edited. -`jira-project-selection` (`start-work-package`) is gated `issue_platform == jira` inside the issue-creation branch and never fires in review mode (which references an existing PR/issue), so it needs no review-mode treatment. +`jira-project-selection` (`start-work-package`) is gated `issue_platform == jira && needs_issue_creation == true`, and a review run references an existing PR and issue, so it never fires there and needs no review-mode treatment. --- diff --git a/work-package/activities/01-start-work-package.yaml b/work-package/activities/01-start-work-package.yaml index c18e989cd..1cf4eb26d 100644 --- a/work-package/activities/01-start-work-package.yaml +++ b/work-package/activities/01-start-work-package.yaml @@ -1,5 +1,5 @@ id: start-work-package -version: 3.16.0 +version: 3.17.0 name: Start Work Package description: Initialize the work package with issue, branch, draft PR, dedicated worktree, and planning folder. required: true @@ -150,6 +150,12 @@ steps: type: simple variable: host_repo_path operator: exists + - kind: action + id: verify-signing-precondition + actions: + - action: validate + target: signing.configured == true + message: Commit signing is not configured for this repository (user.signingkey, commit.gpgsign, or a working signing backend is missing). Configure git signing before re-running. - kind: technique id: analyze-repo-with-gitnexus technique: @@ -160,12 +166,6 @@ steps: - action: set target: gitnexus_indexed value: true - - kind: action - id: verify-signing-precondition - actions: - - action: validate - target: signing.configured == true - message: Commit signing is not configured for this repository (user.signingkey, commit.gpgsign, or a working signing backend is missing). Configure git signing before re-running. - kind: technique id: detect-merge-strategy technique: manage-git::detect-merge-strategy @@ -213,6 +213,27 @@ steps: effect: setVariable: issue_skipped: true + - kind: checkpoint + id: platform-selection + condition: + type: simple + variable: needs_issue_creation + operator: == + value: true + message: Select the platform for the new issue. + options: + - id: github + label: GitHub + description: Create issue in GitHub repository + effect: + setVariable: + issue_platform: github + - id: jira + label: Jira + description: Create issue in Jira project + effect: + setVariable: + issue_platform: jira - kind: technique id: verify-jira-issue technique: @@ -294,10 +315,16 @@ steps: - kind: checkpoint id: jira-project-selection condition: - type: simple - variable: issue_platform - operator: == - value: jira + type: and + conditions: + - type: simple + variable: issue_platform + operator: == + value: jira + - type: simple + variable: needs_issue_creation + operator: == + value: true message: Select the Jira project for the new issue. options: - id: select @@ -406,27 +433,6 @@ steps: id: create-issue technique: create-issue when: needs_issue_creation == true - - kind: checkpoint - id: platform-selection - condition: - type: simple - variable: needs_issue_creation - operator: == - value: true - message: Select the platform for the new issue. - options: - - id: github - label: GitHub - description: Create issue in GitHub repository - effect: - setVariable: - issue_platform: github - - id: jira - label: Jira - description: Create issue in Jira project - effect: - setVariable: - issue_platform: jira - kind: technique id: lookup-current-user technique: atlassian-operations::user-info diff --git a/work-package/activities/13-submit-for-review.yaml b/work-package/activities/13-submit-for-review.yaml index e7b02c985..c0ac633d3 100644 --- a/work-package/activities/13-submit-for-review.yaml +++ b/work-package/activities/13-submit-for-review.yaml @@ -1,5 +1,5 @@ id: submit-for-review -version: 1.15.0 +version: 1.16.0 name: Submit for Review description: Submit the work for review — PR review lifecycle normally; a verified private-remote push in stealth mode. required: true @@ -272,6 +272,10 @@ steps: variable: stealth_mode operator: "!=" value: true + - type: simple + variable: project_type + operator: == + value: rust-substrate message: Do any build-dependent artifacts need user-owned regeneration (e.g. .scale / node metadata)? blocking: true options: @@ -287,6 +291,13 @@ steps: effect: setVariable: build_dependent_artifacts_pending: true + - kind: action + id: derive-regen-commands + when: build_dependent_artifacts_pending == true + actions: + - action: set + target: build_dependent_artifact_commands + message: The commands that regenerate this project's build-dependent artifacts, read from its build manifest and scripts, with a note on who owns each. One command per line. - kind: checkpoint id: build-artifact-handoff condition: diff --git a/work-package/techniques/create-issue.md b/work-package/techniques/create-issue.md index 56d62f089..2163f6243 100644 --- a/work-package/techniques/create-issue.md +++ b/work-package/techniques/create-issue.md @@ -1,6 +1,6 @@ --- metadata: - version: 3.2.0 + version: 3.3.0 --- ## Capability @@ -51,7 +51,7 @@ URL of the verified or newly created issue. ### 2. Resolve Platform For Creation - Runs when no existing issue key was given. Set `{needs_issue_creation}` to true. -- If the platform is ambiguous (user did not select GitHub or Jira), obtain the user's platform selection and set `{issue_platform}` before creating. +- `{issue_platform}` carries the choice made at the `platform-selection` gate, which the activity presents before this technique runs. Use it as given; do not re-ask. ### 3. Create Github Issue diff --git a/workflow-design/activities/01-intake-and-context.yaml b/workflow-design/activities/01-intake-and-context.yaml index 5ef50ee11..b1b42e113 100644 --- a/workflow-design/activities/01-intake-and-context.yaml +++ b/workflow-design/activities/01-intake-and-context.yaml @@ -1,5 +1,5 @@ id: intake-and-context -version: 1.8.0 +version: 1.9.0 name: Intake and Context description: "Establish the operation type, mode, and target for the request, and internalize the schema system and YAML-format conventions that ground all drafting." required: true @@ -13,15 +13,6 @@ steps: - kind: technique id: intake-classification technique: intake-classification - - kind: technique - id: persist-structural-inventory - technique: - name: work-package::manage-artifacts::write-artifact - inputs: - bare_filename: structural-inventory.json - artifact_content: structural_inventory - target_dir: planning_folder_path - when: operation_type == "update" || operation_type == "review" - kind: checkpoint id: design-intent-batch condition: @@ -76,6 +67,15 @@ steps: operation_type: create operation_type_ambiguous: false intent_needs_confirmation: false + - kind: technique + id: persist-structural-inventory + technique: + name: work-package::manage-artifacts::write-artifact + inputs: + bare_filename: structural-inventory.json + artifact_content: structural_inventory + target_dir: planning_folder_path + when: operation_type == "update" || operation_type == "review" - kind: action id: announce-certain-intent when: intent_needs_confirmation == false && update_seeded_from_review != true && operation_type != 'review' From 72db28ae99348b9a7b9b595be7396baf5a1a48d2 Mon Sep 17 00:00:00 2001 From: Mike Clay Date: Mon, 17 Aug 2026 15:50:39 +0100 Subject: [PATCH 2/2] Give both issue-platform paths a producer, and let the posting gate decide Two defects adjacent to the step-order work, found while measuring it. Neither is an ordering problem on its own, and both sit on the paths the ordering fixes opened up. A run that supplies an existing issue key at the missing-issue gate binds no platform at all: the reference detector ran before the gate, on a request that carried no key, and the only other step that parses a supplied key belongs to the create path. All fourteen platform readers then see nothing. The detector now also runs after the gate, on the not-creating path, when the platform is still unbound; its input contract names the gate response as a source alongside the opening request. The deferred-assumptions summary is posted to Jira before the gate that asks whether to post it, and the flag that gate reads defaults false with its only writer setting false, so the Jira post has never run and the GitHub post ignores the decision entirely. The gate now precedes both posting steps and both read its answer, under a name that says what it governs rather than naming one platform. --- .../activities/01-start-work-package.yaml | 23 ++++++++++++++++++- .../activities/07-assumptions-review.yaml | 17 ++++++++------ .../techniques/issue-reference-detection.md | 4 ++-- work-package/workflow.yaml | 6 ++--- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/work-package/activities/01-start-work-package.yaml b/work-package/activities/01-start-work-package.yaml index 1cf4eb26d..3a73c7780 100644 --- a/work-package/activities/01-start-work-package.yaml +++ b/work-package/activities/01-start-work-package.yaml @@ -1,5 +1,5 @@ id: start-work-package -version: 3.17.0 +version: 3.18.0 name: Start Work Package description: Initialize the work package with issue, branch, draft PR, dedicated worktree, and planning folder. required: true @@ -234,6 +234,27 @@ steps: effect: setVariable: issue_platform: jira + - kind: technique + id: detect-provided-issue-reference + technique: issue-reference-detection + condition: + type: and + conditions: + - type: simple + variable: is_review_mode + operator: "!=" + value: true + - type: simple + variable: needs_issue_creation + operator: "!=" + value: true + - type: simple + variable: issue_skipped + operator: "!=" + value: true + - type: simple + variable: issue_platform + operator: notExists - kind: technique id: verify-jira-issue technique: diff --git a/work-package/activities/07-assumptions-review.yaml b/work-package/activities/07-assumptions-review.yaml index 457ef5657..c39470d6d 100644 --- a/work-package/activities/07-assumptions-review.yaml +++ b/work-package/activities/07-assumptions-review.yaml @@ -1,5 +1,5 @@ id: assumptions-review -version: 2.6.0 +version: 2.7.0 name: Assumptions Review description: Converge open assumptions via analyse-challenge, then batch residual stakeholder judgements. required: true @@ -83,10 +83,6 @@ steps: - kind: technique id: update-assumptions-log technique: review-assumptions::record - - kind: technique - id: post-summary-jira - technique: atlassian-operations::comment-jira-issue - when: stealth_mode != true && is_review_mode != true && issue_platform == 'jira' && has_deferred_assumptions == true && post_jira_comment != false - kind: checkpoint id: post-summary-review condition: @@ -115,19 +111,26 @@ steps: - id: post-summary label: Post summary to issue tracker description: Post the resolution summary + effect: + setVariable: + post_summary_approved: true - id: skip-posting label: Skip posting description: Do not post to issue tracker effect: setVariable: - post_jira_comment: false + post_summary_approved: false + - kind: technique + id: post-summary-jira + technique: atlassian-operations::comment-jira-issue + when: stealth_mode != true && is_review_mode != true && issue_platform == 'jira' && has_deferred_assumptions == true && post_summary_approved == true - kind: technique id: post-summary-github technique: name: github-cli-protocol::comment-issue inputs: repo_path: component_git_dir - when: stealth_mode != true && is_review_mode != true && issue_platform == 'github' && has_deferred_assumptions == true + when: stealth_mode != true && is_review_mode != true && issue_platform == 'github' && has_deferred_assumptions == true && post_summary_approved == true transitions: - to: codebase-comprehension condition: diff --git a/work-package/techniques/issue-reference-detection.md b/work-package/techniques/issue-reference-detection.md index 5c1fb3d78..47c43675d 100644 --- a/work-package/techniques/issue-reference-detection.md +++ b/work-package/techniques/issue-reference-detection.md @@ -1,6 +1,6 @@ --- metadata: - version: 1.0.0 + version: 1.1.0 --- ## Capability @@ -11,7 +11,7 @@ Whether the user supplied an issue reference, with platform and id when present ### issue_request -The user-supplied issue reference or request — the issue key, URL, or surrounding text the user provided when starting the work package. +The user-supplied issue reference or request — the issue key, URL, or surrounding text the user provided, whether in the request that started the work package or in the response to the `issue-verification` gate. ## Outputs diff --git a/work-package/workflow.yaml b/work-package/workflow.yaml index bbb3824f3..cf1ec1a97 100644 --- a/work-package/workflow.yaml +++ b/work-package/workflow.yaml @@ -1,6 +1,6 @@ $schema: ../../schemas/workflow.schema.json id: work-package -version: 3.43.0 +version: 3.44.0 title: Work Package Implementation Workflow description: Defines how to plan and implement ONE work package from inception to merged PR. A work package is a discrete unit of work such as a feature, bug-fix, enhancement, refactoring, or any other deliverable change. For multiple related work packages, use the work-packages workflow to create a roadmap first. Also supports review mode for auditing an existing PR or implementation end-to-end. author: m2ux @@ -301,9 +301,9 @@ variables: type: boolean description: Whether stakeholder discussion transcript was provided. defaultValue: false - - name: post_jira_comment + - name: post_summary_approved type: boolean - description: Whether to post assumptions comment to Jira. + description: Whether the deferred-assumptions summary is posted to the issue tracker, as decided at the post-summary-review gate. defaultValue: false - name: has_stakeholder_comment type: boolean