Skip to content

Commit 7768602

Browse files
withkynamclaude
andcommitted
fix(publish): ship legacyDeletions ledger + AGENTS.md task-folder convention (v3.2.1)
v3.2.0 advertised "legacyDeletions 16→23" but the kit shipped with only 16 — vc-publish bumped the manifest version and copied nothing else, silently stranding the deprecation ledger. The kit's AGENTS.md likewise still taught the deprecated reports/references sibling-dir layout. - vc-manifest.json: legacyDeletions 16→23 (the 7 reports/references stale-dir paths now ship, so downstream vc-update cleans them up as intended) - AGENTS.md: task-folder convention + safe legacy-dir migration guidance - vc-publish SKILL.md + reference: explicit manifest reconciliation — version bump + legacyDeletions auto-sync dev→kit + field-level drift report for all other fields (root-cause fix so no manifest field silently desyncs again) - README version badge + CHANGELOG 3.2.1 entry Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1 parent 8d22594 commit 7768602

6 files changed

Lines changed: 84 additions & 22 deletions

File tree

.claude/skills/vc-publish/SKILL.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,45 @@ Version bump semantics:
144144
- Absolute paths (`/Users/...`)
145145
- Product name references (the project's product name and repo/directory name)
146146
5. Verify the result is harness-only methodology with no project leaks.
147-
- Update `vc-manifest.json`: bump `version` field per the chosen bump type. **No other manifest changes needed** -- glob patterns are stable, new files are automatically included.
147+
- **Manifest reconciliation** (`vc-manifest.json`) — the manifest is NOT a normally-copied
148+
managed file (it is dev-only on one side and kit-resolved on the other), so its fields do
149+
NOT auto-sync. Handle it explicitly:
150+
1. **`version`**: bump per the chosen bump type. Kit-authoritative.
151+
2. **`legacyDeletions`** (the deprecation ledger): **dev is authoritative and always the
152+
superset.** Whenever dev removes a skill/dir/file from the harness it appends the path
153+
here so downstream projects clean it up on their next `vc-update`. Set
154+
`kit.legacyDeletions = dev.legacyDeletions` (preserve dev order). This field is a literal
155+
path array, NOT a glob — it genuinely changes every time the harness deprecates something,
156+
so it MUST be reconciled at every publish. (Historically this was skipped, which silently
157+
stranded the kit with stale deletions — never skip it.)
158+
3. **All OTHER non-version fields** (`include`, `exclude`, `strip`, `merge`, `copyIfMissing`,
159+
`symlinks`, `kitOnly`): these legitimately diverge — the kit carries packaging-only rules
160+
(e.g. excluding `**/*.test.mjs` and `__tests__/**` so tests are not shipped to users;
161+
`kitOnly` tooling like `compute-sync-plan.mjs`). **Do NOT blindly overwrite them** — a
162+
blanket dev→kit copy would strip the kit's test-excludes and ship test files. Instead run
163+
the **field-level drift report** below and reconcile any unexpected drift by hand.
164+
165+
Drift-report command (run during Step 4 summary AND here before writing):
166+
```bash
167+
node -e '
168+
const d=require("<devRepoPath>/vc-manifest.json");
169+
const k=require("<kitRepoPath>/vc-manifest.json");
170+
let drift=0;
171+
for(const key of new Set([...Object.keys(d),...Object.keys(k)])){
172+
if(key==="version") continue;
173+
if(JSON.stringify(d[key])!==JSON.stringify(k[key])){
174+
drift++;
175+
console.log("DRIFT field:",key);
176+
console.log(" dev:",JSON.stringify(d[key]));
177+
console.log(" kit:",JSON.stringify(k[key]));
178+
}
179+
}
180+
console.log(drift?("\n"+drift+" manifest field(s) drift — legacyDeletions auto-syncs dev→kit; reconcile the rest consciously."):"manifest in sync (besides version)");
181+
'
182+
```
183+
`legacyDeletions` appearing in the drift report is EXPECTED and is auto-resolved (dev→kit).
184+
Any OTHER field in the report is a conscious decision: confirm the kit value is the intended
185+
packaging rule, or update dev/kit so they converge. Never let a drift go unexamined.
148186
- Create symlinks if missing (`.agents/skills -> ../.claude/skills`).
149187

150188
### Step 8: Leak Detection
@@ -308,7 +346,14 @@ Release: https://github.com/<owner>/<repo>/releases/tag/v2.2.0
308346
309347
## Key Changes from v1.0
310348
311-
- **No manifest array maintenance.** The glob patterns in `include`/`exclude`/`kitOnly` are stable. Adding a new skill or agent requires zero manifest edits. The only manifest change at publish time is the version bump.
349+
- **Glob arrays are stable; the deprecation ledger is not.** The glob patterns in
350+
`include`/`exclude`/`kitOnly` are stable — adding a new skill or agent requires zero manifest
351+
edits (new files are auto-included by the globs). BUT `legacyDeletions` is a literal path array,
352+
not a glob: it grows every time the harness deprecates a skill/dir/file, and it MUST be
353+
reconciled dev→kit at every publish (see Step 7 Manifest reconciliation). Skipping it strands
354+
the kit with a stale deletion ledger so downstream `vc-update`s never clean up the newly
355+
deprecated dirs. So publish-time manifest edits are: (1) version bump, (2) `legacyDeletions`
356+
sync, (3) conscious reconciliation of any other field flagged by the drift report.
312357
- **Resolver-driven diffing.** The kit repo is resolved via `resolve-manifest.mjs` (which requires `vc-manifest.json` in its `--root`). The dev-side file comparison is handled inside `compute-sync-plan.mjs`, which reads the manifest from `--kit-root` (always the kit checkout). Dev repos do not carry `vc-manifest.json`.
313358
- **No `managed`/`managedDirs` arrays to update.** The old workflow of adding new files to these arrays is eliminated.
314359

.claude/skills/vc-publish/references/vc-publish.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ The `--json` output provides all metadata needed for diffing:
4242
}
4343
```
4444

45-
**Key change from v1.0:** The publish step no longer needs to update `managed`/`managedDirs` arrays in the manifest. Glob patterns are stable -- new files are automatically included. The only manifest edit at publish time is the version bump.
45+
**Key change from v1.0:** The publish step no longer needs to update `managed`/`managedDirs` arrays in the manifest. Glob patterns (`include`/`exclude`/`kitOnly`) are stable -- new files are automatically included. Manifest edits at publish time are: (1) version bump, (2) `legacyDeletions` sync dev→kit (the deprecation ledger is a literal path array, NOT a glob -- it grows on every harness deprecation and must be reconciled every publish), and (3) conscious reconciliation of any other field flagged by the Step 7 drift report. Do NOT blanket-copy the dev manifest over the kit's -- the kit carries packaging-only deltas (test-file excludes, kit-only tooling) that must survive.
4646

4747
## CLAUDE.md / AGENTS.md Content Stripping
4848

AGENTS.md

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -212,20 +212,22 @@ Feature-scoped storage for large feature clusters. Each feature folder contains:
212212
- `active/` - In-progress plans
213213
- `completed/` - Archived completed plans
214214
- `backlog/` - Deferred/future plans
215-
- `reports/` - Feature-specific operational reports
216-
- `references/` - Feature-specific research and reference documents
215+
216+
Task-folder convention:
217+
- Reports, references, specs, and plans live inside the task folder under `active/` or `completed/`
218+
- Legacy sibling `reports/` and `references/` dirs may still appear during migration, but `vc-setup` and `vc-update` should migrate safe cases into task folders and remove emptied legacy dirs
217219

218220
See `process/context/all-context.md` for current feature list.
219221

220-
Routing rule: When a feature has 5+ artifacts, store new plans/reports in
221-
`process/features/{feature}/`. General or cross-cutting items go in
222-
`process/general-plans/` with `reports/` and `references/` inside.
222+
Routing rule: When a feature has 5+ artifacts, store new plans/reports/references/specs in
223+
`process/features/{feature}/active/{slug}_{date}/` or `completed/{slug}_{date}/`.
224+
General or cross-cutting items go in equivalent task folders under `process/general-plans/`.
223225

224226
When routing to a subagent for a feature-scoped task, include `Feature: {feature-name}` in
225227
the prompt and override paths:
226228

227-
- `Reports: {work_context}/process/features/{feature}/reports/`
228229
- `Plans: {work_context}/process/features/{feature}/active/`
230+
- When the selected task folder is known, pass that exact `active/{slug}_{date}/` or `completed/{slug}_{date}/` path as the authoritative artifact location
229231

230232
#### Feature Folder Lifecycle
231233

@@ -242,24 +244,21 @@ At plan creation time, use this decision logic:
242244

243245
Promotion protocol from general to feature folder:
244246

245-
1. Create `process/features/{new-feature}/` with subdirs: `active/`, `completed/`, `backlog/`, `reports/`, `references/`
246-
2. Move related artifacts from `process/general-plans/`, including reports and references, into the new feature's subdirs
247+
1. Create `process/features/{new-feature}/` with subdirs: `active/`, `completed/`, `backlog/`
248+
2. Move related artifacts from `process/general-plans/` into the new feature's task folders; migrate safe legacy `reports/` and `references/` artifacts into those task folders and remove emptied legacy dirs
247249
3. Update the Current features list above
248250
4. Inform subagents of the new feature scope going forward
249251

250252
Feature list maintenance: The Current features list above must be updated whenever a new
251253
feature folder is created or an empty one is removed. The `vc-update-process-agent` checks for
252254
drift between `ls process/features/` and this list during Phase 2.
253255

254-
### `process/general-plans/reports/`
255-
256-
General/cross-cutting operational reports. Feature-specific reports live in
257-
`process/features/{feature}/reports/`.
258-
259-
### `process/general-plans/references/`
256+
### Legacy sibling dirs
260257

261-
General/cross-cutting research outputs. Feature-specific references live in
262-
`process/features/{feature}/references/`.
258+
`process/general-plans/reports/`, `process/general-plans/references/`,
259+
`process/features/{feature}/reports/`, and `process/features/{feature}/references/`
260+
are deprecated legacy surfaces. They should be drained into task folders when safe and
261+
removed once empty.
263262

264263
When routing to subagents, always pass relevant `process/context/` files. As new context
265264
files are added, for example UI patterns or deployment procedures, agents automatically benefit.

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
All notable changes to vibecode-pro-max-kit are documented in this file.
44

5+
## [3.2.1] - 2026-06-20
6+
7+
### Fixed
8+
9+
- `legacyDeletions` ledger now actually shipped: the kit was stranded at 16 entries while v3.2.0's changelog advertised 23. The 7 deprecated `reports/`/`references/` stale-dir paths (`process/general-plans/reports`, `process/general-plans/references`, `process/development-protocols/references`, and 4 `_seeds` reports/references paths) are now present, so a downstream `vc-update` will clean them up as intended.
10+
- `AGENTS.md` task-folder convention propagated: the kit's `AGENTS.md` still taught the deprecated `reports/`/`references/` sibling-dir layout (instructing agents to *create* those dirs). It now describes the task-folder convention and safe legacy-dir migration, matching the seed guides and `vc-setup`/`vc-update`.
11+
12+
### Changed
13+
14+
- `vc-publish` no longer silently drops non-version manifest fields. The publish flow now reconciles `vc-manifest.json` explicitly: `version` is bumped, `legacyDeletions` (the deprecation ledger — a literal path array, not a glob) is auto-synced dev→kit every publish, and all other fields run through a field-level drift report so packaging deltas (test-file excludes, kit-only tooling) are reconciled consciously instead of silently desyncing. This is the root-cause fix for the two misses above.
15+
516
## [3.2.0] - 2026-06-20
617

718
### Added

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
<a href="LICENSE"><img src="https://img.shields.io/github/license/withkynam/vibecode-pro-max-kit" alt="License"></a>
8989
<a href="https://github.com/withkynam/vibecode-pro-max-kit/graphs/contributors"><img src="https://img.shields.io/github/contributors/withkynam/vibecode-pro-max-kit" alt="Contributors"></a>
9090
<a href="https://github.com/withkynam/vibecode-pro-max-kit/actions/workflows/validate.yml"><img src="https://img.shields.io/github/actions/workflow/status/withkynam/vibecode-pro-max-kit/validate.yml" alt="CI"></a>
91-
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.2.0-2EA043" alt="Version"></a>
91+
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/version-3.2.1-2EA043" alt="Version"></a>
9292
<img src="https://img.shields.io/badge/agents-15-orange" alt="Agents">
9393
<img src="https://img.shields.io/badge/skills-33-purple" alt="Skills">
9494
<img src="https://img.shields.io/badge/hooks-10-blue" alt="Hooks">

vc-manifest.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "3.2.0",
2+
"version": "3.2.1",
33
"include": [
44
".claude/agents/**",
55
".claude/skills/**",
@@ -77,6 +77,13 @@
7777
"process/development-protocols/references/example-simple-prd.md",
7878
"process/development-protocols/intent-clarification.md",
7979
"process/development-protocols/parallel-fan-out.md",
80-
"process/development-protocols/archive/vc-system-behavior-reference_ARCHIVED_09-06-26.md"
80+
"process/development-protocols/archive/vc-system-behavior-reference_ARCHIVED_09-06-26.md",
81+
"process/general-plans/reports",
82+
"process/general-plans/references",
83+
"process/development-protocols/references",
84+
"process/_seeds/features/_feature-template/reports",
85+
"process/_seeds/features/_feature-template/references",
86+
"process/_seeds/general-plans/reports",
87+
"process/_seeds/general-plans/references"
8188
]
8289
}

0 commit comments

Comments
 (0)