Skip to content

test: expose membership safety failures under mixed reads - #47

Open
flyingrobots wants to merge 2 commits into
mainfrom
test/membership-observation
Open

flyingrobots wants to merge 2 commits into
mainfrom
test/membership-observation

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Sep 22, 2026

Copy link
Copy Markdown
Member

Production safety: FAIL in 21 of 84 synthetic mixed observations. The real release/acquire/claim transactions succeed and leave independent family, capacity or prefix-exclusivity violations. This PR completes the #38 investigation; it does not implement the corrective work tracked by #45, which remains an unresolved release correctness gate in #41.

The controlled reader supplies one planner snapshot assembled from individually valid before/after refs of a completed operation. Objects and transactions use real Git unchanged; retries use real reads. No live Git reader/writer schedule has been reproduced. Backend reachability and publication order remain unverified.

Domain Synthetic cases Invariant violations Outcome
Families 48 12 Current parent record plus omitted child membership permits release to leave an orphan.
Semaphores 12 3 Current generation plus omitted live slot permits 2 live slots at capacity 1.
Prefixes 24 6 Current directory token plus omitted descendant job permits overlapping reservations.

The fixture exhausts the small before/after ref-mix spaces for seeds 38, 1701 and 20260922. Six hand-checked oracle inputs and two discarded-dispatcher-read controls calibrate the experiment. The independent oracle reads raw refs and blobs; it does not reuse production parsers, doctor or check. The report limits its claims to the studied invariants and transitions.

The committed study contains the complete 84-case result ledger, runtime/executable/fixture hashes, representative raw observations, object contents, transaction inputs, final states and control cases. verify-evidence.py verifies all 89 receipt paths through git ls-files and checks their HEAD blob hashes. Its observed RED caught ignored .log receipts in the first commit; a forward commit retains them as .txt, updates the manifest and passes the check.

Validation on final head 528b617e3c4c1c7c747756218dd07575661432e2:

  • Normal pre-commit lint passed.
  • Normal pre-push make test: 452 passed, 0 failed, followed by passing six oracle cases and two discarded-read controls.
  • Full study: exit 1, production_safety: FAIL, 21 violating cases / 84. These failures remain visible; they are not expected-failure assertions converted to passing production tests.
  • Committed evidence verifier: 89 paths and SHA-256 hashes verified.

A green ordinary suite or calibration verifies that the study additions work and preserve existing tests. It does not establish the affected concurrency guarantee. No production module or generated executable changed. The README now explains why expected ref values alone do not establish coherent membership observation.

Run the study with a fresh output directory:

make study-observation OBSERVATION_OUT=/tmp/locks-observation-review
python3 test/observation/verify-evidence.py

The current study exits 1; instrumentation/setup errors exit 2. The full method, controls, limitations and retained evidence are in docs/studies/membership-observation/README.md.

Closes #38. Corrective implementation remains open in #45; #20 is a design comparison only.

@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 39 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 4bfaa7f9-0107-4fca-b7c3-b585d8153577

📥 Commits

Reviewing files that changed from the base of the PR and between 01e39c3 and 528b617.

