Skip to content

Commit f7a4afd

Browse files
chore(release): prepare 0.2.5 — sync registry 0.2.4, new changeset, watch coverage timeouts
Align package.json and CHANGELOG with npm 0.2.4; remove consumed changeset; add patch changeset for README/ROADMAP/hook updates. Raise watch unit vi.waitFor timeouts so pnpm test:coverage stays green. Record the coverage timing lesson. Made-with: Cursor
1 parent 0f0b4df commit f7a4afd

6 files changed

Lines changed: 18 additions & 11 deletions

File tree

.changeset/release-0-2-4.md

Lines changed: 0 additions & 5 deletions
This file was deleted.

.changeset/release-0-2-5.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"agentsmesh": patch
3+
---
4+
5+
Expand the project README, add `ROADMAP.md`, and fix the sample Claude Code PostToolUse hook to use `type: prompt` with a `prompt` field instead of an invalid command-style hook after reads.

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 0.2.4
4+
5+
### Patch Changes
6+
7+
- 98bf8cb: Preserve nested canonical import paths and placeholder metadata; keep nested command picks and Cline workflow exclusions when installing packs; import Cline MCP settings from legacy `.cline/mcp_settings.json` when `cline_mcp_settings.json` is absent; refresh default `.gitignore` patterns for AgentsMesh cache and lock temp files.
8+
39
## 0.2.3
410

511
### Patch Changes

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "agentsmesh",
3-
"version": "0.2.3",
3+
"version": "0.2.4",
44
"description": "One canonical source for AI coding agent rules, commands, skills, MCP, hooks, and permissions — synced across Claude Code, Cursor, Copilot, Continue, Junie, Gemini CLI, Cline, Codex CLI, and Windsurf.",
55
"type": "module",
66
"main": "./dist/cli.js",

tasks/lessons.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,4 @@
8383
- **Auxiliary rule folders must not duplicate a target's primary root file unless the spec explicitly asks for it**: I initially mirrored Codex `_root.md` into `.codex/instructions/` even though Codex already uses `AGENTS.md` as the main instruction file and the user only wanted additional rules there. Root cause: I interpreted "all canonical rules" literally instead of preserving the target's established root surface and the user's scope correction. Rule: when adding a secondary rule projection folder for a target with an existing primary root file, default to mirroring only non-root/additional rules unless the spec explicitly requires a root duplicate.
8484
- **Dist-backed e2e and integration runs require a rebuild before trusting failures**: I fixed the Gemini importer in `src/` and kept seeing the old failure because the e2e harness executes `dist/cli.js`, not the source tree directly. Root cause: I reran targeted dist-backed tests after source edits without rebuilding, so I was debugging stale output instead of the current code. Rule: after any CLI behavior change, run `pnpm build` before interpreting e2e or integration results that invoke `dist/cli.js`.
8585
- **User corrections about target-native filenames must override stale repo assumptions everywhere**: The repo still used `.cline/mcp_settings.json` across code, tests, and docs after the user clarified that Cline should use `cline_mcp_settings.json`. Root cause: target-native filename assumptions had drifted and were repeated in multiple layers without one explicit correction pass. Rule: when a user corrects a target-native path or filename, update the constant first and then sweep generators, importers, stale-cleanup, tests, and docs in the same change so the contract cannot stay split-brained.
86+
- **Watch `vi.waitFor` thresholds must survive `pnpm test:coverage`**: `runMatrix` and `Regenerated.` assertions in `watch.test.ts` passed under plain `pnpm test` but timed out at 3000 ms when the same suite ran with coverage instrumentation. Root cause: coverage slows the process enough that chokidar debounce plus generate occasionally exceeded the minimum wait budget. Rule: keep watch unit `vi.waitFor` timeouts comfortably above 3000 ms (for example 8000 ms) and idle-stability delays at least 3000 ms when those tests must gate release prep and CI coverage.

tests/unit/cli/commands/watch.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ describe('runWatch', () => {
7474
join(testDir, '.agentsmesh', 'rules', 'new.md'),
7575
'---\ndescription: "New"\n---\n# New',
7676
);
77-
await vi.waitFor(() => expect(runMatrixSpy).toHaveBeenCalled(), { timeout: 3000 });
77+
await vi.waitFor(() => expect(runMatrixSpy).toHaveBeenCalled(), { timeout: 8000 });
7878
runMatrixSpy.mockRestore();
7979
await result!.stop();
8080
});
@@ -103,7 +103,7 @@ features: [rules, permissions]
103103
join(testDir, '.agentsmesh', 'rules', 'new.md'),
104104
'---\ndescription: "New"\n---\n# New',
105105
);
106-
await vi.waitFor(() => expect(runMatrixSpy).toHaveBeenCalled(), { timeout: 3000 });
106+
await vi.waitFor(() => expect(runMatrixSpy).toHaveBeenCalled(), { timeout: 8000 });
107107
runMatrixSpy.mockRestore();
108108
await result!.stop();
109109
});
@@ -123,7 +123,7 @@ description: "Project rules"
123123
- Added one line (same rule count)
124124
`,
125125
);
126-
await vi.waitFor(() => expect(infoSpy).toHaveBeenCalledWith('Regenerated.'), { timeout: 3000 });
126+
await vi.waitFor(() => expect(infoSpy).toHaveBeenCalledWith('Regenerated.'), { timeout: 8000 });
127127
expect(runMatrixSpy).not.toHaveBeenCalled();
128128
runMatrixSpy.mockRestore();
129129
infoSpy.mockRestore();
@@ -143,14 +143,14 @@ description: "Project rules"
143143
expect(
144144
infoSpy.mock.calls.filter(([message]) => message === 'Regenerated.').length,
145145
).toBeGreaterThanOrEqual(1),
146-
{ timeout: 3000 },
146+
{ timeout: 8000 },
147147
);
148148

149149
const regenCountAfterStartup = infoSpy.mock.calls.filter(
150150
([message]) => message === 'Regenerated.',
151151
).length;
152152

153-
await new Promise((resolve) => setTimeout(resolve, 2000));
153+
await new Promise((resolve) => setTimeout(resolve, 3000));
154154

155155
expect(infoSpy.mock.calls.filter(([message]) => message === 'Regenerated.').length).toBe(
156156
regenCountAfterStartup,

0 commit comments

Comments
 (0)