Observed on specweave 1.0.591 during `specweave complete 0292 --yes` in an umbrella workspace (sw-easychamp).
Symptom: the closure logs
`[LifecycleHookDispatcher.updateDocsLinks] Feature spec missing: .specweave/docs/internal/specs/sw-easychamp/FS-292/FEATURE.md`
while the cross-project living-docs sync had actually written the specs to
`.specweave/docs/internal/specs/ec-standings-api/FS-292/` and `.../ec-console-ui/FS-292/`.
Result: cross-project increments never get their README/catalog doc links updated — the hook
warns and returns for every one of them.
Root cause (dist paths, 1.0.591):
- `src/core/hooks/LifecycleHookDispatcher.js:224` calls
`updateDocsLinks(projectRoot, syncResult.featureId, sync.getProjectId())`.
- `LivingDocsSync.getProjectId()` (`src/core/living-docs/living-docs-sync.js:88`) returns the
UMBRELLA-level project id (git-remote name → `sw-easychamp`), not the per-US resolved
projects the cross-project sync actually wrote to.
- `updateDocsLinks` then checks `specs/{umbrellaId}/{featureId}/FEATURE.md`
(`LifecycleHookDispatcher.js:383-391`), which never exists for a cross-project increment.
Suggested fix: have `syncIncrement` return the resolved target project ids on its result
(the cross-project summary already computes them — "Projects: 2, ec-standings-api / ec-console-ui"),
and loop `updateDocsLinks` over `syncResult.projectIds ?? [sync.getProjectId()]` so
single-project workspaces keep today's behaviour.
Reproduction: any umbrella workspace increment whose user stories carry `Project:`
fields pointing at child repos; close it and watch stderr.
Observed on specweave 1.0.591 during `specweave complete 0292 --yes` in an umbrella workspace (sw-easychamp).
Symptom: the closure logs
`[LifecycleHookDispatcher.updateDocsLinks] Feature spec missing: .specweave/docs/internal/specs/sw-easychamp/FS-292/FEATURE.md`
while the cross-project living-docs sync had actually written the specs to
`.specweave/docs/internal/specs/ec-standings-api/FS-292/` and `.../ec-console-ui/FS-292/`.
Result: cross-project increments never get their README/catalog doc links updated — the hook
warns and returns for every one of them.
Root cause (dist paths, 1.0.591):
`updateDocsLinks(projectRoot, syncResult.featureId, sync.getProjectId())`.
UMBRELLA-level project id (git-remote name → `sw-easychamp`), not the per-US resolved
projects the cross-project sync actually wrote to.
(`LifecycleHookDispatcher.js:383-391`), which never exists for a cross-project increment.
Suggested fix: have `syncIncrement` return the resolved target project ids on its result
(the cross-project summary already computes them — "Projects: 2, ec-standings-api / ec-console-ui"),
and loop `updateDocsLinks` over `syncResult.projectIds ?? [sync.getProjectId()]` so
single-project workspaces keep today's behaviour.
Reproduction: any umbrella workspace increment whose user stories carry `Project:`
fields pointing at child repos; close it and watch stderr.