Repository navigation
Conversation
added 3 commits
October 14, 2026 08:53
Step 3 makes an artifact ID and version number name at most one version. Step 5 releases a version at most once, allows at most one withdrawal per release, and adds Concurrent attempts: the conflict check runs when the record is written, the first attempt recorded wins, later conflicting attempts are refused, record nothing, and are reported to the participant. Detecting a change prepared from a version that is no longer current stays application policy, so no GAP record gains a base-version field.
Covers the new at-most-one-withdrawal rule: the refused attempt throws and leaves the workspace bytes unchanged.
The draft now decides conflicting attempts within one store, so the deferred entry is removed. The distributed-stores entry keeps only conflicts across stores and links to the new rules. GAP-CORE-016 lists existing demo coverage and notes that the CMS takes no lock.
Review on #18: step 3's retry allowance contradicted GAP-CORE-016's must-refuse rule. An attempt whose ArtifactVersion has the same canonical JSON bytes as the stored one now explicitly does not conflict, in step 3, Concurrent attempts, and the GAP-CORE-016 statement. authoredBy is in the record, so another participant's attempt is never identical. Also: describe both CMS numbering paths, open Concurrent attempts with attempts from one participant or several, and correct the GAP-CORE-016 note on CMS locking (the blog-post save holds its own lock).
This branch has not been deployed
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #17.
Problem
Step 5 said resolving concurrent updates to one artifact "remains open" and pointed to
DEFERRED.md, which had no entry for it. The first version of this PR added that entry. On review, the decision was to settle the question in the draft instead of deferring it.What the draft now decides
Rules that independent implementations must agree on are portable. Questions about which version is current stay application policy.
ArtifactVersionhas the same canonical JSON bytes as the stored one does not conflict, and the implementation MAY return the stored version.Conformance and deferred ledger
GAP-CORE-016Conflicting attempts, with existing CMS, issue-tracking and research tests as coverage. Its notes state the limits.DEFERRED.mdentry this PR added is removed. "Distributed record stores and replication" now covers only conflicts across stores and links to the new rules.Found along the way
The CMS demo's generic create and release paths take no lock. Two overlapping
createArtifactVersioncalls both report success, and only one version is stored. Filed as #19, kept out of this PR.Checks run (at c396d94)
pnpm test:demo: 142 passpnpm typecheck:demopnpm check:specificationpnpm docs:buildpnpm docs:test: 16 pass