@gavin-hu/my-pi-agent 0.18.0 → 0.19.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/README.md +52 -44
- package/README.zh-CN.md +46 -41
- package/docs/extensions/README.md +34 -0
- package/docs/extensions/board.md +344 -0
- package/{extensions/bytefly/README.md → docs/extensions/bytefly.md} +446 -404
- package/{extensions/check/README.md → docs/extensions/check.md} +83 -68
- package/{extensions/context/README.md → docs/extensions/context.md} +40 -23
- package/docs/extensions/file-browse.md +554 -0
- package/{extensions/file-open/README.md → docs/extensions/file-open.md} +31 -23
- package/{extensions/file-read/README.md → docs/extensions/file-read.md} +47 -55
- package/{extensions/goal/README.md → docs/extensions/goal.md} +115 -131
- package/{extensions/job/README.md → docs/extensions/job.md} +61 -50
- package/{extensions/memory/README.md → docs/extensions/memory.md} +71 -60
- package/{extensions/plan/README.md → docs/extensions/plan.md} +390 -317
- package/{extensions/question/README.md → docs/extensions/question.md} +54 -31
- package/{extensions/rewind/README.md → docs/extensions/rewind.md} +115 -122
- package/docs/extensions/session-bus.md +285 -0
- package/{extensions/subagent/README.md → docs/extensions/subagent.md} +165 -118
- package/docs/extensions/team.md +226 -0
- package/{extensions/todo/README.md → docs/extensions/todo.md} +85 -88
- package/{extensions/watch/README.md → docs/extensions/watch.md} +54 -36
- package/{extensions/web-access/README.md → docs/extensions/web-access.md} +93 -50
- package/{extensions/wechat/README.md → docs/extensions/wechat.md} +258 -162
- package/{extensions/worktree/README.md → docs/extensions/worktree.md} +115 -72
- package/extensions/board/commands.ts +87 -0
- package/extensions/board/config.ts +36 -0
- package/extensions/board/format.ts +72 -0
- package/extensions/board/index.ts +40 -0
- package/extensions/board/input.ts +54 -0
- package/extensions/board/join.ts +42 -0
- package/extensions/board/page.ts +312 -0
- package/extensions/board/result.ts +99 -0
- package/extensions/board/rows.ts +48 -0
- package/extensions/board/schema.ts +75 -0
- package/extensions/board/seat.ts +29 -0
- package/extensions/board/snapshot.ts +41 -0
- package/extensions/board/tools.ts +279 -0
- package/extensions/board/transport/router.ts +172 -0
- package/extensions/board/transport/server.ts +149 -0
- package/extensions/board/types.ts +54 -0
- package/extensions/board/view/actions.ts +306 -0
- package/extensions/board/view/client.ts +41 -0
- package/extensions/board/view/keys.ts +121 -0
- package/extensions/board/view/live.ts +397 -0
- package/extensions/board/view/page.ts +158 -0
- package/extensions/board/view/render.ts +496 -0
- package/extensions/board/view/styles.ts +211 -0
- package/extensions/board/view/team.ts +305 -0
- package/extensions/board/writes.ts +99 -0
- package/extensions/bytefly/panel/commands.ts +40 -7
- package/extensions/bytefly/panel/settings-runtime.ts +0 -6
- package/extensions/bytefly/panel/settings.ts +3 -20
- package/extensions/bytefly/panel/tui/settings-view.ts +1 -1
- package/extensions/bytefly/picker/discovery.ts +0 -2
- package/extensions/bytefly/picker/types.ts +0 -2
- package/extensions/bytefly/update/check.ts +39 -0
- package/extensions/bytefly/update/format.ts +15 -0
- package/extensions/bytefly/update/register.ts +73 -34
- package/extensions/bytefly/update/state.ts +6 -3
- package/extensions/context/tui.ts +1 -1
- package/extensions/file-browse/{config.ts → config/config.ts} +1 -1
- package/extensions/file-browse/{files.ts → files/files.ts} +1 -14
- package/extensions/file-browse/{paths.ts → files/paths.ts} +1 -1
- package/extensions/file-browse/{git.ts → git/git.ts} +10 -3
- package/extensions/file-browse/index.ts +4 -4
- package/extensions/file-browse/{live.ts → live/live.ts} +20 -69
- package/extensions/file-browse/{router.ts → transport/router.ts} +21 -15
- package/extensions/file-browse/transport/server.ts +110 -0
- package/extensions/file-browse/{chrome.ts → view/chrome.ts} +4 -4
- package/extensions/file-browse/{client.ts → view/client.ts} +1 -1
- package/extensions/file-browse/{diff-html.ts → view/diff-html.ts} +3 -3
- package/extensions/file-browse/{html.ts → view/html.ts} +14 -12
- package/extensions/file-browse/{icons.ts → view/icons.ts} +1 -1
- package/extensions/file-browse/{markdown.ts → view/markdown.ts} +7 -7
- package/extensions/file-browse/{raw-html.ts → view/raw-html.ts} +1 -1
- package/extensions/file-browse/{styles.ts → view/styles.ts} +29 -5
- package/extensions/file-browse/{tree.ts → view/tree.ts} +1 -1
- package/extensions/file-browse/{urls.ts → view/urls.ts} +1 -1
- package/extensions/file-read/schema.ts +2 -1
- package/extensions/memory/store.ts +12 -5
- package/extensions/plan/blocks.ts +23 -2
- package/extensions/plan/commands.ts +21 -16
- package/extensions/plan/feedback.ts +147 -38
- package/extensions/plan/index.ts +6 -4
- package/extensions/plan/plan-index.ts +43 -9
- package/extensions/plan/plan-text.ts +33 -23
- package/extensions/plan/plans.ts +8 -11
- package/extensions/plan/policy.ts +20 -12
- package/extensions/plan/review.ts +3 -27
- package/extensions/plan/runtime.ts +21 -9
- package/extensions/plan/sections.ts +112 -0
- package/extensions/plan/steps.ts +3 -22
- package/extensions/plan/tools/exit.ts +11 -95
- package/extensions/plan/tui.ts +5 -34
- package/extensions/plan/types.ts +0 -8
- package/extensions/plan/web-client.ts +1 -1
- package/extensions/plan/web-page.ts +0 -7
- package/extensions/plan/web-router.ts +3 -57
- package/extensions/plan/web-share-session.ts +24 -30
- package/extensions/plan/web-streams.ts +14 -14
- package/extensions/plan/web-tokens.ts +2 -2
- package/extensions/plan/web.ts +66 -120
- package/extensions/rewind/{commands.ts → commands/commands.ts} +5 -5
- package/extensions/rewind/{review.ts → commands/review.ts} +13 -13
- package/extensions/rewind/{rewind.ts → commands/rewind.ts} +6 -6
- package/extensions/rewind/{config.ts → config/config.ts} +1 -1
- package/extensions/rewind/index.ts +3 -3
- package/extensions/rewind/{policy.ts → state/policy.ts} +4 -4
- package/extensions/rewind/{runtime.ts → state/runtime.ts} +11 -11
- package/extensions/rewind/{snapshot-run.ts → state/snapshot-run.ts} +1 -1
- package/extensions/rewind/{timeline.ts → state/timeline.ts} +2 -2
- package/extensions/rewind/{format.ts → text/format.ts} +3 -3
- package/extensions/rewind/{git.ts → transport/git.ts} +2 -2
- package/extensions/rewind/{restore.ts → transport/restore.ts} +2 -2
- package/extensions/rewind/{snapshot.ts → transport/snapshot.ts} +1 -1
- package/extensions/rewind/{store.ts → transport/store.ts} +1 -1
- package/extensions/rewind/{checklist.ts → view/checklist.ts} +6 -6
- package/extensions/rewind/{hunk-picker.ts → view/hunk-picker.ts} +8 -8
- package/extensions/rewind/{path-picker.ts → view/path-picker.ts} +7 -7
- package/extensions/rewind/{review-tui.ts → view/review-tui.ts} +11 -11
- package/extensions/rewind/{rewind-tui.ts → view/rewind-tui.ts} +17 -11
- package/extensions/rewind/{status.ts → view/status.ts} +4 -4
- package/extensions/session-bus/commands.ts +17 -69
- package/extensions/session-bus/format.ts +22 -45
- package/extensions/session-bus/index.ts +13 -7
- package/extensions/session-bus/join-request.ts +40 -0
- package/extensions/session-bus/mail-watch.ts +134 -0
- package/extensions/session-bus/notice.ts +32 -4
- package/{lib/claims → extensions/session-bus}/overlap.ts +11 -18
- package/extensions/session-bus/protocol.ts +19 -49
- package/extensions/session-bus/resolve.ts +67 -0
- package/extensions/session-bus/result.ts +16 -51
- package/extensions/session-bus/rows.ts +4 -2
- package/extensions/session-bus/runtime.ts +129 -238
- package/extensions/session-bus/store.ts +42 -6
- package/extensions/session-bus/tools.ts +31 -66
- package/extensions/session-bus/tui.ts +4 -4
- package/extensions/session-bus/types.ts +13 -13
- package/extensions/subagent/agents.ts +9 -8
- package/extensions/subagent/invocation.ts +4 -2
- package/extensions/team/commands.ts +112 -0
- package/extensions/team/dispatch.ts +133 -0
- package/extensions/team/format.ts +105 -0
- package/extensions/team/index.ts +33 -0
- package/extensions/team/schema.ts +29 -0
- package/extensions/team/tools.ts +246 -0
- package/extensions/team/types.ts +48 -0
- package/extensions/web-access/fetch/page.ts +4 -1
- package/extensions/web-access/fetch/structured.ts +447 -0
- package/extensions/web-access/fetch/tool.ts +2 -1
- package/extensions/web-access/search/tool.ts +2 -1
- package/extensions/wechat/bridge.ts +76 -92
- package/extensions/wechat/{commands.ts → commands/commands.ts} +26 -18
- package/extensions/wechat/{doctor.ts → commands/doctor.ts} +5 -5
- package/extensions/wechat/{history.ts → commands/history.ts} +1 -1
- package/extensions/wechat/{login.ts → commands/login.ts} +3 -3
- package/extensions/wechat/{slash.ts → commands/slash.ts} +38 -2
- package/extensions/wechat/dialog/channels.ts +136 -0
- package/extensions/wechat/{interaction.ts → dialog/interaction.ts} +37 -37
- package/extensions/wechat/{prompt.ts → dialog/prompt.ts} +2 -2
- package/extensions/wechat/{remote-ui.ts → dialog/remote-ui.ts} +1 -1
- package/extensions/wechat/index.ts +10 -10
- package/extensions/wechat/{admission.ts → peer/admission.ts} +2 -2
- package/extensions/wechat/{peer-session.ts → peer/peer-session.ts} +2 -2
- package/extensions/wechat/{peer-worker.ts → peer/peer-worker.ts} +100 -22
- package/extensions/wechat/{presence.ts → peer/presence.ts} +8 -7
- package/extensions/wechat/{reply-pipeline.ts → peer/reply-pipeline.ts} +1 -1
- package/extensions/wechat/{credentials.ts → state/credentials.ts} +2 -2
- package/extensions/wechat/{state.ts → state/state.ts} +14 -2
- package/extensions/wechat/{format.ts → text/format.ts} +3 -3
- package/extensions/wechat/{notices.ts → text/notices.ts} +8 -0
- package/extensions/wechat/tools.ts +29 -12
- package/extensions/wechat/{client.ts → transport/client.ts} +26 -2
- package/extensions/wechat/{deliver.ts → transport/deliver.ts} +72 -28
- package/extensions/wechat/{inbound.ts → transport/inbound.ts} +5 -5
- package/extensions/wechat/{media.ts → transport/media.ts} +11 -5
- package/extensions/wechat/transport/outbound.ts +142 -0
- package/extensions/wechat/{poll.ts → transport/poll.ts} +3 -3
- package/extensions/wechat/types.ts +10 -1
- package/extensions/wechat/{login-screen.ts → view/login-screen.ts} +4 -4
- package/extensions/wechat/{status-screen.ts → view/status-screen.ts} +31 -26
- package/extensions/worktree/guard.ts +3 -5
- package/lib/README.md +8 -6
- package/lib/board/card.ts +290 -0
- package/lib/board/links.ts +117 -0
- package/lib/board/page-pointer.ts +256 -0
- package/lib/board/round-text.ts +72 -0
- package/lib/board/round.ts +89 -0
- package/lib/board/rules.ts +304 -0
- package/lib/board/session.ts +105 -0
- package/lib/board/store.ts +310 -0
- package/lib/board/view.ts +150 -0
- package/lib/errors.ts +12 -4
- package/lib/format.ts +13 -0
- package/lib/http/guard.ts +112 -0
- package/lib/http/index.ts +16 -5
- package/lib/http/serve.ts +234 -0
- package/lib/http/server.ts +12 -10
- package/lib/http/sink.ts +110 -0
- package/lib/http/token.ts +38 -0
- package/lib/policy.ts +12 -2
- package/lib/requirements.ts +6 -7
- package/lib/session-label.ts +64 -0
- package/lib/session-roster.ts +130 -0
- package/lib/session-tool.ts +184 -0
- package/lib/tool-names.ts +25 -2
- package/lib/tui/glyphs.ts +2 -0
- package/lib/web/README.md +5 -2
- package/lib/web/components.ts +5 -0
- package/lib/web/runtime.ts +7 -1
- package/lib/web/tokens.ts +25 -2
- package/package.json +26 -14
- package/skills/next/SKILL.md +4 -3
- package/skills/project-docs/SKILL.md +133 -0
- package/skills/project-docs/references/audit.md +131 -0
- package/skills/project-docs/references/changelog.md +105 -0
- package/skills/project-docs/references/discovery.md +127 -0
- package/skills/project-docs/references/readme.md +80 -0
- package/skills/project-docs/references/release.md +84 -0
- package/skills/project-docs/references/roadmap.md +93 -0
- package/skills/project-docs/scripts/state.ts +316 -0
- package/skills/refactor/SKILL.md +100 -125
- package/skills/refactor/references/handoff.md +35 -0
- package/skills/refactor/references/signals.md +54 -0
- package/skills/refactor/scripts/inventory.ts +587 -0
- package/extensions/file-browse/README.md +0 -506
- package/extensions/file-browse/server.ts +0 -141
- package/extensions/plan/split.ts +0 -87
- package/extensions/session-bus/README.md +0 -247
- package/extensions/session-bus/team.ts +0 -102
- package/extensions/wechat/outbound.ts +0 -100
- package/lib/plans/sections.ts +0 -172
- package/lib/plans/setting.ts +0 -52
- package/lib/plans/split.ts +0 -215
- package/lib/plans/store.ts +0 -19
- package/lib/plans/team.ts +0 -151
- package/skills/changelog/SKILL.md +0 -148
- package/skills/parallel-dev/SKILL.md +0 -150
- /package/extensions/file-browse/{rev.ts → live/rev.ts} +0 -0
- /package/extensions/file-browse/{diff.ts → text/diff.ts} +0 -0
- /package/extensions/file-browse/{fuzzy.ts → text/fuzzy.ts} +0 -0
- /package/extensions/file-browse/{live-client.ts → view/live-client.ts} +0 -0
- /package/extensions/file-browse/{palette.ts → view/palette.ts} +0 -0
- /package/extensions/rewind/{patch.ts → text/patch.ts} +0 -0
- /package/extensions/rewind/{paths.ts → text/paths.ts} +0 -0
- /package/extensions/rewind/{queue.ts → transport/queue.ts} +0 -0
- /package/extensions/rewind/{temp-index.ts → transport/temp-index.ts} +0 -0
- /package/extensions/wechat/{lock.ts → state/lock.ts} +0 -0
- /package/extensions/wechat/{channel.ts → text/channel.ts} +0 -0
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: changelog
|
|
3
|
-
description: "Maintain a Keep a Changelog file: record one user-visible bullet in the same commit, audit commits since the last tag for missing or weak entries, and curate a release section from the project's own rules. Use when writing, auditing, or releasing a changelog, not for ordinary code edits."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Maintain the changelog
|
|
7
|
-
|
|
8
|
-
This is a procedure, not a second policy. Read the project's instructions first;
|
|
9
|
-
where they disagree with this skill, the project wins. There are three modes:
|
|
10
|
-
**record** (the default), **audit**, and **release**. `/skill:changelog` records;
|
|
11
|
-
`... audit` and `... release` name the others.
|
|
12
|
-
|
|
13
|
-
## 1. Read the project profile
|
|
14
|
-
|
|
15
|
-
In this package the profile is written down; read it rather than rediscover it:
|
|
16
|
-
|
|
17
|
-
- [`../../CHANGELOG.md`](../../CHANGELOG.md) — the preamble, the scope prefixes,
|
|
18
|
-
and the bullet shape in use;
|
|
19
|
-
- [`../../AGENTS.md`](../../AGENTS.md) — the entry lands in the same commit as the
|
|
20
|
-
change, and a behavior change also updates the two entry READMEs and `docs/`;
|
|
21
|
-
- [`../../docs/development.md#release`](../../docs/development.md#release) — the
|
|
22
|
-
normative release procedure: version bump, link refs, tag and push order;
|
|
23
|
-
- [`../../test/release.test.ts`](../../test/release.test.ts) — the guard on
|
|
24
|
-
subsection names, order, emptiness, and the version pin.
|
|
25
|
-
|
|
26
|
-
Everywhere else, find the same six things: the changelog and its preamble, the
|
|
27
|
-
category spelling and order, the scope prefix and one-bullet-per-unit rule,
|
|
28
|
-
whether the entry ships with the change, the release document with its bump and
|
|
29
|
-
push order, and the check command with any release-consistency test.
|
|
30
|
-
|
|
31
|
-
State the profile in one short paragraph. Do not invent a rule the project never
|
|
32
|
-
stated; ask instead.
|
|
33
|
-
|
|
34
|
-
## 2. Classify the change
|
|
35
|
-
|
|
36
|
-
It qualifies when a user can observe it: behavior, a CLI/tool/command surface, a
|
|
37
|
-
config default, packaging, security, or a documented promise that is now true or
|
|
38
|
-
false.
|
|
39
|
-
|
|
40
|
-
It does not qualify when only the implementation changed: an internal refactor, a
|
|
41
|
-
rename, a test, formatting, a comment, or a dependency bump with no behavior
|
|
42
|
-
change.
|
|
43
|
-
|
|
44
|
-
One bullet per user-visible outcome. A feature and its bug fix before release can
|
|
45
|
-
be one bullet if users see one outcome; two observable changes are two bullets.
|
|
46
|
-
Ask when the outcome is unclear. Never invent an entry to make an audit look
|
|
47
|
-
complete.
|
|
48
|
-
|
|
49
|
-
## 3. Record
|
|
50
|
-
|
|
51
|
-
- Write the entry in the same commit as the change. If the change is already
|
|
52
|
-
pushed without one, add a follow-up commit rather than rewriting history.
|
|
53
|
-
- Put it under `[Unreleased]` in `Added`, `Changed`, `Deprecated`, `Removed`,
|
|
54
|
-
`Fixed`, or `Security`.
|
|
55
|
-
- Lead with what the user can now do or what changed; use the project's scope
|
|
56
|
-
prefix; name a migration or required action explicitly.
|
|
57
|
-
- Exclude file names, internal helpers, test counts, commit hashes, and vague
|
|
58
|
-
words such as "various" or "improvements".
|
|
59
|
-
- Match the file's voice and tense. Do not add marketing.
|
|
60
|
-
- A behavior change also updates its row in the catalog tables of
|
|
61
|
-
[`../../README.md`](../../README.md) and
|
|
62
|
-
[`../../README.zh-CN.md`](../../README.zh-CN.md) plus the `docs/` guide it
|
|
63
|
-
belongs to; the changelog is this skill's subject, not its only file. A skill's
|
|
64
|
-
change updates its `SKILL.md` and its README row together.
|
|
65
|
-
- Re-read immediately before editing, append within the category, and preserve
|
|
66
|
-
other bullets and concurrent edits. Never create a second category heading.
|
|
67
|
-
|
|
68
|
-
Shape: one blank-line-separated bullet per outcome, wrapped near 80 columns, the
|
|
69
|
-
scope in backticks followed by a colon. The scope is the extension or module name,
|
|
70
|
-
spelled as this package spells it — `bytefly`, `plan`, `wechat`, `todo` — or
|
|
71
|
-
`lib`, `docs`, `test`, `ci`, `skills`. A bullet with no scope, or with a name the
|
|
72
|
-
package does not use, is a defect. A bullet may run several sentences — say what
|
|
73
|
-
the user sees, what it replaced, and any required action. Brevity is not the
|
|
74
|
-
goal; vagueness is the defect.
|
|
75
|
-
|
|
76
|
-
Good:
|
|
77
|
-
|
|
78
|
-
```text
|
|
79
|
-
- `config`: the report now says what its percentages are shares of. A
|
|
80
|
-
`Composition · 11k estimate` header sits above the rows, and a disabled
|
|
81
|
-
compaction no longer prints a headroom figure for a threshold that will never
|
|
82
|
-
fire.
|
|
83
|
-
- `cli`: `oldKey` is no longer read; run `bun run config:migrate`.
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
Bad:
|
|
87
|
-
|
|
88
|
-
```text
|
|
89
|
-
- `config`: refactored invoice rendering and added tests.
|
|
90
|
-
- `misc`: improvements.
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## 4. Audit (read-only)
|
|
94
|
-
|
|
95
|
-
1. Find the last tag: `git describe --tags --abbrev=0`, or the project's
|
|
96
|
-
equivalent.
|
|
97
|
-
2. List the commits since it: `git log --oneline --no-merges <tag>..HEAD`. Read
|
|
98
|
-
each diff with `git show`; a subject line is not enough.
|
|
99
|
-
3. For each commit, answer: is it user-visible? Which existing bullet covers it?
|
|
100
|
-
Is the scope right? Is the outcome accurate?
|
|
101
|
-
4. Report a table:
|
|
102
|
-
|
|
103
|
-
| Commit | User-visible | Evidence | Existing entry | Action |
|
|
104
|
-
|---|---|---|---|---|
|
|
105
|
-
|
|
106
|
-
`Action` is add, update, leave, or ask. "No entry found" is a valid result.
|
|
107
|
-
|
|
108
|
-
Also report duplicate `###` headings, empty categories, entries already shipped
|
|
109
|
-
under a released heading, and a missing or empty `[Unreleased]` when the commits
|
|
110
|
-
since the tag contain user-visible changes.
|
|
111
|
-
|
|
112
|
-
Do not edit during the audit unless the user asks. If they do, return to
|
|
113
|
-
**Record** and make only the entries the evidence supports.
|
|
114
|
-
|
|
115
|
-
## 5. Release (only when asked)
|
|
116
|
-
|
|
117
|
-
The project's release document is normative — in this package
|
|
118
|
-
[`../../docs/development.md#release`](../../docs/development.md#release), guarded
|
|
119
|
-
by [`../../test/release.test.ts`](../../test/release.test.ts). This is a
|
|
120
|
-
checklist, not a replacement:
|
|
121
|
-
|
|
122
|
-
- Confirm the version and the SemVer reason with the user.
|
|
123
|
-
- Move every `[Unreleased]` entry under `## [X.Y.Z] - YYYY-MM-DD`; leave an empty
|
|
124
|
-
`[Unreleased]` heading.
|
|
125
|
-
- Bump every manifest and update the compare and release link refs, in the same
|
|
126
|
-
commit as the movable part; the version in the manifest and the newest dated
|
|
127
|
-
heading must agree or the release test fails.
|
|
128
|
-
- Run the project's release checks, then `bun test test/release.test.ts` for the
|
|
129
|
-
version and subsection rules.
|
|
130
|
-
- Tag, push, and publish only with explicit approval, in the project's order. The
|
|
131
|
-
order matters: push the tag with `main`, never after it.
|
|
132
|
-
- Keep the release commit mechanical: no behavior, code, or unrelated docs.
|
|
133
|
-
- Use that section as the release body (`bun run release:notes X.Y.Z` prints it);
|
|
134
|
-
do not add extra prose.
|
|
135
|
-
|
|
136
|
-
## 6. Quality gate
|
|
137
|
-
|
|
138
|
-
- One bullet per user-visible change; every bullet starts with a scope and a user
|
|
139
|
-
outcome, and may take several sentences to state it.
|
|
140
|
-
- No internal-only or duplicate entries, and no empty category headings.
|
|
141
|
-
- No entry for a change that shipped before its heading.
|
|
142
|
-
- Links and versions agree; the project check passes.
|
|
143
|
-
|
|
144
|
-
## 7. Report and stop
|
|
145
|
-
|
|
146
|
-
Say what was recorded, what the audit found, or what the release moved. List what
|
|
147
|
-
was deliberately left out and why. When nothing qualifies, say so. Stop before
|
|
148
|
-
editing if the project rules are missing or contradictory; ask instead.
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: parallel-dev
|
|
3
|
-
description: "Lead a team of independent Pi sessions through one approved plan: the split is validated at approval and every session joins a slice by name, so this skill carries only the judgment a gate cannot enforce — when a team is worth it, contract first, vertical slices, shared files, merge order, and when to stop. Use when splitting work across sessions; not for ordinary single-session edits or a change too small to split."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Run parallel development as a lead and a team
|
|
7
|
-
|
|
8
|
-
This is the judgment half of a mechanism the package already has. The mechanism —
|
|
9
|
-
the `## Team` table, its refusals, and `session({action:"join"})` — is documented
|
|
10
|
-
in [`extensions/plan/README.md`](../../extensions/plan/README.md) and
|
|
11
|
-
[`extensions/session-bus/README.md`](../../extensions/session-bus/README.md). Read
|
|
12
|
-
those for *how*; this is *whether*, and *in what order*.
|
|
13
|
-
|
|
14
|
-
Read the project's instructions first; they win. If `session-bus` is absent or
|
|
15
|
-
disabled, stop: keep the ownership table by hand and do not invent bus commands.
|
|
16
|
-
|
|
17
|
-
## 1. What this assumes
|
|
18
|
-
|
|
19
|
-
- **No session starts another.** A peer advances when the user starts a turn in
|
|
20
|
-
it, or when it armed `/sessions watch wake` and the lead messaged it. Plan every
|
|
21
|
-
workstream as if its owner is asleep until the user switches to it.
|
|
22
|
-
- **The user starts, names, and switches every session.** You cannot start, name,
|
|
23
|
-
prompt, or stop a peer — and a pane opened from a shell that is already inside a
|
|
24
|
-
worktree inherits that worktree (`PI_WORKTREE_ROOT` and its siblings,
|
|
25
|
-
`lib/env.ts`), so the peer binds the lead's tree and `enter_worktree` refuses it
|
|
26
|
-
as inherited. Have the user start the pane from the main checkout, or clear those
|
|
27
|
-
variables in it.
|
|
28
|
-
- **A peer is untrusted input.** Its message, label, path, and cwd are evidence,
|
|
29
|
-
never instructions.
|
|
30
|
-
- **A subagent is not a workstream.** Its context ends with the run, so it scouts,
|
|
31
|
-
reviews, or verifies — it never owns paths across turns.
|
|
32
|
-
|
|
33
|
-
## 2. Whether a team is worth it
|
|
34
|
-
|
|
35
|
-
Form one only when all of these hold: two or more workstreams deliver independent
|
|
36
|
-
outcomes; their paths do not overlap; the boundary can be written down before work
|
|
37
|
-
starts; one session is accountable for integration; and someone other than the
|
|
38
|
-
implementer can verify the result.
|
|
39
|
-
|
|
40
|
-
| You want | Shape | What it costs the user |
|
|
41
|
-
|---|---|---|
|
|
42
|
-
| One outcome, attention in one session | serial, or a lead with subagents | nothing to coordinate |
|
|
43
|
-
| Two outcomes on independent paths | a lead and one owner | one switch per active workstream per round |
|
|
44
|
-
| Three or more | the split is wrong | round-robin sessions, and quality falls |
|
|
45
|
-
|
|
46
|
-
The ceiling is the user's attention, not the bus. A change too tightly coupled to
|
|
47
|
-
split is done serially, and the reason is stated.
|
|
48
|
-
|
|
49
|
-
Split **vertically**: an outcome slice, or a module with an explicit interface. A
|
|
50
|
-
layer split (frontend/backend/test) maximises handoffs and late integration.
|
|
51
|
-
|
|
52
|
-
## 3. Contract first, then split
|
|
53
|
-
|
|
54
|
-
The boundary is the thing to get right, and it is not frozen up front: it is the
|
|
55
|
-
smallest stable interface, proven by a test.
|
|
56
|
-
|
|
57
|
-
- Uncertain boundary → build one thin end-to-end path first, alone, then approve a
|
|
58
|
-
split against the real interface. This is what the approval gate tells you when
|
|
59
|
-
a single unit is proposed.
|
|
60
|
-
- Write contract v1 — the shape, where it lives, what crosses it, and the one test
|
|
61
|
-
that exercises each case — before parallel work starts.
|
|
62
|
-
- The lead owns the contract's version and its tests, and works a unit of its own
|
|
63
|
-
so it is never a queue in front of the others.
|
|
64
|
-
- A contract change is one increment: the new shape, its version, its tests, and an
|
|
65
|
-
event to the dependents. Breaking changes expand, then contract.
|
|
66
|
-
|
|
67
|
-
## 4. Roles
|
|
68
|
-
|
|
69
|
-
- **Lead** — the contract, the shared files, merge order, a green baseline, and
|
|
70
|
-
its own unit. The only session that ticks the plan's steps.
|
|
71
|
-
- **Owner** — its unit's paths, its unit's test, one completion report per turn.
|
|
72
|
-
- **Verifier** (optional, read-only): runs the acceptance tests against the
|
|
73
|
-
integrated baseline and reports exact failures. It never approves work it wrote.
|
|
74
|
-
|
|
75
|
-
Any role may message any other. None may start a peer's turn, read another
|
|
76
|
-
session's transcript, or reassign its paths. Accountability is not authority.
|
|
77
|
-
|
|
78
|
-
## 5. The turn
|
|
79
|
-
|
|
80
|
-
Every turn is the same four steps: read the inbox, `join` your unit or claim the
|
|
81
|
-
paths the increment touches, work one small increment and test it at the unit
|
|
82
|
-
boundary, then send a line. Claims are released when that work merges (§7), not at
|
|
83
|
-
the end of every turn: an idle but running session holds its claims, so an
|
|
84
|
-
un-released path blocks a peer until the user visits it, which is the protection
|
|
85
|
-
that makes a claim worth having.
|
|
86
|
-
|
|
87
|
-
- `status` reports `units n/m` with each unit's holder, so the count answers "has
|
|
88
|
-
anyone started?" only while units are held: a team that has all released and gone
|
|
89
|
-
quiet reads `0/n`, which is finished, not idle.
|
|
90
|
-
- Claims are advisory signals, not locks: git still decides. Rebase every turn.
|
|
91
|
-
- Never idle-wait: no turn runs until the user starts one, so no acknowledgement
|
|
92
|
-
can arrive. Send the event, keep working what is unblocked, and name which
|
|
93
|
-
session must move next.
|
|
94
|
-
- Use `ask` for a decision that blocks you, `handoff` for a structured summary, and
|
|
95
|
-
never send another session's context, transcript, or secrets.
|
|
96
|
-
|
|
97
|
-
## 6. Shared files belong to the lead
|
|
98
|
-
|
|
99
|
-
`package.json`, the lockfile, shared name or type modules, test manifests,
|
|
100
|
-
migrations, and the changelog conflict by rule rather than by accident — the
|
|
101
|
-
approval gate refuses an owner unit that claims one.
|
|
102
|
-
|
|
103
|
-
- An owner that needs a shared-file change sends the exact edit and works around it.
|
|
104
|
-
- An owner's branch is cut from `origin/main` and the lead's shared-file commit is
|
|
105
|
-
not on it, so the owner runs its unit test, not the full check: a new co-located
|
|
106
|
-
test is an undeclared suite on that branch, and the layout test fails until the
|
|
107
|
-
lead merges. The full check is the lead's, on the integrated baseline.
|
|
108
|
-
- An owner still writes its own changelog bullet in its own commit; the lead
|
|
109
|
-
resolves the ordering when it merges, and is the only session that restructures
|
|
110
|
-
that file.
|
|
111
|
-
- A version, dependency, or manifest bump lands in the lead's turn, never silently
|
|
112
|
-
on two branches.
|
|
113
|
-
|
|
114
|
-
## 7. Integrate and verify
|
|
115
|
-
|
|
116
|
-
- One short-lived worktree or branch per session. Rebase every turn and land small
|
|
117
|
-
increments: a branch waiting for final integration is the failure this model
|
|
118
|
-
prevents. Hide incomplete user-visible work behind a flag.
|
|
119
|
-
- The lead merges in dependency order — the roster card prints it — resolves
|
|
120
|
-
shared-file conflicts once, and keeps the baseline green.
|
|
121
|
-
- Every increment runs its unit test and, on the integrated baseline, the project's
|
|
122
|
-
full check. An owner's "done" is a claim; CI and acceptance tests are the proof.
|
|
123
|
-
- Release claims when the work merges. The integrated branch is the source of truth.
|
|
124
|
-
|
|
125
|
-
## 8. Done, and when to stop
|
|
126
|
-
|
|
127
|
-
Done when every unit's test passes, every unit has an owner and released claims,
|
|
128
|
-
the full check is green on the integrated baseline, docs and changelog and plan
|
|
129
|
-
steps are current, and unfinished work is behind a flag or out of scope with a
|
|
130
|
-
known rollback.
|
|
131
|
-
|
|
132
|
-
Stop and ask when there is no stable contract or no accountable lead; when two
|
|
133
|
-
units need one path; when the bus is unavailable or nobody will read the inbox;
|
|
134
|
-
when the change is small enough to be serial; when the dependency graph has a
|
|
135
|
-
cycle; or when the user cannot visit every active workstream each round.
|
|
136
|
-
|
|
137
|
-
The anti-patterns this prevents: contract freeze, a layer-only split, big-bang
|
|
138
|
-
integration, claims treated as locks, the lead as a dispatcher, and the verifier as
|
|
139
|
-
the only QA.
|
|
140
|
-
|
|
141
|
-
## Minimal recipe
|
|
142
|
-
|
|
143
|
-
```text
|
|
144
|
-
user: /bytefly settings → "Split plans into slices" On (once per project or globally)
|
|
145
|
-
lead: /plan … → exit_plan_mode with units → generate the roster card, work the lead unit
|
|
146
|
-
user: one session per owner: enter_worktree <unit> · /sessions name <unit> · /sessions watch wake
|
|
147
|
-
each: session({action:"join", team, unit}) at the start, then one increment per turn
|
|
148
|
-
each turn: session({action:"inbox"}) → work → test → send · release when the unit merges
|
|
149
|
-
lead: merge in the card's order, run the full check on the integrated baseline
|
|
150
|
-
```
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|