pi-orchestrator-config 4.19.0 → 4.20.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/README.md CHANGED
@@ -806,7 +806,7 @@ PI_PIDIFF_ENABLE=false pi
806
806
  | `myk-pi-tools pr claude-md` | Fetch `CLAUDE.md` and `AGENTS.md` content for a PR's repository |
807
807
  | `myk-pi-tools release create` | Create a GitHub release with changelog |
808
808
  | `myk-pi-tools release plan` | Scoped-release plan: which packages changed since their last publish (per-package registry-anchored diff windows). Detection only — no proposed versions. Read-only; requires `release-map.toml` at the repo root — without it, reports lockstep mode and changes nothing (issue #965) |
809
- | `myk-pi-tools release bump-scoped` | Bump ONLY the affected packages' version files. Versions are ALWAYS explicit: `--set NAME=VERSION` per affected package (the versions the LLM/user decided in the `/release` flow) or a global `--version X.Y.Z` — the plan never proposes versions. Repo tag = highest version and must exceed the latest existing repo tag. Versions are validated (strict x.y.z, no leading zeros, strictly greater than the registry-published version). Errored packages, undetected version files, or partially-updatable manifests abort before or at the first bad write. Requires `release-map.toml` — without it, exit 1 (use `bump-version` for lockstep) (issue #965) |
809
+ | `myk-pi-tools release bump-scoped` | Bump ONLY the affected packages' version files. Versions are ALWAYS explicit: `--set NAME=VERSION` per affected package (the versions the LLM/user decided in the `/release` flow) or a global `--version X.Y.Z` — the plan never proposes versions. Each package versions from its own registry history (no global repo-tag guard — no forced jumps for long-skipped packages); tags are per-package `<name>@<version>`. Versions are validated (strict x.y.z, no leading zeros, strictly greater than the registry-published version). Errored packages, undetected version files, or partially-updatable manifests abort before or at the first bad write. Requires `release-map.toml` — without it, exit 1 (use `bump-version` for lockstep) (issue #965) |
810
810
  | `myk-pi-tools db` | Review database query commands |
811
811
  | `myk-pi-tools reviews` | Review handling commands (fetch, poll, address, post, store, store-session) |
812
812
  | `myk-pi-tools reviews poll` | Poll a PR for review comments until approved or actionable — `--source qodo` reads findings through the `qodo` CLI (structured, with spans and authoritative open/closed status) when the binary is installed and authenticated, and falls back to the GitHub sticky-comment scrape otherwise. Read-only: replies are always posted as GitHub comments via `reviews address` |
@@ -840,15 +840,24 @@ myk-pi-tools release plan --force-package pi-docsite
840
840
  - Global excludes configured in the map (e.g. `tests/`) never trigger a release by themselves;
841
841
  multi-registry packages must agree across their registries or they are reported as errored,
842
842
  never silently skipped.
843
+ - The plan also reports **unmapped changes**: files changed since the last repo tag that
844
+ belong to no package, no exclude, and no container rebuild-path. A change that ships
845
+ nowhere silently is the broken failure mode — the operator maps the path or consciously
846
+ accepts it as release-inert.
843
847
  - The container image is reported as needing a rebuild when any package ships or a `rebuild-paths` entry changed since the last repo tag.
844
848
 
845
849
  `myk-pi-tools release bump-scoped` performs the scoped version bump: only affected
846
- packages' version files are written, the repo tag is the highest version, and any errored
847
- package or undetected version file aborts before a single write. The plan detects WHAT
848
- changed and nothing more — no proposed versions, no bump types. The next versions are decided
849
- by the LLM and the user in `/release` and passed as `--set NAME=VERSION` (without `--set` or
850
- `--version`, `bump-scoped` refuses to run). `/release X.Y.Z` overrides every affected package
851
- to that version. See the Scoped Mode Check in the release prompt.
850
+ packages' version files are written, and any errored package or undetected version file
851
+ aborts before a single write. Each package versions from **its own registry history** —
852
+ there is deliberately no global repo-tag guard, so a package skipped for several releases
853
+ takes the next version after its own last publish (never a forced jump past the global tag
854
+ sequence). Tags are **per package** (`<name>@<version>`) and cannot collide. The plan
855
+ detects WHAT changed and nothing more — no proposed versions, no bump types. The next
856
+ versions are decided by the LLM and the user in `/release` and passed as
857
+ `--set NAME=VERSION` (without `--set` or `--version`, `bump-scoped` refuses to run).
858
+ `/release X.Y.Z` overrides every affected package to that version. Each shipped package
859
+ gets its own GitHub release tagged `<name>@<version>`. See the Scoped Mode Check in the
860
+ release prompt.
852
861
 
853
862
  Without a `release-map.toml`, `release plan` reports lockstep mode and nothing else changes —
854
863
  the generic release flow is untouched.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-orchestrator-config",
3
- "version": "4.19.0",
3
+ "version": "4.20.1",
4
4
  "description": "Orchestrator pattern for pi: specialist subagents, enforcement, code review loop, workflow commands",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -75,13 +75,26 @@ root only).
