@aefree/pi-plastic 0.7.0 → 0.7.2
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/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ and this project follows semantic versioning for public package releases.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## [0.7.2] - 2026-09-19
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Stop pending-diff Xlink ownership discovery before querying the workspace root, allowing parent-repository base resolution while preserving linked-repository qualification and refusal on unresolved descendant ownership.
|
|
15
|
+
- Accept both `rep` and `repository` selector spellings when resolving workspace repository identity for pending diffs and shared selector consumers.
|
|
16
|
+
|
|
17
|
+
## [0.7.1] - 2026-09-17
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Remove co-author attribution instructions and examples from conventional commit guidance.
|
|
22
|
+
- Remove the automatic co-author footer from default merge check-in messages.
|
|
23
|
+
|
|
10
24
|
## [0.7.0] - 2026-09-16
|
|
11
25
|
|
|
12
26
|
### Fixed
|
package/README.md
CHANGED
|
@@ -119,13 +119,13 @@ pi install npm:@aefree/pi-plastic
|
|
|
119
119
|
Install a pinned GitHub release over HTTPS:
|
|
120
120
|
|
|
121
121
|
```bash
|
|
122
|
-
pi install git:github.com/aefreedman/pi-plastic@v0.7.
|
|
122
|
+
pi install git:github.com/aefreedman/pi-plastic@v0.7.2
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
Equivalent SSH install:
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
-
pi install git:git@github.com/aefreedman/pi-plastic@v0.7.
|
|
128
|
+
pi install git:git@github.com/aefreedman/pi-plastic@v0.7.2
|
|
129
129
|
```
|
|
130
130
|
|
|
131
131
|
To intentionally track the moving default branch instead of a release tag:
|
package/package.json
CHANGED
|
@@ -112,27 +112,6 @@ Closes #124
|
|
|
112
112
|
Related to #125
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
**Attribution:**
|
|
116
|
-
```
|
|
117
|
-
feat(dashboard): add analytics widget
|
|
118
|
-
|
|
119
|
-
Co-Authored-By: <AI Assistant Name (e.g., Codex, Claude, Pi Coding Agent)>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
## Attribution Footer
|
|
125
|
-
|
|
126
|
-
Add a simple attribution line in the footer when needed:
|
|
127
|
-
|
|
128
|
-
```
|
|
129
|
-
feat(feature): implement new capability
|
|
130
|
-
|
|
131
|
-
[Body explaining the change]
|
|
132
|
-
|
|
133
|
-
Co-Authored-By: <AI Assistant Name (e.g., Codex, Claude, Pi Coding Agent)>
|
|
134
|
-
```
|
|
135
|
-
|
|
136
115
|
---
|
|
137
116
|
|
|
138
117
|
## Examples
|
|
@@ -168,18 +147,6 @@ Changed from O(n²) all-pairs check to spatial hashing.
|
|
|
168
147
|
Reduces frame time by ~15ms with 100+ objects.
|
|
169
148
|
```
|
|
170
149
|
|
|
171
|
-
### Attribution Example
|
|
172
|
-
```
|
|
173
|
-
feat(multiplayer): add lobby system
|
|
174
|
-
|
|
175
|
-
Implements matchmaking lobby with room creation, joining, and ready-up.
|
|
176
|
-
Uses WebSocket for real-time updates.
|
|
177
|
-
|
|
178
|
-
Closes #89
|
|
179
|
-
|
|
180
|
-
Co-Authored-By: <AI Assistant Name (e.g., Codex, Claude, Pi Coding Agent)>
|
|
181
|
-
```
|
|
182
|
-
|
|
183
150
|
---
|
|
184
151
|
|
|
185
152
|
## Usage in Skills
|
package/src/plastic-core.ts
CHANGED
|
@@ -1876,7 +1876,7 @@ const parseRepositoryIdentity = (selector: string | undefined): RepositoryIdenti
|
|
|
1876
1876
|
|
|
1877
1877
|
const parseRepositorySelector = (output: string): RepositoryIdentity | null =>
|
|
1878
1878
|
{
|
|
1879
|
-
const match = output.match(/^\s*repository\s+(?:"([^"]+)"|(\S+))\s*$/mi);
|
|
1879
|
+
const match = output.match(/^\s*(?:repository|rep)\s+(?:"([^"]+)"|(\S+))\s*$/mi);
|
|
1880
1880
|
return parseRepositoryIdentity(match?.[1] ?? match?.[2]);
|
|
1881
1881
|
};
|
|
1882
1882
|
|
|
@@ -1974,6 +1974,12 @@ const createPendingBaseIdentityResolver = (cwd: string, workdir?: string): Pendi
|
|
|
1974
1974
|
toPathComparisonKeyFromAbsolutePath(rootIdentity),
|
|
1975
1975
|
))
|
|
1976
1976
|
{
|
|
1977
|
+
// The workspace root belongs to its selector; cm rejects Xlink queries there.
|
|
1978
|
+
if (toPathComparisonKeyFromAbsolutePath(await toFilesystemIdentityPath(candidate))
|
|
1979
|
+
=== toPathComparisonKeyFromAbsolutePath(rootIdentity))
|
|
1980
|
+
{
|
|
1981
|
+
break;
|
|
1982
|
+
}
|
|
1977
1983
|
// A missing ancestor can be a removed Xlink mount. Status does not
|
|
1978
1984
|
// retain ownership, so parent-repository fallback would be unsafe.
|
|
1979
1985
|
if ((item.kind === "deleted" || item.kind === "moved") && !(await fs.stat(candidate).catch(() => null)))
|
|
@@ -1986,11 +1992,6 @@ const createPendingBaseIdentityResolver = (cwd: string, workdir?: string): Pendi
|
|
|
1986
1992
|
item.baseRepository = `${repository.repository}@${repository.server}`;
|
|
1987
1993
|
return `revid:${item.revisionId}@rep:${repository.repository}@repserver:${repository.server}`;
|
|
1988
1994
|
}
|
|
1989
|
-
if (toPathComparisonKeyFromAbsolutePath(await toFilesystemIdentityPath(candidate))
|
|
1990
|
-
=== toPathComparisonKeyFromAbsolutePath(rootIdentity))
|
|
1991
|
-
{
|
|
1992
|
-
break;
|
|
1993
|
-
}
|
|
1994
1995
|
const parent = dirname(candidate);
|
|
1995
1996
|
if (parent === candidate)
|
|
1996
1997
|
{
|
|
@@ -4910,10 +4911,10 @@ export const mergeToBranch = tool({
|
|
|
4910
4911
|
const strategy: MergeConflictStrategy = args.strategy ?? "auto";
|
|
4911
4912
|
const updateTarget = args.updateTarget ?? true;
|
|
4912
4913
|
const includePrivate = args.includePrivate ?? false;
|
|
4913
|
-
const cardLine = args.cardRef?.trim() ?
|
|
4914
|
+
const cardLine = args.cardRef?.trim() ? `\n\n${args.cardRef.trim()}` : "";
|
|
4914
4915
|
const checkinMessage = args.message?.trim()
|
|
4915
4916
|
? args.message.trim()
|
|
4916
|
-
: `Merge ${sourceBranch} into ${targetBranch}
|
|
4917
|
+
: `Merge ${sourceBranch} into ${targetBranch}${cardLine}`;
|
|
4917
4918
|
|
|
4918
4919
|
if (isSameBranchSpec(sourceBranch, targetBranch))
|
|
4919
4920
|
{
|
package/src/plastic-workspace.ts
CHANGED
|
@@ -84,7 +84,7 @@ export function parsePlasticSelector(content: string): ParseOutcome<PlasticSelec
|
|
|
84
84
|
|
|
85
85
|
for (const line of content.split(/\r?\n/)) {
|
|
86
86
|
if (/^\s*(?:#|$)/.test(line)) continue;
|
|
87
|
-
if (/^\s*repository(?:\s|$)/i.test(line)) repository = parseSelectorValue(line, "repository");
|
|
87
|
+
if (/^\s*(?:repository|rep)(?:\s|$)/i.test(line)) repository = parseSelectorValue(line, "(?:repository|rep)");
|
|
88
88
|
if (/^\s*smartbranch(?:\s|$)/i.test(line)) {
|
|
89
89
|
sawBranchKey = true;
|
|
90
90
|
smartBranch = parseSelectorValue(line, "smartbranch");
|