Problem
The artifact chain (CONTEXT.md → SPEC.md → NAVIGATION.md) can span days, but nothing re-checks that the codebase landscape held. On an active repo where concurrent PRs land between phases, CONTEXT.md written by vine:verify silently goes stale, and vine:inquire / vine:navigate then plan against a codebase that no longer exists. This is the dominant brownfield failure mode, and the design currently has no guard for it: codebase facts are deliberately regenerate-on-demand (good), but there's no trigger to regenerate at the right moments.
The repo already feels this — parallel sessions landing work concurrently is a known hazard.
Suggestion
A lightweight "refresh against current main" checkpoint at phase boundaries — at minimum when vine:inquire starts and when vine:navigate resumes/starts a new phase group:
- Detect drift cheaply: has main moved since CONTEXT.md was written? (timestamp/SHA recorded at verify time vs. now;
git log on the touched areas.)
- If drift touches the feature's areas, surface it and offer to re-run the relevant slice of verify rather than silently proceeding. If main hasn't moved, no-op (no friction on the common solo case).
Mechanism, not just prose: record the base SHA at verify time so the staleness check is mechanical. Backward-compatible — absence of a recorded base SHA falls back to today's behavior (no check).
Problem
The artifact chain (CONTEXT.md → SPEC.md → NAVIGATION.md) can span days, but nothing re-checks that the codebase landscape held. On an active repo where concurrent PRs land between phases, CONTEXT.md written by
vine:verifysilently goes stale, andvine:inquire/vine:navigatethen plan against a codebase that no longer exists. This is the dominant brownfield failure mode, and the design currently has no guard for it: codebase facts are deliberately regenerate-on-demand (good), but there's no trigger to regenerate at the right moments.The repo already feels this — parallel sessions landing work concurrently is a known hazard.
Suggestion
A lightweight "refresh against current main" checkpoint at phase boundaries — at minimum when
vine:inquirestarts and whenvine:navigateresumes/starts a new phase group:git logon the touched areas.)Mechanism, not just prose: record the base SHA at verify time so the staleness check is mechanical. Backward-compatible — absence of a recorded base SHA falls back to today's behavior (no check).