Skip to content

updateDocsLinks checks the umbrella project instead of the resolved per-US projects #1925

Description

@anton-abyzov

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions