Skip to content

Commit 1dfc685

Browse files
committed
Record upstream follow-up completion plan
1 parent 3036e19 commit 1dfc685

67 files changed

Lines changed: 575 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
# CP90 Follow-up Completion Plan
2+
3+
Date: 2026-09-09
4+
5+
This plan closes the five upstream-follow-up workstreams whose durable
6+
completion records were blocked or partial. It is based on CP89 plus the
7+
selective upstream integration commit 3036e195, and does not authorize
8+
merging MCP frontend code or pushing worker branches.
9+
10+
## Current status
11+
12+
| Workstream | Worker result | Implementation evidence | Evidence gap |
13+
| --- | --- | --- | --- |
14+
| YAML removal guards | blocked | 523d398d; Windows-gated reparse-point and access-denied tests; 64 YAML tests passed | Native Windows execution; completion sidecar was initially read-only |
15+
| Version-cohort handoff | blocked | 01af5cb2; distinct cache-root handoff and Windows separator-form tests | Runtime assertions could not create secure temp roots via cbm_mkdtemp |
16+
| Complexity determinism | partial | 43d3a210; production build and changed objects compiled | Focused pipeline suite was interrupted while generated grammar objects stalled |
17+
| Razor / .cshtml | blocked | 5b1bc085; .cshtml language mapping, route extraction, and three regressions; 562 language/extraction tests passed | Completion sidecar was not finalized; native Windows is not required for this feature |
18+
| Embedded Svelte/HTML/Astro | partial | f8971e7a; implementation and focused tests committed; whitespace check passed | Test runner link failed on missing SQLite symbols, so extraction suites did not execute |
19+
20+
The separate complexity-r2 run is not a sixth task. It only rechecked the
21+
complexity fixture and was blocked while writing its completion sidecar; its
22+
fixture identity check passed.
23+
24+
## Completion sequence
25+
26+
### 1. Normalize the isolated worker results
27+
28+
Use disposable worktrees based on 3036e195 and apply worker commits as review
29+
inputs, not as unconditional cherry-picks:
30+
31+
YAML 523d398d
32+
cohort 01af5cb2
33+
complexity 43d3a210
34+
Razor 5b1bc085
35+
embedded f8971e7a
36+
37+
For each worktree:
38+
39+
- verify the commit parent and changed-file list;
40+
- reject src/mcp, MCP tests, and unrelated release-tooling changes;
41+
- run git diff --check;
42+
- preserve the CP89 release-provenance surface;
43+
- retain the worker completion record, even when its status was blocked by
44+
workflow permissions rather than code.
45+
46+
Do not merge these commits directly into the dirty checkout until each gate
47+
below passes.
48+
49+
### 2. Finish complexity evidence
50+
51+
Worktree: 43d3a210.
52+
53+
Run:
54+
55+
scripts/build-dev.sh
56+
bash scripts/test.sh --suites pipeline
57+
58+
If generated grammar compilation stalls again, build the test runner with the
59+
repository's normal cached incremental path, capture the exact stalled target,
60+
and retry once in a clean disposable worktree. Do not weaken the grammar build
61+
or disable sanitizers.
62+
63+
Before acceptance, add or verify a duplicate-key cyclic fixture covering equal
64+
qualified name, file path, start line, end line, name, and label. Ensure the
65+
test checks allocation before freeing the signature. This addresses Terra's
66+
remaining determinism concern.
67+
68+
Acceptance: pipeline suite green, duplicate-key fixture present, no sanitizer
69+
error, and production incremental build green.
70+
71+
### 3. Finish version-cohort evidence
72+
73+
Worktree: 01af5cb2.
74+
75+
Run the focused suite in an environment where cbm_mkdtemp is permitted to
76+
create its secure private root:
77+
78+
bash scripts/test.sh --suites version_cohort
79+
80+
Then run the daemon/application handoff tests that exercise the same cache-root
81+
identity path. Native Windows must execute the separator-form case; Linux
82+
cannot substitute for that result.
83+
84+
Acceptance: distinct cache-root holder/waiter handoff passes, Windows
85+
slash/backslash normalization passes, finite-deadline conflict retry remains
86+
bounded, and no MCP source is present.
87+
88+
### 4. Finish YAML evidence
89+
90+
Worktree: 523d398d.
91+
92+
Run:
93+
94+
bash scripts/test.sh --suites config_yaml_edit
95+
96+
On a native Windows runner, execute the reparse-point and access-denied cases
97+
with Developer Mode or symlink privilege explicitly recorded. Confirm that
98+
access-denied targets fail closed, dangling links are not treated as absent,
99+
and no lock sidecar or target mutation occurs after refusal.
100+
101+
Acceptance: Linux focused suite green, Windows-gated tests execute rather than
102+
silently skip except for explicitly recorded platform privilege, and
103+
check-no-test-skips.sh remains green.
104+
105+
### 5. Finish Razor evidence
106+
107+
Worktree: 5b1bc085.
108+
109+
Run:
110+
111+
bash scripts/test.sh --suites language,extraction
112+
113+
Confirm .cshtml maps to C#, @page produces a GET route, .razor behavior is
114+
unchanged, and a layout without @page produces no route. Preserve the current
115+
CP89 .frm/.cls VB6 disambiguation in src/discover/language.c.
116+
117+
Acceptance: language and extraction suites green, no unrelated grammar
118+
classification changes, and no MCP files or tests added.
119+
120+
### 6. Finish embedded extraction evidence
121+
122+
Worktree: f8971e7a.
123+
124+
First repair the test-runner link invocation in the disposable worktree; the
125+
worker's reported missing SQLite symbols indicate an incomplete link set, not
126+
an extraction assertion. Use the same Makefile.cbm target and library list as
127+
the current repository test runner rather than adding a new dependency.
128+
129+
Run:
130+
131+
bash scripts/test.sh --suites extraction,edge_structural,grammar_labels
132+
133+
Review the behavior change carefully:
134+
135+
- JavaScript/module blocks extract definitions, imports, and calls;
136+
- src=, JSON, importmap, and other non-JavaScript blocks remain inert;
137+
- Svelte and Astro label goldens intentionally change;
138+
- Astro frontmatter's TypeScript default is an explicit contract change.
139+
140+
Acceptance requires all three focused suites to link and pass, existing Vue
141+
negative controls to remain valid, and graph-count/label deltas to be
142+
intentional and documented. If the link failure cannot be repaired without
143+
changing the fork's test infrastructure, defer this feature rather than
144+
claiming validation.
145+
146+
### 7. Final integration gate
147+
148+
After all five workstreams have independently passed their gates, apply only
149+
the accepted commits to a clean CP89-derived integration worktree in this
150+
order:
151+
152+
1. 523d398d YAML evidence closeout
153+
2. 01af5cb2 cohort evidence closeout
154+
3. 43d3a210 complexity evidence closeout
155+
4. 5b1bc085 Razor evidence closeout
156+
5. f8971e7a embedded extraction evidence closeout
157+
158+
Then run:
159+
160+
git diff --check
161+
scripts/build-dev.sh
162+
bash scripts/test.sh --suites cli,config_yaml_edit,version_cohort,language,extraction,edge_structural,grammar_labels,pipeline
163+
bash scripts/test.sh --suites mem
164+
165+
Run the clean full venue gate only after the focused gates pass. Native Windows
166+
qualification is required for Windows-specific claims. Commit the accepted
167+
integration as a separate release-tooling change; do not push until the full
168+
gate and release review are green.
169+
170+
## Explicit deferrals
171+
172+
- 92725a5e remains excluded: it is a Windows MCP stdio-server watchdog, not a
173+
CLI process behavior.
174+
- c1b9c451 remains excluded as a direct port; its MCP session adapter is
175+
obsolete. Any 9846c3f1 separator-equivalence behavior requires a separate
176+
neutral daemon implementation and test.
177+
- 24f54c0e is provisionally implemented in f8971e7a, but acceptance is blocked
178+
on complete focused-suite linkage and review of the intentional graph/label
179+
behavior changes. Revert or defer it if those gates cannot be met.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p00_b import pair00_b
2+
3+
def pair00_a(n):
4+
for _ in range(n):
5+
pass
6+
return pair00_b(n - 1)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p00_a import pair00_a
2+
3+
def pair00_b(n):
4+
if n <= 0:
5+
return 0
6+
return pair00_a(n)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p01_b import pair01_b
2+
3+
def pair01_a(n):
4+
for _ in range(n):
5+
pass
6+
return pair01_b(n - 1)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p01_a import pair01_a
2+
3+
def pair01_b(n):
4+
if n <= 0:
5+
return 0
6+
return pair01_a(n)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p02_b import pair02_b
2+
3+
def pair02_a(n):
4+
for _ in range(n):
5+
pass
6+
return pair02_b(n - 1)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p02_a import pair02_a
2+
3+
def pair02_b(n):
4+
if n <= 0:
5+
return 0
6+
return pair02_a(n)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p03_b import pair03_b
2+
3+
def pair03_a(n):
4+
for _ in range(n):
5+
pass
6+
return pair03_b(n - 1)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p03_a import pair03_a
2+
3+
def pair03_b(n):
4+
if n <= 0:
5+
return 0
6+
return pair03_a(n)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from p04_b import pair04_b
2+
3+
def pair04_a(n):
4+
for _ in range(n):
5+
pass
6+
return pair04_b(n - 1)

0 commit comments

Comments
 (0)