feat(integration): add status reporting by PascalThuet · Pull Request #2674 · github/spec-kit (original) (raw)

AI review requested due to automatic review settings

May 22, 2026 07:20

Copilot AI review requested due to automatic review settings

May 22, 2026 08:14

Copilot AI review requested due to automatic review settings

May 26, 2026 15:47

@PascalThuet PascalThuet changed the titlefeat(integration): add doctor diagnostics feat(integration): add status reporting

May 26, 2026

Copilot AI review requested due to automatic review settings

May 26, 2026 16:12

mnriem

Copilot AI review requested due to automatic review settings

May 27, 2026 20:52

Copilot AI review requested due to automatic review settings

May 28, 2026 14:34

mnriem

@PascalThuet

@PascalThuet

@PascalThuet @claude

…ainment

On Windows, os.readlink() (and sometimes Path.resolve()) return paths with the \?\ extended-length prefix. Comparing such a target against a plain project root via Path.relative_to() spuriously fails, so an in-project dangling symlink was classified as invalid instead of missing — failing test_status_treats_dangling_symlink_as_missing and the windows-style variant on the Windows CI runners.

Centralize the containment check in _is_within_project() and strip the \?\ / \?\UNC\ prefix from both sides before relative_to(). Add portable regression tests for the prefix-stripping helper and the containment contract.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

@PascalThuet

Co-authored-by: Copilot Autofix powered by AI 175728472+Copilot@users.noreply.github.com

@PascalThuet @claude

A three-way merge / rebase onto main silently dropped the module-level import pytest from test_integration_subcommand.py: main reorganized the import block without it (using only a local import pytest as _pytest), while this branch added top-level fixtures and pytest.skip/pytest.raises usage. The overlapping import-hunk edits resolved by dropping the import, breaking collection with NameError: name 'pytest' is not defined on every runner. Re-add the import in the third-party group.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

@PascalThuet @claude

test_strip_extended_length_prefix_normalizes_windows_paths compared the str() form of the helper's output against a hand-built string. On Windows, pathlib renders a UNC root with a trailing separator (\\server\share\), so the exact string match failed there (\\server\share\ != \\server\share) even though _strip_extended_length_prefix behaves correctly — the trailing separator is irrelevant to the relative_to containment check it feeds.

Compare Path objects (semantic equality) instead of exact strings so the assertion holds on both POSIX and Windows. No production code change needed.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

@PascalThuet @claude

The fallback _manifest_suggestion for the shared speckit manifest (used when no usable default integration is recorded) suggested specify init --here --force, which can trigger interactive integration selection. For CI/agent consumers of integration status, surface an explicit --integration <key> placeholder, matching the file's existing <key> suggestion style.

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters

[ Show hidden characters]({{ revealButtonHref }})