-
Notifications
You must be signed in to change notification settings - Fork 872
devlog: WP6 — verify and record the #1049 deferral #2386
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
+64
−0
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
64 changes: 64 additions & 0 deletions
64
devlog/_plan/260822_backlog_disposition_program/061_wp6_deferral_record.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| # 061 — WP6 disposition: #1049 stays deferred, and why that is the answer | ||
|
|
||
| Work-phase 6 does not implement #1049. That was the conclusion at roadmap time, and | ||
| re-verifying it against `dev@cd77ee6c8` did not change it. This document records the | ||
| re-check so the deferral is a decision with evidence rather than a phase that quietly | ||
| got skipped. | ||
|
|
||
| ## What was re-verified | ||
|
|
||
| ``` | ||
| rg -c 'adoption-pending' src/ -> 0 | ||
| src/codex/inject-coordination.ts:116 -> kind: "legacy-uncoordinated" still returned | ||
| src/codex/transition-state.ts:392 -> new Database(finalDatabasePath, { create: true }) | ||
| ``` | ||
|
|
||
| All three still hold after eight landed work-phases. The adoption machinery exists only | ||
| as a specification in `devlog/_fin/260804_codex_write_substrate/005_contract.md`; not one | ||
| symbol of it is in `src/`. | ||
|
|
||
| ## Why this is deferred rather than hard | ||
|
|
||
| The obvious move — relax `codexWriteCoordinationEligibility` so legacy homes take the | ||
| lock — is wrong, and the code says so itself. | ||
| `assertInitialStateCanBeCreated` refuses to initialise a coordinator row while native | ||
| routing residue exists, because installing a `{0, null}` row over routed bytes would | ||
| erase the evidence of an interrupted transition. The refusal is correct. What is missing | ||
| is a *different* row identity (`adoption-pending`), not a weaker gate. | ||
|
|
||
| And the prerequisite is bigger than the feature. The contract requires publication | ||
| through a complete temp database plus an atomic no-clobber link, while today's create | ||
| path is: | ||
|
|
||
| ```ts | ||
| database = new Database(finalDatabasePath, { create: true }); | ||
| ``` | ||
|
|
||
| Replacing that rewrites the create path used by **every clean install**, not just legacy | ||
| ones. Publication is the crash boundary: a partial implementation corrupts user installs | ||
| that were previously fine. | ||
|
|
||
| ## The disposition | ||
|
|
||
| Three phases, in dependency order, none of which fits inside a backlog-clearing pass: | ||
|
|
||
| 1. A crash-safe temp-publisher with no-clobber publication, replacing `create: true` for | ||
| every install. | ||
| 2. The `adoption-pending` row identity and the narrowed eligibility gate. | ||
| 3. Positive-authority plumbing through `history-job.ts`. | ||
|
|
||
| Each is independently reviewable and each has real blast radius. Bundling them into this | ||
| program would produce exactly the unreviewable mega-diff that got #2222 closed. | ||
|
|
||
| **#1049 stays open**, and this record is linked from it rather than a fabricated diff | ||
| being attached to it. Writing a plausible-looking implementation for a crash-safety | ||
| surface without the publisher underneath it would be worse than saying it is not done — | ||
| which is the same standard applied to #2350, #2351, #2355 and #2363 earlier in this | ||
| program. | ||
|
|
||
| ## Terminal outcome | ||
|
|
||
| `NEEDS_HUMAN` for the implementation: the sequencing decision (whether the publisher | ||
| phase is worth opening now, and against which release) belongs to a maintainer. | ||
| `DONE` for this work-phase, whose deliverable was the verified deferral. | ||
|
|
||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add a language identifier to the command fence.
Line 10 opens a shell command block without a language tag.
markdownlint-cli2reports MD040. Useshorshellso renderers and linters identify the block correctly.Proposed fix
📝 Committable suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 10-10: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Source: Linters/SAST tools