@orgloop/module-engineering 0.1.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/LICENSE.md +21 -0
- package/orgloop-module.yaml +88 -0
- package/package.json +23 -0
- package/sops/ci-failure.md +19 -0
- package/sops/linear-ticket.md +18 -0
- package/sops/pr-review.md +19 -0
- package/templates/routes.yaml +90 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OrgLoop contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
apiVersion: orgloop/v1alpha1
|
|
2
|
+
kind: Module
|
|
3
|
+
metadata:
|
|
4
|
+
name: engineering
|
|
5
|
+
description: "Engineering organization workflow — PR review, CI failure triage, Linear tickets, Claude Code supervision"
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
|
|
8
|
+
requires:
|
|
9
|
+
connectors:
|
|
10
|
+
- type: source
|
|
11
|
+
id: github
|
|
12
|
+
connector: "@orgloop/connector-github"
|
|
13
|
+
required: true
|
|
14
|
+
|
|
15
|
+
- type: source
|
|
16
|
+
id: linear
|
|
17
|
+
connector: "@orgloop/connector-linear"
|
|
18
|
+
required: false
|
|
19
|
+
fallback: skip
|
|
20
|
+
|
|
21
|
+
- type: source
|
|
22
|
+
id: claude-code
|
|
23
|
+
connector: "@orgloop/connector-claude-code"
|
|
24
|
+
required: false
|
|
25
|
+
fallback: skip
|
|
26
|
+
|
|
27
|
+
- type: actor
|
|
28
|
+
id: agent
|
|
29
|
+
connector: "@orgloop/connector-openclaw"
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
services:
|
|
33
|
+
- name: openclaw
|
|
34
|
+
detect:
|
|
35
|
+
http: "http://127.0.0.1:18789/health"
|
|
36
|
+
install:
|
|
37
|
+
brew: "openclaw"
|
|
38
|
+
docs: "https://docs.openclaw.dev/install"
|
|
39
|
+
provides_credentials:
|
|
40
|
+
- OPENCLAW_WEBHOOK_TOKEN
|
|
41
|
+
|
|
42
|
+
credentials:
|
|
43
|
+
- name: GITHUB_TOKEN
|
|
44
|
+
description: "GitHub personal access token (repo scope)"
|
|
45
|
+
required: true
|
|
46
|
+
create_url: "https://github.com/settings/tokens/new?scopes=repo,read:org"
|
|
47
|
+
|
|
48
|
+
- name: LINEAR_API_KEY
|
|
49
|
+
description: "Linear API key"
|
|
50
|
+
required: false
|
|
51
|
+
|
|
52
|
+
- name: OPENCLAW_WEBHOOK_TOKEN
|
|
53
|
+
description: "OpenClaw webhook authentication token"
|
|
54
|
+
required: true
|
|
55
|
+
|
|
56
|
+
- name: GITHUB_WATCHED
|
|
57
|
+
description: "Comma-separated GitHub usernames to watch (your user + your bot)"
|
|
58
|
+
required: true
|
|
59
|
+
|
|
60
|
+
parameters:
|
|
61
|
+
- name: github_source
|
|
62
|
+
description: "Name of your GitHub source connector"
|
|
63
|
+
type: string
|
|
64
|
+
required: true
|
|
65
|
+
default: github
|
|
66
|
+
|
|
67
|
+
- name: linear_source
|
|
68
|
+
description: "Name of your Linear source connector"
|
|
69
|
+
type: string
|
|
70
|
+
required: false
|
|
71
|
+
default: linear
|
|
72
|
+
|
|
73
|
+
- name: claude_code_source
|
|
74
|
+
description: "Name of your Claude Code source connector"
|
|
75
|
+
type: string
|
|
76
|
+
required: false
|
|
77
|
+
default: claude-code
|
|
78
|
+
|
|
79
|
+
- name: agent_actor
|
|
80
|
+
description: "Name of your agent actor"
|
|
81
|
+
type: string
|
|
82
|
+
required: true
|
|
83
|
+
default: openclaw-engineering-agent
|
|
84
|
+
|
|
85
|
+
provides:
|
|
86
|
+
routes: 5
|
|
87
|
+
transforms: 3
|
|
88
|
+
sops: 3
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@orgloop/module-engineering",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Engineering organization workflow module — PR review, CI failure, Linear triage, Claude Code supervision",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "orgloop-module.yaml",
|
|
7
|
+
"files": [
|
|
8
|
+
"orgloop-module.yaml",
|
|
9
|
+
"templates",
|
|
10
|
+
"sops"
|
|
11
|
+
],
|
|
12
|
+
"keywords": [
|
|
13
|
+
"orgloop",
|
|
14
|
+
"orgloop-module",
|
|
15
|
+
"engineering",
|
|
16
|
+
"code-review",
|
|
17
|
+
"ci-failure"
|
|
18
|
+
],
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
},
|
|
22
|
+
"license": "MIT"
|
|
23
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CI Failure
|
|
2
|
+
|
|
3
|
+
A CI workflow run has failed. Diagnose and fix it.
|
|
4
|
+
|
|
5
|
+
## Instructions
|
|
6
|
+
|
|
7
|
+
1. Read the workflow run details — which job failed, which step
|
|
8
|
+
2. Pull the failing branch and reproduce locally if possible
|
|
9
|
+
3. **Test failures** -> read the failing test, understand what it expects, fix the code or test
|
|
10
|
+
4. **Build failures** -> check for type errors, missing dependencies, syntax issues
|
|
11
|
+
5. **Lint failures** -> run the linter locally, fix issues
|
|
12
|
+
6. Push the fix and verify CI passes
|
|
13
|
+
|
|
14
|
+
## Guidelines
|
|
15
|
+
|
|
16
|
+
- Fix the root cause, not the symptom
|
|
17
|
+
- If the CI failure is in code you didn't write, investigate but flag it for review
|
|
18
|
+
- Don't skip or disable tests to make CI pass
|
|
19
|
+
- If the failure is flaky (intermittent), document it and re-run once before investigating
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Linear Ticket Update
|
|
2
|
+
|
|
3
|
+
A Linear ticket has changed state. Review and take appropriate action.
|
|
4
|
+
|
|
5
|
+
## Instructions
|
|
6
|
+
|
|
7
|
+
1. Read the ticket details — title, description, current state, assignee, comments
|
|
8
|
+
2. **Ticket moved to "In Progress"** -> pick it up, start working
|
|
9
|
+
3. **Ticket moved to "In Review"** -> check if there's a PR associated, review it
|
|
10
|
+
4. **New comment on your ticket** -> read and respond or act on it
|
|
11
|
+
5. **Ticket created and assigned to you** -> acknowledge, plan your approach, start working
|
|
12
|
+
|
|
13
|
+
## Guidelines
|
|
14
|
+
|
|
15
|
+
- Keep the ticket updated with your progress — add comments as you work
|
|
16
|
+
- If you're blocked, move the ticket to "Blocked" and explain why in a comment
|
|
17
|
+
- Link PRs to tickets so the workflow is traceable
|
|
18
|
+
- If a ticket is unclear, ask for clarification in a comment before starting work
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# PR Review Received
|
|
2
|
+
|
|
3
|
+
A reviewer submitted feedback on a pull request.
|
|
4
|
+
|
|
5
|
+
## Instructions
|
|
6
|
+
|
|
7
|
+
1. Read every review comment carefully — understand the full context before responding
|
|
8
|
+
2. **Code change requests** -> make the fix, push the commit
|
|
9
|
+
3. **Questions** -> respond with a clear explanation in the PR thread
|
|
10
|
+
4. **Disagreements** -> explain your reasoning. If the reviewer has a point, make the change
|
|
11
|
+
5. After addressing all comments, re-request review from the same reviewer
|
|
12
|
+
6. If CI fails after your changes, fix it before re-requesting review
|
|
13
|
+
|
|
14
|
+
## Guidelines
|
|
15
|
+
|
|
16
|
+
- Don't batch responses — address each comment individually
|
|
17
|
+
- If a comment requires a code change, make it. Don't just acknowledge it
|
|
18
|
+
- Keep PR responses concise and technical
|
|
19
|
+
- If a review comment reveals a deeper architectural issue, flag it but fix what was asked
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
apiVersion: orgloop/v1alpha1
|
|
2
|
+
kind: RouteGroup
|
|
3
|
+
|
|
4
|
+
routes:
|
|
5
|
+
- name: "{{ module.name }}-pr-review"
|
|
6
|
+
description: "PR review submitted — address feedback"
|
|
7
|
+
when:
|
|
8
|
+
source: "{{ params.github_source }}"
|
|
9
|
+
events:
|
|
10
|
+
- resource.changed
|
|
11
|
+
filter:
|
|
12
|
+
provenance.platform_event: pull_request.review_submitted
|
|
13
|
+
transforms:
|
|
14
|
+
- ref: my-notifications
|
|
15
|
+
- ref: dedup
|
|
16
|
+
then:
|
|
17
|
+
actor: "{{ params.agent_actor }}"
|
|
18
|
+
config:
|
|
19
|
+
session_key: "orgloop:{{ params.github_source }}:pr-review"
|
|
20
|
+
wake_mode: now
|
|
21
|
+
deliver: true
|
|
22
|
+
with:
|
|
23
|
+
prompt_file: "{{ module.path }}/sops/pr-review.md"
|
|
24
|
+
|
|
25
|
+
- name: "{{ module.name }}-pr-comment"
|
|
26
|
+
description: "PR review comment — respond to inline feedback"
|
|
27
|
+
when:
|
|
28
|
+
source: "{{ params.github_source }}"
|
|
29
|
+
events:
|
|
30
|
+
- resource.changed
|
|
31
|
+
filter:
|
|
32
|
+
provenance.platform_event: pull_request_review_comment
|
|
33
|
+
transforms:
|
|
34
|
+
- ref: my-notifications
|
|
35
|
+
- ref: dedup
|
|
36
|
+
then:
|
|
37
|
+
actor: "{{ params.agent_actor }}"
|
|
38
|
+
config:
|
|
39
|
+
session_key: "orgloop:{{ params.github_source }}:pr-comment"
|
|
40
|
+
wake_mode: now
|
|
41
|
+
deliver: true
|
|
42
|
+
with:
|
|
43
|
+
prompt_file: "{{ module.path }}/sops/pr-review.md"
|
|
44
|
+
|
|
45
|
+
- name: "{{ module.name }}-ci-failure"
|
|
46
|
+
description: "CI failure — diagnose and fix"
|
|
47
|
+
when:
|
|
48
|
+
source: "{{ params.github_source }}"
|
|
49
|
+
events:
|
|
50
|
+
- resource.changed
|
|
51
|
+
filter:
|
|
52
|
+
provenance.platform_event: workflow_run.completed
|
|
53
|
+
transforms:
|
|
54
|
+
- ref: my-notifications
|
|
55
|
+
then:
|
|
56
|
+
actor: "{{ params.agent_actor }}"
|
|
57
|
+
config:
|
|
58
|
+
session_key: "orgloop:{{ params.github_source }}:ci-failure"
|
|
59
|
+
wake_mode: now
|
|
60
|
+
with:
|
|
61
|
+
prompt_file: "{{ module.path }}/sops/ci-failure.md"
|
|
62
|
+
|
|
63
|
+
- name: "{{ module.name }}-linear-triage"
|
|
64
|
+
description: "Linear issue updates — triage and act"
|
|
65
|
+
when:
|
|
66
|
+
source: "{{ params.linear_source }}"
|
|
67
|
+
events:
|
|
68
|
+
- resource.changed
|
|
69
|
+
transforms:
|
|
70
|
+
- ref: dedup
|
|
71
|
+
then:
|
|
72
|
+
actor: "{{ params.agent_actor }}"
|
|
73
|
+
config:
|
|
74
|
+
session_key: "orgloop:{{ params.linear_source }}:activity"
|
|
75
|
+
wake_mode: now
|
|
76
|
+
deliver: true
|
|
77
|
+
with:
|
|
78
|
+
prompt_file: "{{ module.path }}/sops/linear-ticket.md"
|
|
79
|
+
|
|
80
|
+
- name: "{{ module.name }}-claude-code-supervisor"
|
|
81
|
+
description: "Claude Code session ended — review and decide next action"
|
|
82
|
+
when:
|
|
83
|
+
source: "{{ params.claude_code_source }}"
|
|
84
|
+
events:
|
|
85
|
+
- actor.stopped
|
|
86
|
+
then:
|
|
87
|
+
actor: "{{ params.agent_actor }}"
|
|
88
|
+
config:
|
|
89
|
+
session_key: "orgloop:{{ params.claude_code_source }}:supervisor"
|
|
90
|
+
wake_mode: now
|