Repository navigation
merge queue: checking #871 + #882 + #872 + #873 together on main (7613124), stacked on #875 - #884
Closed
mergify[bot] wants to merge 22 commits into
Closed
mergify[bot] wants to merge 22 commits into
mergify[bot] wants to merge 22 commits into
Conversation
Cover all seven DR-16a-H follow-ups after #863 with bounded tests. Test-First: tools/denkraum/switch.test.mjs::DR16H: backup reports explicit and default probe ports Test-First: tools/denkraum/switch.test.mjs::DR16H: invalid paths emit exactly one JSON error Test-First: tools/denkraum/switch.test.mjs::DR16H: filesystem and validation failures retain safe diagnostics Test-First: tools/denkraum/switch.test.mjs::DR16H: parser diagnostics never expose ledger text or secrets Test-First: tools/denkraum/switch.test.mjs::DR16H: entry guard uses native realpaths and tolerates failures Test-First: tools/denkraum/switch.test.mjs::DR16H: compare accepts equal schema and revision Test-First: tools/denkraum/switch.test.mjs::DR16H: invalid port arguments are rejected before backup Test-First: tools/denkraum/switch.test.mjs::DR16H: tmp warnings belong only to this ledger including previous temps Test-First: tools/denkraum/switch.test.mjs::DR16H: backup directory is private on POSIX Test-First: tools/denkraum/switch.test.mjs::DR16H: symlink drill skips when the capability probe returns EPERM Test-First: tools/denkraum/switch.test.mjs::DR16H: top-level handler reports the original output failure
Four compiling assertion failures observed on G2 35fe38e before the delivery fix. Preserve all existing delivery assertions.
… errors The CLI entry now handles SIGINT/SIGTERM by closing the server once and waiting for the store release before exit; a second signal exits at once. The close hook no longer emits 'error' from the rejection handler: the failure goes to the callback or one stderr line, and a native close error is kept as cause. Ownership release errors no longer overwrite an existing cause. Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: SIGTERM stop releases ownership and the next process can write Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: SIGINT stop releases ownership and the next process can write Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: a failing release on signal stop exits non-zero with a short stderr line Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: close without callback and failing release logs once and does not crash Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: dual close failure keeps the native error as cause of the release failure Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: a release failure does not overwrite the cause of the mutation error Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Serialize send and result commits across store instances while allowing ordinary receipts. Drain accepted notification work before releasing core ownership. Test-First: tools/denkraum/store/delivery.test.mjs::DRSEC: two local stores serialize flush while a send is unresolved Test-First: tools/denkraum/store/delivery.test.mjs::DRSEC: an ordinary receipt commits during an unresolved exclusive send Test-First: tools/denkraum/store/delivery.test.mjs::DRSEC: serialized retry after a lost response reuses the same event ID Test-First: tools/denkraum/store/delivery.test.mjs::DRSEC: a second process cannot send while the closing owner has an unresolved send
…s in ~20 ms No-Test: test speed only, same assertions (R824-G1) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A closed terminal or ssh session sends SIGHUP, which killed the entry without releasing the ledger owner record. SIGHUP now takes the same stop path as SIGINT/SIGTERM (POSIX only; Windows cannot deliver it). Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: SIGHUP stop releases ownership and the next process can write Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e line synchronously A stop signal that arrives after a failed listen exited 0 because the native ERR_SERVER_NOT_RUNNING was treated as success; the clean exit is now gated on the listening flag. The failure line goes through fs.writeSync(2) so an immediate exit cannot drop it on a pipe (the existing stderr assertion stays). Test-First: tools/denkraum/server-stop.test.mjs::DRSEC-G4a: a stop after a failed listen exits non-zero Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…close R873-K1/G1: the closing guard lived per instance while the notification queue is per file, so a second same-file DeliveryStore could append behind a closing store's captured tail. The closing count now lives on the shared ownership context; every same-file store rejects flushNotifications while any close is in progress, so the captured tail is final and ownership is never released during an unresolved send. R873-K3: reject with a dedicated STORE_CLOSED code. Test-First: tools/denkraum/store/delivery.test.mjs::DRSEC: a same-file store cannot start a send once another store began closing Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…was taken freePort() releases the port before the child binds it; under parallel load another process can take it (EADDRINUSE seen in the prepush lane). startEntry now retries that start up to five times on a fresh port. No-Test: Test-helper only; the retry changes no assertion and the tests it serves stay as they were. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Stop diagnosing ECONNREFUSED and optional-sidecar ENOENT on the backup happy path; diagnose primary failures once and keep basenames. Test-First: tools/denkraum/switch.test.mjs::DR16H: happy-path backup with no sidecars has empty stderr Test-First: tools/denkraum/switch.test.mjs::DR16H: missing primary ledger prints exactly one diagnostic line Co-authored-by: Cursor <cursoragent@cursor.com>
Stringify thrown values before path and secret redaction so a bare string rejection prints its text instead of "undefined". Test-First: tools/denkraum/switch.test.mjs::DR16H: diagnose handles thrown strings Co-authored-by: Cursor <cursoragent@cursor.com>
On realpath failure match case-insensitively on win32; otherwise emit a JSON error and exit 4 instead of a silent zero when paths diverge. Test-First: tools/denkraum/switch.test.mjs::DR16H: entry guard fails closed when realpath misses Co-authored-by: Cursor <cursoragent@cursor.com>
Skip env redaction for values shorter than 8 characters and cover the non-SyntaxError diagnose path that actually runs the env loop. Test-First: tools/denkraum/switch.test.mjs::DR16H: env redaction applies to non-SyntaxError diagnostics Co-authored-by: Cursor <cursoragent@cursor.com>
Point bakOk and other backup helpers at an ephemeral free port so the suite can run beside a live desk; only the default-port probe keeps 4791. No-Test: harness-only free-port wiring; behavior covered by existing drills Co-authored-by: Cursor <cursoragent@cursor.com>
Require /^\d{1,5}$/ before the 1..65535 range check and cover the
inclusive boundaries plus rejected coercion forms like +1 and 1e3.
Test-First: tools/denkraum/switch.test.mjs::DR16H: non-digit port forms are rejected
Test-First: tools/denkraum/switch.test.mjs::DR16H: valid boundary ports are accepted
Co-authored-by: Cursor <cursoragent@cursor.com>
Fold the ECONNREFUSED note onto the diagnose guard line so the PR diff stays at most 300 lines; R871-A7 remains a follow-up. No-Test: comment-only size trim Co-authored-by: Cursor <cursoragent@cursor.com>
Extend the root-id retry-guard for pending defer and clarify replays, and assert sampled contrast controls have border-top-width > 0. No-Test: coverage-only tests for existing behavior (R870-K2/K3) Co-authored-by: Cursor <cursoragent@cursor.com>
This was referenced Oct 9, 2026
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.
🎉 This combination of pull requests has been checked successfully and will be merged soon. 🎉
#871 + #882 + #872 + #873 are queued together for merge on branch main (7613124).
Stacked behind 1 pull request queued ahead of this batch, not part of it. These checks run on a tip that also carries its commits, so a failure here can come from it as much as from #871 + #882 + #872 + #873.
Queued ahead of this batch:
This pull request has been created by Mergify to speculatively check the mergeability of [#871 + #882 + #872 + #873].
You don't need to do anything. Mergify will close this pull request automatically when it is complete.
Required conditions of queue rule
defaultfor merge:check-success = gates (linux)check-success = gates (windows)check-success = red-firstgithub-review-approved[🛡 GitHub repository ruleset rulemain-pr-required-checks]label != do-not-mergemain-pr-required-checks]:check-success = @github-actions/gates (linux)check-neutral = @github-actions/gates (linux)check-skipped = @github-actions/gates (linux)main-pr-required-checks]:check-success = @github-actions/gates (windows)check-neutral = @github-actions/gates (windows)check-skipped = @github-actions/gates (windows)main-pr-required-checks]:check-success = @github-actions/red-firstcheck-neutral = @github-actions/red-firstcheck-skipped = @github-actions/red-firstmain-pr-required-checks]:check-neutral = @mergify/Mergify Merge Protectionscheck-skipped = @mergify/Mergify Merge Protectionscheck-success = @mergify/Mergify Merge ProtectionsRequired conditions to stay in the queue:
-conflict-draftbase = maincheck-success = gates (linux)check-success = gates (windows)check-success = red-firstgithub-review-approved[🛡 GitHub repository ruleset rulemain-pr-required-checks]label != do-not-mergelabel = review-okmain-pr-required-checks]:check-success = @github-actions/gates (linux)check-neutral = @github-actions/gates (linux)check-skipped = @github-actions/gates (linux)main-pr-required-checks]:check-success = @github-actions/gates (windows)check-neutral = @github-actions/gates (windows)check-skipped = @github-actions/gates (windows)main-pr-required-checks]:check-success = @github-actions/red-firstcheck-neutral = @github-actions/red-firstcheck-skipped = @github-actions/red-firstmain-pr-required-checks]:check-neutral = @mergify/Mergify Merge Protectionscheck-skipped = @mergify/Mergify Merge Protectionscheck-success = @mergify/Mergify Merge Protections