75
75
  **If PRESENT:** run the SCOPED flow instead of Phases 2–5:
76
76
 
77
77
  - **Phase S2 — Detection:** `myk-pi-tools release plan --json`. If any
78
- package is errored, show the errors and abort — do not bump. If no
79
- packages are affected, report "nothing to release — no package changed
80
- since its last publish" and stop. The plan only reports WHICH packages
81
- changed and their published versions — it does NOT decide the next
82
- versions.
78
+ package is errored, show the errors and abort — do not bump. The plan
79
+ only reports WHICH packages changed and their published versions — it
80
+ does NOT decide the next versions. ALSO inspect `unmapped_changes` in
81
+ the plan JSON — ALWAYS, before any other decision: files that changed
82
+ but belong to no package, exclude, or container rebuild-path. If
83
+ non-empty, show them to the user as text IMMEDIATELY (a changed file
84
+ that ships nowhere silently is the broken failure mode) — map the
85
+ path (edit `release-map.toml`) or consciously accept it as
86
+ release-inert. This display is NOT part of Phase S4 approval: it
87
+ happens even when an explicit version was given and even when no
88
+ packages are affected. Then, if no packages are affected, report
89
+ "nothing to release — no package changed since its last publish"
90
+ (plus the unmapped list, if any) and stop.
83
91
  - **Phase S3 — Changelog + version proposals:** generate the changelog
84
- with the standard Phase 3 rules. Then, for EACH affected package, YOU
92
+ with the standard Phase 3 rules, EXCEPT the commit window: scoped
93
+ repos have per-package tags (`name@version`), so do NOT anchor the
94
+ changelog on `release info`'s `last_tag` or its version-branch tag
95
+ filter (`v2.10.*` inference finds no per-package tags and would treat
96
+ the run as a first release) — anchor on each affected package's own
97
+ `anchor` from the plan JSON. Then, for EACH affected package, YOU
85
98
  (the LLM) decide the next version. IMPORTANT: a package's history
86
99
  reaches back to ITS last publish, which may predate the last repo tag
87
100
  — do NOT rely on the changelog alone. For each affected package run
@@ -92,29 +105,51 @@ root only).
92
105
  just subjects — a `BREAKING CHANGE:` footer lives in the commit body
93
106
  and forces major even under a `feat:`/`fix:` subject. The plan does NOT propose versions — you
94
107
  do. An explicit version argument (`/release X.Y.Z`) instead sets EVERY
