Skip to content

v0.2.53.0 fix: a stopped or retried server run does only what it reports, and what the chat reads about it is true - #144

Merged
ryota-murakami merged 16 commits into
mainfrom
codex/cycle-0058
Oct 27, 2026
Merged

ryota-murakami merged 16 commits into
mainfrom
codex/cycle-0058

Conversation

@ryota-murakami

@ryota-murakami ryota-murakami commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor
{
  "schema_version": 1,
  "pr": 144,
  "head": "ad13920cd16fe8406df662eab904c56b087b843b",
  "version": "0.2.53.0",
  "base": "main",
  "gate": {
    "tests": {
      "pass": 7911,
      "fail": 0,
      "skip": 10
    }
  },
  "session_kind": "interactive",
  "pregate": "pass @63551db80431 (6 checks, current for ad13920cd16f)",
  "issues": {
    "fixes": [],
    "refs": [
      143
    ],
    "flakes": []
  },
  "docs": {
    "status": "updated",
    "scope": "AGENTS.md, CHANGELOG.md, PRODUCT_GOAL.md, README.md, extension/README.md, extension/skills/codebook/SKILL.md, the v9 PNG (audit c58-docs-20261027T230828Z)"
  },
  "review_loop": {
    "passes": 3,
    "blocking_found": 0,
    "deferred": 0,
    "noted": 0,
    "fixed": 6,
    "scope": "frozen"
  }
}

Summary

Cycle 0057 shipped live explanation of a repository's own Node HTTP server, and its review left 13 defects that this bug-fix cycle closes (Refs #143). Stopping a server could record a SIGKILL it never sent, retry a signal on a process identified by its folder alone, or let a pause during the debugger's release run on until SIGTERM. The chat could read a GET described as changing nothing, a … n more bytes count taken from two different texts, and a 15-minute limit that never fires. With the database down it named no cause, and the LLM Wiki view's message flickered empty when a watch stopped.

Now a stop signals only the process group it started, confirmed by its start time before SIGTERM and again just before SIGKILL, which still lands within 5 s. It journals exactly what it sent and ends a server that pauses during the release at once. The tool text, help and packaged README say what the run really does. Skill 1.0.52 makes the chat read the run's output before it attributes a failure; in the N58 trial it named a refused database connection as observed output. The Wiki view keeps its message until the next one replaces it.

Blast radius

The changes stay inside the node-server run (launcher close, identity check, orphan sweep, VS Code debugger, request sender), its help and tool text, the bundled skill text and the LLM Wiki view's message. Browser and test runs, saved studies, replays and stored formats are untouched. The orphan record keeps its schema (its cwd field stays so records parse across versions), and the MCP API stays 1.8. Evidence: the full suite (7,920 tests) and the package tests pass on the final head, and the pinned-clone real-process tests pass 4/4 against laststance/switch-time and laststance/nsx with their databases (script ran).

Test Coverage

All new code paths have test coverage: every task closed red first (the fixed source swapped back fails its test), and every review fix after that too.

