Skip to content

docs(plan): diff-level roadmap for the Windows issue sweep stack (L0) - #146

Merged
lidge-jun merged 4 commits into
devfrom
codex/win-sweep-roadmap
Sep 11, 2026
Merged

lidge-jun merged 4 commits into
devfrom
codex/win-sweep-roadmap

Conversation

@lidge-jun

Copy link
Copy Markdown
Owner

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:

doc covers
000_plan.md objective, constraints, stack topology, work-phase map, criteria, verification contract
010 wp2 / L1 / #131 provider-bridge Windows detect
020 wp3 / L2 / #134 session-binding extended-length cwd
030 wp4 / L3 / #132 --help argv passthrough
040 wp5 / L4 / #133 non-git early refusal
045 wp8 / L5 / #109 split-cwd source separation
050 wp6 / L6 corpus sweep
060 wp7 integration, merge, release, reinstall

Each 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.

layer branch base issue
L0 codex/win-sweep-roadmap dev this PR
L1 codex/fix-ocx-windows-detect L0 #131
L2 codex/fix-session-binding-extended-path L1 #134
L3 codex/fix-config-guard-help L2 #132
L4 codex/fix-nongit-early-refusal L3 #133
L5 codex/fix-split-cwd-source L4 #109
L6 codex/windows-landmine-sweep L5 sweep

Three findings that changed the plan

These are not restatements of the issues; each contradicts something previously believed.

  1. cxc session current/bind: Cannot resolve native session working directory on Codex desktop (Windows) #134 is not a database lookup failure. All 77 thread rows on the reporting host store cwd with the extended-length prefix, and session-binding.ts uses the JS realpathSync, which throws EISDIR lstat 'C:' on that shape. session-source.ts:17 already uses realpathSync.native. The issue's own hypothesis is disproved, and the regression test must use the prefix rather than 8.3 short names.
  2. receipt test가 비-git cwd에서 receipt를 못 만들어 goalplan 바인딩 세션이 C에서 막힘 #109's stated cause is inverted. --cwd already reaches git via captureSessionSourceIdentity, 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.
  3. provider-bridge가 Windows에서 ocx를 항상 error로 판정 — where 첫 줄(확장자 없는 shim) 선택 + shell 없이 .cmd spawn #131 has three more live copies. A fuck-powershell corpus preflight found the same bug in gui/src/server/middleware.ts:75,79 and messenger-bridge/src/api-compat.ts:40,45. Fixing only provider-bridge would leave the GUI and cxc serve provider endpoints reporting error. 060 additionally records that scripts/dev-install.sh reads the manifest with python3, which blocks the reinstall on a Windows host with no Python.

Audit

An independent xai/grok-4.6 reviewer 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 overstated dist ordering rationale. All were folded, none rebutted. Revision 2 returned NEAR-PASS; its residual was goalplan control-surface drift, closed with a drift notice and two loop steer annotations.

Verification

plan-unit check: 6 passed, 0 failed
npm gate: OK — no status drift, false-enforcement prose, count mismatch, or inventory drift

.codexclaw/check-plan-unit.mjs enforces LEXICO-SPLIT-01 numbering, existence and a size floor for every decade doc named in 000_plan.md, a code-fence and criterion-citation floor per document so a scaffolded outline cannot pass, that every cited c-id exists among the 12 registered goalplan criteria, and that every registered work phase is named in the unit.

Note on enforce-target

Later layers in this chain target their parent branch, so enforce-pr-target will flag them [WRONG BRANCH]. That is expected for a manual chain and must not be "fixed" by retargeting a layer at dev — that would collapse the chain into overlapping diffs. This PR itself targets dev and passes.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 11, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-11T11:07:19.468625Z 14aa3f2 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 11, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 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".

Comment on lines +107 to +109
function nativeGitIdentity(cwd: string): { root: string; commonDir: string; gitDir: string } | null {
try { return gitIdentity(cwd); } catch { return null; }
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge 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 👍 / 👎.

Comment on lines +143 to +146
// 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.");

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge 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 👍 / 👎.

@lidge-jun
lidge-jun merged commit ee03d5b into dev Sep 11, 2026
13 checks passed
@lidge-jun
lidge-jun deleted the codex/win-sweep-roadmap branch September 11, 2026 13:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant