Skip to content

Docs: state the post-merge version-two status across the documentation - #98

Open
flyingrobots wants to merge 1 commit into
mainfrom
docs/post-merge-status-refresh
Open

Docs: state the post-merge version-two status across the documentation#98
flyingrobots wants to merge 1 commit into
mainfrom
docs/post-merge-status-refresh

Conversation

@flyingrobots

Copy link
Copy Markdown
Owner

Why

PR #78 changed what Keep does, and several pages still described the state before it: the version-two overview said production retention publication did not exist, the recovery page said version two was unavailable as production, the closure page called publication integration planned, the reconstruction contract said retention remained planned, and the README said version one was the only store admitted for production.

What

Every page now states one boundary.

Implemented, with the tests that prove it: one-way migration (refusing a version-one store that still holds a retained stage), version-two reopen with root-identity binding and pinned retention directories, forward retention publication that binds this store's catalog head and the catalog it selects, and typed refusals for every namespace, capacity, stage, substitution, and replaced-directory violation.

Planned: retention publication recovery and KEEP-CRASH-036..052, partial-prefix migration recovery and KEEP-CRASH-053..073, the reader fence, model-based transition evidence (#19); garbage collection (#21); the restart-stable root identity coordinate (#97).

Files: README.md (guarantees bullet, the "not yet" paragraph, gap table row for #97, routing rows for the split pages), docs/formats/segment-store-v2/README.md (Status rewritten), recovery.md, closure.md, docs/invariants/authenticated-reconstruction/README.md, requirements.md (RETENTION-007 and MIGRATION-003 evidence), CHANGELOG.md.

Evidence

Full gate chain green locally (fmt, clippy both feature sets, both test suites, doctests, cargo doc, documentation refusal and integrity, source structure, conformance, golden worldline). The README contract tests and the version-two protocol contract pass; no claim was added that a test does not back.

Refs #19 #21 #97

PR #78 landed one-way migration, version-two reopen, and forward retention
publication with the review hardening on top, but several pages still spoke
from before it: the version-two overview said production retention
publication did not exist, the recovery page said version two was unavailable
as production, the closure page called publication integration planned, the
reconstruction contract said retention remained planned, and the README said
version one was the only store admitted for production.

Every page now states the same boundary. Implemented: migration, reopen with
root-identity binding and pinned directories, publication binding this store's
catalog head and selected catalog, and typed refusals for every namespace,
capacity, stage, and substitution violation. Planned: retention publication
recovery and KEEP-CRASH-036..052, partial-prefix migration recovery and
KEEP-CRASH-053..073, the reader fence, model-based transition evidence (#19),
garbage collection (#21), and the restart-stable root identity coordinate
(#97). The README says plainly that an interrupted version-two publication
waits for a human until #19 lands, routes to the split recovery and
publication pages, and adds #97 to its gap table. The requirements ledger's
RETENTION-007 and MIGRATION-003 evidence cells name the new laws. No claim
was added that a test does not back.

Refs #19 #21 #97
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 8, 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-08T08:27:53.689683Z 46ead1f 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.

@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 322557b9-8c7b-48c5-a8af-adfcf1cb204e

📥 Commits

Reviewing files that changed from the base of the PR and between 80ef9a1 and 46ead1f.

📒 Files selected for processing (7)
  • CHANGELOG.md
  • README.md
  • docs/formats/segment-store-v2/README.md
  • docs/formats/segment-store-v2/closure.md
  • docs/formats/segment-store-v2/recovery.md
  • docs/formats/segment-store-v2/requirements.md
  • docs/invariants/authenticated-reconstruction/README.md

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (2)
  • GitHub Check: Rust quality gates
  • GitHub Check: Runtime fuzz smoke
🧰 Additional context used
🪛 LanguageTool
docs/formats/segment-store-v2/requirements.md

[style] ~33-~33: The words ‘observation’ and ‘observed’ are quite similar. Consider replacing ‘observed’ with a different word.
Context: ...ined stage refuses before the intent is observed in filesystem_migration_storage_tests...

(VERB_NOUN_SENT_LEVEL_REP)

🔇 Additional comments (9)
README.md (2)

61-68: LGTM!

Also applies to: 72-76, 81-81


221-222: LGTM!

CHANGELOG.md (1)

245-248: LGTM!

docs/formats/segment-store-v2/requirements.md (2)

18-18: LGTM!


33-33: LGTM!

docs/invariants/authenticated-reconstruction/README.md (1)

223-225: LGTM!

docs/formats/segment-store-v2/closure.md (1)

4-6: LGTM!

docs/formats/segment-store-v2/recovery.md (1)

177-179: LGTM!

docs/formats/segment-store-v2/README.md (1)

94-95: 🗄️ Data Integrity & Integration

Keep the documented RetentionCurrentStateRefusal claim.

admit, admit_expectation, and admit_capacity use the same public RetentionCurrentStateRefusal type. Their namespace and capacity violation branches convert that type with into_io(). No documentation change is required.


Summary by CodeRabbit

  • Documentation
    • Updated the README and version 2 guides to clarify retention, migration, publication validation, identity binding, typed refusals, and preservation of version 1 data.
    • Clarified current limitations, including interrupted migration recovery, reader blocking, retention recovery, garbage collection, and closure protection.
    • Documented implemented verification and publication behavior, along with remaining planned recovery and filesystem-authority work.
    • Expanded requirements evidence for retention and migration refusal scenarios, including failed writes, invalid catalogs, and retained stages.

Walkthrough

The documentation updates align Version-two status statements across the README, format specifications, recovery notes, requirements evidence, reconstruction contract, and changelog. They distinguish implemented behavior from planned recovery, fencing, collection, and identity work.

Changes

Version-two documentation status

Layer / File(s) Summary
Public Version-two status
README.md, CHANGELOG.md
The README and changelog describe Version-two retention, migration, validation, typed refusals, limitations, and documentation links.
Implementation and recovery status
docs/formats/segment-store-v2/README.md, docs/formats/segment-store-v2/closure.md, docs/formats/segment-store-v2/recovery.md
The format documentation records implemented evidence, closure publication, forward publication after migration, and unavailable recovery capabilities.
Evidence and reconstruction contracts
docs/formats/segment-store-v2/requirements.md, docs/invariants/authenticated-reconstruction/README.md
The requirements ledger adds refusal evidence. The reconstruction contract states that collection and fencing are not implemented.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 46ead

The documentation now distinguishes implemented Version 2 retention, migration, and closure behavior from remaining recovery and fencing limitations. No merge-blocking risk is currently identified.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description explains the problem, approach, implemented boundaries, planned work, evidence, and issue references, but it does not follow the required template closely. It omits explicit sections f… Revise the description to include every template section. State the affected Keep invariant, rejected alternatives and reasons, malformed/corrupt/interrupted/resource failure modes, benchmark impact, durable-format/identity/migration/public…
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the documentation change and its post-merge version-two status.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description explains the problem, approach, implemented boundaries, planned work, evidence, and issue references, but it does not follow the required template closely. It omits explicit sections for the affected invariant, rejected alternatives, benchmark impact, format and API compatibility, security implications, and the checklist.

Resolution

Revise the description to include every template section. State the affected Keep invariant, rejected alternatives and reasons, malformed/corrupt/interrupted/resource failure modes, benchmark impact, durable-format/identity/migration/public-API compatibility, recovery behavior, security implications, and checklist completion. Use the required section headings, or explicitly state that a section has no impact.

  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Version two speaks with a clearer voice
Retention and migration mark each choice
Closures stand checked, recovery waits
Evidence records the guarded gates
Planned work keeps its proper place

Comment @coderabbitai help to get the list of available commands.

@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: 46ead1f445

ℹ️ 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 thread README.md
Comment on lines +74 to +76
that residue, and readers have no fence, so **an interrupted version-2
publication waits for a human until #19 lands.** A version-1 store stays
admitted until its owner migrates it; migrate only if you accept that wait.

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 Warn that clean migrations may fail after remount

This migration advice mentions only the wait caused by an interrupted publication, but a completely successful migration can also become unavailable after an ordinary reboot, unmount/remount, or restore changes statx.stx_mnt_id. The intent persists that mount ID (docs/formats/segment-store-v2/recovery.md:121-123), and FilesystemVersionTwoAdmission::require_root_identity compares it exactly and returns RootIdentityChanged (src/adapters/filesystem_version_two_admission.rs:120-134). Until #97 supplies a restart-stable coordinate, operators need this consequence stated explicitly before being advised to migrate.

AGENTS.md reference: AGENTS.md:L152-L156

Useful? React with 👍 / 👎.

Comment thread README.md
Comment on lines +65 to +67
it selects, and refuses retained stages, superseded candidates, substituted
files, replaced protocol directories, and every namespace or capacity
violation before it writes anything. Each refusal is a typed value, not a

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 Qualify the pre-mutation refusal claim

When the candidate namespace changes after verify_current, this promise is false: execute_root writes and synchronizes root.next before calling admit_root_namespace (src/adapters/retention/publication_execution.rs:55-65). The regression at filesystem_retention_attempt_tests.rs:78-102 demonstrates exactly this ordering by creating the conflicting namespace after the stage write and then receiving NamespaceExpectationViolated; the retained stage subsequently requires recovery. Limit the claim to violations observed during preflight, or document that a later namespace refusal can leave durable stage evidence.

AGENTS.md reference: AGENTS.md:L84-L89

Useful? React with 👍 / 👎.

| `KEEP-RETENTION-005` | Closure derivation is deterministic, bounded, cycle-safe, fail-closed, and verifies complete blob reconstruction | exact accounting, reconstruction, adversarial-catalog, and exhaustive model laws in `tests/retention_closure.rs`; corrupt members refuse through the inherited segment-record admission laws and seeded `segment_format` fuzz target routed by `closure-corruption.md` | Implemented |
| `KEEP-RETENTION-006` | Publication follows the exact ordered durability protocol, including new namespace-directory admission and retention of fixed-stage evidence until head commit, and returns only after cleanup synchronization | typed vocabulary and blocking port in `tests/retention_publication_phase.rs` and `tests/retention_publication_storage.rs`; ordered execution, conditional namespace sync, and all 17 exact storage-fault boundaries in `tests/retention_publication_execution.rs`; production 17-phase forward filesystem execution, exclusive staging, byte-equal inode-substitution refusal, and retained-stage recovery refusal in `filesystem_retention_storage_tests`; orphan namespace directories count against the 4,096 ceiling and refuse a new namespace before any stage is written in `filesystem_retention_capacity_tests`; crash injection remains | In progress in #19 |
| `KEEP-RETENTION-007` | Restart resolves every fixed-stage crash prefix to one documented lawful state or typed ambiguity | recovery-required refusals before any mutation in `filesystem_retention_expectation_tests`: an absent head over populated pools, a non-initial head prepared against an absent head, an orphan directory for a namespace expected absent, and an absent directory for a namespace expected current; debug and release crash matrix remains | In progress in #19 |
| `KEEP-RETENTION-007` | Restart resolves every fixed-stage crash prefix to one documented lawful state or typed ambiguity | recovery-required refusals before any mutation in `filesystem_retention_expectation_tests`: an absent head over populated pools, a non-initial head prepared against an absent head, an orphan directory for a namespace expected absent, and an absent directory for a namespace expected current; debug and release crash matrix remains; replaced protocol directories, an absent or changed head-selected catalog, an over-full census, zero-generation pool names, and a stage retained by a failed write refuse in `filesystem_retention_*_tests` | In progress in #19 |

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 Stop claiming evidence for the changed-catalog refusal

The new evidence entry says that a changed head-selected catalog refuses in filesystem_retention_*_tests, but a repo-wide search for CatalogChanged finds only the production variant and branch (filesystem_retention_catalog.rs:70) plus prose; filesystem_retention_catalog_tests.rs:17-125 tests foreign, corrupt-head, and absent-catalog cases but never constructs a changed selected catalog or asserts CatalogChanged. The authoritative ledger therefore presents an untested case as evidence; add an exact regression for that variant or leave the case explicitly outstanding.

AGENTS.md reference: AGENTS.md:L123-L129

Useful? React with 👍 / 👎.

Comment thread README.md
Comment on lines +67 to +68
violation before it writes anything. Each refusal is a typed value, not a
string.

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 Do not promise typed substitution refusals

For a byte-equal file substitution during publication, the specific refusal is still only a string: filesystem_retention_stage::retention_error maps ExactRecordRefusal to io::Error::new(..., &'static str) (src/adapters/retention/filesystem_retention_stage.rs:94-112), and execute_retention_publication merely wraps that in the generic RetentionPublicationError::Storage phase variant. Consequently callers cannot downcast or match the listed substituted-file condition as a typed refusal—the corresponding test at filesystem_retention_storage_tests.rs:84-102 can assert only InvalidData. Narrow this statement to the current-state refusals that actually carry RetentionCurrentStateRefusal, or preserve the exact typed source.

AGENTS.md reference: AGENTS.md:L71-L74

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant