From c823ae9bf881573df2dfa4cdd61b5c773cac6090 Mon Sep 17 00:00:00 2001 From: lidge-jun Date: Tue, 8 Sep 2026 04:19:30 +0900 Subject: [PATCH] docs(devlog): close the C track config/init stack unit The stack landed on dev as 6188458ae, so the roadmap and the carried init-guidance unit move to _fin/ with a terminal outcome record. 050_outcome.md keeps what the delivery actually taught: the tip-only CI mechanism worked because no pull request was opened for the lower layers, not because they were drafts; the stale-base rule earned itself back when dev moved twice mid-delivery; and the one CI failure was a 15-second PID-poll deadline in an unrelated probe test, diagnosed as a flake by non-reproducibility rather than by a proven mechanism. It also records the three src/lab exclusive opens left out of scope. --- .../010_implementation.md | 0 .../000_plan.md | 0 .../010_layer1_atomic_write.md | 0 .../020_layer2_initialize_flag.md | 0 .../030_layer3_init_guidance.md | 0 .../040_layer4_landing.md | 0 .../050_outcome.md | 82 +++++++++++++++++++ 7 files changed, 82 insertions(+) rename devlog/{_plan => _fin}/260907_init_publication_guidance/010_implementation.md (100%) rename devlog/{_plan => _fin}/260908_c_track_config_init_stack/000_plan.md (100%) rename devlog/{_plan => _fin}/260908_c_track_config_init_stack/010_layer1_atomic_write.md (100%) rename devlog/{_plan => _fin}/260908_c_track_config_init_stack/020_layer2_initialize_flag.md (100%) rename devlog/{_plan => _fin}/260908_c_track_config_init_stack/030_layer3_init_guidance.md (100%) rename devlog/{_plan => _fin}/260908_c_track_config_init_stack/040_layer4_landing.md (100%) create mode 100644 devlog/_fin/260908_c_track_config_init_stack/050_outcome.md diff --git a/devlog/_plan/260907_init_publication_guidance/010_implementation.md b/devlog/_fin/260907_init_publication_guidance/010_implementation.md similarity index 100% rename from devlog/_plan/260907_init_publication_guidance/010_implementation.md rename to devlog/_fin/260907_init_publication_guidance/010_implementation.md diff --git a/devlog/_plan/260908_c_track_config_init_stack/000_plan.md b/devlog/_fin/260908_c_track_config_init_stack/000_plan.md similarity index 100% rename from devlog/_plan/260908_c_track_config_init_stack/000_plan.md rename to devlog/_fin/260908_c_track_config_init_stack/000_plan.md diff --git a/devlog/_plan/260908_c_track_config_init_stack/010_layer1_atomic_write.md b/devlog/_fin/260908_c_track_config_init_stack/010_layer1_atomic_write.md similarity index 100% rename from devlog/_plan/260908_c_track_config_init_stack/010_layer1_atomic_write.md rename to devlog/_fin/260908_c_track_config_init_stack/010_layer1_atomic_write.md diff --git a/devlog/_plan/260908_c_track_config_init_stack/020_layer2_initialize_flag.md b/devlog/_fin/260908_c_track_config_init_stack/020_layer2_initialize_flag.md similarity index 100% rename from devlog/_plan/260908_c_track_config_init_stack/020_layer2_initialize_flag.md rename to devlog/_fin/260908_c_track_config_init_stack/020_layer2_initialize_flag.md diff --git a/devlog/_plan/260908_c_track_config_init_stack/030_layer3_init_guidance.md b/devlog/_fin/260908_c_track_config_init_stack/030_layer3_init_guidance.md similarity index 100% rename from devlog/_plan/260908_c_track_config_init_stack/030_layer3_init_guidance.md rename to devlog/_fin/260908_c_track_config_init_stack/030_layer3_init_guidance.md diff --git a/devlog/_plan/260908_c_track_config_init_stack/040_layer4_landing.md b/devlog/_fin/260908_c_track_config_init_stack/040_layer4_landing.md similarity index 100% rename from devlog/_plan/260908_c_track_config_init_stack/040_layer4_landing.md rename to devlog/_fin/260908_c_track_config_init_stack/040_layer4_landing.md diff --git a/devlog/_fin/260908_c_track_config_init_stack/050_outcome.md b/devlog/_fin/260908_c_track_config_init_stack/050_outcome.md new file mode 100644 index 0000000000..05e19c97a1 --- /dev/null +++ b/devlog/_fin/260908_c_track_config_init_stack/050_outcome.md @@ -0,0 +1,82 @@ +# 050_outcome.md — terminal record + +## Result + +Landed on `dev` as `6188458ae3f4fd84ef57344b60cf3ceeed80aa6f` through +[#3941](https://github.com/lidge-jun/opencodex/pull/3941) on 2026-09-07. + +| Layer | Source | Disposition | +|---|---|---| +| wp1 | [#3900](https://github.com/lidge-jun/opencodex/pull/3900) by @x3M3x | carried, PR closed as superseded | +| wp2 | new here | landed | +| wp3 | [#3896](https://github.com/lidge-jun/opencodex/pull/3896) by @parkjs101 | carried, PR closed as superseded | +| — | [#3893](https://github.com/lidge-jun/opencodex/issues/3893) | closed | + +Both `Co-authored-by` trailers are on the landed squash commit. The 13 files in +the reviewed tip hash identical to their landed counterparts, `atomic-write.ts` +on `dev` hashes identical to #3900's pinned version, and `initialize.ts` equals +#3896's pinned file apart from wp2's two intended substitutions. + +## What the plan got right + +The tip-only CI mechanism worked exactly as designed. `ci.yml` triggers on +`pull_request` with no draft filter, so the first plan's assumption that draft +status suppresses CI was wrong; opening no pull request for the lower layers is +what actually produced one workflow subject. No Cross-platform CI run exists for +either lower branch. + +Ordering wp2 between the two carried PRs also paid off as predicted. The cherry-pick +of #3896 produced exactly one conflict — the adjacent hunk where `hardeningFailed = true` +sits directly after the rewritten `openSync` line — and it was resolved once. + +## What the plan got wrong, and what caught it + +The first roadmap draft failed its independent audit with seven findings. Three +mattered: the false draft-CI claim above, merging on stale-base CI evidence, and +proving delivery by ancestry alone when a squash can silently drop a contributor +hunk. It also misstated the file overlap as wp1/wp3 when #3900 never touches +`initialize.ts`. The revised plan passed re-audit, and the stale-base rule +earned itself back: `dev` moved twice during this delivery, so the tip was +rebased and re-certified rather than merged on its first green run. + +## The CI failure that was not ours + +The pre-rebase head failed one job, `test 4/4`, in +`prompt probe process lifecycle > the last cancellation drains the exact child`. +Investigation attributed it to that test's final parent-side PID poll expiring at +its 15-second internal deadline: every preceding assertion passed, the replacement +command had already observed the old child gone, and the same test passed on macOS +in the same run. `src/codex/prompt-text-probe.ts` imports `node:fs` only for +`existsSync`/`statSync` and never calls the changed writers. A same-head rerun +passed; the rebased head passed 25/25 on the first attempt. + +Worth recording honestly: the investigation could not name the exact mechanism. +The replacement considered the PID absent while the parent still considered it +alive, which PID reuse, runtime liveness behavior, or a real observation defect +could all explain. It is a flake by evidence of non-reproducibility, not by proof. + +## Follow-up left open + +Three exclusive opens under `src/lab/` share the numeric spelling this track +replaced: `ledger/store.ts` (two) and `public/private-file.ts`. Lab is opt-in and +off the core request path, so they stayed out rather than widening a config-surface +fix. The read/write sites in `artifacts/secure-fs.ts` need individual treatment +because `"wx"` would drop read access; they are not a mechanical substitution. + +## Verification boundary + +The local product suite, typecheck, and build were **NOT RUN** by owner +instruction. Acceptance rested on repository CI against the tip +([run 34153124187](https://github.com/lidge-jun/opencodex/actions/runs/34153124187): +19 jobs succeeded, 2 skipped, zero failures on the first attempt) plus independent +read-only audits at each layer. The two skips are the dispatch-only `macos control` +and Windows shard lanes, so Windows packaging and keyring smoke passed but the +Windows suite itself did not run. + +One limit worth stating plainly: the green PR run tested the tip against the base it +was rebased onto, and #3940 landed on `dev` between that run and the merge. The +C-track content is byte-identical either way, and the four files #3940 touched do not +overlap this change, but the combined tree is certified by the post-merge `dev` run +rather than by the PR run. That run has since completed: +[run 34153892496](https://github.com/lidge-jun/opencodex/actions/runs/34153892496) on +`6188458ae` succeeded, 19 jobs and 2 skips, so the landed combined tree is certified.