Tests: 7,911 → 7,920 on the full suite (+9 from the review fixes; the cycle's parts added the rest before /ship).
Coverage: 100% value-weighted (100% including 0 weakly covered paths)
Test value: 0 tests written, 1 rejected by the authoring gate, 1 existing test extended, 0 paths weakly covered.
Tests ran: tests count unavailable (runner summary on the final head: 7,921 tests, 7,911 pass, 0 fail, 10 skipped)

Pre-Landing Review

Three review passes, each fixing every finding (a bug-fix cycle answers none Skip), reaching the ship review limit with converged:false:

  • Pass 1 (6 specialists + red team): 4 informational findings, all fixed red first: the LLM Wiki view kept a message with no bound, a late SIGKILL could follow a close that had returned or a group that had ended, and the orphan record's cwd doc.
  • Pass 2: 1 red-team finding fixed (the kept message now follows the marker change's real pending state, not a timer).
  • Pass 3: 1 maintainability finding fixed (a test helper's doc comment).
  • Step 11 adversarial: the Codex structured review found [P1] a retried stop's SIGKILL after a group-existence probe alone (an id reused by another group could be killed). Fixed: the second identity check now starts 1 s before the kill bound, and a group found replaced, or a check that has not answered by then, gets no SIGKILL. Codex adversarial also found a stop during the release dropped by a following continued (now reported at once) and a Wiki facts read mixing two moments (now judged in one turn). The Claude adversarial pass led to a clearer message for a body that cannot be shown. All were reproduced red before the fix.

Every last-round finding is fixed, and no Critical or Major defect stays open, so no Issue records one. The local CodeRabbit CLI then found one more minor finding on the final range, fixed red first (0ca807e1); its rerun found none.

REVIEW_LOOP: 3 passes, converged:false (ship review limit), all findings fixed.

Gate edits: 51 listed, 31 read, 0 findings (patterns: RH-1,RH-3,RH-4,RH-12,RH-13,RH-14,RH-15,RH-16; unlisted idioms: none)

  • RH-16 extension/src/ownedNodeServerRun.ts: kept. The late SIGKILL's catch is best effort; the close's own SIGTERM and SIGKILL sequence still ends the group.

Outside review: Codex (structured and adversarial) completed; its findings are fixed above.

Exploratory QA

Functional smoke on each review pass, through the repository's own compiled tests (no editor, no database): the launcher's real fixture server, the run's host harness and the Wiki view with the real facts reader passed on every pass. The native editor check N58 passed on the pre-review candidate 6473c5c3 in VS Code (details in #143); it did not run again on the review fixes.

Design Review

No frontend files changed — design review skipped.

Eval Results

No prompt-related files changed — evals skipped. The bundled skill's text changed (1.0.52); its tests and the N58 native check cover it.

Scope Drift

Scope Check: CLEAN (tasks 1–14 of #143; the review fixes stay inside them).

Plan Completion

Tasks 1–13 done, each with a red-first test; task 14 (N58) PASS on 6473c5c3. The 15-check exact-HEAD gate and the local CodeRabbit CLI passed on the final head (below).

Linked Spec

Linked to #143 (the cycle Issue; closed by hand after merge with its closing comment). Spec archive: 20261028-065450-32319-cycle-0058-a-stopped-or-retried-server-run-does-only-what-it.md, filed 2026-10-28.

Issues

Refs #143

Verification Results

On the final head ad13920c:

  • 15-check exact-HEAD gate: every check exit 0 (format, typecheck, lint, health:static, dupes, dead-code; the suite 7,921 tests, 7,911 pass, 0 fail, 10 skipped; the five Reader DOM checks; test:package 1,081 / 1,071 / 0 / 10; health 86 A; the restore-context hook test 9/9).
  • Local CodeRabbit CLI on the final range: 1 minor finding (a Wiki marker read while the run ran, when the run and its marker change both ended during the read) fixed red first in 0ca807e1; the rerun on that tree found 0. ad13920c has the same tree.
  • Pinned-clone real-process tests: 4/4 on afbf15ff; the run and launcher are unchanged since.
  • VSIX packaged and checked (0.2.53, skill 1.0.52).

The Node 26.12.1 pin bump (the owner's commit 12672469) landed on this branch. On it, CI's health check refused (its reference pins Node 24.21.0) and four tests failed on Node 26. On the owner's decision it is kept unchanged on its own draft PR #145, where the Node 26 migration happens, and reverted here (ad13920c), so this PR merges on the verified Node 24.21.0.

TODOS

No TODO items completed in this PR.

Documentation

Status: updated. One factual edit, no blockers.

Scope: base 333c781 through the committed, staged and unstaged tree of codex/cycle-0058 (CHANGELOG.md, VERSION, extension/README.md, extension/package.json, constants.ts, protocol.ts, nodeServerHelp.ts, skill 1.0.52 and tests), plus the spec .gstack/tmp/c58/issue-body.md. Discovery covered root README.md, AGENTS.md, PRODUCT_GOAL.md, docs/agents/*.md, extension/README.md and extension/skills/codebook/SKILL.md; fixtures were excluded.

Documentation health:

Coverage debt: none; all shipped behaviors have reference coverage in extension/README.md, the node-server help resource and the CHANGELOG. No how-to or tutorial pages were required for this bug-fix cycle. Diagram drift: none; no architecture diagrams in the audited docs.

Test plan

  • cd extension && corepack pnpm test: 7,921 tests, 7,911 pass, 0 fail, 10 skipped (gate on ad13920c)
  • cd extension && corepack pnpm test:package: 1,081 tests, 1,071 pass, 0 fail, 10 skipped
  • CODEBOOK_NODE_SERVER_CLONES=… node --test extension/dist/tests/ownedNodeServerRun.pinnedClones.test.js: 4/4 pass
  • node extension/scripts/package.mjs + check-package.mjs: exit 0
  • 15-check exact-HEAD gate on ad13920c: every check exit 0
  • local CodeRabbit CLI on the final range: 0 findings after the fix
  • required CI on ad13920c (merge waits for it)

🤖 Generated with Claude Code

ryota-murakami and others added 13 commits October 28, 2026 07:01
…folder alone never authorizes a signal, and a pause during the detach is ended (Issue #143)
… the stopped-watch message replaces it (Issue #143)
…ll-bound assertions name why their bounds are the contract (Issue #143)

nodeServerJournalBounds.test.ts kept a debugging console.log and no fixed
expectation (task 11 asks for a hard-coded byte count): it now asserts the
4,190,377 kept bytes two full runs measured, beside the upper bound.
launchNodeServer.test.ts: gstack-timing-ok notes on the SIGKILL bound and the
SIGTERM-before-SIGKILL order (comments only).

Refs #143
- The LLM Wiki view keeps its message only while this window's marker
  settles: the own live marker counts as settling for 10 s after the run's
  end (the first retry of a failed marker change), and the view polls while
  it keeps a message, so a marker left standing never keeps "watching the
  chat" on screen (core review and red team).
- A late pause during a stop's detach is ended only while that release's
  close is under way and the group still has members: a retry's identity
  check that answers after the close returned, or a group that already
  ended, signals nothing (state-machines specialist, red team).
- The orphan record's cwd field says why it stays: no identity input, kept
  so records parse in every version (maintainability specialist).
- The coverage audit's facts test now covers the bounded settle.
The LLM Wiki view keeps its message exactly while this window's change of
its marker is pending (from the turn the run's end is recorded until the
change is made or given up, retries included), instead of for 10 s after
the run's end: a first change that failed no longer empties the message
before its retry turns the marker into the reservation, and a change
given up still clears it, through the view's own read at that end. The
extra poll of pass 1 is gone (red team, pass 2).
- A retried stop confirms the group again before SIGKILL: the second
  identity check starts NODE_SERVER_KILL_CHECK_LEAD_MS (1 s) before the
  kill bound, so SIGKILL goes only to a group confirmed then and still
  lands by the bound; a group found replaced gets nothing, and a check
  that has not answered by the bound sends nothing and fails the close
  (Codex structured P1, Codex adversarial High).
- The VS Code debugger reports a stop of the bound session that arrives
  after its release began in the turn it arrives, so a `continued` from
  the detach cannot drop it before the run ends the group (Codex
  adversarial).
- The LLM Wiki facts judge this window's marker settle in the same turn
  as the run facts, so a run that ends during the read keeps the view's
  message (Codex adversarial).
- A response body that cannot be prepared for display says that the
  server answered and with which HTTP status (Claude adversarial).
Co-Authored-By: Claude <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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

The bump (1267246) is kept unchanged on codex/node-26 (PR #145), where the
Node 26 migration it needs (four failing tests, the health baseline retaken
with the new pins) happens. Cycle 0058 merges on the verified Node 24.21.0
(owner decision, Refs #143).

This reverts commit 1267246.
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