Repository navigation
docs(plan): diff-level roadmap for the Windows issue sweep stack (L0) - #146
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 14aa3f213b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| function nativeGitIdentity(cwd: string): { root: string; commonDir: string; gitDir: string } | null { | ||
| try { return gitIdentity(cwd); } catch { return null; } | ||
| } |
There was a problem hiding this comment.
Distinguish a non-repository from Git identity failures
When the native cwd is a Git worktree but gitIdentity() fails for another reason (for example permissions, corruption, or a transient Git failure), this catch classifies it as a non-Git directory. The widened guard then skips the existing same-repository/different-worktree checks and permits an unrelated repository to become the receipt source, weakening the evidence-binding invariant. Only the specific “not a repository” result should return null; other identity failures should remain fail-closed.
Useful? React with 👍 / 👎.
| // siblings and silently widen what the receipt certifies. | ||
| const fsmArtifacts = canonical(cwd); | ||
| if (fsmArtifacts === sourceRoot || fsmArtifacts.startsWith(sourceRoot + sep)) { | ||
| throw new Error("Source root must not contain the session's own working directory; bind the repository itself, not an ancestor of it."); |
There was a problem hiding this comment.
Handle filesystem-root source paths in the ancestor guard
If the selected Git source is a filesystem root such as C:\ or /, appending sep produces C:\\ or //, so a nested FSM cwd does not satisfy this prefix test. Such a root repository can therefore contain the FSM directory while bypassing the explicit ancestor rejection, allowing .codexclaw churn and unrelated siblings into the certified tree. Use a boundary-aware containment check that handles roots, such as one based on relative().
Useful? React with 👍 / 👎.
|
|
||
| Layer: L6. Branch: `codex/windows-landmine-sweep`. Base: L5 `codex/fix-split-cwd-source` (after L1–L5). Work-phase: wp6. Criteria: **c-11** (every risk=high corpus finding in this stack) and the "every copy" clause of **c-9** (GUI + serve provider endpoints report provider, never error from the #131 spawn bugs). | ||
|
|
||
| Scope is the six-row table in `000_plan.md` "Corpus sweep scope". Do not expand it. Deferred (risk=medium, out of this issue set — do not touch): `messenger-bridge/src/service.ts:245` BOM-less `.cmd`; `payload-bin.test.mjs:72` and `live-catalog.test.ts:79` colon-PATH fixtures. |
There was a problem hiding this comment.
Include the installer fix in the declared L6 scope
This instruction limits L6 to the six-row preflight table and says not to expand it, while the same document later adds Row 7 for scripts/dev-install.sh; that script is also absent from the preceding change list. Following the declared scope therefore omits the Python-to-Node fix even though §060 identifies it as a prerequisite for the required reinstall and c-12, leaving integration blocked. Update the scope and change inventory to explicitly include Row 7.
Useful? React with 👍 / 👎.
Layer L0 of the Windows issue sweep stack. Docs only — no production code changes.
Locks the diff-level roadmap for every later layer before any implementation cycle starts, as LOOP-DOCS-FIRST-01 requires.
Contents
devlog/_plan/260911_windows_issue_sweep/— 8 numbered documents:000_plan.md010020030--helpargv passthrough040045050060Each decade doc carries before/after blocks quoted from the current files, a reproduction that fails on the parent commit and passes on the layer head, a regression paragraph, and its criterion id.
Stack
Bottom to top, merge bottom-up. Manual branch chain, not a registered GitHub stack.
codex/win-sweep-roadmapdevcodex/fix-ocx-windows-detectcodex/fix-session-binding-extended-pathcodex/fix-config-guard-helpcodex/fix-nongit-early-refusalcodex/fix-split-cwd-sourcecodex/windows-landmine-sweepThree findings that changed the plan
These are not restatements of the issues; each contradicts something previously believed.
cwdwith the extended-length prefix, andsession-binding.tsuses the JSrealpathSync, which throwsEISDIR lstat 'C:'on that shape.session-source.ts:17already usesrealpathSync.native. The issue's own hypothesis is disproved, and the regression test must use the prefix rather than 8.3 short names.--cwdalready reaches git viacaptureSessionSourceIdentity, which is exactly why git fails there. receipt test가 비-git cwd에서 receipt를 못 만들어 goalplan 바인딩 세션이 C에서 막힘 #109 needs source-cwd separation, so it cannot close with 비-git 워크스페이스에서 goalplan 바인딩 루프가 C에 영구 정지 — receipt test가 git 없이는 receipt를 못 쓴다 (+ 전이마다 git fatal 유출) #133 — it gets its own layer and its own positive-path criterion.fuck-powershellcorpus preflight found the same bug ingui/src/server/middleware.ts:75,79andmessenger-bridge/src/api-compat.ts:40,45. Fixing onlyprovider-bridgewould leave the GUI andcxc serveprovider endpoints reporting error.060additionally records thatscripts/dev-install.shreads the manifest withpython3, which blocks the reinstall on a Windows host with no Python.Audit
An independent
xai/grok-4.6reviewer audited the roadmap twice. Revision 1 returned FAIL on one blocker — #109 was listed in a layer but neither scoped nor gated, so locking the map would have let a fail-early non-git refusal falsely close it — plus seven concerns including four gameable criteria and an overstateddistordering rationale. All were folded, none rebutted. Revision 2 returned NEAR-PASS; its residual was goalplan control-surface drift, closed with a drift notice and twoloop steerannotations.Verification
.codexclaw/check-plan-unit.mjsenforces LEXICO-SPLIT-01 numbering, existence and a size floor for every decade doc named in000_plan.md, a code-fence and criterion-citation floor per document so a scaffolded outline cannot pass, that every citedc-idexists among the 12 registered goalplan criteria, and that every registered work phase is named in the unit.Note on
enforce-targetLater layers in this chain target their parent branch, so
enforce-pr-targetwill flag them[WRONG BRANCH]. That is expected for a manual chain and must not be "fixed" by retargeting a layer atdev— that would collapse the chain into overlapping diffs. This PR itself targetsdevand passes.