Skip to content

fix(tui): repair reentrant SDK callbacks and pipeline ownership - #3665

Merged
Yeachan-Heo merged 3 commits into
devfrom
fix/dev-ci-66475-tui-tools
Aug 7, 2026
Merged

fix(tui): repair reentrant SDK callbacks and pipeline ownership#3665
Yeachan-Heo merged 3 commits into
devfrom
fix/dev-ci-66475-tui-tools

Conversation

@Yeachan-Heo

Copy link
Copy Markdown
Owner

Summary

  • preserve bounded NotificationServer inbound/reply delivery during synchronous host reentry
  • refresh valid live pipeline process-group anchors before failing closed
  • keep Bash head/tail stripping enabled and disabled behavior unchanged

Verification

  • NotificationServer focused reentrancy: 5/5 passes
  • BashTool head/tail stripping: 5/5 passes
  • cargo test -p pi-shell shell --lib: 51 passed
  • bun --cwd=packages/natives run check:types: passed
  • native build: passed


[repo owner's gaebal-gajae (clawdbot) 🦞]

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from beaf3b7 to 1df1430 Compare July 31, 2026 15:52
Yeachan-Heo pushed a commit that referenced this pull request Jul 31, 2026
Reconcile the narrowly reverted #3668 guard selectors and preserve live native authority. Add repeated exact PID and incarnation settlement coverage without inflating the existing Windows timeout.

Issue: #3676
Constraint: exact base de7f06b
Constraint: do not touch #3596/#3670/#3665 or contributor branches
Tested: guard current-tree validation; guard suite; ChatDaemonController ownership safety suite; repeated focused ownership tests
Not-tested: hosted Windows CI; full exact CI; hostile review; signed merge/build receipt
Confidence: medium
Scope-risk: narrow
Reversibility: revert-commit
Yeachan-Heo pushed a commit that referenced this pull request Jul 31, 2026
Reconcile the narrowly reverted #3668 guard selectors and preserve live native authority. Add repeated exact PID and incarnation settlement coverage without inflating the existing Windows timeout.

Issue: #3676
Constraint: exact base de7f06b
Constraint: do not touch #3596/#3670/#3665 or contributor branches
Tested: guard current-tree validation; guard suite; ChatDaemonController ownership safety suite; repeated focused ownership tests
Not-tested: hosted Windows CI; full exact CI; hostile review; signed merge/build receipt
Confidence: medium
Scope-risk: narrow
Reversibility: revert-commit
Yeachan-Heo pushed a commit that referenced this pull request Jul 31, 2026
Reconcile the narrowly reverted #3668 guard selectors and preserve live native authority. Add repeated exact PID and incarnation settlement coverage without inflating the existing Windows timeout.

Issue: #3676
Constraint: exact base de7f06b
Constraint: do not touch #3596/#3670/#3665 or contributor branches
Tested: guard current-tree validation; guard suite; ChatDaemonController ownership safety suite; repeated focused ownership tests
Not-tested: hosted Windows CI; full exact CI; hostile review; signed merge/build receipt
Confidence: medium
Scope-risk: narrow
Reversibility: revert-commit
@Yeachan-Heo

Copy link
Copy Markdown
Owner Author

REQUEST_CHANGES

Reviewed exact head 1df1430 against current origin/dev c1bf3be.

Blocking: this PR targets base 44c30bb and is stale/dirty relative to current origin/dev. Rebase onto c1bf3be before any approval; the current exact head must not merge.

Hostile findings to resolve while rebasing: the new Blocking ThreadsafeFunction calls run from spawn_blocking pumps, while stop_and_wait awaits every pump task. There is no bounded shutdown/error-path test proving that a closed or non-draining JS callback cannot leave stop_and_wait hung indefinitely. Add coverage for TSFN closure, callback-side shutdown/reentrancy, and queued inbound/frame backpressure; the single blocking_recv assertion does not cover those paths. Also retain the pipeline process-group repair tests across PID reuse, missing pid, late spawn, and ambient-group rejection after the rebase.


[repo owner's gaebal-gajae (clawdbot) 🦞]

@Yeachan-Heo

Copy link
Copy Markdown
Owner Author

Owner evidence update — bounded rebase conflict

Inspected exact PR head 1df143099377ca694d6060f226ba91c2fc33dc62 against current origin/dev 9477947f8b89b74bf3efcc4c1bf7c4591a0558ec.

Scope reconciliation:

Rebase evidence:

  • git rebase origin/dev stopped on the first fix(tui): repair reentrant SDK callbacks and pipeline ownership #3665 commit, 10a7bde1d (fix(sdk): deliver reentrant host callbacks without drops).
  • Current dev and the PR both materially rewrite the same callback/admission machinery in crates/gjc-sdk/src/server.rs.
  • Git reported two content-conflict regions spanning lines 58–383 and 732–857, including callback frame/backlog state and InboundAdmission / server-state ownership logic. This is not a mechanical formatting or manifest conflict.
  • Per the bounded-conflict instruction, I did not choose either side or guess at a synthesis. The rebase was aborted; the worktree is clean and restored to exact PR head 1df143099377ca694d6060f226ba91c2fc33dc62.

No branch push occurred, no tests/checks were represented as post-rebase verification, and no CI run was rerun or cancelled. PR #3665 remains DIRTY pending an explicit resolution of the callback ownership conflict with current dev.


[repo owner's gaebal-gajae (clawdbot) 🦞]

@Yeachan-Heo

Copy link
Copy Markdown
Owner Author
receipt: gajae-ci/tui-batch-verdict-3665
pr: #3665
head: 1df143099377ca694d6060f226ba91c2fc33dc62
recorded-base: dev (44c30bb332ab33098fa04bdd374e1c48a4e7fc01)
live-dev: 9477947f8b89b74bf3efcc4c1bf7c4591a0558ec
ci: 25 success, 5 skipped, 0 pending, 0 failure (stale exact-head topology)
mergeable: false, mergeable_state: dirty
hostile-verdict: REQUEST_CHANGES (P0=0, P1=2)
reviewed-scope:
  - SDK reply/inbound/frame callback pump ownership
  - Blocking ThreadsafeFunction queue behavior and stop_and_wait ownership
  - Shell process-group anchor refresh and fail-closed ownership
blocking:
  - The PR remains based on 44c30bb3 while live dev is 9477947f. Current dev and the PR materially rewrite the same callback/admission ownership regions in crates/gjc-sdk/src/server.rs; GitHub reports DIRTY and the owner-recorded rebase reached non-mechanical content conflicts. The old exact-head checks do not validate any synthesis with current dev
  - The head replaces async/nonblocking reply, inbound, and frame pumps with spawn_blocking plus Blocking TSFN calls, while stop_and_wait awaits every pump JoinHandle without a timeout or cancellation path for a callback that is closed, reentrant, or not draining. The requested bounded shutdown/reentrancy/backpressure regression coverage is still absent at this unchanged head
pipeline-ownership:
  - The shell change refreshes a group anchor only after rejecting the ambient group and proving the observed PID is running in the reported PGID, then records the fresh incarnation before allowing ownership to continue
  - That lane remains subordinate to the unresolved callback conflict and must retain PID-reuse, missing-PID, late-spawn, ambient-group rejection, and stale-anchor tests through the eventual conflict resolution
feedback:
  - Prior owner REQUEST_CHANGES remains unresolved
  - The only automated comment is a Codex usage-limit notice; there are no review threads or automated code findings
disposition: REQUEST_CHANGES; do not merge this exact head

PR #3665 read-only adversarial exact-head review: REQUEST_CHANGES (P0=0, P1=2). This verdict is confined to callback/pipeline ownership and is independent of #3814. The head is still DIRTY against live dev, and its blocking TSFN pumps remain coupled to unbounded stop_and_wait joins without the previously requested shutdown/reentrancy/backpressure proof. Exact-head CI is green but validates the stale topology, not a current-dev conflict resolution.


[repo owner's gaebal-gajae (clawdbot)]

@yazzang-homelab yazzang-homelab left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent architect review.

The core change is right, and the three parts of it are correctly coupled. That coupling is the part worth stating explicitly, because getting any one of them alone would be a bug:

-let task = napi::tokio::spawn(async move {
-    while let Some(reply) = rx.recv().await {
+let task = napi::tokio::task::spawn_blocking(move || {
+    while let Some(reply) = rx.blocking_recv() {
...
-        tsfn.call(Ok(event), ThreadsafeFunctionCallMode::NonBlocking);
+        if tsfn.call(Ok(event), ThreadsafeFunctionCallMode::Blocking) != napi::Status::Ok { break; }
  • NonBlocking drops the call when the tsfn queue is full. For reply delivery that is silent message loss under exactly the load where replies matter. Blocking converts loss into backpressure — the actual fix.
  • But a Blocking tsfn call must not be made from an async context, because it parks the thread; on a tokio worker that stalls the runtime. Moving to spawn_blocking + blocking_recv is therefore not incidental cleanup, it is required by the first change.
  • break on non-Ok is the third necessary piece: once the tsfn is closed or aborted, a Blocking call returns non-Ok immediately and the loop would otherwise spin forever on a blocking-pool thread.

All three land together. Good.

Three things to address:

  1. INBOUND_CONNECTION_CAPACITY: 4 → 128 (32×) and INBOUND_GLOBAL_CAPACITY: 64 → 256 are unexplained. The commit message covers the pump redesign but says nothing about the capacities. A 32× bump on a per-connection bound reads as "raised until the symptom went away". Please state what the queue depth is now sized against — observed burst depth, MAX_CONNECTION_TASKS (64), or a measured stall — because the next person tuning this has nothing to reason from. If the Blocking switch is what actually fixed the loss, the capacity bump may not be needed at all, and shipping both makes it impossible to tell which one mattered.

  2. spawn_blocking holds a blocking-pool thread for the process lifetime. This is a long-lived pump, not a short blocking call, which is what spawn_blocking is dimensioned for. With one NotificationServer per process that is fine; if servers can be created per session or per workspace, each one permanently consumes a thread from a pool that other blocking work shares. Worth a comment stating the expected instance count, or a dedicated thread (std::thread::spawn) which expresses "this runs forever" honestly.

  3. The branch is 179 commits behind dev and conflicts in five files:

crates/gjc-sdk/src/server.rs
crates/pi-shell/src/shell.rs
packages/coding-agent/src/sdk/bus/chat-daemon-control.ts
packages/coding-agent/src/sdk/bus/telegram-daemon-contract.ts
scripts/telegram-daemon-generation-manifest.json

telegram-daemon-contract.ts is on that list, so the rebase will need a fresh DAEMON_GENERATION bump above current dev (53) and a regenerated manifest — and note #3844 and #3891 are both already claiming 54, so this one needs to sequence behind them. Merge-base is 2026-08-01; the pipeline code around this has moved since, so please re-run the reply-delivery verification on the rebased head rather than carrying the earlier result forward.

blocking_recv on InboundReceiver is a clean, minimal addition that mirrors the existing async recv — no objection there.

gajae.pr-review-verdict.v1 merge-blocked sha256:1df143099377ca694d6060f226ba91c2fc33dc62 reviewer:architect evidence:read of server.rs:66-76,637-643 and pi-natives/src/sdk.rs:329-345 at this head; merge-tree vs origin/dev reports 5 conflicting files, merge-base 179 commits behind

@yazzang-homelab

Copy link
Copy Markdown
Contributor

CHANGELOG 항목이 이미 릴리스된 섹션에 들어가 있다.

dev의 릴리스 구간과 이 PR head의 릴리스 구간을 비교해, 이 PR이 추가한 줄만 뽑았다(coding-agent + natives). ## [Unreleased]가 아니라 이미 배포된 ## [X.Y.Z] 아래에 있다.

원인은 .gitattributespackages/*/CHANGELOG.md merge=union이다(오늘 11:25:32Z에 #3932로 제거됨). union은 충돌을 내지 않고 양쪽 청크를 이어붙이는데, 릴리스 커밋이 ## [X.Y.Z]를 살아남은 ## [Unreleased] 바로 아래에 삽입하기 때문에 Unreleased에 넣은 항목이 리베이스에서 새 버전 헤딩 밑으로 조용히 옮겨진다. 충돌 마커도 CI 신호도 없다. dev에서 같은 상태인 기존 항목 35건, 열린 PR 8건을 확인했다(#3929).

리베이스로는 안 풀린다 — 위치가 이미 커밋돼 있어서 직접 옮겨야 한다. 해당 줄을 잘라 ## [Unreleased] 아래로 넣으면 된다. 드라이버는 제거됐으니 한 번 옮기면 다시 움직이지 않는다.

내 PR(#3844)도 같은 상태였고 방금 고쳤다.

@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from 1df1430 to 966dbf1 Compare August 6, 2026 13:16
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Drops obsolete shell.rs
ownership repair (dev removed CommandProcessGroups model) and
server.rs bounded-ingress subsystem (dev uses UnboundedReceiver
which natively supports blocking_recv). Keeps the sdk.rs frame-pump
reentrancy fix: spawn_blocking + blocking_recv + Blocking call +
break-on-not-ok. Re-bases daemon generations to 54/27/26 (dev+1)
and regenerates the authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem dev reverted
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from 966dbf1 to cd6c1fc Compare August 6, 2026 13:25
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Drops obsolete shell.rs
ownership repair (dev removed CommandProcessGroups model) and
server.rs bounded-ingress subsystem (dev uses UnboundedReceiver
which natively supports blocking_recv). Keeps the sdk.rs frame-pump
reentrancy fix: spawn_blocking + blocking_recv + Blocking call +
break-on-not-ok. Re-bases daemon generations to 54/27/26 (dev+1)
and regenerates the authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem dev reverted
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from cd6c1fc to e840452 Compare August 6, 2026 13:42
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from e840452 to c38e63a Compare August 6, 2026 13:43
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from c38e63a to 6f08a79 Compare August 6, 2026 13:55
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from 6f08a79 to bafb3c5 Compare August 6, 2026 21:22
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Empty commit so pull_request synchronize re-runs against current
origin/dev base 3832188 after the ownership-authority rebase.

Lore-id: 3665-ci-retrigger
Constraint: no product-source mutation
Confidence: high
Scope-risk: none
Reversibility: trivial
Tested: local guard validate + inventory + cargo build before push
Not-tested: remote Dev CI outcome
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Exact-head Dev CI shard-2 failed on hardcoded DAEMON_GENERATION 53
pins after the rebased #3665 ownership authority bump to 54.

Lore-id: 3665-gen54-pins
Constraint: only generation pin tests; no product authority change
Rejected: leave pins at 53 | fails exact-head CI after generation bump
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: bun test generation 54 pins; guard --validate-current-tree
Not-tested: full CI matrix after push
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Empty commit so pull_request synchronize re-runs against current
origin/dev base 3832188 after the ownership-authority rebase.

Lore-id: 3665-ci-retrigger
Constraint: no product-source mutation
Confidence: high
Scope-risk: none
Reversibility: trivial
Tested: local guard validate + inventory + cargo build before push
Not-tested: remote Dev CI outcome
Yeachan-Heo pushed a commit that referenced this pull request Aug 6, 2026
Exact-head Dev CI shard-2 failed on hardcoded DAEMON_GENERATION 53
pins after the rebased #3665 ownership authority bump to 54.

Lore-id: 3665-gen54-pins
Constraint: only generation pin tests; no product authority change
Rejected: leave pins at 53 | fails exact-head CI after generation bump
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: bun test generation 54 pins; guard --validate-current-tree
Not-tested: full CI matrix after push
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from 59f8986 to d29de51 Compare August 6, 2026 22:26
Yeachan-Heo pushed a commit that referenced this pull request Aug 7, 2026
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
Yeachan-Heo pushed a commit that referenced this pull request Aug 7, 2026
Empty commit so pull_request synchronize re-runs against current
origin/dev base 3832188 after the ownership-authority rebase.

Lore-id: 3665-ci-retrigger
Constraint: no product-source mutation
Confidence: high
Scope-risk: none
Reversibility: trivial
Tested: local guard validate + inventory + cargo build before push
Not-tested: remote Dev CI outcome
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from d29de51 to 81a8b6b Compare August 7, 2026 01:59
gaebal-gajae added 3 commits August 7, 2026 02:14
Rebase of PR #3665 onto dev 473eab9. Converts the reply and inbound
callback pumps from async napi::tokio::spawn + recv().await +
ThreadsafeFunctionCallMode::NonBlocking to spawn_blocking +
blocking_recv + ThreadsafeFunctionCallMode::Blocking with break on
non-OK status, preventing reentrant SDK callback delivery drops during
synchronous host reentry. The frame, capability, close, and lifecycle
pumps are intentionally left unchanged on this base.

Drops obsolete shell.rs ownership repair (dev removed the
CommandProcessGroups model) and server.rs bounded-ingress subsystem
(dev uses UnboundedReceiver which natively supports blocking_recv).
Re-bases daemon generations to 54/27/26 (dev+1) and regenerates the
authority manifest.

Lore-id: 10a7bde-rebased
Constraint: resolve only owned conflicts per owner directive
Rejected: rebase server.rs capacity constants | requires 848-line subsystem not on dev
Rejected: rebase shell.rs refresh_group_anchor | dev removed the model entirely
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: cargo build gjc-sdk + pi-natives, guard validate, sdk-operation-inventory 17/17
Not-tested: CI rerun (pending push)
Supersedes: 10a7bde
Empty commit so pull_request synchronize re-runs against current
origin/dev base 3832188 after the ownership-authority rebase.

Lore-id: 3665-ci-retrigger
Constraint: no product-source mutation
Confidence: high
Scope-risk: none
Reversibility: trivial
Tested: local guard validate + inventory + cargo build before push
Not-tested: remote Dev CI outcome
Exact-head CI shard-8 failed once when readiness published while the
parent still held telegram-daemon.steal under load. Keep the #3761
contract (steal must clear) but allow a bounded drain after ready.

Lore-id: 3665-3761-steal-drain
Constraint: do not drop the steal-must-clear assertion
Rejected: ignore steal leftover | weakens #3761 intermediate-symlink contract
Confidence: high
Scope-risk: narrow
Reversibility: trivial
Tested: bun test issue-3761-symlinked-notifications-activation
Not-tested: remote exact-head re-run outcome
@Yeachan-Heo
Yeachan-Heo force-pushed the fix/dev-ci-66475-tui-tools branch from 81a8b6b to 4139bfe Compare August 7, 2026 02:14
@Yeachan-Heo

Copy link
Copy Markdown
Owner Author

Terminal red-team verdict: MERGE_READY (pending exact-head green on latest tip)

Owned candidate: #3665 only. #3847 / #2723 remain deferred. Not blocking on #3950/#3764.

Scope

Evidence chain

Verdict: APPROVE / MERGE_READY once fresh exact-head CI completes green (cannot self-approve via review API).

@Yeachan-Heo
Yeachan-Heo merged commit 6498f01 into dev Aug 7, 2026
23 checks passed
@Yeachan-Heo

Copy link
Copy Markdown
Owner Author

Merged

Terminal red-team: APPROVE. Owned-only merge from emergency TUI batch. #3847/#2723 still deferred. #3950/#3764 not touched.

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.

2 participants