📒 Files selected for processing (97)
  • CHANGELOG.md
  • Makefile
  • README.md
  • docs/studies/membership-observation/README.md
  • docs/studies/membership-observation/evidence/calibration-family/deliberately-bad.json
  • docs/studies/membership-observation/evidence/calibration-family/healthy.json
  • docs/studies/membership-observation/evidence/calibration-prefix/deliberately-bad.json
  • docs/studies/membership-observation/evidence/calibration-prefix/healthy.json
  • docs/studies/membership-observation/evidence/calibration-semaphore/deliberately-bad.json
  • docs/studies/membership-observation/evidence/calibration-semaphore/healthy.json
  • docs/studies/membership-observation/evidence/calibration.json
  • docs/studies/membership-observation/evidence/family-38-00/before.json
  • docs/studies/membership-observation/evidence/family-38-00/committed-after.json
  • docs/studies/membership-observation/evidence/family-38-00/final.json
  • docs/studies/membership-observation/evidence/family-38-00/observed.refs
  • docs/studies/membership-observation/evidence/family-38-00/reads.txt
  • docs/studies/membership-observation/evidence/family-38-00/result.json
  • docs/studies/membership-observation/evidence/family-38-00/stderr.txt
  • docs/studies/membership-observation/evidence/family-38-00/stdout.txt
  • docs/studies/membership-observation/evidence/family-38-00/transaction-1.stdin
  • docs/studies/membership-observation/evidence/family-38-00/transaction-2.stdin
  • docs/studies/membership-observation/evidence/family-38-14/before.json
  • docs/studies/membership-observation/evidence/family-38-14/committed-after.json
  • docs/studies/membership-observation/evidence/family-38-14/final.json
  • docs/studies/membership-observation/evidence/family-38-14/observed.refs
  • docs/studies/membership-observation/evidence/family-38-14/reads.txt
  • docs/studies/membership-observation/evidence/family-38-14/result.json
  • docs/studies/membership-observation/evidence/family-38-14/stderr.txt
  • docs/studies/membership-observation/evidence/family-38-14/stdout.txt
  • docs/studies/membership-observation/evidence/family-38-14/transaction-1.stdin
  • docs/studies/membership-observation/evidence/family-38-15/before.json
  • docs/studies/membership-observation/evidence/family-38-15/committed-after.json
  • docs/studies/membership-observation/evidence/family-38-15/final.json
  • docs/studies/membership-observation/evidence/family-38-15/observed.refs
  • docs/studies/membership-observation/evidence/family-38-15/reads.txt
  • docs/studies/membership-observation/evidence/family-38-15/result.json
  • docs/studies/membership-observation/evidence/family-38-15/stderr.txt
  • docs/studies/membership-observation/evidence/family-38-15/stdout.txt
  • docs/studies/membership-observation/evidence/family-38-15/transaction-1.stdin
  • docs/studies/membership-observation/evidence/prefix-38-00/before.json
  • docs/studies/membership-observation/evidence/prefix-38-00/committed-after.json
  • docs/studies/membership-observation/evidence/prefix-38-00/final.json
  • docs/studies/membership-observation/evidence/prefix-38-00/observed.refs
  • docs/studies/membership-observation/evidence/prefix-38-00/reads.txt
  • docs/studies/membership-observation/evidence/prefix-38-00/result.json
  • docs/studies/membership-observation/evidence/prefix-38-00/stderr.txt
  • docs/studies/membership-observation/evidence/prefix-38-00/stdout.txt
  • docs/studies/membership-observation/evidence/prefix-38-00/transaction-1.stdin
  • docs/studies/membership-observation/evidence/prefix-38-01/before.json
  • docs/studies/membership-observation/evidence/prefix-38-01/committed-after.json
  • docs/studies/membership-observation/evidence/prefix-38-01/final.json
  • docs/studies/membership-observation/evidence/prefix-38-01/observed.refs
  • docs/studies/membership-observation/evidence/prefix-38-01/reads.txt
  • docs/studies/membership-observation/evidence/prefix-38-01/result.json
  • docs/studies/membership-observation/evidence/prefix-38-01/stderr.txt
  • docs/studies/membership-observation/evidence/prefix-38-01/stdout.txt
  • docs/studies/membership-observation/evidence/prefix-38-01/transaction-1.stdin
  • docs/studies/membership-observation/evidence/prefix-38-07/before.json
  • docs/studies/membership-observation/evidence/prefix-38-07/committed-after.json
  • docs/studies/membership-observation/evidence/prefix-38-07/final.json
  • docs/studies/membership-observation/evidence/prefix-38-07/observed.refs
  • docs/studies/membership-observation/evidence/prefix-38-07/reads.txt
  • docs/studies/membership-observation/evidence/prefix-38-07/result.json
  • docs/studies/membership-observation/evidence/prefix-38-07/stderr.txt
  • docs/studies/membership-observation/evidence/prefix-38-07/stdout.txt
  • docs/studies/membership-observation/evidence/provenance.json
  • docs/studies/membership-observation/evidence/report.json
  • docs/studies/membership-observation/evidence/semaphore-38-00/before.json
  • docs/studies/membership-observation/evidence/semaphore-38-00/committed-after.json
  • docs/studies/membership-observation/evidence/semaphore-38-00/final.json
  • docs/studies/membership-observation/evidence/semaphore-38-00/observed.refs
  • docs/studies/membership-observation/evidence/semaphore-38-00/reads.txt
  • docs/studies/membership-observation/evidence/semaphore-38-00/result.json
  • docs/studies/membership-observation/evidence/semaphore-38-00/stderr.txt
  • docs/studies/membership-observation/evidence/semaphore-38-00/stdout.txt
  • docs/studies/membership-observation/evidence/semaphore-38-00/transaction-1.stdin
  • docs/studies/membership-observation/evidence/semaphore-38-01/before.json
  • docs/studies/membership-observation/evidence/semaphore-38-01/committed-after.json
  • docs/studies/membership-observation/evidence/semaphore-38-01/final.json
  • docs/studies/membership-observation/evidence/semaphore-38-01/observed.refs
  • docs/studies/membership-observation/evidence/semaphore-38-01/reads.txt
  • docs/studies/membership-observation/evidence/semaphore-38-01/result.json
  • docs/studies/membership-observation/evidence/semaphore-38-01/stderr.txt
  • docs/studies/membership-observation/evidence/semaphore-38-01/stdout.txt
  • docs/studies/membership-observation/evidence/semaphore-38-01/transaction-1.stdin
  • docs/studies/membership-observation/evidence/semaphore-38-03/before.json
  • docs/studies/membership-observation/evidence/semaphore-38-03/committed-after.json
  • docs/studies/membership-observation/evidence/semaphore-38-03/final.json
  • docs/studies/membership-observation/evidence/semaphore-38-03/observed.refs
  • docs/studies/membership-observation/evidence/semaphore-38-03/reads.txt
  • docs/studies/membership-observation/evidence/semaphore-38-03/result.json
  • docs/studies/membership-observation/evidence/semaphore-38-03/stderr.txt
  • docs/studies/membership-observation/evidence/semaphore-38-03/stdout.txt
  • docs/studies/membership-observation/evidence/sha256.json
  • test/observation/git-shim.sh
  • test/observation/study.py
  • test/observation/verify-evidence.py

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

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

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.

Probe membership and generation coherence during partial multi-ref observation

1 participant