Skip to content

fix(agent-context): recurse for nested plans in Python mtime fallback - #3757

Open
Quratulain-bilal wants to merge 1 commit into
github:mainfrom
Quratulain-bilal:fix/agent-context-py-nested-plans
Open

fix(agent-context): recurse for nested plans in Python mtime fallback#3757
Quratulain-bilal wants to merge 1 commit into
github:mainfrom
Quratulain-bilal:fix/agent-context-py-nested-plans

Conversation

@Quratulain-bilal

Copy link
Copy Markdown
Contributor

Fixes #3733

Problem

The agent-context Python port's mtime fallback discovered plans with a one-level glob:

(root / "specs").glob("*/plan.md")

So a scoped layout created via SPECIFY_FEATURE_DIRECTORYspecs/<scope>/<feature>/plan.md, which sits two levels below specs/ — was missed whenever feature.json is absent. The fallback returned no plan, and the managed context section omitted its at <plan> line.

The bash and PowerShell twins were already fixed to recurse in #3024 (their comments explicitly call out "rather than the old one-level specs/*/plan.md scan"); the Python twin was left behind, so the three drifted out of parity.

Fix

Switch to specs.rglob("plan.md") with the same symlink-safe containment check the bash twin uses: resolve each candidate and confirm it stays within the project root before ranking by mtime. This keeps a plan reached through a specs/ symlink pointing outside the project from being selected (the lexical relative_to alone would accept it).

Tests

Adds two parity regression tests covering a nested specs/<scope>/<feature>/plan.md with no feature.json:

  • vs bash (@requires_posix_bash, runs in CI)
  • vs PowerShell (runs on the Windows runner)

Both fail on the pre-fix one-level glob and pass after. Verified locally on Windows: the PowerShell-parity test fails without the fix (Python omits the nested plan, diverging from PowerShell) and passes with it.

The Python port's mtime fallback discovered plans with a one-level
specs/*/plan.md glob, so a scoped layout created via
SPECIFY_FEATURE_DIRECTORY (specs/<scope>/<feature>/plan.md) was missed when
feature.json is absent — the fallback returned no plan and the managed
context section omitted the 'at <plan>' line. The bash and PowerShell twins
were already fixed to recurse (github#3024); the Python twin was left behind.

Switch to specs.rglob('plan.md') with the same symlink-safe containment check
the bash twin uses (resolve each candidate and confirm it stays within the
project root before ranking by mtime), so a plan reached through a specs/
symlink pointing outside the project is not selected.

Adds parity regression tests (vs bash and vs PowerShell) covering a nested
specs/<scope>/<feature>/plan.md; both fail on the pre-fix one-level glob.

Fixes github#3733

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Fixes nested plan discovery parity in the agent-context Python port.

Changes:

  • Recursively discovers plan.md files with symlink-safe containment.
  • Adds Bash and PowerShell parity tests for nested plans.
Show a summary per file
File Description
extensions/agent-context/scripts/python/update_agent_context.py Implements recursive plan discovery.
tests/extensions/test_update_agent_context_python_parity.py Adds nested-layout parity coverage.

Review details

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 2/2 changed files
  • Comments generated: 2
  • Review effort level: Medium

Comment on lines +184 to +185
return p.resolve().relative_to(root)
except (OSError, ValueError):
Comment on lines +188 to +191
# Recurse (rather than the old one-level specs/*/plan.md glob) so scoped
# layouts created via SPECIFY_FEATURE_DIRECTORY, e.g.
# specs/<scope>/<feature>/plan.md, are still discovered when
# feature.json is absent (#3024). Mirrors the bash and PowerShell twins.

@mnriem mnriem left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address Copilot feedback and fix test & lint errors

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: agent-context Python port misses nested plans (one-level glob), a parity regression of #3024

3 participants