@dreb/coding-agent 2.35.0 → 2.36.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.
- package/docs/dashboard.md +106 -4
- package/package.json +1 -1
- package/skills/mach6-implement/SKILL.md +1 -1
- package/skills/mach6-issue/SKILL.md +7 -5
- package/skills/mach6-plan/SKILL.md +7 -5
- package/skills/mach6-publish/SKILL.md +4 -3
- package/skills/mach6-push/SKILL.md +4 -3
- package/skills/mach6-review/SKILL.md +10 -7
package/docs/dashboard.md
CHANGED
|
@@ -18,6 +18,10 @@ dreb dashboard [--port 5343]
|
|
|
18
18
|
|
|
19
19
|
# or directly
|
|
20
20
|
dreb-dashboard [--port 5343]
|
|
21
|
+
|
|
22
|
+
# remote over Tailscale with HTTPS (PWA + notifications on mobile)
|
|
23
|
+
dreb dashboard --remote --allow you@example.com \
|
|
24
|
+
--https --cert /path/cert.pem --key /path/key.pem
|
|
21
25
|
```
|
|
22
26
|
|
|
23
27
|
If `@dreb/dashboard` is not installed, `dreb dashboard` fails loudly with
|
|
@@ -94,10 +98,108 @@ When the agent is idle, send is a plain prompt.
|
|
|
94
98
|
|
|
95
99
|
## Notifications
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
Needs-attention notifications are delivered through a **service worker**
|
|
102
|
+
(`registration.showNotification()`), not the page-context `Notification`
|
|
103
|
+
constructor — the constructor was removed from Android Chrome (throws
|
|
104
|
+
`Illegal constructor`) and is absent from iOS Safari entirely. The service
|
|
105
|
+
worker handles `notificationclick`: it focuses an open dashboard client and
|
|
106
|
+
navigates to the session that needs attention, or opens one. All browsers still
|
|
107
|
+
get a `◆` tab-title badge fallback when the tab is hidden.
|
|
108
|
+
|
|
109
|
+
The settings tab exposes a browser-local permission toggle. Gating is unchanged:
|
|
110
|
+
notifications fire only when permission is granted **and** the tab is hidden.
|
|
111
|
+
|
|
112
|
+
**iOS:** notifications exist only in the **installed PWA** (Add to Home Screen,
|
|
113
|
+
iOS 16.4+) — a plain Safari tab has no Notification API regardless of HTTPS.
|
|
114
|
+
The settings copy explains the install prerequisite when it detects an
|
|
115
|
+
un-installed iOS Safari session. (Note: iOS 17.4+ in the EU dropped standalone
|
|
116
|
+
PWA support — installed PWAs open as Safari tabs and push is unavailable there.)
|
|
117
|
+
|
|
118
|
+
## Installable PWA + secure context
|
|
119
|
+
|
|
120
|
+
The dashboard ships a web app manifest (`display: standalone`, theme/background
|
|
121
|
+
colors, icon set), an apple-touch-icon, and service worker registration, so it
|
|
122
|
+
is **installable to the home screen** on Android Chrome and iOS Safari 16.4+ —
|
|
123
|
+
no URL bar, app-like presence, and (on iOS) the only context where
|
|
124
|
+
notifications work.
|
|
125
|
+
|
|
126
|
+
Service workers and the Notifications API require a **secure context**: HTTPS,
|
|
127
|
+
or `localhost`/`127.0.0.1`. Local mode (`http://127.0.0.1:<port>`) already
|
|
128
|
+
qualifies — install and notifications work with no TLS setup. **Remote mode
|
|
129
|
+
over the tailnet is plain HTTP**, which is not a secure context, so the service
|
|
130
|
+
worker will not register and notifications are unavailable until you enable
|
|
131
|
+
HTTPS. See [Native TLS](#native-tls-remote-https) below.
|
|
132
|
+
|
|
133
|
+
## Native TLS (remote HTTPS)
|
|
134
|
+
|
|
135
|
+
For PWA install + notifications from a phone over the tailnet, the dashboard
|
|
136
|
+
terminates TLS itself using certificate files from
|
|
137
|
+
[`tailscale cert`](https://tailscale.com/docs/how-to/set-up-https-certificates)
|
|
138
|
+
(no reverse proxy, **no auth-model change**):
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
dreb dashboard --remote --allow you@example.com \
|
|
142
|
+
--https --cert /etc/dreb/cert.pem --key /etc/dreb/key.pem
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Because the dashboard terminates TLS directly, `req.socket.remoteAddress` is
|
|
146
|
+
still the phone's real tailnet IP — Tailscale identity resolution, the
|
|
147
|
+
allowlist, and pairing all keep working exactly as in plain-HTTP remote mode.
|
|
148
|
+
There is no header trust, no proxy, no weakening of the auth model.
|
|
149
|
+
|
|
150
|
+
### One-time cert setup with `tailscale cert`
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Enable HTTPS certificates in the Tailscale admin console (DNS → HTTPS) first.
|
|
154
|
+
sudo tailscale cert \
|
|
155
|
+
--cert-file=/etc/dreb/cert.pem \
|
|
156
|
+
--key-file=/etc/dreb/key.pem \
|
|
157
|
+
hostname.tailXXXX.ts.net
|
|
158
|
+
sudo chown dreb:dreb /etc/dreb/cert.pem /etc/dreb/key.pem
|
|
159
|
+
sudo chmod 644 /etc/dreb/cert.pem && sudo chmod 600 /etc/dreb/key.pem
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
Renewal is **manual** — `tailscale cert` certs are Let's Encrypt, 90-day
|
|
163
|
+
lifetime. The dashboard hot-reloads the cert files on change
|
|
164
|
+
(`setSecureContext`), so a renewal that rewrites the files is picked up with
|
|
165
|
+
zero downtime. A daily systemd timer with `--min-validity=720h` (only renews
|
|
166
|
+
when within 30 days of expiry) is the recommended cadence:
|
|
167
|
+
|
|
168
|
+
```ini
|
|
169
|
+
# /etc/systemd/system/dreb-cert.service
|
|
170
|
+
[Service]
|
|
171
|
+
Type=oneshot
|
|
172
|
+
ExecStart=/usr/bin/tailscale cert --cert-file=/etc/dreb/cert.pem \
|
|
173
|
+
--key-file=/etc/dreb/key.pem --min-validity=720h hostname.tailXXXX.ts.net
|
|
174
|
+
ExecStartPost=/bin/chown dreb:dreb /etc/dreb/cert.pem /etc/dreb/key.pem
|
|
175
|
+
|
|
176
|
+
# /etc/systemd/system/dreb-cert.timer
|
|
177
|
+
[Timer]
|
|
178
|
+
OnCalendar=daily
|
|
179
|
+
RandomizedDelaySec=3600
|
|
180
|
+
[Install]
|
|
181
|
+
WantedBy=timers.target
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Then open `https://hostname.tailXXXX.ts.net:<port>` on the phone.
|
|
185
|
+
|
|
186
|
+
> **Hostname note (important):** the `tailscale cert` certificate is issued
|
|
187
|
+
> for your machine's tailnet name (`hostname.tailXXXX.ts.net`) **only** — not
|
|
188
|
+
> `127.0.0.1`, not a raw tailnet IP. When `--https` is enabled the server
|
|
189
|
+
> speaks TLS on every address it binds, so on the host itself:
|
|
190
|
+
>
|
|
191
|
+
> - `https://hostname.tailXXXX.ts.net:<port>` — works, cert validates (resolves
|
|
192
|
+
> to your tailnet IP). But it's a *remote* request: you go through the full
|
|
193
|
+
> Tailscale allowlist + pairing flow, not instant loopback local mode.
|
|
194
|
+
> - `https://127.0.0.1:<port>` — the server answers, but the browser rejects
|
|
195
|
+
> the cert (no `127.0.0.1` SAN) with a scary warning.
|
|
196
|
+
> - `http://127.0.0.1:<port>` — **dead**: the server only speaks TLS now.
|
|
197
|
+
>
|
|
198
|
+
> If you want the host dashboard tab to stay instant (loopback local mode, no
|
|
199
|
+
> pairing, no warning), run a **second** dashboard process without `--https` on
|
|
200
|
+
> a different port for local-only use, and keep the TLS-enabled one for remote.
|
|
201
|
+
> `--https` is primarily for the `--remote` path; pure-local setups don't need
|
|
202
|
+
> it (`127.0.0.1` is already a secure context).
|
|
101
203
|
|
|
102
204
|
## Subagent observability
|
|
103
205
|
|
package/package.json
CHANGED
|
@@ -18,7 +18,7 @@ This skill has two modes:
|
|
|
18
18
|
2. **No `#N` in comment bodies** — Use "finding 3", "item 3" etc. instead.
|
|
19
19
|
3. **Safe git** — Never use `git add -A` or `git add .`. Stage files by name. Never stage secrets.
|
|
20
20
|
4. **Task tracking** — Use the `tasks_update` tool to show progress.
|
|
21
|
-
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
21
|
+
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
22
22
|
|
|
23
23
|
## Step 1: Parse input
|
|
24
24
|
|
|
@@ -16,7 +16,7 @@ argument-hint: "[issue-number | description]"
|
|
|
16
16
|
4. **Safe git** — Never use `git add -A` or `git add .`. Stage files by name. Never stage secrets (.env, credentials, tokens, keys).
|
|
17
17
|
5. **Task tracking** — Use the `tasks_update` tool to show progress through multi-step commands.
|
|
18
18
|
6. **Project conventions** — Check for CLAUDE.md, AGENTS.md, .dreb/CONTEXT.md, and CONTRIBUTING.md before planning or implementing.
|
|
19
|
-
7. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
19
|
+
7. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
20
20
|
|
|
21
21
|
## Determine Mode
|
|
22
22
|
|
|
@@ -76,7 +76,8 @@ Present to the user:
|
|
|
76
76
|
Post as an issue comment:
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
|
|
79
|
+
GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"
|
|
80
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
80
81
|
<!-- mach6-assessment -->
|
|
81
82
|
## Issue Assessment
|
|
82
83
|
|
|
@@ -85,7 +86,7 @@ cat > /tmp/gh-comment.md << 'MACH6_EOF'
|
|
|
85
86
|
---
|
|
86
87
|
*Automated assessment by mach6*
|
|
87
88
|
MACH6_EOF
|
|
88
|
-
gh issue comment <number> --body-file
|
|
89
|
+
gh issue comment <number> --body-file "$GH_BODY"
|
|
89
90
|
```
|
|
90
91
|
|
|
91
92
|
Update task: post → completed.
|
|
@@ -127,10 +128,11 @@ Present the draft to the user for approval.
|
|
|
127
128
|
### Step 3: Create the issue
|
|
128
129
|
|
|
129
130
|
```bash
|
|
130
|
-
|
|
131
|
+
GH_BODY="$(mktemp /tmp/gh-body.XXXXXX.md)"
|
|
132
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
131
133
|
<body>
|
|
132
134
|
MACH6_EOF
|
|
133
|
-
gh issue create --title "<title>" --body-file
|
|
135
|
+
gh issue create --title "<title>" --body-file "$GH_BODY" [--label "<labels>"]
|
|
134
136
|
```
|
|
135
137
|
|
|
136
138
|
Report the issue number and URL. Suggest next step: `/skill:mach6-plan <number>`
|
|
@@ -18,7 +18,7 @@ This command is strictly for **planning**. Do NOT implement any code changes —
|
|
|
18
18
|
4. **Safe git** — Never use `git add -A` or `git add .`. Stage files by name. Never stage secrets.
|
|
19
19
|
5. **Task tracking** — Use the `tasks_update` tool to show progress through multi-step commands.
|
|
20
20
|
6. **Project conventions** — Check for CLAUDE.md, AGENTS.md, .dreb/CONTEXT.md, and CONTRIBUTING.md before planning.
|
|
21
|
-
7. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
21
|
+
7. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
22
22
|
|
|
23
23
|
## Step 1: Set up task tracking
|
|
24
24
|
|
|
@@ -98,14 +98,15 @@ git commit --allow-empty -m "chore: open PR for issue <N>"
|
|
|
98
98
|
git push -u origin feature/issue-<N>-<slug>
|
|
99
99
|
|
|
100
100
|
# Open draft PR
|
|
101
|
-
|
|
101
|
+
GH_BODY="$(mktemp /tmp/gh-body.XXXXXX.md)"
|
|
102
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
102
103
|
Closes #<N>
|
|
103
104
|
|
|
104
105
|
<brief description>
|
|
105
106
|
|
|
106
107
|
Implementation plan posted as a comment below.
|
|
107
108
|
MACH6_EOF
|
|
108
|
-
gh pr create --draft --title "<title>" --body-file
|
|
109
|
+
gh pr create --draft --title "<title>" --body-file "$GH_BODY"
|
|
109
110
|
```
|
|
110
111
|
|
|
111
112
|
Update task: branch → completed, post → in_progress.
|
|
@@ -113,7 +114,8 @@ Update task: branch → completed, post → in_progress.
|
|
|
113
114
|
## Step 7: Post plan to PR
|
|
114
115
|
|
|
115
116
|
```bash
|
|
116
|
-
|
|
117
|
+
GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"
|
|
118
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
117
119
|
<!-- mach6-plan -->
|
|
118
120
|
## Implementation Plan
|
|
119
121
|
|
|
@@ -122,7 +124,7 @@ cat > /tmp/gh-comment.md << 'MACH6_EOF'
|
|
|
122
124
|
---
|
|
123
125
|
*Plan created by mach6*
|
|
124
126
|
MACH6_EOF
|
|
125
|
-
gh pr comment <pr-number> --body-file
|
|
127
|
+
gh pr comment <pr-number> --body-file "$GH_BODY"
|
|
126
128
|
```
|
|
127
129
|
|
|
128
130
|
Update task: post → completed.
|
|
@@ -14,7 +14,7 @@ argument-hint: "<pr-number>"
|
|
|
14
14
|
2. **No `#N` in comment bodies** — Use "finding 3", "item 3" etc. instead.
|
|
15
15
|
3. **Safe git** — Never use `git add -A` or `git add .`. Stage files by name. Never stage secrets.
|
|
16
16
|
4. **Task tracking** — Use the `tasks_update` tool to show progress.
|
|
17
|
-
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
17
|
+
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
18
18
|
|
|
19
19
|
## Step 1: Set up task tracking
|
|
20
20
|
|
|
@@ -181,10 +181,11 @@ git push --tags
|
|
|
181
181
|
|
|
182
182
|
3. Present draft to user for approval, then create:
|
|
183
183
|
```bash
|
|
184
|
-
|
|
184
|
+
GH_NOTES="$(mktemp /tmp/gh-release-notes.XXXXXX.md)"
|
|
185
|
+
cat > "$GH_NOTES" << 'MACH6_EOF'
|
|
185
186
|
<release-notes>
|
|
186
187
|
MACH6_EOF
|
|
187
|
-
gh release create v<version> --title "v<version>" --notes-file
|
|
188
|
+
gh release create v<version> --title "v<version>" --notes-file "$GH_NOTES"
|
|
188
189
|
```
|
|
189
190
|
|
|
190
191
|
Update task: release → completed.
|
|
@@ -15,7 +15,7 @@ argument-hint: "[commit message]"
|
|
|
15
15
|
3. **No `#N` in comment bodies** — Use "finding 3", "item 3", "stage 2" etc. instead.
|
|
16
16
|
4. **Safe git** — Never use `git add -A` or `git add .`. Stage files by name. Never stage secrets (.env, credentials, tokens, keys).
|
|
17
17
|
5. **Task tracking** — Use the `tasks_update` tool to show progress.
|
|
18
|
-
6. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
18
|
+
6. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
19
19
|
|
|
20
20
|
## Step 1: Set up task tracking
|
|
21
21
|
|
|
@@ -81,7 +81,8 @@ If session context points to an issue but a PR also exists on the current branch
|
|
|
81
81
|
|
|
82
82
|
Post a progress comment:
|
|
83
83
|
```bash
|
|
84
|
-
|
|
84
|
+
GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"
|
|
85
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
85
86
|
<!-- mach6-progress -->
|
|
86
87
|
## Progress Update
|
|
87
88
|
|
|
@@ -92,7 +93,7 @@ cat > /tmp/gh-comment.md << 'MACH6_EOF'
|
|
|
92
93
|
---
|
|
93
94
|
*Progress tracked by mach6*
|
|
94
95
|
MACH6_EOF
|
|
95
|
-
gh pr comment <number> --body-file
|
|
96
|
+
gh pr comment <number> --body-file "$GH_BODY"
|
|
96
97
|
```
|
|
97
98
|
|
|
98
99
|
Update task: comment → completed.
|
|
@@ -14,7 +14,7 @@ argument-hint: "<pr-number> [code|errors|tests|completeness|simplify]"
|
|
|
14
14
|
2. **HTML markers** — Use `<!-- mach6-review -->` and `<!-- mach6-assessment -->` as the first line of comment bodies.
|
|
15
15
|
3. **No `#N` in comment bodies** — Use "finding 3", "item 3", "stage 2" etc. instead.
|
|
16
16
|
4. **Task tracking** — Use the `tasks_update` tool to show progress.
|
|
17
|
-
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks.
|
|
17
|
+
5. **Non-interactive `gh`** — Set `GH_PAGER=cat` and `GH_EDITOR=cat` before all `gh` commands to prevent interactive prompts from hanging the agent. Use `--body-file` instead of inline `--body` for all `gh pr comment`, `gh pr create`, and `gh issue create` calls to avoid shell interpretation of backticks. Write each body to a **unique per-invocation temp file** via `mktemp` (e.g. `GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"`) — never a fixed path like `/tmp/gh-comment.md`, which concurrent mach6 sessions on the same machine would clobber, cross-posting one session's body to another's PR/issue.
|
|
18
18
|
|
|
19
19
|
**Important: Do NOT fix any issues in this session. Fixes happen via `/skill:mach6-implement`.**
|
|
20
20
|
|
|
@@ -96,7 +96,8 @@ Update task: review → completed, post-review → in_progress.
|
|
|
96
96
|
Compile all findings from all agents into a single structured comment:
|
|
97
97
|
|
|
98
98
|
```bash
|
|
99
|
-
|
|
99
|
+
GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"
|
|
100
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
100
101
|
<!-- mach6-review -->
|
|
101
102
|
## Code Review
|
|
102
103
|
|
|
@@ -117,7 +118,7 @@ cat > /tmp/gh-comment.md << 'MACH6_EOF'
|
|
|
117
118
|
---
|
|
118
119
|
*Reviewed by mach6*
|
|
119
120
|
MACH6_EOF
|
|
120
|
-
gh pr comment <pr-number> --body-file
|
|
121
|
+
gh pr comment <pr-number> --body-file "$GH_BODY"
|
|
121
122
|
```
|
|
122
123
|
|
|
123
124
|
Save the review comment URL:
|
|
@@ -156,7 +157,8 @@ Update task: assess → completed, post-assess → in_progress.
|
|
|
156
157
|
## Step 7: Post assessment
|
|
157
158
|
|
|
158
159
|
```bash
|
|
159
|
-
|
|
160
|
+
GH_BODY="$(mktemp /tmp/gh-comment.XXXXXX.md)"
|
|
161
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
160
162
|
<!-- mach6-assessment -->
|
|
161
163
|
## Review Assessment
|
|
162
164
|
|
|
@@ -175,7 +177,7 @@ cat > /tmp/gh-comment.md << 'MACH6_EOF'
|
|
|
175
177
|
---
|
|
176
178
|
*Assessment by mach6*
|
|
177
179
|
MACH6_EOF
|
|
178
|
-
gh pr comment <pr-number> --body-file
|
|
180
|
+
gh pr comment <pr-number> --body-file "$GH_BODY"
|
|
179
181
|
```
|
|
180
182
|
|
|
181
183
|
Update task: post-assess → completed, summary → in_progress.
|
|
@@ -189,10 +191,11 @@ Present to the user:
|
|
|
189
191
|
|
|
190
192
|
If any findings were classified as **deferred**, ask the user if they want to create issues for them:
|
|
191
193
|
```bash
|
|
192
|
-
|
|
194
|
+
GH_BODY="$(mktemp /tmp/gh-body.XXXXXX.md)"
|
|
195
|
+
cat > "$GH_BODY" << 'MACH6_EOF'
|
|
193
196
|
<body referencing PR and finding>
|
|
194
197
|
MACH6_EOF
|
|
195
|
-
gh issue create --title "<title>" --body-file
|
|
198
|
+
gh issue create --title "<title>" --body-file "$GH_BODY"
|
|
196
199
|
```
|
|
197
200
|
|
|
198
201
|
Update task: summary → completed.
|