95
- affected package to that version, skipping per-package decisions. The
96
- repo tag is the HIGHEST proposed version.
97
- - **Phase S4 — Approval:** skip this phase entirely if an explicit
108
+ affected package to that version, skipping per-package decisions.
109
+ Each package versions from ITS OWN registry history only — a package
110
+ skipped for N releases takes the next version after its own last
111
+ publish (e.g. 4.18.0 → 4.19.0), never a jump past the global tag
112
+ sequence.
113
+ - **Phase S4 — Approval:** skip the `ask_user` entirely if an explicit
98
114
  version was provided in the raw arguments (same contract as lockstep
99
- Phase 4). Otherwise: show the changelog, the per-package version
100
- proposals (`current → proposed`), AND the plan's skipped-packages
101
- list as text — the human validates the detection on every scoped
102
- release (a package wrongly skipped is the broken failure mode). Then
103
- a short `ask_user`: `Release v<TAG>?` with options `yes`, `no`, plus
104
- one override option per package in the form `<name>: <level>` (e.g.
105
- `myk-pi-tools: minor`) so the user can adjust any package's level
106
- before confirming.
115
+ Phase 4 — the unmapped-changes display already happened in S2).
116
+ Otherwise: show the changelog, the per-package version
117
+ proposals (`current → proposed`), the plan's skipped-packages list,
118
+ AND any `unmapped_changes` files as text — the human validates the
119
+ detection on every scoped release (a package wrongly skipped is the
120
+ broken failure mode). Then a short `ask_user`: `Release?` with
121
+ options `yes`, `no`, plus one override option per package in the form
122
+ `<name>: <level>` (e.g. `myk-pi-tools: minor`) so the user can adjust
123
+ any package's level before confirming.
107
124
  - **Phase S5 — Bump:** `myk-pi-tools release bump-scoped --json` with
108
125
  one `--set <name>=<version>` per affected package carrying YOUR final
109
126
  proposed versions (after any user overrides). Use `--version X.Y.Z`
110
127
  instead when the user passed an explicit version. Parse the JSON:
111
- stage ONLY the files in `updated[]`, use `tag` as the release version.
112
- Bump PR, merge, and branch sync follow the standard Phase 5 delegation
113
- (git-expert / github-expert), with the bump PR message
114
- `chore: bump version to <TAG>`.
115
- - **Phase S6/S7:** unchanged — release create with `v<TAG>`, changelog
116
- including the Shipped packages section, summary listing per-package
117
- versions.
128
+ stage ONLY the files in `updated[]`; each entry in `packages[]`
129
+ carries its per-package `tag` (`<name>@<version>`). Bump PR, merge,
130
+ and branch sync follow the standard Phase 5 delegation (git-expert /
131
+ github-expert), with the bump PR message `chore: bump version to
132
+ <name1>@<v1>[, <name2>@<v2>...]` (keep the `chore: bump version`
133
+ prefix — it is filtered from changelogs).
134
+ - **Phase S6/S7:** release create ONE GitHub RELEASE PER SHIPPED
135
+ PACKAGE, tag `<name>@<version>` from the bump JSON. Each release's
136
+ notes contain ONLY that package's changes: its own version line
137
+ (`<name> — <old> → <new> (<registry>)`), its own changelog entries
138
+ from its S3 per-package window, and a compare link whose base you
139
+ VERIFY before writing it: `git tag -l '<name>@<published>'` first,
140
+ then `git tag -l 'v<published>'` — if neither tag exists (package
141
+ never released under either scheme), use the package's `anchor`
142
+ commit SHA from the plan JSON as the base
143
+ (`compare/<anchor-sha>...<name>@<version>`; GitHub compare accepts
144
+ any ref). NEVER write a compare link with an unverified ref, and
145
+ NEVER list other packages in a
146
+ release's notes — a release that ships only myk-pi-tools must not
147
+ claim pi-orchestrator-config shipped; cut-level context lives in the
148
+ bump PR, not in per-package releases. PASS
149
+ `--title "<name> <version>"` explicitly — without it the release
150
+ title defaults to the raw `name@version` tag. Tags are per-package
151
+ and cannot collide — there is no repo-wide `v<TAG>` in scoped mode.
152
+ Summary lists each release URL and per-package versions.
118
153
 
119
154
  ### Phase 2: Version Detection
120
155