baxian 1.2.21 → 1.2.23
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/dist/agent/manager.d.ts +8 -0
- package/dist/agent/manager.d.ts.map +1 -1
- package/dist/agent/manager.js +311 -27
- package/dist/agent/manager.js.map +1 -1
- package/dist/agent/phase-signal-watcher.d.ts +6 -0
- package/dist/agent/phase-signal-watcher.d.ts.map +1 -1
- package/dist/agent/phase-signal-watcher.js +62 -0
- package/dist/agent/phase-signal-watcher.js.map +1 -1
- package/dist/agent/phase-signal.d.ts +4 -1
- package/dist/agent/phase-signal.d.ts.map +1 -1
- package/dist/agent/phase-signal.js +2 -1
- package/dist/agent/phase-signal.js.map +1 -1
- package/dist/agent/prompt.d.ts +2 -1
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +152 -278
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/tmux.d.ts +1 -0
- package/dist/agent/tmux.d.ts.map +1 -1
- package/dist/agent/tmux.js +42 -10
- package/dist/agent/tmux.js.map +1 -1
- package/dist/api/projects.js +9 -2
- package/dist/api/projects.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/constants.js +5 -5
- package/dist/shared/constants.js.map +1 -1
- package/dist/skill/registry.d.ts +2 -0
- package/dist/skill/registry.d.ts.map +1 -1
- package/dist/skill/registry.js +16 -0
- package/dist/skill/registry.js.map +1 -1
- package/dist/skills/baxian-greeting/SKILL.md +15 -0
- package/dist/skills/baxian-greeting/agents/openai.yaml +2 -0
- package/dist/skills/baxian-pr-feedback/SKILL.md +20 -3
- package/dist/skills/baxian-pr-recheck/SKILL.md +11 -11
- package/dist/skills/baxian-pr-review/SKILL.md +11 -11
- package/dist/skills/baxian-server-feedback/SKILL.md +38 -0
- package/dist/skills/baxian-server-feedback/agents/openai.yaml +2 -0
- package/dist/skills/baxian-server-review/SKILL.md +55 -0
- package/dist/skills/baxian-server-review/agents/openai.yaml +2 -0
- package/dist/skills/baxian-signals/SKILL.md +11 -5
- package/dist/skills/baxian-task-check/SKILL.md +35 -20
- package/dist/web/assets/index-B3nBJsTG.js +4 -0
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/index-C9dvXS8C.js +0 -4
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: baxian-greeting
|
|
3
|
+
description: One-time startup capability handshake. baxian force-loads this before assigning any task; emit the greeting signal per the baxian-signals skill to prove you can load skills and signal back through your pane.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
baxian force-loads this skill once, right after your REPL is ready and before any task is assigned. It verifies you can load a skill, reach the signal protocol, and signal baxian back through your pane.
|
|
8
|
+
|
|
9
|
+
Do exactly one thing: emit the `greeting` signal, following the **baxian-signals** skill for the wire format and emit rules.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
[bx:greeting:<token>]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Substitute `<token>` with the value on the `token:` line of this message and emit the filled signal alone on its own line. Output nothing else.
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: baxian-pr-feedback
|
|
3
|
-
description:
|
|
3
|
+
description: Dev processes PR review feedback (fix phase) and the pre-merge feedback pass (post-approve) — fetch, judge, act, signal back.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields. Work in `worktree:`; the PR is in `pr:`. Communicate via the GitHub PR; stay in scope (out-of-scope → new Issue). Route on `phase:`: `fix` → §Fix, `post-approve` → §Post-Approve.
|
|
8
|
+
|
|
7
9
|
## Fetch Feedback
|
|
8
10
|
|
|
11
|
+
Substitute `N` with your `pr:` field:
|
|
12
|
+
|
|
9
13
|
```bash
|
|
10
14
|
gh api --paginate repos/OWNER/REPO/pulls/N/reviews
|
|
11
15
|
gh api --paginate repos/OWNER/REPO/pulls/N/comments
|
|
@@ -25,6 +29,19 @@ For each actionable item:
|
|
|
25
29
|
|
|
26
30
|
Reply to every item, including duplicates (reference primary). Thread inline comments.
|
|
27
31
|
|
|
28
|
-
## Fix
|
|
32
|
+
## Fix
|
|
33
|
+
|
|
34
|
+
QA requested changes on the PR in `pr:` (review round `round:`). Read all feedback (§Fetch Feedback), then handle every finding (§Decide and Act). If you change code, commit then push to your `branch:`: `git push origin HEAD:<branch>`. Emit your `signal:` (`pr-fixed`) with `token:` when done — even without a code push; baxian verifies work exists before routing to QA.
|
|
35
|
+
|
|
36
|
+
## Post-Approve
|
|
37
|
+
|
|
38
|
+
QA already approved. Before merge, re-process PR feedback idempotently — handle every item per §Fetch Feedback and §Decide and Act, plus:
|
|
39
|
+
|
|
40
|
+
- Idempotency: compute `T_self` = your latest reply timestamp per source. Respond to EVERY non-self comment with `created_at` > `T_self`, applied per review thread AND across the issue-comment stream.
|
|
41
|
+
- If you change code: commit + push (baxian routes to QA for recheck) and STOP — do NOT emit `pr-merge-ready` when you pushed code.
|
|
42
|
+
- If no code change is needed: re-fetch all sources before signaling. The server suppresses redispatches while you run, so new comments only reach you via this re-fetch. If unhandled items remain, process and re-fetch again. Emit your `signal:` (`pr-merge-ready`) with `token:` only when clean.
|
|
43
|
+
- Do not merge the PR yourself from this phase.
|
|
44
|
+
|
|
45
|
+
When a `redispatch:` field is present, new feedback arrived while you were running: re-read the three sources, handle any non-self item with `created_at` > `T_self`, re-fetch once more, and emit only when no unhandled items remain.
|
|
29
46
|
|
|
30
|
-
|
|
47
|
+
Signal wire format and emit rules: see the baxian-signals skill.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: baxian-pr-recheck
|
|
3
|
-
description: QA re-evaluates a PR after dev responded to prior findings — verify closure, check new risks, verdict
|
|
3
|
+
description: QA re-evaluates a PR after dev responded to prior findings — verify closure, check new risks, verdict.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields. The PR under recheck is in `pr:` (substitute it for `N` below). Work in `worktree:`. QA judges risk independently — human authorization is input, not a bypass.
|
|
8
|
+
|
|
7
9
|
## Gather Context
|
|
8
10
|
|
|
9
11
|
```bash
|
|
@@ -25,7 +27,7 @@ gh api --paginate repos/OWNER/REPO/issues/N/comments
|
|
|
25
27
|
|
|
26
28
|
## Verdict
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
Submit via `gh pr review N` with a per-pass stamp — substitute `N` = `pr:`, `TOKEN` = `token:`:
|
|
29
31
|
|
|
30
32
|
| Verdict | Command |
|
|
31
33
|
|---|---|
|
|
@@ -34,24 +36,22 @@ Via `gh pr review` with per-pass stamp:
|
|
|
34
36
|
|
|
35
37
|
Multi-line: `--body-file -`, stamp at end.
|
|
36
38
|
|
|
37
|
-
No pane signal on success. **422 fallback** (same identity) —
|
|
38
|
-
- request-changes: `gh pr review N --comment --body 'FINDINGS'`, then emit `pr-changes-requested`
|
|
39
|
-
- approve: emit `pr-approved`
|
|
39
|
+
No pane signal on success. **422 fallback** (same identity) — emit the matching signal instead (wire format: baxian-signals skill):
|
|
40
|
+
- request-changes: `gh pr review N --comment --body 'FINDINGS'`, then emit `pr-changes-requested` with `token:`.
|
|
41
|
+
- approve: emit `pr-approved` with `token:`.
|
|
40
42
|
|
|
41
43
|
## Verdict Verification
|
|
42
44
|
|
|
43
|
-
After submitting
|
|
44
|
-
|
|
45
|
-
Substitute the actual signal token from §Verdict for `YOUR_TOKEN` and the `Review head SHA` from the dispatch prompt for `YOUR_ANCHOR_SHA` in the command below:
|
|
45
|
+
After submitting (native `gh pr review` or 422 fallback), verify it landed — substitute `TOKEN` = `token:`:
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
48
|
gh api --paginate repos/OWNER/REPO/pulls/N/reviews \
|
|
49
|
-
--jq '.[] | select((.body // "") | contains("
|
|
49
|
+
--jq '.[] | select((.body // "") | contains("TOKEN")) | {id,state,commit_id,submitted_at}'
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
- **Native path**: must find a review matching ALL of:
|
|
53
|
-
1. `body` contains the
|
|
53
|
+
1. `body` contains the token
|
|
54
54
|
2. `state` is `APPROVED` or `CHANGES_REQUESTED`
|
|
55
|
-
3. `commit_id` equals
|
|
55
|
+
3. `commit_id` equals your `anchor-sha:` field (skip this check when `anchor-sha:` is absent)
|
|
56
56
|
- **422 fallback path**: native review won't exist — verify the pane signal was emitted instead. Do NOT claim a GitHub native review was submitted.
|
|
57
57
|
- If verification fails, report: "verdict 未落到 GitHub,需人工检查" and do NOT claim completion.
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: baxian-pr-review
|
|
3
|
-
description: QA performs a full independent pull request review — findings, verdict,
|
|
3
|
+
description: QA performs a full independent pull request review — gather context, findings, verdict, verification.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields. The PR under review is in `pr:` (substitute it for `N` below). Work in `worktree:`. QA judges risk independently — human authorization is input, not a bypass.
|
|
8
|
+
|
|
7
9
|
Source of truth: PR, commits, comments, checks, issues.
|
|
8
10
|
|
|
9
11
|
## Gather Context
|
|
@@ -30,7 +32,7 @@ Inline comments on smallest relevant range. Concrete evidence + expected fix. Do
|
|
|
30
32
|
|
|
31
33
|
## Verdict
|
|
32
34
|
|
|
33
|
-
|
|
35
|
+
Submit via `gh pr review N` with a per-pass stamp — substitute `N` = `pr:`, `TOKEN` = `token:`:
|
|
34
36
|
|
|
35
37
|
| Verdict | Command |
|
|
36
38
|
|---|---|
|
|
@@ -39,24 +41,22 @@ Via `gh pr review` with per-pass stamp:
|
|
|
39
41
|
|
|
40
42
|
Multi-line: `--body-file -`, stamp at end.
|
|
41
43
|
|
|
42
|
-
No pane signal on success. **422 fallback** (same identity) —
|
|
43
|
-
- request-changes: `gh pr review N --comment --body 'FINDINGS'`, then emit `pr-changes-requested`
|
|
44
|
-
- approve: emit `pr-approved`
|
|
44
|
+
No pane signal on success. **422 fallback** (same identity) — emit the matching signal instead (wire format: baxian-signals skill):
|
|
45
|
+
- request-changes: `gh pr review N --comment --body 'FINDINGS'`, then emit `pr-changes-requested` with `token:`.
|
|
46
|
+
- approve: emit `pr-approved` with `token:`.
|
|
45
47
|
|
|
46
48
|
## Verdict Verification
|
|
47
49
|
|
|
48
|
-
After submitting
|
|
49
|
-
|
|
50
|
-
Substitute the actual signal token from §Verdict for `YOUR_TOKEN` and the `Review head SHA` from the dispatch prompt for `YOUR_ANCHOR_SHA` in the command below:
|
|
50
|
+
After submitting (native `gh pr review` or 422 fallback), verify it landed — substitute `TOKEN` = `token:`:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
gh api --paginate repos/OWNER/REPO/pulls/N/reviews \
|
|
54
|
-
--jq '.[] | select((.body // "") | contains("
|
|
54
|
+
--jq '.[] | select((.body // "") | contains("TOKEN")) | {id,state,commit_id,submitted_at}'
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
- **Native path**: must find a review matching ALL of:
|
|
58
|
-
1. `body` contains the
|
|
58
|
+
1. `body` contains the token
|
|
59
59
|
2. `state` is `APPROVED` or `CHANGES_REQUESTED`
|
|
60
|
-
3. `commit_id` equals
|
|
60
|
+
3. `commit_id` equals your `anchor-sha:` field (skip this check when `anchor-sha:` is absent)
|
|
61
61
|
- **422 fallback path**: native review won't exist — verify the pane signal was emitted instead. Do NOT claim a GitHub native review was submitted.
|
|
62
62
|
- If verification fails, report: "verdict 未落到 GitHub,需人工检查" and do NOT claim completion.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: baxian-server-feedback
|
|
3
|
+
description: Dev responds to QA's server-review findings (response.json) and publishes the reviewed branch (server-after-done). Covers code findings, spec findings, and publish.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields. Work in `worktree:`. Route on `phase:`: `server-feedback` → §Feedback, `server-after-done` → §Publish.
|
|
8
|
+
|
|
9
|
+
## Feedback
|
|
10
|
+
|
|
11
|
+
QA's findings ride in the `findings:` block. Judge each finding independently — QA can be wrong; fix only what is actually correct, otherwise reject. Handle EVERY finding by id. The `feedback:` field is `code` or `spec`.
|
|
12
|
+
|
|
13
|
+
Do NOT push to any remote and do NOT open a PR in this phase — baxian reads your worktree directly; publishing is deferred to the `server-after-done` phase.
|
|
14
|
+
|
|
15
|
+
For each finding:
|
|
16
|
+
- `fix` — `feedback: code` → change the code (or spec), commit, include the `commitSha` in your response item. `feedback: spec` → revise `.baxian/spec.md` in place. Do NOT commit or push it — baxian reads the file directly.
|
|
17
|
+
- `reject` — concrete rationale why the finding is wrong or not applicable. Never reject just to save effort.
|
|
18
|
+
- `out-of-scope` — rationale plus where it is tracked (issue link or task note).
|
|
19
|
+
|
|
20
|
+
Write your response to `.baxian/review/response.json` in YOUR worktree (`mkdir -p .baxian/review` first). Atomic write: write `response.json.tmp` first, then `mv response.json.tmp response.json`.
|
|
21
|
+
|
|
22
|
+
Schema — substitute `<round>` with your `round:` field:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{"round":<round>,"responses":[{"findingId":"f-1","action":"fix"|"reject"|"out-of-scope","rationale":"..."}]}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Code-finding responses also carry `"commitSha":"..."` on every `fix`. Spec-finding responses omit `commitSha`. Every finding id MUST have exactly one response item (ids may look like `b0-f-1` when the review was batched).
|
|
29
|
+
|
|
30
|
+
Then emit your `signal:` (`code-fixed` or `spec-fixed`) with `token:`.
|
|
31
|
+
|
|
32
|
+
## Publish
|
|
33
|
+
|
|
34
|
+
Publish the reviewed `branch:`:
|
|
35
|
+
- `publish: pr` — `git push -u origin <branch>`, open a managed PR (`gh pr create`; the body MUST end with the `<!-- baxian:managed -->` marker or baxian ignores the PR's merge/comment events; ready for review, not Draft). Emit `code-ready` carrying the new PR number: `[bx:code-ready:<pr_number>:<token>]`.
|
|
36
|
+
- `publish: branch` — `git push -u origin <branch>`, then emit `code-ready` with `token:`.
|
|
37
|
+
|
|
38
|
+
Signal wire format and emit rules: see the **baxian-signals** skill.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: baxian-server-review
|
|
3
|
+
description: QA reviews injected server-review content (a code diff or a spec doc) — judge against the task spec, write findings.json with a verdict. Covers code review, recheck closure, and spec review.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields; the review input rides in trailing blocks — `diff:` (code) or `spec:` (spec review), plus `prior-findings:` / `prior-response:` on a recheck. Do NOT fetch branches or use `gh` — those blocks ARE the review input. Work in `worktree:`. QA judges risk independently — human authorization is input, not a bypass. If a `content: truncated` field is present, request the missing context via the read-file side-channel.
|
|
8
|
+
|
|
9
|
+
Route on `phase:`: `server-review` → §Code Review; `server-recheck` → §Code Review + §Recheck Closure; `server-spec-review` → §Spec Review.
|
|
10
|
+
|
|
11
|
+
## Code Review
|
|
12
|
+
|
|
13
|
+
Judge the `diff:` block against the task spec: correctness, tests, edge cases, security, regressions.
|
|
14
|
+
|
|
15
|
+
- Severity: `critical` = broken/unsafe, `major` = must fix before merge, `minor` = improvement.
|
|
16
|
+
- Reference file + line for every code finding.
|
|
17
|
+
- For unchanged files, read them directly from your own base-branch worktree; use the read-file side-channel only for content not present locally.
|
|
18
|
+
|
|
19
|
+
## Recheck Closure
|
|
20
|
+
|
|
21
|
+
The `prior-findings:` and `prior-response:` blocks carry the earlier findings and the dev response. Close them out before judging anything new.
|
|
22
|
+
|
|
23
|
+
- Resolve the status of EVERY prior finding first.
|
|
24
|
+
- A finding the dev claims fixed → verify it in the new diff. No "fixed" without evidence.
|
|
25
|
+
- A finding the dev rejected / called out-of-scope → judge the rationale on merit; re-raise it with concrete counter-evidence if it is wrong.
|
|
26
|
+
- Any prior finding NOT closed reappears in `findings.json` with its ORIGINAL id and the evidence restated — do not renumber or drop it.
|
|
27
|
+
- Verdict `approve` ONLY when every prior finding is closed AND the new diff is clean. An unresolved finding may not be downgraded to a minor suggestion to justify approve — otherwise `request-changes`.
|
|
28
|
+
- After closure, scan the new diff for regressions AND for behavior the fixes introduced that lacks test coverage.
|
|
29
|
+
|
|
30
|
+
## Spec Review
|
|
31
|
+
|
|
32
|
+
Judge the `spec:` block:
|
|
33
|
+
|
|
34
|
+
- completeness — every requirement covered, interfaces and data flows defined, error paths specified.
|
|
35
|
+
- correctness — internally consistent, no contradicting sections, feasible against the existing codebase.
|
|
36
|
+
- ambiguity — any requirement readable two ways is a finding.
|
|
37
|
+
|
|
38
|
+
Need a referenced file or codebase section to judge feasibility? Use the read-file side-channel. When `prior-findings:` / `prior-response:` blocks are present, verify every finding is closed before judging the rest of the spec.
|
|
39
|
+
|
|
40
|
+
## Findings Output
|
|
41
|
+
|
|
42
|
+
Write findings to `.baxian/review/findings.json` in YOUR worktree (`mkdir -p .baxian/review` first). Atomic write: write `findings.json.tmp` first, then `mv findings.json.tmp findings.json`.
|
|
43
|
+
|
|
44
|
+
Schema — substitute `<round>` with your `round:` field:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{"round":<round>,"verdict":"approve"|"request-changes","findings":[{"id":"f-1","severity":"critical"|"major"|"minor","message":"...","file":"path","line":N}]}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Spec-review findings use `"location":"Section ..."` in place of `"file"`/`"line"`.
|
|
51
|
+
|
|
52
|
+
- Finding ids are `f-1`, `f-2`, … sequential and unique within `findings.json` — the dev coverage check and QA closure verification key off them.
|
|
53
|
+
- `approve` MAY carry minor findings as suggestions; the `verdict` field is authoritative.
|
|
54
|
+
|
|
55
|
+
Then emit your `signal:` (`code-reviewed` or `spec-reviewed`) with `token:`. Signal wire format and the read-file side-channel: see the **baxian-signals** skill.
|
|
@@ -18,22 +18,28 @@ baxian scans the pane fuzzily (strips ANSI escapes and whitespace), so a TUI sof
|
|
|
18
18
|
|
|
19
19
|
## How to emit
|
|
20
20
|
|
|
21
|
-
The dispatch
|
|
21
|
+
The dispatch descriptor names the signal kind in a signal field and the token in `token:`. The default completion is `signal:`; some phases also expose an alternate field for an optional branch (e.g. `spec-signal:` on develop's SDD route). Your phase skill's flow tells you which field applies — emit the one for the route you took, never both:
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
|
|
24
|
+
signal: pr-fixed
|
|
25
25
|
token: a1b2c3d4e5f6
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
1.
|
|
28
|
+
1. Build the wire form `[bx:KIND:TOKEN]` from the field your skill's flow selects — KIND = that field's value (the `signal:` value by default, or an alternate like `spec-signal:`), TOKEN = the `token:` value — and emit it filled. `<pr_number>` (only `pr-created`, and `code-ready` when publishing as a PR) is the number of the PR you just created/opened with `gh pr create` — the descriptor carries no PR-number field.
|
|
29
29
|
2. Emit the filled signal **alone on its own line**.
|
|
30
|
-
3. **Never
|
|
31
|
-
4. Emit the kind
|
|
30
|
+
3. **Never emit an angle-bracket placeholder** like `[bx:pr-fixed:<token>]` verbatim — the scanner's strict regex cannot match placeholders, so it fires nothing and the task hangs forever waiting on a signal.
|
|
31
|
+
4. Emit the single kind your phase skill's flow selects, **exactly once**, only when its precondition holds. baxian consumes the first matching signal whose token matches the active dispatch; the token rotates every dispatch, so a stale or guessed token never fires.
|
|
32
32
|
|
|
33
33
|
## Signal catalog
|
|
34
34
|
|
|
35
35
|
Phase signals — the per-dispatch transition signals baxian consumes to advance a task. The dispatch prompt always names which one to emit and when.
|
|
36
36
|
|
|
37
|
+
Bootstrap handshake (before any task):
|
|
38
|
+
|
|
39
|
+
| Signal | Meaning |
|
|
40
|
+
|---|---|
|
|
41
|
+
| `greeting` | one-time capability check at agent startup; prove you can load this skill and signal back. baxian holds the agent until it sees a valid `greeting` echo |
|
|
42
|
+
|
|
37
43
|
GitHub PR flow:
|
|
38
44
|
|
|
39
45
|
| Signal | Meaning |
|
|
@@ -1,35 +1,50 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: baxian-task-check
|
|
3
|
-
description: How
|
|
3
|
+
description: How a dev analyzes and executes a baxian-managed develop/code task — read the structured prompt, plan, run the develop or code flow, signal back.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
baxian dispatches you with a block of `key: value` dispatch fields followed by the task `title:` and its description. Work in the directory named by `worktree:` — cd there before any file operation. Route on `phase:`: `develop` → §Develop, `code` → §Code.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
1. Read the prompt's `Title:` line and description — the authoritative task source (no `.baxian/task.md` file).
|
|
11
|
-
2. Identify acceptance criteria.
|
|
12
|
-
3. Plan: files to modify, tests to write.
|
|
9
|
+
If an `images:` list is present, read each path (baxian downloaded the user's uploads to the agent host) and factor them into the task.
|
|
13
10
|
|
|
14
|
-
##
|
|
15
|
-
- Explicit vs implied requirements
|
|
16
|
-
- Edge cases
|
|
17
|
-
- File/function references
|
|
18
|
-
- Linked docs, screenshots, specs
|
|
11
|
+
## Analyze
|
|
19
12
|
|
|
20
|
-
|
|
13
|
+
1. Read `title:` and the description — the authoritative task source (no `.baxian/task.md` file).
|
|
14
|
+
2. Identify acceptance criteria, explicit vs implied requirements, edge cases, file/function references, linked docs/specs.
|
|
15
|
+
3. Plan the files to modify and the tests to write.
|
|
16
|
+
|
|
17
|
+
When to ask vs proceed:
|
|
21
18
|
- Clear → start.
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
- Minor ambiguity → proceed, record the assumption (PR description, task note, or commit message).
|
|
20
|
+
- Blocked → pick a reasonable interpretation and record it after the `<!-- baxian:managed -->` marker (marker MUST be line 1), or create a task if truly blocked.
|
|
21
|
+
|
|
22
|
+
## Conventions
|
|
23
|
+
|
|
24
|
+
Your `exchange:` field selects the cross-agent medium:
|
|
25
|
+
- `github-pr` — communicate via the GitHub PR (description, commits, reviews, comments). A managed PR's description first line MUST be `<!-- baxian:managed -->`. Stay in scope — out-of-scope work goes to a new GitHub Issue.
|
|
26
|
+
- `server-files` — baxian reads your worktree directly; do NOT push or open a PR (the publish phase does that). Stay in scope.
|
|
27
|
+
|
|
28
|
+
A PR you open MUST be ready for review (not Draft): do NOT use `--draft`; if it is draft after creation, run `gh pr ready` before signaling.
|
|
29
|
+
|
|
30
|
+
## Develop
|
|
31
|
+
|
|
32
|
+
Two mutually-exclusive routes — pick ONE and emit only its signal:
|
|
33
|
+
|
|
34
|
+
- **SDD** (only when a `spec-signal:` field is present, i.e. a QA partner exists) — get your design reviewed first: follow §Specification-Driven Development, then emit `spec-signal:` (`spec-done`) with `token:`. Do NOT emit the default `signal:` on this route — that would skip spec review and push an unimplemented task forward. After QA approves the spec, baxian dispatches the code phase. Use SDD when the design is non-trivial; skip it when the change is small or unambiguous.
|
|
35
|
+
- **Direct** — implement the change, then emit `signal:` with `token:`: `exchange: github-pr` → after `gh pr create` (ready for review), emit `pr-created`; `exchange: server-files` → after a local commit (do NOT push), emit `code-done`.
|
|
36
|
+
|
|
37
|
+
## Code
|
|
38
|
+
|
|
39
|
+
The spec is approved at `.baxian/spec.md`. Implement it, then emit your `signal:` with `token:`:
|
|
40
|
+
- `exchange: github-pr` → commit + push, `gh pr create` (ready for review), emit `pr-created`.
|
|
41
|
+
- `exchange: server-files` → local commit only (do NOT push, no PR), emit `code-done`.
|
|
26
42
|
|
|
27
43
|
## Specification-Driven Development (SDD)
|
|
28
44
|
|
|
29
|
-
|
|
45
|
+
Use it to have QA review your design before you write code.
|
|
30
46
|
|
|
31
47
|
- Write the spec to `.baxian/spec.md` in your worktree. Do NOT commit or push it — baxian reads the file directly for QA review.
|
|
32
|
-
- Then emit the `spec-done`
|
|
33
|
-
- Skip it and implement directly when the change is small or the design is unambiguous.
|
|
48
|
+
- Then emit the `spec-signal:` (`spec-done`) with `token:`.
|
|
34
49
|
|
|
35
|
-
|
|
50
|
+
Signal wire format and emit rules: see the baxian-signals skill.
|